@mavea/mavea 1.0.17 → 1.0.18

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 (670) hide show
  1. package/DISCLAIMER.md +4 -1
  2. package/PRIVACY.md +14 -8
  3. package/README.md +61 -23
  4. package/TERMS.md +11 -1
  5. package/THIRD-PARTY.txt +25248 -621
  6. package/bin/mavea.mjs +156 -147
  7. package/dist/.vite/manifest.json +2159 -1730
  8. package/dist/assets/AnnotationLayer-ClU-e6qL.css +1 -0
  9. package/dist/assets/AnnotationLayer-DHHGgh8x.js +2 -0
  10. package/dist/assets/AppCommandPalette-DKBglbNo.js +1 -0
  11. package/dist/assets/AtlasView-B82UfrEX.js +1 -0
  12. package/dist/assets/BlockEmpty-B82uCse8.js +1 -0
  13. package/dist/assets/BriefingPlayer-C0D_2ILa.js +1 -0
  14. package/dist/assets/CanvasSkeleton-Bx0s36b_.js +2 -0
  15. package/dist/assets/CardEditor-DABIhGdQ.js +1 -0
  16. package/dist/assets/CheckLogRail-BOaXnqWK.css +1 -0
  17. package/dist/assets/CheckLogRail-Btg7Linv.js +1 -0
  18. package/dist/assets/{CodeOutput-H8TQzjqL.js → CodeOutput-DF892aIR.js} +3 -3
  19. package/dist/assets/CommandPalette-DagPdSGZ.js +1 -0
  20. package/dist/assets/ConversationVideoStudio-CIAMxElj.css +1 -0
  21. package/dist/assets/ConversationVideoStudio-EPw6H4lE.js +1 -0
  22. package/dist/assets/CourseLessonReader-DeAuL1tO.js +2 -0
  23. package/dist/assets/CourseRail-Dx9IIbTZ.js +1 -0
  24. package/dist/assets/CoursesApp-CzUGaYWZ.js +2 -0
  25. package/dist/assets/CrossExamPanel-CdIYUu-B.js +1 -0
  26. package/dist/assets/DashPresent-DXwesMIr.js +1 -0
  27. package/dist/assets/DashboardDetail-CJzB85NC.js +2 -0
  28. package/dist/assets/DashboardLoopRuntime-CEnUpS-I.js +1 -0
  29. package/dist/assets/DashboardOverview-C3hv9sm1.js +1 -0
  30. package/dist/assets/DashboardSettings-CmZWG3US.js +1 -0
  31. package/dist/assets/{DashboardsApp-Dx-EsaPW.css → DashboardsApp-B6yUtkKB.css} +1 -1
  32. package/dist/assets/DashboardsApp-wCgs98G0.js +2 -0
  33. package/dist/assets/{DeepZoomApp-CQaTT2Uh.js → DeepZoomApp-CwqKpjo7.js} +2 -2
  34. package/dist/assets/DelegatePanel-Bi1qPgGG.js +33 -0
  35. package/dist/assets/DemoGallery-Cg0ykVpG.js +1 -0
  36. package/dist/assets/DropSelect-C3g0PjuN.js +1 -0
  37. package/dist/assets/DropSelect-DilESAgA.css +1 -0
  38. package/dist/assets/ExportModal-rxndDhoO.js +2 -0
  39. package/dist/assets/ExtractionPreview-ChRAimKr.js +18 -0
  40. package/dist/assets/{FallbackCard-B489rTd9.js → FallbackCard-ap_4wOfj.js} +1 -1
  41. package/dist/assets/FeatureUseNotice-BhljPjUv.js +1 -0
  42. package/dist/assets/FlagshipCTA-uoeGMQas.js +1 -0
  43. package/dist/assets/FlagshipCommandPalette-DyNsP8k3.js +1 -0
  44. package/dist/assets/FlagshipShowcase-DHpGPlca.js +1 -0
  45. package/dist/assets/FlashcardsApp-Cm50X3Hl.js +1 -0
  46. package/dist/assets/ForecastPanel-zPUh2ClQ.js +1 -0
  47. package/dist/assets/GalleryApp-BFop9Eu7.js +1 -0
  48. package/dist/assets/{HonestByDesign-CCOt31nx.js → HonestByDesign-HeTTCiis.js} +1 -1
  49. package/dist/assets/{HowItWorks-auW5XXCZ.js → HowItWorks-gAuUl7VQ.js} +1 -1
  50. package/dist/assets/LegalApp-jOlpLQSV.js +1 -0
  51. package/dist/assets/{LegalMarkdownDocument-DBjLz9Yf.js → LegalMarkdownDocument-RSNiyAu0.js} +2 -2
  52. package/dist/assets/LegalPageShell-CmxGCdqJ.css +1 -0
  53. package/dist/assets/LegalPageShell-Cr90l1I2.js +1 -0
  54. package/dist/assets/LeverPanel-D1SNRGdm.js +1 -0
  55. package/dist/assets/Library-DmdzY2se.js +1 -0
  56. package/dist/assets/LibraryOverlay-DEQ5GuIs.js +1 -0
  57. package/dist/assets/LiveApp-Bl7WBgqJ.css +1 -0
  58. package/dist/assets/LiveApp-CUoQgVo1.js +62 -0
  59. package/dist/assets/LiveSettings-jn26sH4v.js +6 -0
  60. package/dist/assets/MindMapViewerDrawer-CDDzzpFi.js +1 -0
  61. package/dist/assets/MindShape-BeZFay7O.js +1 -0
  62. package/dist/assets/MindShape-CaPeUo-a.css +1 -0
  63. package/dist/assets/{Orb-B0NEVfqL.js → Orb-D8lhTdmY.js} +1 -1
  64. package/dist/assets/PinToDashboard-CSqwDBLD.js +1 -0
  65. package/dist/assets/PlanReview-ChZeUHQO.js +1 -0
  66. package/dist/assets/Presence-CKSoyuhE.js +1 -0
  67. package/dist/assets/PresentationDeck-Dj9MQVZC.js +1 -0
  68. package/dist/assets/PrismApp-Dfs6eAuR.js +2 -0
  69. package/dist/assets/PrismAskController-CSsCkRC8.js +37 -0
  70. package/dist/assets/PrismBriefingPlayer-BoB_PCTT.js +2 -0
  71. package/dist/assets/PrismOverlay-CGtr7lBl.js +109 -0
  72. package/dist/assets/PrismWorkbench-f0rLNBxb.js +1 -0
  73. package/dist/assets/{PrivacyApp-rhzy-5HG.js → PrivacyApp-CFs0PM5C.js} +16 -10
  74. package/dist/assets/Recap-T9DtFaEk.js +1 -0
  75. package/dist/assets/ReelJelly-D5e-jt-8.js +1 -0
  76. package/dist/assets/ReplayCard-BkJbY0-I.js +2 -0
  77. package/dist/assets/ReplayCard-Cs6mzTRa.css +1 -0
  78. package/dist/assets/ReplayOverlay-Dm_k7FBA.js +1 -0
  79. package/dist/assets/ReplayOverlay-DzkcTnCA.css +1 -0
  80. package/dist/assets/RewindOverlay-BSDbLgcN.js +1 -0
  81. package/dist/assets/RippleApp-DW1rpKHe.js +2 -0
  82. package/dist/assets/RippleAskController-CywVzqUA.js +34 -0
  83. package/dist/assets/RippleOverlay-DVxfWEQ8.js +6 -0
  84. package/dist/assets/SeeDontRead-Ct4PY63d.js +1 -0
  85. package/dist/assets/ShareModal-BILPvqjZ.js +2 -0
  86. package/dist/assets/{ShareModal-PobtP7AJ.css → ShareModal-D1QuQEko.css} +1 -1
  87. package/dist/assets/ShipCascade-Bf-qDWMb.js +1 -0
  88. package/dist/assets/ShipCourse-DGj9BbRM.js +1 -0
  89. package/dist/assets/{ShipGate-BYYu9WVq.js → ShipGate-D4BP41-h.js} +1 -1
  90. package/dist/assets/ShipHotspots-lGioTtf1.js +1 -0
  91. package/dist/assets/{ShipIncident-Xod2gbjc.js → ShipIncident-DMLb14Lx.js} +1 -1
  92. package/dist/assets/ShipMigration-ZnzL-1rC.js +1 -0
  93. package/dist/assets/ShipOnboarding-DUxtx2Vr.js +1 -0
  94. package/dist/assets/ShipRead-CJJmY-wy.js +1 -0
  95. package/dist/assets/ShipRollout-Dt2TgI0L.js +1 -0
  96. package/dist/assets/ShipSuggestions-BrAXTjAR.js +1 -0
  97. package/dist/assets/ShipWorkspace-_MtKAiKH.js +2 -0
  98. package/dist/assets/SignatureLoop-CfM-rTXb.js +1 -0
  99. package/dist/assets/SrsReview-B1B2VekR.css +1 -0
  100. package/dist/assets/SrsReview-DhWNYYv7.js +1 -0
  101. package/dist/assets/SynthesisApp-C43ZO6Ew.js +2 -0
  102. package/dist/assets/SynthesisOverlay-Dunk_JWD.js +66 -0
  103. package/dist/assets/{TermsApp-Dk2jpxq-.js → TermsApp-BUQa48cB.js} +13 -3
  104. package/dist/assets/TopbarMenu-DQXxqSWY.js +1 -0
  105. package/dist/assets/TopicCanvas-DR26Swr_.js +2 -0
  106. package/dist/assets/TourPrism-zt1LIaLd.js +1 -0
  107. package/dist/assets/TrackerTile-sYD2MM_4.js +2 -0
  108. package/dist/assets/TwoSurfaces-CLOIlVvY.js +1 -0
  109. package/dist/assets/UnderstoodPanel-DmJph4el.js +1 -0
  110. package/dist/assets/WhyMachineOverlay-Nll4Wco-.js +1 -0
  111. package/dist/assets/WowFeatures-CNVwRlf0.js +1 -0
  112. package/dist/assets/ZoomDeck-DNgyW7Nm.js +1 -0
  113. package/dist/assets/__vite-browser-external-gfE6fZcA.js +1 -0
  114. package/dist/assets/alternateFinishes-Cgks49KV.js +494 -0
  115. package/dist/assets/annotationAuto-C9weSF2k.js +1 -0
  116. package/dist/assets/annotationReel-va1i-lKs.js +1 -0
  117. package/dist/assets/annotations-CftUUB13.js +1 -0
  118. package/dist/assets/attachments-BW-vki-E.js +1 -0
  119. package/dist/assets/backup-D--1WRte.js +1 -0
  120. package/dist/assets/blockLabel-FogyzEQY.js +1 -0
  121. package/dist/assets/blockTypes-CgNGx27_.js +1 -0
  122. package/dist/assets/buildShip-BgFg98tH.js +1 -0
  123. package/dist/assets/cache-CvbSI-pr.js +1 -0
  124. package/dist/assets/canvas-DIs20T9l.js +1 -0
  125. package/dist/assets/capture-BBxyt5SN.js +2 -0
  126. package/dist/assets/catalog-Db9GWM6N.js +1 -0
  127. package/dist/assets/{cfo.generated-Bjl5OGay.js → cfo.generated-j5CXp1Zz.js} +1 -1
  128. package/dist/assets/chapters-Dqm4iLDa.js +1 -0
  129. package/dist/assets/charts2-CaKGzkgJ.js +1 -0
  130. package/dist/assets/checkLogModel-BMtruriG.js +1 -0
  131. package/dist/assets/{citation-BcvmjKS8.js → citation-BsSvaaer.js} +1 -1
  132. package/dist/assets/{codeContext-0UMRSGRr.js → codeContext-goNoLAIr.js} +1 -1
  133. package/dist/assets/compiler-runtime-qQQXpJgv.js +1 -0
  134. package/dist/assets/{compose-BJ9EfcQS.js → compose-D-OsDiU9.js} +1 -1
  135. package/dist/assets/confirmAdd-BDNV8RqF.js +1 -0
  136. package/dist/assets/{contentVault-DzTYWcbD.js → contentVault-xfUwSJ3i.js} +1 -1
  137. package/dist/assets/coreIcons-BzqW7Qiz.js +1 -0
  138. package/dist/assets/cpp-CJIxL8VH.js +1 -0
  139. package/dist/assets/cpp-Cts1PyIS.js +1 -0
  140. package/dist/assets/dash-composer-DeNWVwpU.css +1 -0
  141. package/dist/assets/dashboardEvents-BDKxoLch.js +2 -0
  142. package/dist/assets/dashboards-Dy4MTJQ5.css +1 -0
  143. package/dist/assets/dataPending-lZUzUEo6.js +1 -0
  144. package/dist/assets/{diagrams-CaSfjT4I.js → diagrams-1DJMD4j-.js} +1 -1
  145. package/dist/assets/dist-DRo0JOkC.js +14 -0
  146. package/dist/assets/{dist-DIKAXwpM.js → dist-kNHRtoqd.js} +21 -21
  147. package/dist/assets/empty-BO1NC9qY.js +1 -0
  148. package/dist/assets/{explode-WBykfhqW.js → explode-fgkkWz8o.js} +1 -1
  149. package/dist/assets/facts-BUGuVUIc.js +1 -0
  150. package/dist/assets/fit-CMu7prjb.js +1 -0
  151. package/dist/assets/fitText-DQ2omSN0.js +1 -0
  152. package/dist/assets/format-q0LwBjID.js +1 -0
  153. package/dist/assets/{format-hc2QOoIu.js → format-rPI6ZwwH.js} +1 -1
  154. package/dist/assets/friendlyAsk-BBdRZIar.js +1 -0
  155. package/dist/assets/{generate-8odaTyr4.js → generate-CemSUZ8A.js} +3 -3
  156. package/dist/assets/generateBeats-aqKTlSN2.js +1 -0
  157. package/dist/assets/{generateCourse-Cj_-vDWu.js → generateCourse-BIBbw-ZJ.js} +1 -1
  158. package/dist/assets/generateLive-BsXn4Y_d.js +51 -0
  159. package/dist/assets/githubBrowser-BDiuD9dz.js +1 -0
  160. package/dist/assets/githubToken-Bwa7V9YT.js +1 -0
  161. package/dist/assets/history-D2EH2X6D.js +1 -0
  162. package/dist/assets/homeTarget-CsO8nY7z.js +1 -0
  163. package/dist/assets/http-Lar_UMKb.js +2 -0
  164. package/dist/assets/{icons-CHVz6kv_.js → icons-gLFQTv74.js} +1 -1
  165. package/dist/assets/incident-D3bmMmES.js +10 -0
  166. package/dist/assets/index-B69GkoTc.css +1 -0
  167. package/dist/assets/index-D1SPhBGd.js +22 -0
  168. package/dist/assets/index.es-yrxxdux0.js +5 -0
  169. package/dist/assets/jspdf.es.min-Bbaa2Qun.js +79 -0
  170. package/dist/assets/jsx-runtime-DeHZSEgm.js +1 -0
  171. package/dist/assets/katex-CiJ_n4H9.js +257 -0
  172. package/dist/assets/keyVault-Aw5Y2PjT.js +1 -0
  173. package/dist/assets/kokoro-C6P0LV4L.js +1 -0
  174. package/dist/assets/layout-CEoNLr-w.js +1 -0
  175. package/dist/assets/{layout-CkO0Psde.js → layout-CHn3XWJd.js} +1 -1
  176. package/dist/assets/learn-CXstDWJf.js +1 -0
  177. package/dist/assets/ledger-Cv0LBflx.js +1 -0
  178. package/dist/assets/lib-B7OE1ZQQ.js +1 -0
  179. package/dist/assets/liveSchema-B8OByCPH.js +99 -0
  180. package/dist/assets/maplibre-gl-CrDadnl3.js +801 -0
  181. package/dist/assets/maplibre-gl-worker-DZ7nj4vd.js +11 -0
  182. package/dist/assets/{mastery-D7xYf5D7.js → mastery-CUfDeuqO.js} +2 -2
  183. package/dist/assets/{media-CsrUl279.js → media-BvwzACIX.js} +1 -1
  184. package/dist/assets/{model-BE0UHu1w.js → model-BsQ5ixwB.js} +1 -1
  185. package/dist/assets/motion-BY_Egaxm.js +1 -0
  186. package/dist/assets/motion-DxHSlPN6.js +1 -0
  187. package/dist/assets/{neighborhoods-DFqKm9Xi.js → neighborhoods-D7QjURnE.js} +1 -1
  188. package/dist/assets/notes-U6gRKVHk.js +1 -0
  189. package/dist/assets/officeDoc-Dn8jw1fG.js +3 -0
  190. package/dist/assets/openchemlib-Cz_MN0FG.js +23 -0
  191. package/dist/assets/{owners-FXDGInVq.js → owners-HRBX7JN_.js} +1 -1
  192. package/dist/assets/parseDiff-D8uBQ9mQ.js +2 -0
  193. package/dist/assets/pdf-CUAVYiYW.js +54 -0
  194. package/dist/assets/pdf.worker.min-CHFwMXne.mjs +29 -0
  195. package/dist/assets/pen-D9UT-ioQ.js +24 -0
  196. package/dist/assets/{perfProbe-Xs39DqMh.js → perfProbe-BxyiHsI2.js} +1 -1
  197. package/dist/assets/{php-CYrBA5iX.js → php-CQT4wx5i.js} +1 -1
  198. package/dist/assets/pin-D-4Zjiik.css +1 -0
  199. package/dist/assets/pin-qQrH_dBi.js +1 -0
  200. package/dist/assets/planTracker-CjnznF7v.js +1 -0
  201. package/dist/assets/portal-t0bsUEg2.js +1 -0
  202. package/dist/assets/{pptxgen.es-CveAizg8.js → pptxgen.es-zw8PIOkD.js} +11 -11
  203. package/dist/assets/predictions-CkVKHq-5.js +1 -0
  204. package/dist/assets/preload-helper-CiWYd9n-.js +1 -0
  205. package/dist/assets/preloadableLazy-MIX1ApBW.js +1 -0
  206. package/dist/assets/{prewarm-K5WcvrNh.js → prewarm-CAZcnT4x.js} +1 -1
  207. package/dist/assets/prism.generated-BQkO5r6r.js +41 -0
  208. package/dist/assets/{prismExtract.worker-Cws9K1NG.js → prismExtract.worker-OxGWMXXN.js} +1 -1
  209. package/dist/assets/prismGround.worker-C9hyveb3.js +1 -0
  210. package/dist/assets/prismLayout.worker-CJa4orCT.js +1 -0
  211. package/dist/assets/providers-DdJWf_PE.js +1 -0
  212. package/dist/assets/purify.es-JEAr64Sr.js +3 -0
  213. package/dist/assets/{queue-J4h7E3uc.js → queue-Adae4IzW.js} +1 -1
  214. package/dist/assets/quietHours-_i5Uqz7z.js +1 -0
  215. package/dist/assets/quizResult-DB8yeqDr.js +1 -0
  216. package/dist/assets/react-BZJXY1be.js +1 -0
  217. package/dist/assets/ready-4lPJes2S.js +1 -0
  218. package/dist/assets/ready-LSwk88I-.js +1 -0
  219. package/dist/assets/{reference-sJzyMiL4.js → reference-BjexflMu.js} +1 -1
  220. package/dist/assets/registry-4mMEt1Xy.css +1 -0
  221. package/dist/assets/registry-7poQfBaM.js +4 -0
  222. package/dist/assets/registry-9QjeHgKs.js +1 -0
  223. package/dist/assets/registry-B0GIHERt.js +1 -0
  224. package/dist/assets/{registry-DpaaVbmL.css → registry-B1KQ1VPZ.css} +1 -1
  225. package/dist/assets/registry-B5S3brjM.css +1 -0
  226. package/dist/assets/registry-BFbfXK-W.js +1 -0
  227. package/dist/assets/registry-BSX3aFUw.js +1 -0
  228. package/dist/assets/registry-Bv1f5UU4.js +2 -0
  229. package/dist/assets/registry-BzH7mEl7.js +1 -0
  230. package/dist/assets/registry-C28gYnVq.js +1 -0
  231. package/dist/assets/registry-COkvZrNA.css +1 -0
  232. package/dist/assets/registry-CPImC7mO.js +1 -0
  233. package/dist/assets/registry-CPiwQhAm.js +1 -0
  234. package/dist/assets/registry-CcOO8UZr.js +1 -0
  235. package/dist/assets/registry-Ci65uThi.js +1 -0
  236. package/dist/assets/registry-CkScyZGa.js +1 -0
  237. package/dist/assets/registry-CtvKPLd7.js +1 -0
  238. package/dist/assets/{registry-upbw6pyj.css → registry-CuVk7MAI.css} +1 -1
  239. package/dist/assets/{registry-D5oMqeSa.js → registry-CueC1vq1.js} +1 -1
  240. package/dist/assets/registry-CvylL2BN.css +1 -0
  241. package/dist/assets/registry-CxUmdwDk.js +1 -0
  242. package/dist/assets/registry-D8O0apUT.js +2 -0
  243. package/dist/assets/registry-DLyrLfe-2.js +1 -0
  244. package/dist/assets/registry-DO4hGO5e.js +1 -0
  245. package/dist/assets/{registry-Xzq_Rpmm.css → registry-DScSjt8p.css} +1 -1
  246. package/dist/assets/registry-Daypk4uR.js +1 -0
  247. package/dist/assets/registry-Dd1lcXrO.js +2 -0
  248. package/dist/assets/{registry-DWcNVyI2.css → registry-DpMI23iE.css} +1 -1
  249. package/dist/assets/registry-NbNNn_ra.js +1 -0
  250. package/dist/assets/registry-Vp8VuMV0.js +9 -0
  251. package/dist/assets/registry-WHd1PwU3.js +1 -0
  252. package/dist/assets/registry-Xl8mAnKq.js +1 -0
  253. package/dist/assets/registry-tkd3UhWn.css +1 -0
  254. package/dist/assets/{registry-ei6fIgBT.css → registry-twSIyxJQ.css} +1 -1
  255. package/dist/assets/registry-types-D3q_LrlV.js +1 -0
  256. package/dist/assets/registry-w4R6c89s.js +48 -0
  257. package/dist/assets/{relate-CEND9Qlk.js → relate-DHPSGB7a.js} +1 -1
  258. package/dist/assets/replay-zh4xVk5G.js +1 -0
  259. package/dist/assets/rolldown-runtime-DkW27tQK.js +1 -0
  260. package/dist/assets/route-D4kd-D3B.js +1 -0
  261. package/dist/assets/{ruby-BhrksQMt.js → ruby-D_UtGFHI.js} +1 -1
  262. package/dist/assets/{run-Dc2ZJz6n.js → run-BdDyp6Xv.js} +2 -2
  263. package/dist/assets/run-ByCJN-29.js +23 -0
  264. package/dist/assets/run-DiPX83_J.js +21 -0
  265. package/dist/assets/safeImageUrl-BINWXOTz.js +1 -0
  266. package/dist/assets/screen-DFWKge3-.js +1 -0
  267. package/dist/assets/search-ZN7v_P5B.js +1 -0
  268. package/dist/assets/shapes-DI0LQC8n.js +1 -0
  269. package/dist/assets/shard005-Dp5TM33O.js +1 -0
  270. package/dist/assets/shard006-DpJfkjmW.js +1 -0
  271. package/dist/assets/shard007-CIQN8OfZ.js +1 -0
  272. package/dist/assets/shard008-BFiyL7r6.js +1 -0
  273. package/dist/assets/shard009-0s30Tkk9.js +1 -0
  274. package/dist/assets/shard010-DPhgF5ck.js +1 -0
  275. package/dist/assets/shard011-C2jVsC25.js +1 -0
  276. package/dist/assets/shard012-DYtN5yzJ.js +1 -0
  277. package/dist/assets/shard013-1D6_Qy9C.js +1 -0
  278. package/dist/assets/shard014-D8s7GHnm.js +1 -0
  279. package/dist/assets/shard015-16W6KgnL.js +1 -0
  280. package/dist/assets/shard016-B4PpWmro.js +1 -0
  281. package/dist/assets/shard017-BO1sA5b3.js +1 -0
  282. package/dist/assets/shard018-D4gn8z25.js +1 -0
  283. package/dist/assets/shard019-vSbfaqRA.js +1 -0
  284. package/dist/assets/shard020-DwbHP8bp.js +1 -0
  285. package/dist/assets/{shard021-2FE-tze4.js → shard021-BhEyVVAL.js} +1 -1
  286. package/dist/assets/shard022-BdT7zFy3.js +1 -0
  287. package/dist/assets/shard023-Dga_NQcm.js +1 -0
  288. package/dist/assets/shard024-CXHofcxc.js +1 -0
  289. package/dist/assets/shard025-a4CQKYw1.js +1 -0
  290. package/dist/assets/shard026-0rhLKfDL.js +1 -0
  291. package/dist/assets/shard027-C9GMfOtn.js +1 -0
  292. package/dist/assets/shard028-D9__rPnw.js +1 -0
  293. package/dist/assets/shard029-BSdYKGgG.js +1 -0
  294. package/dist/assets/shard030-DceOU7pS.js +1 -0
  295. package/dist/assets/shard031-C6_p076r.js +1 -0
  296. package/dist/assets/shard032-Cah16sJi.js +1 -0
  297. package/dist/assets/shard033-D-iobGzc.js +1 -0
  298. package/dist/assets/shard034-DIyfCKl8.js +1 -0
  299. package/dist/assets/shard035-BHWs8v0a.js +1 -0
  300. package/dist/assets/shard036-AhOPHqzq.js +1 -0
  301. package/dist/assets/shard037-CuAGDOOu.js +1 -0
  302. package/dist/assets/shard038-CYdtnPjK.js +1 -0
  303. package/dist/assets/shard039-DgvXKOyi.js +1 -0
  304. package/dist/assets/shard040-DO012waT.js +1 -0
  305. package/dist/assets/shard041-BeUicA1R.js +1 -0
  306. package/dist/assets/shard042-D2zbq14A.js +1 -0
  307. package/dist/assets/shard043-BKoTEB-H.js +1 -0
  308. package/dist/assets/shard044-bmYKfH3A.js +1 -0
  309. package/dist/assets/shard045-i_R1olD9.js +1 -0
  310. package/dist/assets/shard046-CFk2L0GQ.js +1 -0
  311. package/dist/assets/shard047-pjHCnVaT.js +1 -0
  312. package/dist/assets/shard048-Cc7tGz6R.js +1 -0
  313. package/dist/assets/shard049-C9eoD-6Z.js +1 -0
  314. package/dist/assets/shard050-V3c_ZDrB.js +1 -0
  315. package/dist/assets/shard051-D1ISwZzf.js +1 -0
  316. package/dist/assets/shard052-Dy09xx3S.js +1 -0
  317. package/dist/assets/shard053-Bi4Z4cwW.js +1 -0
  318. package/dist/assets/shard054-BoC-LNYu.js +1 -0
  319. package/dist/assets/shard055-D2NJeMN1.js +1 -0
  320. package/dist/assets/shard056-sSFMbxXN.js +1 -0
  321. package/dist/assets/shard057-DhNK5nyZ.js +1 -0
  322. package/dist/assets/shard058-Du4SjxeD.js +1 -0
  323. package/dist/assets/shard059-fGiLnJzG.js +1 -0
  324. package/dist/assets/shard060-l84MDY2t.js +1 -0
  325. package/dist/assets/shard061-B3aIa7Aa.js +1 -0
  326. package/dist/assets/{shard061-C9A8iNiq.js → shard062-BJ8OX6CJ.js} +1 -1
  327. package/dist/assets/shard063-CMo-7Qit.js +1 -0
  328. package/dist/assets/shard064-B0EEOnfG.js +1 -0
  329. package/dist/assets/shard065-D-StlUHp.js +1 -0
  330. package/dist/assets/share-kW3pZ027.js +1 -0
  331. package/dist/assets/shikiHighlight-BwX78OP8.js +153 -0
  332. package/dist/assets/speed-K5_Ebj-8.js +1 -0
  333. package/dist/assets/spokenText-D3iS8fuI.js +1 -0
  334. package/dist/assets/spreadLabels-CQ8hufvK.js +1 -0
  335. package/dist/assets/src-DG1n-LFe.js +1 -0
  336. package/dist/assets/store-BWLbFXiY.js +1 -0
  337. package/dist/assets/{store-BMRQiV1z.js → store-BfHRbVKz.js} +1 -1
  338. package/dist/assets/store-D-f8ZuaK.js +1 -0
  339. package/dist/assets/store-D2IJF4SA.js +0 -0
  340. package/dist/assets/store-DpObYU1u.js +1 -0
  341. package/dist/assets/store-DpmbKVs7.js +1 -0
  342. package/dist/assets/store-gohr8YVT.js +1 -0
  343. package/dist/assets/{streamParse-DRgMHWye.js → streamParse-B-Gjwa9T.js} +1 -1
  344. package/dist/assets/svgLabel-BQMDdcT2.js +1 -0
  345. package/dist/assets/swift-CyEgAFGc.js +1 -0
  346. package/dist/assets/theme-f0mztBcq.js +1 -0
  347. package/dist/assets/threads-Cu2t3070.js +1 -0
  348. package/dist/assets/tiles-CBiVVjtT.css +1 -0
  349. package/dist/assets/tiles-pdNi6MGe.js +1 -0
  350. package/dist/assets/types-CaO6xOn5.js +1 -0
  351. package/dist/assets/useDashboardLoop-DuckIfJX.js +5 -0
  352. package/dist/assets/useDashboards-BMcuCWoz.js +1 -0
  353. package/dist/assets/{useFocusTrap-DbfG6zbM.js → useFocusTrap-DBtkeyRy.js} +1 -1
  354. package/dist/assets/useInView-CXTOAEV3.js +1 -0
  355. package/dist/assets/useLedger-1WVXef68.js +1 -0
  356. package/dist/assets/useLiveConfig-9eJ7EM3B.js +1 -0
  357. package/dist/assets/useSpatialCanvas-CtVsYmp8.js +1 -0
  358. package/dist/assets/useSpotlightWalk-DxlxBezO.js +1 -0
  359. package/dist/assets/useSrsCards-C27o39fF.js +1 -0
  360. package/dist/assets/useStudy-B5874Bcg.js +1 -0
  361. package/dist/assets/{useTimeout-BRYvu2jQ.js → useTimeout-Cm4yzted.js} +1 -1
  362. package/dist/assets/{useValidatedImage-D2fhA198.js → useValidatedImage-BQi2c66o.js} +1 -1
  363. package/dist/assets/useZoomGesture-CN0p0lHL.js +1 -0
  364. package/dist/assets/verbatim-DBTj9sPD.js +1 -0
  365. package/dist/assets/worker-D7eK-Ya8.js +2 -0
  366. package/dist/demo-assets/CREDITS.md +75 -24
  367. package/dist/demo-assets/pdf/cfd-primer.pdf +0 -0
  368. package/dist/demo-assets/video/azores-film.webm +0 -0
  369. package/dist/fonts/LICENSE.txt +32 -28
  370. package/dist/fonts/OFL-1.1.txt +81 -0
  371. package/dist/fonts/PROVENANCE.md +38 -0
  372. package/dist/index.html +14 -8
  373. package/dist/legal/DISCLAIMER.md +4 -1
  374. package/dist/legal/PRIVACY.md +14 -8
  375. package/dist/legal/TERMS.md +11 -1
  376. package/dist/legal/THIRD-PARTY.txt +25248 -621
  377. package/dist/pdfjs/LICENSE_JBIG2 +196 -0
  378. package/dist/pdfjs/LICENSE_OPENJPEG +39 -0
  379. package/dist/pdfjs/LICENSE_PDFJS_JBIG2 +13 -0
  380. package/dist/pdfjs/LICENSE_PDFJS_OPENJPEG +22 -0
  381. package/dist/pdfjs/LICENSE_PDFJS_QCMS +22 -0
  382. package/dist/pdfjs/LICENSE_QCMS +21 -0
  383. package/dist/pdfjs/jbig2.wasm +0 -0
  384. package/dist/pdfjs/openjpeg.wasm +0 -0
  385. package/dist/pdfjs/qcms_bg.wasm +0 -0
  386. package/docker-compose.yml +40 -7
  387. package/docs/media/answer-ink.jpg +0 -0
  388. package/docs/media/canvas-view.jpg +0 -0
  389. package/docs/media/deck-export.jpg +0 -0
  390. package/docs/media/deep-zoom.jpg +0 -0
  391. package/docs/media/doc-export.jpg +0 -0
  392. package/docs/media/doc-prism.jpg +0 -0
  393. package/docs/media/repo-course.jpg +0 -0
  394. package/docs/media/think-map.jpg +0 -0
  395. package/docs/media/trip-plan.jpg +0 -0
  396. package/docs/media/voice-scrub.jpg +0 -0
  397. package/package.json +71 -60
  398. package/voice/start-whisper.sh +28 -0
  399. package/voice/whisper.Dockerfile +44 -0
  400. package/dist/assets/AppCommandPalette-B3E1gTd4.js +0 -1
  401. package/dist/assets/AtlasView-B8b67dk0.js +0 -1
  402. package/dist/assets/BlockEmpty-DQkdduUE.js +0 -1
  403. package/dist/assets/BriefingPlayer-CRKTlKa3.js +0 -1
  404. package/dist/assets/CanvasSkeleton-cQ6KF-6z.js +0 -2
  405. package/dist/assets/CardEditor-DzJXb0G7.js +0 -1
  406. package/dist/assets/CheckLogRail-C6nouD1Y.js +0 -1
  407. package/dist/assets/CheckLogRail-F4AlgAcc.css +0 -1
  408. package/dist/assets/CommandPalette-CSvgbXxg.js +0 -1
  409. package/dist/assets/CourseLessonReader-1KDKwxIj.js +0 -2
  410. package/dist/assets/CourseRail-BijCpApU.js +0 -1
  411. package/dist/assets/CoursesApp-BWkdYL07.js +0 -2
  412. package/dist/assets/CrossExamPanel-Cn7b5y7B.js +0 -1
  413. package/dist/assets/DashPresent-B025i7iJ.js +0 -1
  414. package/dist/assets/DashboardDetail-CZLnxgp0.js +0 -2
  415. package/dist/assets/DashboardLoopRuntime-7MpMUcMg.js +0 -1
  416. package/dist/assets/DashboardOverview-COyleu7v.js +0 -1
  417. package/dist/assets/DashboardSettings-DUfUqbsp.js +0 -1
  418. package/dist/assets/DashboardsApp-6xMz2qCP.js +0 -2
  419. package/dist/assets/DelegatePanel-D4OrMa2D.js +0 -33
  420. package/dist/assets/DemoGallery-Bt92vKqc.js +0 -1
  421. package/dist/assets/DropSelect-Q310fTbf.js +0 -1
  422. package/dist/assets/ExportModal-D0zXlC8w.js +0 -2
  423. package/dist/assets/ExtractionPreview-0SZYynDs.js +0 -18
  424. package/dist/assets/FeatureUseNotice-CoK5HkbR.js +0 -1
  425. package/dist/assets/FlagshipCTA-D845jkdt.js +0 -1
  426. package/dist/assets/FlagshipCommandPalette-DHMnyG7j.js +0 -1
  427. package/dist/assets/FlagshipShowcase-BuR3PZvU.js +0 -1
  428. package/dist/assets/FlashcardsApp-BzWb4cRP.js +0 -1
  429. package/dist/assets/ForecastPanel-lTnux0EB.js +0 -1
  430. package/dist/assets/GalleryApp-D0NGZ1_t.js +0 -1
  431. package/dist/assets/LegalApp-DXDomKFv.js +0 -1
  432. package/dist/assets/LegalPageShell-BG5UUk-9.js +0 -1
  433. package/dist/assets/LegalPageShell-C_HottbD.css +0 -1
  434. package/dist/assets/LeverPanel-CvYnTLjh.js +0 -1
  435. package/dist/assets/Library-Cl1gE9Qg.js +0 -1
  436. package/dist/assets/LibraryOverlay-CX4cJLqD.js +0 -1
  437. package/dist/assets/LiveApp-CDckMWYX.js +0 -61
  438. package/dist/assets/LiveApp-Dj_6EQuL.css +0 -1
  439. package/dist/assets/LiveSettings-DgfIXanM.js +0 -6
  440. package/dist/assets/MindMapViewerDrawer-ClU9wgSH.js +0 -1
  441. package/dist/assets/MindShape-DjHtMW_5.css +0 -1
  442. package/dist/assets/MindShape-yF19n9qq.js +0 -1
  443. package/dist/assets/PinToDashboard-CpIDAcIU.js +0 -1
  444. package/dist/assets/PlanReview-CPcqOxjp.js +0 -1
  445. package/dist/assets/Presence-CHGZ1JRp.js +0 -1
  446. package/dist/assets/PresentationDeck-CrtiWjiM.js +0 -1
  447. package/dist/assets/PrismApp-D7RbekoX.js +0 -2
  448. package/dist/assets/PrismAskController-D6_7Epdb.js +0 -37
  449. package/dist/assets/PrismBriefingPlayer-Dq5_KRU3.js +0 -2
  450. package/dist/assets/PrismOverlay-CduGpA8D.js +0 -131
  451. package/dist/assets/Quiz-CUwtekfu.js +0 -1
  452. package/dist/assets/Recap-BPg2xEPo.js +0 -1
  453. package/dist/assets/ReelJelly-LWeMsFpj.js +0 -1
  454. package/dist/assets/ReplayCard-C3dGQfxG.js +0 -2
  455. package/dist/assets/ReplayOverlay-C9W603B5.js +0 -1
  456. package/dist/assets/RewindOverlay-BIWmxQlx.js +0 -1
  457. package/dist/assets/RippleApp-C9-KFvkn.js +0 -2
  458. package/dist/assets/RippleAskController-DEKz-6Vn.js +0 -34
  459. package/dist/assets/RippleOverlay-CfXvnUHE.js +0 -6
  460. package/dist/assets/SeeDontRead-DrG1qBxJ.js +0 -1
  461. package/dist/assets/ShareModal-eJ6sdMpf.js +0 -32
  462. package/dist/assets/ShipCascade-BP8qL0yM.js +0 -1
  463. package/dist/assets/ShipCourse-BoqW58VU.js +0 -1
  464. package/dist/assets/ShipHotspots-_9XPhZg2.js +0 -1
  465. package/dist/assets/ShipMigration-BdkaiJ9D.js +0 -1
  466. package/dist/assets/ShipOnboarding-CblWatXR.js +0 -1
  467. package/dist/assets/ShipRead-BBn7xkOF.js +0 -1
  468. package/dist/assets/ShipRollout-i5BY3YnP.js +0 -1
  469. package/dist/assets/ShipSuggestions-liytLgC-.js +0 -1
  470. package/dist/assets/ShipWorkspace-C3VQwGn1.js +0 -2
  471. package/dist/assets/SignatureLoop-Ba7plTb5.js +0 -1
  472. package/dist/assets/SrsReview-BoaYb6XN.js +0 -1
  473. package/dist/assets/SrsReview-DmGdGxT0.css +0 -1
  474. package/dist/assets/SynthesisApp-Ch0tWRBS.js +0 -2
  475. package/dist/assets/SynthesisOverlay-DMZndCzV.js +0 -66
  476. package/dist/assets/TopicCanvas-DX0Z1ZHv.js +0 -2
  477. package/dist/assets/TourPrism-6fWPMU4Z.js +0 -1
  478. package/dist/assets/TrackerTile-BboQpBGy.js +0 -2
  479. package/dist/assets/TwoSurfaces-Cabk1rES.js +0 -1
  480. package/dist/assets/UnderstoodPanel-B6jfiKx1.js +0 -1
  481. package/dist/assets/WhyMachineOverlay-BRNibJSf.js +0 -1
  482. package/dist/assets/WowFeatures-C7f4qzIf.js +0 -1
  483. package/dist/assets/ZoomDeck-BtlVyhwv.js +0 -1
  484. package/dist/assets/__vite-browser-external-BufR4LQa.js +0 -1
  485. package/dist/assets/alternateFinishes-CVUX4x0C.js +0 -494
  486. package/dist/assets/annotationAuto-BjWqgseH.js +0 -1
  487. package/dist/assets/annotationReel-B5A2RZkx.js +0 -1
  488. package/dist/assets/annotations-D2K9A5GB.js +0 -1
  489. package/dist/assets/backup-d46KwktS.js +0 -1
  490. package/dist/assets/blockLabel-DAqaHKy3.js +0 -1
  491. package/dist/assets/cache-BumECILO.js +0 -1
  492. package/dist/assets/canvas-BuMP6u6i.js +0 -1
  493. package/dist/assets/catalog-Bv0dWU_C.js +0 -1
  494. package/dist/assets/chapters-Cbe53c3W.js +0 -1
  495. package/dist/assets/charts2-tyUiQPff.js +0 -1
  496. package/dist/assets/chunk-BVpWp9h4.js +0 -1
  497. package/dist/assets/confirmAdd-CWWtX1VN.js +0 -1
  498. package/dist/assets/cpp-BGdv8dzs.js +0 -1
  499. package/dist/assets/cpp-CNAAXZl-.js +0 -1
  500. package/dist/assets/dashboardEvents-Be4sftHN.js +0 -2
  501. package/dist/assets/dashboards-rcWxdoXI.css +0 -1
  502. package/dist/assets/dist-xRGLOZwv.js +0 -14
  503. package/dist/assets/facts-BBTt3ImG.js +0 -1
  504. package/dist/assets/fit-CuHWhwsj.js +0 -1
  505. package/dist/assets/fitText-CDFmCQzl.js +0 -1
  506. package/dist/assets/format-DlZTyeMy.js +0 -1
  507. package/dist/assets/generateBeats-b64CL54v.js +0 -1
  508. package/dist/assets/generateLive-CMbGT3eM.js +0 -52
  509. package/dist/assets/githubBrowser-DywfDeYx.js +0 -1
  510. package/dist/assets/githubToken-DtcLYqwm.js +0 -11
  511. package/dist/assets/homeTarget-BcZYH3DY.js +0 -1
  512. package/dist/assets/http-CJCtjYpA.js +0 -2
  513. package/dist/assets/index-CepQEz75.css +0 -1
  514. package/dist/assets/index-Dbr1j8Fe.js +0 -22
  515. package/dist/assets/index.es-CRLiWwiA.js +0 -5
  516. package/dist/assets/jspdf.es.min-ydC1TxUW.js +0 -79
  517. package/dist/assets/jsx-runtime-DaSxXjOY.js +0 -1
  518. package/dist/assets/katex-BMCG0xok.js +0 -257
  519. package/dist/assets/keyVault-DEsNh9FR.js +0 -1
  520. package/dist/assets/kokoro-DsmNzulR.js +0 -1
  521. package/dist/assets/layout-BFQOzXtG.js +0 -1
  522. package/dist/assets/leaflet-src-C_xhOQY7.js +0 -1
  523. package/dist/assets/learn-DVfqN-nf.js +0 -1
  524. package/dist/assets/lib-B6qSkBPa.js +0 -1
  525. package/dist/assets/liveSchema-B1MGdSkK.js +0 -99
  526. package/dist/assets/motion-luJxBPnj.js +0 -1
  527. package/dist/assets/notes-3WQ6b0Mi.js +0 -1
  528. package/dist/assets/officeDoc-B6nEhNp4.js +0 -3
  529. package/dist/assets/openchemlib-nMLMmg26.js +0 -23
  530. package/dist/assets/pdf-RyoPCIGN.js +0 -11
  531. package/dist/assets/pdf.worker.min-yatZIOMy.mjs +0 -21
  532. package/dist/assets/pin-Bya3BL_a.css +0 -1
  533. package/dist/assets/pin-Cj-LMfpK.js +0 -1
  534. package/dist/assets/planTracker-7AMCQPNx.js +0 -1
  535. package/dist/assets/portal-zyqZwnb1.js +0 -1
  536. package/dist/assets/predictions-CYS7Vo39.js +0 -1
  537. package/dist/assets/prism.generated-BhbHDHR6.js +0 -41
  538. package/dist/assets/prismGround.worker-CIvKqxm2.js +0 -1
  539. package/dist/assets/prismLayout.worker-CZO2CY7B.js +0 -1
  540. package/dist/assets/providers-wzm7E8Pa.js +0 -1
  541. package/dist/assets/purify.es-adlwq8Pz.js +0 -3
  542. package/dist/assets/quietHours-BklvMqsV.js +0 -1
  543. package/dist/assets/react-BQSORdFI.js +0 -1
  544. package/dist/assets/registry-1h9idbfk.js +0 -2
  545. package/dist/assets/registry-2zthbrHC.js +0 -1
  546. package/dist/assets/registry-4O5l9cd5.js +0 -1
  547. package/dist/assets/registry-5a-E7vEN.css +0 -1
  548. package/dist/assets/registry-BRB85vr4.js +0 -2
  549. package/dist/assets/registry-BVHiKEwE.css +0 -1
  550. package/dist/assets/registry-BcZXBr3y.css +0 -1
  551. package/dist/assets/registry-BdMZ_4cm.js +0 -2
  552. package/dist/assets/registry-Bnp_yh8G.js +0 -4
  553. package/dist/assets/registry-C1IrZBk8.js +0 -1
  554. package/dist/assets/registry-C5DK98Hl.js +0 -1
  555. package/dist/assets/registry-CK0-re_Q.js +0 -49
  556. package/dist/assets/registry-COrl_Heq.js +0 -1
  557. package/dist/assets/registry-CQUQlrSx.js +0 -1
  558. package/dist/assets/registry-CXa3qXl3.js +0 -1
  559. package/dist/assets/registry-C_baBbqq.js +0 -5
  560. package/dist/assets/registry-CjY5POtx.js +0 -1
  561. package/dist/assets/registry-CoBAqOlY.js +0 -1
  562. package/dist/assets/registry-DJj-o3MQ.js +0 -1
  563. package/dist/assets/registry-DVzLacl_.css +0 -1
  564. package/dist/assets/registry-DfCCnIfu.js +0 -1
  565. package/dist/assets/registry-DfgFkD3J.js +0 -1
  566. package/dist/assets/registry-Dhlx1mF4.js +0 -1
  567. package/dist/assets/registry-Dkc7hN5T.js +0 -1
  568. package/dist/assets/registry-DmQlNN3y.js +0 -1
  569. package/dist/assets/registry-DnEh7nbX.js +0 -1
  570. package/dist/assets/registry-VD94nLXO.js +0 -1
  571. package/dist/assets/registry-aIH-Im5Y.css +0 -1
  572. package/dist/assets/registry-mFD4P5dI.js +0 -1
  573. package/dist/assets/registry-sDzDmht4.js +0 -1
  574. package/dist/assets/registry-types-DMuK0vJ6.js +0 -1
  575. package/dist/assets/run-BYP2YlZT.js +0 -23
  576. package/dist/assets/run-DSVvshaB.js +0 -21
  577. package/dist/assets/safeImageUrl-CUkucDUu.js +0 -1
  578. package/dist/assets/screen-DLR7p_yP.js +0 -1
  579. package/dist/assets/search-Be63DJkp.js +0 -1
  580. package/dist/assets/shapes-Cw7tCHIp.js +0 -1
  581. package/dist/assets/shard005-DLVkh9IH.js +0 -1
  582. package/dist/assets/shard006-B6efKHov.js +0 -1
  583. package/dist/assets/shard007-AFdZLe38.js +0 -1
  584. package/dist/assets/shard008-LbSBzwRx.js +0 -1
  585. package/dist/assets/shard009-D_6-SUDb.js +0 -1
  586. package/dist/assets/shard010-DbOj-uZW.js +0 -1
  587. package/dist/assets/shard011-BYSz7EEW.js +0 -1
  588. package/dist/assets/shard012-B5Ypj7OV.js +0 -1
  589. package/dist/assets/shard013-BtsliNIe.js +0 -1
  590. package/dist/assets/shard014-15sjmk68.js +0 -1
  591. package/dist/assets/shard015-nnXrqru_.js +0 -1
  592. package/dist/assets/shard016-BayXFE13.js +0 -1
  593. package/dist/assets/shard017-Cy4cGexs.js +0 -1
  594. package/dist/assets/shard018-aO-BYJ8H.js +0 -1
  595. package/dist/assets/shard019-gxaTeA3I.js +0 -1
  596. package/dist/assets/shard020-BibJdMI0.js +0 -1
  597. package/dist/assets/shard022-IXiyG-JK.js +0 -1
  598. package/dist/assets/shard023-314F6NJS.js +0 -1
  599. package/dist/assets/shard024-cN5rpQ_X.js +0 -1
  600. package/dist/assets/shard025-KKTaXOGE.js +0 -1
  601. package/dist/assets/shard026-C2Dkd1t6.js +0 -1
  602. package/dist/assets/shard027-Xy-8x9As.js +0 -1
  603. package/dist/assets/shard028-Bul-klUj.js +0 -1
  604. package/dist/assets/shard029-BbRSUcUZ.js +0 -1
  605. package/dist/assets/shard030-GYllsFVC.js +0 -1
  606. package/dist/assets/shard031-DMigeiyn.js +0 -1
  607. package/dist/assets/shard032-CcvmzK0l.js +0 -1
  608. package/dist/assets/shard033-11AU702M.js +0 -1
  609. package/dist/assets/shard034-Bx3urxjM.js +0 -1
  610. package/dist/assets/shard035-DBdEeyCt.js +0 -1
  611. package/dist/assets/shard036-vYgoRBqS.js +0 -1
  612. package/dist/assets/shard037-DP4MMw91.js +0 -1
  613. package/dist/assets/shard038-ffxsv7d6.js +0 -1
  614. package/dist/assets/shard039-C1JHHNp9.js +0 -1
  615. package/dist/assets/shard040-JbVvCSO_.js +0 -1
  616. package/dist/assets/shard041-5L_eFwGx.js +0 -1
  617. package/dist/assets/shard042-C9nsGL79.js +0 -1
  618. package/dist/assets/shard043-Dx_9HSKI.js +0 -1
  619. package/dist/assets/shard044-B3QQNC4A.js +0 -1
  620. package/dist/assets/shard045-B7z0WHO6.js +0 -1
  621. package/dist/assets/shard046-D1yDablJ.js +0 -1
  622. package/dist/assets/shard047-DJi3AgeT.js +0 -1
  623. package/dist/assets/shard048-D_2ipfUr.js +0 -1
  624. package/dist/assets/shard049-1aGgWZdd.js +0 -1
  625. package/dist/assets/shard050-Bjwa0Og4.js +0 -1
  626. package/dist/assets/shard051-Cx_GAk3v.js +0 -1
  627. package/dist/assets/shard052-LaeOD3V5.js +0 -1
  628. package/dist/assets/shard053-D-da7Foj.js +0 -1
  629. package/dist/assets/shard054-CM8eSRQk.js +0 -1
  630. package/dist/assets/shard055-QRpDl4Vs.js +0 -1
  631. package/dist/assets/shard056-DkY7CQm3.js +0 -1
  632. package/dist/assets/shard057-BVCgf7o0.js +0 -1
  633. package/dist/assets/shard058-93aGtdrX.js +0 -1
  634. package/dist/assets/shard059-rJE9X1_I.js +0 -1
  635. package/dist/assets/shard060-Lu_hfl1r.js +0 -1
  636. package/dist/assets/shard062-BBIpEYZO.js +0 -1
  637. package/dist/assets/shard063-C_uen3Ub.js +0 -1
  638. package/dist/assets/shard064-DAHUsHST.js +0 -1
  639. package/dist/assets/share-QHGHNDhQ.js +0 -1
  640. package/dist/assets/shikiHighlight-SCFIB43b.js +0 -153
  641. package/dist/assets/speed-DwPw9KSv.js +0 -1
  642. package/dist/assets/spokenText-D4zPX9JY.js +0 -1
  643. package/dist/assets/src-B-t8Mww-.js +0 -2
  644. package/dist/assets/store-DXmC_fP2.js +0 -0
  645. package/dist/assets/store-Dn23_Ymr.js +0 -1
  646. package/dist/assets/store-DoJn3lBF.js +0 -1
  647. package/dist/assets/store-DrBDvqXF.js +0 -1
  648. package/dist/assets/swift-DonLKvLd.js +0 -1
  649. package/dist/assets/threads-CkMgrSDP.js +0 -1
  650. package/dist/assets/useDashboardLoop-C8Mcbcto.js +0 -5
  651. package/dist/assets/useLiveConfig-BW1WkpTc.js +0 -1
  652. package/dist/assets/useSpatialCanvas-C5TNlpeK.js +0 -1
  653. package/dist/assets/useSpotlightWalk-dA3IdI-1.js +0 -1
  654. package/dist/assets/useSrsCards-C7Xni9C0.js +0 -1
  655. package/dist/assets/useStudy-DHRIx8p-.js +0 -1
  656. package/dist/assets/useZoomGesture-BsPXvLw2.js +0 -1
  657. package/dist/assets/verbatim-CBMzUDlf.js +0 -1
  658. package/dist/assets/worker-BbLKfGzm.js +0 -2
  659. package/dist/demo-assets/video/azores-film.mp4 +0 -0
  660. /package/dist/assets/{shard065-C2edvdvh.js → shard066-C2edvdvh.js} +0 -0
  661. /package/dist/assets/{shard066-DFcuVhZm.js → shard067-DFcuVhZm.js} +0 -0
  662. /package/dist/assets/{shard067-BN8DM8JZ.js → shard068-BN8DM8JZ.js} +0 -0
  663. /package/dist/assets/{shard068-i464K77p.js → shard069-i464K77p.js} +0 -0
  664. /package/dist/assets/{shard069-Dm9m2a5U.js → shard070-Dm9m2a5U.js} +0 -0
  665. /package/dist/assets/{shard070-BPVvR8GH.js → shard071-BPVvR8GH.js} +0 -0
  666. /package/dist/assets/{shard071-Bal_0d9L.js → shard072-Bal_0d9L.js} +0 -0
  667. /package/dist/assets/{shard072-CBQu62kt.js → shard073-CBQu62kt.js} +0 -0
  668. /package/dist/assets/{shard073-D5BRae0w.js → shard074-D5BRae0w.js} +0 -0
  669. /package/dist/assets/{shard074-DtFvcBnZ.js → shard075-DtFvcBnZ.js} +0 -0
  670. /package/dist/assets/{queue-DHeyJ32F.css → templates-DHeyJ32F.css} +0 -0
@@ -0,0 +1 @@
1
+ var e=`vault`,t=`secret-key-v1`;function n(){return typeof indexedDB<`u`&&typeof crypto<`u`&&!!crypto.subtle&&typeof TextEncoder<`u`}function r(){return new Promise((t,n)=>{let r=indexedDB.open(`mavea-key-vault`,1);r.onupgradeneeded=()=>r.result.createObjectStore(e),r.onsuccess=()=>t(r.result),r.onerror=()=>n(r.error??Error(`indexedDB open failed`))})}function i(t,n){return new Promise((r,i)=>{let a=t.transaction(e,`readonly`).objectStore(e).get(n);a.onsuccess=()=>r(a.result),a.onerror=()=>i(a.error??Error(`indexedDB get failed`))})}function a(t,n,r){return new Promise((i,a)=>{let o=t.transaction(e,`readwrite`).objectStore(e).put(r,n);o.onsuccess=()=>i(),o.onerror=()=>a(o.error??Error(`indexedDB put failed`))})}var o=new Map;function s(e){let t=o.get(e);if(t)return t;let n=(async()=>{let t=await r();try{let n=await i(t,e);if(n instanceof CryptoKey)return n;let r=await crypto.subtle.generateKey({name:`AES-GCM`,length:256},!1,[`encrypt`,`decrypt`]);return await a(t,e,r),r}finally{t.close()}})().catch(t=>{throw o.get(e)===n&&o.delete(e),t});return o.set(e,n),n}function c(e){let t=``;for(let n of e)t+=String.fromCharCode(n);return btoa(t)}function l(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}async function u(e,t){if(!n())throw Error(`crypto unavailable`);let r=await s(t),i=crypto.getRandomValues(new Uint8Array(12)),a=await crypto.subtle.encrypt({name:`AES-GCM`,iv:i},r,new TextEncoder().encode(e)),o=new Uint8Array(i.length+a.byteLength);return o.set(i,0),o.set(new Uint8Array(a),i.length),c(o)}async function d(e,t){if(!n())throw Error(`crypto unavailable`);let r=await s(t),i=l(e),a=i.slice(0,12),o=i.slice(12),c=await crypto.subtle.decrypt({name:`AES-GCM`,iv:a},r,o);return new TextDecoder().decode(c)}function f(e){return u(e,t)}function p(e){return d(e,t)}export{u as i,d as n,f as r,p as t};
@@ -0,0 +1 @@
1
+ import{r as e}from"./rolldown-runtime-DkW27tQK.js";import{c as t,f as n,l as r,u as i}from"./index-D1SPhBGd.js";import{r as a,t as o}from"./spokenText-D3iS8fuI.js";var s=e({cancelSpeech:()=>m,isSpeaking:()=>h,isVoicePreparing:()=>ee,primeLine:()=>p,sayable:()=>u,speak:()=>d,speakLine:()=>f,subscribeSpeaking:()=>g}),c=/[\u{1F300}-\u{1FAFF}\u{2600}-\u{27BF}\u{2B00}-\u{2BFF}\u{2300}-\u{23FF}]/gu,l=/[\uFE0F\u200D]/g;function u(e){return a(String(e)).replace(/<[^>]*>/g,` `).replace(/&[a-z]+;/gi,` `).replace(/```[\s\S]*?```/g,` `).replace(/`([^`]+)`/g,`$1`).replace(/^\s{0,3}#{1,6}\s+/gm,``).replace(/^\s*[-*+]\s+/gm,``).replace(/^\s*\d{1,2}[.)]\s+/gm,``).replace(/\*\*([^*]+)\*\*/g,`$1`).replace(/\*([^*]+)\*/g,`$1`).replace(/\bMav[eé]a['’]s\s*/gi,``).replace(/\s*\bMav[eé]a\b\s*/gi,` `).replace(/\s+([.,!?;:])/g,`$1`).replace(c,``).replace(l,``).replace(/[“”"]/g,``).replace(/[•★→·|]/g,` `).replace(/[—–]/g,`, `).replace(/\s+/g,` `).trim()}function d(e,t){f(e,t).finished}function f(e,t){return We(e,t)}function p(e,t){Be(e,t)}function m(){Ke()}function h(){return qe()}function ee(){return Je()}function g(e){return Ye(e)}var _={Omakase:`oh-mah-kah-seh`,omakase:`oh-mah-kah-seh`,OMAKASE:`oh-mah-kah-seh`,CUDA:`kooda`,cuDNN:`koo dee en en`,JSON:`jason`,YAML:`yammel`,GUI:`gooey`,SaaS:`sass`,ASCII:`askee`,WYSIWYG:`wizzywig`,NASA:`nassa`,NASDAQ:`nazdack`,JPEG:`jaypeg`,OAuth:`oh-auth`,nginx:`engine x`,PyTorch:`pie torch`,Qwen:`kwen`,SQLite:`sequel lite`,MySQL:`my sequel`,PostgreSQL:`postgres`};function te(e){return e.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`)}var v=RegExp(`(?<![A-Za-z0-9])(${Object.keys(_).sort((e,t)=>t.length-e.length).map(te).join(`|`)})(s)?(?![A-Za-z0-9])`,`g`);function y(e){return e.replace(v,(e,t,n)=>{let r=_[t];return n?`${r}${n}`:r})}var b={Jan:`January`,Feb:`February`,Mar:`March`,Apr:`April`,Jun:`June`,Jul:`July`,Aug:`August`,Sep:`September`,Sept:`September`,Oct:`October`,Nov:`November`,Dec:`December`},ne=RegExp(`(?<![A-Za-z])(${Object.keys(b).join(`|`)})\\.?(?=,?\\s+\\d)`,`g`);function re(e){return e.replace(ne,(e,t)=>b[t])}function ie(e){return re(y(o(a(e))))}var x=new Map,S=0;function ae(e,t,n){return`${e}::${t}::${n}`}function oe(e){let t=x.get(e);return t?(x.delete(e),x.set(e,t),t):null}function se(e){return x.has(e)}function ce(e,t){if(t.length===0||t.length>2097152)return;let n=x.get(e);for(n&&(x.delete(e),S-=n.length);S+t.length>8388608&&x.size>0;){let e=x.keys().next().value;S-=x.get(e).length,x.delete(e)}x.set(e,t),S+=t.length}var C=24e3,le=.08,ue=.2,de=2;function w(e,t){if(e.length===0)return{samples:new Float32Array,carry:t};let n=t!==null,r=+!!n+e.length,i=r>>1,a=new Float32Array(i),o=0,s=0;if(n&&i>0){let n=t|e[0]<<8;n>=32768&&(n-=65536),a[o++]=n/32768,s=1}for(;o<i;o++,s+=2){let t=e[s]|e[s+1]<<8;t>=32768&&(t-=65536),a[o]=t/32768}return{samples:a,carry:(r&1)==1?e[e.length-1]:null}}var T=null;function fe(e){T=e}var pe=1,E=!1,D=()=>E?0:pe,me=new Set,he=new Set;function ge(){let e=D();k&&(k.gain.gain.value=e);for(let t of me)t.volume=e}function _e(e){pe=Math.min(1,Math.max(.05,e)),ge()}var ve=1;function ye(e){ve=Math.min(2,Math.max(.75,e))}function O(){return ve}function be(e){let t=E!==e;if(E=e,ge(),t)for(let e of he)e()}function xe(){return E}function Se(e){return he.add(e),()=>{he.delete(e)}}function Ce(e){return e.volume=D(),me.add(e),()=>{me.delete(e)}}var k=null,A=0,j=null;function M(e){for(let t of e.sources){try{t.stop()}catch{}try{t.disconnect()}catch{}}e.sources.clear();try{e.releaseTap()}catch{}try{e.gain.disconnect()}catch{}try{e.abort.abort()}catch{}k===e&&(k=null)}function we(){A++,j?.abort(),j=null;let e=k;e&&(e.cancelled=!0,e.finishEarly?.(),M(e))}var Te=e=>new Promise(t=>setTimeout(t,e));async function Ee(e,t,n,a,o){let s=r();if(!s)return!1;if(s.state!==`running`)try{await s.resume()}catch{}if(s.state!==`running`)return!1;let c=new AbortController,l=A;j=c;let u;try{u=await fetch(`/tts/v1/audio/speech`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({model:`kokoro`,input:e,voice:t,response_format:`pcm`,speed:o??ve}),signal:c.signal})}catch{return j===c&&(j=null),l!==A}if(j===c&&(j=null),l!==A){try{c.abort()}catch{}return!0}if(!u.ok||!u.body)return!1;let d=s.createGain();d.gain.value=D();let f={sources:new Set,releaseTap:i(d),gain:d,abort:c,cancelled:!1};k&&(k.cancelled=!0,M(k)),k=f;let p=s.currentTime+le,m=!1,h=T;try{h?.begin(e)}catch{}let ee=e=>{if(!e.length)return;let t=s.createBuffer(1,e.length,C);t.getChannelData(0).set(e);let r=s.createBufferSource();if(r.buffer=t,r.connect(d),p<s.currentTime&&(p=s.currentTime+.02),r.start(p),p+=t.duration,!m)try{n?.()}catch{}m=!0,f.sources.add(r),r.onended=()=>{f.sources.delete(r);try{r.disconnect()}catch{}}},g=[],_=0,te=Math.round(ue*C),v=()=>{if(_===0)return;let e;if(g.length===1)e=g[0];else{e=new Float32Array(_);let t=0;for(let n of g)e.set(n,t),t+=n.length}g=[],_=0,ee(e)},y=a?[]:null,b=0;try{let e=u.body.getReader(),t=null;for(;;){for(;!f.cancelled&&p-s.currentTime>de;)await Te(60);if(f.cancelled)break;let{done:n,value:r}=await e.read();if(f.cancelled||n)break;if(!r||r.length===0)continue;y&&(b+=r.length,b>2097152?y=null:y.push(r));let i=w(r,t);if(t=i.carry,i.samples.length){g.push(i.samples),_+=i.samples.length;try{h?.push(i.samples)}catch{}}(m?_>=te:_>0)&&v()}f.cancelled||v()}catch(e){f.cancelled||console.warn(`[streamTts] stream read failed mid-line — audio may be truncated`,e)}if(!f.cancelled&&m){if(a){let e=null;if(y){e=new Uint8Array(b);let t=0;for(let n of y)e.set(n,t),t+=n.length}try{a(e)}catch{}}await new Promise(e=>{let t=Math.max(0,(p-s.currentTime)*1e3)+40,n=setTimeout(e,t);f.finishEarly=()=>{clearTimeout(n),e()}})}let ne=f.cancelled;M(f);try{h?.end(m)}catch{}return ne||m}var De=1;async function Oe(e,t,n){let a=r();if(!a||e.length<2)return!1;let o=A;if(a.state!==`running`)try{await a.resume()}catch{}if(a.state!==`running`)return!1;if(o!==A)return!0;let s=a.createGain();s.gain.value=D();let c={sources:new Set,releaseTap:i(s),gain:s,abort:new AbortController,cancelled:!1};k&&(k.cancelled=!0,M(k)),k=c;let l=T;try{l?.begin(t)}catch{}let{samples:u}=w(e,null);try{l?.push(u)}catch{}let d=a.currentTime+le,f=!1,p=Math.round(De*C);for(let e=0;e<u.length&&!c.cancelled;e+=p){let t=u.subarray(e,Math.min(e+p,u.length)),r=a.createBuffer(1,t.length,C);r.getChannelData(0).set(t);let i=a.createBufferSource();if(i.buffer=r,i.connect(s),i.start(d),d+=r.duration,!f)try{n?.()}catch{}f=!0,c.sources.add(i),i.onended=()=>{c.sources.delete(i);try{i.disconnect()}catch{}}}!c.cancelled&&f&&await new Promise(e=>{let t=Math.max(0,(d-a.currentTime)*1e3)+40,n=setTimeout(e,t);c.finishEarly=()=>{clearTimeout(n),e()}});let m=c.cancelled;M(c);try{l?.end(f)}catch{}return m||f}var ke=[{id:`heart`,label:`Heart`,kokoro:`af_heart`,tone:`warm`},{id:`emma`,label:`Emma`,kokoro:`bf_emma`,tone:`calm`},{id:`bella`,label:`Bella`,kokoro:`af_bella`,tone:`bright`},{id:`michael`,label:`Michael`,kokoro:`am_michael`,tone:`clear`},{id:`george`,label:`George`,kokoro:`bm_george`,tone:`steady`}],Ae=`heart`,je=`mavea-voice-mavea`;function N(e){return ke.find(t=>t.id===e)}var Me=e({cancelKokoro:()=>Ke,kokoroAvailable:()=>Ze,kokoroKnownAvailable:()=>$e,kokoroSpeaking:()=>qe,kokoroSynthesizing:()=>Je,kokoroVoice:()=>Pe,primeKokoroLine:()=>Be,resetKokoroProbe:()=>et,setKokoroVoice:()=>Ne,speakKokoroLine:()=>We,speakKokoroResult:()=>Ge,subscribeKokoroSpeaking:()=>Ye}),P={mavea:N(`heart`)?.kokoro??`af_heart`,user:N(`george`)?.kokoro??`bm_george`};function Ne(e,t){t&&(P[e]=t)}function Pe(e){return P[e]}var F=[],I=!1,L=!1,R=!1,z=0,B=null,V=null,H=null,Fe=null,U=null,W=new Set,Ie=!1,Le=!1;function G(){let e=qe(),t=Je();if(e!==Ie||t!==Le){Ie=e,Le=t;for(let e of W)e()}}function Re(){if(H){try{URL.revokeObjectURL(H)}catch{}H=null}}function K(){Fe&&=(Fe(),null)}var q=null,J=null,Y=null;function ze(){let e=F[0]??B;if(!e||$e()!==!0)return;let t=O(),n=ae(e.voice,t,e.text);if(se(n)||J===n)return;q?.abort();let r=new AbortController;q=r,J=n,Y=(async()=>{try{let i=await fetch(`/tts/v1/audio/speech`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({model:`kokoro`,input:e.text,voice:e.voice,response_format:`pcm`,speed:t}),signal:r.signal});if(i.ok){let e=new Uint8Array(await i.arrayBuffer());e.length&&ce(n,e)}}catch{}finally{q===r&&(q=null,J=null,Y=null)}})()}function Be(e,t){let n=ie(u(e));n&&(B={text:n,voice:P[t]??P.mavea},R||ze())}async function Ve(e){let t=O(),n=ae(e.voice,t,e.text);B&&B.text===e.text&&(B=null);try{let r=oe(n);if(!r&&J===n&&Y&&(await Y,r=oe(n)),r&&(ze(),await Oe(r,e.text,()=>e.start(!0))))return!0;q&&J!==n&&(q.abort(),q=null,J=null,Y=null),R=!0;try{if(await Ee(e.text,e.voice,()=>e.start(!0),e=>{R=!1,e&&ce(n,e),ze()},t))return!0}finally{R=!1}}catch{}R=!0;try{return await He(e)}finally{R=!1}}async function He(e){let t=!1,r=new AbortController;U=r;try{let i=await fetch(`/tts/v1/audio/speech`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({model:`kokoro`,input:e.text,voice:e.voice,response_format:`wav`,speed:O()}),signal:r.signal});if(!i.ok)return!1;let a=await i.blob();if(!a.size)return!1;let o=URL.createObjectURL(a);H=o,await new Promise(r=>{let i=new Audio(o);V=i,Fe=Ce(i);let a=n(i),s=!1,c=e=>{s||(s=!0,K(),a(),t=e,r())};i.onended=()=>c(!0),i.onerror=()=>c(!1);let l=i.play();l&&typeof l.then==`function`?l.then(()=>e.start(!0),()=>c(!1)):e.start(!0)})}catch{}finally{U===r&&(U=null),K(),Re(),V=null}return t}async function Ue(){if(!I){I=!0;try{for(;F.length;){let e=F.shift();L=!0,G();let t={...e,start:t=>{L=!1,G(),e.start(t)}},n=z,r=!1;if(await Ze()&&n===z){let e=await Ve(t);r=e&&n===z,!e&&n===z&&Qe()}t.start(r),t.done(r)}}finally{I=!1,G()}}}function We(e,t){let n=ie(u(e));if(!n)return{started:Promise.resolve(!1),finished:Promise.resolve(!1)};let r,i=new Promise(e=>{r=e}),a=!1,o=e=>{a||(a=!0,r(e))};return{started:i,finished:new Promise(e=>{F.push({text:n,voice:P[t]??P.mavea,start:o,done:e}),G(),Ue()})}}function Ge(e,t){return We(e,t).finished}function Ke(){z++,we(),B=null,q&&(q.abort(),q=null,J=null,Y=null),U&&=(U.abort(),null);let e=F.splice(0,F.length);for(let t of e)try{t.start(!1),t.done(!1)}catch{}if(V)try{V.pause(),V.src=``}catch{}K(),Re(),V=null,L=!1,t(),G()}function qe(){return I||F.length>0||V!==null}function Je(){return I&&L}function Ye(e){return W.add(e),()=>W.delete(e)}var Xe=2e4,X=null,Z=null,Q=0,$=!1;function Ze(){if(X&&Q!==0&&Date.now()>=Q&&(X=null),!X){Q=0;let e=(async()=>{try{let e=await fetch(`/tts/health`,{method:`GET`});return!e.ok&&!$&&console.debug(`[kokoro] TTS health check returned`,e.status,`— voice off, captions only`),e.ok}catch(e){return $||console.debug(`[kokoro] TTS health check unreachable — voice off, captions only`,e),!1}})();X=e,e.then(t=>{X===e&&(Z=t,$=!t,Q=t?0:Date.now()+Xe)})}return X}function Qe(){Z===!0&&(Q=Date.now())}function $e(){return Z}function et(){X=null,Z=null,Q=0,$=!1}export{f as A,ie as C,p as D,ee as E,s as M,u as O,Se as S,h as T,be as _,Me as a,ye as b,Ae as c,N as d,Ce as f,xe as g,O as h,Pe as i,g as j,d as k,je as l,w as m,Ze as n,Ne as o,we as p,$e as r,Ge as s,Ke as t,ke as u,fe as v,m as w,Ee as x,_e as y};
@@ -0,0 +1 @@
1
+ var e=12,t={insight:{min:4,pref:4,height:.3},kpi:{min:4,pref:6,height:.3},ring:{min:4,pref:5,height:.45},gauge:{min:4,pref:5,height:.45},donut:{min:4,pref:5,height:.5},breakdown:{min:4,pref:6,height:.55},stack:{min:5,pref:7,height:.4},bars:{min:5,pref:7,height:.6},chart:{min:6,pref:8,height:.6},scatter:{min:6,pref:8,height:.6},list:{min:4,pref:6,height:.55},checklist:{min:4,pref:6,height:.55},timeline:{min:6,pref:8,height:.7},flow:{min:6,pref:8,height:.5},compare:{min:8,pref:12,height:.8},map:{min:8,pref:12,height:.8},heat:{min:8,pref:12,height:.75},gallery:{min:6,pref:8,height:.7}},n={min:4,pref:6,max:e,height:.5};function r(t,n=1,r=e){return Math.min(r,Math.max(n,Math.round(t)))}function i(i,a){let o=i.type??``,s={...n,...t[o],...a?.(i)??{}},c=r(s.min??n.min),l=r(s.max??e);return{min:c,pref:r(Math.max(c,s.pref??n.pref),c,l),max:l,height:Math.min(1,Math.max(0,s.height??n.height))}}function a(t,n){if(n===e)return t;let r=n/e,i=Math.max(1,Math.round(t.min*r)),a=n;return{min:i,pref:Math.min(a,Math.max(i,Math.round(t.pref*r))),max:a,height:t.height}}function o(e,t,n){if(e.length===0||t<3)return!1;for(let t of e)if(Math.abs(t.height-n.height)>.45)return!0;return!1}function s(t,n){let r=Math.max(2,Math.round(4*n/e)),i=[],a=0;for(;a<t.length;){let e=[a],s=t[a].pref,c=a+1;for(;c<t.length&&e.length<r;){let r=t[c];if(s+r.pref>n||o(e.map(e=>t[e]),s,r))break;e.push(c),s+=r.pref,c++}i.push(e),a=c}let s=e=>e.reduce((e,n)=>e+t[n].min,0),c=(e,t)=>e.length+t.length<=r&&s(e)+s(t)<=n;for(let e=0;e<i.length;){if(i[e].length!==1){e++;continue}let t=i[e+1],n=i[e-1];t&&c(i[e],t)?i.splice(e,2,[...i[e],...t]):n&&c(n,i[e])?(i.splice(e-1,2,[...n,...i[e]]),e=Math.max(0,e-1)):(n&&n.length>=3&&c([n[n.length-1]],i[e])&&i[e].unshift(n.pop()),e++)}return i}function c(e,t){let n=e.map(e=>e.pref),r=()=>n.reduce((e,t)=>e+t,0);for(let i=0;r()<t&&i<200;i++){let t=-1;for(let r=0;r<n.length;r++)n[r]>=e[r].max||(t===-1||n[r]<n[t])&&(t=r);if(t===-1)break;n[t]++}for(let i=0;r()>t&&i<200;i++){let t=-1;for(let r=0;r<n.length;r++)n[r]<=e[r].min||(t===-1||n[r]>n[t])&&(t=r);if(t===-1)break;n[t]--}return n}function l(t,n,o=e){if(t.length===0)return t;let l=Math.max(1,Math.min(e,Math.round(o))),u=t.map(e=>a(i(e,n),l)),d=t.map(e=>e.col);for(let t of s(u,l)){let n=c(t.map(e=>u[e]),l);t.forEach((t,i)=>{d[t]=r(Math.round(n[i]/l*e),1,e)})}return t.map((e,t)=>e.col===d[t]?e:{...e,col:d[t]})}export{l as n,t};
@@ -1 +1 @@
1
- var e={callout:{title:`Recommendation`,icon:`shield`,iconColor:`var(--warning)`,tone:`warn`,kicker:`Before signing`,body:`Sign-ready <b>after three redlines</b> to §8.2 and the liability cap. The economics are fine; the renewal mechanics are the only real exposure.`,points:[`Redline §8.2: notice 90 → 30 days; consider deleting auto-renew entirely.`,`Raise the liability cap from 1× to 12× annual fees (data processor).`,`Either way, <b>calendar the Nov 30 2027 notice deadline now</b>.`],footer:`Want me to draft the redline markup and a one-paragraph cover note to their counsel?`},verdictcard:{title:`The call`,stance:`caution`,label:`Ship it, carefully`,verdict:`Build the search rewrite first, behind a flag, and gate the quarter on its p95.`,reason:`Four of five headline features ride on the new index, derisk it before anything leans on it.`,caveat:`If the index migration slips two weeks, cut Polish from Q3, not the search hardening.`,confidence:`medium`,footer:`The roadmap below holds either way, this only changes what ships <strong>last</strong>.`},scenarioset:{title:`How the search rewrite could land`,icon:`chart`,iconColor:`var(--insight)`,metric:`Search p95 at end of quarter (target 400ms)`,scenarios:[{kind:`best`,value:`~320ms`,detail:`Index migration lands on time; cache hit-rate holds.`,points:[`All five features ship`,`Polish keeps its Q3 slot`]},{kind:`likely`,value:`~480ms`,detail:`A two-week migration slip, recovered with cache tuning.`,points:[`Four features ship on time`,`Polish slips ~2 weeks`]},{kind:`worst`,value:`~900ms`,detail:`Index rewrite stalls; fall back to the old path.`,points:[`Search-dependent features held`,`Quarter re-planned`]}],footer:`A range, not a promise, we revisit at the mid-quarter checkpoint.`},worthit:{title:`Is the premium one worth the splurge?`,product:`The cashmere wrap (option 1)`,verdict:`worth-it`,price:`$140`,priceNote:`vs ~$45 for the acrylic look-alike`,worthItIf:[`She wears scarves often and keeps them for years`,`You want it to feel like a real occasion gift`],skipIf:[`She rarely layers`,`A thoughtful card matters more than the label`],dealBreaker:`Cashmere needs hand-washing — if she would not fuss over it, the merino blend is the smarter pick.`,forWho:`someone who notices quality and will actually reach for it`,bottomLine:`For a milestone gift the wrap earns its price; for a casual one, the blend gets 90% of the feel.`,footer:`Both ship in time if you order by Thursday.`},companionnote:{reflection:`Four weeks of short nights is a lot to carry — no wonder the days feel heavier.`,follow:`The numbers aren't a verdict on you; they're just showing what your body's been asking for.`,chip:`one small change is enough`},positioncard:{title:`How worried should you be tonight?`,icon:`alert`,levels:[{label:`Usually fine`,tone:`good`,detail:`Alert between spikes, drinking, wetting diapers — a fever the body is handling.`},{label:`Watch closely`,tone:`caution`,detail:`Clingy and drained but still responsive; recheck in a few hours.`},{label:`Call tonight`,tone:`bad`,detail:`Hard to rouse, breathing fast, or under 3 months with any fever.`}],atLevel:0,marker:`From what you described`,reason:`A playful-between-spikes, drinking child sits at the reassuring end — how they look matters more than the number.`,watchFor:[`Under 3 months with any fever`,`A stiff neck, a rash that does not fade under a glass, or trouble breathing`,`No wet diaper in 8 hours, or no tears when crying`],caveat:`This places the situation, it does not diagnose it — your read of your child wins.`},differential:{title:`What is usually behind a fever like this`,icon:`eye`,causes:[{name:`A common viral infection`,likelihood:`common`,tell:`Runny nose or cough, comes and goes over a few days`,pointsAway:`A fever lasting past day 5 with no other symptoms`},{name:`Ear or throat infection`,likelihood:`common`,tell:`Tugging at an ear, pain swallowing, or fussier lying down`,pointsAway:`No ear or throat complaints at all`},{name:`A urinary infection`,likelihood:`less-common`,tell:`Fever with no cold symptoms, especially in younger kids`,pointsAway:`An obvious cold already explaining it`},{name:`A serious bacterial infection`,likelihood:`rare`,serious:!0,tell:`Very drowsy, stiff neck, or a non-fading rash`,pointsAway:`Alert and interactive between spikes`}],prompt:`Look for the tell-tale signs above — a cough or runny nose usually points to the common, harmless causes.`,caveat:`These are possibilities with honest odds, not a diagnosis; a clinician can examine and confirm.`},reframecard:{title:`A gentler take`,thought:`I bombed that interview, so I am clearly not cut out for this role.`,distortion:`all-or-nothing`,reframe:`One hard interview is a single data point, not a verdict on your whole career — you answered three of the five questions well, and that is something to build on.`,footer:`Notice the jump from <b>one moment</b> to <b>a whole identity</b> — that is the part worth questioning.`},breathpacer:{title:`A moment before bed`,pattern:`478`,note:`A slow 4-7-8 breath nudges your body toward rest — try a few rounds as the lights go down.`},copingmenu:{title:`When Wednesday feels like too much`,icon:`spark`,intro:`Pick whatever feels possible — you don’t have to do all of them.`,options:[{label:`Take three slow breaths before the next call`,detail:`Resets your shoulders so the back-to-back stretch starts a little calmer.`,effort:`low`,time:`1 min`,icon:`wind`},{label:`Decline or shorten the one meeting that could move`,detail:`Even reclaiming 20 minutes makes the crunch breathable.`,effort:`medium`,time:`5 min`,icon:`clock`},{label:`Step outside for a short walk at lunch`,detail:`A change of light and air between blocks, no agenda.`,effort:`medium`,time:`10 min`,icon:`walk`},{label:`Block the first hour tomorrow as protected focus`,detail:`Gives the rest of the week one place that stays yours.`,effort:`high`,time:`2 min`,icon:`shield`}],footer:`None of these have to be perfect — one is plenty for a heavy day.`},subtextdecode:{title:`What your sister might mean`,flavor:`tone`,message:`Fine, do whatever works for you. I'll figure out my own ride.`,readings:[{interpretation:`She is hurt and hoping you will offer to drive her after all`,likelihood:`most likely`,cue:`“Fine” plus “I’ll figure out my own ride” often signals disappointment, not agreement`},{interpretation:`She genuinely has another plan and is letting you off the hook`,likelihood:`possible`,cue:`“whatever works for you” can be a sincere release with no edge to it`},{interpretation:`She is annoyed and pulling back from the conversation`,likelihood:`less likely`,cue:`the clipped, short reply could read as withdrawing rather than wounded`}],cantKnow:`Tone does not travel well over text, so you cannot be sure which of these it is from the words alone.`,reply:`Hey, that message felt a little off to me — are you actually okay with the plan, or would you rather I drove you?`},rehearsal:{title:`Rehearsing the chat about taking the car keys`,icon:`chat`,opener:`Dad, I love you and I want you safe — can we talk honestly about the driving?`,branches:[{reaction:`get defensive or insist they are fine`,say:`I hear you, and this isn’t about taking anything away — it’s about keeping you on the road as long as we safely can.`,why:`Names the fear behind the resistance and keeps you on the same side.`},{reaction:`go quiet and shut down`,say:`We don’t have to settle it now. Could we just try one daytime drive together this week and see how it feels?`,why:`A small, time-boxed step is far easier to agree to than a verdict.`},{reaction:`ask what the alternatives even are`,say:`Good question — I’ve looked at the senior shuttle and splitting rides, so you’d keep your independence.`,why:`Shows you came with options, not just a problem.`}],exit:`Let’s sit with it and revisit on Sunday — no decision today.`,footer:`Lead with care, give him a small next step, and let him keep his dignity.`},messagescriptset:{title:`What to say to cancel the three you forgot`,intro:`Each one has its own quirks, so the wording differs. Copy the line, send it, and keep the rebuttal handy.`,scripts:[{target:`Streaming bundle (auto-renews Jul 2)`,channel:`in-app`,message:`Please cancel my subscription effective at the end of the current billing period. I do not want it to auto-renew. Can you confirm the cancellation in writing?`,rebuttal:`If they offer a discount to stay: "Thanks, but I’d still like to cancel today and reconsider later if I need it."`},{target:`Gym membership`,channel:`email`,message:`I’d like to cancel my membership. Please tell me the exact notice period and the final charge date so there are no surprises, and confirm once it is processed.`,rebuttal:`If they cite a long notice window: "Please send me the clause that requires it, and start the cancellation clock from today."`},{target:`Cloud storage (annual plan)`,channel:`phone`,message:`I’m calling to cancel my plan and turn off auto-renewal. Since I just renewed, am I within the refund window, and what do I need to do to qualify?`,rebuttal:`If they say no refund: "Can you note my account that I asked to cancel today, in case the window is calculated from a different date?"`}],footer:`Cancelling all three frees up about <b>$41/month</b> toward your December goal.`},talktrack:{title:`How to open the resignation call`,icon:`mic`,totalTime:`~60s`,lines:[{say:`Thanks for making time, I wanted to tell you this directly rather than over email.`,beat:`warm, steady`,note:`Sets the tone before the news lands.`},{say:`I have decided to move on, and my last day will be two weeks from today.`,beat:`pause here`,note:`Say the date plainly, then stop talking.`},{say:`This was a hard call. I have learned a lot here and I am grateful for it.`,beat:`sincere`},{say:`I want the handover to go smoothly, so let us plan the next two weeks together.`,beat:`~15s`,note:`Ends on partnership, not apology.`}],footer:`Let the silences sit. You do not owe a full explanation, only a clear decision and a clean exit.`},lifeline:{title:`If it ever becomes an emergency`,message:`If you are ever worried that someone you love is in danger, you do not have to carry that moment alone.`,safetyQuestion:`Is anyone in immediate danger right now?`,resources:[{name:`988 Suicide & Crisis Lifeline`,contact:`Call or text 988`,href:`tel:988`,note:`24/7 · free · confidential (US)`},{name:`Crisis Text Line`,contact:`Text HOME to 741741`,href:`sms:741741`,note:`Text-based support, any time`},{name:`Emergency services`,contact:`Call 911`,href:`tel:911`,note:`If someone is in immediate physical danger`}],grounding:`If you just need a moment first, we can take one slow breath together.`,reassurance:`I can help you find words and resources, but I am not a substitute for a trained person — please reach out to one of these if it is serious.`},proscons:{title:`Drone, pack it?`,icon:`layers`,iconColor:`var(--insight)`,prosLabel:`Bring it`,consLabel:`Leave it`,pros:[{text:`The rim wides are <b>made</b> for the air`,weight:5,note:`Sete Cidades from above is the signature frame.`},{text:`Cliff scale at Nordeste`,weight:4},{text:`Light to carry`,weight:2}],cons:[{text:`Azores wind is <mark>relentless</mark>`,weight:4,note:`Gusts over the calderas are no joke.`},{text:`No-fly near Furnas park`,weight:3},{text:`One more battery system`,weight:2}],verdict:`Pack it, but plan air shots for the <b>calm dawn windows only</b>.`,footer:`Weighted on the frames you actually need.`},takeaways:{title:`The brief in five`,icon:`check`,iconColor:`var(--insight)`,heading:`What to remember on the island`,items:[{text:`Shoot the <b>edges of the day</b>, grey midday is for scouting.`,color:`var(--presence)`,detail:`Golden + blue hour are pinned per stop.`},{text:`Grade toward <b>moss + slate</b>; ochre is an accent only.`,color:`var(--warning)`},{text:`Hold the wides <b>long</b>, let vastness breathe.`,color:`var(--insight)`,detail:`Min 8 seconds on the cliff and rim shots.`},{text:`Keep <b>Day 2 & 3 open</b> for the one clear rim morning.`,color:`var(--text-muted)`},{text:`Hands, not faces, keep it a place.`,color:`var(--presence-soft)`}],footer:`Tap each as you bag it.`},faq:{title:`Questions the team keeps asking`,icon:`chat`,iconColor:`var(--presence-soft)`,defaultOpen:0,multi:!1,items:[{q:`Why re-platform instead of patching v2?`,a:`Three services with diverging schemas made every search change a three-way migration. One typed core makes the <b>next</b> two years of features cheap, the rewrite pays for itself by Q4.`,tag:`strategy`},{q:`What happens if the backfill slips again?`,a:`The flag stays at 0% and we ship the command bar against the <mark>legacy</mark> index as a fallback. GA moves a week; nothing else in the plan breaks.`,tag:`risk`},{q:`Can partners stay on the old SDK?`,a:`Yes, the v2 SDK is supported through the end of next quarter. A codemod migrates 90% of call sites automatically.`,tag:`sdk`},{q:`How do we roll back during cutover?`,a:`The flag flips read traffic back to legacy in seconds. We keep legacy reads warm until W11 specifically so rollback stays free.`,tag:`rollout`}],footer:`If your question is not here, drop it in #atlas-v3 and we will add it.`},tabs:{title:`The detail, by lens`,icon:`doc`,iconColor:`var(--insight)`,accent:`var(--insight)`,defaultTab:0,tabs:[{label:`Scope`,icon:`layers`,badge:5,body:`<b>In:</b> typed core, new search index, command bar, saved views, instant filters. <b>Out:</b> theming, export v2, and the mobile shell, all explicitly deferred to v3.1.`},{label:`Risks`,icon:`alert`,badge:3,body:`The <mark>backfill</mark> is the top risk and already 7 days long. Secondary risks: relevance regressions on long-tail queries, and on-call load during the ramp.`},{label:`Metrics`,icon:`chart`,body:`Headline: search <b>p95 < 400ms</b>, cold load <b>< 1.2s</b>, <b>zero 5xx</b> on cutover, and legacy reads at <b>0%</b> by GA.`},{label:`Rollout`,icon:`send`,body:`Flag-gated ramp 1% → 100% across cutover week, shadow-read parity as the go/no-go gate, instant rollback to legacy until W11.`}],footer:`Tap a lens, same plan, four angles.`},divider:{title:`The roadmap`,eyebrow:`Section 01`,heading:`The roadmap`,sub:`Three releases across the quarter, each one unblocks the next.`,badge:`Q2 → Q3`,badgeColor:`var(--insight)`,icon:`layers`,iconColor:`var(--insight)`,chips:[{label:`Foundation`,color:`var(--presence)`},{label:`Search`,color:`var(--insight)`},{label:`Polish`,color:`var(--warning)`}]},pullquote:{title:`The line we shoot to`,icon:`quote`,iconColor:`var(--presence)`,quote:`Let the landscape be the loud thing, and stand still long enough to hear it.`,author:`Your brief`,role:`"calm, green, vast"`,tone:`success`,variants:[{quote:`No fast cuts. The island has one speed; match it.`,author:`Edit note`},{quote:`Hands in the frame, never faces, let it stay a place, not a portrait.`,author:`Shot rule`}],footer:`Pinned above the timeline for the whole edit.`},storystrip:{title:`The arc of the film`,icon:`play`,iconColor:`var(--presence)`,panels:[{heading:`Arrival`,icon:`globe`,body:`Land in the grey. Wet cobbles, low cloud, set the calm.`,color:`var(--text-muted)`,caption:`Day 1`},{heading:`The rim`,icon:`image`,body:`Climb to Sete Cidades. The green opens up. This is the breath.`,color:`var(--presence)`,caption:`Day 2`},{heading:`The work`,icon:`spark`,body:`Tea terraces and steam. People in the landscape, hands, not faces.`,color:`var(--warning)`,caption:`Day 4–5`},{heading:`The edge`,icon:`share`,body:`Nordeste cliffs. The vastness pays off. Let a shot run long.`,color:`var(--insight)`,caption:`Day 6`},{heading:`Leaving`,icon:`send`,body:`Back to grey, but changed. End on still water.`,color:`var(--presence-soft)`,caption:`Day 7`}],footer:`Five beats, calm, breath, work, edge, return.`},casestudy:{title:`A reference that worked`,icon:`spark`,iconColor:`var(--warning)`,subject:`How a 3-day Faroe Islands edit hit a calm, vast feel`,defaultStage:`result`,setup:{body:`Same brief, different rock: <b>calm, green, vast</b>, and the same grey-light problem.`},action:{body:`They shot almost entirely at the <mark>edges of the day</mark> and graded toward two colors only, moss and slate.`,metric:`2-color grade`},result:{body:`The film felt like one breath. It traveled, picked up by three travel outlets in a week.`,metric:`1.2M views`},lesson:{body:`Constraint is the look. Fewer colors, fewer hours, more patience.`},footer:`We're borrowing the two-color discipline, moss + slate.`},deflist:{title:`Glossary`,icon:`quote`,iconColor:`var(--text-muted)`,placeholder:`Filter terms…`,items:[{term:`Dual-write`,def:`Writing every change to <b>both</b> the legacy and new stores during migration so we can cut over safely.`,tag:`migration`,color:`var(--presence-soft)`},{term:`Shadow read`,def:`Running the new index <mark>silently</mark> alongside legacy and diffing results to measure parity.`,tag:`search`,color:`var(--insight)`},{term:`Backfill`,def:`Indexing the existing 41M documents into the new structure before cutover.`,tag:`search`,color:`var(--insight)`},{term:`p95`,def:`The latency the <b>95th-percentile</b> request stays under, our headline speed metric.`,tag:`metrics`,color:`var(--warning)`},{term:`Cutover`,def:`The moment we flip read traffic from legacy to the new index.`,tag:`rollout`,color:`var(--danger)`}],footer:`Five terms that show up in every standup.`},accordion:{title:`The rollout plan, section by section`,icon:`layers`,iconColor:`var(--presence)`,defaultOpen:0,multi:!1,sections:[{label:`Phase 1, Typed core behind a flag`,icon:`shield`,meta:`Weeks 1–4`,tag:`foundation`,body:`Stand up the single typed search core, dark-shipped at <b>0%</b> traffic. Every read still hits the legacy index; the new path runs in shadow so we compare results query-for-query before a single user sees it.`},{label:`Phase 2, Backfill & shadow reads`,icon:`clock`,meta:`Weeks 5–8`,tag:`migration`,tagColor:`var(--warning)`,body:`Backfill the historical index and ramp shadow reads to 100%. The gate to advance is a <mark>p95 within 5%</mark> of legacy across all query types, long-tail included.`},{label:`Phase 3, Cutover to GA`,icon:`check`,meta:`Weeks 9–11`,tag:`launch`,tagColor:`var(--insight)`,body:`Flip read traffic over in steps (5 → 25 → 100%), keeping legacy reads warm the whole time so rollback stays a one-second flag flip. GA when the new core has owned 100% of reads cleanly for a week.`}],footer:`Each phase is independently reversible, the flag is the safety net at every step.`},scansionmark:{title:`Scanning the meter`,meter:`iambic pentameter`,lines:[{syllables:[{text:`Shall`,stress:`unstressed`},{text:`I`,stress:`stressed`},{text:`com`,stress:`unstressed`},{text:`pare`,stress:`stressed`},{text:`thee`,stress:`unstressed`},{text:`to`,stress:`stressed`},{text:`a`,stress:`unstressed`},{text:`sum`,stress:`stressed`},{text:`mer’s`,stress:`unstressed`},{text:`day?`,stress:`stressed`}],feet:[2,4,6,8],rhyme:`a`},{syllables:[{text:`Thou`,stress:`unstressed`},{text:`art`,stress:`stressed`},{text:`more`,stress:`unstressed`},{text:`love`,stress:`stressed`},{text:`ly`,stress:`unstressed`},{text:`and`,stress:`stressed`},{text:`more`,stress:`unstressed`},{text:`tem`,stress:`stressed`},{text:`per`,stress:`unstressed`},{text:`ate:`,stress:`stressed`}],feet:[2,4,6,8],rhyme:`b`},{syllables:[{text:`Rough`,stress:`unstressed`},{text:`winds`,stress:`stressed`},{text:`do`,stress:`unstressed`},{text:`shake`,stress:`stressed`},{text:`the`,stress:`unstressed`},{text:`dar`,stress:`stressed`},{text:`ling`,stress:`unstressed`},{text:`buds`,stress:`stressed`},{text:`of`,stress:`unstressed`},{text:`May,`,stress:`stressed`}],feet:[2,4,6,8],rhyme:`a`},{syllables:[{text:`And`,stress:`unstressed`},{text:`sum`,stress:`stressed`},{text:`mer’s`,stress:`unstressed`},{text:`lease`,stress:`stressed`},{text:`hath`,stress:`unstressed`},{text:`all`,stress:`stressed`},{text:`too`,stress:`unstressed`},{text:`short`,stress:`stressed`},{text:`a`,stress:`unstressed`},{text:`date:`,stress:`stressed`}],feet:[2,4,6,8],rhyme:`b`}],caption:`Five unstressed–stressed feet per line (da-DUM × 5) is the iambic pentameter heartbeat; the abab rhyme opens an English sonnet.`,footer:`Read aloud, the stresses fall on the colored beats — the meter is what you hear, not just what you see.`},typespec:{title:`Type scale`,icon:`edit`,iconColor:`var(--presence)`,styles:[{name:`Display`,sample:`Design with intent`,sizePx:44,weight:700,lineHeight:1.05,tracking:`-0.03em`,family:`Inter`,color:`var(--presence)`},{name:`H1`,sample:`A clear, confident heading`,sizePx:30,weight:680,lineHeight:1.15,tracking:`-0.02em`,family:`Inter`},{name:`H2`,sample:`Supporting section title`,sizePx:22,weight:620,lineHeight:1.2,tracking:`-0.01em`,family:`Inter`},{name:`Body`,sample:`The quick brown fox jumps over the lazy dog.`,sizePx:16,weight:400,lineHeight:1.55,family:`Inter`},{name:`Caption`,sample:`Small print, captions, and labels.`,sizePx:12,weight:500,lineHeight:1.4,tracking:`0.01em`,family:`Inter`,color:`var(--text-muted)`}],pairing:{heading:`Fraunces`,body:`Inter`},caption:`A 1.4-ish modular scale keeps each step distinct without the jumps feeling abrupt.`},shotlist:{title:`Opening scene — shot breakdown`,icon:`play`,iconColor:`var(--warning)`,shots:[{n:1,size:`WS`,movement:`Slow push-in`,lens:`24mm`,duration:`6s`,action:`Establish the empty studio at dawn; light bleeds across the floor as she steps into frame.`},{n:2,size:`MS`,movement:`Static`,lens:`50mm`,duration:`4s`,action:`She sets the camera down and exhales, reading the room.`,dialogue:`Okay. One more time, from the top.`},{n:3,size:`CU`,movement:`Slight rack focus`,lens:`85mm`,duration:`3s`,action:`Her hands frame the shot on the small monitor; focus pulls from fingers to screen.`},{n:4,size:`OTS`,movement:`Handheld drift`,lens:`35mm`,duration:`5s`,action:`From behind her shoulder we see the playback begin — the take she has been chasing.`,dialogue:`There it is.`}],caption:`Wide to establish, then tighten with each beat so the room shrinks to a single decisive moment.`},beatsheet:{title:`Beat sheet`,icon:`edit`,iconColor:`var(--presence)`,framework:`Save the Cat`,beats:[{name:`Opening Image`,at:`1%`,line:`A snapshot of the flawed world before anything changes.`},{name:`Catalyst`,at:`10%`,line:`The call that breaks the routine and forces a choice.`},{name:`Break into Two`,at:`20%`,line:`The hero commits and crosses into the new world.`},{name:`Midpoint`,at:`50%`,line:`A false victory (or defeat) raises the stakes for real.`},{name:`All Is Lost`,at:`75%`,line:`The lowest point — the old way clearly fails.`},{name:`Dark Night`,at:`80%`,line:`In the wreckage, the hero finds the true answer.`},{name:`Finale`,at:`90%`,line:`The new self acts and resolves the central conflict.`},{name:`Final Image`,at:`99%`,line:`A mirror of the opening, now transformed.`}],tension:[1,2,3,5,8,6,10,4],caption:`Tension climbs to the Midpoint, dips at the false low, then spikes through the Finale.`},promptset:{title:`A gentle close to the day`,icon:`moon`,iconColor:`var(--presence)`,theme:`Evening reflection`,prompts:[{question:`What is one small thing that went better than you expected today?`,guidance:`It can be tiny — a good coffee, a reply you were dreading that landed fine.`},{question:`Who or what are you quietly grateful for right now?`,guidance:`No need to be profound; the ordinary ones count most.`},{question:`Where did you spend energy that you would rather keep for tomorrow?`,guidance:`Naming it is enough — you are not solving it tonight.`},{question:`What is one thing you want to carry gently into tomorrow?`,guidance:`A feeling, an intention, or simply a slower start.`}],caption:`There are no wrong answers here — write a line or just sit with one.`},zoneladder:{title:`Your five heart-rate zones`,icon:`spark`,iconColor:`var(--presence)`,metric:`HR`,current:1,zones:[{name:`Zone 1 · Recovery`,range:`98–117 bpm`,effort:`Very easy — you could chat all day`,purpose:`Warm-up, cool-down, and active recovery between hard days`},{name:`Zone 2 · Endurance`,range:`118–137 bpm`,effort:`Comfortable; full sentences with light breathing`,purpose:`Builds your aerobic base and fat metabolism — where most miles live`},{name:`Zone 3 · Tempo`,range:`138–156 bpm`,effort:`Moderately hard; short phrases only`,purpose:`Sustained-effort fitness and stamina for race pace`},{name:`Zone 4 · Threshold`,range:`157–175 bpm`,effort:`Hard; a word or two at a time`,purpose:`Raises the pace you can hold before lactate builds up`},{name:`Zone 5 · VO₂ max`,range:`176–195 bpm`,effort:`All-out; no talking, short intervals only`,purpose:`Peak aerobic power — kept to brief, repeated bursts`}],caption:`Zones are from an estimated max of ~195 bpm; a field or lab test gives truer numbers.`},picturesequence:{title:`How to make a sandwich — put the steps in order`,icon:`layers`,iconColor:`var(--warning)`,panels:[{label:`Get two slices of bread`,marker:`first`,caption:`Lay them flat on the plate.`},{label:`Spread the filling`,marker:`then`,caption:`Butter, jam, or peanut butter — your pick.`},{label:`Add what you like`,marker:`next`,caption:`Cheese, banana slices, or a little honey.`},{label:`Press the slices together and cut`,marker:`last`,caption:`Triangles or squares — then take a bite!`}],caption:`Read it left to right: first, then, next, last.`},storyarc:{title:`Short-Film Arc — Freytag`,icon:`layers`,iconColor:`var(--presence)`,framework:`freytag`,beats:[{stage:`Rising Action`,label:`The storm rolls in`},{stage:`Climax`,label:`The lighthouse fails`},{stage:`Falling Action`,label:`Dawn rescue`}]},devicemark:{title:`Literary Devices — Opening Line`,text:`The lighthouse stood like a silent sentinel, its beam sweeping the hungry dark with the patience of the tide.`,marks:[{phrase:`like a silent sentinel`,device:`simile`,note:`compares the lighthouse to a guard`},{phrase:`hungry dark`,device:`personification`,note:`darkness described as if it consumes`},{phrase:`patience of the tide`,device:`metaphor`,note:`slow, inevitable rhythm`}]},thoughtrecord:{title:`Working through Wednesday`,icon:`spark`,situation:`Looking at Wednesday’s back-to-back schedule Tuesday night.`,automaticThought:`If I drop one thing on Wednesday, everyone will see I can’t actually handle this job.`,emotion:`Anxious`,emotionIntensity:80,evidenceFor:[`A meeting conflict slipped through last month and I had to reschedule a client call.`,`The calendar really is packed, with no buffer between meetings.`],evidenceAgainst:[`I’ve gotten through weeks this dense before without dropping anything major.`,`My manager called out the prep work at last sprint’s review.`,`Back-to-back isn’t overlapping — nothing on Wednesday needs split-second multitasking.`],alternativeThought:`Wednesday is genuinely packed, but packed isn’t the same as unmanageable — a few minutes of prep Tuesday night turns it into one meeting at a time.`,outcomeEmotion:`Anxious`,outcomeIntensity:35,footer:`The intensity dropped once the evidence caught up with the fear — the schedule didn’t change, the story about it did.`}};export{e as default};
1
+ var e={callout:{title:`Recommendation`,icon:`shield`,iconColor:`var(--warning)`,tone:`warn`,kicker:`Before signing`,body:`Sign-ready <b>after three redlines</b> to §8.2 and the liability cap. The economics are fine; the renewal mechanics are the only real exposure.`,points:[`Redline §8.2: notice 90 → 30 days; consider deleting auto-renew entirely.`,`Raise the liability cap from 1× to 12× annual fees (data processor).`,`Either way, <b>calendar the Nov 30 2027 notice deadline now</b>.`],footer:`Want me to draft the redline markup and a one-paragraph cover note to their counsel?`},verdictcard:{title:`The call`,stance:`caution`,label:`Ship it, carefully`,verdict:`Build the search rewrite first, behind a flag, and gate the quarter on its p95.`,reason:`Four of five headline features ride on the new index, derisk it before anything leans on it.`,caveat:`If the index migration slips two weeks, cut Polish from Q3, not the search hardening.`,confidence:`medium`,footer:`The roadmap below holds either way, this only changes what ships <strong>last</strong>.`},scenarioset:{title:`How the search rewrite could land`,icon:`chart`,iconColor:`var(--insight)`,metric:`Search p95 at end of quarter (target 400ms)`,scenarios:[{kind:`best`,value:`~320ms`,detail:`Index migration lands on time; cache hit-rate holds.`,points:[`All five features ship`,`Polish keeps its Q3 slot`]},{kind:`likely`,value:`~480ms`,detail:`A two-week migration slip, recovered with cache tuning.`,points:[`Four features ship on time`,`Polish slips ~2 weeks`]},{kind:`worst`,value:`~900ms`,detail:`Index rewrite stalls; fall back to the old path.`,points:[`Search-dependent features held`,`Quarter re-planned`]}],footer:`A range, not a promise, we revisit at the mid-quarter checkpoint.`},worthit:{title:`Is the premium one worth the splurge?`,product:`The cashmere wrap (option 1)`,verdict:`worth-it`,price:`$140`,priceNote:`vs ~$45 for the acrylic look-alike`,worthItIf:[`She wears scarves often and keeps them for years`,`You want it to feel like a real occasion gift`],skipIf:[`She rarely layers`,`A thoughtful card matters more than the label`],dealBreaker:`Cashmere needs hand-washing — if she would not fuss over it, the merino blend is the smarter pick.`,forWho:`someone who notices quality and will actually reach for it`,bottomLine:`For a milestone gift the wrap earns its price; for a casual one, the blend gets 90% of the feel.`,footer:`Both ship in time if you order by Thursday.`},companionnote:{reflection:`Four weeks of short nights is a lot to carry — no wonder the days feel heavier.`,follow:`The numbers aren't a verdict on you; they're just showing what your body's been asking for.`,chip:`one small change is enough`},positioncard:{title:`How worried should you be tonight?`,icon:`alert`,levels:[{label:`Usually fine`,tone:`good`,detail:`Alert between spikes, drinking, wetting diapers — a fever the body is handling.`},{label:`Watch closely`,tone:`caution`,detail:`Clingy and drained but still responsive; recheck in a few hours.`},{label:`Call tonight`,tone:`bad`,detail:`Hard to rouse, breathing fast, or under 3 months with any fever.`}],atLevel:0,marker:`From what you described`,reason:`A playful-between-spikes, drinking child sits at the reassuring end — how they look matters more than the number.`,watchFor:[`Under 3 months with any fever`,`A stiff neck, a rash that does not fade under a glass, or trouble breathing`,`No wet diaper in 8 hours, or no tears when crying`],caveat:`This places the situation, it does not diagnose it — your read of your child wins.`},differential:{title:`What is usually behind a fever like this`,icon:`eye`,causes:[{name:`A common viral infection`,likelihood:`common`,tell:`Runny nose or cough, comes and goes over a few days`,pointsAway:`A fever lasting past day 5 with no other symptoms`},{name:`Ear or throat infection`,likelihood:`common`,tell:`Tugging at an ear, pain swallowing, or fussier lying down`,pointsAway:`No ear or throat complaints at all`},{name:`A urinary infection`,likelihood:`less-common`,tell:`Fever with no cold symptoms, especially in younger kids`,pointsAway:`An obvious cold already explaining it`},{name:`A serious bacterial infection`,likelihood:`rare`,serious:!0,tell:`Very drowsy, stiff neck, or a non-fading rash`,pointsAway:`Alert and interactive between spikes`}],prompt:`Look for the tell-tale signs above — a cough or runny nose usually points to the common, harmless causes.`,caveat:`These are possibilities with honest odds, not a diagnosis; a clinician can examine and confirm.`},reframecard:{title:`A gentler take`,thought:`I bombed that interview, so I am clearly not cut out for this role.`,distortion:`all-or-nothing`,reframe:`One hard interview is a single data point, not a verdict on your whole career — you answered three of the five questions well, and that is something to build on.`,footer:`Notice the jump from <b>one moment</b> to <b>a whole identity</b> — that is the part worth questioning.`},breathpacer:{title:`A moment before bed`,pattern:`478`,note:`A slow 4-7-8 breath nudges your body toward rest — try a few rounds as the lights go down.`},copingmenu:{title:`When Wednesday feels like too much`,icon:`spark`,intro:`Pick whatever feels possible — you don’t have to do all of them.`,options:[{label:`Take three slow breaths before the next call`,detail:`Resets your shoulders so the back-to-back stretch starts a little calmer.`,effort:`low`,time:`1 min`,icon:`wind`},{label:`Decline or shorten the one meeting that could move`,detail:`Even reclaiming 20 minutes makes the crunch breathable.`,effort:`medium`,time:`5 min`,icon:`clock`},{label:`Step outside for a short walk at lunch`,detail:`A change of light and air between blocks, no agenda.`,effort:`medium`,time:`10 min`,icon:`walk`},{label:`Block the first hour tomorrow as protected focus`,detail:`Gives the rest of the week one place that stays yours.`,effort:`high`,time:`2 min`,icon:`shield`}],footer:`None of these have to be perfect — one is plenty for a heavy day.`},subtextdecode:{title:`What your sister might mean`,flavor:`tone`,message:`Fine, do whatever works for you. I'll figure out my own ride.`,readings:[{interpretation:`She is hurt and hoping you will offer to drive her after all`,likelihood:`most likely`,cue:`“Fine” plus “I’ll figure out my own ride” often signals disappointment, not agreement`},{interpretation:`She genuinely has another plan and is letting you off the hook`,likelihood:`possible`,cue:`“whatever works for you” can be a sincere release with no edge to it`},{interpretation:`She is annoyed and pulling back from the conversation`,likelihood:`less likely`,cue:`the clipped, short reply could read as withdrawing rather than wounded`}],cantKnow:`Tone does not travel well over text, so you cannot be sure which of these it is from the words alone.`,reply:`Hey, that message felt a little off to me — are you actually okay with the plan, or would you rather I drove you?`},rehearsal:{title:`Rehearsing the chat about taking the car keys`,icon:`chat`,opener:`Dad, I love you and I want you safe — can we talk honestly about the driving?`,branches:[{reaction:`get defensive or insist they are fine`,say:`I hear you, and this isn’t about taking anything away — it’s about keeping you on the road as long as we safely can.`,why:`Names the fear behind the resistance and keeps you on the same side.`},{reaction:`go quiet and shut down`,say:`We don’t have to settle it now. Could we just try one daytime drive together this week and see how it feels?`,why:`A small, time-boxed step is far easier to agree to than a verdict.`},{reaction:`ask what the alternatives even are`,say:`Good question — I’ve looked at the senior shuttle and splitting rides, so you’d keep your independence.`,why:`Shows you came with options, not just a problem.`}],exit:`Let’s sit with it and revisit on Sunday — no decision today.`,footer:`Lead with care, give him a small next step, and let him keep his dignity.`},messagescriptset:{title:`What to say to cancel the three you forgot`,intro:`Each one has its own quirks, so the wording differs. Copy the line, send it, and keep the rebuttal handy.`,scripts:[{target:`Streaming bundle (auto-renews Jul 2)`,channel:`in-app`,message:`Please cancel my subscription effective at the end of the current billing period. I do not want it to auto-renew. Can you confirm the cancellation in writing?`,rebuttal:`If they offer a discount to stay: "Thanks, but I’d still like to cancel today and reconsider later if I need it."`},{target:`Gym membership`,channel:`email`,message:`I’d like to cancel my membership. Please tell me the exact notice period and the final charge date so there are no surprises, and confirm once it is processed.`,rebuttal:`If they cite a long notice window: "Please send me the clause that requires it, and start the cancellation clock from today."`},{target:`Cloud storage (annual plan)`,channel:`phone`,message:`I’m calling to cancel my plan and turn off auto-renewal. Since I just renewed, am I within the refund window, and what do I need to do to qualify?`,rebuttal:`If they say no refund: "Can you note my account that I asked to cancel today, in case the window is calculated from a different date?"`}],footer:`Cancelling all three frees up about <b>$41/month</b> toward your December goal.`},talktrack:{title:`How to open the resignation call`,icon:`mic`,totalTime:`~60s`,lines:[{say:`Thanks for making time, I wanted to tell you this directly rather than over email.`,beat:`warm, steady`,note:`Sets the tone before the news lands.`},{say:`I have decided to move on, and my last day will be two weeks from today.`,beat:`pause here`,note:`Say the date plainly, then stop talking.`},{say:`This was a hard call. I have learned a lot here and I am grateful for it.`,beat:`sincere`},{say:`I want the handover to go smoothly, so let us plan the next two weeks together.`,beat:`~15s`,note:`Ends on partnership, not apology.`}],footer:`Let the silences sit. You do not owe a full explanation, only a clear decision and a clean exit.`},lifeline:{title:`If it ever becomes an emergency`,message:`If you are ever worried that someone you love is in danger, you do not have to carry that moment alone.`,safetyQuestion:`Is anyone in immediate danger right now?`,resources:[{name:`988 Suicide & Crisis Lifeline`,contact:`Call or text 988`,href:`tel:988`,note:`24/7 · free · confidential (US)`},{name:`Crisis Text Line`,contact:`Text HOME to 741741`,href:`sms:741741`,note:`Text-based support, any time`},{name:`Emergency services`,contact:`Call 911`,href:`tel:911`,note:`If someone is in immediate physical danger`}],grounding:`If you just need a moment first, we can take one slow breath together.`,reassurance:`I can help you find words and resources, but I am not a substitute for a trained person — please reach out to one of these if it is serious.`},proscons:{title:`Drone, pack it?`,icon:`layers`,iconColor:`var(--insight)`,prosLabel:`Bring it`,consLabel:`Leave it`,pros:[{text:`The rim wides are <b>made</b> for the air`,weight:5,note:`Sete Cidades from above is the signature frame.`},{text:`Cliff scale at Nordeste`,weight:4},{text:`Light to carry`,weight:2}],cons:[{text:`Azores wind is <mark>relentless</mark>`,weight:4,note:`Gusts over the calderas are no joke.`},{text:`No-fly near Furnas park`,weight:3},{text:`One more battery system`,weight:2}],verdict:`Pack it, but plan air shots for the <b>calm dawn windows only</b>.`,footer:`Weighted on the frames you actually need.`},takeaways:{title:`The brief in five`,icon:`check`,iconColor:`var(--insight)`,heading:`What to remember on the island`,items:[{text:`Shoot the <b>edges of the day</b>, grey midday is for scouting.`,color:`var(--presence)`,detail:`Golden + blue hour are pinned per stop.`},{text:`Grade toward <b>moss + slate</b>; ochre is an accent only.`,color:`var(--warning)`},{text:`Hold the wides <b>long</b>, let vastness breathe.`,color:`var(--insight)`,detail:`Min 8 seconds on the cliff and rim shots.`},{text:`Keep <b>Day 2 & 3 open</b> for the one clear rim morning.`,color:`var(--text-muted)`},{text:`Hands, not faces, keep it a place.`,color:`var(--presence-soft)`}],footer:`Tap each as you bag it.`},faq:{title:`Questions the team keeps asking`,icon:`chat`,iconColor:`var(--presence-soft)`,defaultOpen:0,multi:!1,items:[{q:`Why re-platform instead of patching v2?`,a:`Three services with diverging schemas made every search change a three-way migration. One typed core makes the <b>next</b> two years of features cheap, the rewrite pays for itself by Q4.`,tag:`strategy`},{q:`What happens if the backfill slips again?`,a:`The flag stays at 0% and we ship the command bar against the <mark>legacy</mark> index as a fallback. GA moves a week; nothing else in the plan breaks.`,tag:`risk`},{q:`Can partners stay on the old SDK?`,a:`Yes, the v2 SDK is supported through the end of next quarter. A codemod migrates 90% of call sites automatically.`,tag:`sdk`},{q:`How do we roll back during cutover?`,a:`The flag flips read traffic back to legacy in seconds. We keep legacy reads warm until W11 specifically so rollback stays free.`,tag:`rollout`}],footer:`If your question is not here, drop it in #atlas-v3 and we will add it.`},tabs:{title:`The detail, by lens`,icon:`doc`,iconColor:`var(--insight)`,accent:`var(--insight)`,defaultTab:0,tabs:[{label:`Scope`,icon:`layers`,badge:5,body:`<b>In:</b> typed core, new search index, command bar, saved views, instant filters. <b>Out:</b> theming, export v2, and the mobile shell, all explicitly deferred to v3.1.`},{label:`Risks`,icon:`alert`,badge:3,body:`The <mark>backfill</mark> is the top risk and already 7 days long. Secondary risks: relevance regressions on long-tail queries, and on-call load during the ramp.`},{label:`Metrics`,icon:`chart`,body:`Headline: search <b>p95 < 400ms</b>, cold load <b>< 1.2s</b>, <b>zero 5xx</b> on cutover, and legacy reads at <b>0%</b> by GA.`},{label:`Rollout`,icon:`send`,body:`Flag-gated ramp 1% → 100% across cutover week, shadow-read parity as the go/no-go gate, instant rollback to legacy until W11.`}],footer:`Tap a lens, same plan, four angles.`},divider:{title:`The roadmap`,eyebrow:`Section 01`,heading:`The roadmap`,sub:`Three releases across the quarter, each one unblocks the next.`,badge:`Q2 → Q3`,badgeColor:`var(--insight)`,icon:`layers`,iconColor:`var(--insight)`,chips:[{label:`Foundation`,color:`var(--presence)`},{label:`Search`,color:`var(--insight)`},{label:`Polish`,color:`var(--warning)`}]},pullquote:{title:`The line we shoot to`,icon:`quote`,iconColor:`var(--presence)`,quote:`Let the landscape be the loud thing, and stand still long enough to hear it.`,author:`Your brief`,role:`"calm, green, vast"`,tone:`success`,variants:[{quote:`No fast cuts. The island has one speed; match it.`,author:`Edit note`},{quote:`Hands in the frame, never faces, let it stay a place, not a portrait.`,author:`Shot rule`}],footer:`Pinned above the timeline for the whole edit.`},storystrip:{title:`The arc of the film`,icon:`play`,iconColor:`var(--presence)`,panels:[{heading:`Arrival`,icon:`globe`,body:`Land in the grey. Wet cobbles, low cloud, set the calm.`,color:`var(--text-muted)`,caption:`Day 1`},{heading:`The rim`,icon:`image`,body:`Climb to Sete Cidades. The green opens up. This is the breath.`,color:`var(--presence)`,caption:`Day 2`},{heading:`The work`,icon:`spark`,body:`Tea terraces and steam. People in the landscape, hands, not faces.`,color:`var(--warning)`,caption:`Day 4–5`},{heading:`The edge`,icon:`share`,body:`Nordeste cliffs. The vastness pays off. Let a shot run long.`,color:`var(--insight)`,caption:`Day 6`},{heading:`Leaving`,icon:`send`,body:`Back to grey, but changed. End on still water.`,color:`var(--presence-soft)`,caption:`Day 7`}],footer:`Five beats, calm, breath, work, edge, return.`},casestudy:{title:`A reference that worked`,icon:`spark`,iconColor:`var(--warning)`,subject:`How a 3-day Faroe Islands edit hit a calm, vast feel`,defaultStage:`result`,setup:{body:`Same brief, different rock: <b>calm, green, vast</b>, and the same grey-light problem.`},action:{body:`They shot almost entirely at the <mark>edges of the day</mark> and graded toward two colors only, moss and slate.`,metric:`2-color grade`},result:{body:`The film felt like one breath. It traveled, picked up by three travel outlets in a week.`,metric:`1.2M views`},lesson:{body:`Constraint is the look. Fewer colors, fewer hours, more patience.`},footer:`We're borrowing the two-color discipline, moss + slate.`},deflist:{title:`Glossary`,icon:`quote`,iconColor:`var(--text-muted)`,placeholder:`Filter terms…`,items:[{term:`Dual-write`,def:`Writing every change to <b>both</b> the legacy and new stores during migration so we can cut over safely.`,tag:`migration`,color:`var(--presence-soft)`},{term:`Shadow read`,def:`Running the new index <mark>silently</mark> alongside legacy and diffing results to measure parity.`,tag:`search`,color:`var(--insight)`},{term:`Backfill`,def:`Indexing the existing 41M documents into the new structure before cutover.`,tag:`search`,color:`var(--insight)`},{term:`p95`,def:`The latency the <b>95th-percentile</b> request stays under, our headline speed metric.`,tag:`metrics`,color:`var(--warning)`},{term:`Cutover`,def:`The moment we flip read traffic from legacy to the new index.`,tag:`rollout`,color:`var(--danger)`}],footer:`Five terms that show up in every standup.`},accordion:{title:`The rollout plan, section by section`,icon:`layers`,iconColor:`var(--presence)`,defaultOpen:0,multi:!1,sections:[{label:`Phase 1, Typed core behind a flag`,icon:`shield`,meta:`Weeks 1–4`,tag:`foundation`,body:`Stand up the single typed search core, dark-shipped at <b>0%</b> traffic. Every read still hits the legacy index; the new path runs in shadow so we compare results query-for-query before a single user sees it.`},{label:`Phase 2, Backfill & shadow reads`,icon:`clock`,meta:`Weeks 5–8`,tag:`migration`,tagColor:`var(--warning)`,body:`Backfill the historical index and ramp shadow reads to 100%. The gate to advance is a <mark>p95 within 5%</mark> of legacy across all query types, long-tail included.`},{label:`Phase 3, Cutover to GA`,icon:`check`,meta:`Weeks 9–11`,tag:`launch`,tagColor:`var(--insight)`,body:`Flip read traffic over in steps (5 → 25 → 100%), keeping legacy reads warm the whole time so rollback stays a one-second flag flip. GA when the new core has owned 100% of reads cleanly for a week.`}],footer:`Each phase is independently reversible, the flag is the safety net at every step.`},scansionmark:{title:`Scanning the meter`,meter:`iambic pentameter`,lines:[{syllables:[{text:`Shall`,stress:`unstressed`},{text:`I`,stress:`stressed`},{text:`com`,stress:`unstressed`},{text:`pare`,stress:`stressed`},{text:`thee`,stress:`unstressed`},{text:`to`,stress:`stressed`},{text:`a`,stress:`unstressed`},{text:`sum`,stress:`stressed`},{text:`mer’s`,stress:`unstressed`},{text:`day?`,stress:`stressed`}],feet:[2,4,6,8],rhyme:`a`},{syllables:[{text:`Thou`,stress:`unstressed`},{text:`art`,stress:`stressed`},{text:`more`,stress:`unstressed`},{text:`love`,stress:`stressed`},{text:`ly`,stress:`unstressed`},{text:`and`,stress:`stressed`},{text:`more`,stress:`unstressed`},{text:`tem`,stress:`stressed`},{text:`per`,stress:`unstressed`},{text:`ate:`,stress:`stressed`}],feet:[2,4,6,8],rhyme:`b`},{syllables:[{text:`Rough`,stress:`unstressed`},{text:`winds`,stress:`stressed`},{text:`do`,stress:`unstressed`},{text:`shake`,stress:`stressed`},{text:`the`,stress:`unstressed`},{text:`dar`,stress:`stressed`},{text:`ling`,stress:`unstressed`},{text:`buds`,stress:`stressed`},{text:`of`,stress:`unstressed`},{text:`May,`,stress:`stressed`}],feet:[2,4,6,8],rhyme:`a`},{syllables:[{text:`And`,stress:`unstressed`},{text:`sum`,stress:`stressed`},{text:`mer’s`,stress:`unstressed`},{text:`lease`,stress:`stressed`},{text:`hath`,stress:`unstressed`},{text:`all`,stress:`stressed`},{text:`too`,stress:`unstressed`},{text:`short`,stress:`stressed`},{text:`a`,stress:`unstressed`},{text:`date:`,stress:`stressed`}],feet:[2,4,6,8],rhyme:`b`}],caption:`Five unstressed–stressed feet per line (da-DUM × 5) is the iambic pentameter heartbeat; the abab rhyme opens an English sonnet.`,footer:`Read aloud, the stresses fall on the colored beats — the meter is what you hear, not just what you see.`},typespec:{title:`Type scale`,icon:`edit`,iconColor:`var(--presence)`,styles:[{name:`Display`,sample:`Design with intent`,sizePx:44,weight:700,lineHeight:1.05,tracking:`-0.03em`,family:`Inter`,color:`var(--presence)`},{name:`H1`,sample:`A clear, confident heading`,sizePx:30,weight:680,lineHeight:1.15,tracking:`-0.02em`,family:`Inter`},{name:`H2`,sample:`Supporting section title`,sizePx:22,weight:620,lineHeight:1.2,tracking:`-0.01em`,family:`Inter`},{name:`Body`,sample:`The quick brown fox jumps over the lazy dog.`,sizePx:16,weight:400,lineHeight:1.55,family:`Inter`},{name:`Caption`,sample:`Small print, captions, and labels.`,sizePx:12,weight:500,lineHeight:1.4,tracking:`0.01em`,family:`Inter`,color:`var(--text-muted)`}],pairing:{heading:`Fraunces`,body:`Inter`},caption:`A 1.4-ish modular scale keeps each step distinct without the jumps feeling abrupt.`},shotlist:{title:`Opening scene — shot breakdown`,icon:`play`,iconColor:`var(--warning)`,shots:[{n:1,size:`WS`,movement:`Slow push-in`,lens:`24mm`,duration:`6s`,action:`Establish the empty studio at dawn; light bleeds across the floor as she steps into frame.`},{n:2,size:`MS`,movement:`Static`,lens:`50mm`,duration:`4s`,action:`She sets the camera down and exhales, reading the room.`,dialogue:`Okay. One more time, from the top.`},{n:3,size:`CU`,movement:`Slight rack focus`,lens:`85mm`,duration:`3s`,action:`Her hands frame the shot on the small monitor; focus pulls from fingers to screen.`},{n:4,size:`OTS`,movement:`Handheld drift`,lens:`35mm`,duration:`5s`,action:`From behind her shoulder we see the playback begin — the take she has been chasing.`,dialogue:`There it is.`}],caption:`Wide to establish, then tighten with each beat so the room shrinks to a single decisive moment.`},beatsheet:{title:`Beat sheet`,icon:`edit`,iconColor:`var(--presence)`,framework:`Save the Cat`,beats:[{name:`Opening Image`,at:`1%`,line:`A snapshot of the flawed world before anything changes.`},{name:`Catalyst`,at:`10%`,line:`The call that breaks the routine and forces a choice.`},{name:`Break into Two`,at:`20%`,line:`The hero commits and crosses into the new world.`},{name:`Midpoint`,at:`50%`,line:`A false victory (or defeat) raises the stakes for real.`},{name:`All Is Lost`,at:`75%`,line:`The lowest point — the old way clearly fails.`},{name:`Dark Night`,at:`80%`,line:`In the wreckage, the hero finds the true answer.`},{name:`Finale`,at:`90%`,line:`The new self acts and resolves the central conflict.`},{name:`Final Image`,at:`99%`,line:`A mirror of the opening, now transformed.`}],tension:[1,2,3,5,8,6,10,4],caption:`Tension climbs to the Midpoint, dips at the false low, then spikes through the Finale.`},promptset:{title:`A gentle close to the day`,icon:`moon`,iconColor:`var(--presence)`,theme:`Evening reflection`,prompts:[{question:`What is one small thing that went better than you expected today?`,guidance:`It can be tiny — a good coffee, a reply you were dreading that landed fine.`},{question:`Who or what are you quietly grateful for right now?`,guidance:`No need to be profound; the ordinary ones count most.`},{question:`Where did you spend energy that you would rather keep for tomorrow?`,guidance:`Naming it is enough — you are not solving it tonight.`},{question:`What is one thing you want to carry gently into tomorrow?`,guidance:`A feeling, an intention, or simply a slower start.`}],caption:`There are no wrong answers here — write a line or just sit with one.`},zoneladder:{title:`Your five heart-rate zones`,icon:`spark`,iconColor:`var(--presence)`,metric:`HR`,current:1,zones:[{name:`Zone 1 · Recovery`,range:`98–117 bpm`,effort:`Very easy — you could chat all day`,purpose:`Warm-up, cool-down, and active recovery between hard days`},{name:`Zone 2 · Endurance`,range:`118–137 bpm`,effort:`Comfortable; full sentences with light breathing`,purpose:`Builds your aerobic base and fat metabolism — where most miles live`},{name:`Zone 3 · Tempo`,range:`138–156 bpm`,effort:`Moderately hard; short phrases only`,purpose:`Sustained-effort fitness and stamina for race pace`},{name:`Zone 4 · Threshold`,range:`157–175 bpm`,effort:`Hard; a word or two at a time`,purpose:`Raises the pace you can hold before lactate builds up`},{name:`Zone 5 · VO₂ max`,range:`176–195 bpm`,effort:`All-out; no talking, short intervals only`,purpose:`Peak aerobic power — kept to brief, repeated bursts`}],caption:`Zones are from an estimated max of ~195 bpm; a field or lab test gives truer numbers.`},picturesequence:{title:`How to make a sandwich — put the steps in order`,icon:`layers`,iconColor:`var(--warning)`,panels:[{label:`Get two slices of bread`,marker:`first`,caption:`Lay them flat on the plate.`},{label:`Spread the filling`,marker:`then`,caption:`Butter, jam, or peanut butter — your pick.`},{label:`Add what you like`,marker:`next`,caption:`Cheese, banana slices, or a little honey.`},{label:`Press the slices together and cut`,marker:`last`,caption:`Triangles or squares — then take a bite!`}],caption:`Read it left to right: first, then, next, last.`},storyarc:{title:`Short-Film Arc — Freytag`,icon:`layers`,iconColor:`var(--presence)`,framework:`freytag`,beats:[{stage:`Rising Action`,label:`The storm rolls in`},{stage:`Climax`,label:`The lighthouse fails`},{stage:`Falling Action`,label:`Dawn rescue`}]},devicemark:{title:`Literary Devices — Opening Line`,text:`The lighthouse stood like a silent sentinel, its beam sweeping the hungry dark with the patience of the tide.`,marks:[{phrase:`like a silent sentinel`,device:`simile`,note:`compares the lighthouse to a guard`},{phrase:`hungry dark`,device:`personification`,note:`darkness described as if it consumes`},{phrase:`patience of the tide`,device:`metaphor`,note:`slow, inevitable rhythm`}]},thoughtrecord:{title:`Working through Wednesday`,icon:`spark`,situation:`Looking at Wednesday’s back-to-back schedule Tuesday night.`,automaticThought:`If I drop one thing on Wednesday, everyone will see I can’t actually handle this job.`,emotion:`Anxious`,emotionIntensity:80,evidenceFor:[`A meeting conflict slipped through last month and I had to reschedule a client call.`,`The calendar really is packed, with no buffer between meetings.`],evidenceAgainst:[`I’ve gotten through weeks this dense before without dropping anything major.`,`My manager called out the prep work at last sprint’s review.`,`Back-to-back isn’t overlapping — nothing on Wednesday needs split-second multitasking.`],alternativeThought:`Wednesday is genuinely packed, but packed isn’t the same as unmanageable — a few minutes of prep Tuesday night turns it into one meeting at a time.`,outcomeEmotion:`Anxious`,outcomeIntensity:35,footer:`The intensity dropped once the evidence caught up with the fear — the schedule didn’t change, the story about it did.`},dosdonts:{title:`Running the panel`,icon:`shield`,iconColor:`var(--insight)`,heading:`What the two stalled loops last quarter taught us`,doLabel:`Do`,dontLabel:`Don’t`,pairs:[{topic:`Opening`,do:`Say up front how long you have and what you plan to cover.`,dont:`Open with “so, tell me about yourself”.`,why:`A stated agenda settles nerves; the open prompt just rewards whoever rehearsed hardest.`},{topic:`Questions`,do:`Ask every candidate the same four scored questions.`,dont:`Improvise a follow-up you would not ask the next person.`,why:`Different questions mean the scorecard is comparing nothing.`},{topic:`Off limits`,do:`Keep to the role, scope, tradeoffs, and how they handled a hard week.`,dont:`Ask about family plans, age, health, or immigration status.`,hazard:!0,why:`Unlawful to ask in most jurisdictions, and one slip can void the whole loop.`},{topic:`Scoring`,do:`Write your score down before you read anyone else’s.`,dont:`Debrief in the hallway on the way back to your desk.`,why:`The first opinion said out loud anchors the rest of the panel to it.`},{topic:`Closing`,dont:`Promise a decision date the recruiter has not agreed to.`},{do:`Leave the last five minutes for their questions, every time.`}],footer:`Both loops that stalled last quarter stalled on the scoring step, not on the candidate.`},variantswitch:{title:`Same news, three temperatures`,icon:`sliders`,iconColor:`var(--insight)`,accent:`var(--insight)`,axis:`Tone`,subject:`Telling a client the launch slips two weeks.`,defaultVariant:1,variants:[{label:`Warm`,icon:`chat`,when:`A long relationship you would rather protect than win.`,paragraphs:[`I wanted to get ahead of this rather than let it surprise you: the launch is going to land two weeks later than we planned, on the 24th.`,`The short version is that the migration turned up far more legacy data than the audit found, and rushing it is the one thing that would make this worse instead of better.`,`I'll send the revised plan tomorrow morning, and I'm happy to walk you through it whenever suits.`]},{label:`Neutral`,when:`The default — clear, unhedged, no temperature either way.`,paragraphs:[`The launch date moves from the 10th to the 24th.`,`The migration surfaced about 40% more legacy records than the audit projected, and validating them properly takes two weeks.`,`A revised plan follows tomorrow. Nothing else in the scope changes.`]},{label:`Firm`,icon:`alert`,when:`The date has already slipped once and the reset has to stick.`,paragraphs:[`The launch moves to the 24th, and that date is now fixed.`,`The migration carries 40% more legacy records than the audit we were handed, and we will not ship unvalidated customer data to meet a calendar.`,`The revised plan lands tomorrow. If the 24th does not work, the conversation we need is about scope, not about the date.`]}],footer:`Same facts in all three — only the temperature moves.`}};export{e as default};
@@ -0,0 +1 @@
1
+ var e={equationblock:{title:`Rate law you keep forgetting`,icon:`sparkle`,math:{t:`row`,items:[{t:`ident`,v:`k`},{t:`op`,v:`=`},{t:`ident`,v:`A`},{t:`sup`,base:{t:`ident`,v:`e`},sup:{t:`row`,items:[{t:`op`,v:`−`},{t:`frac`,num:{t:`ident`,v:`Eₐ`},den:{t:`row`,items:[{t:`ident`,v:`R`},{t:`ident`,v:`T`}]}}]}}]},number:`(1)`,caption:`The Arrhenius equation, higher temperature, exponentially faster rate.`},numberline:{title:`Where 62% sits`,min:0,max:100,step:20,unit:`%`,points:[{value:62,label:`You`,color:`var(--warning)`}],intervals:[{from:70,to:100,label:`Target`,color:`var(--insight)`}]},workedexample:{title:`Isolating a variable`,problem:`Solve for x: <b>2x + 3 = 11</b>`,steps:[{label:`Subtract 3 from both sides`,math:{t:`row`,items:[{t:`num`,v:`2`},{t:`ident`,v:`x`},{t:`op`,v:`=`},{t:`num`,v:`8`}]},why:`Undo the +3 to isolate the x-term.`},{label:`Divide both sides by 2`,math:{t:`row`,items:[{t:`ident`,v:`x`},{t:`op`,v:`=`},{t:`num`,v:`4`}]},why:`Undo the ×2 to leave x alone.`}],result:{t:`row`,items:[{t:`ident`,v:`x`},{t:`op`,v:`=`},{t:`num`,v:`4`}]}},quiz:{title:`Quick check`,question:`Which reaction order has a half-life independent of concentration?`,options:[{text:`Zero order`},{text:`First order`,correct:!0,feedback:`Right, first-order half-life is ln2/k, with no [A].`},{text:`Second order`}],explanation:`Only first-order kinetics gives a constant half-life regardless of starting amount.`},quizsession:{title:`Chapter check`,icon:`check`,iconColor:`var(--insight)`,subject:`Org. Chem · Ch. 6–8`,passMark:70,questions:[{tag:`Substitution`,question:`A tertiary alkyl halide is left to react in a polar protic solvent, with no strong base present. Which path dominates?`,options:[{text:`S<sub>N</sub>1`,correct:!0,feedback:`Right — the tertiary carbocation is stable enough to form first.`},{text:`S<sub>N</sub>2`,feedback:`Three alkyl groups block the backside attack S<sub>N</sub>2 needs.`},{text:`E2`,feedback:`E2 needs a strong base, and there isn’t one here.`},{text:`Radical substitution`}],explanation:`Polar protic solvents stabilise both the leaving group and the cation, so ionisation runs first.`},{tag:`Oxidation`,question:`Which reagent stops a primary alcohol at the aldehyde?`,options:[{text:`PCC in CH<sub>2</sub>Cl<sub>2</sub>`,correct:!0},{text:`Hot KMnO<sub>4</sub>`,feedback:`That one runs all the way to the acid.`},{text:`Jones reagent (CrO<sub>3</sub>/H<sub>2</sub>SO<sub>4</sub>)`},{text:`NaBH<sub>4</sub>`,feedback:`NaBH<sub>4</sub> reduces — it never oxidises.`},{text:`H<sub>2</sub> over Pd/C`}],explanation:`PCC is anhydrous, so no hydrate forms and the oxidation halts at the aldehyde.`},{tag:`Structure`,question:`What is the hybridisation of the carbonyl carbon in a ketone?`,options:[{text:`sp`},{text:`sp<sup>2</sup>`,correct:!0},{text:`sp<sup>3</sup>`}],explanation:`Three sigma bonds and one pi bond — sp<sup>2</sup>, trigonal planar, about 120°.`}],footer:`Miss two or more and the wrap-up re-queues exactly those for a second pass.`},flashcard:{title:`Interval ear-training deck`,icon:`spark`,iconColor:`var(--warning)`,cards:[{front:`Perfect 5th (C → G)`,back:`Sounds like: "Twinkle Twinkle" opening. 7 semitones. The power chord of classical harmony.`},{front:`Major 3rd (C → E)`,back:`Sounds like: "When the Saints Go Marching In." 4 semitones. Defines a major chord.`},{front:`Minor 3rd (A → C)`,back:`Sounds like: "Smoke on the Water" riff. 3 semitones. Defines a minor chord, darker colour.`},{front:`Octave (C4 → C5)`,back:`Sounds like: "Somewhere Over the Rainbow" opening leap. 12 semitones. Same note, doubled frequency.`},{front:`Tritone (C → F#)`,back:`The Devil's interval, 6 semitones, right in the middle of the octave. Unstable; resolves inward to a 3rd or outward to a 6th.`}],footer:`Flip each card after singing the interval. Aim for instant recognition, the goal is hearing, not counting semitones.`},molecularstructure:{title:`Ethanol`,formula:`C₂H₆O`,atoms:[{el:`C`,x:25,y:60,implicit:!0},{el:`C`,x:50,y:45,implicit:!0},{el:`O`,x:75,y:60}],bonds:[{from:0,to:1},{from:1,to:2}]},periodictable:{title:`The elements in your reaction`,categories:[{key:`alkali`,label:`Alkali metal`,color:`var(--warning)`},{key:`halogen`,label:`Halogen`,color:`var(--insight)`},{key:`noble`,label:`Noble gas`,color:`var(--presence-soft)`}],elements:[{z:1,symbol:`H`,name:`Hydrogen`,col:1,row:1},{z:2,symbol:`He`,name:`Helium`,col:18,row:1,cat:`noble`},{z:3,symbol:`Li`,name:`Lithium`,col:1,row:2,cat:`alkali`,on:!0},{z:6,symbol:`C`,name:`Carbon`,col:14,row:2,on:!0},{z:8,symbol:`O`,name:`Oxygen`,col:16,row:2,on:!0},{z:9,symbol:`F`,name:`Fluorine`,col:17,row:2,cat:`halogen`},{z:11,symbol:`Na`,name:`Sodium`,col:1,row:3,cat:`alkali`},{z:17,symbol:`Cl`,name:`Chlorine`,col:17,row:3,cat:`halogen`}],footer:`The highlighted elements are the ones in this week’s mechanisms.`},bodymap:{title:`Primary muscles worked, marathon training`,icon:`sparkle`,iconColor:`var(--presence)`,regions:[{id:`leftLeg`,label:`Quads`,color:`var(--presence)`,note:`primary drive`},{id:`rightLeg`,label:`Quads`,color:`var(--presence)`,note:`primary drive`},{id:`leftFoot`,label:`Calf`,color:`var(--insight)`,note:`push-off`},{id:`rightFoot`,label:`Calf`,color:`var(--insight)`,note:`push-off`},{id:`chest`,label:`Core`,color:`var(--warning)`,note:`stabiliser`}],footer:`Quads do the heavy lifting; calves absorb impact on every stride.`},geometrycanvas:{title:`A 30-60-90 triangle`,icon:`sparkle`,iconColor:`var(--presence)`,xRange:[-.5,5],yRange:[-.5,4],xLabel:`x`,yLabel:`y`,points:[{x:0,y:0,label:`A`,color:`var(--presence)`},{x:4,y:0,label:`B`,color:`var(--presence)`},{x:0,y:2.31,label:`C`,color:`var(--presence)`}],polygons:[{vertices:[{x:0,y:0},{x:4,y:0},{x:0,y:2.31}],color:`var(--presence)`}],angles:[{vertex:{x:4,y:0},from:{x:0,y:0},to:{x:0,y:2.31},label:`30°`,color:`var(--insight)`},{vertex:{x:0,y:0},from:{x:4,y:0},to:{x:0,y:2.31},label:`90°`,color:`var(--warning)`,rightAngle:!0}],annotations:[{x:2,y:-.3,text:`hyp = 4`,color:`var(--text-muted)`},{x:-.4,y:1.15,text:`2√3`,color:`var(--text-muted)`,anchor:`end`}],footer:`The 30-60-90 triangle: sides scale as 1 : √3 : 2. Memorise the short side and derive the rest.`},freebodydiagram:{title:`Forces on a sliding block`,icon:`shield`,iconColor:`var(--insight)`,object:`Block`,forces:[{label:`Weight (mg)`,angle:270,magnitude:20,color:`var(--warning)`},{label:`Normal (N)`,angle:90,magnitude:20,color:`var(--insight)`},{label:`Push (F)`,angle:0,magnitude:12,color:`var(--presence)`},{label:`Friction (f)`,angle:180,magnitude:5,color:`var(--danger)`}],footer:`Net horizontal force = 12 − 5 = 7 N → acceleration = 0.35 m/s² rightward.`},musicstaff:{title:`C major scale (treble clef)`,icon:`sparkle`,iconColor:`var(--presence)`,clef:`treble`,timeSignature:`4/4`,tempo:120,notes:[{pitch:`C4`,duration:`quarter`},{pitch:`D4`,duration:`quarter`},{pitch:`E4`,duration:`quarter`},{pitch:`F4`,duration:`quarter`},{pitch:`G4`,duration:`quarter`},{pitch:`A4`,duration:`quarter`},{pitch:`B4`,duration:`quarter`},{pitch:`C5`,duration:`half`,dotted:!0}],footer:`C major uses only white keys, no sharps or flats. Every other major scale is this same pattern of whole and half steps (W W H W W W H) transposed to a new root.`},vectorspace:{title:`Eigenvectors of a 2×2 matrix`,icon:`sparkle`,iconColor:`var(--presence)`,vectors:[{x:2,y:1,label:`v₁`,color:`var(--presence)`},{x:-1,y:1,label:`v₂`,color:`var(--insight)`}],transformed:[{x:6,y:3,label:`Av₁`,color:`var(--presence)`},{x:-1,y:1,label:`Av₂`,color:`var(--insight)`}],xRange:[-3,8],yRange:[-1,5],footer:`Solid = original eigenvector, dashed = transformed. v₁ stretches (λ=3); v₂ is unchanged (λ=1).`},reactionmechanism:{title:`SN2 Mechanism: methyl bromide + OH⁻`,reactionType:`SN2`,steps:[{label:`CH<sub>3</sub>Br`,tag:`reactant`},{label:`[HO···CH<sub>3</sub>···Br]<sup>‡</sup>`,color:`var(--warning)`,tag:`transition state`},{label:`CH<sub>3</sub>OH`,tag:`product`}],conditions:[`OH⁻, acetone`,``],footer:`One step, backside attack, inversion of configuration (Walden inversion). Second-order: rate = k[CH₃Br][OH⁻].`},chorddiagram:{title:`G Major chord`,chordName:`G`,instrument:`Guitar`,frets:[3,2,0,0,0,3],fingers:[2,1,null,null,null,3],notes:[`G`,`B`,`G`,`D`,`G`,`B`]},developmentmilestone:{title:`Leo's 18-month milestones`,ageLabel:`18 months`,domains:[{domain:`motor`,milestones:[{label:`Walks independently without support`,achieved:!0},{label:`Climbs onto low furniture`,achieved:!0},{label:`Stacks 2–3 blocks`,achieved:!0},{label:`Kicks a ball forward`,achieved:!1}]},{domain:`language`,milestones:[{label:`Says 10+ single words clearly`,achieved:!0},{label:`Points to show interest (not just to request)`,achieved:!0},{label:`Follows simple 2-step directions`,achieved:!1},{label:`Waves bye-bye spontaneously`,achieved:!0}]},{domain:`social`,milestones:[{label:`Shows affection to familiar people`,achieved:!0},{label:`Plays simple pretend (feeding a doll)`,achieved:!1},{label:`Shows interest in other children`,achieved:!0}]}]},teachdiagram:{title:`Pythagorean theorem, built step by step`,ratio:1.6,baseShapes:[{kind:`line`,x1:5,y1:62,x2:95,y2:62,color:`var(--text-muted)`}],steps:[{caption:`Draw a right triangle with legs a and b.`,add:[{kind:`polygon`,points:`18,12 18,58 64,58`,fill:`var(--presence-soft)`,color:`var(--presence)`},{kind:`path`,d:`M18,52 L24,52 L24,58`,color:`var(--presence)`}],emphasize:[0]},{caption:`Label the sides: a = 3 (vertical), b = 4 (horizontal).`,add:[],labels:[{x:18,y:35,text:`a = 3`,side:`left`},{x:41,y:58,text:`b = 4`,side:`bottom`}]},{caption:`The hypotenuse c runs from the top corner to the right corner.`,add:[{kind:`line`,x1:18,y1:12,x2:64,y2:58,color:`var(--insight)`}],labels:[{x:42,y:33,text:`c = ?`,side:`right`,color:`var(--insight)`}],emphasize:[0]},{caption:`a² + b² = c² → 3² + 4² = 9 + 16 = 25 → c = √25 = 5.`,add:[],labels:[{x:42,y:33,text:`c = 5 ✓`,side:`right`,color:`var(--insight)`}]}]},gridmatrix:{title:`Ten-Frame: Showing 7`,variant:`tenframe`,cells:[[1,1,1,1,1],[1,1,0,0,0]],note:`7 filled dots, 3 empty — a quick way to see how far a number is from 10.`},fractionbar:{title:`Comparing Fractions`,fractions:[{numerator:1,denominator:2,label:`½`},{numerator:3,denominator:4,label:`¾`},{numerator:2,denominator:3,label:`⅔`}],showPie:!0,note:`¾ is the largest of the three; ½ is the smallest.`},wave:{title:`Wavelength and amplitude of a sound wave`,icon:`spark`,iconColor:`var(--presence)`,xUnit:`distance (m)`,showWavelength:!0,showAmplitude:!0,waves:[{amplitude:3,wavelength:.78,label:`A4 (440 Hz)`,color:`var(--presence)`},{amplitude:1.5,wavelength:.39,label:`2nd harmonic`,color:`var(--insight)`}],footer:`At 343 m/s in air, a 440 Hz tone has wavelength λ = v/f = 343/440 ≈ 0.78 m. The 2nd harmonic (880 Hz) has half the wavelength and, here, half the amplitude.`},energydiagram:{title:`Energy profile of an exothermic reaction`,icon:`spark`,iconColor:`var(--danger)`,yUnit:`kJ/mol`,reactants:0,ts:75,products:-45,reactantLabel:`Reactants`,tsLabel:`Transition state`,productLabel:`Products`,footer:`Ea = 75 kJ/mol is the barrier the reactants must overcome; the products sit 45 kJ/mol lower, so ΔH = −45 kJ/mol — energy is released (exothermic). A catalyst would lower the peak (smaller Ea) without changing ΔH.`},phylotree:{title:`How the great apes are related`,icon:`spark`,iconColor:`var(--presence)`,root:{children:[{name:`Orangutan`},{children:[{name:`Gorilla`},{children:[{name:`Human`},{children:[{name:`Chimpanzee`},{name:`Bonobo`}]}]}]}]},clades:[{label:`Hominini`,tips:[`Human`,`Chimpanzee`,`Bonobo`],color:`var(--insight)`},{label:`Pan`,tips:[`Chimpanzee`,`Bonobo`],color:`var(--warning)`}],traits:[{on:`Human`,label:`bipedal`,color:`var(--warning)`}],footer:`Each branch point is a common ancestor. Chimpanzees and bonobos are each other&rsquo;s closest relatives, and together they are humans&rsquo; closest living kin.`},parsetree:{title:`Grammar: a constituency parse tree`,icon:`layers`,iconColor:`var(--presence)`,sentence:`The quick fox jumps over the lazy dog.`,colorPos:!0,root:{label:`S`,children:[{label:`NP`,children:[{label:`Det`,word:`The`},{label:`Adj`,word:`quick`},{label:`N`,word:`fox`}]},{label:`VP`,children:[{label:`V`,word:`jumps`},{label:`PP`,children:[{label:`P`,word:`over`},{label:`NP`,children:[{label:`Det`,word:`the`},{label:`Adj`,word:`lazy`},{label:`N`,word:`dog`}]}]}]}]},footer:`The sentence (<b>S</b>) splits into a noun phrase (<b>NP</b>) and a verb phrase (<b>VP</b>); the <b>VP</b> nests a prepositional phrase (<b>PP</b>) that carries its own <b>NP</b>.`},celldiagram:{title:`Anatomy of an animal cell`,icon:`sparkle`,iconColor:`var(--presence)`,cellType:`animal`,parts:[{key:`membrane`,note:`Selectively permeable boundary controlling what enters and leaves.`},{key:`cytoplasm`,note:`Gel-like fluid where the organelles sit and most reactions occur.`},{key:`nucleus`,highlight:!0,color:`var(--presence)`,note:`Holds the DNA and directs the cell; the nucleolus inside builds ribosomes.`},{key:`mitochondria`,highlight:!0,color:`var(--warning)`,note:`The powerhouse: makes ATP via aerobic respiration.`},{key:`er`,note:`Endoplasmic reticulum — folds and transports proteins and lipids.`},{key:`golgi`,note:`Golgi apparatus — packages and ships processed proteins.`},{key:`ribosomes`,note:`Sites of protein synthesis (translate mRNA into polypeptides).`}],footer:`An animal cell has no cell wall, chloroplasts, or large central vacuole — those are plant-cell features.`},raydiagram:{title:`Convex lens: object beyond 2F`,icon:`eye`,iconColor:`var(--presence)`,element:`convex-lens`,objectDistance:30,focalLength:10,objectHeight:1,footer:`With d<sub>o</sub> = 30 cm and f = 10 cm, the lens equation gives d<sub>i</sub> = 15 cm: a real, inverted image at half size (m = −0.5). This is how a camera forms its picture.`},vectorfield:{title:`Slope field for y' = x − y`,icon:`sparkle`,iconColor:`var(--presence)`,xLabel:`x`,yLabel:`y`,xRange:[-2,2],yRange:[-2,2],samples:[{x:-2,y:-2,slope:0},{x:-1,y:-2,slope:1},{x:0,y:-2,slope:2},{x:1,y:-2,slope:3},{x:2,y:-2,slope:4},{x:-2,y:-1,slope:-1},{x:-1,y:-1,slope:0},{x:0,y:-1,slope:1},{x:1,y:-1,slope:2},{x:2,y:-1,slope:3},{x:-2,y:0,slope:-2},{x:-1,y:0,slope:-1},{x:0,y:0,slope:0},{x:1,y:0,slope:1},{x:2,y:0,slope:2},{x:-2,y:1,slope:-3},{x:-1,y:1,slope:-2},{x:0,y:1,slope:-1},{x:1,y:1,slope:0},{x:2,y:1,slope:1},{x:-2,y:2,slope:-4},{x:-1,y:2,slope:-3},{x:0,y:2,slope:-2},{x:1,y:2,slope:-1},{x:2,y:2,slope:0}],curves:[{label:`y = x − 1 + e⁻ˣ`,color:`var(--presence)`,points:[{x:-2,y:4.389},{x:-1.5,y:1.982},{x:-1,y:.718},{x:-.5,y:.149},{x:0,y:0},{x:.5,y:.107},{x:1,y:.368},{x:1.5,y:.723},{x:2,y:1.135}]}],footer:`Each dash is the tangent slope x − y at that point; the solution curve flows along them, settling toward the line y = x − 1.`},pedigree:{title:`Tracing an autosomal recessive trait`,icon:`share`,iconColor:`var(--presence)`,people:[{id:`g1`,sex:`male`,carrier:!0,genotype:`Aa`,label:`I-1`},{id:`g2`,sex:`female`,carrier:!0,genotype:`Aa`,label:`I-2`,partner:`g1`},{id:`c1`,sex:`female`,label:`II-1`,parents:[`g2`,`g1`],genotype:`AA`},{id:`c2`,sex:`male`,affected:!0,proband:!0,label:`II-2`,parents:[`g2`,`g1`],genotype:`aa`},{id:`c3`,sex:`female`,carrier:!0,label:`II-3`,parents:[`g2`,`g1`],genotype:`Aa`,partner:`m1`},{id:`m1`,sex:`male`,label:`II-4`},{id:`d1`,sex:`unknown`,label:`III-1`,parents:[`c3`,`m1`]},{id:`d2`,sex:`female`,carrier:!0,label:`III-2`,parents:[`c3`,`m1`],genotype:`Aa`}],footer:`Both grandparents (I-1, I-2) are unaffected carriers (Aa), so each child had a 1-in-4 chance of being affected (aa). The proband II-2 is affected; the trait skips a generation &mdash; the hallmark of <strong>autosomal recessive</strong> inheritance.`},bohrmodel:{title:`Bohr model of a sodium atom`,icon:`spark`,iconColor:`var(--presence)`,symbol:`Na`,name:`Sodium`,protons:11,neutrons:12,shells:[2,8,1],footer:`Sodium has 11 protons, so a neutral atom has 11 electrons arranged 2&middot;8&middot;1 across three shells. That single electron in the outer (n3) shell is easily lost &mdash; which is why sodium readily forms the Na&#8314; ion.`},equationbalancer:{title:`Combustion of methane`,icon:`sparkle`,iconColor:`var(--presence)`,balanced:!0,reactants:[{formula:`CH4`,coeff:1},{formula:`O2`,coeff:2}],products:[{formula:`CO2`,coeff:1},{formula:`H2O`,coeff:2}],elementTally:[{element:`C`,left:1,right:1},{element:`H`,left:4,right:4},{element:`O`,left:4,right:4}],caption:`CH₄ + 2 O₂ → CO₂ + 2 H₂O. Every element has the same number of atoms on each side, so mass is conserved and the equation is balanced.`,footer:`The coefficient of 2 on O₂ supplies the 4 oxygen atoms the products need (2 in CO₂ + 2 in the two H₂O molecules), while 2 H₂O accounts for all 4 hydrogens from methane.`},yieldcalc:{title:`Percent yield: ammonia synthesis`,icon:`sparkle`,iconColor:`var(--presence)`,reaction:`N2 + 3 H2 -> 2 NH3`,limitingReagent:`H2`,molesAvailable:[{reagent:`N2`,moles:2},{reagent:`H2`,moles:5}],theoreticalYield:56.8,actualYield:42.5,unit:`g`,footer:`Each mole of N₂ needs 3 mol H₂ — 2.0 mol N₂ would need 6.0 mol H₂, but only 5.0 mol is on hand, so H₂ caps the reaction at 3.33 mol NH₃ (56.8 g theoretical). Recovering 42.5 g in the lab is a 74.8% yield.`},vseprmolecule:{title:`Shape of a water molecule`,icon:`sparkle`,iconColor:`var(--insight)`,central:`O`,bonds:[{atom:`H`,order:1},{atom:`H`,order:1}],lonePairs:2,shape:`bent`,bondAngle:`104.5°`,caption:`Oxygen has two bonding pairs and two lone pairs. The four electron domains repel into a tetrahedral arrangement, but only the two O–H bonds are visible — giving water its bent shape.`,footer:`The two lone pairs sit closer to the oxygen and push the O–H bonds together, compressing the angle from the ideal tetrahedral 109.5° down to 104.5°. This bent, polar geometry is why water is such a good solvent.`},unitcircle:{title:`Unit circle at θ = 135°`,icon:`chart`,iconColor:`var(--presence)`,angleDeg:135,showSpecial:!0,caption:`At 135° (3π/4 radians) the terminal point is (−√2/2, √2/2): cosine is negative and sine is positive, placing it in the second quadrant.`,footer:`135° has a reference angle of 45°, so its sine and cosine share the magnitude √2/2 ≈ 0.707 — only the cosine flips sign because the radius now points up and to the left.`},solidfigure:{title:`Rectangular prism`,icon:`layers`,iconColor:`var(--presence)`,solid:`rectprism`,dims:{w:1.6,h:1,d:.9},labels:{v:8,e:12,f:6},surfaceArea:`94 cm²`,volume:`60 cm³`,caption:`A 5 × 4 × 3 cm box. Surface area sums the six rectangular faces (2(lw + lh + wh) = 94 cm²) and volume is l × w × h = 60 cm³.`,footer:`Every convex solid satisfies Euler’s formula V − E + F = 2: here 8 − 12 + 6 = 2, a quick check that the vertex, edge and face counts are consistent.`},crosssection:{title:`Inside the Earth`,icon:`globe`,iconColor:`var(--warning)`,orientation:`concentric`,depthUnit:`km`,layers:[{name:`Crust`,thickness:35,color:`var(--warning)`,note:`0–35 km · solid rock`},{name:`Mantle`,thickness:2865,color:`var(--danger)`,note:`35–2900 km · hot silicate`},{name:`Outer core`,thickness:2255,color:`var(--presence)`,note:`2900–5155 km · liquid iron`},{name:`Inner core`,thickness:1216,color:`var(--insight)`,note:`5155–6371 km · solid iron`}],caption:`The Earth is layered by density: a thin rocky crust over the deep mantle, then a liquid iron-nickel outer core and a solid inner core at the centre.`,footer:`Convection in the liquid outer core generates Earth’s magnetic field, while the immense pressure at the centre keeps the inner core solid despite temperatures near 5,200&nbsp;°C.`},pianokeys:{title:`C major 7 chord`,icon:`play`,iconColor:`var(--presence)`,chordName:`Cmaj7`,startNote:`C4`,octaves:2,showLabels:!0,highlight:[{note:`C4`,role:`root`},{note:`E4`,role:`3rd`},{note:`G4`,role:`5th`},{note:`B4`,role:`7th`}],caption:`A major-7 stacks a major triad with a major 7th: C–E–G–B.`,footer:`The bright, jazzy colour comes from that major-7th interval (B over C) — a half-step below the octave.`},fretboardmap:{title:`A minor pentatonic`,icon:`sparkle`,iconColor:`var(--presence)`,scaleName:`A minor pentatonic`,strings:6,frets:12,tuning:[`E`,`A`,`D`,`G`,`B`,`E`],dots:[{string:6,fret:5,label:`R`,role:`root`},{string:6,fret:8,label:`b3`,role:`third`},{string:5,fret:5,label:`4`,role:`other`},{string:5,fret:7,label:`5`,role:`fifth`},{string:4,fret:5,label:`b7`,role:`other`},{string:4,fret:7,label:`R`,role:`root`},{string:3,fret:5,label:`b3`,role:`third`},{string:3,fret:7,label:`4`,role:`other`},{string:2,fret:5,label:`5`,role:`fifth`},{string:2,fret:8,label:`b7`,role:`other`},{string:1,fret:5,label:`R`,role:`root`},{string:1,fret:8,label:`b3`,role:`third`}],caption:`The box-1 shape at the 5th fret — roots on the low E, D, and high E strings anchor the position.`},circleoffifths:{title:`Circle of fifths`,icon:`sparkle`,iconColor:`var(--insight)`,highlightKey:`G`,showMinors:!0,related:[`C`,`D`,`Em`],caption:`G major sits one sharp clockwise of C: its IV is C, its V is D, and Em is its relative minor.`},odontogram:{title:`Adult dental chart`,icon:`doc`,iconColor:`var(--presence)`,system:`universal`,teeth:[{n:3,status:`filling`,surface:`O`},{n:14,status:`filling`,surface:`MOD`},{n:19,status:`crown`,note:`porcelain-fused-to-metal`},{n:30,status:`missing`},{n:31,status:`implant`,note:`titanium fixture, placed 2024`}],caption:`Universal numbering: teeth 1–16 across the upper arch, 17–32 across the lower.`},clockface:{title:`Reading the clock`,icon:`clock`,iconColor:`var(--presence)`,time:`3:40`,digital:!0,caption:`The hour hand sits past 3, two-thirds of the way toward 4, while the minute hand points to the 8 — forty minutes past the hour.`},moneytray:{title:`Counting coins`,icon:`cart`,iconColor:`var(--warning)`,currency:`$`,mode:`count`,tokens:[{denom:.25,label:`Quarter`,count:3},{denom:.1,label:`Dime`,count:2},{denom:.01,label:`Penny`,count:4}],caption:`Three quarters make 75¢, two dimes add 20¢, and four pennies add 4¢ — ninety-nine cents in all.`},placevaluechart:{title:`Place value of 347`,icon:`layers`,iconColor:`var(--insight)`,value:347,showBlocks:!0,expanded:!0,caption:`Each digit holds a different value by its place: 3 hundreds, 4 tens, and 7 ones combine to make 347.`},shapecard:{title:`Shapes and their attributes`,icon:`sparkle`,iconColor:`var(--presence)`,shapes:[{name:`Hexagon`,kind:`hexagon`,sides:6,vertices:6,example:`Honeycomb cell`},{name:`Cube`,kind:`cube`,faces:6,edges:12,vertices:8,example:`Dice`}],caption:`A hexagon is a flat six-sided polygon; a cube is the solid you get when six square faces meet at eight corners.`},letterform:{title:`Forming lowercase 'a'`,icon:`edit`,iconColor:`var(--insight)`,letter:`a`,case:`lower`,showGuides:!0,strokes:[{order:1,hint:`Start below the midline and curve left, down, and around to close the bowl.`},{order:2,hint:`Draw a straight line down the right side, sitting on the baseline.`}],caption:`The lowercase a is built from two strokes: a round bowl, then a straight tail on the right.`},toolscale:{title:`Reading a ruler`,icon:`chart`,iconColor:`var(--presence)`,instrument:`ruler`,value:2.375,max:3,unit:`in`,fractional:!0,caption:`The arrow lands three of the eight marks past the 2-inch line, which reads 2 and three-eighths inches.`},craftchart:{title:`Cross-stitch heart motif`,icon:`edit`,iconColor:`var(--insight)`,craft:`crossstitch`,rows:12,cols:12,cells:[{r:1,c:2,color:`var(--danger)`,symbol:`×`},{r:1,c:3,color:`var(--danger)`,symbol:`×`},{r:1,c:8,color:`var(--danger)`,symbol:`×`},{r:1,c:9,color:`var(--danger)`,symbol:`×`},{r:2,c:1,color:`var(--danger)`,symbol:`×`},{r:2,c:2,color:`var(--danger)`,symbol:`×`},{r:2,c:3,color:`var(--danger)`,symbol:`×`},{r:2,c:4,color:`var(--danger)`,symbol:`×`},{r:2,c:7,color:`var(--danger)`,symbol:`×`},{r:2,c:8,color:`var(--danger)`,symbol:`×`},{r:2,c:9,color:`var(--danger)`,symbol:`×`},{r:2,c:10,color:`var(--danger)`,symbol:`×`},{r:3,c:1,color:`var(--danger)`,symbol:`×`},{r:3,c:2,color:`var(--warning-soft)`,symbol:`o`},{r:3,c:3,color:`var(--warning-soft)`,symbol:`o`},{r:3,c:4,color:`var(--danger)`,symbol:`×`},{r:3,c:5,color:`var(--danger)`,symbol:`×`},{r:3,c:6,color:`var(--danger)`,symbol:`×`},{r:3,c:7,color:`var(--danger)`,symbol:`×`},{r:3,c:8,color:`var(--danger)`,symbol:`×`},{r:3,c:9,color:`var(--danger)`,symbol:`×`},{r:3,c:10,color:`var(--danger)`,symbol:`×`},{r:4,c:1,color:`var(--danger)`,symbol:`×`},{r:4,c:2,color:`var(--warning-soft)`,symbol:`o`},{r:4,c:3,color:`var(--danger)`,symbol:`×`},{r:4,c:4,color:`var(--danger)`,symbol:`×`},{r:4,c:5,color:`var(--danger)`,symbol:`×`},{r:4,c:6,color:`var(--danger)`,symbol:`×`},{r:4,c:7,color:`var(--danger)`,symbol:`×`},{r:4,c:8,color:`var(--danger)`,symbol:`×`},{r:4,c:9,color:`var(--danger)`,symbol:`×`},{r:4,c:10,color:`var(--danger)`,symbol:`×`},{r:5,c:1,color:`var(--danger)`,symbol:`×`},{r:5,c:2,color:`var(--danger)`,symbol:`×`},{r:5,c:3,color:`var(--danger)`,symbol:`×`},{r:5,c:4,color:`var(--danger)`,symbol:`×`},{r:5,c:5,color:`var(--danger)`,symbol:`×`},{r:5,c:6,color:`var(--danger)`,symbol:`×`},{r:5,c:7,color:`var(--danger)`,symbol:`×`},{r:5,c:8,color:`var(--danger)`,symbol:`×`},{r:5,c:9,color:`var(--danger)`,symbol:`×`},{r:5,c:10,color:`var(--danger)`,symbol:`×`},{r:6,c:2,color:`var(--danger)`,symbol:`×`},{r:6,c:3,color:`var(--danger)`,symbol:`×`},{r:6,c:4,color:`var(--danger)`,symbol:`×`},{r:6,c:5,color:`var(--danger)`,symbol:`×`},{r:6,c:6,color:`var(--danger)`,symbol:`×`},{r:6,c:7,color:`var(--danger)`,symbol:`×`},{r:6,c:8,color:`var(--danger)`,symbol:`×`},{r:6,c:9,color:`var(--danger)`,symbol:`×`},{r:7,c:3,color:`var(--danger)`,symbol:`×`},{r:7,c:4,color:`var(--danger)`,symbol:`×`},{r:7,c:5,color:`var(--danger)`,symbol:`×`},{r:7,c:6,color:`var(--danger)`,symbol:`×`},{r:7,c:7,color:`var(--danger)`,symbol:`×`},{r:7,c:8,color:`var(--danger)`,symbol:`×`},{r:8,c:4,color:`var(--danger)`,symbol:`×`},{r:8,c:5,color:`var(--danger)`,symbol:`×`},{r:8,c:6,color:`var(--danger)`,symbol:`×`},{r:8,c:7,color:`var(--danger)`,symbol:`×`},{r:9,c:5,color:`var(--danger)`,symbol:`×`},{r:9,c:6,color:`var(--danger)`,symbol:`×`}],legend:[{symbol:`×`,color:`var(--danger)`,meaning:`DMC 321 — red (full cross-stitch)`},{symbol:`o`,color:`var(--warning-soft)`,meaning:`DMC 819 — pale pink (highlight glint)`},{meaning:`Blank — leave the fabric unworked`}],caption:`Work each ×: bring the needle up at the bottom-left of the square and down at the top-right, then cross back the other way. Count stitches along the top, rows down the right.`},areamodel:{title:`23 × 14 area model`,icon:`layers`,iconColor:`var(--warning)`,factorA:[20,3],factorB:[10,4],showProducts:!0,showSum:!0,caption:`Each cell shows the partial product; the sum equals 322.`},gridtransform:{title:`Horizontal shear T = [[1,1],[0,1]]`,icon:`layers`,iconColor:`var(--presence)`,matrix:[[1,1],[0,1]],showEigens:!0,animated:!0},polarplot:{title:`Rose curve r = cos(2θ)`,icon:`chart`,iconColor:`var(--presence)`,fn:`cos(2*t)`,domain:[0,6.2832]},twocolumnproof:{title:`Isosceles triangle · base angles theorem`,icon:`layers`,iconColor:`var(--presence)`,given:`Triangle ABC with AB ≅ AC`,prove:`∠B ≅ ∠C`,steps:[{statement:`AB ≅ AC`,reason:`Given`},{statement:`Draw AD bisecting ∠BAC`,reason:`Angle Bisector Postulate`},{statement:`∠BAD ≅ ∠CAD`,reason:`Definition of angle bisector`},{statement:`AD ≅ AD`,reason:`Reflexive Property`},{statement:`△ABD ≅ △ACD`,reason:`SAS Congruence`},{statement:`∠B ≅ ∠C`,reason:`CPCTC`}]},pyramidtiers:{title:`Bloom's taxonomy`,icon:`layers`,iconColor:`var(--insight)`,tiers:[{label:`Remember`,note:`Recall facts and basic concepts`},{label:`Understand`,note:`Explain ideas in your own words`},{label:`Apply`,note:`Use the concept in a new situation`},{label:`Analyse`,note:`Draw connections between ideas`},{label:`Evaluate`,note:`Justify a decision or course of action`},{label:`Create`,note:`Produce something new using learned skills`}],caption:`Higher tiers require deeper cognitive engagement. Most exam questions test Apply and above.`},linespectrum:{title:`Hydrogen emission spectrum (Balmer series)`,icon:`eye`,iconColor:`var(--warning)`,lines:[{wavelength:656,intensity:1,label:`Hα`},{wavelength:486,intensity:.36,label:`Hβ`},{wavelength:434,intensity:.16,label:`Hγ`},{wavelength:410,intensity:.08,label:`Hδ`}],mode:`emission`,elementLabel:`Hydrogen (Balmer series, n→2)`,caption:`Each line corresponds to an electron falling to n=2. The 656 nm red Hα line is brightest.`},dnahelix:{title:`DNA — Watson-Crick base pairing`,icon:`sparkle`,iconColor:`var(--presence)`,bases:[{pair:`AT`},{pair:`GC`},{pair:`CG`},{pair:`TA`},{pair:`GC`,highlight:!0},{pair:`AT`},{pair:`CG`},{pair:`TA`},{pair:`GC`},{pair:`AT`}],mode:`helix`,showLabels:!0,caption:`A-T (2 H-bonds) and G-C (3 H-bonds) pair across the two antiparallel strands.`},taylorseries:{title:`Taylor series for sin x`,icon:`chart`,iconColor:`var(--insight)`,fn:`sin`,center:0,showTerms:4},phaseportrait:{title:`Simple harmonic oscillator phase portrait`,icon:`chart`,iconColor:`var(--insight)`,fx:`y`,gy:`-x`,xDomain:[-3,3],yDomain:[-3,3],showNullclines:!0,trajectories:[{x0:2,y0:0},{x0:1,y0:0}],xlabel:`x`,ylabel:`ẋ`},sightwordlist:{title:`Sight words to review`,icon:`captions`,iconColor:`var(--presence)`,listName:`Dolch Pre-Primer`,words:[{word:`the`,mastery:`mastered`},{word:`and`,mastery:`mastered`},{word:`to`,mastery:`mastered`},{word:`said`,mastery:`practicing`},{word:`was`,mastery:`practicing`},{word:`they`,mastery:`practicing`},{word:`come`,mastery:`new`},{word:`does`,mastery:`new`}]},alphabetchart:{title:`The alphabet, A to Z`,icon:`edit`,iconColor:`var(--presence)`},columnarithmetic:{title:`Adding with regrouping: 267 + 458`,icon:`table`,iconColor:`var(--presence)`,op:`add`,operands:[267,458],showCarries:!0,caption:`7 + 8 makes 15 — write the 5, carry the 1. That carried 1 joins the tens column, and 6 + 5 + 1 carries again into the hundreds.`},titrationcurve:{title:`Titrating acetic acid with NaOH`,icon:`chart`,iconColor:`var(--presence)`,points:[{volumeMl:0,pH:2.9},{volumeMl:5,pH:4.14},{volumeMl:10,pH:4.58},{volumeMl:12.5,pH:4.76},{volumeMl:15,pH:4.94},{volumeMl:20,pH:5.35},{volumeMl:23,pH:5.7},{volumeMl:24,pH:6},{volumeMl:24.5,pH:6.5},{volumeMl:24.9,pH:7.5},{volumeMl:25,pH:8.72},{volumeMl:25.1,pH:10.5},{volumeMl:25.5,pH:11.2},{volumeMl:27,pH:11.8},{volumeMl:30,pH:12.1},{volumeMl:35,pH:12.4}],equivalenceVolumeMl:25,pKa:4.76,bufferBand:[5,20],footer:`The flat buffer region runs where acetic acid and its conjugate base coexist; the steep jump near 25 mL marks the equivalence point, and the curve sits basic there (pH 8.72) because acetate is a weak base.`},interferencepattern:{title:`Double-slit interference of green laser light`,icon:`spark`,iconColor:`var(--presence)`,slits:2,wavelengthNm:532,slitSeparationUm:250,intensity:[{position:-6,value:.02},{position:-5,value:.15},{position:-4,value:.02},{position:-3.5,value:.35},{position:-3,value:.05},{position:-2.5,value:.55},{position:-2,value:.1},{position:-1.5,value:.75},{position:-1,value:.15},{position:-.5,value:.9},{position:0,value:1},{position:.5,value:.9},{position:1,value:.15},{position:1.5,value:.75},{position:2,value:.1},{position:2.5,value:.55},{position:3,value:.05},{position:3.5,value:.35},{position:4,value:.02},{position:5,value:.15},{position:6,value:.02}],footer:`The bright fringes fall where the path difference from the two slits is a whole number of wavelengths; the envelope tapers off toward the edges of the screen.`},orbitaldiagram:{title:`Electron configuration of iron`,icon:`sparkle`,iconColor:`var(--presence)`,element:`Fe`,orbitals:[{subshell:`1s`,electrons:[2]},{subshell:`2s`,electrons:[2]},{subshell:`2p`,electrons:[2,2,2]},{subshell:`3s`,electrons:[2]},{subshell:`3p`,electrons:[2,2,2]},{subshell:`4s`,electrons:[2]},{subshell:`3d`,electrons:[2,1,1,1,1]}],configString:`1s² 2s² 2p⁶ 3s² 3p⁶ 4s² 3d⁶`,footer:`Hund's rule fills all five 3d boxes singly before any pairs up — so the sixth 3d electron is the only paired one, leaving four unpaired electrons overall.`},pictograph:{title:`Population by continent`,icon:`globe`,iconColor:`var(--presence)`,unitValue:500,rows:[{label:`Asia`,count:4700},{label:`Africa`,count:1400},{label:`Europe`,count:750},{label:`Americas`,count:1050},{label:`Oceania`,count:45}],footer:`Each icon stands for 500 million people, so Asia&rsquo;s roughly 4.7 billion tiles as nine full icons plus a sliver.`},particlemodel:{title:`Particle arrangement across the three phases`,icon:`sparkle`,iconColor:`var(--presence)`,panels:[{phase:`solid`,label:`Fixed lattice, vibrating in place`,particleCount:16},{phase:`liquid`,label:`Close together, free to flow`,particleCount:16},{phase:`gas`,label:`Spread out, moving freely`,particleCount:16}],footer:`Same particle count, three arrangements: a solid locks particles into a rigid grid, a liquid keeps them touching but mobile, and a gas lets them spread across the whole container.`},morphemebreakdown:{title:`Breaking down "unbreakable"`,icon:`doc`,iconColor:`var(--presence)`,word:`unbreakable`,morphemes:[{text:`un`,role:`prefix`,meaning:`not, opposite of`},{text:`break`,role:`root`,meaning:`to separate into pieces by force`},{text:`able`,role:`suffix`,meaning:`capable of, able to`}],footer:`The prefix negates the root and the suffix turns it into an adjective: "not able to be broken."`},practicelog:{title:`Two weeks of piano practice`,icon:`clock`,iconColor:`var(--presence)`,instrument:`Piano`,sessions:[{date:`2026-06-19`,minutes:25,focus:`scales`,note:`Hanon exercises`},{date:`2026-06-20`,minutes:40,piece:`Clair de Lune`,note:`Started the arpeggio section`},{date:`2026-06-21`,minutes:30,piece:`Clair de Lune`},{date:`2026-06-22`,minutes:20,focus:`sight-reading`},{date:`2026-06-23`,minutes:45,piece:`Clair de Lune`,note:`Tempo still rushes in the climax`},{date:`2026-06-24`,minutes:35,piece:`Für Elise`},{date:`2026-06-26`,minutes:40,piece:`Für Elise`},{date:`2026-06-27`,minutes:50,piece:`Für Elise`},{date:`2026-06-28`,minutes:15,focus:`scales`},{date:`2026-06-29`,minutes:60,piece:`Für Elise`,note:`Clean run-through start to finish`},{date:`2026-06-30`,minutes:30,piece:`Clair de Lune`},{date:`2026-07-01`,minutes:40,piece:`Für Elise`},{date:`2026-07-02`,minutes:45,piece:`Für Elise`,note:`Performance-ready for Sunday`}]},taxonrank:{title:`Where T. rex fits in the tree of life`,icon:`layers`,iconColor:`var(--warning)`,scientificName:`Tyrannosaurus rex`,ranks:[{level:`Kingdom`,name:`Animalia`},{level:`Phylum`,name:`Chordata`},{level:`Class`,name:`Reptilia`},{level:`Order`,name:`Saurischia`},{level:`Family`,name:`Tyrannosauridae`},{level:`Genus`,name:`Tyrannosaurus`},{level:`Species`,name:`T. rex`,highlight:!0}],footer:`Every rung down the ladder gets more specific — "Animalia" fits every animal ever, "T. rex" fits exactly one.`},numbersequence:{title:`The Fibonacci sequence`,icon:`sparkle`,iconColor:`var(--presence)`,kind:`fibonacci`,terms:[1,1,2,3,5,8,13,21,34,55,89],rule:`Each term is the sum of the two terms before it.`,highlightPattern:!0},constantcard:{title:`Pi`,icon:`sparkle`,iconColor:`var(--presence)`,symbol:`π`,value:`3.14159265358979323846`,digitsShown:10,significance:`The ratio of a circle’s circumference to its diameter — the same for every circle, no matter the size, and it never repeats or terminates.`,visual:`circle`},elementcard:{title:`Element deep dive: oxygen`,icon:`sparkle`,iconColor:`var(--insight)`,symbol:`O`,name:`Oxygen`,z:8,mass:15.999,category:`Reactive nonmetal`,electronConfig:`1s² 2s² 2p⁴`,shells:[2,6],discovered:`1774 (Priestley and Scheele, independently)`,meltingPoint:-218.79,boilingPoint:-182.96,uses:[`Respiration`,`Steelmaking`,`Water treatment`,`Combustion`,`Welding`],footer:`The same O that anchors carbon dioxide and water anchors half of Earth’s crust by mass.`},energybarchart:{title:`Energy of a swinging pendulum`,icon:`refresh`,iconColor:`var(--presence)`,unit:`J`,system:[`bob`,`Earth`],snapshots:[{label:`Highest point`,bars:[{kind:`KE`,value:0},{kind:`Ug`,value:100}]},{label:`Halfway down`,bars:[{kind:`KE`,value:50},{kind:`Ug`,value:50}]},{label:`Lowest point`,bars:[{kind:`KE`,value:100},{kind:`Ug`,value:0}]}],footer:`With no friction, total mechanical energy stays <strong>100 J</strong> — it just shifts between gravitational (Ug) and kinetic (KE).`},guitartab:{title:`A minor pentatonic run`,icon:`sparkle`,iconColor:`var(--presence)`,tuning:`EADGBE`,beatsPerMeasure:4,measuresPerRow:4,tempo:90,notes:[{measure:1,beat:1,string:6,fret:5,technique:`h`},{measure:1,beat:2,string:6,fret:8},{measure:1,beat:3,string:5,fret:5,technique:`h`},{measure:1,beat:4,string:5,fret:7},{measure:2,beat:1,string:4,fret:5,technique:`h`},{measure:2,beat:2,string:4,fret:7},{measure:2,beat:3,string:3,fret:5,technique:`s`},{measure:2,beat:4,string:3,fret:7},{measure:3,beat:1,string:2,fret:5},{measure:3,beat:2,string:2,fret:8,technique:`b`},{measure:3,beat:3,string:1,fret:5},{measure:3,beat:4,string:1,fret:8}],footer:`The A minor pentatonic 'box' shape, ascending from the low E string. Note the <strong>h</strong> (hammer-on) and <strong>b</strong> (bend) markings.`},karyotype:{title:`Human karyotype — Trisomy 21`,icon:`layers`,iconColor:`var(--presence)`,sex:`XX`,anomalies:[{pair:`21`,kind:`trisomy`,note:`Down syndrome`}],highlightPairs:[`21`],footer:`A karyogram arranges the 46 chromosomes into 23 pairs. Three copies of chromosome 21 (<strong>trisomy 21</strong>) underlies Down syndrome.`},frayermodel:{title:`Vocabulary — Photosynthesis`,icon:`edit`,iconColor:`var(--presence)`,term:`Photosynthesis`,pronunciation:`/ˌfoʊtoʊˈsɪnθəsɪs/`,definition:`The process green plants and algae use to turn sunlight, water, and carbon dioxide into glucose (food) and oxygen.`,characteristics:[`Needs sunlight, water, and CO₂`,`Takes place in the chloroplasts`,`Uses the green pigment chlorophyll`,`Releases oxygen as a by-product`],examples:[`A fern growing in a shady forest`,`Algae in a pond`,`A tomato plant on a windowsill`],nonexamples:[`A mushroom absorbing nutrients`,`A dog digesting its food`,`Rust forming on an iron nail`,`A candle burning`],footer:`Non-examples sharpen the boundary: they may involve energy or gases, but none <strong>build sugar from light</strong>.`},numberbond:{title:`Number bond for 10`,icon:`plus`,iconColor:`var(--presence)`,whole:10,parts:[6,4],factFamily:!0,label:`Six and four make ten`,footer:`Number bonds show how a <strong>whole</strong> splits into <strong>parts</strong> — the foundation of addition and subtraction fact families.`}};export{e as default};
@@ -0,0 +1 @@
1
+ import{n as e,t}from"./contentVault-xfUwSJ3i.js";var n=`mavea-dash-ledger-v1`,r=n,i=6048e5,a=400,o=0;function s(){try{let e=globalThis.crypto;if(e?.randomUUID)return e.randomUUID()}catch{}return o+=1,`led-${o.toString(36)}-${Math.floor(Math.random()*1e9).toString(36)}`}function c(e){return!!e&&typeof e==`object`}function l(e,t){return typeof e==`number`&&Number.isFinite(e)?e:t}function u(e,t=``){return typeof e==`string`?e:t}function d(e){return Array.isArray(e)?e.filter(e=>typeof e==`string`):[]}var f=new Set([`check`,`insight`,`savings`,`alert`,`briefing`,`goal`]);function p(e){if(!c(e)||e.action!==`set-cadence`)return;let t=u(e.dashboardId);if(!t||typeof e.to!=`string`)return;let n=e.state===`applied`||e.state===`dismissed`?e.state:`open`;return{action:`set-cadence`,dashboardId:t,to:e.to,savesPerMonth:Math.max(0,l(e.savesPerMonth,0)),state:n}}function m(e){if(!c(e))return null;let t=u(e.id),n=e.at;if(!t||typeof e.kind!=`string`||!f.has(e.kind)||typeof n!=`number`||!Number.isFinite(n))return null;let r=p(e.suggestion),i=d(e.domains);return{id:t,at:n,kind:e.kind,text:u(e.text),dashboardIds:d(e.dashboardIds),...i.length?{domains:i}:{},searches:+(e.searches===1),...typeof e.sourceCount==`number`&&Number.isFinite(e.sourceCount)?{sourceCount:e.sourceCount}:{},...e.manual===!0?{manual:!0}:{},...r?{suggestion:r}:{}}}function h(e,t){let n=t-i,r=e.filter(e=>e.at>=n);return r.length>a?r.slice(-400):r}function g(e){return Array.isArray(e)?e.map(m).filter(e=>e!==null):[]}var _=null,v=!1,y=0;async function b(t){let r=++y;try{if(typeof localStorage>`u`)return;let i=await e(t);if(r!==y)return;localStorage.setItem(n,i)}catch{}}function x(){try{if(typeof localStorage>`u`)return[];let e=localStorage.getItem(n);if(!e)return[];let t=g(JSON.parse(e));return t.length&&b(t),t}catch{return[]}}async function S(){try{if(typeof localStorage>`u`)return;let e=localStorage.getItem(n);if(!e)return;try{JSON.parse(e);return}catch{}let i=g(await t(e));if(v)return;_=i,v=!0,typeof window<`u`&&typeof CustomEvent==`function`&&window.dispatchEvent(new CustomEvent(r,{detail:i}))}catch{}}S();function C(){return _??=x(),_}function w(){_=null,v=!1,S()}function T(e){let t=g(e);_=t,v=!0,b(t);try{typeof window<`u`&&typeof CustomEvent==`function`&&window.dispatchEvent(new CustomEvent(r,{detail:t}))}catch{}}var E=null,D=null;function O(){let e=C();return(D!==e||E===null)&&(E=[...e].reverse(),D=e),E}function k(e){let t=e.at??Date.now(),{at:n,...r}=e,i={...r,id:s(),at:t};return T(h([...C(),i],t)),i}function A(e,t){T(C().map(n=>n.id===e&&n.suggestion?{...n,suggestion:{...n.suggestion,state:t}}:n))}function j(e){let t=new Date(e);return t.setHours(0,0,0,0),t.getTime()}function M(e,t){let n=j(t);return e.filter(e=>e.at>=n).reduce((e,t)=>e+t.searches,0)}function N(e,t,n){let r=n-6048e5;return e.filter(e=>e.at>=r&&e.kind===`check`&&e.dashboardIds.includes(t)).length}function P(e,t){let n=t-6048e5,r=e.filter(e=>e.at>=n),i=j(t),a=[];for(let e=6;e>=0;e--){let t=i-e*24*60*60*1e3,n=t+864e5;a.push({date:new Date(t).toISOString().slice(0,10),searches:r.filter(e=>e.at>=t&&e.at<n).reduce((e,t)=>e+t.searches,0)})}return{totalSearches:r.reduce((e,t)=>e+t.searches,0),byDay:a,topMoment:r.find(e=>e.kind===`goal`)??[...r].sort((e,t)=>(t.sourceCount??0)-(e.sourceCount??0))[0]??null,estSavedPerMonth:r.filter(e=>e.suggestion?.state===`applied`).reduce((e,t)=>e+(t.suggestion?.savesPerMonth??0),0)}}export{w as a,P as c,O as i,k as n,M as o,N as r,A as s,r as t};
@@ -0,0 +1 @@
1
+ import{t as e}from"./react-BZJXY1be.js";import{t}from"./jsx-runtime-DeHZSEgm.js";import{n}from"./icons-gLFQTv74.js";import"./BlockEmpty-B82uCse8.js";import"./motion-DxHSlPN6.js";var r=e(),i=t();function a({text:e,className:t=``,label:a=`Copy`}){let[o,s]=(0,r.useState)(!1),c=(0,r.useCallback)(()=>{navigator.clipboard.writeText(e).then(()=>{s(!0),setTimeout(()=>s(!1),2e3)})},[e]),l=o?n.check:n.copy;return(0,i.jsx)(`button`,{type:`button`,className:`copy-btn${o?` copied`:``}${t?` `+t:``}`,onClick:c,"aria-label":o?`Copied`:a,title:o?`Copied`:a,children:(0,i.jsx)(l,{className:`ic`,"aria-hidden":`true`})})}var o=(0,r.createContext)(null);function s(e){switch(e.kind){case`number`:return e.unit?`${e.value} ${e.unit}`:String(e.value);case`card`:return e.label;default:return e.value}}function c({blank:e}){let t=(0,r.useContext)(o),[n,a]=(0,r.useState)(void 0),[c,l]=(0,r.useState)(!1),[u,d]=(0,r.useState)(``),f=(0,r.useId)(),p=t?t.values[e.key]:n,m=t?.activeKey===e.key,h=e=>{t?t.fill(e):a(e),l(!1)},g=()=>{t?t.unfill?.(e.key):a(void 0),l(!1)},_=()=>t?.activate?.(e.key),v=()=>{d(p&&(p.kind===`text`||p.kind===`number`||p.kind===`date`)?String(p.value):``),l(!0),_()},y=t=>{let n=t.trim();if(n){if(e.kind===`number`){let t=Number(n);if(!Number.isFinite(t))return;h({kind:`number`,key:e.key,value:t,unit:e.unit})}else e.kind===`date`?h({kind:`date`,key:e.key,value:n}):h({kind:`text`,key:e.key,value:n})}},b={"--blank-accent":e.accent??`var(--presence)`};if(p&&!c)return(0,i.jsxs)(`div`,{className:`blank-slot is-filled`,style:b,"data-blank-key":e.key,"data-blank-kind":e.kind,children:[(0,i.jsx)(`span`,{className:`blank-label`,children:e.label}),(0,i.jsxs)(`div`,{className:`blank-value`,children:[(0,i.jsx)(`span`,{className:`blank-value-text`,children:s(p)}),(0,i.jsxs)(`span`,{className:`blank-actions`,children:[e.kind!==`choice`&&e.kind!==`card`&&(0,i.jsx)(`button`,{type:`button`,className:`blank-mini`,onClick:v,"aria-label":`Edit ${e.label}`,children:`Edit`}),(0,i.jsx)(`button`,{type:`button`,className:`blank-mini`,onClick:g,"aria-label":`Clear ${e.label}`,children:`Clear`})]})]})]});let x=e.kind===`date`?`date`:e.kind===`number`?`number`:`text`;return(0,i.jsxs)(`div`,{className:`blank-slot is-empty${m?` is-active`:``}`,style:b,"data-blank-key":e.key,"data-blank-kind":e.kind,children:[(0,i.jsx)(`label`,{className:`blank-label`,htmlFor:f,children:e.label}),e.kind===`choice`?(0,i.jsx)(`div`,{className:`blank-choices`,role:`group`,"aria-label":e.prompt,children:(e.options??[]).map(t=>(0,i.jsx)(`button`,{type:`button`,className:`blank-chip`,onClick:()=>h({kind:`choice`,key:e.key,value:t}),children:t},t))}):e.kind===`card`?(0,i.jsx)(`button`,{type:`button`,className:`blank-drop`,"data-blank-drop":e.key,onClick:_,"aria-label":e.prompt,children:(0,i.jsx)(`span`,{className:`blank-drop-hint`,children:e.placeholder??`Drag a card here`})}):(0,i.jsxs)(`div`,{className:`blank-input`,children:[(0,i.jsx)(`input`,{id:f,className:`blank-control`,type:x,value:u,placeholder:e.placeholder??e.prompt,"aria-label":e.prompt,onFocus:_,onChange:e=>d(e.target.value),onKeyDown:e=>{e.key===`Enter`&&(e.preventDefault(),y(e.target.value))},onBlur:e=>y(e.target.value)}),e.unit&&(0,i.jsx)(`span`,{className:`blank-unit`,children:e.unit})]}),(0,i.jsx)(`div`,{className:`blank-hint`,children:e.prompt})]})}export{o as n,a as r,c as t};