fundus 0.15.0 → 0.17.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 (231) hide show
  1. package/README.md +158 -1
  2. package/build/client/_app/immutable/assets/2.X44Wyac-.css +1 -0
  3. package/build/client/_app/immutable/assets/2.X44Wyac-.css.br +0 -0
  4. package/build/client/_app/immutable/assets/2.X44Wyac-.css.gz +0 -0
  5. package/build/client/_app/immutable/assets/{3.C6xo25uI.css → 3.66PJT3JC.css} +1 -1
  6. package/build/client/_app/immutable/assets/3.66PJT3JC.css.br +0 -0
  7. package/build/client/_app/immutable/assets/3.66PJT3JC.css.gz +0 -0
  8. package/build/client/_app/immutable/assets/{AssetSourceMenu.IjDdjx3o.css → AssetSourceMenu.Buj2UxUg.css} +1 -1
  9. package/build/client/_app/immutable/assets/AssetSourceMenu.Buj2UxUg.css.br +0 -0
  10. package/build/client/_app/immutable/assets/AssetSourceMenu.Buj2UxUg.css.gz +0 -0
  11. package/build/client/_app/immutable/chunks/{VX-Uq_b9.js → 5fq8ySvR.js} +1 -1
  12. package/build/client/_app/immutable/chunks/5fq8ySvR.js.br +0 -0
  13. package/build/client/_app/immutable/chunks/5fq8ySvR.js.gz +0 -0
  14. package/build/client/_app/immutable/chunks/BcVZHIBD.js +1 -0
  15. package/build/client/_app/immutable/chunks/BcVZHIBD.js.br +0 -0
  16. package/build/client/_app/immutable/chunks/BcVZHIBD.js.gz +0 -0
  17. package/build/client/_app/immutable/chunks/DXiUbZ9S.js +2 -0
  18. package/build/client/_app/immutable/chunks/DXiUbZ9S.js.br +0 -0
  19. package/build/client/_app/immutable/chunks/DXiUbZ9S.js.gz +0 -0
  20. package/build/client/_app/immutable/chunks/H5KnxQLQ.js +108 -0
  21. package/build/client/_app/immutable/chunks/H5KnxQLQ.js.br +0 -0
  22. package/build/client/_app/immutable/chunks/H5KnxQLQ.js.gz +0 -0
  23. package/build/client/_app/immutable/chunks/{-8MKoIIe.js → jEVVu5G9.js} +1 -1
  24. package/build/client/_app/immutable/chunks/jEVVu5G9.js.br +0 -0
  25. package/build/client/_app/immutable/chunks/jEVVu5G9.js.gz +0 -0
  26. package/build/client/_app/immutable/entry/{app.CJpgt8H5.js → app.Z9n2k33I.js} +2 -2
  27. package/build/client/_app/immutable/entry/app.Z9n2k33I.js.br +0 -0
  28. package/build/client/_app/immutable/entry/app.Z9n2k33I.js.gz +0 -0
  29. package/build/client/_app/immutable/entry/start.DGo1uhI2.js +1 -0
  30. package/build/client/_app/immutable/entry/start.DGo1uhI2.js.br +0 -0
  31. package/build/client/_app/immutable/entry/start.DGo1uhI2.js.gz +0 -0
  32. package/build/client/_app/immutable/nodes/0.DiZpkhxP.js +1 -0
  33. package/build/client/_app/immutable/nodes/0.DiZpkhxP.js.br +0 -0
  34. package/build/client/_app/immutable/nodes/0.DiZpkhxP.js.gz +0 -0
  35. package/build/client/_app/immutable/nodes/{1.D6OhgXcC.js → 1.rgoSlmPu.js} +1 -1
  36. package/build/client/_app/immutable/nodes/1.rgoSlmPu.js.br +2 -0
  37. package/build/client/_app/immutable/nodes/1.rgoSlmPu.js.gz +0 -0
  38. package/build/client/_app/immutable/nodes/2.Dzp3a3be.js +3 -0
  39. package/build/client/_app/immutable/nodes/2.Dzp3a3be.js.br +0 -0
  40. package/build/client/_app/immutable/nodes/2.Dzp3a3be.js.gz +0 -0
  41. package/build/client/_app/immutable/nodes/3.mSsa2TDI.js +1 -0
  42. package/build/client/_app/immutable/nodes/3.mSsa2TDI.js.br +0 -0
  43. package/build/client/_app/immutable/nodes/3.mSsa2TDI.js.gz +0 -0
  44. package/build/client/_app/immutable/nodes/4.4oRGPYr4.js +2 -0
  45. package/build/client/_app/immutable/nodes/4.4oRGPYr4.js.br +0 -0
  46. package/build/client/_app/immutable/nodes/4.4oRGPYr4.js.gz +0 -0
  47. package/build/client/_app/version.json +1 -1
  48. package/build/client/_app/version.json.br +0 -0
  49. package/build/client/_app/version.json.gz +0 -0
  50. package/build/handler.js +8 -7
  51. package/build/handler.js.map +1 -1
  52. package/build/index.js +8 -7
  53. package/build/index.js.map +1 -1
  54. package/build/server/chunks/chunks/{context.js-CVuTSPjH.js → context.js-Dh0ibRIF.js} +818 -136
  55. package/build/server/chunks/chunks/context.js-Dh0ibRIF.js.map +1 -0
  56. package/build/server/chunks/chunks/{contract.js-itFN0Gon.js → contract.js-_LTMZBo2.js} +156 -58
  57. package/build/server/chunks/chunks/contract.js-_LTMZBo2.js.map +1 -0
  58. package/build/server/chunks/chunks/{core.js-CABVXpby.js → core.js-CTyKR4bu.js} +145 -156
  59. package/build/server/chunks/chunks/core.js-CTyKR4bu.js.map +1 -0
  60. package/build/server/chunks/chunks/{exports.js-VRV1_yEb.js → exports.js-gz2aNXzz.js} +2 -2
  61. package/build/server/chunks/chunks/{exports.js-VRV1_yEb.js.map → exports.js-gz2aNXzz.js.map} +1 -1
  62. package/build/server/chunks/chunks/{http.js-ChQRRKfZ.js → http.js-BiqUcAuu.js} +3 -2
  63. package/build/server/chunks/chunks/http.js-BiqUcAuu.js.map +1 -0
  64. package/build/server/chunks/chunks/{internal.js-qXxDe7VN.js → internal.js-DoH0cN5N.js} +5 -3
  65. package/build/server/chunks/chunks/internal.js-DoH0cN5N.js.map +1 -0
  66. package/build/server/chunks/chunks/internal2.js-BlXt2rfE.js.map +1 -1
  67. package/build/server/chunks/chunks/{manifest-membership.js-BnSECWpJ.js → manifest-membership.js-at1ixQdW.js} +10 -3
  68. package/build/server/chunks/chunks/manifest-membership.js-at1ixQdW.js.map +1 -0
  69. package/build/server/chunks/chunks/{raw-reconciliation.js-ZEOCk_jA.js → raw-reconciliation.js-CUH8IIJx.js} +3 -3
  70. package/build/server/chunks/chunks/raw-reconciliation.js-CUH8IIJx.js.map +1 -0
  71. package/build/server/chunks/chunks/{raw-reconciliation2.js-CscuoBC2.js → raw-reconciliation2.js-z4xl5zw2.js} +2 -2
  72. package/build/server/chunks/chunks/{raw-reconciliation2.js-CscuoBC2.js.map → raw-reconciliation2.js-z4xl5zw2.js.map} +1 -1
  73. package/build/server/chunks/chunks/{shared.js-DnEOHbgT.js → shared.js-CI-ZkPQn.js} +2 -2
  74. package/build/server/chunks/chunks/{shared.js-DnEOHbgT.js.map → shared.js-CI-ZkPQn.js.map} +1 -1
  75. package/build/server/chunks/chunks/{utils.js-lNH0hKSx.js → utils.js-gXYLxRG9.js} +3 -3
  76. package/build/server/chunks/chunks/{utils.js-lNH0hKSx.js.map → utils.js-gXYLxRG9.js.map} +1 -1
  77. package/build/server/chunks/entries/endpoints/api/_...path_/{_server.ts.js-z988EDp2.js → _server.ts.js-CdDjuW0r.js} +6 -6
  78. package/build/server/chunks/entries/endpoints/api/_...path_/{_server.ts.js-z988EDp2.js.map → _server.ts.js-CdDjuW0r.js.map} +1 -1
  79. package/build/server/chunks/entries/endpoints/api/assets/_id_/{_server.ts.js-C68ru6gS.js → _server.ts.js-OWM1eORG.js} +9 -7
  80. package/build/server/chunks/entries/endpoints/api/assets/_id_/{_server.ts.js-C68ru6gS.js.map → _server.ts.js-OWM1eORG.js.map} +1 -1
  81. package/build/server/chunks/entries/endpoints/api/assets/_id_/raw/{_server.ts.js-C0tk6RFk.js → _server.ts.js-DoG-7ZpZ.js} +9 -7
  82. package/build/server/chunks/entries/endpoints/api/assets/_id_/raw/{_server.ts.js-C0tk6RFk.js.map → _server.ts.js-DoG-7ZpZ.js.map} +1 -1
  83. package/build/server/chunks/entries/endpoints/api/assets/_id_/reimport/{_server.ts.js-I03oZuo8.js → _server.ts.js-CAWjVeGd.js} +9 -7
  84. package/build/server/chunks/entries/endpoints/api/assets/_id_/reimport/{_server.ts.js-I03oZuo8.js.map → _server.ts.js-CAWjVeGd.js.map} +1 -1
  85. package/build/server/chunks/entries/endpoints/api/assets/_id_/retag/_server.ts.js-CqS4aALY.js +38 -0
  86. package/build/server/chunks/entries/endpoints/api/assets/_id_/retag/_server.ts.js-CqS4aALY.js.map +1 -0
  87. package/build/server/chunks/entries/endpoints/api/assets/{_server.ts.js-BsQB8YDq.js → _server.ts.js-Bo_EsYXJ.js} +9 -7
  88. package/build/server/chunks/entries/endpoints/api/assets/{_server.ts.js-BsQB8YDq.js.map → _server.ts.js-Bo_EsYXJ.js.map} +1 -1
  89. package/build/server/chunks/entries/endpoints/api/assets/delete/{_server.ts.js-CJuFE6Fb.js → _server.ts.js-DW4w0XAr.js} +9 -7
  90. package/build/server/chunks/entries/endpoints/api/assets/delete/{_server.ts.js-CJuFE6Fb.js.map → _server.ts.js-DW4w0XAr.js.map} +1 -1
  91. package/build/server/chunks/entries/endpoints/api/assets/move/{_server.ts.js-DuOZRRiA.js → _server.ts.js-_MiNPnSy.js} +9 -7
  92. package/build/server/chunks/entries/endpoints/api/assets/move/{_server.ts.js-DuOZRRiA.js.map → _server.ts.js-_MiNPnSy.js.map} +1 -1
  93. package/build/server/chunks/entries/endpoints/api/folders/_path_/{_server.ts.js-DGzYpQbv.js → _server.ts.js-DwbrQnBc.js} +9 -7
  94. package/build/server/chunks/entries/endpoints/api/folders/_path_/{_server.ts.js-DGzYpQbv.js.map → _server.ts.js-DwbrQnBc.js.map} +1 -1
  95. package/build/server/chunks/entries/endpoints/api/folders/{_server.ts.js-B045QoCA.js → _server.ts.js-CEnHQf3b.js} +9 -7
  96. package/build/server/chunks/entries/endpoints/api/folders/{_server.ts.js-B045QoCA.js.map → _server.ts.js-CEnHQf3b.js.map} +1 -1
  97. package/build/server/chunks/entries/endpoints/api/imports/{_server.ts.js-HUkVdz19.js → _server.ts.js-BZDuJZtF.js} +9 -7
  98. package/build/server/chunks/entries/endpoints/api/imports/{_server.ts.js-HUkVdz19.js.map → _server.ts.js-BZDuJZtF.js.map} +1 -1
  99. package/build/server/chunks/entries/endpoints/api/manifests/_name_/{_server.ts.js-ry509mom.js → _server.ts.js-DRgdpKKd.js} +9 -7
  100. package/build/server/chunks/entries/endpoints/api/manifests/_name_/{_server.ts.js-ry509mom.js.map → _server.ts.js-DRgdpKKd.js.map} +1 -1
  101. package/build/server/chunks/entries/endpoints/api/manifests/{_server.ts.js-DU0J7U25.js → _server.ts.js-CP5QyIhz.js} +9 -7
  102. package/build/server/chunks/entries/endpoints/api/manifests/{_server.ts.js-DU0J7U25.js.map → _server.ts.js-CP5QyIhz.js.map} +1 -1
  103. package/build/server/chunks/entries/endpoints/api/raw/adopt/{_server.ts.js-AZIV2PIn.js → _server.ts.js-BKEvt065.js} +9 -7
  104. package/build/server/chunks/entries/endpoints/api/raw/adopt/{_server.ts.js-AZIV2PIn.js.map → _server.ts.js-BKEvt065.js.map} +1 -1
  105. package/build/server/chunks/entries/endpoints/api/raw/edited/accept/{_server.ts.js-CDL0hCfM.js → _server.ts.js-C_zihkDS.js} +9 -7
  106. package/build/server/chunks/entries/endpoints/api/raw/edited/accept/{_server.ts.js-CDL0hCfM.js.map → _server.ts.js-C_zihkDS.js.map} +1 -1
  107. package/build/server/chunks/entries/endpoints/api/raw/edited/dismiss/{_server.ts.js-B13c17fq.js → _server.ts.js-watkBmy6.js} +9 -7
  108. package/build/server/chunks/entries/endpoints/api/raw/edited/dismiss/{_server.ts.js-B13c17fq.js.map → _server.ts.js-watkBmy6.js.map} +1 -1
  109. package/build/server/chunks/entries/endpoints/api/reconcile/{_server.ts.js-BCxjyAGC.js → _server.ts.js-YtumLIou.js} +9 -7
  110. package/build/server/chunks/entries/endpoints/api/reconcile/{_server.ts.js-BCxjyAGC.js.map → _server.ts.js-YtumLIou.js.map} +1 -1
  111. package/build/server/chunks/entries/endpoints/api/reveal/{_server.ts.js-BveeMZc2.js → _server.ts.js-Dkouuu-M.js} +9 -7
  112. package/build/server/chunks/entries/endpoints/api/reveal/{_server.ts.js-BveeMZc2.js.map → _server.ts.js-Dkouuu-M.js.map} +1 -1
  113. package/build/server/chunks/entries/endpoints/api/state/{_server.ts.js-BZjTd9a0.js → _server.ts.js-DwsEQeuf.js} +9 -7
  114. package/build/server/chunks/entries/endpoints/api/state/{_server.ts.js-BZjTd9a0.js.map → _server.ts.js-DwsEQeuf.js.map} +1 -1
  115. package/build/server/chunks/entries/endpoints/api/usage/{_server.ts.js-BbTfPvC9.js → _server.ts.js-CdQxfhV3.js} +9 -7
  116. package/build/server/chunks/entries/endpoints/api/usage/{_server.ts.js-BbTfPvC9.js.map → _server.ts.js-CdQxfhV3.js.map} +1 -1
  117. package/build/server/chunks/entries/endpoints/files/_...path_/{_server.ts.js-8VPJMLBk.js → _server.ts.js-DDdMocWj.js} +6 -6
  118. package/build/server/chunks/entries/endpoints/files/_...path_/{_server.ts.js-8VPJMLBk.js.map → _server.ts.js-DDdMocWj.js.map} +1 -1
  119. package/build/server/chunks/entries/endpoints/files/proxy/_...path_/{_server.ts.js-BqR2J2sB.js → _server.ts.js-DbzjbH32.js} +9 -7
  120. package/build/server/chunks/entries/endpoints/files/proxy/_...path_/{_server.ts.js-BqR2J2sB.js.map → _server.ts.js-DbzjbH32.js.map} +1 -1
  121. package/build/server/chunks/entries/endpoints/files/raw/_...path_/{_server.ts.js-DbA28dCY.js → _server.ts.js-K_JbXZsU.js} +9 -7
  122. package/build/server/chunks/entries/endpoints/files/raw/_...path_/{_server.ts.js-DbA28dCY.js.map → _server.ts.js-K_JbXZsU.js.map} +1 -1
  123. package/build/server/chunks/entries/{hooks.server.js-9PBc_3Jh.js → hooks.server.js-DgZAVFbQ.js} +8 -6
  124. package/build/server/chunks/entries/{hooks.server.js-9PBc_3Jh.js.map → hooks.server.js-DgZAVFbQ.js.map} +1 -1
  125. package/build/server/chunks/{handler-BHt7eOOX.js → handler-CFkKak8t.js} +5 -5
  126. package/build/server/chunks/{handler-BHt7eOOX.js.map → handler-CFkKak8t.js.map} +1 -1
  127. package/build/server/chunks/{index.js-DcVaL-Ja.js → index.js-B1IroJH5.js} +5 -5
  128. package/build/server/chunks/{index.js-DcVaL-Ja.js.map → index.js-B1IroJH5.js.map} +1 -1
  129. package/build/server/chunks/{manifest.js-DgjSU4wg.js → manifest.js-DNDBsrEU.js} +36 -29
  130. package/build/server/chunks/manifest.js-DNDBsrEU.js.map +1 -0
  131. package/build/server/chunks/nodes/{0.js-BgTB-_Zt.js → 0.js-CZ3mZUZl.js} +2 -2
  132. package/build/server/chunks/nodes/{0.js-BgTB-_Zt.js.map → 0.js-CZ3mZUZl.js.map} +1 -1
  133. package/build/server/chunks/nodes/1.js-BmDzLKxV.js +7 -0
  134. package/build/server/chunks/nodes/{1.js-DNabcIPP.js.map → 1.js-BmDzLKxV.js.map} +1 -1
  135. package/build/server/chunks/nodes/2.js-Dirm-bY-.js +7 -0
  136. package/build/server/chunks/nodes/2.js-Dirm-bY-.js.map +1 -0
  137. package/build/server/chunks/nodes/3.js-DOqHmSWt.js +7 -0
  138. package/build/server/chunks/nodes/3.js-DOqHmSWt.js.map +1 -0
  139. package/build/server/chunks/nodes/4.js-C8pmF8IP.js +7 -0
  140. package/build/server/chunks/nodes/{4.js-BE7ZG9vA.js.map → 4.js-C8pmF8IP.js.map} +1 -1
  141. package/dist/config.d.ts +3 -3
  142. package/dist/config.js +2 -2
  143. package/dist/core/api-types.d.ts +24 -3
  144. package/dist/core/config.d.ts +84 -0
  145. package/dist/core/config.js +9 -0
  146. package/dist/core/index.d.ts +10 -5
  147. package/dist/core/index.js +5 -2
  148. package/dist/core/ingest.d.ts +1 -6
  149. package/dist/core/ingest.js +4 -21
  150. package/dist/core/library-validation.d.ts +13 -0
  151. package/dist/core/library-validation.js +48 -0
  152. package/dist/core/library.d.ts +19 -0
  153. package/dist/core/library.js +4 -4
  154. package/dist/core/manifest-membership.d.ts +2 -2
  155. package/dist/core/package-declaration.d.ts +43 -0
  156. package/dist/core/package-declaration.js +80 -0
  157. package/dist/core/package-merge.d.ts +65 -0
  158. package/dist/core/package-merge.js +173 -0
  159. package/dist/core/propose-asset-id.d.ts +10 -0
  160. package/dist/core/propose-asset-id.js +25 -0
  161. package/dist/core/reference-graph.d.ts +3 -3
  162. package/dist/server/build.js +26 -11
  163. package/dist/server/check.d.ts +13 -3
  164. package/dist/server/check.js +112 -24
  165. package/dist/server/cli-commands.d.ts +2 -2
  166. package/dist/server/cli-commands.js +213 -29
  167. package/dist/server/codegen.d.ts +3 -1
  168. package/dist/server/codegen.js +18 -0
  169. package/dist/server/config-loader.d.ts +36 -1
  170. package/dist/server/config-loader.js +190 -4
  171. package/dist/server/http.js +1 -0
  172. package/dist/server/importers/figma.d.ts +26 -3
  173. package/dist/server/importers/figma.js +114 -1
  174. package/dist/server/library-store.d.ts +20 -1
  175. package/dist/server/library-store.js +121 -60
  176. package/dist/server/operations.d.ts +12 -0
  177. package/dist/server/operations.js +283 -48
  178. package/package.json +1 -1
  179. package/build/client/_app/immutable/assets/2.C-1MfvLQ.css +0 -1
  180. package/build/client/_app/immutable/assets/2.C-1MfvLQ.css.br +0 -0
  181. package/build/client/_app/immutable/assets/2.C-1MfvLQ.css.gz +0 -0
  182. package/build/client/_app/immutable/assets/3.C6xo25uI.css.br +0 -0
  183. package/build/client/_app/immutable/assets/3.C6xo25uI.css.gz +0 -0
  184. package/build/client/_app/immutable/assets/AssetSourceMenu.IjDdjx3o.css.br +0 -0
  185. package/build/client/_app/immutable/assets/AssetSourceMenu.IjDdjx3o.css.gz +0 -0
  186. package/build/client/_app/immutable/chunks/-8MKoIIe.js.br +0 -0
  187. package/build/client/_app/immutable/chunks/-8MKoIIe.js.gz +0 -0
  188. package/build/client/_app/immutable/chunks/D1wFzWdi.js +0 -108
  189. package/build/client/_app/immutable/chunks/D1wFzWdi.js.br +0 -0
  190. package/build/client/_app/immutable/chunks/D1wFzWdi.js.gz +0 -0
  191. package/build/client/_app/immutable/chunks/DmQb0SN8.js +0 -2
  192. package/build/client/_app/immutable/chunks/DmQb0SN8.js.br +0 -0
  193. package/build/client/_app/immutable/chunks/DmQb0SN8.js.gz +0 -0
  194. package/build/client/_app/immutable/chunks/N1X6Qzcl.js +0 -1
  195. package/build/client/_app/immutable/chunks/N1X6Qzcl.js.br +0 -0
  196. package/build/client/_app/immutable/chunks/N1X6Qzcl.js.gz +0 -0
  197. package/build/client/_app/immutable/chunks/VX-Uq_b9.js.br +0 -1
  198. package/build/client/_app/immutable/chunks/VX-Uq_b9.js.gz +0 -0
  199. package/build/client/_app/immutable/entry/app.CJpgt8H5.js.br +0 -0
  200. package/build/client/_app/immutable/entry/app.CJpgt8H5.js.gz +0 -0
  201. package/build/client/_app/immutable/entry/start.DToPJitz.js +0 -1
  202. package/build/client/_app/immutable/entry/start.DToPJitz.js.br +0 -1
  203. package/build/client/_app/immutable/entry/start.DToPJitz.js.gz +0 -0
  204. package/build/client/_app/immutable/nodes/0.Co4Hh8k6.js +0 -1
  205. package/build/client/_app/immutable/nodes/0.Co4Hh8k6.js.br +0 -0
  206. package/build/client/_app/immutable/nodes/0.Co4Hh8k6.js.gz +0 -0
  207. package/build/client/_app/immutable/nodes/1.D6OhgXcC.js.br +0 -3
  208. package/build/client/_app/immutable/nodes/1.D6OhgXcC.js.gz +0 -0
  209. package/build/client/_app/immutable/nodes/2.sBDjyIQu.js +0 -3
  210. package/build/client/_app/immutable/nodes/2.sBDjyIQu.js.br +0 -0
  211. package/build/client/_app/immutable/nodes/2.sBDjyIQu.js.gz +0 -0
  212. package/build/client/_app/immutable/nodes/3.DDt73kMC.js +0 -1
  213. package/build/client/_app/immutable/nodes/3.DDt73kMC.js.br +0 -0
  214. package/build/client/_app/immutable/nodes/3.DDt73kMC.js.gz +0 -0
  215. package/build/client/_app/immutable/nodes/4.FsXXhVSP.js +0 -2
  216. package/build/client/_app/immutable/nodes/4.FsXXhVSP.js.br +0 -0
  217. package/build/client/_app/immutable/nodes/4.FsXXhVSP.js.gz +0 -0
  218. package/build/server/chunks/chunks/context.js-CVuTSPjH.js.map +0 -1
  219. package/build/server/chunks/chunks/contract.js-itFN0Gon.js.map +0 -1
  220. package/build/server/chunks/chunks/core.js-CABVXpby.js.map +0 -1
  221. package/build/server/chunks/chunks/http.js-ChQRRKfZ.js.map +0 -1
  222. package/build/server/chunks/chunks/internal.js-qXxDe7VN.js.map +0 -1
  223. package/build/server/chunks/chunks/manifest-membership.js-BnSECWpJ.js.map +0 -1
  224. package/build/server/chunks/chunks/raw-reconciliation.js-ZEOCk_jA.js.map +0 -1
  225. package/build/server/chunks/manifest.js-DgjSU4wg.js.map +0 -1
  226. package/build/server/chunks/nodes/1.js-DNabcIPP.js +0 -7
  227. package/build/server/chunks/nodes/2.js-CcVBvLSR.js +0 -7
  228. package/build/server/chunks/nodes/2.js-CcVBvLSR.js.map +0 -1
  229. package/build/server/chunks/nodes/3.js-DreG5rig.js +0 -7
  230. package/build/server/chunks/nodes/3.js-DreG5rig.js.map +0 -1
  231. package/build/server/chunks/nodes/4.js-BE7ZG9vA.js +0 -7
package/README.md CHANGED
@@ -235,7 +235,9 @@ export default defineConfig({
235
235
  import: {
236
236
  figma: {
237
237
  token: process.env.FIGMA_ACCESS_TOKEN,
238
- defaults: { scale: 2 }
238
+ defaults: { scale: 2 },
239
+ // Default file for tag imports that carry no explicit file key.
240
+ defaultFileKey: process.env.FIGMA_FILE_KEY
239
241
  }
240
242
  }
241
243
  });
@@ -257,6 +259,161 @@ temporary URL. The downloaded original stays local, so builds remain offline.
257
259
  Replacing or accepting an external edit to it intentionally disconnects the
258
260
  Figma source.
259
261
 
262
+ ### Reference by tag instead of node id
263
+
264
+ Node ids are brittle: restructuring a frame or importing from a copied document
265
+ can change them. Instead you can reference a node by a **tag** — a stable Fundus
266
+ asset id stored in Figma as shared plugin data (`fundus.assetId`). Fundus
267
+ resolves the tag to the current node through the REST API at import time, so the
268
+ reference survives node moves and file copies, and you can see in Figma which
269
+ frames are wired to Fundus.
270
+
271
+ In tag mode **the tag is the asset id** — you do not choose a separate id. You do
272
+ not rename such an asset directly; instead you change its tag, which renames the
273
+ asset to the new tag (a tag already used by another asset is rejected). The tag,
274
+ file key, and export scale can all be edited in place. A tag import still needs a
275
+ file: pass `--figma-file` (a file key or a link) or set
276
+ `import.figma.defaultFileKey` for imports that omit it.
277
+
278
+ ```bash
279
+ # Import by tag (id = the tag); uses defaultFileKey when --figma-file is omitted.
280
+ npx fundus asset ingest --from figma --figma-tag navigationPanel --type slice \
281
+ --figma-file 'https://www.figma.com/design/abc/UI' --scale 3
282
+ # A plain reimport re-resolves the tag (picks up a moved node).
283
+ npx fundus asset reimport navigationPanel
284
+ # Re-point in place to another file and/or scale (the tag, hence the id, stays).
285
+ npx fundus asset reimport navigationPanel --figma-file def456 --scale 3
286
+ # Change the tag — this renames the asset to the new tag.
287
+ npx fundus asset reimport navigationPanel --figma-tag mainNavigationPanel
288
+ # Replace an asset's bytes from its own tag.
289
+ npx fundus asset replace navigationPanel --from figma --figma-tag navigationPanel
290
+ ```
291
+
292
+ The editor import dialog offers the same choice through a **Link / Tag** switch
293
+ and remembers the last one used. On a tag asset's page, the Source section edits
294
+ the tag, file key, and scale in place — changing the tag renames the asset.
295
+
296
+ ## Packages
297
+
298
+ A **Package** is an npm package (or a local file) that contributes a _partial_
299
+ library — the schematic asset assignment for a reusable feature's UI (slot ids,
300
+ kinds, manifest membership, slice insets, Figma import references) — while the
301
+ final bytes and the single delivery graph stay owned by the consuming app. List
302
+ Packages on the host config; Fundus merges them **under** the host library (host
303
+ wins, per-field deep) into one effective library before validation and codegen.
304
+
305
+ ```ts
306
+ import { defineConfig } from 'fundus/config';
307
+
308
+ export default defineConfig({
309
+ // paths created by `fundus init`...
310
+ packages: [
311
+ '@your-scope/events-ui', // a package name, resolved via its package.json "fundus" field
312
+ './packages/promo/fundus.package.json' // or a path to a declaration file
313
+ ]
314
+ });
315
+ ```
316
+
317
+ A package that is referenced by name declares where its declaration
318
+ lives in its own `package.json`:
319
+
320
+ ```jsonc
321
+ {
322
+ "name": "@your-scope/events-ui",
323
+ "fundus": { "package": "./fundus.package.json" }
324
+ // …or a TypeScript module: "fundus": { "package": "./fundus.package.ts" }
325
+ }
326
+ ```
327
+
328
+ ### TypeScript declarations + a typed assets contract
329
+
330
+ The declaration may be a `.ts`/`.js` module (loaded via the same jiti path as
331
+ `fundus.config.ts`) instead of JSON. Author it with `definePackage(...)`, which
332
+ keeps the resource `type`s literal so the package can derive a typed assets
333
+ object from its own declaration — **no codegen**:
334
+
335
+ ```ts
336
+ // fundus.package.ts
337
+ import { definePackage } from 'fundus/config';
338
+ export default definePackage({
339
+ manifests: { myEvents: { emoji: '🛒' } },
340
+ assets: { myTile: { type: 'image', manifests: ['myEvents'] } } // just id+type+manifests
341
+ });
342
+ ```
343
+
344
+ ```ts
345
+ // somewhere in the package
346
+ import type { PackageAssets } from 'fundus/config';
347
+ export type MyAssets = PackageAssets<typeof import('./fundus.package').default>;
348
+ // → { myTile: ImageManifestEntry }
349
+ ```
350
+
351
+ `parameters` is optional in the authored declaration (defaults to `{}`), so a
352
+ pure-contract resource is just `{ type, manifests }`; the consuming app supplies
353
+ processing parameters (e.g. an image `preset`) when it fills the slot. The app
354
+ builds the assets object from its (app-side) generated manifest — structurally
355
+ assignable to `MyAssets` — and passes it to the package's components.
356
+
357
+ ### The `fundus.package.json` format
358
+
359
+ Same model as the host library, with two relaxations: assets are **byte-less
360
+ slots** (no `raw`/`rawHash`) that the app fills, and `folders` are ignored. A
361
+ slot may carry an `importSource` the app materializes.
362
+
363
+ ```jsonc
364
+ {
365
+ "version": 1, // declaration schema version
366
+ "assets": {
367
+ "eventTileBackground": {
368
+ "type": "slice",
369
+ "manifests": ["events"],
370
+ "parameters": { "slicing": { "mode": "three-vertical", "top": 40, "bottom": 40 } },
371
+ "importSource": {
372
+ "importer": "figma",
373
+ "parameters": { "fileKey": "…", "nodeId": "…", "scale": 3 }
374
+ }
375
+ }
376
+ },
377
+ "manifests": { "events": { "emoji": "🛒" } } // may introduce new manifest names + editor tags
378
+ }
379
+ ```
380
+
381
+ ### Merge precedence (host wins, per field)
382
+
383
+ | Field | Rule |
384
+ | ---------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- |
385
+ | `type` | Must match — a differing type is a hard error (changing kind is a different asset). |
386
+ | `parameters` | Deep-merged; host keys overlay the package's recursively (override only `slicing`, inherit the rest). |
387
+ | `raw` + `rawHash` + `importSource` | One coherent source unit — if the host supplies bytes or its own import source, it replaces the package's wholesale; otherwise the package's is inherited. |
388
+ | `manifests` | Union (deduped, sorted) — the app can _add_ placements without dropping the package's intent. |
389
+
390
+ The asset id space is flat and shared: the app overrides a package asset by
391
+ using its exact id. A host↔package collision is an override (an advisory
392
+ `package-overridden`); a package↔package collision on one id is a hard error.
393
+
394
+ ### Slots and the fill contract
395
+
396
+ A Package ships slots; the app supplies the bytes. `fundus check` fails when a
397
+ _delivered_ slot has no bytes:
398
+
399
+ - `slot-unfilled` — delivered but has no bytes, no resolvable `importSource`, and no host override.
400
+ - `slot-unmaterialized` — has an `importSource` but has not been imported yet; run the import to fill it.
401
+
402
+ An inert (undelivered) slot is not an error. **Overriding a package asset means
403
+ filling it**: import or upload bytes with the slot's id and the host record
404
+ becomes an override (with partial `parameters` that inherit the rest from the
405
+ package). The editor shows package assets read-only and origin-tagged; deleting
406
+ an override reverts to the package version.
407
+
408
+ ### The one invariant
409
+
410
+ The delivered proxy URL (`proxyBasePath` + content hash) is an app fact. Codegen
411
+ still runs only in the app, over the merged library, with the app's config — a
412
+ Package ships _declarations only_, never pre-baked modules or proxies. This is
413
+ what keeps URL dedup and a single preload lifecycle possible. (In this release a
414
+ Package ships byte-less slots only; committed package bytes are a future
415
+ addition. A Package cannot itself declare `packages`.)
416
+
260
417
  ## Is Fundus for me?
261
418
 
262
419
  Fundus fits SvelteKit apps that keep product assets in git and want repeatable
@@ -0,0 +1 @@
1
+ .submenu-anchor.svelte-13hq4tl{position:relative}button.svelte-13hq4tl{width:100%;color:var(--text);font:inherit;text-align:left;white-space:nowrap;background:0 0;border:0;border-radius:4px;padding:6px 8px}button.svelte-13hq4tl:hover,button.svelte-13hq4tl:focus-visible{background:var(--accent-soft);outline:none}.submenu-anchor.svelte-13hq4tl:has(.submenu:where(.svelte-13hq4tl))>.submenu-trigger:where(.svelte-13hq4tl){background:var(--accent-soft);outline:none}button.svelte-13hq4tl:disabled{color:var(--text-faint);background:0 0}.submenu-trigger.svelte-13hq4tl{justify-content:space-between;align-items:center;gap:12px;display:flex}.arrow.svelte-13hq4tl{color:var(--text-faint);font-size:16px;line-height:12px}.submenu.svelte-13hq4tl{z-index:1;background:var(--panel-raised);border:1px solid var(--border);border-radius:6px;min-width:168px;max-width:320px;padding:4px;position:absolute;top:-5px;left:calc(100% - 4px);overflow-y:auto;box-shadow:0 8px 24px #00000073}.submenu.opens-left.svelte-13hq4tl{left:auto;right:calc(100% - 4px)}.submenu.svelte-13hq4tl button:where(.svelte-13hq4tl){text-overflow:ellipsis;overflow:hidden}hr.svelte-13hq4tl{background:var(--border);border:0;height:1px;margin:4px 8px}.context-menu.svelte-109nkvw{z-index:200;background:var(--panel-raised);border:1px solid var(--border);border-radius:6px;width:168px;padding:4px;position:fixed;box-shadow:0 8px 24px #00000073}button.svelte-109nkvw{width:100%;color:var(--text);font:inherit;text-align:left;background:0 0;border:0;border-radius:4px;padding:6px 8px}button.svelte-109nkvw:hover,button.svelte-109nkvw:focus-visible{background:var(--accent-soft);outline:none}button.danger.svelte-109nkvw{color:var(--danger)}button.svelte-109nkvw:disabled{color:var(--text-dim);cursor:default}button.svelte-109nkvw:disabled:hover,button.svelte-109nkvw:disabled:focus-visible{background:0 0}hr.svelte-109nkvw{background:var(--border);border:0;height:1px;margin:4px 8px}.manifest-label.svelte-1b4m5oj{align-items:center;gap:4px;min-width:0;display:inline-flex}.emoji.svelte-1b4m5oj{flex:none;line-height:1}.name.svelte-1b4m5oj{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.chip.svelte-1b4m5oj{background:color-mix(in srgb, var(--manifest-color) 20%, transparent);color:var(--manifest-color);border-radius:4px;padding:0 5px;font-size:10px}.chip.passive.svelte-1b4m5oj{border:1px dashed var(--manifest-color);background:0 0}.browse-select.svelte-dr99ka{border-radius:4px;align-items:center;min-width:0;height:24px;padding:0 6px 0 0;display:inline-flex}.browse-select.svelte-dr99ka:focus-within{border-color:var(--accent)}.browse-select.filter-active.svelte-dr99ka{border-color:var(--accent);background:var(--accent-soft);color:var(--accent)}.browse-select.filter-active.svelte-dr99ka .icon-slot:where(.svelte-dr99ka){color:var(--accent)}.icon-slot.svelte-dr99ka{width:24px;height:24px;color:var(--text-dim);-webkit-user-select:none;user-select:none;flex:none;justify-content:center;align-items:center;display:flex}select.svelte-dr99ka{background:0 0;border:0;outline:none;min-width:0;height:100%;margin:0;padding:0 6px 0 0}.filter-field .popover-anchor{width:100%}.multi-select-trigger.svelte-1yxb8yh{text-align:left;border-radius:4px;align-items:center;gap:5px;width:100%;min-width:0;height:24px;padding:0 6px 0 0;display:flex}.multi-select-trigger.filter-active.svelte-1yxb8yh{border-color:var(--accent);background:var(--accent-soft);color:var(--accent)}.icon-slot.svelte-1yxb8yh{width:24px;height:24px;color:var(--text-dim);flex:none;place-items:center;display:grid}.filter-active.svelte-1yxb8yh .icon-slot:where(.svelte-1yxb8yh){color:var(--accent)}.summary.svelte-1yxb8yh{min-width:0;color:var(--text);text-overflow:ellipsis;white-space:nowrap;flex:1;overflow:hidden}.filter-active.svelte-1yxb8yh .summary:where(.svelte-1yxb8yh){color:var(--accent)}.selected-count.svelte-1yxb8yh{background:var(--accent);min-width:15px;height:15px;color:var(--text);border-radius:999px;flex:none;place-items:center;padding:0 4px;font-size:9px;font-weight:700;display:grid}.multi-select-menu.svelte-1yxb8yh{width:max(160px, var(--multi-select-width,100%));min-width:160px}.menu-header.svelte-1yxb8yh{border-bottom:1px solid var(--border-soft);color:var(--text-dim);justify-content:space-between;align-items:center;gap:12px;padding:1px 4px 6px;font-size:10px;display:flex}.menu-header.svelte-1yxb8yh button:where(.svelte-1yxb8yh){color:var(--accent);font:inherit;background:0 0;border:0;padding:1px 2px}.menu-header.svelte-1yxb8yh button:where(.svelte-1yxb8yh):disabled{opacity:.4;cursor:default}.options.svelte-1yxb8yh{max-height:224px;padding-top:4px;overflow-y:auto}.options.svelte-1yxb8yh label:where(.svelte-1yxb8yh){border-radius:var(--radius-small);min-width:0;height:26px;color:var(--text);cursor:pointer;align-items:center;gap:7px;padding:0 5px;display:flex}.options.svelte-1yxb8yh label:where(.svelte-1yxb8yh):hover,.options.svelte-1yxb8yh label:where(.svelte-1yxb8yh):focus-within{background:var(--accent-soft)}.options.svelte-1yxb8yh label.selected:where(.svelte-1yxb8yh){color:var(--accent)}.options.svelte-1yxb8yh input:where(.svelte-1yxb8yh){width:12px;height:12px;accent-color:var(--accent);flex:none;margin:0}.options.svelte-1yxb8yh span:where(.svelte-1yxb8yh){text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}.browse-checkbox.svelte-sa6meb{cursor:pointer;align-items:center;min-width:0;height:24px;display:inline-flex}.browse-checkbox.svelte-sa6meb:focus-within .value:where(.svelte-sa6meb){color:var(--accent)}.icon-slot.svelte-sa6meb{-webkit-user-select:none;user-select:none;flex:none;justify-content:center;align-items:center;width:24px;height:24px;display:flex}.value.svelte-sa6meb{min-width:0;color:var(--text);text-overflow:ellipsis;white-space:nowrap;flex:1;font-size:11px;line-height:14px;overflow:hidden}input.svelte-sa6meb{width:12px;height:12px;accent-color:var(--accent);margin:0}.library-view.svelte-1uha8ag{flex:1;min-height:0;display:flex}.page.svelte-1uha8ag{flex:1;min-height:0;padding:16px;position:relative;overflow-y:auto}.library-toolbar.svelte-1uha8ag{flex-wrap:wrap;align-items:center;gap:8px;margin-bottom:16px;display:flex}.library-toolbar.svelte-1uha8ag .control{border-radius:var(--radius-small);height:24px}.selection-controls.svelte-1uha8ag{align-items:center;gap:8px;display:inline-flex}.selection-action.svelte-1uha8ag:disabled{opacity:.45;cursor:default}.selection-action.svelte-1uha8ag{justify-content:center;align-items:center;display:inline-flex}.selection-summary.svelte-1uha8ag{color:var(--accent);white-space:nowrap;font-weight:600}.preview-size-control.svelte-1uha8ag{height:24px;color:var(--text-dim);cursor:default;align-items:center;gap:6px;margin-left:auto;padding:0 7px;display:inline-flex}.preview-size-icon.svelte-1uha8ag{fill:currentColor;flex:none;width:14px;height:14px}.preview-size-icon.dense.svelte-1uha8ag{color:var(--text-faint)}.preview-size-icon.dense.svelte-1uha8ag rect:where(.svelte-1uha8ag){rx:.75px;width:3px;height:3px}.preview-size-icon.roomy.svelte-1uha8ag rect:where(.svelte-1uha8ag){rx:1.25px}.preview-size-range.svelte-1uha8ag{appearance:none;cursor:pointer;background:0 0;flex:none;width:104px;height:14px;margin:0;padding:0}.preview-size-range.svelte-1uha8ag::-webkit-slider-runnable-track{background:linear-gradient(to right, var(--accent) 0 var(--preview-size-progress), var(--border) var(--preview-size-progress) 100%);border-radius:999px;height:3px}.preview-size-range.svelte-1uha8ag::-moz-range-track{background:var(--border);border-radius:999px;height:3px}.preview-size-range.svelte-1uha8ag::-moz-range-progress{background:var(--accent);border-radius:999px;height:3px}.preview-size-range.svelte-1uha8ag::-webkit-slider-thumb{border:2px solid var(--panel-raised);appearance:none;background:var(--accent);width:12px;height:12px;box-shadow:0 0 0 1px var(--accent);border-radius:50%;margin-top:-4.5px}.preview-size-range.svelte-1uha8ag::-moz-range-thumb{border:2px solid var(--panel-raised);background:var(--accent);width:8px;height:8px;box-shadow:0 0 0 1px var(--accent);border-radius:50%}.preview-size-range.svelte-1uha8ag:focus-visible{outline:none}.preview-size-range.svelte-1uha8ag:focus-visible::-webkit-slider-thumb{box-shadow:0 0 0 1px var(--accent), 0 0 0 4px var(--accent-soft)}.preview-size-range.svelte-1uha8ag:focus-visible::-moz-range-thumb{box-shadow:0 0 0 1px var(--accent), 0 0 0 4px var(--accent-soft)}.search.svelte-1uha8ag{flex:0 0 240px;align-items:center;gap:4px;width:240px;min-width:200px;height:24px;padding:0 6px 0 0;display:flex}.search.svelte-1uha8ag:focus-within{border-color:var(--accent)}.search.filter-active.svelte-1uha8ag{border-color:var(--accent);background:var(--accent-soft)}.search.filter-active.svelte-1uha8ag .search-icon-slot:where(.svelte-1uha8ag),.search.filter-active.svelte-1uha8ag kbd:where(.svelte-1uha8ag){color:var(--accent)}.search.filter-active.svelte-1uha8ag kbd:where(.svelte-1uha8ag){border-color:var(--accent)}.search-icon-slot.svelte-1uha8ag{width:24px;height:24px;color:var(--text-dim);flex:none;justify-content:center;align-items:center;display:flex}.search-icon.svelte-1uha8ag{fill:none;stroke:currentColor;stroke-width:1.5px;stroke-linecap:round;flex:none;width:14px;height:14px}.search-input.svelte-1uha8ag{min-width:0;height:100%;color:var(--text);font:inherit;background:0 0;border:0;outline:none;flex:1;padding:0}.search-input.svelte-1uha8ag::-webkit-search-cancel-button{appearance:none;background:var(--text-dim);cursor:pointer;width:12px;height:12px;margin:0;-webkit-mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 14 14'%3E%3Cpath d='m3 3 8 8m0-8-8 8' fill='none' stroke='black' stroke-linecap='round' stroke-width='2.25'/%3E%3C/svg%3E") 50%/12px 12px no-repeat;mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 14 14'%3E%3Cpath d='m3 3 8 8m0-8-8 8' fill='none' stroke='black' stroke-linecap='round' stroke-width='2.25'/%3E%3C/svg%3E") 50%/12px 12px no-repeat}.search.filter-active.svelte-1uha8ag .search-input:where(.svelte-1uha8ag)::-webkit-search-cancel-button{background:var(--accent)}.search.svelte-1uha8ag kbd:where(.svelte-1uha8ag){border:1px solid var(--border);color:var(--text-faint);border-radius:3px;flex:none;padding:1px 4px;font:9px/14px system-ui,sans-serif}.toolbar-button.svelte-1uha8ag,.import-trigger.svelte-1uha8ag{white-space:nowrap;justify-content:center;align-items:center;gap:6px;display:inline-flex}.toolbar-button.active.svelte-1uha8ag{border-color:var(--accent);background:var(--accent-soft);color:var(--accent)}.filter-count.svelte-1uha8ag{background:var(--accent);min-width:16px;height:16px;color:var(--text);border-radius:999px;place-items:center;padding:0 4px;font-size:10px;font-weight:700;display:inline-grid}.filters-popover.svelte-1uha8ag{width:min(480px,100vw - 24px)}.popover-header.svelte-1uha8ag{border-bottom:1px solid var(--border-soft);justify-content:space-between;align-items:center;gap:16px;padding:2px 2px 10px;display:flex}.popover-header.svelte-1uha8ag strong:where(.svelte-1uha8ag){color:var(--text);font-size:11px;font-weight:400}.clear-filters.svelte-1uha8ag{color:var(--accent);font:inherit;background:0 0;border:0;padding:2px 4px;font-size:11px}.clear-filters.svelte-1uha8ag:disabled{opacity:.4;cursor:default}.filter-grid.svelte-1uha8ag{grid-template-columns:repeat(3,minmax(0,1fr));gap:10px;padding:10px 2px;display:grid}.filter-field.svelte-1uha8ag{flex-direction:column;gap:4px;min-width:0;display:flex}.filter-field.svelte-1uha8ag>span:where(.svelte-1uha8ag){color:#ffffffb2;letter-spacing:.27px;-webkit-user-select:none;user-select:none;font-size:9px;font-weight:500;line-height:14px}.filter-field.svelte-1uha8ag .browse-select,.filter-field.svelte-1uha8ag .browse-checkbox{width:100%}.filter-field.svelte-1uha8ag .browse-select select{flex:1;width:100%}.filter-options-grid.svelte-1uha8ag{padding-top:0;padding-bottom:2px}.filter-options-grid.svelte-1uha8ag .browse-checkbox,.filter-options-grid.svelte-1uha8ag .browse-checkbox .icon-slot{height:14px}.filter-options-grid.svelte-1uha8ag .browse-checkbox .icon-slot{justify-content:flex-start;align-items:flex-start;width:18px}@media (width<=560px){.filter-grid.svelte-1uha8ag{grid-template-columns:1fr}}@media (width<=1056px){.search.svelte-1uha8ag{flex-basis:100%;order:10;width:100%}}.section.svelte-1uha8ag{margin-bottom:24px}.section.svelte-1uha8ag:last-child{margin-bottom:0}.section-emoji.svelte-1uha8ag{margin-right:6px}.grid.svelte-1uha8ag,.folder-grid.svelte-1uha8ag{gap:8px;display:grid}.grid.svelte-1uha8ag{grid-template-columns:repeat(auto-fill, minmax(min(100%, var(--preview-card-width)), 1fr))}.folder-grid.svelte-1uha8ag{grid-template-columns:repeat(auto-fill,minmax(160px,1fr))}.folder-card.svelte-1uha8ag{background:var(--panel);border:1px solid var(--border-soft);min-width:0;height:60px;color:var(--text);text-align:left;border-radius:8px;align-items:center;gap:10px;padding:8px 10px;display:flex}.folder-card.svelte-1uha8ag:hover,.folder-card.svelte-1uha8ag:focus-visible{border-color:var(--accent);outline:none}.folder-card.drop-target.svelte-1uha8ag{border-color:var(--accent);background:var(--accent-soft);box-shadow:0 0 0 1px var(--accent)}.folder-card.dragging-folder.svelte-1uha8ag{opacity:.55}.folder-card-icon.svelte-1uha8ag{color:var(--text-dim);flex:none;align-items:center;display:flex}.folder-card-details.svelte-1uha8ag{flex-direction:column;flex:1;gap:2px;min-width:0;display:flex}.folder-card-details.svelte-1uha8ag strong:where(.svelte-1uha8ag){text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.folder-card-details.svelte-1uha8ag span:where(.svelte-1uha8ag),.folder-card-arrow.svelte-1uha8ag{color:var(--text-faint)}.folder-card-arrow.svelte-1uha8ag{flex:none;font-size:18px}.card.svelte-1uha8ag{background:var(--panel);border:1px solid var(--border-soft);border-radius:8px;flex-direction:column;gap:clamp(4px,5cqi,8px);padding:clamp(4px,5cqi,8px);display:flex;position:relative;container-type:inline-size}.card.selected.svelte-1uha8ag{border-color:var(--accent);box-shadow:0 0 0 1px var(--accent)}.asset-select.svelte-1uha8ag{z-index:1;width:16px;height:16px;accent-color:var(--accent);position:absolute;top:clamp(6px,8cqi,12px);left:clamp(6px,8cqi,12px)}.card.svelte-1uha8ag:hover{border-color:var(--accent)}.thumbnail.svelte-1uha8ag{width:100%;height:min(var(--preview-card-height), 66.667cqi);border-radius:var(--radius);justify-content:center;align-items:center;display:flex;overflow:hidden}.meta.svelte-1uha8ag{align-items:center;gap:6px;min-width:0;display:flex}.id.svelte-1uha8ag{text-overflow:ellipsis;white-space:nowrap;font-weight:600;overflow:hidden}.type-badge.svelte-1uha8ag{color:var(--text-dim);border:1px solid var(--border);border-radius:4px;flex:none;margin-left:auto;padding:0 5px;font-size:10px}.badges.svelte-1uha8ag{flex-wrap:wrap;gap:4px;min-height:16px;display:flex}.badge.svelte-1uha8ag{border-radius:4px;padding:0 5px;font-size:10px}.badge.warning.svelte-1uha8ag{background:var(--warning-soft);color:var(--warning)}@container (width<=109px){.type-badge.svelte-1uha8ag{display:none}.badges.svelte-1uha8ag{flex-wrap:nowrap;overflow:hidden}}@container (width<=79px){.card.svelte-1uha8ag>.overlay{background:var(--accent);border:0;width:6px;height:6px;padding:0;font-size:0;top:5px;left:auto;right:5px;transform:none}.card.svelte-1uha8ag>.overlay.edited{background:var(--warning)}.asset-select.svelte-1uha8ag{width:8px;height:8px;top:0;left:0;transform:translate(-8%,8%)}.meta.svelte-1uha8ag,.badges.svelte-1uha8ag{display:none}}.empty.svelte-1uha8ag{color:var(--text-dim);text-align:center;padding:48px}.dialog-row.svelte-1uha8ag{align-items:center;gap:8px;display:flex}.dialog-row.svelte-1uha8ag span:where(.svelte-1uha8ag){width:44px;color:var(--text-dim)}.dialog-row.svelte-1uha8ag input:where(.svelte-1uha8ag){flex:1}.dialog-text.svelte-1uha8ag,.dialog-warning.svelte-1uha8ag{margin:8px 0 0}.dialog-warning.svelte-1uha8ag{color:var(--warning)}.drop-hint.svelte-1uha8ag{border:2px dashed var(--accent);color:var(--accent);pointer-events:none;background:#0d99ff14;border-radius:12px;justify-content:center;align-items:center;font-size:14px;display:flex;position:fixed;inset:48px 8px 8px}
@@ -1 +1 @@
1
- .usage-header.svelte-13vzy7a{justify-content:space-between;align-items:center;gap:8px;margin-bottom:8px;font-size:11px;font-weight:400;display:flex}.usage-status.svelte-13vzy7a,.usage-actions.svelte-13vzy7a{align-items:center;gap:6px;display:flex}.usage-actions.svelte-13vzy7a .control:where(.svelte-13vzy7a){height:24px;padding-block:2px}.usage-actions.svelte-13vzy7a .control:where(.svelte-13vzy7a):disabled{cursor:not-allowed;opacity:.55}.status-dot.svelte-13vzy7a{background:var(--text-faint);border-radius:50%;flex:none;width:7px;height:7px}.status-dot.used.svelte-13vzy7a{background:var(--ok)}.status-dot.unknown.svelte-13vzy7a{background:var(--warning)}.usages-trigger.svelte-13vzy7a{white-space:nowrap;align-items:center;gap:5px;display:inline-flex}.chevron.svelte-13vzy7a{fill:none;stroke:currentColor;stroke-linecap:round;stroke-linejoin:round;stroke-width:1.5px;transform-origin:50%;flex:none;width:12px;height:12px;display:block}.chevron.open.svelte-13vzy7a{transform:rotate(180deg)}.usage-popover.svelte-13vzy7a{width:min(360px,100vw - 40px);font-size:11px;font-weight:400}.popover-heading.svelte-13vzy7a,.reference-location.svelte-13vzy7a{justify-content:space-between;align-items:center;gap:12px;display:flex}.popover-heading.svelte-13vzy7a{color:var(--text-dim);padding:2px 4px 8px;font-size:11px}.popover-heading.svelte-13vzy7a>span:where(.svelte-13vzy7a){font-variant-numeric:tabular-nums;color:var(--text-faint)}.usage-list.svelte-13vzy7a{flex-direction:column;gap:2px;max-height:min(320px,55vh);display:flex;overflow-y:auto}.usage-reference.svelte-13vzy7a{border-radius:var(--radius);width:100%;color:var(--text);text-align:left;background:0 0;border:0;flex-direction:column;align-items:flex-start;padding:7px 8px;font-size:11px;display:flex}.usage-reference.svelte-13vzy7a:hover:not(:disabled),.usage-reference.svelte-13vzy7a:focus-visible{background:var(--accent-soft);outline:none}.usage-reference.svelte-13vzy7a:disabled{opacity:.55;cursor:not-allowed}.reference-location.svelte-13vzy7a{width:100%}.reference-file.svelte-13vzy7a{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.reference-position.svelte-13vzy7a{color:var(--accent);font-variant-numeric:tabular-nums;flex:none}.reference-paths.svelte-13vzy7a,.usage-reference.svelte-13vzy7a small:where(.svelte-13vzy7a){max-width:100%;color:var(--text-faint);text-overflow:ellipsis;white-space:nowrap;margin-top:2px;font-size:9px;overflow:hidden}.hint.svelte-13vzy7a{color:var(--text-faint);margin:0;font-size:11px}.error.svelte-13vzy7a{color:var(--danger)}.usage-section.svelte-1xvalv3{border-bottom:1px solid var(--border-soft);padding:12px}.hint.svelte-1xvalv3{color:var(--text-faint);margin:0;font-size:11px}.error.svelte-1xvalv3{color:var(--danger)}.refresh-error.svelte-1xvalv3{margin-top:8px}.detail.svelte-xy8zsr{flex:1;grid-template-columns:224px 1fr 280px;min-height:0;display:grid}.center.svelte-xy8zsr{flex-direction:column;min-width:0;min-height:0;padding:12px 16px;display:flex}.center.empty.svelte-xy8zsr,.empty.svelte-xy8zsr{color:var(--text-dim);flex:1;justify-content:center;align-items:center;display:flex}.inspector.svelte-xy8zsr{background:var(--panel);border-left:1px solid var(--border);overflow-y:auto}.inspector.svelte-xy8zsr section:where(.svelte-xy8zsr){border-bottom:1px solid var(--border-soft);padding:12px}.inspector.svelte-xy8zsr h2:where(.svelte-xy8zsr){word-break:break-all;margin:0;font-size:13px}.raw.svelte-xy8zsr{color:var(--text-dim);word-break:break-all;margin:4px 0 0}.warning.svelte-xy8zsr{color:var(--warning);margin:8px 0 0;font-size:11px}.duplicate-warning.svelte-xy8zsr{border:1px solid color-mix(in srgb, var(--warning) 45%, transparent);border-radius:var(--radius);background:var(--warning-soft);color:var(--warning);margin-top:10px;padding:8px;font-size:11px}.duplicate-warning.svelte-xy8zsr>strong:where(.svelte-xy8zsr){margin-bottom:6px;display:block}.duplicate-row.svelte-xy8zsr{border-radius:var(--radius);min-width:0;color:var(--text);align-items:center;gap:8px;padding:4px;display:flex}.duplicate-row.svelte-xy8zsr:hover{background:color-mix(in srgb, var(--warning) 12%, transparent)}.duplicate-row.svelte-xy8zsr img:where(.svelte-xy8zsr){border:1px solid var(--border);border-radius:var(--radius);background:var(--canvas);object-fit:contain;flex:none;width:36px;height:36px}.duplicate-row.svelte-xy8zsr span:where(.svelte-xy8zsr){text-overflow:ellipsis;white-space:nowrap;font-weight:600;overflow:hidden}.hint.svelte-xy8zsr{color:var(--text-faint);margin:0;font-size:11px}.inspector.svelte-xy8zsr h4:where(.svelte-xy8zsr){text-transform:uppercase;letter-spacing:.06em;color:var(--text-faint);margin:8px 0 4px;font-size:10px}.reference-row.svelte-xy8zsr{border-radius:var(--radius);color:var(--text-dim);align-items:center;gap:6px;min-width:0;padding:3px 4px;display:flex}.reference-row.svelte-xy8zsr:hover{background:var(--panel-raised);color:var(--text)}.reference-field.svelte-xy8zsr{color:var(--text-faint);font-size:11px}.reference-arrow.svelte-xy8zsr{color:var(--text-faint);flex:none}.reference-asset.svelte-xy8zsr{color:var(--accent);text-overflow:ellipsis;white-space:nowrap;font-weight:600;overflow:hidden}.rename.svelte-xy8zsr{gap:8px;margin-bottom:8px;display:flex}.replace-raw.svelte-xy8zsr{width:100%;margin-bottom:8px}.replace-picker.svelte-xy8zsr{margin-bottom:8px}.replace-picker.svelte-xy8zsr .popover-anchor,.replace-picker.svelte-xy8zsr .replace-raw:where(.svelte-xy8zsr){width:100%}.replace-picker.svelte-xy8zsr .replace-raw:where(.svelte-xy8zsr){justify-content:center;align-items:center;gap:6px;margin-bottom:0;display:flex}.source-label.svelte-xy8zsr{margin-bottom:8px}.source-field.svelte-xy8zsr{color:var(--text-dim);flex-direction:column;gap:4px;margin-bottom:8px;font-size:11px;display:flex}.source-field.svelte-xy8zsr .control:where(.svelte-xy8zsr){width:100%}.source-actions.svelte-xy8zsr{flex-direction:column;gap:6px;display:flex}.source-actions.svelte-xy8zsr .control:where(.svelte-xy8zsr){text-align:center;width:100%}.rename.svelte-xy8zsr input:where(.svelte-xy8zsr){flex:1;min-width:0}.danger.svelte-xy8zsr{width:100%}
1
+ .usage-header.svelte-13vzy7a{justify-content:space-between;align-items:center;gap:8px;margin-bottom:8px;font-size:11px;font-weight:400;display:flex}.usage-status.svelte-13vzy7a,.usage-actions.svelte-13vzy7a{align-items:center;gap:6px;display:flex}.usage-actions.svelte-13vzy7a .control:where(.svelte-13vzy7a){height:24px;padding-block:2px}.usage-actions.svelte-13vzy7a .control:where(.svelte-13vzy7a):disabled{cursor:not-allowed;opacity:.55}.status-dot.svelte-13vzy7a{background:var(--text-faint);border-radius:50%;flex:none;width:7px;height:7px}.status-dot.used.svelte-13vzy7a{background:var(--ok)}.status-dot.unknown.svelte-13vzy7a{background:var(--warning)}.usages-trigger.svelte-13vzy7a{white-space:nowrap;align-items:center;gap:5px;display:inline-flex}.chevron.svelte-13vzy7a{fill:none;stroke:currentColor;stroke-linecap:round;stroke-linejoin:round;stroke-width:1.5px;transform-origin:50%;flex:none;width:12px;height:12px;display:block}.chevron.open.svelte-13vzy7a{transform:rotate(180deg)}.usage-popover.svelte-13vzy7a{width:min(360px,100vw - 40px);font-size:11px;font-weight:400}.popover-heading.svelte-13vzy7a,.reference-location.svelte-13vzy7a{justify-content:space-between;align-items:center;gap:12px;display:flex}.popover-heading.svelte-13vzy7a{color:var(--text-dim);padding:2px 4px 8px;font-size:11px}.popover-heading.svelte-13vzy7a>span:where(.svelte-13vzy7a){font-variant-numeric:tabular-nums;color:var(--text-faint)}.usage-list.svelte-13vzy7a{flex-direction:column;gap:2px;max-height:min(320px,55vh);display:flex;overflow-y:auto}.usage-reference.svelte-13vzy7a{border-radius:var(--radius);width:100%;color:var(--text);text-align:left;background:0 0;border:0;flex-direction:column;align-items:flex-start;padding:7px 8px;font-size:11px;display:flex}.usage-reference.svelte-13vzy7a:hover:not(:disabled),.usage-reference.svelte-13vzy7a:focus-visible{background:var(--accent-soft);outline:none}.usage-reference.svelte-13vzy7a:disabled{opacity:.55;cursor:not-allowed}.reference-location.svelte-13vzy7a{width:100%}.reference-file.svelte-13vzy7a{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.reference-position.svelte-13vzy7a{color:var(--accent);font-variant-numeric:tabular-nums;flex:none}.reference-paths.svelte-13vzy7a,.usage-reference.svelte-13vzy7a small:where(.svelte-13vzy7a){max-width:100%;color:var(--text-faint);text-overflow:ellipsis;white-space:nowrap;margin-top:2px;font-size:9px;overflow:hidden}.hint.svelte-13vzy7a{color:var(--text-faint);margin:0;font-size:11px}.error.svelte-13vzy7a{color:var(--danger)}.usage-section.svelte-1xvalv3{border-bottom:1px solid var(--border-soft);padding:12px}.hint.svelte-1xvalv3{color:var(--text-faint);margin:0;font-size:11px}.error.svelte-1xvalv3{color:var(--danger)}.refresh-error.svelte-1xvalv3{margin-top:8px}.detail.svelte-xy8zsr{flex:1;grid-template-columns:224px 1fr 280px;min-height:0;display:grid}.center.svelte-xy8zsr{flex-direction:column;min-width:0;min-height:0;padding:12px 16px;display:flex}.center.empty.svelte-xy8zsr,.empty.svelte-xy8zsr{color:var(--text-dim);flex:1;justify-content:center;align-items:center;display:flex}.inspector.svelte-xy8zsr{background:var(--panel);border-left:1px solid var(--border);overflow-y:auto}.inspector.svelte-xy8zsr section:where(.svelte-xy8zsr){border-bottom:1px solid var(--border-soft);padding:12px}.inspector.svelte-xy8zsr h2:where(.svelte-xy8zsr){word-break:break-all;margin:0;font-size:13px}.raw.svelte-xy8zsr{color:var(--text-dim);word-break:break-all;margin:4px 0 0}.origin.svelte-xy8zsr{flex-wrap:wrap;align-items:center;gap:6px;margin:6px 0 0;display:flex}.origin-note.svelte-xy8zsr{color:var(--text-dim);font-size:11px}.warning.svelte-xy8zsr{color:var(--warning);margin:8px 0 0;font-size:11px}.duplicate-warning.svelte-xy8zsr{border:1px solid color-mix(in srgb, var(--warning) 45%, transparent);border-radius:var(--radius);background:var(--warning-soft);color:var(--warning);margin-top:10px;padding:8px;font-size:11px}.duplicate-warning.svelte-xy8zsr>strong:where(.svelte-xy8zsr){margin-bottom:6px;display:block}.duplicate-row.svelte-xy8zsr{border-radius:var(--radius);min-width:0;color:var(--text);align-items:center;gap:8px;padding:4px;display:flex}.duplicate-row.svelte-xy8zsr:hover{background:color-mix(in srgb, var(--warning) 12%, transparent)}.duplicate-row.svelte-xy8zsr img:where(.svelte-xy8zsr){border:1px solid var(--border);border-radius:var(--radius);background:var(--canvas);object-fit:contain;flex:none;width:36px;height:36px}.duplicate-row.svelte-xy8zsr span:where(.svelte-xy8zsr){text-overflow:ellipsis;white-space:nowrap;font-weight:600;overflow:hidden}.hint.svelte-xy8zsr{color:var(--text-faint);margin:0;font-size:11px}.inspector.svelte-xy8zsr h4:where(.svelte-xy8zsr){text-transform:uppercase;letter-spacing:.06em;color:var(--text-faint);margin:8px 0 4px;font-size:10px}.reference-row.svelte-xy8zsr{border-radius:var(--radius);color:var(--text-dim);align-items:center;gap:6px;min-width:0;padding:3px 4px;display:flex}.reference-row.svelte-xy8zsr:hover{background:var(--panel-raised);color:var(--text)}.reference-field.svelte-xy8zsr{color:var(--text-faint);font-size:11px}.reference-arrow.svelte-xy8zsr{color:var(--text-faint);flex:none}.reference-asset.svelte-xy8zsr{color:var(--accent);text-overflow:ellipsis;white-space:nowrap;font-weight:600;overflow:hidden}.rename.svelte-xy8zsr{gap:8px;margin-bottom:8px;display:flex}.replace-raw.svelte-xy8zsr{width:100%;margin-bottom:8px}.replace-picker.svelte-xy8zsr{margin-bottom:8px}.replace-picker.svelte-xy8zsr .popover-anchor,.replace-picker.svelte-xy8zsr .replace-raw:where(.svelte-xy8zsr){width:100%}.replace-picker.svelte-xy8zsr .replace-raw:where(.svelte-xy8zsr){justify-content:center;align-items:center;gap:6px;margin-bottom:0;display:flex}.source-label.svelte-xy8zsr{margin-bottom:8px}.source-field.svelte-xy8zsr{color:var(--text-dim);flex-direction:column;gap:4px;margin-bottom:8px;font-size:11px;display:flex}.source-field.svelte-xy8zsr .control:where(.svelte-xy8zsr){width:100%}.source-actions.svelte-xy8zsr{flex-direction:column;gap:6px;display:flex}.source-actions.svelte-xy8zsr .control:where(.svelte-xy8zsr){text-align:center;width:100%}.rename.svelte-xy8zsr input:where(.svelte-xy8zsr){flex:1;min-width:0}.danger.svelte-xy8zsr{width:100%}
@@ -1 +1 @@
1
- .playback.svelte-nchstv{align-items:center;gap:6px;width:100%;display:flex}.btn.svelte-nchstv{background:var(--panel-raised);border-radius:var(--radius);width:28px;height:28px;color:var(--text);border:1px solid #0000;flex:none;justify-content:center;align-items:center;padding:0;display:inline-flex}.btn.svelte-nchstv:hover:not(:disabled){border-color:var(--border)}.btn.svelte-nchstv:focus-visible{border-color:var(--accent);outline:none}.btn.svelte-nchstv:disabled{opacity:.4;cursor:not-allowed}.btn.active.svelte-nchstv{background:var(--accent-soft);color:var(--accent)}.btn.svelte-nchstv svg:where(.svelte-nchstv){width:16px;height:16px;display:block}.time.svelte-nchstv{color:var(--text-dim);font-variant-numeric:tabular-nums;flex:none;font-size:11px}.volume-group.svelte-nchstv{align-items:center;gap:6px;margin-left:auto;display:inline-flex}.range.svelte-nchstv{appearance:none;background:var(--panel-raised);cursor:pointer;border-radius:999px;height:4px}.range.scrub.svelte-nchstv{flex:1;min-width:0;margin:0 2px}.range.volume.svelte-nchstv{flex:none;width:72px}.range.svelte-nchstv:disabled{opacity:.4;cursor:not-allowed}.range.svelte-nchstv::-webkit-slider-thumb{appearance:none;background:var(--accent);border:none;border-radius:50%;width:12px;height:12px}.range.svelte-nchstv::-moz-range-thumb{background:var(--accent);border:none;border-radius:50%;width:12px;height:12px}.range.svelte-nchstv:focus-visible{outline:none}.range.svelte-nchstv:focus-visible::-webkit-slider-thumb{box-shadow:0 0 0 3px var(--accent-soft)}.range.svelte-nchstv:focus-visible::-moz-range-thumb{box-shadow:0 0 0 3px var(--accent-soft)}.audio-waveform.svelte-1liihyn{flex-direction:column;gap:8px;width:100%;height:100%;min-height:0;display:flex}.wave.svelte-1liihyn{cursor:pointer;touch-action:none;flex:1;width:100%;min-height:0;display:block}.footer.svelte-1liihyn{flex:none;align-items:center;display:flex}.stage.svelte-1ww4cvx{border:1px solid var(--border);border-radius:8px;flex:1;justify-content:center;align-items:center;min-height:0;display:flex;overflow:auto}.audio-frame.svelte-1ww4cvx{width:min(90%,480px);height:128px}p.svelte-1ww4cvx{color:var(--text-dim)}.scrub-number.svelte-nhap92{flex:1;min-width:0;display:flex;position:relative}.input.svelte-nhap92{width:100%;min-width:0;color:var(--text);font-variant-numeric:tabular-nums;appearance:textfield;background:0 0;border:none;outline:none;flex:1;margin:0;padding:0;font-size:11px}.scrub-number.with-suffix.svelte-nhap92 .input:where(.svelte-nhap92){flex:none}.suffix.svelte-nhap92{color:var(--text-dim);font-variant-numeric:tabular-nums;-webkit-user-select:none;user-select:none;flex:none;margin-left:2px;font-size:11px}.scrub-number.right.svelte-nhap92 .input:where(.svelte-nhap92){text-align:right}.input.svelte-nhap92::-webkit-outer-spin-button{appearance:none;margin:0}.input.svelte-nhap92::-webkit-inner-spin-button{appearance:none;margin:0}.scrub-surface.svelte-nhap92{cursor:ew-resize;touch-action:none;position:absolute;inset:0}.number-field.svelte-368zap{flex-direction:column;gap:4px;min-width:0;display:flex}.caption.svelte-368zap{letter-spacing:.27px;color:#ffffffb2;-webkit-user-select:none;user-select:none;font-size:9px;font-weight:500;line-height:14px}.number-input.svelte-368zap{border-radius:4px;align-items:center;gap:4px;min-width:0;height:24px;padding:0 6px 0 0;display:flex;position:relative;overflow:hidden}.number-input.svelte-368zap:focus-within{border-color:var(--accent)}.fill.svelte-368zap{pointer-events:none;z-index:0;background:#4a4a4a;height:100%;position:absolute;top:0;left:0}.icon-slot.svelte-368zap{z-index:1;width:24px;height:24px;color:var(--text-dim);-webkit-user-select:none;user-select:none;flex:none;justify-content:center;align-items:center;font-size:11px;font-weight:500;display:flex;position:relative}.number-input.svelte-368zap .scrub-number{z-index:1}h3.svelte-1ol624f{letter-spacing:0;text-transform:none;color:#fff;margin:0 0 10px;font-size:11px;font-weight:400}.select-field.svelte-bczi6w{flex-direction:column;gap:4px;min-width:0;display:flex}.caption.svelte-bczi6w{letter-spacing:.27px;color:#ffffffb2;-webkit-user-select:none;user-select:none;font-size:9px;font-weight:500;line-height:14px}.select-input.svelte-bczi6w{border-radius:4px;align-items:center;gap:4px;min-width:0;height:24px;padding:0 6px 0 0;display:flex}.select-input.svelte-bczi6w:focus-within{border-color:var(--accent)}.icon-slot.svelte-bczi6w{width:24px;height:24px;color:var(--text-dim);-webkit-user-select:none;user-select:none;flex:none;justify-content:center;align-items:center;font-size:11px;font-weight:500;display:flex}select.svelte-bczi6w{width:100%;min-width:0;height:100%;color:var(--text);background:0 0;border:none;outline:none;flex:1;margin:0;padding:0;font-size:11px}section.svelte-m9vwwu{border-bottom:1px solid var(--border-soft);padding:12px}.hint.svelte-m9vwwu{color:var(--text-faint);margin:4px 0 0;font-size:11px}.info.svelte-m9vwwu{font-variant-numeric:tabular-nums;margin:0}.file.svelte-m9vwwu{color:var(--text-dim);word-break:break-all}section.svelte-1by8n8t{border-bottom:1px solid var(--border-soft);padding:12px}.field.svelte-1by8n8t{margin-bottom:8px}.fundus-slice.svelte-3n5l3f{width:100%;height:100%;position:relative}canvas.svelte-3n5l3f,img.svelte-3n5l3f{pointer-events:none;display:block;position:absolute}img.svelte-3n5l3f{max-width:none;max-height:none}.fundus-chroma-key-video.svelte-r30mxh{width:100%;height:100%;position:relative}canvas.svelte-r30mxh,img.svelte-r30mxh{width:100%;height:100%;display:block}video.svelte-r30mxh{visibility:hidden;pointer-events:none;width:100%;height:100%;position:absolute;inset:0}.stage.svelte-10eps7e{border:1px solid var(--border);border-radius:8px;flex:1;justify-content:center;align-items:center;min-height:0;display:flex;overflow:auto}.stage.svelte-10eps7e img{object-fit:contain;max-width:90%;max-height:90%}img.svelte-gdduef{object-fit:contain;max-width:100%;max-height:100%}section.svelte-1yd7n22{border-bottom:1px solid var(--border-soft);padding:12px}.modes.svelte-1yd7n22{flex-direction:column;gap:4px;display:flex}.modes.svelte-1yd7n22 button:where(.svelte-1yd7n22){text-align:left;background:var(--panel-raised);color:var(--text);border-radius:var(--radius);border:1px solid #0000;padding:6px 10px}.modes.svelte-1yd7n22 button:where(.svelte-1yd7n22):hover{border-color:var(--border)}.modes.svelte-1yd7n22 button.on:where(.svelte-1yd7n22){background:var(--accent-soft);border-color:var(--accent);color:var(--accent);font-weight:600}.insets.svelte-1yd7n22{grid-template-columns:1fr 1fr;gap:8px;min-width:0;display:grid}.insets.single.svelte-1yd7n22{grid-template-columns:1fr}.preview-panel.svelte-1mjaycs{flex-direction:column;height:100%;min-height:0;display:flex}.bar.svelte-1mjaycs{flex:none;align-items:center;gap:10px;padding:8px 0;display:flex}.size.svelte-1mjaycs{color:var(--text-dim);font-variant-numeric:tabular-nums}.reset.svelte-1mjaycs{background:var(--panel-raised);border:1px solid var(--border);color:var(--text);border-radius:var(--radius);margin-left:auto;padding:4px 10px}.reset.svelte-1mjaycs:hover{border-color:var(--accent)}.stage.svelte-1mjaycs{border:1px solid var(--border);border-radius:var(--radius-large);flex:1;min-height:0;padding:24px;overflow:auto}.box.svelte-1mjaycs{position:relative;box-shadow:0 0 0 1px #ffffff1f}.box.svelte-1mjaycs .fill{position:absolute;inset:0}.handle.svelte-1mjaycs{touch-action:none;background:0 0;position:absolute}.handle.edge-right.svelte-1mjaycs{cursor:ew-resize;width:10px;height:100%;top:0;right:-4px}.handle.edge-bottom.svelte-1mjaycs{cursor:ns-resize;width:100%;height:10px;bottom:-4px;left:0}.handle.corner.svelte-1mjaycs{cursor:nwse-resize;background:var(--accent);width:16px;height:16px;box-shadow:0 0 0 2px var(--canvas);border-radius:3px;bottom:-6px;right:-6px}.canvas.svelte-1jfrg6d{flex-direction:column;height:100%;min-height:0;display:flex}.toolbar.svelte-1jfrg6d{flex:none;align-items:center;gap:8px;padding:8px 0;display:flex}.toolbar.svelte-1jfrg6d button:where(.svelte-1jfrg6d){background:var(--panel-raised);border:1px solid var(--border);color:var(--text);border-radius:var(--radius);padding:4px 10px}.toolbar.svelte-1jfrg6d button:where(.svelte-1jfrg6d):hover{border-color:var(--accent)}.toolbar.svelte-1jfrg6d button.active:where(.svelte-1jfrg6d){background:var(--accent-soft);border-color:var(--accent);color:var(--accent)}.zoom.svelte-1jfrg6d{text-align:center;min-width:44px;color:var(--text-dim);font-variant-numeric:tabular-nums}.dims.svelte-1jfrg6d{color:var(--text-dim);font-variant-numeric:tabular-nums;margin-left:auto}.viewport.svelte-1jfrg6d{touch-action:none;cursor:grab;border:1px solid var(--border);border-radius:var(--radius-large);flex:1;min-height:0;position:relative;overflow:hidden}.viewport.panning.svelte-1jfrg6d{cursor:grabbing}.image-wrap.svelte-1jfrg6d{transform-origin:0 0;position:absolute;top:0;left:0;box-shadow:0 0 0 1px #ffffff14}.image-wrap.svelte-1jfrg6d img:where(.svelte-1jfrg6d){width:100%;height:100%;image-rendering:pixelated;pointer-events:none;-webkit-user-select:none;user-select:none;display:block}.center-rect.svelte-1jfrg6d{pointer-events:none;position:absolute}.center-rect.side-edges.svelte-1jfrg6d{border-left:1px dashed #0d99ff99;border-right:1px dashed #0d99ff99}.center-rect.cap-edges.svelte-1jfrg6d{border-top:1px dashed #0d99ff99;border-bottom:1px dashed #0d99ff99}.overdraw-band.svelte-1jfrg6d{pointer-events:none;background:#38bdf829;position:absolute}.line.svelte-1jfrg6d{background:var(--accent);touch-action:none;position:absolute}.line.overdraw-line.svelte-1jfrg6d{background:#38bdf8 padding-box content-box}.line.overdraw-line.svelte-1jfrg6d .tag:where(.svelte-1jfrg6d){background:#38bdf8}.line.v.svelte-1jfrg6d{cursor:ew-resize;box-sizing:content-box;background-clip:content-box;width:1px;height:100%;margin-left:-.5px;padding:0 7px;top:0;transform:translate(-7px)}.line.h.svelte-1jfrg6d{cursor:ns-resize;box-sizing:content-box;background-clip:content-box;width:100%;height:1px;margin-top:-.5px;padding:7px 0;left:0;transform:translateY(-7px)}.line.active.svelte-1jfrg6d{background-color:var(--text);background-clip:content-box}.tag.svelte-1jfrg6d{background:var(--accent);color:var(--text);font-variant-numeric:tabular-nums;pointer-events:none;border-radius:4px;padding:1px 5px;font-size:11px;font-weight:600;position:absolute}.line.v.svelte-1jfrg6d .tag:where(.svelte-1jfrg6d){top:4px;left:50%;transform:translate(-50%)}.line.h.svelte-1jfrg6d .tag:where(.svelte-1jfrg6d){top:50%;left:4px;transform:translateY(-50%)}.line.v.overdraw-line.svelte-1jfrg6d .tag:where(.svelte-1jfrg6d){top:auto;bottom:4px}.line.h.overdraw-line.svelte-1jfrg6d .tag:where(.svelte-1jfrg6d){left:auto;right:4px}.editor.svelte-1ea2lvt{flex-direction:column;flex:1;min-height:0;display:flex}.tabs.svelte-1ea2lvt{flex:none;gap:4px;margin-bottom:4px;display:inline-flex}.tabs.svelte-1ea2lvt button:where(.svelte-1ea2lvt){border-radius:var(--radius);color:var(--text-dim);background:0 0;border:none;padding:4px 10px}.tabs.svelte-1ea2lvt button.on:where(.svelte-1ea2lvt){background:var(--accent-soft);color:var(--accent)}.pane.svelte-1ea2lvt{flex:1;min-height:0}.empty.svelte-1ea2lvt{color:var(--text-dim);flex:1;justify-content:center;align-items:center;display:flex}section.svelte-ij1927{border-bottom:1px solid var(--border-soft);padding:12px}.field.svelte-ij1927{margin-bottom:8px}.stage.svelte-qls820{border:1px solid var(--border);border-radius:8px;flex:1;justify-content:center;align-items:center;min-height:0;display:flex;overflow:auto}.preview-column.svelte-qls820{flex-direction:column;align-items:center;gap:8px;display:flex}.video-frame.svelte-qls820{width:min(90%,480px)}.video-frame.svelte-qls820 video{width:100%;height:100%}p.svelte-qls820{color:var(--text-dim)}video.svelte-ejgo9x{object-fit:contain;max-width:100%;max-height:100%}.picker.svelte-56kutb{flex-direction:column;gap:4px;min-width:0;margin-bottom:8px;display:flex}.caption.svelte-56kutb{letter-spacing:.27px;color:#ffffffb2;-webkit-user-select:none;user-select:none;font-size:9px;font-weight:500;line-height:14px}.reference-input.svelte-56kutb{border-radius:4px;align-items:center;min-width:0;height:24px;padding:0;display:flex;position:relative}.reference-input.svelte-56kutb:focus-within{border-color:var(--accent)}.current.svelte-56kutb{min-width:0;height:100%;color:var(--text);text-align:left;background:0 0;border:none;outline:none;flex:1;align-items:center;gap:4px;padding:0 6px 0 0;display:flex}.current.empty.svelte-56kutb{color:var(--text-faint)}.preview-slot.svelte-56kutb{box-sizing:border-box;background:#4a4a4a;border-radius:3px 0 0 3px;flex:none;justify-content:center;align-items:center;width:24px;height:24px;margin-left:-1px;padding:2px;display:flex;overflow:hidden}.preview.svelte-56kutb{object-fit:contain;width:100%;height:100%}.missing-preview.svelte-56kutb{color:var(--warning);font-weight:700}.clear.svelte-56kutb{border:none;border-left:1px solid var(--border-soft);width:24px;height:24px;color:var(--text-dim);background:0 0;border-radius:0 3px 3px 0;outline:none;flex:none;padding:0}.clear.svelte-56kutb:hover{color:var(--danger)}.id.svelte-56kutb,.placeholder.svelte-56kutb{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.dangling.svelte-56kutb{color:var(--warning)}.dropdown.svelte-56kutb{z-index:10;background:var(--panel);border:1px solid var(--border);border-radius:var(--radius);max-height:240px;padding:4px;position:absolute;top:calc(100% + 4px);left:0;right:0;overflow-y:auto;box-shadow:0 8px 24px #00000080}.option.svelte-56kutb{border-radius:var(--radius);width:100%;color:var(--text);text-align:left;background:0 0;border:none;align-items:center;gap:6px;padding:4px 6px;display:flex}.option.svelte-56kutb .thumbnail:where(.svelte-56kutb){object-fit:contain;background:var(--canvas);border-radius:3px;flex:none;width:24px;height:24px}.option.svelte-56kutb:hover{background:var(--panel-raised)}.option.selected.svelte-56kutb{background:var(--accent-soft);color:var(--accent)}.hint.svelte-56kutb{color:var(--text-faint);margin:4px;font-size:11px}.color-field.svelte-gjs979{flex-direction:column;gap:4px;min-width:0;display:flex}.caption.svelte-gjs979{letter-spacing:.27px;color:#ffffffb2;-webkit-user-select:none;user-select:none;font-size:9px;font-weight:500;line-height:14px}.color-input.svelte-gjs979{border-radius:4px;align-items:center;gap:4px;min-width:0;height:24px;padding:0 6px 0 0;display:flex}.color-input.svelte-gjs979:focus-within{border-color:var(--accent)}.swatch-slot.svelte-gjs979{flex:none;justify-content:center;align-items:center;width:24px;height:24px;display:flex}.swatch.svelte-gjs979{cursor:pointer;background:0 0;border:1px solid #ffffff3d;border-radius:3px;width:16px;height:16px;margin:0;padding:0;overflow:hidden}.swatch.svelte-gjs979::-webkit-color-swatch-wrapper{padding:0}.swatch.svelte-gjs979::-webkit-color-swatch{border:none}.hex-input.svelte-gjs979{width:100%;min-width:0;color:var(--text);font-variant-numeric:tabular-nums;text-transform:uppercase;background:0 0;border:none;outline:none;flex:1;margin:0;padding:0;font-size:11px}section.svelte-rsjkek{border-bottom:1px solid var(--border-soft);padding:12px}.field.svelte-rsjkek{margin-bottom:8px}.stage.svelte-1y3xro5{border:1px solid var(--border);border-radius:8px;flex:1;justify-content:center;align-items:center;min-height:0;display:flex;overflow:auto}.preview-column.svelte-1y3xro5{flex-direction:column;align-items:center;gap:8px;display:flex}.compare-row.svelte-1y3xro5{justify-content:center;align-items:flex-start;gap:16px;width:100%;max-width:760px;display:flex}figure.svelte-1y3xro5{flex-direction:column;flex:1 1 0;align-items:center;gap:6px;min-width:0;margin:0;display:flex}figcaption.svelte-1y3xro5{text-transform:uppercase;letter-spacing:.06em;color:var(--text-faint);font-size:10px}.video-frame.svelte-1y3xro5{width:100%}.video-frame.svelte-1y3xro5 video{width:100%;height:100%}p.svelte-1y3xro5{color:var(--text-dim)}section.svelte-3jblpy{border-bottom:1px solid var(--border-soft);padding:12px}.field.svelte-3jblpy{margin-bottom:8px}.backdrop.svelte-1f5yh58{z-index:100;background:#0000008c;justify-content:center;align-items:center;display:flex;position:fixed;inset:0}.dialog.svelte-1f5yh58{background:var(--panel);border:1px solid var(--border);border-radius:8px;width:360px;padding:16px;box-shadow:0 12px 32px #00000080}h2.svelte-1f5yh58{margin:0 0 4px;font-size:12px}.file-name.svelte-1f5yh58{color:var(--text-dim);font-variant-numeric:tabular-nums;margin:0}.destination.svelte-1f5yh58{color:var(--text-faint);margin:2px 0 16px}.row.svelte-1f5yh58{align-items:center;gap:8px;margin-bottom:8px;display:flex}.label.svelte-1f5yh58{width:64px;color:var(--text-dim);flex:none}.row.svelte-1f5yh58 input:where(.svelte-1f5yh58){flex:1}.row.manifests.svelte-1f5yh58{align-items:flex-start}.row.manifests.svelte-1f5yh58>.label:where(.svelte-1f5yh58){line-height:28px}.manifest-list.svelte-1f5yh58{flex:1;max-height:132px;overflow-y:auto}.empty-manifests.svelte-1f5yh58{color:var(--text-faint);margin:0;font-size:11px}.segmented.svelte-1f5yh58{border:1px solid var(--border);border-radius:var(--radius);display:inline-flex;overflow:hidden}.segmented.svelte-1f5yh58 button:where(.svelte-1f5yh58){background:var(--panel-raised);color:var(--text-dim);border:none;padding:4px 12px}.segmented.svelte-1f5yh58 button.on:where(.svelte-1f5yh58){background:var(--accent);color:var(--text)}.hint.svelte-1f5yh58{color:var(--text-dim);margin:4px 0 0;font-size:11px}.hint.warn.svelte-1f5yh58,.error.svelte-1f5yh58{color:var(--warning)}.actions.svelte-1f5yh58{justify-content:flex-end;gap:8px;margin-top:16px;display:flex}.backdrop.svelte-n5o24b{z-index:100;background:#0000008c;justify-content:center;align-items:center;display:flex;position:fixed;inset:0}.dialog.svelte-n5o24b{border:1px solid var(--border);background:var(--panel);border-radius:8px;width:420px;padding:16px;box-shadow:0 12px 32px #00000080}h2.svelte-n5o24b{margin:0 0 4px;font-size:12px}.destination.svelte-n5o24b{color:var(--text-faint);margin:0 0 16px}.row.svelte-n5o24b{gap:12px;display:flex}.field.svelte-n5o24b{color:var(--text-dim);flex-direction:column;flex:1;gap:4px;margin-bottom:10px;display:flex}.field.wide.svelte-n5o24b{width:100%}.warning.svelte-n5o24b{color:var(--warning);margin:6px 0 0;font-size:11px}.actions.svelte-n5o24b{justify-content:flex-end;gap:8px;margin-top:16px;display:flex}.directory.svelte-ftwms1{background:var(--panel);border-right:1px solid var(--border);flex-direction:column;width:220px;min-width:180px;max-width:320px;min-height:0;display:flex}header.svelte-ftwms1{border-bottom:1px solid var(--border-soft);align-items:center;height:40px;padding:0 8px 0 12px;display:flex}header.svelte-ftwms1 strong:where(.svelte-ftwms1){font-size:11px}.actions.svelte-ftwms1{margin-left:auto;display:flex}.icon-button.svelte-ftwms1{width:24px;height:24px;color:var(--text-dim);border-radius:var(--radius-small);background:0 0;border:0}.icon-button.svelte-ftwms1:hover:not(:disabled){background:var(--panel-raised);color:var(--text)}.icon-button.danger.svelte-ftwms1:hover:not(:disabled){color:var(--danger)}.icon-button.svelte-ftwms1:disabled{opacity:.3;cursor:default}.tree.svelte-ftwms1{padding:6px 4px;overflow:auto}.folder-row.svelte-ftwms1,.asset-row.svelte-ftwms1{padding-left:calc((var(--depth) + 2) * 14px);display:flex}.row.svelte-ftwms1{color:var(--text-dim);border-radius:var(--radius-small);text-align:left;background:0 0;border:0;align-items:center;gap:6px;min-width:0;height:28px;display:flex}.row.special.svelte-ftwms1{width:100%;padding:0 8px}.row.folder.svelte-ftwms1{flex:1;padding:0 8px 0 2px}.row.asset.svelte-ftwms1{cursor:grab;flex:1;padding:0 8px 0 2px}.row.asset.svelte-ftwms1:active{cursor:grabbing}.row.svelte-ftwms1:hover,.row.selected.svelte-ftwms1{background:var(--panel-raised);color:var(--text)}.row.asset.current.svelte-ftwms1,.row.selected.svelte-ftwms1{background:var(--accent-soft);color:var(--accent)}.row.drop-target.svelte-ftwms1{outline:1px solid var(--accent);background:var(--accent-soft)}.glyph.svelte-ftwms1{width:14px;color:var(--text-faint);flex:none;justify-content:center;align-items:center;display:flex}.asset-glyph.svelte-ftwms1{font-size:7px}.asset-warning.svelte-ftwms1{color:var(--warning);flex:none;margin-left:auto}.label.svelte-ftwms1{white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.count.svelte-ftwms1{color:var(--text-faint);margin-left:auto;font-size:10px}.dialog-row.svelte-ftwms1{align-items:center;gap:8px;display:flex}.dialog-row.svelte-ftwms1 span:where(.svelte-ftwms1){width:44px;color:var(--text-dim)}.dialog-row.svelte-ftwms1 input:where(.svelte-ftwms1){flex:1}.dialog-path.svelte-ftwms1,.dialog-text.svelte-ftwms1,.dialog-warning.svelte-ftwms1{margin:8px 0 0}.dialog-path.svelte-ftwms1{color:var(--text-faint)}.dialog-warning.svelte-ftwms1{color:var(--warning)}.context-menu.svelte-10jgqdh{z-index:200;background:var(--panel-raised);border:1px solid var(--border);border-radius:6px;width:168px;padding:4px;position:fixed;box-shadow:0 8px 24px #00000073}button.svelte-10jgqdh{width:100%;color:var(--text);font:inherit;text-align:left;background:0 0;border:0;border-radius:4px;padding:6px 8px}button.svelte-10jgqdh:hover,button.svelte-10jgqdh:focus-visible{background:var(--accent-soft);outline:none}button.danger.svelte-10jgqdh{color:var(--danger)}hr.svelte-10jgqdh{background:var(--border);border:0;height:1px;margin:4px 8px}.source-menu.svelte-1c64lfa{gap:2px;width:240px;max-width:100%;display:grid}button.svelte-1c64lfa{border-radius:var(--radius-small);width:100%;color:var(--text);text-align:left;background:0 0;border:0;flex-direction:column;gap:1px;padding:8px;display:flex}button.svelte-1c64lfa:hover,button.svelte-1c64lfa:focus-visible{background:var(--accent-soft);outline:none}span.svelte-1c64lfa{color:var(--text-dim);font-size:11px;font-weight:400}
1
+ .playback.svelte-nchstv{align-items:center;gap:6px;width:100%;display:flex}.btn.svelte-nchstv{background:var(--panel-raised);border-radius:var(--radius);width:28px;height:28px;color:var(--text);border:1px solid #0000;flex:none;justify-content:center;align-items:center;padding:0;display:inline-flex}.btn.svelte-nchstv:hover:not(:disabled){border-color:var(--border)}.btn.svelte-nchstv:focus-visible{border-color:var(--accent);outline:none}.btn.svelte-nchstv:disabled{opacity:.4;cursor:not-allowed}.btn.active.svelte-nchstv{background:var(--accent-soft);color:var(--accent)}.btn.svelte-nchstv svg:where(.svelte-nchstv){width:16px;height:16px;display:block}.time.svelte-nchstv{color:var(--text-dim);font-variant-numeric:tabular-nums;flex:none;font-size:11px}.volume-group.svelte-nchstv{align-items:center;gap:6px;margin-left:auto;display:inline-flex}.range.svelte-nchstv{appearance:none;background:var(--panel-raised);cursor:pointer;border-radius:999px;height:4px}.range.scrub.svelte-nchstv{flex:1;min-width:0;margin:0 2px}.range.volume.svelte-nchstv{flex:none;width:72px}.range.svelte-nchstv:disabled{opacity:.4;cursor:not-allowed}.range.svelte-nchstv::-webkit-slider-thumb{appearance:none;background:var(--accent);border:none;border-radius:50%;width:12px;height:12px}.range.svelte-nchstv::-moz-range-thumb{background:var(--accent);border:none;border-radius:50%;width:12px;height:12px}.range.svelte-nchstv:focus-visible{outline:none}.range.svelte-nchstv:focus-visible::-webkit-slider-thumb{box-shadow:0 0 0 3px var(--accent-soft)}.range.svelte-nchstv:focus-visible::-moz-range-thumb{box-shadow:0 0 0 3px var(--accent-soft)}.audio-waveform.svelte-1liihyn{flex-direction:column;gap:8px;width:100%;height:100%;min-height:0;display:flex}.wave.svelte-1liihyn{cursor:pointer;touch-action:none;flex:1;width:100%;min-height:0;display:block}.footer.svelte-1liihyn{flex:none;align-items:center;display:flex}.stage.svelte-1ww4cvx{border:1px solid var(--border);border-radius:8px;flex:1;justify-content:center;align-items:center;min-height:0;display:flex;overflow:auto}.audio-frame.svelte-1ww4cvx{width:min(90%,480px);height:128px}p.svelte-1ww4cvx{color:var(--text-dim)}.scrub-number.svelte-nhap92{flex:1;min-width:0;display:flex;position:relative}.input.svelte-nhap92{width:100%;min-width:0;color:var(--text);font-variant-numeric:tabular-nums;appearance:textfield;background:0 0;border:none;outline:none;flex:1;margin:0;padding:0;font-size:11px}.scrub-number.with-suffix.svelte-nhap92 .input:where(.svelte-nhap92){flex:none}.suffix.svelte-nhap92{color:var(--text-dim);font-variant-numeric:tabular-nums;-webkit-user-select:none;user-select:none;flex:none;margin-left:2px;font-size:11px}.scrub-number.right.svelte-nhap92 .input:where(.svelte-nhap92){text-align:right}.input.svelte-nhap92::-webkit-outer-spin-button{appearance:none;margin:0}.input.svelte-nhap92::-webkit-inner-spin-button{appearance:none;margin:0}.scrub-surface.svelte-nhap92{cursor:ew-resize;touch-action:none;position:absolute;inset:0}.number-field.svelte-368zap{flex-direction:column;gap:4px;min-width:0;display:flex}.caption.svelte-368zap{letter-spacing:.27px;color:#ffffffb2;-webkit-user-select:none;user-select:none;font-size:9px;font-weight:500;line-height:14px}.number-input.svelte-368zap{border-radius:4px;align-items:center;gap:4px;min-width:0;height:24px;padding:0 6px 0 0;display:flex;position:relative;overflow:hidden}.number-input.svelte-368zap:focus-within{border-color:var(--accent)}.fill.svelte-368zap{pointer-events:none;z-index:0;background:#4a4a4a;height:100%;position:absolute;top:0;left:0}.icon-slot.svelte-368zap{z-index:1;width:24px;height:24px;color:var(--text-dim);-webkit-user-select:none;user-select:none;flex:none;justify-content:center;align-items:center;font-size:11px;font-weight:500;display:flex;position:relative}.number-input.svelte-368zap .scrub-number{z-index:1}h3.svelte-1ol624f{letter-spacing:0;text-transform:none;color:#fff;margin:0 0 10px;font-size:11px;font-weight:400}.select-field.svelte-bczi6w{flex-direction:column;gap:4px;min-width:0;display:flex}.caption.svelte-bczi6w{letter-spacing:.27px;color:#ffffffb2;-webkit-user-select:none;user-select:none;font-size:9px;font-weight:500;line-height:14px}.select-input.svelte-bczi6w{border-radius:4px;align-items:center;gap:4px;min-width:0;height:24px;padding:0 6px 0 0;display:flex}.select-input.svelte-bczi6w:focus-within{border-color:var(--accent)}.icon-slot.svelte-bczi6w{width:24px;height:24px;color:var(--text-dim);-webkit-user-select:none;user-select:none;flex:none;justify-content:center;align-items:center;font-size:11px;font-weight:500;display:flex}select.svelte-bczi6w{width:100%;min-width:0;height:100%;color:var(--text);background:0 0;border:none;outline:none;flex:1;margin:0;padding:0;font-size:11px}section.svelte-m9vwwu{border-bottom:1px solid var(--border-soft);padding:12px}.hint.svelte-m9vwwu{color:var(--text-faint);margin:4px 0 0;font-size:11px}.info.svelte-m9vwwu{font-variant-numeric:tabular-nums;margin:0}.file.svelte-m9vwwu{color:var(--text-dim);word-break:break-all}section.svelte-1by8n8t{border-bottom:1px solid var(--border-soft);padding:12px}.field.svelte-1by8n8t{margin-bottom:8px}.fundus-slice.svelte-3n5l3f{width:100%;height:100%;position:relative}canvas.svelte-3n5l3f,img.svelte-3n5l3f{pointer-events:none;display:block;position:absolute}img.svelte-3n5l3f{max-width:none;max-height:none}.fundus-chroma-key-video.svelte-r30mxh{width:100%;height:100%;position:relative}canvas.svelte-r30mxh,img.svelte-r30mxh{width:100%;height:100%;display:block}video.svelte-r30mxh{visibility:hidden;pointer-events:none;width:100%;height:100%;position:absolute;inset:0}.stage.svelte-10eps7e{border:1px solid var(--border);border-radius:8px;flex:1;justify-content:center;align-items:center;min-height:0;display:flex;overflow:auto}.stage.svelte-10eps7e img{object-fit:contain;max-width:90%;max-height:90%}img.svelte-gdduef{object-fit:contain;max-width:100%;max-height:100%}section.svelte-1yd7n22{border-bottom:1px solid var(--border-soft);padding:12px}.modes.svelte-1yd7n22{flex-direction:column;gap:4px;display:flex}.modes.svelte-1yd7n22 button:where(.svelte-1yd7n22){text-align:left;background:var(--panel-raised);color:var(--text);border-radius:var(--radius);border:1px solid #0000;padding:6px 10px}.modes.svelte-1yd7n22 button:where(.svelte-1yd7n22):hover{border-color:var(--border)}.modes.svelte-1yd7n22 button.on:where(.svelte-1yd7n22){background:var(--accent-soft);border-color:var(--accent);color:var(--accent);font-weight:600}.insets.svelte-1yd7n22{grid-template-columns:1fr 1fr;gap:8px;min-width:0;display:grid}.insets.single.svelte-1yd7n22{grid-template-columns:1fr}.preview-panel.svelte-1mjaycs{flex-direction:column;height:100%;min-height:0;display:flex}.bar.svelte-1mjaycs{flex:none;align-items:center;gap:10px;padding:8px 0;display:flex}.size.svelte-1mjaycs{color:var(--text-dim);font-variant-numeric:tabular-nums}.reset.svelte-1mjaycs{background:var(--panel-raised);border:1px solid var(--border);color:var(--text);border-radius:var(--radius);margin-left:auto;padding:4px 10px}.reset.svelte-1mjaycs:hover{border-color:var(--accent)}.stage.svelte-1mjaycs{border:1px solid var(--border);border-radius:var(--radius-large);flex:1;min-height:0;padding:24px;overflow:auto}.box.svelte-1mjaycs{position:relative;box-shadow:0 0 0 1px #ffffff1f}.box.svelte-1mjaycs .fill{position:absolute;inset:0}.handle.svelte-1mjaycs{touch-action:none;background:0 0;position:absolute}.handle.edge-right.svelte-1mjaycs{cursor:ew-resize;width:10px;height:100%;top:0;right:-4px}.handle.edge-bottom.svelte-1mjaycs{cursor:ns-resize;width:100%;height:10px;bottom:-4px;left:0}.handle.corner.svelte-1mjaycs{cursor:nwse-resize;background:var(--accent);width:16px;height:16px;box-shadow:0 0 0 2px var(--canvas);border-radius:3px;bottom:-6px;right:-6px}.canvas.svelte-1jfrg6d{flex-direction:column;height:100%;min-height:0;display:flex}.toolbar.svelte-1jfrg6d{flex:none;align-items:center;gap:8px;padding:8px 0;display:flex}.toolbar.svelte-1jfrg6d button:where(.svelte-1jfrg6d){background:var(--panel-raised);border:1px solid var(--border);color:var(--text);border-radius:var(--radius);padding:4px 10px}.toolbar.svelte-1jfrg6d button:where(.svelte-1jfrg6d):hover{border-color:var(--accent)}.toolbar.svelte-1jfrg6d button.active:where(.svelte-1jfrg6d){background:var(--accent-soft);border-color:var(--accent);color:var(--accent)}.zoom.svelte-1jfrg6d{text-align:center;min-width:44px;color:var(--text-dim);font-variant-numeric:tabular-nums}.dims.svelte-1jfrg6d{color:var(--text-dim);font-variant-numeric:tabular-nums;margin-left:auto}.viewport.svelte-1jfrg6d{touch-action:none;cursor:grab;border:1px solid var(--border);border-radius:var(--radius-large);flex:1;min-height:0;position:relative;overflow:hidden}.viewport.panning.svelte-1jfrg6d{cursor:grabbing}.image-wrap.svelte-1jfrg6d{transform-origin:0 0;position:absolute;top:0;left:0;box-shadow:0 0 0 1px #ffffff14}.image-wrap.svelte-1jfrg6d img:where(.svelte-1jfrg6d){width:100%;height:100%;image-rendering:pixelated;pointer-events:none;-webkit-user-select:none;user-select:none;display:block}.center-rect.svelte-1jfrg6d{pointer-events:none;position:absolute}.center-rect.side-edges.svelte-1jfrg6d{border-left:1px dashed #0d99ff99;border-right:1px dashed #0d99ff99}.center-rect.cap-edges.svelte-1jfrg6d{border-top:1px dashed #0d99ff99;border-bottom:1px dashed #0d99ff99}.overdraw-band.svelte-1jfrg6d{pointer-events:none;background:#38bdf829;position:absolute}.line.svelte-1jfrg6d{background:var(--accent);touch-action:none;position:absolute}.line.overdraw-line.svelte-1jfrg6d{background:#38bdf8 padding-box content-box}.line.overdraw-line.svelte-1jfrg6d .tag:where(.svelte-1jfrg6d){background:#38bdf8}.line.v.svelte-1jfrg6d{cursor:ew-resize;box-sizing:content-box;background-clip:content-box;width:1px;height:100%;margin-left:-.5px;padding:0 7px;top:0;transform:translate(-7px)}.line.h.svelte-1jfrg6d{cursor:ns-resize;box-sizing:content-box;background-clip:content-box;width:100%;height:1px;margin-top:-.5px;padding:7px 0;left:0;transform:translateY(-7px)}.line.active.svelte-1jfrg6d{background-color:var(--text);background-clip:content-box}.tag.svelte-1jfrg6d{background:var(--accent);color:var(--text);font-variant-numeric:tabular-nums;pointer-events:none;border-radius:4px;padding:1px 5px;font-size:11px;font-weight:600;position:absolute}.line.v.svelte-1jfrg6d .tag:where(.svelte-1jfrg6d){top:4px;left:50%;transform:translate(-50%)}.line.h.svelte-1jfrg6d .tag:where(.svelte-1jfrg6d){top:50%;left:4px;transform:translateY(-50%)}.line.v.overdraw-line.svelte-1jfrg6d .tag:where(.svelte-1jfrg6d){top:auto;bottom:4px}.line.h.overdraw-line.svelte-1jfrg6d .tag:where(.svelte-1jfrg6d){left:auto;right:4px}.editor.svelte-1ea2lvt{flex-direction:column;flex:1;min-height:0;display:flex}.tabs.svelte-1ea2lvt{flex:none;gap:4px;margin-bottom:4px;display:inline-flex}.tabs.svelte-1ea2lvt button:where(.svelte-1ea2lvt){border-radius:var(--radius);color:var(--text-dim);background:0 0;border:none;padding:4px 10px}.tabs.svelte-1ea2lvt button.on:where(.svelte-1ea2lvt){background:var(--accent-soft);color:var(--accent)}.pane.svelte-1ea2lvt{flex:1;min-height:0}.empty.svelte-1ea2lvt{color:var(--text-dim);flex:1;justify-content:center;align-items:center;display:flex}section.svelte-ij1927{border-bottom:1px solid var(--border-soft);padding:12px}.field.svelte-ij1927{margin-bottom:8px}.stage.svelte-qls820{border:1px solid var(--border);border-radius:8px;flex:1;justify-content:center;align-items:center;min-height:0;display:flex;overflow:auto}.preview-column.svelte-qls820{flex-direction:column;align-items:center;gap:8px;display:flex}.video-frame.svelte-qls820{width:min(90%,480px)}.video-frame.svelte-qls820 video{width:100%;height:100%}p.svelte-qls820{color:var(--text-dim)}video.svelte-ejgo9x{object-fit:contain;max-width:100%;max-height:100%}.picker.svelte-56kutb{flex-direction:column;gap:4px;min-width:0;margin-bottom:8px;display:flex}.caption.svelte-56kutb{letter-spacing:.27px;color:#ffffffb2;-webkit-user-select:none;user-select:none;font-size:9px;font-weight:500;line-height:14px}.reference-input.svelte-56kutb{border-radius:4px;align-items:center;min-width:0;height:24px;padding:0;display:flex;position:relative}.reference-input.svelte-56kutb:focus-within{border-color:var(--accent)}.current.svelte-56kutb{min-width:0;height:100%;color:var(--text);text-align:left;background:0 0;border:none;outline:none;flex:1;align-items:center;gap:4px;padding:0 6px 0 0;display:flex}.current.empty.svelte-56kutb{color:var(--text-faint)}.preview-slot.svelte-56kutb{box-sizing:border-box;background:#4a4a4a;border-radius:3px 0 0 3px;flex:none;justify-content:center;align-items:center;width:24px;height:24px;margin-left:-1px;padding:2px;display:flex;overflow:hidden}.preview.svelte-56kutb{object-fit:contain;width:100%;height:100%}.missing-preview.svelte-56kutb{color:var(--warning);font-weight:700}.clear.svelte-56kutb{border:none;border-left:1px solid var(--border-soft);width:24px;height:24px;color:var(--text-dim);background:0 0;border-radius:0 3px 3px 0;outline:none;flex:none;padding:0}.clear.svelte-56kutb:hover{color:var(--danger)}.id.svelte-56kutb,.placeholder.svelte-56kutb{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.dangling.svelte-56kutb{color:var(--warning)}.dropdown.svelte-56kutb{z-index:10;background:var(--panel);border:1px solid var(--border);border-radius:var(--radius);max-height:240px;padding:4px;position:absolute;top:calc(100% + 4px);left:0;right:0;overflow-y:auto;box-shadow:0 8px 24px #00000080}.option.svelte-56kutb{border-radius:var(--radius);width:100%;color:var(--text);text-align:left;background:0 0;border:none;align-items:center;gap:6px;padding:4px 6px;display:flex}.option.svelte-56kutb .thumbnail:where(.svelte-56kutb){object-fit:contain;background:var(--canvas);border-radius:3px;flex:none;width:24px;height:24px}.option.svelte-56kutb:hover{background:var(--panel-raised)}.option.selected.svelte-56kutb{background:var(--accent-soft);color:var(--accent)}.hint.svelte-56kutb{color:var(--text-faint);margin:4px;font-size:11px}.color-field.svelte-gjs979{flex-direction:column;gap:4px;min-width:0;display:flex}.caption.svelte-gjs979{letter-spacing:.27px;color:#ffffffb2;-webkit-user-select:none;user-select:none;font-size:9px;font-weight:500;line-height:14px}.color-input.svelte-gjs979{border-radius:4px;align-items:center;gap:4px;min-width:0;height:24px;padding:0 6px 0 0;display:flex}.color-input.svelte-gjs979:focus-within{border-color:var(--accent)}.swatch-slot.svelte-gjs979{flex:none;justify-content:center;align-items:center;width:24px;height:24px;display:flex}.swatch.svelte-gjs979{cursor:pointer;background:0 0;border:1px solid #ffffff3d;border-radius:3px;width:16px;height:16px;margin:0;padding:0;overflow:hidden}.swatch.svelte-gjs979::-webkit-color-swatch-wrapper{padding:0}.swatch.svelte-gjs979::-webkit-color-swatch{border:none}.hex-input.svelte-gjs979{width:100%;min-width:0;color:var(--text);font-variant-numeric:tabular-nums;text-transform:uppercase;background:0 0;border:none;outline:none;flex:1;margin:0;padding:0;font-size:11px}section.svelte-rsjkek{border-bottom:1px solid var(--border-soft);padding:12px}.field.svelte-rsjkek{margin-bottom:8px}.stage.svelte-1y3xro5{border:1px solid var(--border);border-radius:8px;flex:1;justify-content:center;align-items:center;min-height:0;display:flex;overflow:auto}.preview-column.svelte-1y3xro5{flex-direction:column;align-items:center;gap:8px;display:flex}.compare-row.svelte-1y3xro5{justify-content:center;align-items:flex-start;gap:16px;width:100%;max-width:760px;display:flex}figure.svelte-1y3xro5{flex-direction:column;flex:1 1 0;align-items:center;gap:6px;min-width:0;margin:0;display:flex}figcaption.svelte-1y3xro5{text-transform:uppercase;letter-spacing:.06em;color:var(--text-faint);font-size:10px}.video-frame.svelte-1y3xro5{width:100%}.video-frame.svelte-1y3xro5 video{width:100%;height:100%}p.svelte-1y3xro5{color:var(--text-dim)}section.svelte-3jblpy{border-bottom:1px solid var(--border-soft);padding:12px}.field.svelte-3jblpy{margin-bottom:8px}.backdrop.svelte-1f5yh58{z-index:100;background:#0000008c;justify-content:center;align-items:center;display:flex;position:fixed;inset:0}.dialog.svelte-1f5yh58{background:var(--panel);border:1px solid var(--border);border-radius:8px;width:360px;padding:16px;box-shadow:0 12px 32px #00000080}h2.svelte-1f5yh58{margin:0 0 4px;font-size:12px}.file-name.svelte-1f5yh58{color:var(--text-dim);font-variant-numeric:tabular-nums;margin:0}.destination.svelte-1f5yh58{color:var(--text-faint);margin:2px 0 16px}.row.svelte-1f5yh58{align-items:center;gap:8px;margin-bottom:8px;display:flex}.label.svelte-1f5yh58{width:64px;color:var(--text-dim);flex:none}.row.svelte-1f5yh58 input:where(.svelte-1f5yh58){flex:1}.row.manifests.svelte-1f5yh58{align-items:flex-start}.row.manifests.svelte-1f5yh58>.label:where(.svelte-1f5yh58){line-height:28px}.manifest-list.svelte-1f5yh58{flex:1;max-height:132px;overflow-y:auto}.empty-manifests.svelte-1f5yh58{color:var(--text-faint);margin:0;font-size:11px}.segmented.svelte-1f5yh58{border:1px solid var(--border);border-radius:var(--radius);display:inline-flex;overflow:hidden}.segmented.svelte-1f5yh58 button:where(.svelte-1f5yh58){background:var(--panel-raised);color:var(--text-dim);border:none;padding:4px 12px}.segmented.svelte-1f5yh58 button.on:where(.svelte-1f5yh58){background:var(--accent);color:var(--text)}.hint.svelte-1f5yh58{color:var(--text-dim);margin:4px 0 0;font-size:11px}.hint.warn.svelte-1f5yh58,.error.svelte-1f5yh58{color:var(--warning)}.actions.svelte-1f5yh58{justify-content:flex-end;gap:8px;margin-top:16px;display:flex}.backdrop.svelte-n5o24b{z-index:100;background:#0000008c;justify-content:center;align-items:center;display:flex;position:fixed;inset:0}.dialog.svelte-n5o24b{border:1px solid var(--border);background:var(--panel);border-radius:8px;width:420px;padding:16px;box-shadow:0 12px 32px #00000080}h2.svelte-n5o24b{margin:0 0 4px;font-size:12px}.destination.svelte-n5o24b{color:var(--text-faint);margin:0 0 16px}.mode-toggle.svelte-n5o24b{gap:4px;margin-bottom:12px;display:flex}.mode-toggle.svelte-n5o24b .control:where(.svelte-n5o24b){flex:1}.mode-toggle.svelte-n5o24b .control.active:where(.svelte-n5o24b){border-color:var(--accent);background:var(--accent-soft);color:var(--text)}.row.svelte-n5o24b{gap:12px;display:flex}.field.svelte-n5o24b{color:var(--text-dim);flex-direction:column;flex:1;gap:4px;margin-bottom:10px;display:flex}.field.wide.svelte-n5o24b{width:100%}.warning.svelte-n5o24b{color:var(--warning);margin:6px 0 0;font-size:11px}.actions.svelte-n5o24b{justify-content:flex-end;gap:8px;margin-top:16px;display:flex}.directory.svelte-ftwms1{background:var(--panel);border-right:1px solid var(--border);flex-direction:column;width:220px;min-width:180px;max-width:320px;min-height:0;display:flex}header.svelte-ftwms1{border-bottom:1px solid var(--border-soft);align-items:center;height:40px;padding:0 8px 0 12px;display:flex}header.svelte-ftwms1 strong:where(.svelte-ftwms1){font-size:11px}.actions.svelte-ftwms1{margin-left:auto;display:flex}.icon-button.svelte-ftwms1{width:24px;height:24px;color:var(--text-dim);border-radius:var(--radius-small);background:0 0;border:0}.icon-button.svelte-ftwms1:hover:not(:disabled){background:var(--panel-raised);color:var(--text)}.icon-button.danger.svelte-ftwms1:hover:not(:disabled){color:var(--danger)}.icon-button.svelte-ftwms1:disabled{opacity:.3;cursor:default}.tree.svelte-ftwms1{padding:6px 4px;overflow:auto}.folder-row.svelte-ftwms1,.asset-row.svelte-ftwms1{padding-left:calc((var(--depth) + 2) * 14px);display:flex}.row.svelte-ftwms1{color:var(--text-dim);border-radius:var(--radius-small);text-align:left;background:0 0;border:0;align-items:center;gap:6px;min-width:0;height:28px;display:flex}.row.special.svelte-ftwms1{width:100%;padding:0 8px}.row.folder.svelte-ftwms1{flex:1;padding:0 8px 0 2px}.row.asset.svelte-ftwms1{cursor:grab;flex:1;padding:0 8px 0 2px}.row.asset.svelte-ftwms1:active{cursor:grabbing}.row.svelte-ftwms1:hover,.row.selected.svelte-ftwms1{background:var(--panel-raised);color:var(--text)}.row.asset.current.svelte-ftwms1,.row.selected.svelte-ftwms1{background:var(--accent-soft);color:var(--accent)}.row.drop-target.svelte-ftwms1{outline:1px solid var(--accent);background:var(--accent-soft)}.glyph.svelte-ftwms1{width:14px;color:var(--text-faint);flex:none;justify-content:center;align-items:center;display:flex}.asset-glyph.svelte-ftwms1{font-size:7px}.asset-warning.svelte-ftwms1{color:var(--warning);flex:none;margin-left:auto}.label.svelte-ftwms1{white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.count.svelte-ftwms1{color:var(--text-faint);margin-left:auto;font-size:10px}.dialog-row.svelte-ftwms1{align-items:center;gap:8px;display:flex}.dialog-row.svelte-ftwms1 span:where(.svelte-ftwms1){width:44px;color:var(--text-dim)}.dialog-row.svelte-ftwms1 input:where(.svelte-ftwms1){flex:1}.dialog-path.svelte-ftwms1,.dialog-text.svelte-ftwms1,.dialog-warning.svelte-ftwms1{margin:8px 0 0}.dialog-path.svelte-ftwms1{color:var(--text-faint)}.dialog-warning.svelte-ftwms1{color:var(--warning)}span.svelte-u9hzz3{color:var(--muted,#9aa4b2);text-overflow:ellipsis;white-space:nowrap;background:#2a2f3a;border-radius:999px;max-width:100%;padding:2px 6px;font-size:10px;line-height:normal;overflow:hidden}span.override.svelte-u9hzz3{color:var(--accent);background:#0e3959}span.overlay.svelte-u9hzz3{z-index:2;border:1px solid var(--accent-soft);position:absolute;top:0;left:100%;transform:translate(-100%,-4px)translate(5px)}.context-menu.svelte-10jgqdh{z-index:200;background:var(--panel-raised);border:1px solid var(--border);border-radius:6px;width:168px;padding:4px;position:fixed;box-shadow:0 8px 24px #00000073}button.svelte-10jgqdh{width:100%;color:var(--text);font:inherit;text-align:left;background:0 0;border:0;border-radius:4px;padding:6px 8px}button.svelte-10jgqdh:hover,button.svelte-10jgqdh:focus-visible{background:var(--accent-soft);outline:none}button.danger.svelte-10jgqdh{color:var(--danger)}hr.svelte-10jgqdh{background:var(--border);border:0;height:1px;margin:4px 8px}.source-menu.svelte-1c64lfa{gap:2px;width:240px;max-width:100%;display:grid}button.svelte-1c64lfa{border-radius:var(--radius-small);width:100%;color:var(--text);text-align:left;background:0 0;border:0;flex-direction:column;gap:1px;padding:8px;display:flex}button.svelte-1c64lfa:hover,button.svelte-1c64lfa:focus-visible{background:var(--accent-soft);outline:none}span.svelte-1c64lfa{color:var(--text-dim);font-size:11px;font-weight:400}
@@ -1 +1 @@
1
- import"./Z8rcWjXZ.js";import{i as e,o as t}from"./N1X6Qzcl.js";var n={get data(){return t.data},get error(){return t.error},get form(){return t.form},get params(){return t.params},get route(){return t.route},get state(){return t.state},get status(){return t.status},get url(){return t.url}};e.updated.check;var r=n;export{r as t};
1
+ import"./Z8rcWjXZ.js";import{i as e,o as t}from"./BcVZHIBD.js";var n={get data(){return t.data},get error(){return t.error},get form(){return t.form},get params(){return t.params},get route(){return t.route},get state(){return t.state},get status(){return t.status},get url(){return t.url}};e.updated.check;var r=n;export{r as t};
@@ -0,0 +1 @@
1
+ import{H as e,U as t,V as n,it as r,nt as i,r as a,t as o,tt as s}from"./Z8rcWjXZ.js";var c=class{constructor(e,t){this.status=e,typeof t==`string`?this.body={message:t}:t?this.body=t:this.body={message:`Error: ${e}`}}toString(){return JSON.stringify(this.body)}},l=class{constructor(e,t){try{new Headers({location:t})}catch{throw Error(`Invalid redirect location ${JSON.stringify(t)}: this string contains characters that cannot be used in HTTP headers`)}this.status=e,this.location=t}},u=class extends Error{constructor(e,t,n){super(n),this.status=e,this.text=t}};new URL(`sveltekit-internal://`);function d(e,t){return e===`/`||t===`ignore`?e:t===`never`?e.endsWith(`/`)?e.slice(0,-1):e:t===`always`&&!e.endsWith(`/`)?e+`/`:e}function f(e){return e.split(`%25`).map(decodeURI).join(`%25`)}function p(e){for(let t in e)e[t]=decodeURIComponent(e[t]);return e}function m({href:e}){return e.split(`#`)[0]}function h(){}function ee(...e){let t=5381;for(let n of e)if(typeof n==`string`){let e=n.length;for(;e;)t=t*33^n.charCodeAt(--e)}else if(ArrayBuffer.isView(n)){let e=new Uint8Array(n.buffer,n.byteOffset,n.byteLength),r=e.length;for(;r;)t=t*33^e[--r]}else throw TypeError(`value must be a string or TypedArray`);return(t>>>0).toString(36)}new TextEncoder;function g(e){let t=atob(e),n=new Uint8Array(t.length);for(let e=0;e<t.length;e++)n[e]=t.charCodeAt(e);return n}var _=window.fetch;window.fetch=(e,t)=>((e instanceof Request?e.method:t?.method||`GET`)!==`GET`&&v.delete(b(e)),_(e,t));var v=new Map;function te(e,t){let n=b(e,t),r=document.querySelector(n);if(r?.textContent){r.remove();let{body:e,...t}=JSON.parse(r.textContent);r.getAttribute(`data-b64`)!==null&&(e=g(e));let i=r.getAttribute(`data-ttl`);return i&&v.set(n,{body:e,init:t,ttl:1e3*Number(i)}),Promise.resolve(new Response(e,t))}return window.fetch(e,t)}function y(e,t,n){if(v.size>0){let t=b(e,n),r=v.get(t);if(r){if(performance.now()<r.ttl&&[`default`,`force-cache`,`only-if-cached`,void 0].includes(n?.cache))return new Response(r.body,r.init);v.delete(t)}}return window.fetch(t,n)}function b(e,t){let n=`script[data-sveltekit-fetched][data-url=${JSON.stringify(e instanceof Request?e.url:e)}]`;if(t?.headers||t?.body){let e=[];t.headers&&e.push([...new Headers(t.headers)].join(`,`)),t.body&&(typeof t.body==`string`||ArrayBuffer.isView(t.body))&&e.push(t.body),n+=`[data-hash="${ee(...e)}"]`}return n}var ne=/^(\[)?(\.\.\.)?(\w+)(?:=(\w+))?(\])?$/,re=/^\/\((?:[^)]+)\)$/;function x(e){let t=[];return{pattern:e===`/`||re.test(e)?/^\/$/:RegExp(`^${ae(e).map(e=>{let n=/^\[\.\.\.(\w+)(?:=(\w+))?\]$/.exec(e);if(n)return t.push({name:n[1],matcher:n[2],optional:!1,rest:!0,chained:!0}),`(?:/([^]*))?`;let r=/^\[\[(\w+)(?:=(\w+))?\]\]$/.exec(e);if(r)return t.push({name:r[1],matcher:r[2],optional:!0,rest:!1,chained:!0}),`(?:/([^/]+))?`;if(!e)return;let i=e.split(/\[(.+?)\](?!\])/);return`/`+i.map((e,n)=>{if(n%2){if(e.startsWith(`x+`))return se(String.fromCharCode(parseInt(e.slice(2),16)));if(e.startsWith(`u+`))return se(String.fromCharCode(...e.slice(2).split(`-`).map(e=>parseInt(e,16))));let[,r,a,o,s]=ne.exec(e);return t.push({name:o,matcher:s,optional:!!r,rest:!!a,chained:a?n===1&&i[0]===``:!1}),a?`([^]*?)`:r?`([^/]*)?`:`([^/]+?)`}return se(e)}).join(``)}).join(``)}/?$`),params:t}}function ie(e){return e!==``&&!/^\([^)]+\)$/.test(e)}function ae(e){return e.slice(1).split(`/`).filter(ie)}function oe(e,t,n){let r={},i=e.slice(1),a=i.filter(e=>e!==void 0),o=0;for(let e=0;e<t.length;e+=1){let s=t[e],c=i[e-o];if(s.chained&&s.rest&&o&&(c=i.slice(e-o,e+1).filter(e=>e).join(`/`),o=0),c===void 0)if(s.rest)c=``;else continue;if(!s.matcher||n[s.matcher](c)){r[s.name]=c;let n=t[e+1],l=i[e+1];n&&!n.rest&&n.optional&&l&&s.chained&&(o=0),!n&&!l&&Object.keys(r).length===a.length&&(o=0);continue}if(s.optional&&s.chained){o++;continue}return}if(!o)return r}function se(e){return e.normalize().replace(/[[\]]/g,`\\$&`).replace(/%/g,`%25`).replace(/\//g,`%2[Ff]`).replace(/\?/g,`%3[Ff]`).replace(/#/g,`%23`).replace(/[.*+?^${}()|\\]/g,`\\$&`)}var ce=/\[(\[)?(\.\.\.)?(\w+?)(?:=(\w+))?\]\]?/g;function le(e,t){let n=ae(e),r=e!=`/`&&e.endsWith(`/`);return`/`+n.map(n=>n.replace(ce,(n,r,i,a)=>{let o=t[a];if(!o){if(r||i&&o!==void 0)return``;throw Error(`Missing parameter '${a}' in route ${e}`)}if(o.startsWith(`/`)||o.endsWith(`/`))throw Error(`Parameter '${a}' in route ${e} cannot start or end with a slash -- this would cause an invalid route like foo//bar`);return o})).filter(Boolean).join(`/`)+(r?`/`:``)}function ue({nodes:e,server_loads:t,dictionary:n,matchers:r}){let i=new Set(t);return Object.entries(n).map(([t,[n,i,s]])=>{let{pattern:c,params:l}=x(t),u={id:t,exec:e=>{let t=c.exec(e);if(t)return oe(t,l,r)},errors:[1,...s||[]].map(t=>e[t]),layouts:[0,...i||[]].map(o),leaf:a(n)};return u.errors.length=u.layouts.length=Math.max(u.errors.length,u.layouts.length),u});function a(t){let n=t<0;return n&&(t=~t),[n,e[t]]}function o(t){return t===void 0?t:[i.has(t),e[t]]}}function de(e,t=JSON.parse){try{return t(sessionStorage[e])}catch{}}function fe(e,t,n=JSON.stringify){let r=n(t);try{sessionStorage[e]=r}catch{}}var S=globalThis.__sveltekit_cfjt3p?.base??``,pe=globalThis.__sveltekit_cfjt3p?.assets??S??``,me=``;function he(...e){if(!e[0].startsWith(`/`))throw Error(`Cannot use \`resolve(...)\` with a non-absolute pathname or route ID (got "${e[0]}"). \`resolve\` is only for internal pathnames and route IDs; external URLs should be used directly.`);return S+me+le(e[0],e[1])}var ge=`1787216664833`,_e=`sveltekit:snapshot`,ve=`sveltekit:scroll`,ye=`sveltekit:states`,C=`sveltekit:history`,w=`sveltekit:navigation`,T={tap:1,hover:2,viewport:3,eager:4,off:-1,false:-1},E=location.origin;function be(e){if(e instanceof URL)return e;let t=document.baseURI;if(!t){let e=document.getElementsByTagName(`base`);t=e.length?e[0].href:document.URL}return new URL(e,t)}function D(){return{x:pageXOffset,y:pageYOffset}}function O(e,t){return e.getAttribute(`data-sveltekit-${t}`)}var xe={...T,"":T.hover};function Se(e){let t=e.assignedSlot??e.parentNode;return t?.nodeType===11&&(t=t.host),t}function Ce(e,t){for(;e&&e!==t;){if(e.nodeName.toUpperCase()===`A`&&e.hasAttribute(`href`))return e;e=Se(e)}}function we(e,t,n){let r;try{if(r=new URL(e instanceof SVGAElement?e.href.baseVal:e.href,document.baseURI),n&&r.hash.match(/^#[^/]/)){let e=location.hash.split(`#`)[1]||`/`;r.hash=`#${e}${r.hash}`}}catch{}let i=e instanceof SVGAElement?e.target.baseVal:e.target,a=!r||!!i||A(r,t,n)||(e.getAttribute(`rel`)||``).split(/\s+/).includes(`external`),o=r?.origin===E&&e.hasAttribute(`download`);return{url:r,external:a,target:i,download:o}}function k(e){let t=null,n=null,r=null,i=null,a=null,o=null,s=e;for(;s&&s!==document.documentElement;)r===null&&(r=O(s,`preload-code`)),i===null&&(i=O(s,`preload-data`)),t===null&&(t=O(s,`keepfocus`)),n===null&&(n=O(s,`noscroll`)),a===null&&(a=O(s,`reload`)),o===null&&(o=O(s,`replacestate`)),s=Se(s);function c(e){switch(e){case``:case`true`:return!0;case`off`:case`false`:return!1;default:return}}return{preload_code:xe[r??`off`],preload_data:xe[i??`off`],keepfocus:c(t),noscroll:c(n),reload:c(a),replace_state:c(o)}}function Te(e){let t=r(e),n=!0;function i(){n=!0,t.update(e=>e)}function a(e){n=!1,t.set(e)}function o(e){let r;return t.subscribe(t=>{(r===void 0||n&&t!==r)&&e(r=t)})}return{notify:i,set:a,subscribe:o}}var Ee={v:h};function De(){let{set:e,subscribe:t}=r(!1);async function n(){clearTimeout(void 0);try{let t=await fetch(`${pe}/_app/version.json`,{headers:{pragma:`no-cache`,"cache-control":`no-cache`}});if(!t.ok)return!1;let n=(await t.json()).version!==ge;return n&&(e(!0),Ee.v(),clearTimeout(void 0)),n}catch{return!1}}return{subscribe:t,check:n}}function A(e,t,n){return e.origin!==E||!e.pathname.startsWith(t)?!0:n?e.pathname!==location.pathname:!1}function Oe(e){}var ke=new Set([`load`,`prerender`,`csr`,`ssr`,`trailingSlash`,`config`]);[...ke],[...new Set([...ke])];function Ae(e){return e.filter(e=>e!=null)}function j(e,t){return e+`/`+t}function je(e){return e instanceof c||e instanceof u?e.status:500}function Me(e){return e instanceof u?e.text:`Internal Error`}var M,N,P,Ne=a.toString().includes(`$$`)||/function \w+\(\) \{\}/.test(a.toString()),Pe=`a:`;Ne?(M={data:{},form:null,error:null,params:{},route:{id:null},state:{},status:-1,url:new URL(Pe)},N={current:null},P={current:!1}):(M=new class{#e=i({});get data(){return n(this.#e)}set data(e){s(this.#e,e)}#t=i(null);get form(){return n(this.#t)}set form(e){s(this.#t,e)}#n=i(null);get error(){return n(this.#n)}set error(e){s(this.#n,e)}#r=i({});get params(){return n(this.#r)}set params(e){s(this.#r,e)}#i=i({id:null});get route(){return n(this.#i)}set route(e){s(this.#i,e)}#a=i({});get state(){return n(this.#a)}set state(e){s(this.#a,e)}#o=i(-1);get status(){return n(this.#o)}set status(e){s(this.#o,e)}#s=i(new URL(Pe));get url(){return n(this.#s)}set url(e){s(this.#s,e)}},N=new class{#e=i(null);get current(){return n(this.#e)}set current(e){s(this.#e,e)}},P=new class{#e=i(!1);get current(){return n(this.#e)}set current(e){s(this.#e,e)}},Ee.v=()=>P.current=!0);function Fe(e){Object.assign(M,e)}var{onMount:Ie,tick:Le}=o,Re=new Set([`icon`,`shortcut icon`,`apple-touch-icon`]),F=null,I=de(`sveltekit:scroll`)??{},L=de(`sveltekit:snapshot`)??{},R={url:Te({}),page:Te({}),navigating:r(null),updated:De()};function ze(e){I[e]=D()}function Be(e,t){let n=e+1;for(;I[n];)delete I[n],n+=1;for(n=t+1;L[n];)delete L[n],n+=1}function z(e,t=!1){return t?location.replace(e.href):location.href=e.href,new Promise(h)}async function Ve(){if(`serviceWorker`in navigator){let e=await navigator.serviceWorker.getRegistration(S||`/`);e&&await e.update()}}var He,Ue,We,B,Ge,V,Ke={},qe={},Je=[],Ye=[],H=null;function Xe(){H?.fork?.then(e=>e?.discard()),H=null,Q={element:void 0,href:void 0}}var Ze=new Map,Qe=new Set,$e=new Set,U=new Set,W={branch:[],error:null,url:null,nav:null},et=!1,tt=!1,nt=!0,G=!1,K=!1,rt=!1,it=!1,at,q,J,Y,ot=new Set,st=new Map,ct=new Map;async function lt(e,t,n){if(globalThis.__sveltekit_cfjt3p.data){let{q:e={},p:t={},l:n={},f:r={}}=globalThis.__sveltekit_cfjt3p.data;for(let t in e)Ke[t]=e[t];for(let e in n)Ke[e]=n[e];for(let e in r)Ke[e]=r[e];for(let e in t)qe[e]=t[e]}document.URL!==location.href&&(location.href=location.href),V=e,await e.hooks.init?.(),He=ue(e),B=document.documentElement,Ge=t,Ue=e.nodes[0],We=e.nodes[1],Ue(),We(),q=history.state?.[C],J=history.state?.[w],q||(q=J=Date.now(),history.replaceState({...history.state,[C]:q,[w]:J},``));let r=I[q];function i(){r&&(history.scrollRestoration=`manual`,scrollTo(r.x,r.y))}n?(i(),await zt(Ge,n)):(await Z({type:`enter`,url:be(V.hash?Gt(new URL(location.href)):location.href),replace_state:!0}),i()),Rt()}function ut(){Je.length=0,it=!1}function dt(e){Ye.some(e=>e?.snapshot)&&(L[e]=Ye.map(e=>e?.snapshot?.capture()))}function ft(e){L[e]?.forEach((e,t)=>{Ye[t]?.snapshot?.restore(e)})}function pt(){ze(q),fe(ve,I),dt(J),fe(_e,L)}async function mt(e,n,r,i){let a,o;n.invalidateAll&&Xe(),await Z({type:`goto`,url:be(e),keepfocus:n.keepFocus,noscroll:n.noScroll,replace_state:n.replaceState,state:n.state,redirect_count:r,nav_token:i,accept:()=>{if(n.invalidateAll){it=!0,a=new Set;for(let[e,t]of st)for(let[n,r]of t)r.resource?.reset(),a.add(j(e,n));o=new Set;for(let[e,t]of ct)for(let n of t.keys())o.add(j(e,n))}n.invalidate&&n.invalidate.forEach(Lt)}}),n.invalidateAll&&t().then(t).then(()=>{for(let[e,t]of st)for(let[n,{resource:r}]of t)a?.has(j(e,n))&&r.start();for(let[e,t]of ct)for(let[n,{resource:r}]of t)o?.has(j(e,n))&&r.reconnect()})}async function ht(e){if(e.id!==H?.id){Xe();let t={};ot.add(t),H={id:e.id,token:t,promise:Tt({...e,preload:t}).then(e=>(ot.delete(t),e.type===`loaded`&&e.state.error&&Xe(),e)),fork:null}}return H.promise}async function gt(e){let t=(await X(e,!1))?.route;t&&await Promise.all([...t.layouts,t.leaf].filter(Boolean).map(e=>e[1]()))}async function _t(e,t,n){let r={params:W.params,route:{id:W.route?.id??null},url:new URL(location.href)};if(W={...e.state,nav:r},Fe(e.props.page),at=new V.root({target:t,props:{...e.props,stores:R,components:Ye},hydrate:n,sync:!1,transformError:void 0}),await Promise.resolve(),n){let e={from:null,to:{...r,scroll:I[q]??D()},willUnload:!1,type:`enter`,complete:Promise.resolve()};U.forEach(t=>t(e))}ft(J),tt=!0}async function vt({url:e,params:t,branch:n,errors:r,status:i,error:a,route:o,form:s}){let c=`never`;if(S&&(e.pathname===S||e.pathname===S+`/`))c=`always`;else for(let e of n)e?.slash!==void 0&&(c=e.slash);e.pathname=d(e.pathname,c),e.search=e.search;let l={type:`loaded`,state:{url:e,params:t,branch:n,error:a,route:o},props:{constructors:Ae(n).map(e=>e.node.component),page:Wt(M)}};s!==void 0&&(l.props.form=s);let u={},f=!M,p=0;for(let e=0;e<Math.max(n.length,W.branch.length);e+=1){let t=n[e],r=W.branch[e];t?.data!==r?.data&&(f=!0),t&&(u={...u,...t.data},f&&(l.props[`data_${p}`]=u),p+=1)}return(!W.url||e.href!==W.url.href||W.error!==a||s!==void 0&&s!==M.form||f)&&(l.props.page={error:a,params:t,route:{id:o?.id??null},state:{},status:i,url:new URL(e),form:s??null,data:f?u:M.data}),l}async function yt({loader:e,parent:t,url:n,params:r,route:i,server_data_node:a}){let o={dependencies:new Set,params:new Set,parent:!1,route:!1,url:!1,search_params:new Set},s=await e();return{node:s,loader:e,server:a,universal:s.universal?.load?{type:`data`,data:null,uses:o}:null,data:a?.data??null,slash:s.universal?.trailingSlash??a?.slash}}function bt(e,t,n){let r=e instanceof Request?e.url:e,i=new URL(r,n);return i.origin===n.origin&&(r=i.href.slice(n.origin.length)),{resolved:i,promise:tt?y(r,i.href,t):te(r,t)}}function xt(e,t,n,r,i,a){if(it)return!0;if(!i)return!1;if(i.parent&&e||i.route&&t||i.url&&n)return!0;for(let e of i.search_params)if(r.has(e))return!0;for(let e of i.params)if(a[e]!==W.params[e])return!0;for(let e of i.dependencies)if(Je.some(t=>t(new URL(e))))return!0;return!1}function St(e,t){return e?.type===`data`?e:e?.type===`skip`?t??null:null}function Ct(e,t){if(!e)return new Set(t.searchParams.keys());let n=new Set([...e.searchParams.keys(),...t.searchParams.keys()]);for(let r of n){let i=e.searchParams.getAll(r),a=t.searchParams.getAll(r);i.every(e=>a.includes(e))&&a.every(e=>i.includes(e))&&n.delete(r)}return n}function wt({error:e,url:t,route:n,params:r}){return{type:`loaded`,state:{error:e,url:t,route:n,params:r,branch:[]},props:{page:Wt(M),constructors:[]}}}async function Tt({id:e,invalidating:t,url:n,params:r,route:i,preload:a}){if(H?.id===e)return ot.delete(H.token),H.promise;let{errors:o,layouts:s,leaf:u}=i,d=[...s,u];o.forEach(e=>e?.().catch(h)),d.forEach(e=>e?.[1]().catch(h));let f=W.url?e!==At(W.url):!1,p=W.route?i.id!==W.route.id:!1,m=Ct(W.url,n),ee=!1,g=d.map(async(e,t)=>{if(!e)return;let a=W.branch[t];return e[1]===a?.loader&&!xt(ee,p,f,m,a.universal?.uses,r)?a:(ee=!0,yt({loader:e[1],url:n,params:r,route:i,parent:async()=>{let e={};for(let n=0;n<t;n+=1)Object.assign(e,(await g[n])?.data);return e},server_data_node:St(e[0]?{type:`skip`}:null,e[0]?a?.server:void 0)}))});for(let e of g)e.catch(h);let _=[];for(let e=0;e<d.length;e+=1)if(d[e])try{_.push(await g[e])}catch(t){if(t instanceof l)return{type:`redirect`,location:t.location};if(a&&ot.has(a))return wt({error:await $(t,{params:r,url:n,route:{id:i.id}}),url:n,params:r,route:i});let s=je(t),u;if(t instanceof c)u=t.body;else{if(await R.updated.check())return await Ve(),await z(n);u=await $(t,{params:r,url:n,route:{id:i.id}})}let d=await Et(e,_,o);return d?vt({url:n,params:r,branch:_.slice(0,d.idx).concat(d.node),errors:o,status:s,error:u,route:i}):await Mt(n,{id:i.id},u,s)}else _.push(void 0);return vt({url:n,params:r,branch:_,errors:o,status:200,error:null,route:i,form:t?void 0:null})}async function Et(e,t,n){for(;e--;)if(n[e]){let r=e;for(;!t[r];)--r;try{return{idx:r+1,node:{node:await n[e](),loader:n[e],data:{},server:null,universal:null}}}catch{continue}}}async function Dt({status:e,error:t,url:n,route:r}){let i={};try{return vt({url:n,params:i,branch:[await yt({loader:Ue,url:n,params:i,route:r,parent:()=>Promise.resolve({}),server_data_node:St(null)}),{node:await We(),loader:We,universal:null,server:null,data:null}],status:e,error:t,errors:[],route:null})}catch(t){if(t instanceof l){await mt(new URL(t.location,location.href),{},0);return}let a=await V.get_error_template(),o=await $(t,{url:n,params:i,route:r}),s=a({status:e,message:String(o?.message??``).replace(/&/g,`&amp;`).replace(/</g,`&lt;`).replace(/>/g,`&gt;`)}),c=new DOMParser().parseFromString(s,`text/html`);throw document.documentElement.replaceChild(document.adoptNode(c.head),document.head),document.documentElement.replaceChild(document.adoptNode(c.body),document.body),t}}async function Ot(e){let t=e.href;if(Ze.has(t))return Ze.get(t);let n;try{let r=(async()=>{let t=await V.hooks.reroute({url:new URL(e),fetch:async(t,n)=>bt(t,n,e).promise})??e;if(typeof t==`string`){let n=new URL(e);V.hash?n.hash=t:n.pathname=t,t=n}return t})();Ze.set(t,r),n=await r}catch{Ze.delete(t);return}return n}async function X(e,t){if(e&&!A(e,S,V.hash)){let n=await Ot(e);if(!n)return;let r=kt(n);for(let n of He){let i=n.exec(r);if(i)return{id:At(e),invalidating:t,route:n,params:p(i),url:e}}}}function kt(e){return f(V.hash?e.hash.replace(/^#/,``).replace(/[?#].+/,``):e.pathname.slice(S.length))||`/`}function At(e){return(V.hash?e.hash.replace(/^#/,``):e.pathname)+e.search}function jt({url:e,type:t,intent:n,delta:r,event:i,scroll:a}){let o=!1,s=Ut(W,n,e,t,a??null);r!==void 0&&(s.navigation.delta=r),i!==void 0&&(s.navigation.event=i);let c={...s.navigation,cancel:()=>{o=!0,s.reject(Error(`navigation cancelled`))}};return G||Qe.forEach(e=>e(c)),o?null:s}async function Z({type:n,url:r,popped:i,keepfocus:a,noscroll:o,replace_state:s,state:c={},redirect_count:l=0,nav_token:d={},accept:f=h,block:p=h,event:m}){let ee=Y;Y=d;let g=await X(r,!1),_=n===`enter`?Ut(W,g,r,n):jt({url:r,type:n,delta:i?.delta,intent:g,scroll:i?.scroll,event:m});if(!_){p(),Y===d&&(Y=ee);return}let v=q,te=J;f(),G=!0,tt&&_.navigation.type!==`enter`&&R.navigating.set(N.current=_.navigation);let y=g&&await Tt(g);if(!y){if(A(r,S,V.hash))return await z(r,s);y=await Mt(r,{id:null},await $(new u(404,`Not Found`,`Not found: ${r.pathname}`),{url:r,params:{},route:{id:null}}),404,s)}if(r=g?.url||r,Y!==d){_.reject(Error(`navigation aborted`));return}if(!y)return;if(y.type===`redirect`){if(l<20){await Z({type:n,url:new URL(y.location,r),popped:i,keepfocus:a,noscroll:o,replace_state:s,state:c,redirect_count:l+1,nav_token:d}),_.fulfil(void 0);return}if(y=await Dt({status:500,error:await $(Error(`Redirect loop`),{url:r,params:{},route:{id:null}}),url:r,route:{id:null}}),!y)return}else if(y.props.page.status>=400&&await R.updated.check())return await Ve(),await z(r,s);if(ut(),ze(v),dt(te),y.props.page.url.pathname!==r.pathname&&(r.pathname=y.props.page.url.pathname),c=i?i.state:c,!i){let e=+!s,t={[C]:q+=e,[w]:J+=e,[ye]:c};(s?history.replaceState:history.pushState).call(history,t,``,r),s||Be(q,J)}let b=g&&H?.id===g.id?H.fork:null;H?.fork&&!b?Xe():(H=null,Q={element:void 0,href:void 0}),y.props.page.state=c;let ne;if(tt){let t=(await Promise.all(Array.from($e,e=>e(_.navigation)))).filter(e=>typeof e==`function`);if(t.length>0){function e(){t.forEach(e=>{U.delete(e)})}t.push(e),t.forEach(e=>{U.add(e)})}let n=_.navigation.to;W={...y.state,nav:{params:n.params,route:n.route,url:n.url}},y.props.page&&(y.props.page.url=r),!a&&document.activeElement instanceof HTMLElement&&document.activeElement!==document.body&&document.activeElement.blur();let i=b&&await b;i?ne=i.commit():(F=null,at.$set(y.props),F&&Object.assign(y.props.page,F),Fe(y.props.page),ne=e?.()),rt=!0}else await _t(y,Ge,!1);let{activeElement:re}=document;if(await ne,await t(),await t(),Y!==d){_.reject(Error(`navigation aborted`));return}y.props.page&&F&&Object.assign(y.props.page,F);let x=null;if(nt){let e=i?i.scroll:o?D():null;e?scrollTo(e.x,e.y):(x=r.hash&&document.getElementById(Kt(r)))?x.scrollIntoView():scrollTo(0,0)}let ie=document.activeElement!==re&&document.activeElement!==document.body;!a&&!ie&&Ht(r,!x),nt=!0,G=!1,_.fulfil(void 0),_.navigation.to&&(_.navigation.to.scroll=D()),U.forEach(e=>e(_.navigation)),n===`popstate`&&ft(J),R.navigating.set(N.current=null)}async function Mt(e,t,n,r,i){return e.origin===E&&e.pathname===location.pathname&&!et?await Dt({status:r,error:n,url:e,route:t}):await z(e,i)}var Q={element:void 0,href:void 0};function Nt(){let e,t;B.addEventListener(`mousemove`,t=>{let n=t.target;clearTimeout(e),e=setTimeout(()=>{i(n,T.hover)},20)});function n(e){e.defaultPrevented||i(e.composedPath()[0],T.tap)}B.addEventListener(`mousedown`,n),B.addEventListener(`touchstart`,n,{passive:!0});let r=new IntersectionObserver(e=>{for(let t of e)t.isIntersecting&&(gt(new URL(t.target.href)),r.unobserve(t.target))},{threshold:0});async function i(e,n){let r=Ce(e,B),i=r===Q.element&&r?.href===Q.href&&n>=t;if(!r||i)return;let{url:a,external:o,download:s}=we(r,S,V.hash);if(o||s)return;let c=k(r),l=a&&At(W.url)===At(a);if(!(c.reload||l))if(n<=c.preload_data){Q={element:r,href:r.href},t=T.tap;let e=await X(a,!1);if(!e)return;ht(e)}else n<=c.preload_code&&(Q={element:r,href:r.href},t=n,gt(a))}function a(){r.disconnect();for(let e of B.querySelectorAll(`a`)){let{url:t,external:n,download:i}=we(e,S,V.hash);if(n||i)continue;let a=k(e);a.reload||(a.preload_code===T.viewport&&r.observe(e),a.preload_code===T.eager&&gt(t))}}U.add(a),a()}function $(e,t){if(e instanceof c)return e.body;let n=je(e),r=Me(e);return V.hooks.handleError({error:e,event:t,status:n,message:r})??{message:r}}function Pt(e,t){Ie(()=>(e.add(t),()=>{e.delete(t)}))}function Ft(e){Pt(U,e)}function It(e,t={}){return e=new URL(be(e)),e.origin===E?mt(e,t,0):Promise.reject(Error(`goto: invalid URL`))}function Lt(e){if(typeof e==`function`)Je.push(e);else{let{href:t}=new URL(e,location.href);Je.push(e=>e.href===t)}}function Rt(){history.scrollRestoration=`manual`,addEventListener(`beforeunload`,e=>{let t=!1;if(pt(),!G){let e=Ut(W,void 0,null,`leave`),n={...e.navigation,cancel:()=>{t=!0,e.reject(Error(`navigation cancelled`))}};Qe.forEach(e=>e(n))}t?(e.preventDefault(),e.returnValue=``):history.scrollRestoration=`auto`}),addEventListener(`visibilitychange`,()=>{document.visibilityState===`hidden`&&pt()}),navigator.connection?.saveData||Nt(),B.addEventListener(`click`,async t=>{if(t.button||t.which!==1||t.metaKey||t.ctrlKey||t.shiftKey||t.altKey||t.defaultPrevented)return;let n=Ce(t.composedPath()[0],B);if(!n)return;let{url:r,external:i,target:a,download:o}=we(n,S,V.hash);if(!r)return;if(a===`_parent`||a===`_top`){if(window.parent!==window)return}else if(a&&a!==`_self`)return;let s=k(n);if(!(n instanceof SVGAElement)&&r.protocol!==location.protocol&&!(r.protocol===`https:`||r.protocol===`http:`)||o)return;let[c,l]=(V.hash?r.hash.replace(/^#/,``):r.href).split(`#`),u=c===m(location);if(i||s.reload&&(!u||!l)){jt({url:r,type:`link`,event:t})?G=!0:t.preventDefault();return}if(l!==void 0&&u){let[,i]=W.url.href.split(`#`);if(i===l){if(t.preventDefault(),l===``||l===`top`&&n.ownerDocument.getElementById(`top`)===null)scrollTo({top:0});else{let e=n.ownerDocument.getElementById(decodeURIComponent(l));e&&(e.scrollIntoView(),e.focus())}return}if(K=!0,ze(q),e(r),!s.replace_state)return;K=!1}t.preventDefault(),await new Promise(e=>{requestAnimationFrame(()=>{setTimeout(e,0)}),setTimeout(e,100)}),await Z({type:`link`,url:r,keepfocus:s.keepfocus,noscroll:s.noscroll,replace_state:s.replace_state??r.href===location.href,event:t})}),B.addEventListener(`submit`,e=>{if(e.defaultPrevented)return;let t=HTMLFormElement.prototype.cloneNode.call(e.target),n=e.submitter;if((n?.formTarget||t.target)===`_blank`||(n?.formMethod||t.method)!==`get`)return;let r=new URL(n?.hasAttribute(`formaction`)&&n?.formAction||t.action);if(A(r,S,!1))return;let i=e.target,a=k(i);if(a.reload)return;e.preventDefault(),e.stopPropagation();let o=new FormData(i,n);r.search=new URLSearchParams(o).toString(),Z({type:`form`,url:r,keepfocus:a.keepfocus,noscroll:a.noscroll,replace_state:a.replace_state??r.href===location.href,event:e})}),addEventListener(`popstate`,async t=>{if(!Vt)if(t.state?.[`sveltekit:history`]){let n=t.state[C];if(Y={},n===q)return;let r=I[n],i=t.state[`sveltekit:states`]??{},a=new URL(t.state[`sveltekit:pageurl`]??location.href),o=t.state[w],s=W.url?m(location)===m(W.url):!1;if(o===J&&(rt||s)){i!==M.state&&(M.state=i),e(a),I[q]=D(),r&&scrollTo(r.x,r.y),q=n;return}let c=n-q;await Z({type:`popstate`,url:a,popped:{state:i,scroll:r,delta:c},accept:()=>{q=n,J=o},block:()=>{history.go(-c)},nav_token:Y,event:t})}else K||(e(new URL(location.href)),V.hash&&location.reload())}),addEventListener(`hashchange`,()=>{K&&(K=!1,history.replaceState({...history.state,[C]:++q,[w]:J},``,location.href))});for(let e of document.querySelectorAll(`link`))Re.has(e.rel)&&(e.href=e.href);addEventListener(`pageshow`,e=>{e.persisted&&R.navigating.set(N.current=null)});function e(e){W.url=M.url=e,R.page.set(Wt(M)),R.page.notify()}}async function zt(e,{status:t=200,error:n,node_ids:r,params:i,route:a,server_route:o,data:s,form:c}){et=!0;let u=new URL(location.href),d;({params:i={},route:a={id:null}}=await X(u,!1)||{}),d=He.find(({id:e})=>e===a.id);let f,p=!0;try{let e=r.map(async(t,n)=>{let r=s[n];return r?.uses&&(r.uses=Bt(r.uses)),yt({loader:V.nodes[t],url:u,params:i,route:a,parent:async()=>{let t={};for(let r=0;r<n;r+=1)Object.assign(t,(await e[r]).data);return t},server_data_node:St(r)})}),o=await Promise.all(e);if(d){let e=d.layouts;for(let t=0;t<e.length;t++)e[t]||o.splice(t,0,void 0)}f=await vt({url:u,params:i,branch:o,status:t,error:n,errors:d?.errors,form:c,route:d??null})}catch(t){if(t instanceof l)return await z(new URL(t.location,location.href));f=await Dt({status:je(t),error:await $(t,{url:u,params:i,route:a}),url:u,route:a}),e.textContent=``,p=!1}f&&(f.props.page&&(f.props.page.state={}),await _t(f,e,p))}function Bt(e){return{dependencies:new Set(e?.dependencies??[]),params:new Set(e?.params??[]),parent:!!e?.parent,route:!!e?.route,url:!!e?.url,search_params:new Set(e?.search_params??[])}}var Vt=!1;function Ht(e,t=!0){let n=document.querySelector(`[autofocus]`);if(n)n.focus();else{let n=Kt(e);if(n&&document.getElementById(n)){let{x:r,y:i}=D();setTimeout(()=>{let a=history.state;Vt=!0,location.replace(new URL(`#${n}`,location.href)),history.replaceState(a,``,e),t&&scrollTo(r,i),Vt=!1})}else{let e=document.body,t=e.getAttribute(`tabindex`);e.tabIndex=-1,e.focus({preventScroll:!0,focusVisible:!1}),t===null?e.removeAttribute(`tabindex`):e.setAttribute(`tabindex`,t)}let r=getSelection();if(r&&r.type!==`None`){let e=[];for(let t=0;t<r.rangeCount;t+=1)e.push(r.getRangeAt(t));setTimeout(()=>{if(r.rangeCount===e.length){for(let t=0;t<r.rangeCount;t+=1){let n=e[t],i=r.getRangeAt(t);if(n.commonAncestorContainer!==i.commonAncestorContainer||n.startContainer!==i.startContainer||n.endContainer!==i.endContainer||n.startOffset!==i.startOffset||n.endOffset!==i.endOffset)return}r.removeAllRanges()}})}}}function Ut(e,t,n,r,i=null){let a,o,s=new Promise((e,t)=>{a=e,o=t});return s.catch(h),{navigation:{from:{params:e.params,route:{id:e.route?.id??null},url:e.url,scroll:D()},to:n&&{params:t?.params??null,route:{id:t?.route?.id??null},url:n,scroll:i},willUnload:!t,type:r,complete:s},fulfil:a,reject:o}}function Wt(e){return{data:e.data,error:e.error,form:e.form,params:e.params,route:e.route,state:e.state,status:e.status,url:e.url}}function Gt(e){let t=new URL(e);return t.hash=decodeURIComponent(e.hash),t}function Kt(e){let t;if(V.hash){let[,,n]=e.hash.split(`#`,3);t=n??``}else t=e.hash.slice(1);return decodeURIComponent(t)}export{N as a,Oe as c,R as i,he as l,It as n,M as o,lt as r,P as s,Ft as t};
@@ -0,0 +1,2 @@
1
+ import{V as e,nt as t,tt as n}from"./Z8rcWjXZ.js";var r=class extends Error{status;constructor(e,t){super(t),this.name=`ApiResponseError`,this.status=e}};async function i(e){if(!e.ok){let t=`${e.status} ${e.statusText}`;try{let n=await e.json();n.error?.message&&(t=n.error.message)}catch{}throw new r(e.status,t)}return await e.json()}async function a(e){if(!e.ok){let t=`${e.status} ${e.statusText}`;try{let n=await e.json();n.error?.message&&(t=n.error.message)}catch{}throw new r(e.status,t)}}async function o(e){if(!e.ok)throw await a(e),new r(e.status,e.statusText);return await e.json()}async function s(){let e=await fetch(`/api/usage`,{method:`HEAD`,cache:`no-store`}),t=e.headers.get(`x-fundus-usage-capability`);if(e.status===204&&t===`available`)return!0;if(e.status===404&&t===`unavailable`)return!1;throw new r(e.status,`Could not discover usage capability (${e.status}, ${t??`missing header`}).`)}async function c(e={}){let t=new URLSearchParams;e.assetId&&t.set(`assetId`,e.assetId),e.forceFresh&&t.set(`fresh`,`1`);let n=t.size>0?`?${t}`:``;return o(await fetch(`/api/usage${n}`,{cache:`no-store`}))}async function l(e){await a(await fetch(`/api/usage`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({token:e})}))}async function u(){return i(await fetch(`/api/state`,{cache:`no-store`}))}async function d(){return i(await fetch(`/api/reconcile`,{method:`POST`,cache:`no-store`,headers:{"Content-Type":`application/json`},body:JSON.stringify({})}))}async function f(e,t,n,r=[]){return i(await fetch(`/api/raw/adopt`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({token:e,id:t,type:n,manifests:r})}))}async function ee(e,t){return i(await fetch(`/api/raw/edited/accept`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({token:e,type:t})}))}async function te(e){return i(await fetch(`/api/raw/edited/dismiss`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({token:e})}))}async function ne(e,t,n,r,a=[]){let o=new FormData;o.set(`file`,e),o.set(`type`,t),o.set(`id`,n),o.set(`folder`,r);for(let e of a)o.append(`manifests`,e);return i(await fetch(`/api/assets`,{method:`POST`,body:o}))}async function re(e){let t=e.mode===`tag`?{importer:`figma`,input:{mode:`tag`,tag:e.tag,format:`png`,...e.fileKey?{fileKey:e.fileKey}:{},scale:e.scale},type:e.type,id:e.tag,folder:e.folder,manifests:e.manifests}:{importer:`figma`,input:{url:e.url,format:`png`,scale:e.scale},type:e.type,id:e.id,folder:e.folder,manifests:e.manifests};return i(await fetch(`/api/imports`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(t)}))}async function ie(e,t){return i(await fetch(`/api/assets/${encodeURIComponent(e)}/reimport`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({...t?{input:{...t,format:`png`}}:{}})}))}async function ae(e,t){return i(await fetch(`/api/assets/${encodeURIComponent(e)}/retag`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(t)}))}async function oe(e,t){let n=new FormData;return n.set(`file`,t),i(await fetch(`/api/assets/${encodeURIComponent(e)}/raw`,{method:`PUT`,body:n}))}async function se(e,t){let n=t.mode===`tag`?{mode:`tag`,tag:t.tag,format:`png`,...t.fileKey?{fileKey:t.fileKey}:{},scale:t.scale}:{url:t.url,scale:t.scale,format:`png`};return i(await fetch(`/api/assets/${encodeURIComponent(e)}/raw`,{method:`PUT`,headers:{"Content-Type":`application/json`},body:JSON.stringify({importer:`figma`,input:n})}))}async function ce(e){return i(await fetch(`/api/folders`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({path:e})}))}async function le(e,t){return i(await fetch(`/api/folders/${encodeURIComponent(e)}`,{method:`PATCH`,headers:{"Content-Type":`application/json`},body:JSON.stringify({name:t})}))}async function ue(e,t){return i(await fetch(`/api/folders/${encodeURIComponent(e)}`,{method:`PATCH`,headers:{"Content-Type":`application/json`},body:JSON.stringify({parent:t})}))}async function de(e){return i(await fetch(`/api/folders/${encodeURIComponent(e)}`,{method:`DELETE`}))}async function fe(e,t){return i(await fetch(`/api/assets/${encodeURIComponent(e)}`,{method:`PATCH`,headers:{"Content-Type":`application/json`},body:JSON.stringify(t)}))}async function pe(e,t){return i(await fetch(`/api/assets/move`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({assetIds:e,folder:t})}))}async function me(e){return i(await fetch(`/api/assets/${encodeURIComponent(e)}`,{method:`DELETE`}))}async function he(e){return i(await fetch(`/api/assets/delete`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({assetIds:e})}))}async function ge(e,t){return a(await fetch(`/api/reveal`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({assetId:e,kind:t})}))}async function _e(e){return a(await fetch(`/api/reveal`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({folder:e})}))}async function ve(e){return i(await fetch(`/api/manifests`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({name:e})}))}async function ye(e){return i(await fetch(`/api/manifests/${encodeURIComponent(e)}`,{method:`DELETE`}))}async function be(e,t){return i(await fetch(`/api/manifests/${encodeURIComponent(e)}`,{method:`PATCH`,headers:{"Content-Type":`application/json`},body:JSON.stringify(t)}))}var xe=class{#e=null;#t=null;#n=0;#r=[];get value(){return this.#t}replaceBase(e){this.#e=e,this.#a()}mergeBase(e){this.#e!==null&&(this.#e=e(this.#e),this.#a())}add(e,t=[]){let n=++this.#n;return this.#r.push({id:n,update:e,dependencies:t}),this.#t!==null&&(this.#t=e(this.#t)),n}confirm(e,t,n){let r=this.#r.findIndex(t=>t.id===e);if(r===-1)return;let i=this.#r[r],a=this.#e;if(a===null){this.#e=t,this.#i(e),this.#a();return}this.#e=n(i.update(a)),this.#i(e),r===0&&this.#t!==null?this.#t=n(this.#t):this.#a()}reject(e){this.#i(e),this.#a()}rejectAffectedFrom(e,t){this.#r=this.#r.filter(n=>n.id<e||n.id>e&&!p(n.dependencies,t)),this.#a()}#i(e){this.#r=this.#r.filter(t=>t.id!==e)}#a(){let e=this.#e;if(e===null){this.#t=null;return}let t=e;for(let e of this.#r)t=e.update(t);this.#t=t}};function p(e,t){return e.some(e=>t.some(t=>{if(e===t)return!0;if(!e.startsWith(`folder:`)||!t.startsWith(`folder:`))return!1;let n=e.slice(7),r=t.slice(7);return n.startsWith(`${r}/`)||r.startsWith(`${n}/`)}))}var Se=/[\u0000-\u001f\u007f]/,Ce=/[<>:"|?*]/,we=/^(con|prn|aux|nul|com[1-9]|lpt[1-9])(?:\..*)?$/i;function Te(e){return e.length===0?`Folder names must not be empty.`:e===e.trim()?e===`.`||e===`..`?`"${e}" is not a valid folder name.`:e.includes(`/`)||e.includes(`\\`)?`Folder names must not contain path separators.`:Se.test(e)?`Folder names must not contain control characters.`:Ce.test(e)?`Folder names must not contain Windows-reserved characters (: * ? " < > |).`:e.endsWith(`.`)?`Folder names must not end with a dot.`:e.toLocaleLowerCase(`en-US`)===`root`?`"${e}" is reserved for the implicit Fundus root folder.`:e.toLocaleLowerCase(`en-US`)===`.gitkeep`?`"${e}" is reserved for Fundus folder management.`:we.test(e)?`"${e}" is a reserved filesystem name.`:null:`Folder names must not start or end with whitespace.`}function Ee(e){return e.split(`/`).map(e=>e.normalize(`NFC`)).join(`/`)}function m(e){return Ee(e).toLocaleLowerCase(`en-US`)}function h(e){let t=e.lastIndexOf(`/`);return t===-1?``:e.slice(0,t)}function g(e){let t=e.lastIndexOf(`/`);return t===-1?e:e.slice(t+1)}function _(e,t){return e===``?t:`${e}/${t}`}function v(e){return h(e)}function y(e){return g(e)}function b(e,t){return e===t||e.startsWith(`${t}/`)}function x(e,t,n){return e===t?n:`${n}${e.slice(t.length)}`}function De(e){return typeof e==`object`&&!!e&&!Array.isArray(e)&&typeof e.$asset==`string`&&e.$asset!==``}function S(e){return w(e)}function C(e,t){return e<t?-1:+(e>t)}function w(e){if(e===void 0)return`null`;if(e===null||typeof e==`number`||typeof e==`boolean`||typeof e==`string`)return JSON.stringify(e);if(Array.isArray(e))return`[${e.map(w).join(`,`)}]`;if(typeof e==`object`){let t=e,n=[];for(let e of Object.keys(t).sort())t[e]!==void 0&&n.push(`${JSON.stringify(e)}:${w(t[e])}`);return`{${n.join(`,`)}}`}throw Error(`Cannot canonicalize a ${typeof e} value.`)}var T=[`preload`,`release`,`entries`,`constructor`,`prototype`,`hasOwnProperty`,`isPrototypeOf`,`propertyIsEnumerable`,`toLocaleString`,`toString`,`valueOf`],E=/^[a-z][A-Za-z0-9]*$/;function Oe(e){return E.test(e)?T.includes(e)?`"${e}" is reserved (it collides with a Manifest member name).`:null:`"${e}" is not a valid asset id — use a camelCase identifier starting with a lowercase letter (e.g. "navigationPanel").`}function ke(e){return E.test(e)?T.includes(e)?`"${e}" is reserved (it collides with a Manifest member name).`:null:`"${e}" is not a valid manifest name — use a camelCase identifier starting with a lowercase letter (e.g. "mainCatalog").`}function Ae(e,t){let n={};for(let[r,i]of Object.entries(e.assets)){n[r]=[];let e=t[i.type];if(e?.collectReferences)try{n[r]=e.collectReferences(e.validateParameters(i.parameters))}catch{}}return n}function je(e,t){let n=new Set,r=[...e];for(;r.length>0;){let e=r.pop();if(!(n.has(e)||!Object.hasOwn(t,e))){n.add(e);for(let n of t[e])r.push(n.assetId)}}return n}var D=`[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}`;RegExp(`^(?:\\.fundus-replace-${D}\\.tmp|\\.fundus-delete(?:-assets)?-${D})$`,`i`),RegExp(`\\.fundus-(?:replace-)?${D}$`,`i`);var O={type:`audio`,accepts:[`mp3`,`wav`,`m4a`,`ogg`,`flac`],defaultParameters:()=>({preset:`default`}),validateParameters(e){if(typeof e!=`object`||!e||Array.isArray(e))throw Error(`Audio parameters must be an object.`);let t=e;if(typeof t.preset!=`string`||t.preset.length===0)throw Error(`Audio parameters need a non-empty string "preset".`);return{preset:t.preset}}},k={keyColor:[0,1,0],colorCutoff:.2,colorFeathering:.33,maskFeathering:1,sharpening:.5,despill:1,despillLuminanceAdd:.2},Me=[`colorCutoff`,`colorFeathering`,`maskFeathering`,`sharpening`,`despill`,`despillLuminanceAdd`];function A(e){return Math.min(1,Math.max(0,e))}function Ne(e){if(typeof e!=`object`||!e||Array.isArray(e))throw Error(`"chromaKey" must be an object.`);let t=e,n=t.keyColor;if(!Array.isArray(n)||n.length!==3||n.some(e=>typeof e!=`number`||!Number.isFinite(e)))throw Error(`"chromaKey.keyColor" must be an array of three numbers (RGB, 0–1 each).`);let r={keyColor:[A(n[0]),A(n[1]),A(n[2])]};for(let e of Me){let n=t[e];if(typeof n!=`number`||!Number.isFinite(n))throw Error(`"chromaKey.${e}" must be a number (0–1).`);r[e]=A(n)}return r}var j=[`mp4`,`mov`,`webm`,`m4v`];function M(e,t){if(typeof t!=`object`||!t||Array.isArray(t))throw Error(`${e} parameters must be an object.`);let n=t;if(typeof n.preset!=`string`||n.preset.length===0)throw Error(`${e} parameters need a non-empty string "preset".`);if(n.maxWidth!==void 0&&(typeof n.maxWidth!=`number`||!Number.isInteger(n.maxWidth)||n.maxWidth<=0))throw Error(`${e} "maxWidth" must be a positive integer when set.`);return{preset:n.preset,...n.maxWidth===void 0?{}:{maxWidth:n.maxWidth}}}var N={type:`video`,accepts:[...j],defaultParameters:()=>({preset:`default`}),validateParameters(e){return M(`Video`,e)}};function P(e,t){if(t!==void 0){if(!De(t))throw Error(`"${e}" must be an asset reference ({ "$asset": "<id>" }).`);return{$asset:t.$asset}}}var F={type:`chroma-key-video`,accepts:[...j],defaultParameters:()=>({preset:`default`,chromaKey:{...k,keyColor:[...k.keyColor]}}),validateParameters(e){let t=M(`Chroma-key-video`,e),n=e,r=Ne(n.chromaKey),i=P(`mask`,n.mask),a=P(`fallback`,n.fallback);return{...t,chromaKey:r,...i===void 0?{}:{mask:i},...a===void 0?{}:{fallback:a}}},collectReferences(e){let t=[];return e.mask&&t.push({field:`mask`,assetId:e.mask.$asset,expectedTypes:[`image`]}),e.fallback&&t.push({field:`fallback`,assetId:e.fallback.$asset,expectedTypes:[`image`]}),t},processingParameters(e){return{preset:e.preset,...e.maxWidth===void 0?{}:{maxWidth:e.maxWidth}}}},I=[`png`,`jpg`,`jpeg`,`webp`,`avif`],L={type:`image`,accepts:[...I],defaultParameters:()=>({preset:`default`}),validateParameters(e){if(typeof e!=`object`||!e||Array.isArray(e))throw Error(`Image parameters must be an object.`);let t=e;if(typeof t.preset!=`string`||t.preset.length===0)throw Error(`Image parameters need a non-empty string "preset".`);if(t.targetWidth!==void 0&&(typeof t.targetWidth!=`number`||!Number.isInteger(t.targetWidth)||t.targetWidth<=0))throw Error(`Image "targetWidth" must be a positive integer when set.`);return{preset:t.preset,...t.targetWidth===void 0?{}:{targetWidth:t.targetWidth}}}},R=[`nine`,`three-horizontal`,`three-vertical`,`one`];function z(){return{top:0,right:0,bottom:0,left:0}}function B(e){return{horizontal:e===`nine`||e===`three-horizontal`,vertical:e===`nine`||e===`three-vertical`}}function V(e,t,n,r){return t===`left`?n-e.right:t===`right`?n-e.left:t===`top`?r-e.bottom:r-e.top}function Pe(e,t,n,r){return V(e,t,n,r)-1}function H(e,t,n){return Math.max(t,Math.min(n,e))}function Fe(e){let t=B(e.mode),n=e.overdraw??{top:0,right:0,bottom:0,left:0},r=t.horizontal&&(e.compression?.x??0)>0,i=t.vertical&&(e.compression?.y??0)>0,a=r?Math.max(e.insets.left,n.left):e.insets.left,o=r?Math.max(e.insets.right,n.right):e.insets.right,s=i?Math.max(e.insets.top,n.top):e.insets.top,c=i?Math.max(e.insets.bottom,n.bottom):e.insets.bottom,l=H(a,0,e.width),u=H(o,0,e.width-l),d=H(s,0,e.height);return{top:d,right:u,bottom:H(c,0,e.height-d),left:l}}function U(e,t){if(typeof t!=`object`||!t||Array.isArray(t))throw Error(`Slice ${e} must be an object with top/right/bottom/left.`);let n=t,r=[`top`,`right`,`bottom`,`left`],i=z();for(let t of r){let r=n[t];if(typeof r!=`number`||!Number.isInteger(r)||r<0)throw Error(`Slice ${e}.${t} must be a non-negative integer.`);i[t]=r}return i}function Ie(e){if(typeof e!=`object`||!e||Array.isArray(e))throw Error(`Slice compression must be an object with x/y percentages.`);let t=e,n={x:0,y:0};for(let e of[`x`,`y`]){let r=t[e];if(typeof r!=`number`||!Number.isInteger(r)||r<0||r>100)throw Error(`Slice compression.${e} must be an integer from 0 to 100.`);n[e]=r}return n}var W={type:`slice`,accepts:[...I],defaultParameters:()=>({mode:`nine`,insets:z(),pixelRatio:1,preset:`default`}),validateParameters(e){if(typeof e!=`object`||!e||Array.isArray(e))throw Error(`Slice parameters must be an object.`);let t=e;if(typeof t.mode!=`string`||!R.includes(t.mode))throw Error(`Slice "mode" must be one of ${R.map(e=>`'${e}'`).join(` | `)}.`);let n=U(`insets`,t.insets);if(typeof t.pixelRatio!=`number`||!Number.isInteger(t.pixelRatio)||t.pixelRatio<1)throw Error(`Slice "pixelRatio" must be an integer ≥ 1.`);let r=t.overdraw===void 0?void 0:U(`overdraw`,t.overdraw),i=t.compression===void 0?void 0:Ie(t.compression);if(typeof t.preset!=`string`||t.preset.length===0)throw Error(`Slice parameters need a non-empty string "preset".`);return{mode:t.mode,insets:n,pixelRatio:t.pixelRatio,...r===void 0?{}:{overdraw:r},...i===void 0?{}:{compression:i},preset:t.preset}}},G=new class{#e=new Map;register(e){if(this.#e.has(e.type))throw Error(`Plugin type "${e.type}" is already registered.`);this.#e.set(e.type,e)}has(e){return this.#e.has(e)}values(){return[...this.#e.values()]}types(){return[...this.#e.keys()]}project(e,t){let n=Object.create(null);for(let r of this.#e.keys()){if(!Object.hasOwn(e,r))throw Error(`Registered plugin "${r}" has no ${t}.`);n[r]=e[r]}return n}};G.register(L),G.register(W),G.register(N),G.register(F),G.register(O);var K=G.values();function Le(e=K){return[...new Set(e.flatMap(e=>e.accepts))].sort().map(e=>`.${e}`)}function Re(e,t=K){return t.find(t=>t.type===e)?.accepts.map(e=>`.${e}`).sort()??[]}function ze(e,t=K){let n=e.slice(e.lastIndexOf(`.`)+1).toLowerCase();return t.filter(e=>e.accepts.includes(n)).map(e=>e.type)}function Be(e,t){let n=new Set(Object.keys(e.manifests));for(let t of Object.values(e.assets))for(let e of t.manifests)n.add(e);let r={};for(let i of[...n].sort(C)){let n=Object.entries(e.assets).filter(([,e])=>e.manifests.includes(i)).map(([e])=>e).sort(C),a=new Set(n),o=new Set(n),s=new Map;for(let e of n)for(let n of je([e],t)){if(o.add(n),a.has(n))continue;let t=s.get(n)??[];t.push(e),s.set(n,t)}r[i]={explicitMemberIds:n,passiveMembers:[...s.entries()].map(([e,t])=>({assetId:e,via:t})).sort((e,t)=>C(e.assetId,t.assetId)),deliveredAssetIds:o}}return r}function Ve(e,t,n,r){return n&&q(n,r)?`committed`:t&&q(t,r)?`rolled-back`:`unknown`}function q(e,t){return S(e)===S(t)}var J=Object.fromEntries(G.values().map(e=>[e.type,e]));function He(e,t,n){let r=e.library.assets[t]?.type,i=r?J[r]:void 0;if(!i)return[`asset:${t}`];try{let e=i.validateParameters(n),r=i.collectReferences?.(e)??[];return[...new Set([`asset:${t}`,...r.map(e=>`asset:${e.assetId}`)])]}catch{return[`asset:${t}`]}}function Y(e,t){let n=new Map(t.assets.map(e=>[e.id,e])),r={...e,assets:e.assets.map(e=>{let t=n.get(e.id);return t?{...e,rawUrl:t.rawUrl,rawHash:t.rawHash,gitStatus:t.gitStatus,importSource:t.importSource,proxy:t.proxy,warnings:t.warnings,duplicateIds:t.duplicateIds,passiveManifests:t.passiveManifests,references:t.references,origin:t.origin,overridden:t.overridden}:e}),gitBranch:t.gitBranch,importDefaults:t.importDefaults,issues:t.issues,presetNames:t.presetNames,presetCapabilities:t.presetCapabilities,rawIngestionQueue:t.rawIngestionQueue};return X(r,r.library)}function Ue(e,t){let n=structuredClone(e.library);n.folders=[...t.library.folders];for(let[e,r]of Object.entries(n.assets)){let i=t.library.assets[e];i?i.raw!==void 0&&(r.raw=i.raw):delete n.assets[e]}return Y(X(e,n),t)}function X(e,t,n=new Map){let r=new Map(e.assets.map(e=>[e.id,e])),i=new Map([...n.entries()].map(([e,t])=>[t,e])),a=Ae(t,J),o=Be(t,a),s=We(o),c=new Map;for(let[e,t]of Object.entries(a))for(let n of t){let t=c.get(n.assetId)??[];t.push({field:n.field,assetId:e}),c.set(n.assetId,t)}let l=Object.entries(t.assets).map(([e,o])=>{let l=r.get(i.get(e)??e);return l?{...l,id:e,raw:o.raw??``,folder:v(o.raw??``),parameters:o.parameters,manifests:o.manifests,duplicateIds:l.duplicateIds.map(e=>n.get(e)??e).filter(e=>Object.hasOwn(t.assets,e)).sort(),passiveManifests:s.get(e)??[],references:{outgoing:a[e].map(e=>({field:e.field,assetId:e.assetId})),incoming:c.get(e)??[]}}:null}).filter(e=>e!==null).sort((e,t)=>e.id.localeCompare(t.id)),u=new Map(l.map(e=>[e.id,e.proxy?.fileSize??0])),d=Object.fromEntries(Object.keys(t.manifests).map(e=>{let t=o[e];return[e,{explicitMemberIds:t.explicitMemberIds,passiveMembers:t.passiveMembers}]})),f=Object.fromEntries(Object.keys(t.manifests).map(e=>[e,[...o[e].deliveredAssetIds].reduce((e,t)=>e+(u.get(t)??0),0)]));return{...e,library:t,assets:l,manifestMemberships:d,manifestDeliveredBytes:f,issues:e.issues.map(e=>({...e,...e.assetId&&n.has(e.assetId)?{assetId:n.get(e.assetId)}:{}}))}}function We(e){let t=new Map;for(let[n,r]of Object.entries(e))for(let e of r.passiveMembers){let{assetId:r,via:i}=e,a=t.get(r)??[];a.push({manifest:n,via:i}),t.set(r,a)}for(let e of t.values())e.sort((e,t)=>e.manifest.localeCompare(t.manifest));return t}function Z(e){return t=>{let n=structuredClone(t.library);return X(t,n,e(n)??new Map)}}function Ge(e,t){return Z(n=>{let r=n.assets[e];if(!r||r.raw===void 0)return;t.parameters!==void 0&&(r.parameters=structuredClone(t.parameters)),t.manifests!==void 0&&(r.manifests=[...new Set(t.manifests)].sort());let i=t.renameTo??e;if(!(i!==e&&n.assets[i]))return i!==e&&(delete n.assets[e],n.assets[i]=r),t.folder!==void 0&&(r.raw=_(t.folder,y(r.raw))),i===e?void 0:new Map([[e,i]])})}function Ke(e,t){return Z(n=>{for(let r of new Set(e)){let e=n.assets[r];e&&e.raw!==void 0&&(e.raw=_(t,y(e.raw)))}})}function qe(e){return Z(t=>{for(let n of new Set(e))t.assets[n]?.raw!==void 0&&delete t.assets[n]})}function Je(e){return Z(t=>{t.folders.includes(e)||t.folders.push(e),t.folders.sort()})}function Q(e,t){return Z(n=>{let r=n.folders.filter(t=>b(t,e)).map(n=>x(n,e,t)),i=new Set(n.folders.filter(t=>!b(t,e)).map(m));if(!r.some(e=>i.has(m(e)))){n.folders=n.folders.map(n=>b(n,e)?x(n,e,t):n).sort();for(let r of Object.values(n.assets)){if(r.raw===void 0)continue;let n=v(r.raw);b(n,e)&&(r.raw=_(x(n,e,t),y(r.raw)))}}})}function Ye(e,t){return Q(e,_(h(e),t))}function Xe(e,t){return Q(e,_(t,g(e)))}function Ze(e){return Z(t=>{t.folders=t.folders.filter(t=>!b(t,e));for(let[n,r]of Object.entries(t.assets))r.raw!==void 0&&b(v(r.raw),e)&&delete t.assets[n]})}function Qe(e){return Z(t=>{Object.hasOwn(t.manifests,e)||(t.manifests[e]={})})}function $e(e,t){return Z(n=>{let r=n.manifests[e];if(r&&(t.color!==void 0&&(t.color===null?delete r.color:r.color=t.color),t.emoji!==void 0&&(t.emoji===null?delete r.emoji:r.emoji=t.emoji),!(t.renameTo===void 0||t.renameTo===e)&&!n.manifests[t.renameTo])){delete n.manifests[e],n.manifests[t.renameTo]=r;for(let r of Object.values(n.assets))r.manifests=r.manifests.map(n=>n===e?t.renameTo:n).sort()}})}function et(e){return Z(t=>{delete t.manifests[e];for(let n of Object.values(t.assets))n.manifests=n.manifests.filter(t=>t!==e)})}var tt=class{#e=Promise.resolve();#t=new Map;enqueue(e){let t=this.#e.then(e,e);return this.#e=t.then(()=>{},()=>{}),t}coalesce(e,t){let n=this.#t.get(e);if(n)return n;let r=this.enqueue(t).finally(()=>{this.#t.get(e)===r&&this.#t.delete(e)});return this.#t.set(e,r),r}},nt=class{#e=null;#t;constructor(e){this.#t=e}discover(e){if(this.#e)return this.#e;let t=(async()=>{try{this.#t({available:await e(),error:null})}catch(e){this.#t({available:null,error:e instanceof Error?e.message:String(e)})}})();return this.#e=t.finally(()=>{this.#e=null}),this.#e}};function rt(e,t,n){return e??t??(n.length>0?n.join(`
2
+ `):null)}var it=new class{#e=new tt;#t=new xe;#n=0;#r=0;#i=[];#a=t(null);get state(){return e(this.#a)}set state(e){n(this.#a,e,!0)}#o=t(!1);get saving(){return e(this.#o)}set saving(e){n(this.#o,e,!0)}#s=t(null);get error(){return e(this.#s)}set error(e){n(this.#s,e,!0)}#c=t(null);get usageAvailable(){return e(this.#c)}set usageAvailable(e){n(this.#c,e,!0)}#l=t(null);get usageCapabilityError(){return e(this.#l)}set usageCapabilityError(e){n(this.#l,e,!0)}#u=t(0);get usageRefreshRevision(){return e(this.#u)}set usageRefreshRevision(e){n(this.#u,e,!0)}#d=new nt(e=>{this.usageAvailable=e.available,this.usageCapabilityError=e.error});#f=t(!1);get loaded(){return e(this.#f)}set loaded(e){n(this.#f,e,!0)}async refresh(){return this.#p(u,{rebaseEditableState:!0})}discoverUsageCapability(){return this.#d.discover(s)}reconcile(){return this.#p(d,{coalesce:!0})}async reconcileOnFocus(){let e=this.usageRefreshRevision;await this.reconcile(),this.usageRefreshRevision===e&&this.usageRefreshRevision++}#p(e,t={}){let n=async()=>{try{let n=await e();this.#t.value===null||t.rebaseEditableState?this.#t.replaceBase(n):this.#t.mergeBase(e=>Ue(e,n)),this.#h(),this.error=null}catch(e){this.error=e instanceof Error?e.message:String(e)}finally{this.loaded=!0}};return t.coalesce?this.#e.coalesce(`reconcile`,n):this.#e.enqueue(n)}mutate(e,t,n){return this.#m(e,t,n)}mutateFromServer(e,t){return this.#m(e,void 0,t)}#m(e,t,n={dependencies:[]}){let r=++this.#r,i=this.#t.value?.library,a=t?this.#t.add(t,n.dependencies):null,o=a===null?void 0:this.#t.value?.library;return a!==null&&this.#h(),this.#n+=1,this.saving=!0,this.#e.enqueue(async()=>{this.error=null;try{if(this.#i.some(e=>e.failedMutationId<r&&r<=e.throughMutationId&&p(n.dependencies,e.dependencies)))throw a!==null&&(this.#t.reject(a),this.#h()),new $;let t=await e();a===null?this.#t.replaceBase(t):this.#t.confirm(a,t,e=>Y(e,t)),this.#h()}catch(e){if(e instanceof $)throw this.error=e.message,e;let t=null;try{t=await u();let s=Ve(e,i,o,t.library);if(s===`committed`&&a!==null){let e=t;this.#t.confirm(a,e,t=>Y(t,e)),this.#h(),this.error=null;return}this.#t.replaceBase(t),s===`rolled-back`&&a!==null&&n.invalidatesOnFailure?.length?(this.#i.push({failedMutationId:r,throughMutationId:this.#r,dependencies:n.invalidatesOnFailure}),this.#t.rejectAffectedFrom(a,n.invalidatesOnFailure)):a!==null&&this.#t.reject(a)}catch{a!==null&&this.#t.reject(a)}throw this.#h(),this.error=e instanceof Error?e.message:String(e),e}finally{--this.#n,this.saving=this.#n>0,this.#n===0&&(this.#i=[])}})}#h(){this.state=this.#t.value}get manifestNames(){return Object.keys(this.state?.library.manifests??{}).sort()}get packageOrigins(){return this.state?.packageOrigins??[]}manifestAppearance(e){return this.state?.library.manifests[e]??{}}get generalIssues(){return this.state?.issues.filter(e=>e.assetId===void 0).map(e=>e.message)??[]}assetById(e){return this.state?.assets.find(t=>t.id===e)??null}},$=class extends Error{constructor(){super(`Change was cancelled because an earlier structural save failed.`)}};export{be as $,Te as A,ce as B,B as C,O as D,N as E,h as F,ye as G,me as H,m as I,re as J,te as K,x as L,v as M,b as N,Oe as O,_ as P,fe as Q,ee as R,Pe as S,F as T,he as U,ve as V,de as W,ue as X,pe as Y,l as Z,G as _,Qe as a,ge as at,z as b,et as c,Ge as d,ie as et,$e as f,ze as g,Re as h,Je as i,ae as it,g as j,ke as k,Ke as l,Le as m,rt as n,oe as nt,qe as o,_e as ot,Ye as p,c as q,He as r,se as rt,Ze as s,ne as st,it as t,le as tt,Xe as u,Fe as v,L as w,V as x,W as y,f as z};