@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.
- package/DISCLAIMER.md +4 -1
- package/PRIVACY.md +14 -8
- package/README.md +61 -23
- package/TERMS.md +11 -1
- package/THIRD-PARTY.txt +25248 -621
- package/bin/mavea.mjs +156 -147
- package/dist/.vite/manifest.json +2159 -1730
- package/dist/assets/AnnotationLayer-ClU-e6qL.css +1 -0
- package/dist/assets/AnnotationLayer-DHHGgh8x.js +2 -0
- package/dist/assets/AppCommandPalette-DKBglbNo.js +1 -0
- package/dist/assets/AtlasView-B82UfrEX.js +1 -0
- package/dist/assets/BlockEmpty-B82uCse8.js +1 -0
- package/dist/assets/BriefingPlayer-C0D_2ILa.js +1 -0
- package/dist/assets/CanvasSkeleton-Bx0s36b_.js +2 -0
- package/dist/assets/CardEditor-DABIhGdQ.js +1 -0
- package/dist/assets/CheckLogRail-BOaXnqWK.css +1 -0
- package/dist/assets/CheckLogRail-Btg7Linv.js +1 -0
- package/dist/assets/{CodeOutput-H8TQzjqL.js → CodeOutput-DF892aIR.js} +3 -3
- package/dist/assets/CommandPalette-DagPdSGZ.js +1 -0
- package/dist/assets/ConversationVideoStudio-CIAMxElj.css +1 -0
- package/dist/assets/ConversationVideoStudio-EPw6H4lE.js +1 -0
- package/dist/assets/CourseLessonReader-DeAuL1tO.js +2 -0
- package/dist/assets/CourseRail-Dx9IIbTZ.js +1 -0
- package/dist/assets/CoursesApp-CzUGaYWZ.js +2 -0
- package/dist/assets/CrossExamPanel-CdIYUu-B.js +1 -0
- package/dist/assets/DashPresent-DXwesMIr.js +1 -0
- package/dist/assets/DashboardDetail-CJzB85NC.js +2 -0
- package/dist/assets/DashboardLoopRuntime-CEnUpS-I.js +1 -0
- package/dist/assets/DashboardOverview-C3hv9sm1.js +1 -0
- package/dist/assets/DashboardSettings-CmZWG3US.js +1 -0
- package/dist/assets/{DashboardsApp-Dx-EsaPW.css → DashboardsApp-B6yUtkKB.css} +1 -1
- package/dist/assets/DashboardsApp-wCgs98G0.js +2 -0
- package/dist/assets/{DeepZoomApp-CQaTT2Uh.js → DeepZoomApp-CwqKpjo7.js} +2 -2
- package/dist/assets/DelegatePanel-Bi1qPgGG.js +33 -0
- package/dist/assets/DemoGallery-Cg0ykVpG.js +1 -0
- package/dist/assets/DropSelect-C3g0PjuN.js +1 -0
- package/dist/assets/DropSelect-DilESAgA.css +1 -0
- package/dist/assets/ExportModal-rxndDhoO.js +2 -0
- package/dist/assets/ExtractionPreview-ChRAimKr.js +18 -0
- package/dist/assets/{FallbackCard-B489rTd9.js → FallbackCard-ap_4wOfj.js} +1 -1
- package/dist/assets/FeatureUseNotice-BhljPjUv.js +1 -0
- package/dist/assets/FlagshipCTA-uoeGMQas.js +1 -0
- package/dist/assets/FlagshipCommandPalette-DyNsP8k3.js +1 -0
- package/dist/assets/FlagshipShowcase-DHpGPlca.js +1 -0
- package/dist/assets/FlashcardsApp-Cm50X3Hl.js +1 -0
- package/dist/assets/ForecastPanel-zPUh2ClQ.js +1 -0
- package/dist/assets/GalleryApp-BFop9Eu7.js +1 -0
- package/dist/assets/{HonestByDesign-CCOt31nx.js → HonestByDesign-HeTTCiis.js} +1 -1
- package/dist/assets/{HowItWorks-auW5XXCZ.js → HowItWorks-gAuUl7VQ.js} +1 -1
- package/dist/assets/LegalApp-jOlpLQSV.js +1 -0
- package/dist/assets/{LegalMarkdownDocument-DBjLz9Yf.js → LegalMarkdownDocument-RSNiyAu0.js} +2 -2
- package/dist/assets/LegalPageShell-CmxGCdqJ.css +1 -0
- package/dist/assets/LegalPageShell-Cr90l1I2.js +1 -0
- package/dist/assets/LeverPanel-D1SNRGdm.js +1 -0
- package/dist/assets/Library-DmdzY2se.js +1 -0
- package/dist/assets/LibraryOverlay-DEQ5GuIs.js +1 -0
- package/dist/assets/LiveApp-Bl7WBgqJ.css +1 -0
- package/dist/assets/LiveApp-CUoQgVo1.js +62 -0
- package/dist/assets/LiveSettings-jn26sH4v.js +6 -0
- package/dist/assets/MindMapViewerDrawer-CDDzzpFi.js +1 -0
- package/dist/assets/MindShape-BeZFay7O.js +1 -0
- package/dist/assets/MindShape-CaPeUo-a.css +1 -0
- package/dist/assets/{Orb-B0NEVfqL.js → Orb-D8lhTdmY.js} +1 -1
- package/dist/assets/PinToDashboard-CSqwDBLD.js +1 -0
- package/dist/assets/PlanReview-ChZeUHQO.js +1 -0
- package/dist/assets/Presence-CKSoyuhE.js +1 -0
- package/dist/assets/PresentationDeck-Dj9MQVZC.js +1 -0
- package/dist/assets/PrismApp-Dfs6eAuR.js +2 -0
- package/dist/assets/PrismAskController-CSsCkRC8.js +37 -0
- package/dist/assets/PrismBriefingPlayer-BoB_PCTT.js +2 -0
- package/dist/assets/PrismOverlay-CGtr7lBl.js +109 -0
- package/dist/assets/PrismWorkbench-f0rLNBxb.js +1 -0
- package/dist/assets/{PrivacyApp-rhzy-5HG.js → PrivacyApp-CFs0PM5C.js} +16 -10
- package/dist/assets/Recap-T9DtFaEk.js +1 -0
- package/dist/assets/ReelJelly-D5e-jt-8.js +1 -0
- package/dist/assets/ReplayCard-BkJbY0-I.js +2 -0
- package/dist/assets/ReplayCard-Cs6mzTRa.css +1 -0
- package/dist/assets/ReplayOverlay-Dm_k7FBA.js +1 -0
- package/dist/assets/ReplayOverlay-DzkcTnCA.css +1 -0
- package/dist/assets/RewindOverlay-BSDbLgcN.js +1 -0
- package/dist/assets/RippleApp-DW1rpKHe.js +2 -0
- package/dist/assets/RippleAskController-CywVzqUA.js +34 -0
- package/dist/assets/RippleOverlay-DVxfWEQ8.js +6 -0
- package/dist/assets/SeeDontRead-Ct4PY63d.js +1 -0
- package/dist/assets/ShareModal-BILPvqjZ.js +2 -0
- package/dist/assets/{ShareModal-PobtP7AJ.css → ShareModal-D1QuQEko.css} +1 -1
- package/dist/assets/ShipCascade-Bf-qDWMb.js +1 -0
- package/dist/assets/ShipCourse-DGj9BbRM.js +1 -0
- package/dist/assets/{ShipGate-BYYu9WVq.js → ShipGate-D4BP41-h.js} +1 -1
- package/dist/assets/ShipHotspots-lGioTtf1.js +1 -0
- package/dist/assets/{ShipIncident-Xod2gbjc.js → ShipIncident-DMLb14Lx.js} +1 -1
- package/dist/assets/ShipMigration-ZnzL-1rC.js +1 -0
- package/dist/assets/ShipOnboarding-DUxtx2Vr.js +1 -0
- package/dist/assets/ShipRead-CJJmY-wy.js +1 -0
- package/dist/assets/ShipRollout-Dt2TgI0L.js +1 -0
- package/dist/assets/ShipSuggestions-BrAXTjAR.js +1 -0
- package/dist/assets/ShipWorkspace-_MtKAiKH.js +2 -0
- package/dist/assets/SignatureLoop-CfM-rTXb.js +1 -0
- package/dist/assets/SrsReview-B1B2VekR.css +1 -0
- package/dist/assets/SrsReview-DhWNYYv7.js +1 -0
- package/dist/assets/SynthesisApp-C43ZO6Ew.js +2 -0
- package/dist/assets/SynthesisOverlay-Dunk_JWD.js +66 -0
- package/dist/assets/{TermsApp-Dk2jpxq-.js → TermsApp-BUQa48cB.js} +13 -3
- package/dist/assets/TopbarMenu-DQXxqSWY.js +1 -0
- package/dist/assets/TopicCanvas-DR26Swr_.js +2 -0
- package/dist/assets/TourPrism-zt1LIaLd.js +1 -0
- package/dist/assets/TrackerTile-sYD2MM_4.js +2 -0
- package/dist/assets/TwoSurfaces-CLOIlVvY.js +1 -0
- package/dist/assets/UnderstoodPanel-DmJph4el.js +1 -0
- package/dist/assets/WhyMachineOverlay-Nll4Wco-.js +1 -0
- package/dist/assets/WowFeatures-CNVwRlf0.js +1 -0
- package/dist/assets/ZoomDeck-DNgyW7Nm.js +1 -0
- package/dist/assets/__vite-browser-external-gfE6fZcA.js +1 -0
- package/dist/assets/alternateFinishes-Cgks49KV.js +494 -0
- package/dist/assets/annotationAuto-C9weSF2k.js +1 -0
- package/dist/assets/annotationReel-va1i-lKs.js +1 -0
- package/dist/assets/annotations-CftUUB13.js +1 -0
- package/dist/assets/attachments-BW-vki-E.js +1 -0
- package/dist/assets/backup-D--1WRte.js +1 -0
- package/dist/assets/blockLabel-FogyzEQY.js +1 -0
- package/dist/assets/blockTypes-CgNGx27_.js +1 -0
- package/dist/assets/buildShip-BgFg98tH.js +1 -0
- package/dist/assets/cache-CvbSI-pr.js +1 -0
- package/dist/assets/canvas-DIs20T9l.js +1 -0
- package/dist/assets/capture-BBxyt5SN.js +2 -0
- package/dist/assets/catalog-Db9GWM6N.js +1 -0
- package/dist/assets/{cfo.generated-Bjl5OGay.js → cfo.generated-j5CXp1Zz.js} +1 -1
- package/dist/assets/chapters-Dqm4iLDa.js +1 -0
- package/dist/assets/charts2-CaKGzkgJ.js +1 -0
- package/dist/assets/checkLogModel-BMtruriG.js +1 -0
- package/dist/assets/{citation-BcvmjKS8.js → citation-BsSvaaer.js} +1 -1
- package/dist/assets/{codeContext-0UMRSGRr.js → codeContext-goNoLAIr.js} +1 -1
- package/dist/assets/compiler-runtime-qQQXpJgv.js +1 -0
- package/dist/assets/{compose-BJ9EfcQS.js → compose-D-OsDiU9.js} +1 -1
- package/dist/assets/confirmAdd-BDNV8RqF.js +1 -0
- package/dist/assets/{contentVault-DzTYWcbD.js → contentVault-xfUwSJ3i.js} +1 -1
- package/dist/assets/coreIcons-BzqW7Qiz.js +1 -0
- package/dist/assets/cpp-CJIxL8VH.js +1 -0
- package/dist/assets/cpp-Cts1PyIS.js +1 -0
- package/dist/assets/dash-composer-DeNWVwpU.css +1 -0
- package/dist/assets/dashboardEvents-BDKxoLch.js +2 -0
- package/dist/assets/dashboards-Dy4MTJQ5.css +1 -0
- package/dist/assets/dataPending-lZUzUEo6.js +1 -0
- package/dist/assets/{diagrams-CaSfjT4I.js → diagrams-1DJMD4j-.js} +1 -1
- package/dist/assets/dist-DRo0JOkC.js +14 -0
- package/dist/assets/{dist-DIKAXwpM.js → dist-kNHRtoqd.js} +21 -21
- package/dist/assets/empty-BO1NC9qY.js +1 -0
- package/dist/assets/{explode-WBykfhqW.js → explode-fgkkWz8o.js} +1 -1
- package/dist/assets/facts-BUGuVUIc.js +1 -0
- package/dist/assets/fit-CMu7prjb.js +1 -0
- package/dist/assets/fitText-DQ2omSN0.js +1 -0
- package/dist/assets/format-q0LwBjID.js +1 -0
- package/dist/assets/{format-hc2QOoIu.js → format-rPI6ZwwH.js} +1 -1
- package/dist/assets/friendlyAsk-BBdRZIar.js +1 -0
- package/dist/assets/{generate-8odaTyr4.js → generate-CemSUZ8A.js} +3 -3
- package/dist/assets/generateBeats-aqKTlSN2.js +1 -0
- package/dist/assets/{generateCourse-Cj_-vDWu.js → generateCourse-BIBbw-ZJ.js} +1 -1
- package/dist/assets/generateLive-BsXn4Y_d.js +51 -0
- package/dist/assets/githubBrowser-BDiuD9dz.js +1 -0
- package/dist/assets/githubToken-Bwa7V9YT.js +1 -0
- package/dist/assets/history-D2EH2X6D.js +1 -0
- package/dist/assets/homeTarget-CsO8nY7z.js +1 -0
- package/dist/assets/http-Lar_UMKb.js +2 -0
- package/dist/assets/{icons-CHVz6kv_.js → icons-gLFQTv74.js} +1 -1
- package/dist/assets/incident-D3bmMmES.js +10 -0
- package/dist/assets/index-B69GkoTc.css +1 -0
- package/dist/assets/index-D1SPhBGd.js +22 -0
- package/dist/assets/index.es-yrxxdux0.js +5 -0
- package/dist/assets/jspdf.es.min-Bbaa2Qun.js +79 -0
- package/dist/assets/jsx-runtime-DeHZSEgm.js +1 -0
- package/dist/assets/katex-CiJ_n4H9.js +257 -0
- package/dist/assets/keyVault-Aw5Y2PjT.js +1 -0
- package/dist/assets/kokoro-C6P0LV4L.js +1 -0
- package/dist/assets/layout-CEoNLr-w.js +1 -0
- package/dist/assets/{layout-CkO0Psde.js → layout-CHn3XWJd.js} +1 -1
- package/dist/assets/learn-CXstDWJf.js +1 -0
- package/dist/assets/ledger-Cv0LBflx.js +1 -0
- package/dist/assets/lib-B7OE1ZQQ.js +1 -0
- package/dist/assets/liveSchema-B8OByCPH.js +99 -0
- package/dist/assets/maplibre-gl-CrDadnl3.js +801 -0
- package/dist/assets/maplibre-gl-worker-DZ7nj4vd.js +11 -0
- package/dist/assets/{mastery-D7xYf5D7.js → mastery-CUfDeuqO.js} +2 -2
- package/dist/assets/{media-CsrUl279.js → media-BvwzACIX.js} +1 -1
- package/dist/assets/{model-BE0UHu1w.js → model-BsQ5ixwB.js} +1 -1
- package/dist/assets/motion-BY_Egaxm.js +1 -0
- package/dist/assets/motion-DxHSlPN6.js +1 -0
- package/dist/assets/{neighborhoods-DFqKm9Xi.js → neighborhoods-D7QjURnE.js} +1 -1
- package/dist/assets/notes-U6gRKVHk.js +1 -0
- package/dist/assets/officeDoc-Dn8jw1fG.js +3 -0
- package/dist/assets/openchemlib-Cz_MN0FG.js +23 -0
- package/dist/assets/{owners-FXDGInVq.js → owners-HRBX7JN_.js} +1 -1
- package/dist/assets/parseDiff-D8uBQ9mQ.js +2 -0
- package/dist/assets/pdf-CUAVYiYW.js +54 -0
- package/dist/assets/pdf.worker.min-CHFwMXne.mjs +29 -0
- package/dist/assets/pen-D9UT-ioQ.js +24 -0
- package/dist/assets/{perfProbe-Xs39DqMh.js → perfProbe-BxyiHsI2.js} +1 -1
- package/dist/assets/{php-CYrBA5iX.js → php-CQT4wx5i.js} +1 -1
- package/dist/assets/pin-D-4Zjiik.css +1 -0
- package/dist/assets/pin-qQrH_dBi.js +1 -0
- package/dist/assets/planTracker-CjnznF7v.js +1 -0
- package/dist/assets/portal-t0bsUEg2.js +1 -0
- package/dist/assets/{pptxgen.es-CveAizg8.js → pptxgen.es-zw8PIOkD.js} +11 -11
- package/dist/assets/predictions-CkVKHq-5.js +1 -0
- package/dist/assets/preload-helper-CiWYd9n-.js +1 -0
- package/dist/assets/preloadableLazy-MIX1ApBW.js +1 -0
- package/dist/assets/{prewarm-K5WcvrNh.js → prewarm-CAZcnT4x.js} +1 -1
- package/dist/assets/prism.generated-BQkO5r6r.js +41 -0
- package/dist/assets/{prismExtract.worker-Cws9K1NG.js → prismExtract.worker-OxGWMXXN.js} +1 -1
- package/dist/assets/prismGround.worker-C9hyveb3.js +1 -0
- package/dist/assets/prismLayout.worker-CJa4orCT.js +1 -0
- package/dist/assets/providers-DdJWf_PE.js +1 -0
- package/dist/assets/purify.es-JEAr64Sr.js +3 -0
- package/dist/assets/{queue-J4h7E3uc.js → queue-Adae4IzW.js} +1 -1
- package/dist/assets/quietHours-_i5Uqz7z.js +1 -0
- package/dist/assets/quizResult-DB8yeqDr.js +1 -0
- package/dist/assets/react-BZJXY1be.js +1 -0
- package/dist/assets/ready-4lPJes2S.js +1 -0
- package/dist/assets/ready-LSwk88I-.js +1 -0
- package/dist/assets/{reference-sJzyMiL4.js → reference-BjexflMu.js} +1 -1
- package/dist/assets/registry-4mMEt1Xy.css +1 -0
- package/dist/assets/registry-7poQfBaM.js +4 -0
- package/dist/assets/registry-9QjeHgKs.js +1 -0
- package/dist/assets/registry-B0GIHERt.js +1 -0
- package/dist/assets/{registry-DpaaVbmL.css → registry-B1KQ1VPZ.css} +1 -1
- package/dist/assets/registry-B5S3brjM.css +1 -0
- package/dist/assets/registry-BFbfXK-W.js +1 -0
- package/dist/assets/registry-BSX3aFUw.js +1 -0
- package/dist/assets/registry-Bv1f5UU4.js +2 -0
- package/dist/assets/registry-BzH7mEl7.js +1 -0
- package/dist/assets/registry-C28gYnVq.js +1 -0
- package/dist/assets/registry-COkvZrNA.css +1 -0
- package/dist/assets/registry-CPImC7mO.js +1 -0
- package/dist/assets/registry-CPiwQhAm.js +1 -0
- package/dist/assets/registry-CcOO8UZr.js +1 -0
- package/dist/assets/registry-Ci65uThi.js +1 -0
- package/dist/assets/registry-CkScyZGa.js +1 -0
- package/dist/assets/registry-CtvKPLd7.js +1 -0
- package/dist/assets/{registry-upbw6pyj.css → registry-CuVk7MAI.css} +1 -1
- package/dist/assets/{registry-D5oMqeSa.js → registry-CueC1vq1.js} +1 -1
- package/dist/assets/registry-CvylL2BN.css +1 -0
- package/dist/assets/registry-CxUmdwDk.js +1 -0
- package/dist/assets/registry-D8O0apUT.js +2 -0
- package/dist/assets/registry-DLyrLfe-2.js +1 -0
- package/dist/assets/registry-DO4hGO5e.js +1 -0
- package/dist/assets/{registry-Xzq_Rpmm.css → registry-DScSjt8p.css} +1 -1
- package/dist/assets/registry-Daypk4uR.js +1 -0
- package/dist/assets/registry-Dd1lcXrO.js +2 -0
- package/dist/assets/{registry-DWcNVyI2.css → registry-DpMI23iE.css} +1 -1
- package/dist/assets/registry-NbNNn_ra.js +1 -0
- package/dist/assets/registry-Vp8VuMV0.js +9 -0
- package/dist/assets/registry-WHd1PwU3.js +1 -0
- package/dist/assets/registry-Xl8mAnKq.js +1 -0
- package/dist/assets/registry-tkd3UhWn.css +1 -0
- package/dist/assets/{registry-ei6fIgBT.css → registry-twSIyxJQ.css} +1 -1
- package/dist/assets/registry-types-D3q_LrlV.js +1 -0
- package/dist/assets/registry-w4R6c89s.js +48 -0
- package/dist/assets/{relate-CEND9Qlk.js → relate-DHPSGB7a.js} +1 -1
- package/dist/assets/replay-zh4xVk5G.js +1 -0
- package/dist/assets/rolldown-runtime-DkW27tQK.js +1 -0
- package/dist/assets/route-D4kd-D3B.js +1 -0
- package/dist/assets/{ruby-BhrksQMt.js → ruby-D_UtGFHI.js} +1 -1
- package/dist/assets/{run-Dc2ZJz6n.js → run-BdDyp6Xv.js} +2 -2
- package/dist/assets/run-ByCJN-29.js +23 -0
- package/dist/assets/run-DiPX83_J.js +21 -0
- package/dist/assets/safeImageUrl-BINWXOTz.js +1 -0
- package/dist/assets/screen-DFWKge3-.js +1 -0
- package/dist/assets/search-ZN7v_P5B.js +1 -0
- package/dist/assets/shapes-DI0LQC8n.js +1 -0
- package/dist/assets/shard005-Dp5TM33O.js +1 -0
- package/dist/assets/shard006-DpJfkjmW.js +1 -0
- package/dist/assets/shard007-CIQN8OfZ.js +1 -0
- package/dist/assets/shard008-BFiyL7r6.js +1 -0
- package/dist/assets/shard009-0s30Tkk9.js +1 -0
- package/dist/assets/shard010-DPhgF5ck.js +1 -0
- package/dist/assets/shard011-C2jVsC25.js +1 -0
- package/dist/assets/shard012-DYtN5yzJ.js +1 -0
- package/dist/assets/shard013-1D6_Qy9C.js +1 -0
- package/dist/assets/shard014-D8s7GHnm.js +1 -0
- package/dist/assets/shard015-16W6KgnL.js +1 -0
- package/dist/assets/shard016-B4PpWmro.js +1 -0
- package/dist/assets/shard017-BO1sA5b3.js +1 -0
- package/dist/assets/shard018-D4gn8z25.js +1 -0
- package/dist/assets/shard019-vSbfaqRA.js +1 -0
- package/dist/assets/shard020-DwbHP8bp.js +1 -0
- package/dist/assets/{shard021-2FE-tze4.js → shard021-BhEyVVAL.js} +1 -1
- package/dist/assets/shard022-BdT7zFy3.js +1 -0
- package/dist/assets/shard023-Dga_NQcm.js +1 -0
- package/dist/assets/shard024-CXHofcxc.js +1 -0
- package/dist/assets/shard025-a4CQKYw1.js +1 -0
- package/dist/assets/shard026-0rhLKfDL.js +1 -0
- package/dist/assets/shard027-C9GMfOtn.js +1 -0
- package/dist/assets/shard028-D9__rPnw.js +1 -0
- package/dist/assets/shard029-BSdYKGgG.js +1 -0
- package/dist/assets/shard030-DceOU7pS.js +1 -0
- package/dist/assets/shard031-C6_p076r.js +1 -0
- package/dist/assets/shard032-Cah16sJi.js +1 -0
- package/dist/assets/shard033-D-iobGzc.js +1 -0
- package/dist/assets/shard034-DIyfCKl8.js +1 -0
- package/dist/assets/shard035-BHWs8v0a.js +1 -0
- package/dist/assets/shard036-AhOPHqzq.js +1 -0
- package/dist/assets/shard037-CuAGDOOu.js +1 -0
- package/dist/assets/shard038-CYdtnPjK.js +1 -0
- package/dist/assets/shard039-DgvXKOyi.js +1 -0
- package/dist/assets/shard040-DO012waT.js +1 -0
- package/dist/assets/shard041-BeUicA1R.js +1 -0
- package/dist/assets/shard042-D2zbq14A.js +1 -0
- package/dist/assets/shard043-BKoTEB-H.js +1 -0
- package/dist/assets/shard044-bmYKfH3A.js +1 -0
- package/dist/assets/shard045-i_R1olD9.js +1 -0
- package/dist/assets/shard046-CFk2L0GQ.js +1 -0
- package/dist/assets/shard047-pjHCnVaT.js +1 -0
- package/dist/assets/shard048-Cc7tGz6R.js +1 -0
- package/dist/assets/shard049-C9eoD-6Z.js +1 -0
- package/dist/assets/shard050-V3c_ZDrB.js +1 -0
- package/dist/assets/shard051-D1ISwZzf.js +1 -0
- package/dist/assets/shard052-Dy09xx3S.js +1 -0
- package/dist/assets/shard053-Bi4Z4cwW.js +1 -0
- package/dist/assets/shard054-BoC-LNYu.js +1 -0
- package/dist/assets/shard055-D2NJeMN1.js +1 -0
- package/dist/assets/shard056-sSFMbxXN.js +1 -0
- package/dist/assets/shard057-DhNK5nyZ.js +1 -0
- package/dist/assets/shard058-Du4SjxeD.js +1 -0
- package/dist/assets/shard059-fGiLnJzG.js +1 -0
- package/dist/assets/shard060-l84MDY2t.js +1 -0
- package/dist/assets/shard061-B3aIa7Aa.js +1 -0
- package/dist/assets/{shard061-C9A8iNiq.js → shard062-BJ8OX6CJ.js} +1 -1
- package/dist/assets/shard063-CMo-7Qit.js +1 -0
- package/dist/assets/shard064-B0EEOnfG.js +1 -0
- package/dist/assets/shard065-D-StlUHp.js +1 -0
- package/dist/assets/share-kW3pZ027.js +1 -0
- package/dist/assets/shikiHighlight-BwX78OP8.js +153 -0
- package/dist/assets/speed-K5_Ebj-8.js +1 -0
- package/dist/assets/spokenText-D3iS8fuI.js +1 -0
- package/dist/assets/spreadLabels-CQ8hufvK.js +1 -0
- package/dist/assets/src-DG1n-LFe.js +1 -0
- package/dist/assets/store-BWLbFXiY.js +1 -0
- package/dist/assets/{store-BMRQiV1z.js → store-BfHRbVKz.js} +1 -1
- package/dist/assets/store-D-f8ZuaK.js +1 -0
- package/dist/assets/store-D2IJF4SA.js +0 -0
- package/dist/assets/store-DpObYU1u.js +1 -0
- package/dist/assets/store-DpmbKVs7.js +1 -0
- package/dist/assets/store-gohr8YVT.js +1 -0
- package/dist/assets/{streamParse-DRgMHWye.js → streamParse-B-Gjwa9T.js} +1 -1
- package/dist/assets/svgLabel-BQMDdcT2.js +1 -0
- package/dist/assets/swift-CyEgAFGc.js +1 -0
- package/dist/assets/theme-f0mztBcq.js +1 -0
- package/dist/assets/threads-Cu2t3070.js +1 -0
- package/dist/assets/tiles-CBiVVjtT.css +1 -0
- package/dist/assets/tiles-pdNi6MGe.js +1 -0
- package/dist/assets/types-CaO6xOn5.js +1 -0
- package/dist/assets/useDashboardLoop-DuckIfJX.js +5 -0
- package/dist/assets/useDashboards-BMcuCWoz.js +1 -0
- package/dist/assets/{useFocusTrap-DbfG6zbM.js → useFocusTrap-DBtkeyRy.js} +1 -1
- package/dist/assets/useInView-CXTOAEV3.js +1 -0
- package/dist/assets/useLedger-1WVXef68.js +1 -0
- package/dist/assets/useLiveConfig-9eJ7EM3B.js +1 -0
- package/dist/assets/useSpatialCanvas-CtVsYmp8.js +1 -0
- package/dist/assets/useSpotlightWalk-DxlxBezO.js +1 -0
- package/dist/assets/useSrsCards-C27o39fF.js +1 -0
- package/dist/assets/useStudy-B5874Bcg.js +1 -0
- package/dist/assets/{useTimeout-BRYvu2jQ.js → useTimeout-Cm4yzted.js} +1 -1
- package/dist/assets/{useValidatedImage-D2fhA198.js → useValidatedImage-BQi2c66o.js} +1 -1
- package/dist/assets/useZoomGesture-CN0p0lHL.js +1 -0
- package/dist/assets/verbatim-DBTj9sPD.js +1 -0
- package/dist/assets/worker-D7eK-Ya8.js +2 -0
- package/dist/demo-assets/CREDITS.md +75 -24
- package/dist/demo-assets/pdf/cfd-primer.pdf +0 -0
- package/dist/demo-assets/video/azores-film.webm +0 -0
- package/dist/fonts/LICENSE.txt +32 -28
- package/dist/fonts/OFL-1.1.txt +81 -0
- package/dist/fonts/PROVENANCE.md +38 -0
- package/dist/index.html +14 -8
- package/dist/legal/DISCLAIMER.md +4 -1
- package/dist/legal/PRIVACY.md +14 -8
- package/dist/legal/TERMS.md +11 -1
- package/dist/legal/THIRD-PARTY.txt +25248 -621
- package/dist/pdfjs/LICENSE_JBIG2 +196 -0
- package/dist/pdfjs/LICENSE_OPENJPEG +39 -0
- package/dist/pdfjs/LICENSE_PDFJS_JBIG2 +13 -0
- package/dist/pdfjs/LICENSE_PDFJS_OPENJPEG +22 -0
- package/dist/pdfjs/LICENSE_PDFJS_QCMS +22 -0
- package/dist/pdfjs/LICENSE_QCMS +21 -0
- package/dist/pdfjs/jbig2.wasm +0 -0
- package/dist/pdfjs/openjpeg.wasm +0 -0
- package/dist/pdfjs/qcms_bg.wasm +0 -0
- package/docker-compose.yml +40 -7
- package/docs/media/answer-ink.jpg +0 -0
- package/docs/media/canvas-view.jpg +0 -0
- package/docs/media/deck-export.jpg +0 -0
- package/docs/media/deep-zoom.jpg +0 -0
- package/docs/media/doc-export.jpg +0 -0
- package/docs/media/doc-prism.jpg +0 -0
- package/docs/media/repo-course.jpg +0 -0
- package/docs/media/think-map.jpg +0 -0
- package/docs/media/trip-plan.jpg +0 -0
- package/docs/media/voice-scrub.jpg +0 -0
- package/package.json +71 -60
- package/voice/start-whisper.sh +28 -0
- package/voice/whisper.Dockerfile +44 -0
- package/dist/assets/AppCommandPalette-B3E1gTd4.js +0 -1
- package/dist/assets/AtlasView-B8b67dk0.js +0 -1
- package/dist/assets/BlockEmpty-DQkdduUE.js +0 -1
- package/dist/assets/BriefingPlayer-CRKTlKa3.js +0 -1
- package/dist/assets/CanvasSkeleton-cQ6KF-6z.js +0 -2
- package/dist/assets/CardEditor-DzJXb0G7.js +0 -1
- package/dist/assets/CheckLogRail-C6nouD1Y.js +0 -1
- package/dist/assets/CheckLogRail-F4AlgAcc.css +0 -1
- package/dist/assets/CommandPalette-CSvgbXxg.js +0 -1
- package/dist/assets/CourseLessonReader-1KDKwxIj.js +0 -2
- package/dist/assets/CourseRail-BijCpApU.js +0 -1
- package/dist/assets/CoursesApp-BWkdYL07.js +0 -2
- package/dist/assets/CrossExamPanel-Cn7b5y7B.js +0 -1
- package/dist/assets/DashPresent-B025i7iJ.js +0 -1
- package/dist/assets/DashboardDetail-CZLnxgp0.js +0 -2
- package/dist/assets/DashboardLoopRuntime-7MpMUcMg.js +0 -1
- package/dist/assets/DashboardOverview-COyleu7v.js +0 -1
- package/dist/assets/DashboardSettings-DUfUqbsp.js +0 -1
- package/dist/assets/DashboardsApp-6xMz2qCP.js +0 -2
- package/dist/assets/DelegatePanel-D4OrMa2D.js +0 -33
- package/dist/assets/DemoGallery-Bt92vKqc.js +0 -1
- package/dist/assets/DropSelect-Q310fTbf.js +0 -1
- package/dist/assets/ExportModal-D0zXlC8w.js +0 -2
- package/dist/assets/ExtractionPreview-0SZYynDs.js +0 -18
- package/dist/assets/FeatureUseNotice-CoK5HkbR.js +0 -1
- package/dist/assets/FlagshipCTA-D845jkdt.js +0 -1
- package/dist/assets/FlagshipCommandPalette-DHMnyG7j.js +0 -1
- package/dist/assets/FlagshipShowcase-BuR3PZvU.js +0 -1
- package/dist/assets/FlashcardsApp-BzWb4cRP.js +0 -1
- package/dist/assets/ForecastPanel-lTnux0EB.js +0 -1
- package/dist/assets/GalleryApp-D0NGZ1_t.js +0 -1
- package/dist/assets/LegalApp-DXDomKFv.js +0 -1
- package/dist/assets/LegalPageShell-BG5UUk-9.js +0 -1
- package/dist/assets/LegalPageShell-C_HottbD.css +0 -1
- package/dist/assets/LeverPanel-CvYnTLjh.js +0 -1
- package/dist/assets/Library-Cl1gE9Qg.js +0 -1
- package/dist/assets/LibraryOverlay-CX4cJLqD.js +0 -1
- package/dist/assets/LiveApp-CDckMWYX.js +0 -61
- package/dist/assets/LiveApp-Dj_6EQuL.css +0 -1
- package/dist/assets/LiveSettings-DgfIXanM.js +0 -6
- package/dist/assets/MindMapViewerDrawer-ClU9wgSH.js +0 -1
- package/dist/assets/MindShape-DjHtMW_5.css +0 -1
- package/dist/assets/MindShape-yF19n9qq.js +0 -1
- package/dist/assets/PinToDashboard-CpIDAcIU.js +0 -1
- package/dist/assets/PlanReview-CPcqOxjp.js +0 -1
- package/dist/assets/Presence-CHGZ1JRp.js +0 -1
- package/dist/assets/PresentationDeck-CrtiWjiM.js +0 -1
- package/dist/assets/PrismApp-D7RbekoX.js +0 -2
- package/dist/assets/PrismAskController-D6_7Epdb.js +0 -37
- package/dist/assets/PrismBriefingPlayer-Dq5_KRU3.js +0 -2
- package/dist/assets/PrismOverlay-CduGpA8D.js +0 -131
- package/dist/assets/Quiz-CUwtekfu.js +0 -1
- package/dist/assets/Recap-BPg2xEPo.js +0 -1
- package/dist/assets/ReelJelly-LWeMsFpj.js +0 -1
- package/dist/assets/ReplayCard-C3dGQfxG.js +0 -2
- package/dist/assets/ReplayOverlay-C9W603B5.js +0 -1
- package/dist/assets/RewindOverlay-BIWmxQlx.js +0 -1
- package/dist/assets/RippleApp-C9-KFvkn.js +0 -2
- package/dist/assets/RippleAskController-DEKz-6Vn.js +0 -34
- package/dist/assets/RippleOverlay-CfXvnUHE.js +0 -6
- package/dist/assets/SeeDontRead-DrG1qBxJ.js +0 -1
- package/dist/assets/ShareModal-eJ6sdMpf.js +0 -32
- package/dist/assets/ShipCascade-BP8qL0yM.js +0 -1
- package/dist/assets/ShipCourse-BoqW58VU.js +0 -1
- package/dist/assets/ShipHotspots-_9XPhZg2.js +0 -1
- package/dist/assets/ShipMigration-BdkaiJ9D.js +0 -1
- package/dist/assets/ShipOnboarding-CblWatXR.js +0 -1
- package/dist/assets/ShipRead-BBn7xkOF.js +0 -1
- package/dist/assets/ShipRollout-i5BY3YnP.js +0 -1
- package/dist/assets/ShipSuggestions-liytLgC-.js +0 -1
- package/dist/assets/ShipWorkspace-C3VQwGn1.js +0 -2
- package/dist/assets/SignatureLoop-Ba7plTb5.js +0 -1
- package/dist/assets/SrsReview-BoaYb6XN.js +0 -1
- package/dist/assets/SrsReview-DmGdGxT0.css +0 -1
- package/dist/assets/SynthesisApp-Ch0tWRBS.js +0 -2
- package/dist/assets/SynthesisOverlay-DMZndCzV.js +0 -66
- package/dist/assets/TopicCanvas-DX0Z1ZHv.js +0 -2
- package/dist/assets/TourPrism-6fWPMU4Z.js +0 -1
- package/dist/assets/TrackerTile-BboQpBGy.js +0 -2
- package/dist/assets/TwoSurfaces-Cabk1rES.js +0 -1
- package/dist/assets/UnderstoodPanel-B6jfiKx1.js +0 -1
- package/dist/assets/WhyMachineOverlay-BRNibJSf.js +0 -1
- package/dist/assets/WowFeatures-C7f4qzIf.js +0 -1
- package/dist/assets/ZoomDeck-BtlVyhwv.js +0 -1
- package/dist/assets/__vite-browser-external-BufR4LQa.js +0 -1
- package/dist/assets/alternateFinishes-CVUX4x0C.js +0 -494
- package/dist/assets/annotationAuto-BjWqgseH.js +0 -1
- package/dist/assets/annotationReel-B5A2RZkx.js +0 -1
- package/dist/assets/annotations-D2K9A5GB.js +0 -1
- package/dist/assets/backup-d46KwktS.js +0 -1
- package/dist/assets/blockLabel-DAqaHKy3.js +0 -1
- package/dist/assets/cache-BumECILO.js +0 -1
- package/dist/assets/canvas-BuMP6u6i.js +0 -1
- package/dist/assets/catalog-Bv0dWU_C.js +0 -1
- package/dist/assets/chapters-Cbe53c3W.js +0 -1
- package/dist/assets/charts2-tyUiQPff.js +0 -1
- package/dist/assets/chunk-BVpWp9h4.js +0 -1
- package/dist/assets/confirmAdd-CWWtX1VN.js +0 -1
- package/dist/assets/cpp-BGdv8dzs.js +0 -1
- package/dist/assets/cpp-CNAAXZl-.js +0 -1
- package/dist/assets/dashboardEvents-Be4sftHN.js +0 -2
- package/dist/assets/dashboards-rcWxdoXI.css +0 -1
- package/dist/assets/dist-xRGLOZwv.js +0 -14
- package/dist/assets/facts-BBTt3ImG.js +0 -1
- package/dist/assets/fit-CuHWhwsj.js +0 -1
- package/dist/assets/fitText-CDFmCQzl.js +0 -1
- package/dist/assets/format-DlZTyeMy.js +0 -1
- package/dist/assets/generateBeats-b64CL54v.js +0 -1
- package/dist/assets/generateLive-CMbGT3eM.js +0 -52
- package/dist/assets/githubBrowser-DywfDeYx.js +0 -1
- package/dist/assets/githubToken-DtcLYqwm.js +0 -11
- package/dist/assets/homeTarget-BcZYH3DY.js +0 -1
- package/dist/assets/http-CJCtjYpA.js +0 -2
- package/dist/assets/index-CepQEz75.css +0 -1
- package/dist/assets/index-Dbr1j8Fe.js +0 -22
- package/dist/assets/index.es-CRLiWwiA.js +0 -5
- package/dist/assets/jspdf.es.min-ydC1TxUW.js +0 -79
- package/dist/assets/jsx-runtime-DaSxXjOY.js +0 -1
- package/dist/assets/katex-BMCG0xok.js +0 -257
- package/dist/assets/keyVault-DEsNh9FR.js +0 -1
- package/dist/assets/kokoro-DsmNzulR.js +0 -1
- package/dist/assets/layout-BFQOzXtG.js +0 -1
- package/dist/assets/leaflet-src-C_xhOQY7.js +0 -1
- package/dist/assets/learn-DVfqN-nf.js +0 -1
- package/dist/assets/lib-B6qSkBPa.js +0 -1
- package/dist/assets/liveSchema-B1MGdSkK.js +0 -99
- package/dist/assets/motion-luJxBPnj.js +0 -1
- package/dist/assets/notes-3WQ6b0Mi.js +0 -1
- package/dist/assets/officeDoc-B6nEhNp4.js +0 -3
- package/dist/assets/openchemlib-nMLMmg26.js +0 -23
- package/dist/assets/pdf-RyoPCIGN.js +0 -11
- package/dist/assets/pdf.worker.min-yatZIOMy.mjs +0 -21
- package/dist/assets/pin-Bya3BL_a.css +0 -1
- package/dist/assets/pin-Cj-LMfpK.js +0 -1
- package/dist/assets/planTracker-7AMCQPNx.js +0 -1
- package/dist/assets/portal-zyqZwnb1.js +0 -1
- package/dist/assets/predictions-CYS7Vo39.js +0 -1
- package/dist/assets/prism.generated-BhbHDHR6.js +0 -41
- package/dist/assets/prismGround.worker-CIvKqxm2.js +0 -1
- package/dist/assets/prismLayout.worker-CZO2CY7B.js +0 -1
- package/dist/assets/providers-wzm7E8Pa.js +0 -1
- package/dist/assets/purify.es-adlwq8Pz.js +0 -3
- package/dist/assets/quietHours-BklvMqsV.js +0 -1
- package/dist/assets/react-BQSORdFI.js +0 -1
- package/dist/assets/registry-1h9idbfk.js +0 -2
- package/dist/assets/registry-2zthbrHC.js +0 -1
- package/dist/assets/registry-4O5l9cd5.js +0 -1
- package/dist/assets/registry-5a-E7vEN.css +0 -1
- package/dist/assets/registry-BRB85vr4.js +0 -2
- package/dist/assets/registry-BVHiKEwE.css +0 -1
- package/dist/assets/registry-BcZXBr3y.css +0 -1
- package/dist/assets/registry-BdMZ_4cm.js +0 -2
- package/dist/assets/registry-Bnp_yh8G.js +0 -4
- package/dist/assets/registry-C1IrZBk8.js +0 -1
- package/dist/assets/registry-C5DK98Hl.js +0 -1
- package/dist/assets/registry-CK0-re_Q.js +0 -49
- package/dist/assets/registry-COrl_Heq.js +0 -1
- package/dist/assets/registry-CQUQlrSx.js +0 -1
- package/dist/assets/registry-CXa3qXl3.js +0 -1
- package/dist/assets/registry-C_baBbqq.js +0 -5
- package/dist/assets/registry-CjY5POtx.js +0 -1
- package/dist/assets/registry-CoBAqOlY.js +0 -1
- package/dist/assets/registry-DJj-o3MQ.js +0 -1
- package/dist/assets/registry-DVzLacl_.css +0 -1
- package/dist/assets/registry-DfCCnIfu.js +0 -1
- package/dist/assets/registry-DfgFkD3J.js +0 -1
- package/dist/assets/registry-Dhlx1mF4.js +0 -1
- package/dist/assets/registry-Dkc7hN5T.js +0 -1
- package/dist/assets/registry-DmQlNN3y.js +0 -1
- package/dist/assets/registry-DnEh7nbX.js +0 -1
- package/dist/assets/registry-VD94nLXO.js +0 -1
- package/dist/assets/registry-aIH-Im5Y.css +0 -1
- package/dist/assets/registry-mFD4P5dI.js +0 -1
- package/dist/assets/registry-sDzDmht4.js +0 -1
- package/dist/assets/registry-types-DMuK0vJ6.js +0 -1
- package/dist/assets/run-BYP2YlZT.js +0 -23
- package/dist/assets/run-DSVvshaB.js +0 -21
- package/dist/assets/safeImageUrl-CUkucDUu.js +0 -1
- package/dist/assets/screen-DLR7p_yP.js +0 -1
- package/dist/assets/search-Be63DJkp.js +0 -1
- package/dist/assets/shapes-Cw7tCHIp.js +0 -1
- package/dist/assets/shard005-DLVkh9IH.js +0 -1
- package/dist/assets/shard006-B6efKHov.js +0 -1
- package/dist/assets/shard007-AFdZLe38.js +0 -1
- package/dist/assets/shard008-LbSBzwRx.js +0 -1
- package/dist/assets/shard009-D_6-SUDb.js +0 -1
- package/dist/assets/shard010-DbOj-uZW.js +0 -1
- package/dist/assets/shard011-BYSz7EEW.js +0 -1
- package/dist/assets/shard012-B5Ypj7OV.js +0 -1
- package/dist/assets/shard013-BtsliNIe.js +0 -1
- package/dist/assets/shard014-15sjmk68.js +0 -1
- package/dist/assets/shard015-nnXrqru_.js +0 -1
- package/dist/assets/shard016-BayXFE13.js +0 -1
- package/dist/assets/shard017-Cy4cGexs.js +0 -1
- package/dist/assets/shard018-aO-BYJ8H.js +0 -1
- package/dist/assets/shard019-gxaTeA3I.js +0 -1
- package/dist/assets/shard020-BibJdMI0.js +0 -1
- package/dist/assets/shard022-IXiyG-JK.js +0 -1
- package/dist/assets/shard023-314F6NJS.js +0 -1
- package/dist/assets/shard024-cN5rpQ_X.js +0 -1
- package/dist/assets/shard025-KKTaXOGE.js +0 -1
- package/dist/assets/shard026-C2Dkd1t6.js +0 -1
- package/dist/assets/shard027-Xy-8x9As.js +0 -1
- package/dist/assets/shard028-Bul-klUj.js +0 -1
- package/dist/assets/shard029-BbRSUcUZ.js +0 -1
- package/dist/assets/shard030-GYllsFVC.js +0 -1
- package/dist/assets/shard031-DMigeiyn.js +0 -1
- package/dist/assets/shard032-CcvmzK0l.js +0 -1
- package/dist/assets/shard033-11AU702M.js +0 -1
- package/dist/assets/shard034-Bx3urxjM.js +0 -1
- package/dist/assets/shard035-DBdEeyCt.js +0 -1
- package/dist/assets/shard036-vYgoRBqS.js +0 -1
- package/dist/assets/shard037-DP4MMw91.js +0 -1
- package/dist/assets/shard038-ffxsv7d6.js +0 -1
- package/dist/assets/shard039-C1JHHNp9.js +0 -1
- package/dist/assets/shard040-JbVvCSO_.js +0 -1
- package/dist/assets/shard041-5L_eFwGx.js +0 -1
- package/dist/assets/shard042-C9nsGL79.js +0 -1
- package/dist/assets/shard043-Dx_9HSKI.js +0 -1
- package/dist/assets/shard044-B3QQNC4A.js +0 -1
- package/dist/assets/shard045-B7z0WHO6.js +0 -1
- package/dist/assets/shard046-D1yDablJ.js +0 -1
- package/dist/assets/shard047-DJi3AgeT.js +0 -1
- package/dist/assets/shard048-D_2ipfUr.js +0 -1
- package/dist/assets/shard049-1aGgWZdd.js +0 -1
- package/dist/assets/shard050-Bjwa0Og4.js +0 -1
- package/dist/assets/shard051-Cx_GAk3v.js +0 -1
- package/dist/assets/shard052-LaeOD3V5.js +0 -1
- package/dist/assets/shard053-D-da7Foj.js +0 -1
- package/dist/assets/shard054-CM8eSRQk.js +0 -1
- package/dist/assets/shard055-QRpDl4Vs.js +0 -1
- package/dist/assets/shard056-DkY7CQm3.js +0 -1
- package/dist/assets/shard057-BVCgf7o0.js +0 -1
- package/dist/assets/shard058-93aGtdrX.js +0 -1
- package/dist/assets/shard059-rJE9X1_I.js +0 -1
- package/dist/assets/shard060-Lu_hfl1r.js +0 -1
- package/dist/assets/shard062-BBIpEYZO.js +0 -1
- package/dist/assets/shard063-C_uen3Ub.js +0 -1
- package/dist/assets/shard064-DAHUsHST.js +0 -1
- package/dist/assets/share-QHGHNDhQ.js +0 -1
- package/dist/assets/shikiHighlight-SCFIB43b.js +0 -153
- package/dist/assets/speed-DwPw9KSv.js +0 -1
- package/dist/assets/spokenText-D4zPX9JY.js +0 -1
- package/dist/assets/src-B-t8Mww-.js +0 -2
- package/dist/assets/store-DXmC_fP2.js +0 -0
- package/dist/assets/store-Dn23_Ymr.js +0 -1
- package/dist/assets/store-DoJn3lBF.js +0 -1
- package/dist/assets/store-DrBDvqXF.js +0 -1
- package/dist/assets/swift-DonLKvLd.js +0 -1
- package/dist/assets/threads-CkMgrSDP.js +0 -1
- package/dist/assets/useDashboardLoop-C8Mcbcto.js +0 -5
- package/dist/assets/useLiveConfig-BW1WkpTc.js +0 -1
- package/dist/assets/useSpatialCanvas-C5TNlpeK.js +0 -1
- package/dist/assets/useSpotlightWalk-dA3IdI-1.js +0 -1
- package/dist/assets/useSrsCards-C7Xni9C0.js +0 -1
- package/dist/assets/useStudy-DHRIx8p-.js +0 -1
- package/dist/assets/useZoomGesture-BsPXvLw2.js +0 -1
- package/dist/assets/verbatim-CBMzUDlf.js +0 -1
- package/dist/assets/worker-BbLKfGzm.js +0 -2
- package/dist/demo-assets/video/azores-film.mp4 +0 -0
- /package/dist/assets/{shard065-C2edvdvh.js → shard066-C2edvdvh.js} +0 -0
- /package/dist/assets/{shard066-DFcuVhZm.js → shard067-DFcuVhZm.js} +0 -0
- /package/dist/assets/{shard067-BN8DM8JZ.js → shard068-BN8DM8JZ.js} +0 -0
- /package/dist/assets/{shard068-i464K77p.js → shard069-i464K77p.js} +0 -0
- /package/dist/assets/{shard069-Dm9m2a5U.js → shard070-Dm9m2a5U.js} +0 -0
- /package/dist/assets/{shard070-BPVvR8GH.js → shard071-BPVvR8GH.js} +0 -0
- /package/dist/assets/{shard071-Bal_0d9L.js → shard072-Bal_0d9L.js} +0 -0
- /package/dist/assets/{shard072-CBQu62kt.js → shard073-CBQu62kt.js} +0 -0
- /package/dist/assets/{shard073-D5BRae0w.js → shard074-D5BRae0w.js} +0 -0
- /package/dist/assets/{shard074-DtFvcBnZ.js → shard075-DtFvcBnZ.js} +0 -0
- /package/dist/assets/{queue-DHeyJ32F.css → templates-DHeyJ32F.css} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{g as e}from"./attachments-BW-vki-E.js";import{a as t,i as n,m as r,n as i,o as a}from"./pen-D9UT-ioQ.js";import"./BriefingPlayer-C0D_2ILa.js";var o=new Map;function s(){let e=typeof navigator<`u`?navigator:void 0,t=e?.deviceMemory??8,n=e?.hardwareConcurrency??8;return t<=4||n<=4?900:1100}var c={"load-bearing":0,supporting:1,context:2};function l(e,t,n){if(t&&t.length){let r=new Map(e.claims.map(e=>[e.id,e])),i=a(t,e.threads,n),o=new Set,s=[];for(let e of i)for(let t of e.claimIds){if(o.has(t))continue;o.add(t);let e=r.get(t);e&&s.push(e)}for(let t of e.claims)o.has(t.id)||s.push(t);return s}return[...e.claims].sort((e,t)=>c[e.role]-c[t.role]||e.page-t.page)}async function u(a,c,u={}){let d=u.max??6,f=u.verdicts??o,p=l(a,u.placed,f).slice(0,d),m=s(),h=[];for(let a of p){let o=c[a.source];if(!o)continue;let s=i(a),l={isFigure:a.kind===`diagram`,seed:`${a.source}:${a.page}:${a.quote}`,color:t(a.kind),title:a.title,explanation:n(a),...s?{accent:s}:{}};if(e(o)){let e=await r(o,a.page,a.quote,m,a.kind===`diagram`).catch(()=>null);if(e)try{h.push({...l,pageImage:e.canvas.toDataURL(`image/jpeg`,.8),imgW:e.canvas.width,imgH:e.canvas.height,rects:e.rects.map(e=>({x:e.x,y:e.y,w:e.w,h:e.h})),figure:e.figure?{x:e.figure.x,y:e.figure.y,w:e.figure.w,h:e.figure.h}:void 0});continue}catch{}}h.push({...l,pageImage:``,imgW:0,imgH:0,rects:[]})}return h}export{u as autoAnnotationSteps};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{r as e}from"./rolldown-runtime-DkW27tQK.js";import{c as t,l as n,n as r,u as i}from"./registry-Dd1lcXrO.js";import{r as a}from"./spokenText-D3iS8fuI.js";var o=e({buildAnnotationReel:()=>d}),s=8,c=0;function l(e,t,o,s,l){let u=i(a(s.voiceover),n.voiceover);return{id:`a${c++}`,content:e,template:t,slots:r(e,o,l),voiceover:u,durationMs:Math.max(s.ms,u?Math.round(u.length/13*1e3)+500:0)}}function u(e){return e.replace(/\.[a-z0-9]+$/i,``).trim()||e}function d(e,n){let r=`Inside ${u(n.fileName)}`,i={topic:n.fileName,question:r},a=l(`title`,`title`,{question:r},{voiceover:r,ms:t.intro},i),o=e.slice(0,s).map(e=>{let n=e.explanation||e.title,r=e.title&&!n.includes(e.title)?`${e.title}. ${n}`:n;return l(`markup`,`documentMarkup`,{...e},{voiceover:r,ms:t.default},i)}),c=l(`outro`,`outro`,{wordmark:`Mavéa`,tagline:`See what it means.`},{voiceover:`Made with Mavéa.`,ms:t.outro},i),d=[a,...o,c];return{topic:n.fileName,question:r,palette:n.palette??`aurora`,vibe:n.vibe??`clean`,seed:0,slides:d,durationMs:d.reduce((e,t)=>e+t.durationMs,0)}}export{o as t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var e=new Set([`presence`,`insight`,`warning`,`danger`,`muted`]),t={presence:`var(--presence)`,insight:`var(--insight)`,warning:`var(--warning)`,danger:`var(--danger)`,muted:`var(--text-muted)`},n={refline:2,emphasize:3,label:3,summary:2,format:4,status:2,bar:2,note:2},r=e=>typeof e==`string`?e:``,i=e=>typeof e==`number`&&Number.isFinite(e)?e:null,a=t=>typeof t==`string`&&e.has(t)?t:void 0,o=e=>e.trim().toLowerCase();function s(e,t){switch(e.kind){case`block`:return!0;case`column`:return!!t.columnKeys&&t.columnKeys.includes(e.key);case`row`:return!!t.rowLabels&&t.rowLabels.some(t=>o(t)===o(e.match));case`cell`:return!!t.columnKeys&&t.columnKeys.includes(e.column)&&!!t.rowLabels&&t.rowLabels.some(t=>o(t)===o(e.row));case`item`:return!!t.itemLabels&&t.itemLabels.some(t=>o(t)===o(e.match));case`series`:return!!t.seriesNames&&t.seriesNames.some(t=>o(t)===o(e.name));case`value`:return!t.valueDomain||e.value>=t.valueDomain.min-Math.abs(t.valueDomain.min)-1&&e.value<=t.valueDomain.max+Math.abs(t.valueDomain.max)+1;case`range`:return!0;default:return!1}}function c(e){if(!e||typeof e!=`object`)return null;let t=e;switch(r(t.kind)){case`block`:return{kind:`block`};case`column`:return t.key?{kind:`column`,key:r(t.key)}:null;case`row`:return t.match?{kind:`row`,match:r(t.match)}:null;case`cell`:return t.row&&t.column?{kind:`cell`,row:r(t.row),column:r(t.column)}:null;case`item`:return t.match?{kind:`item`,match:r(t.match)}:null;case`series`:return t.name?{kind:`series`,name:r(t.name)}:null;case`value`:{let e=i(t.value);return e===null?null:{kind:`value`,value:e}}case`range`:{let e=i(t.from),n=i(t.to);return e===null||n===null?null:{kind:`range`,from:e,to:n}}default:return null}}function l(e,t){if(!e||typeof e!=`object`)return null;let n=e,i=r(n.op);switch(i){case`refline`:{let e=c(n.target);return!e||e.kind!==`value`&&e.kind!==`range`||!s(e,t)?null:{op:i,target:e,...n.label?{label:r(n.label)}:{},...a(n.tone)?{tone:a(n.tone)}:{}}}case`emphasize`:{let e=c(n.target);return!e||!s(e,t)?null:{op:i,target:e,...a(n.tone)?{tone:a(n.tone)}:{},...n.dimOthers===!0?{dimOthers:!0}:{}}}case`label`:case`note`:{let e=c(n.target),a=r(n.text);return!e||!a||!s(e,t)?null:{op:i,target:e,text:a}}case`summary`:{let e=r(n.stat);if(![`total`,`mean`,`max`,`min`,`count`].includes(e))return null;let a=Array.isArray(n.columns)?n.columns.map(r).filter(e=>!t.columnKeys||t.columnKeys.includes(e)):void 0;return{op:i,stat:e,...n.label?{label:r(n.label)}:{},...a&&a.length?{columns:a}:{}}}case`format`:{let e=c(n.target);if(!e||e.kind!==`column`&&e.kind!==`block`||!s(e,t))return null;let a=r(n.as);return[`currency`,`percent`,`unit`,`duration`].includes(a)?{op:i,target:e,as:a,...n.unit?{unit:r(n.unit)}:{}}:null}case`status`:{let e=c(n.target);if(!e||e.kind!==`column`||!s(e,t))return null;let o=Array.isArray(n.rules)?n.rules.map(e=>{let t=e,n=a(t.tone);return t.match&&n?{match:r(t.match),tone:n}:null}).filter(e=>e!==null):[];return o.length?{op:i,target:e,rules:o}:null}case`bar`:{let e=c(n.target);return!e||e.kind!==`column`||!s(e,t)?null:{op:i,target:e}}default:return null}}function u(e,t){if(!Array.isArray(e))return[];let r=[],i={};for(let a of e){if(r.length>=6)break;let e=l(a,t);if(!e)continue;let o=i[e.op]??0;o>=n[e.op]||(i[e.op]=o+1,r.push(e))}return r}export{u as n,t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var e=41943040,t=`application/vnd.openxmlformats-officedocument.wordprocessingml.document`,n=`application/vnd.openxmlformats-officedocument.presentationml.presentation`,r=`application/vnd.openxmlformats-officedocument.spreadsheetml.sheet`,i=new Set([t,n,r]),a=/\.(docx|pptx|xlsx)$/i,o=/\.(csv|tsv|txt|text|md|markdown|json|jsonl|ndjson|ya?ml|toml|xml|log|tab|js|ts|jsx|tsx|py|rb|go|rs|java|c|h|cpp|cs|sh|sql|css|html?)$/i,s=`image/*,application/pdf,text/*,application/json,${t},${n},${r},.docx,.pptx,.xlsx,.csv,.tsv,.txt,.md,.json,.yaml,.yml,.log`;function c(e){return e.mime.startsWith(`image/`)}function l(e){return e.mime===`application/pdf`}function u(e){return i.has(e.mime)||a.test(e.name)}function d(e){return c(e)||l(e)||u(e)?!1:e.mime.startsWith(`text/`)||e.mime===`application/json`||/\b(json|xml|yaml|csv|javascript|typescript)\b/.test(e.mime)||o.test(e.name)}function f(e){return e.mime===`application/vnd.openxmlformats-officedocument.wordprocessingml.document`||/\.docx$/i.test(e.name)}function p(e){return/\.(csv|tsv|tab)$/i.test(e.name)||e.mime===`text/csv`||e.mime===`text/tab-separated-values`}function m(e){return e.mime===`application/vnd.openxmlformats-officedocument.spreadsheetml.sheet`||/\.xlsx$/i.test(e.name)}function h(e){return e.mime===`application/vnd.openxmlformats-officedocument.presentationml.presentation`||/\.pptx$/i.test(e.name)}function g(e){return l(e)||u(e)||d(e)}function _(e){return m(e)||p(e)?`sheet`:c(e)?`image`:l(e)?`pdf`:d(e)?`text`:`other`}function v(t){let n=t.type,r=!n.startsWith(`image/`)&&n!==`application/pdf`&&!i.has(n)&&(n.startsWith(`text/`)||n===`application/json`||/\b(json|xml|yaml|csv|javascript|typescript)\b/.test(n)||o.test(t.name));if(!(n.startsWith(`image/`)||n===`application/pdf`||i.has(n)||a.test(t.name)||r))return`unsupported`;let s=n===`application/pdf`||i.has(n)||/\.(pdf|docx|pptx|xlsx)$/i.test(t.name)||r?e:10485760;return t.size>s?`too-large`:null}function y(e){let t=e.type,n=v(e);return n?Promise.resolve({ok:!1,error:n}):new Promise(n=>{let r=new FileReader;r.onload=()=>{let i=typeof r.result==`string`?r.result:``,a=i.indexOf(`,`),o=a>=0?i.slice(a+1):``;if(!o)return n({ok:!1,error:`unsupported`});n({ok:!0,attachment:{name:e.name,mime:t,data:o,size:e.size}})},r.onerror=()=>n({ok:!1,error:`unsupported`}),r.readAsDataURL(e)})}function b(e){let t=v(e);return t?Promise.resolve({ok:!1,error:t}):e.type.startsWith(`image/`)?y(e):Promise.resolve({ok:!0,attachment:{name:e.name,mime:e.type,data:``,size:e.size,file:e}})}function x(e){if(e.bytes)return new Uint8Array(e.bytes);if(e.file)return null;let t=atob(e.data),n=new Uint8Array(t.length);for(let e=0;e<t.length;e+=1)n[e]=t.charCodeAt(e);return n}async function S(e){return x(e)||new Uint8Array(await e.file.arrayBuffer())}async function C(e){if(e.data)return e;let t=await S(e),n=``,r=32768;for(let e=0;e<t.length;e+=r)n+=String.fromCharCode(...t.subarray(e,e+r));return{...e,data:btoa(n),file:void 0,bytes:void 0}}function w(e){let t=e.size/1048576,n=t>=.1?`${t.toFixed(1)} MB`:`${Math.max(1,Math.round(e.size/1024))} KB`;return`${e.name} · ${n}`}export{h as _,v as a,C as c,p as d,f,l as g,u as h,x as i,y as l,c as m,e as n,_ as o,g as p,S as r,w as s,s as t,b as u,d as v,m as y};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{n as e}from"./catalog-Db9GWM6N.js";import{t}from"./facts-BUGuVUIc.js";import{t as n}from"./blockTypes-CgNGx27_.js";import{validateLiveResponse as r}from"./liveSchema-B8OByCPH.js";import{d as i,g as a,k as o}from"./store-DpmbKVs7.js";import{i as s,t as c}from"./useLiveConfig-9eJ7EM3B.js";import{i as l,r as u,s as d}from"./store-gohr8YVT.js";import{a as f,l as p,o as m}from"./store-BWLbFXiY.js";import{a as h,c as g,r as _,s as v}from"./store-D2IJF4SA.js";import{r as y,s as b,t as x}from"./store-D-f8ZuaK.js";import{c as S,l as C,u as w}from"./store-BfHRbVKz.js";var T=25e6,E=32,D=5e5,O=256,k=32768,A=24,j={dashboards:{count:24,entryBytes:1e6},memory:{count:50,entryBytes:16e3},flashcards:{count:1e3,entryBytes:32e3},library:{count:12,entryBytes:24e4},atlas:{count:500,entryBytes:16e3},courses:{count:60,entryBytes:3e5}},M=Object.freeze([{id:`provider-api-keys`,reason:`credential`},{id:`search-api-keys`,reason:`credential`},{id:`github-token`,reason:`credential`},{id:`active-session-and-turn-history`,reason:`not-yet-portable`},{id:`turn-bookmarks`,reason:`not-yet-portable`},{id:`dashboard-refresh-ledger`,reason:`not-yet-portable`},{id:`dashboard-morning-briefing`,reason:`not-yet-portable`},{id:`dashboard-budget-open-and-optimizer-state`,reason:`device-preference`},{id:`course-generated-frame-cache`,reason:`ephemeral-cache`},{id:`course-checkpoint-cache`,reason:`ephemeral-cache`},{id:`course-mastery`,reason:`not-yet-portable`},{id:`ripple-course-progress-and-metadata`,reason:`not-yet-portable`},{id:`ripple-tracked-items`,reason:`not-yet-portable`},{id:`appearance-audio-performance-preferences`,reason:`device-preference`},{id:`setup-tour-demo-and-feature-hints`,reason:`device-preference`},{id:`legal-acceptance-record`,reason:`device-preference`},{id:`one-shot-navigation-seeds`,reason:`ephemeral-cache`}]);async function N(){await Promise.all([o(),p(),d(),b()])}async function P(){await N();let e=S();return{app:`mavea`,kind:`backup`,version:1,exportedAt:Date.now(),data:{dashboards:i(),memory:f(),flashcards:_(),study:h(),library:u(),atlas:x(),courses:{courses:e,progress:Object.fromEntries(e.map(e=>[e.id,C(e.id)]))},settings:JSON.parse(c())}}}async function F(){let e=JSON.stringify(await P()),t=new Blob([e],{type:`application/json`}),n=URL.createObjectURL(t);try{let e=document.createElement(`a`);e.href=n,e.download=`mavea-backup-${new Date().toISOString().slice(0,10)}.json`,e.click()}finally{URL.revokeObjectURL(n)}}function I(e){return typeof TextEncoder==`function`?new TextEncoder().encode(e).byteLength:e.length*2}function L(e){return!!e&&typeof e==`object`&&!Array.isArray(e)}function R(e){let t=0,n=(e,r)=>{if(t+=1,t>D||r>E)throw Error(`That backup is too complex to import safely.`);if(typeof e==`string`&&e.length>k)throw Error(`That backup contains an oversized text field.`);if(Array.isArray(e)){for(let t of e)n(t,r+1);return}if(L(e)){let t=Object.entries(e);if(t.length>O)throw Error(`That backup contains an oversized object.`);for(let[e,i]of t){if(e.length>256)throw Error(`That backup contains an oversized field name.`);n(i,r+1)}}};n(e,0)}function z(e,t){try{return L(e)&&I(JSON.stringify(e))<=t}catch{return!1}}function B(e,t){let n=Array.isArray(e)?e:[],{count:r,entryBytes:i}=j[t],a=n.slice(0,r).filter(e=>z(e,i));return{incoming:n.length,entries:a,rejected:n.length-a.length}}var V=new Set([...n,...t.map(e=>e.type)]);async function H(t){let n=new Set,r=e=>{if(Array.isArray(e))for(let t of e.slice(0,A))L(t)&&typeof t.type==`string`&&n.add(t.type)};for(let e of t)if(L(e.spec)&&r(e.spec.blocks),Array.isArray(e.widgets))for(let t of e.widgets)L(t)&&r([t.block]);await e(n)}function U(e,t){return!Array.isArray(e)||e.length>A?null:r({title:t||`Imported canvas`,blocks:e},V,A,!0)}function W(e){if(!Array.isArray(e.blocks)||e.blocks.length>A)return null;let t=r({title:e.title,sub:e.sub,narration:e.opener,topic:e.topic,blocks:e.blocks,sources:e.sources,bend:e.bend,blanks:e.blanks,track:e.track},V,A,!0);return t?{id:`live`,workspace:`Live`,title:t.title,sub:t.sub,opener:t.narration,context:[],blocks:t.blocks,proof:null,...t.topic?{topic:t.topic}:{},...t.track?{track:t.track}:{},...t.bend?{bend:t.bend}:{},...t.blanks?.length?{blanks:t.blanks,awaiting:!0}:{},...t.sources?.length?{sources:t.sources}:{},extras:{},group:`home`,suggests:[],keywords:[]}:null}async function G(e){await H(e);let t=[];for(let n of e){if(!L(n.spec))continue;let e=W(n.spec);e&&t.push({...n,spec:e})}return t}async function K(e){return await H(e),e.map(e=>{if(!Array.isArray(e.widgets))return e;let t=[];for(let n of e.widgets.slice(0,12)){if(!L(n))continue;let e=U([n.block],`Imported dashboard widget`)?.blocks[0];e&&t.push({id:typeof n.id==`string`?n.id:``,block:e,span:n.span===2||n.span===3?n.span:1,fromSource:typeof n.fromSource==`string`?n.fromSource:``,...typeof n.metricId==`string`?{metricId:n.metricId}:{},...typeof n.refreshQuery==`string`?{refreshQuery:n.refreshQuery}:{}})}return{...e,widgets:t}})}function q(e){if(!L(e))return[];let t=[],n=e=>typeof e==`string`||Array.isArray(e)?e.length>0:L(e)?Object.keys(e).length>0:e!=null;return Object.prototype.hasOwnProperty.call(e,`keys`)&&n(e.keys)&&t.push(`provider-api-keys`),Object.prototype.hasOwnProperty.call(e,`searchKeys`)&&n(e.searchKeys)&&t.push(`search-api-keys`),[`githubToken`,`github_token`,`ghToken`].some(t=>Object.prototype.hasOwnProperty.call(e,t)&&n(e[t]))&&t.push(`github-token`),t}function J(e,t,n){return{incoming:t,accepted:n,rejected:t-n,limit:j[e].count}}async function Y(e){let t=I(e);if(t>25e6)throw Error(`That file is too large to be a Mavéa backup.`);let n;try{n=JSON.parse(e)}catch{throw Error(`This file isn’t valid JSON — it may be corrupted or not a Mavéa backup.`)}if(R(n),!L(n)||n.app!==`mavea`||n.kind!==`backup`||typeof n.version!=`number`||!Number.isSafeInteger(n.version)||n.version<1||!L(n.data))throw Error(`This file isn’t a Mavéa backup.`);let r=n.data,i=B(r.dashboards,`dashboards`),a=B(r.memory,`memory`),o=B(r.flashcards,`flashcards`),s=B(r.library,`library`),c=B(r.atlas,`atlas`),l=L(r.courses)?r.courses:{},u=B(l.courses,`courses`),[d,f]=await Promise.all([K(i.entries),G(s.entries)]),p={};if(L(l.progress)){let e=new Set(u.entries.flatMap(e=>typeof e.id==`string`&&e.id?[e.id]:[]));for(let[t,n]of Object.entries(l.progress))e.has(t)&&z(n,15e4)&&(p[t]=n)}let m={app:`mavea`,kind:`backup`,version:n.version,exportedAt:typeof n.exportedAt==`number`&&Number.isFinite(n.exportedAt)?n.exportedAt:0,data:{dashboards:d,memory:a.entries,flashcards:o.entries,study:r.study,library:f,atlas:c.entries,courses:{courses:u.entries,progress:p},...L(r.settings)?{settings:r.settings}:{}}},h={dashboards:J(`dashboards`,i.incoming,d.length),memory:J(`memory`,a.incoming,a.entries.length),flashcards:J(`flashcards`,o.incoming,o.entries.length),library:J(`library`,s.incoming,f.length),atlas:J(`atlas`,c.incoming,c.entries.length),courses:J(`courses`,u.incoming,u.entries.length)},g=q(r.settings),_=n.version>1,v=new Set([`durability-unverified`,`import-may-evict-existing`,`stores-excluded`]);return g.length&&v.add(`credentials-ignored`),_&&v.add(`future-version`),Object.values(h).some(e=>e.rejected>0)&&v.add(`entries-rejected`),{bundle:m,preflight:{version:n.version,versionAhead:_,byteLength:t,credentialsPresent:g,warnings:[...v],excludedStores:M,sections:h}}}function X(e){let t=new Set;for(let n of e)L(n)&&typeof n.id==`string`&&n.id&&t.add(n.id);return t}function Z(e,t,n,r,i){let a=X(n),o=X(r),s=X(i),c=0,l=0;for(let e of a)o.has(e)&&(c+=1);for(let e of o)s.has(e)||(l+=1);return{...e,accepted:t,rejected:e.incoming-t,conflicts:c,evictedExisting:l}}async function Q(e){let[{bundle:t,preflight:n}]=await Promise.all([Y(e),N()]),{data:r}=t,o={dashboards:i(),memory:f(),flashcards:_(),library:u(),atlas:x(),courses:S()},c=a(r.dashboards??[]),d=m(r.memory??[]),p=v(r.flashcards??[]),h=g(r.study),b=l(r.library??[]),C=y(r.atlas??[]),T=r.courses?w(r.courses.courses,r.courses.progress):0,E=!1,D=[...n.credentialsPresent];if(r.settings){let e=s(JSON.stringify(r.settings),{mode:`merge`,preserveSecretState:!0});E=e.appliedFields.length>0,D=[...new Set([...D,...e.credentialsIgnored])]}let O={dashboards:i(),memory:f(),flashcards:_(),library:u(),atlas:x(),courses:S()},k={dashboards:Z(n.sections.dashboards,c,r.dashboards??[],o.dashboards,O.dashboards),memory:Z(n.sections.memory,d,r.memory??[],o.memory,O.memory),flashcards:Z(n.sections.flashcards,p,r.flashcards??[],o.flashcards,O.flashcards),library:Z(n.sections.library,b,r.library??[],o.library,O.library),atlas:Z(n.sections.atlas,C,r.atlas??[],o.atlas,O.atlas),courses:Z(n.sections.courses,T,r.courses?.courses??[],o.courses,O.courses)},A=new Set(n.warnings);return D.length&&A.add(`credentials-ignored`),Object.values(k).some(e=>e.rejected>0)&&A.add(`entries-rejected`),Object.values(k).some(e=>e.evictedExisting>0)&&A.add(`import-may-evict-existing`),{dashboards:c,memory:d,flashcards:p,studyStyle:h,library:b,atlas:C,courses:T,settingsApplied:E,versionAhead:n.versionAhead,credentialsIgnored:D,warnings:[...A],excludedStores:M,durability:`best-effort-unverified`,preflight:n,sections:k}}export{T as MAX_BACKUP_BYTES,F as downloadBackup,Q as importBackup};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var e={insight:`Insight`,chart:`Chart`,breakdown:`Breakdown`,timeline:`Timeline`,list:`List`,compare:`Comparison`,ring:`Stat`,bars:`Bar chart`,stack:`Stacked bars`,scatter:`Scatter plot`,map:`Map`,heat:`Heatmap`,flow:`Flow`,gallery:`Gallery`,donut:`Donut chart`,gauge:`Gauge`,scoreboard:`Scoreboard`,standings:`Standings`,pipeline:`Pipeline`,kpi:`KPIs`,quotes:`Quote`,checklist:`Checklist`},t=[`title`,`label`,`heading`,`name`,`question`,`caption`,`eyebrow`],n=80;function r(e){let r=e.props??{};for(let e of t){let t=r[e];if(typeof t==`string`&&t.trim()){let e=t.trim();return e.length>n?e.slice(0,79).trimEnd()+`…`:e}}return null}function i(t){return r(t)??e[t.type]??t.type}var a={insight:`Finding`,scatter:`Scatter`,bars:`Bars`,stack:`Stacked`,checklist:`Progress`};function o(t){return(a[t.type]??e[t.type]??t.type).toUpperCase()}var s=[`summary`,`narrative`,`detail`,`sub`,`caption`,`body`,`text`],c=180;function l(e,t){let n=e.props??{};for(let e of s){let r=n[e];if(typeof r==`string`&&r.trim()&&r.trim()!==t){let e=r.trim().replace(/\s+/g,` `);return e.length>c?e.slice(0,179).trimEnd()+`…`:e}}return null}function u(e){let t=r(e),n=l(e,t);return t&&n?`${t}. ${n}`:t??n??null}export{i as n,u as r,o as t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var e=new Set([`insight`,`chart`,`breakdown`,`list`,`timeline`,`compare`,`kpi`,`ring`]),t=new Set([...e,`bars`,`stack`,`donut`,`gauge`,`blanks`]);function n(n){return n===`small`?e:t}export{t as n,n as r,e as t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
function e(e){return e.split(`/`).pop()||e}function t(e){let t=e.lastIndexOf(`/`);return t>0?e.slice(0,t):`(root)`}var n=/(?:export\s+(?:default\s+)?)?(?:async\s+)?(?:function|class|interface|type|enum|struct|trait|impl|const|let|var|def|fn|func)\s+([A-Za-z_$][\w$]*)/g,r=/\b([A-Za-z_$][\w$]*)\s*\(/g,i=new Set(`if.for.while.switch.catch.return.function.await.typeof.super.const.let.var.new.class.import.export.require.console.String.Number.Boolean.Array.Object.Promise.Map.Set.Math.JSON`.split(`.`));function a(e,t){let n=[],r;for(e.lastIndex=0;(r=e.exec(t))!==null;)r[1]&&n.push(r[1]);return n}function o(e,t){let n=[];for(let r of e.hunks)for(let e of r.lines)e.t===t&&n.push(e.c);return n}function s(e){let t=new Set,r=new Set;for(let r of o(e,`add`))for(let e of a(n,r))t.add(e);for(let t of o(e,`del`))for(let e of a(n,t))r.add(e);return{added:t,removed:r}}function c(e){let t=new Map;for(let n of o(e,`del`))for(let e of a(r,n))i.has(e)||t.set(e,n);for(let n of o(e,`add`))for(let e of a(r,n)){if(i.has(e))continue;let r=t.get(e);if(r&&r.replace(/\s/g,``)!==n.replace(/\s/g,``))return e}return null}function l(e){return/\.(test|spec)\.[a-z]+$|(^|\/)(tests?|__tests__|__mocks__|e2e)\//.test(e.toLowerCase())}function u(e){return/\.sql$|(^|\/)migrations?\//.test(e.toLowerCase())}function d(e){return/\.(json|ya?ml|toml|ini|env|lock)$|(^|\/)(config|\.config)/.test(e.toLowerCase())}function f(e){return/(^|\/)(package\.json|cargo\.toml|pyproject\.toml|go\.mod|gemfile|build\.gradle)$/i.test(e.toLowerCase())}function p(e){return/(^|\/)(pnpm-lock\.ya?ml|package-lock\.json|yarn\.lock|cargo\.lock|poetry\.lock|go\.sum|gemfile\.lock)$/i.test(e.toLowerCase())}function m(e){let t=/["']?([@\w./-]+)["']?\s*[:=]\s*["']?[\^~>=<]*\s*([0-9][\w.+-]*)/,n=new Map;for(let r of o(e,`del`)){let e=t.exec(r);e&&e[1]&&e[2]&&n.set(e[1],e[2])}let r=[];for(let i of o(e,`add`)){let e=t.exec(i);e&&e[1]&&e[2]&&n.has(e[1])&&n.get(e[1])!==e[2]&&!r.includes(e[1])&&r.push(e[1])}return r}function h(n){let r=e(n.path),{added:i,removed:a}=s(n),h=e=>[...e][0];if(n.status===`deleted`){let e=h(a)??r;return{kind:`breaking`,risk:`breaks`,title:`Remove ${e}`,intent:`Deletes ${e}${a.size>1?` and others`:``} from ${r}.`,phrase:`removes ${e}`,risks:[{level:`breaks`,text:`Anything importing ${e} breaks — confirm there are no remaining callers.`}],symbols:[...a]}}if(l(n.path))return{kind:`test`,risk:`safe`,title:`Tests in ${r}`,intent:`Adds or updates tests in ${r}.`,phrase:`adds tests in ${t(n.path)}`,risks:[],symbols:[]};if(u(n.path)){let e=o(n,`add`).join(` `).toUpperCase(),t=/\bNOT NULL\b|\bDROP\b|\bALTER\b/.test(e);return{kind:`config`,risk:t?`breaks`:`watch`,title:`Migration ${r}`,intent:`A schema change in ${r}.`,phrase:`migrates the schema`,risks:t?[{level:`breaks`,text:`${r} alters a table — on a large table this can lock writes. Check the row count.`}]:[],symbols:[]}}if(p(n.path))return{kind:`config`,risk:`safe`,title:`Lockfile ${r}`,intent:`Regenerates ${r} to match the dependency changes — machine-written, not reviewed by hand.`,phrase:`updates the lockfile`,risks:[],symbols:[]};if(f(n.path)){let e=m(n);if(e.length>0){let t=e.slice(0,4).join(`, `),n=e.length>4?`, +${e.length-4} more`:``,i=e.length===1?`dependency`:`dependencies`;return{kind:`config`,risk:`watch`,title:`Bump ${e.length} ${i}`,intent:`Updates ${e.length} ${e.length===1?`package`:`packages`} in ${r} (${t}${n}).`,phrase:`bumps ${e.length} ${i}`,risks:[{level:`watch`,text:`A version bump can carry breaking changes or a compromised release — skim the changelogs for any majors before merging.`}],symbols:[]}}return{kind:`config`,risk:`watch`,title:`Update ${r}`,intent:`Changes ${r} (scripts or config, not a clean version bump).`,phrase:`updates ${r}`,risks:[],symbols:[]}}if(d(n.path))return{kind:`config`,risk:`watch`,title:`Config ${r}`,intent:`Changes configuration in ${r}.`,phrase:`updates ${r}`,risks:[],symbols:[...i,...a]};if(n.status===`added`){let e=h(i);return{kind:`behavior`,risk:`watch`,title:e?`Add ${e}`:`Add ${r}`,intent:e?`Adds ${e}${i.size>1?` and other symbols`:``} in ${r}.`:`Adds ${r}.`,phrase:e?`adds ${e}`:`adds ${r}`,risks:[],symbols:[...i]}}let g=c(n);if(g)return{kind:`interface`,risk:`breaks`,title:`Change ${g}() signature`,intent:`Changes the call signature of ${g} in ${r}.`,phrase:`changes the ${g} signature`,risks:[{level:`breaks`,text:`Callers of ${g} on the old shape break — they may still compile but fail at runtime.`}],symbols:[g,...i,...a]};let _=[...a].find(e=>!i.has(e));if(_)return{kind:`breaking`,risk:`breaks`,title:`Remove ${_}`,intent:`Removes ${_} from ${r}.`,phrase:`removes ${_}`,risks:[{level:`breaks`,text:`${_} is gone — anything that referenced it breaks.`}],symbols:[...a]};let v=h(i)??h(a);return{kind:`behavior`,risk:`watch`,title:v?`Update ${v}`:`Update ${r}`,intent:v?`Reworks ${v} in ${r}.`:`Updates ${r} (+${n.add} / −${n.del}).`,phrase:v?`reworks ${v}`:`updates ${r}`,risks:[],symbols:[...i,...a]}}function g(e){let t=[];return e.hunks.forEach((e,n)=>{n>0&&t.push({t:`ctx`,c:`⋯`});for(let n of e.lines)if(t.push({t:n.t,c:n.c}),t.length>=60)return}),t.length>=60&&t.push({t:`ctx`,c:`… diff truncated`}),t}function _(e,t){if(t.size===0)return!1;for(let n of[`add`,`del`,`ctx`])for(let i of o(e,n))for(let e of a(r,i))if(t.has(e))return!0;return!1}var v=(e,t)=>{let n={safe:0,watch:1,breaks:2};return n[e]>=n[t]?e:t},y=(e,t,n)=>e===`breaks`?`breaks`:t?`migration`:n?`safe`:`affected`;function b(n,r){let i=n.files.filter(e=>!e.binary),a=i.map(h),s=i.map((n,r)=>{let o=a[r],s=new Set(o.symbols),c=[];return i.forEach((t,n)=>{n!==r&&s.size!==0&&_(t,s)&&c.push({name:e(t.path),ref:t.path,scope:`in-pr`,status:o.risk===`breaks`?`breaks`:`affected`})}),{id:`c${r}`,subsystem:t(n.path).toUpperCase(),file:n.path,kind:o.kind,risk:o.risk,title:o.title,intent:o.intent,why:``,diff:{file:n.path,add:n.add,del:n.del,lines:g(n)},blastRadius:[],blastFiles:1+c.length,blastOutside:0,links:c,risks:o.risks,symbols:o.symbols.length?o.symbols.slice(0,6):void 0}}),c=new Map;i.forEach(e=>{let n=t(e.path);c.has(n)||c.set(n,c.size)});let d=new Map,f=new Map,p=new Map;i.forEach((e,n)=>{let r=t(e.path);d.set(r,v(d.get(r)??`safe`,a[n].risk)),u(e.path)&&f.set(r,!0),l(e.path)||p.set(r,!0)});let m=[{id:`pr`,label:r||`this change`,sub:`THIS CHANGE`,type:`pr`,status:`affected`,scope:`in-pr`}],b=[],x=[...c.keys()].map(e=>({ar:e,count:i.filter(n=>t(n.path)===e).length})).sort((e,t)=>t.count-e.count).slice(0,9),S=new Map;x.forEach(({ar:e,count:t},n)=>{let r=`n${n}`;S.set(e,r);let i=y(d.get(e)??`safe`,!!f.get(e),!p.get(e));m.push({id:r,label:e,sub:`${t} file${t===1?``:`s`}`,type:`module`,status:i,scope:`in-pr`}),b.push({from:`pr`,to:r,verb:`changes`,status:i})});let C=new Set;i.forEach((e,n)=>{let r=t(e.path),o=S.get(r);if(!o||a[n].symbols.length===0)return;let s=new Set(a[n].symbols);i.forEach((e,i)=>{if(i===n)return;let c=t(e.path);if(c===r)return;let l=S.get(c);if(!l||!_(e,s))return;let u=`${l}->${o}`;C.has(u)||(C.add(u),b.push({from:l,to:o,verb:`calls`,status:a[n].risk===`breaks`?`breaks`:`affected`}))})});let w=s.filter(e=>e.risk===`breaks`),T=i.some(e=>l(e.path)),E=s.reduce((e,t)=>v(e,t.risk),`safe`),D=[];for(let e of w.slice(0,4))D.push({id:`b-${e.id}`,label:`breaking change reviewed — ${e.title}`,status:`pending`,actor:`human`});D.push({id:`tests`,label:T?`tests touched in this change`:`a test covers the changed paths`,status:T?`met`:`pending`,actor:`agent`}),D.push({id:`human`,label:`reviewed and understood by a human`,status:`pending`,actor:`human`});let O={decision:E===`breaks`?`block`:E===`watch`?`watch`:`pass`,shipSafe:E===`safe`,unackedP0:w.length,requires:[],deployOrder:`unset`,conditions:D,rationale:w.length?`${w.length} breaking change${w.length===1?``:`s`} to clear before merge: ${w.map(e=>e.title).join(`; `)}. In-repo callers are flagged; cross-repo callers need a connected graph.`:E===`watch`?`No outright breaks detected in the diff, but the changed paths warrant a review.`:`Only low-risk changes (tests/config) detected in the diff.`},k=i.find(e=>u(e.path)),A=k?{file:k.path,sql:o(k,`add`).slice(0,6),rows:`unknown`,lockCost:`depends on the table size — verify the row count before running`,expand:[{title:`Add it nullable`,detail:`Add the column without NOT NULL — instant, no rewrite.`},{title:`Backfill in batches`,detail:`Fill existing rows off-peak so replicas keep up.`},{title:`Then set NOT NULL`,detail:`A fast validate once every row is populated.`}],note:`Row count and lock time aren’t in the diff — confirm against the real table before you run it.`}:void 0,j=i.length===1?`file`:`files`,M=[...c.keys()],N=M.slice(0,3).join(`, `),P={safe:0,watch:1,breaks:2},F=[...s].sort((e,t)=>P[t.risk]-P[e.risk]),I=a.slice().sort((e,t)=>P[t.risk]-P[e.risk]).slice(0,3).map(e=>e.phrase),L=I.length>0?I.slice(0,-1).join(`, `)+(I.length>1?` and `:``)+I[I.length-1]:`touches ${i.length} ${j}`;return{pr:{repo:r||``,title:`${i.length} ${j} changed`,added:n.add,removed:n.del,files:i.length,p0Ways:w.length||void 0,summary:`This change ${L}`+(N?` — across ${M.length} area${M.length===1?``:`s`} (${N})`:``)+`, +${n.add} / −${n.del}.`,risks:F.flatMap(e=>e.risks&&e.risks.length?e.risks:e.risk===`safe`?[]:[{level:e.risk,text:`${e.title} — ${e.file}`}]).slice(0,3),readScope:`Read from the diff: ${i.length} ${j} across ${M.length} area${M.length===1?``:`s`}.`},nodes:m,edges:b,changes:s,cascades:[],rollout:[],workTypes:[],hotspots:[],suggestions:[],suppressedNits:0,modules:[],migration:A,gate:O,provenance:{source:`pasted-diff`,example:!1,notes:[`Built from the diff itself — what each change does, and the in-repo callers it touches.`,`Cross-repo callers, contracts, and traffic need a connected graph, so they’re left out rather than guessed.`]}}}export{b as t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var e=`analyses`;function t(e){let t=2166136261;for(let n=0;n<e.length;n++)t^=e.charCodeAt(n),t=Math.imul(t,16777619);return(t>>>0).toString(36)}function n(e,n){return`${t(e)}|${n}|v5`}var r=new Map;function i(e){return r.get(e)?.value??null}function a(e,t){if(r.set(e,{key:e,value:t,savedAt:Date.now()}),r.size>60){let e=null,t=1/0;for(let n of r.values())n.savedAt<t&&(t=n.savedAt,e=n.key);e&&r.delete(e)}}function o(){try{return typeof indexedDB<`u`&&indexedDB!==null}catch{return!1}}function s(){return new Promise(t=>{try{let n=indexedDB.open(`mavea-ripple`,1);n.onupgradeneeded=()=>{let t=n.result;t.objectStoreNames.contains(e)||t.createObjectStore(e,{keyPath:`key`}).createIndex(`savedAt`,`savedAt`)},n.onsuccess=()=>t(n.result),n.onerror=()=>t(null)}catch{t(null)}})}async function c(t){if(!o())return i(t);let n=await s();return n?new Promise(r=>{try{let i=n.transaction(e,`readonly`).objectStore(e).get(t);i.onsuccess=()=>{let e=i.result;r(e?e.value:null),n.close()},i.onerror=()=>{r(null),n.close()}}catch{r(i(t))}}):i(t)}async function l(t,n){if(!o()){a(t,n);return}let r=await s();if(!r){a(t,n);return}await new Promise(i=>{try{let a=r.transaction(e,`readwrite`);a.objectStore(e).put({key:t,value:n,savedAt:Date.now()}),a.oncomplete=()=>{u(r).finally(()=>{i(),r.close()})},a.onerror=()=>{i(),r.close()}}catch{a(t,n),i()}})}function u(t){return new Promise(n=>{try{let r=t.transaction(e,`readwrite`).objectStore(e),i=r.count();i.onsuccess=()=>{let e=i.result-60;if(e<=0){n();return}let t=0,a=r.index(`savedAt`).openCursor();a.onsuccess=()=>{let r=a.result;r&&t<e?(r.delete(),t++,r.continue()):n()},a.onerror=()=>n()},i.onerror=()=>n()}catch{n()}})}export{n as i,l as n,t as r,c as t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import"./ReplayCard-BkJbY0-I.js";import"./TopicCanvas-DR26Swr_.js";import"./CanvasSkeleton-Bx0s36b_.js";
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/src-DG1n-LFe.js","assets/rolldown-runtime-DkW27tQK.js","assets/__vite-browser-external-gfE6fZcA.js"])))=>i.map(i=>d[i]);
|
|
2
|
+
import{n as e,t}from"./preload-helper-CiWYd9n-.js";import{l as n,m as r}from"./index-D1SPhBGd.js";import{C as i,i as a,m as o}from"./kokoro-C6P0LV4L.js";var s=24e3,c=.15,l=.18,u=240,d=.008,f=.89,p=6;async function m(e,t){let n=i(e).trim().slice(0,u);if(!n)return new Float32Array;for(let e=0;e<2;e++)try{let e=await fetch(`/tts/v1/audio/speech`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({model:`kokoro`,input:n,voice:a(`mavea`),response_format:`pcm`,speed:1}),signal:t});if(e.ok)return o(new Uint8Array(await e.arrayBuffer()),null).samples}catch{if(t?.aborted)return new Float32Array}return new Float32Array}async function h(e,t){let r=e.slides,i=r.map(e=>Math.max(800,Math.round(e.durationMs))),a=n(),o=r.map(e=>e.voiceover.trim()),u=o.find(Boolean);if(!a||typeof OfflineAudioContext>`u`)return{buffer:null,timings:i,missing:o.filter(Boolean).length,...u?{firstMissingLine:u}:{}};let h=await Promise.all(r.map(e=>m(e.voiceover,t))),g=o.filter(Boolean).length,_=h.filter(e=>e.length>0).length,v=Math.max(0,g-_),y=o.find((e,t)=>e&&h[t].length===0);if(_===0)return{buffer:null,timings:i,missing:v,...y?{firstMissingLine:y}:{}};let b=r.map((e,t)=>{let n=h[t].length/s*1e3;return Math.round(n>0?Math.max(i[t],n+l*1e3):i[t])}),x=0;for(let e of h)for(let t=0;t<e.length;t++)x=Math.max(x,Math.abs(e[t]));let S=x>0?Math.min(p,f/x):1,C=a.sampleRate,w=.65+b.reduce((e,t)=>e+t/1e3,0),T=new OfflineAudioContext(1,Math.ceil(w*C),C),E=T.createGain();E.gain.value=S,E.connect(T.destination);let D=c;return b.forEach((e,t)=>{let n=h[t];if(n.length){let e=T.createBuffer(1,n.length,s);e.getChannelData(0).set(n);let t=T.createBufferSource();t.buffer=e;let r=T.createGain(),i=n.length/s,a=Math.min(d,i/2);r.gain.setValueAtTime(0,D),r.gain.linearRampToValueAtTime(1,D+a),r.gain.setValueAtTime(1,D+i-a),r.gain.linearRampToValueAtTime(0,D+i),t.connect(r).connect(E),t.start(D)}D+=e/1e3}),{buffer:await T.startRendering(),timings:b,missing:v,...y?{firstMissingLine:y}:{}}}function g(e){let t=n();if(!t||typeof t.createMediaStreamDestination!=`function`)return null;let r=t.createMediaStreamDestination(),i=t.createBufferSource();i.buffer=e,i.connect(r);let a=!1;return{stream:r.stream,start(){a||(a=!0,t.state!==`running`&&t.resume().catch(()=>{}),i.start())},stop(){try{i.stop()}catch{}try{i.disconnect()}catch{}}}}function _(e,t,n){return t+Math.max(0,n-e)}function v(e,t){return!Number.isFinite(t)||t<=0||e>=t?null:Math.max(0,e)}function y(e){let t=n();if(!t)return null;let r=t.createGain();r.connect(t.destination);let i=null,a=0,o=0,s=!1,c=()=>{try{i?.stop(),i?.disconnect()}catch{}i=null},l=n=>{c(),i=t.createBufferSource(),i.buffer=e,i.connect(r),i.start(0,n),a=n,o=t.currentTime,s=!1};return{play(){t.state!==`running`&&t.resume().catch(()=>{}),l(0)},setMuted(e){r.gain.value=+!e},pause(){s||!i||(a=Math.min(e.duration,_(o,a,t.currentTime)),c(),s=!0)},resume(){if(!s)return;s=!1;let n=v(a,e.duration);n!==null&&(t.state!==`running`&&t.resume().catch(()=>{}),l(n))},stop(){c();try{r.disconnect()}catch{}}}}var b=`opus`,x=[{container:`mp4`,mimeType:`video/mp4`,video:`av1`,audio:b},{container:`webm`,mimeType:`video/webm`,video:`vp9`,audio:b},{container:`webm`,mimeType:`video/webm`,video:`vp8`,audio:b}],S=[`video/webm;codecs=vp9,opus`,`video/webm;codecs=vp8,opus`];async function C(e,t){if(t.audio&&!await e.canEncodeAudio(b,{numberOfChannels:t.audio.numberOfChannels,sampleRate:t.audio.sampleRate,bitrate:t.audioBitrate??192e3}).catch(()=>!1))return null;for(let n of x)if(await e.canEncodeVideo(n.video,{width:t.width,height:t.height,bitrate:t.videoBitrate}).catch(()=>!1))return n;return null}function w(){return typeof MediaRecorder>`u`||typeof MediaRecorder.isTypeSupported!=`function`?null:S.find(e=>MediaRecorder.isTypeSupported(e))??null}var T=201326592,E=864e5,D=256,O=32,k=/^mavea-video-(\d{13})-[a-z0-9]+[.](?:webm|mp4)$/,A=new WeakSet;async function j(e,t=Date.now()){let n=0,r=0;try{let i=e.entries();try{for(;n<D;){let a=await i.next();if(a.done)break;n+=1;let[o,s]=a.value;if(r>=O||s.kind!==`file`)continue;let c=k.exec(o);if(!c)continue;let l=Number(c[1]);if(!(!Number.isSafeInteger(l)||t-l<E))try{await e.removeEntry(o),r+=1}catch{}}}finally{await i.return?.()}}catch{}return r}function M(e){A.has(e)||(A.add(e),j(e))}async function N(e=`webm`){if(typeof navigator>`u`)return null;let t=navigator.storage;if(!t?.getDirectory)return null;try{let n=await t.getDirectory();M(n);let r=`mavea-video-${Date.now()}-${Math.random().toString(36).slice(2)}.${e}`,i=await n.getFileHandle(r,{create:!0});return{handle:i,name:r,root:n,writable:await i.createWritable()}}catch{return null}}async function P(e,t=`webm`){let n=await N(t);return n?{target:new e(n.writable,{chunked:!0,chunkSize:4194304}),async finish(){return{blob:await n.handle.getFile(),dispose:()=>n.root.removeEntry(n.name).catch(()=>{})}},async discard(){await n.writable.abort().catch(()=>{}),await n.root.removeEntry(n.name).catch(()=>{})}}:null}async function F(){let e=await N();if(e){let t=!1,n=null,r=Promise.resolve();return{write(i){t||!i.size||(r=r.then(()=>e.writable.write(i)).catch(e=>{n=e instanceof Error?e:Error(`temporary-video-write-failed`)}))},async finish(){if(await r,n)throw n;return await e.writable.close(),{blob:await e.handle.getFile(),dispose:()=>e.root.removeEntry(e.name).catch(()=>{})}},async discard(){t=!0,await r.catch(()=>{}),await e.writable.abort().catch(()=>{}),await e.root.removeEntry(e.name).catch(()=>{})}}}let t=[],n=0,r=null,i=!1;return{write(e){if(!(i||!e.size||r)){if(n+=e.size,n>T){r=Error(`temporary-video-storage-unavailable`),t.length=0;return}t.push(e)}},async finish(){if(r)throw r;return{blob:new Blob(t,{type:`video/webm`})}},async discard(){i=!0,t.length=0}}}e();var I={balanced:{fps:24,bitrate:6e6},high:{fps:24,bitrate:7e6},ultra:{fps:24,bitrate:8e6}};function L(e,t=r()){let n=I[e],i=t===`lite`?{fps:12,bitrate:6e6}:{fps:24,bitrate:8e6};return{fps:Math.min(n.fps,i.fps),bitrate:Math.min(n.bitrate,i.bitrate)}}function R(e){let{fps:t,bitrate:n}=L(e);return`up to ${t} fps · ${Math.round(n/1e6)} Mbps`}async function z(){try{let{Output:e,Mp4OutputFormat:n,WebMOutputFormat:r,BufferTarget:i,StreamTarget:a,CanvasSource:o,AudioBufferSource:s,canEncodeVideo:c,canEncodeAudio:l}=await t(async()=>{let{Output:e,Mp4OutputFormat:t,WebMOutputFormat:n,BufferTarget:r,StreamTarget:i,CanvasSource:a,AudioBufferSource:o,canEncodeVideo:s,canEncodeAudio:c}=await import(`./src-DG1n-LFe.js`);return{Output:e,Mp4OutputFormat:t,WebMOutputFormat:n,BufferTarget:r,StreamTarget:i,CanvasSource:a,AudioBufferSource:o,canEncodeVideo:s,canEncodeAudio:c}},__vite__mapDeps([0,1,2]));return{Output:e,Mp4OutputFormat:n,WebMOutputFormat:r,BufferTarget:i,StreamTarget:a,CanvasSource:o,AudioBufferSource:s,canEncodeVideo:c,canEncodeAudio:l}}catch{return null}}async function B(){try{return await t(()=>import(`./dist-DRo0JOkC.js`),[])}catch{return null}}var V={"9:16":{w:1080,h:1920},"1:1":{w:1080,h:1080},"16:9":{w:1920,h:1080}};function H(){if(typeof document>`u`)return!1;let e=w()!==null,t=typeof VideoEncoder<`u`&&globalThis.AudioEncoder!==void 0;return e||t}async function U(e){let t=L(e.quality??`high`),n=e.fps??t.fps,r=e.bitrate??t.bitrate,i=e.background??`#05070c`,{w:a,h:o}=e.dims??V[e.aspect],s=await B();if(!s)throw Error(`rasterizer-unavailable`);let c=e.el.clientWidth||a,l=Math.min(3,Math.max(1,a/c)),u=0,d=0,f=document.createElement(`canvas`);f.width=a,f.height=o;let p=f.getContext(`2d`,{alpha:!1});p.fillStyle=i,p.fillRect(0,0,a,o);let m=document.createElement(`canvas`);m.width=Math.round(a/2),m.height=Math.round(o/2);let h=m.getContext(`2d`),_=!1,v=()=>{h&&(h.drawImage(f,0,0,m.width,m.height),_=!0)},y=()=>new Blob([],{type:`image/png`}),b=async()=>(!_&&u>0&&v(),_?await new Promise(e=>m.toBlob(e,`image/png`))??y():y()),x=async()=>{let t;try{t=await s.domToCanvas(e.el,{scale:l,backgroundColor:i})}catch{d++;return}if(!t.width||!t.height){d++;return}d=0,u++;let n=Math.max(a/t.width,o/t.height),r=t.width*n,c=t.height*n;p.fillStyle=i,p.fillRect(0,0,a,o),p.drawImage(t,(a-r)/2,(o-c)/2,r,c)},S=typeof VideoEncoder<`u`&&globalThis.AudioEncoder!==void 0?await z():null,T=S?await C(S,{width:a,height:o,videoBitrate:r,audio:e.audioBuffer}):null;if(T&&S){let t=await P(S.StreamTarget,T.container),i=t?null:new S.BufferTarget,a=new S.Output({format:T.container===`mp4`?new S.Mp4OutputFormat:new S.WebMOutputFormat,target:t?.target??i}),o=new S.CanvasSource(f,{codec:T.video,bitrate:r});a.addVideoTrack(o);let s=null;if(e.audioBuffer){let t=new S.AudioBufferSource({codec:T.audio,bitrate:192e3});a.addAudioTrack(t);let n=e.audioBuffer;s=async()=>{try{await t.add(n),t.close()}catch{}}}await a.start(),s?.();let c=!0,l=!0,p=performance.now(),h=0,g=1e3/n,y=e.maxDurationMs??1/0;(async()=>{for(;c;){let e=performance.now();if(await x(),!c)break;let t=l?0:(performance.now()-p)/1e3;l=!1;try{await o.add(t,Math.max(1/n,t-h))}catch{break}if(h=t,t*1e3>=y)break;!_&&t>1.2&&u>2&&d===0&&v();let r=performance.now()-e;await new Promise(e=>setTimeout(e,Math.max(0,g-r)))}})();let C=()=>{c=!1,f.width=f.height=0,m.width=m.height=0};return{async stop(){c=!1;let n=await b();o.close(),await a.finalize();let r=t?await t.finish():null;return C(),{blob:r?.blob??new Blob([i?.buffer??new ArrayBuffer(0)],{type:T.mimeType}),type:T.mimeType,poster:n,hasAudio:!!e.audioBuffer,durationMs:Math.round(performance.now()-p),dispose:r?.dispose}},cancel(){c=!1,a.cancel?.(),t?.discard(),C()}}}let E=f.captureStream(n),D=new MediaStream(E.getVideoTracks()),O=e.audioBuffer?g(e.audioBuffer):null,k=O?.stream.getAudioTracks()[0]??null;k&&D.addTrack(k);let A=w();if(!A)throw f.width=f.height=0,m.width=m.height=0,Error(`open-codec-unavailable`);let j=new MediaRecorder(D,{mimeType:A,videoBitsPerSecond:r}),M=await F();j.ondataavailable=e=>M.write(e.data);let N=new Promise(e=>{j.addEventListener(`stop`,()=>e(),{once:!0})}),I=()=>{try{j.state!==`inactive`&&j.stop()}catch{}};j.start(1e3),O?.start();let R=!0,H=performance.now(),U=e.maxDurationMs??1/0,W=1e3/n;(async()=>{for(;R;){let e=performance.now();await x();let t=performance.now()-H;if(t>=U){I();break}!_&&t>1200&&u>2&&d===0&&v();let n=performance.now()-e;await new Promise(e=>setTimeout(e,Math.max(0,W-n)))}})();let G=()=>{R=!1;for(let e of D.getTracks())e.stop();O?.stop(),f.width=f.height=0,m.width=m.height=0};return{async stop(){R=!1;let e=await b();I(),await N;try{let t=await M.finish(),n=Math.round(performance.now()-H);return G(),{blob:t.blob,type:A,poster:e,hasAudio:!!k,durationMs:n,dispose:t.dispose}}catch(e){throw await M.discard(),G(),e}},cancel(){R=!1,I(),M.discard(),G()}}}export{w as a,m as c,U as i,H as n,y as o,R as r,h as s,L as t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{n as e,t}from"./preload-helper-CiWYd9n-.js";import{n,r}from"./facts-BUGuVUIc.js";e();var i=[()=>t(()=>import(`./shard000-DM_rqD7W.js`),[]),()=>t(()=>import(`./shard001-gQEQs7_F.js`),[]),()=>t(()=>import(`./shard002-DbDas-W-.js`),[]),()=>t(()=>import(`./shard003-DxMszG4_.js`),[]),()=>t(()=>import(`./shard004-DZMpLBw1.js`),[]),()=>t(()=>import(`./shard005-Dp5TM33O.js`),[]),()=>t(()=>import(`./shard006-DpJfkjmW.js`),[]),()=>t(()=>import(`./shard007-CIQN8OfZ.js`),[]),()=>t(()=>import(`./shard008-BFiyL7r6.js`),[]),()=>t(()=>import(`./shard009-0s30Tkk9.js`),[]),()=>t(()=>import(`./shard010-DPhgF5ck.js`),[]),()=>t(()=>import(`./shard011-C2jVsC25.js`),[]),()=>t(()=>import(`./shard012-DYtN5yzJ.js`),[]),()=>t(()=>import(`./shard013-1D6_Qy9C.js`),[]),()=>t(()=>import(`./shard014-D8s7GHnm.js`),[]),()=>t(()=>import(`./shard015-16W6KgnL.js`),[]),()=>t(()=>import(`./shard016-B4PpWmro.js`),[]),()=>t(()=>import(`./shard017-BO1sA5b3.js`),[]),()=>t(()=>import(`./shard018-D4gn8z25.js`),[]),()=>t(()=>import(`./shard019-vSbfaqRA.js`),[]),()=>t(()=>import(`./shard020-DwbHP8bp.js`),[]),()=>t(()=>import(`./shard021-BhEyVVAL.js`),[]),()=>t(()=>import(`./shard022-BdT7zFy3.js`),[]),()=>t(()=>import(`./shard023-Dga_NQcm.js`),[]),()=>t(()=>import(`./shard024-CXHofcxc.js`),[]),()=>t(()=>import(`./shard025-a4CQKYw1.js`),[]),()=>t(()=>import(`./shard026-0rhLKfDL.js`),[]),()=>t(()=>import(`./shard027-C9GMfOtn.js`),[]),()=>t(()=>import(`./shard028-D9__rPnw.js`),[]),()=>t(()=>import(`./shard029-BSdYKGgG.js`),[]),()=>t(()=>import(`./shard030-DceOU7pS.js`),[]),()=>t(()=>import(`./shard031-C6_p076r.js`),[]),()=>t(()=>import(`./shard032-Cah16sJi.js`),[]),()=>t(()=>import(`./shard033-D-iobGzc.js`),[]),()=>t(()=>import(`./shard034-DIyfCKl8.js`),[]),()=>t(()=>import(`./shard035-BHWs8v0a.js`),[]),()=>t(()=>import(`./shard036-AhOPHqzq.js`),[]),()=>t(()=>import(`./shard037-CuAGDOOu.js`),[]),()=>t(()=>import(`./shard038-CYdtnPjK.js`),[]),()=>t(()=>import(`./shard039-DgvXKOyi.js`),[]),()=>t(()=>import(`./shard040-DO012waT.js`),[]),()=>t(()=>import(`./shard041-BeUicA1R.js`),[]),()=>t(()=>import(`./shard042-D2zbq14A.js`),[]),()=>t(()=>import(`./shard043-BKoTEB-H.js`),[]),()=>t(()=>import(`./shard044-bmYKfH3A.js`),[]),()=>t(()=>import(`./shard045-i_R1olD9.js`),[]),()=>t(()=>import(`./shard046-CFk2L0GQ.js`),[]),()=>t(()=>import(`./shard047-pjHCnVaT.js`),[]),()=>t(()=>import(`./shard048-Cc7tGz6R.js`),[]),()=>t(()=>import(`./shard049-C9eoD-6Z.js`),[]),()=>t(()=>import(`./shard050-V3c_ZDrB.js`),[]),()=>t(()=>import(`./shard051-D1ISwZzf.js`),[]),()=>t(()=>import(`./shard052-Dy09xx3S.js`),[]),()=>t(()=>import(`./shard053-Bi4Z4cwW.js`),[]),()=>t(()=>import(`./shard054-BoC-LNYu.js`),[]),()=>t(()=>import(`./shard055-D2NJeMN1.js`),[]),()=>t(()=>import(`./shard056-sSFMbxXN.js`),[]),()=>t(()=>import(`./shard057-DhNK5nyZ.js`),[]),()=>t(()=>import(`./shard058-Du4SjxeD.js`),[]),()=>t(()=>import(`./shard059-fGiLnJzG.js`),[]),()=>t(()=>import(`./shard060-l84MDY2t.js`),[]),()=>t(()=>import(`./shard061-B3aIa7Aa.js`),[]),()=>t(()=>import(`./shard062-BJ8OX6CJ.js`),[]),()=>t(()=>import(`./shard063-CMo-7Qit.js`),[]),()=>t(()=>import(`./shard064-B0EEOnfG.js`),[]),()=>t(()=>import(`./shard065-D-StlUHp.js`),[]),()=>t(()=>import(`./shard066-C2edvdvh.js`),[]),()=>t(()=>import(`./shard067-DFcuVhZm.js`),[]),()=>t(()=>import(`./shard068-BN8DM8JZ.js`),[]),()=>t(()=>import(`./shard069-i464K77p.js`),[]),()=>t(()=>import(`./shard070-Dm9m2a5U.js`),[]),()=>t(()=>import(`./shard071-BPVvR8GH.js`),[]),()=>t(()=>import(`./shard072-Bal_0d9L.js`),[]),()=>t(()=>import(`./shard073-CBQu62kt.js`),[]),()=>t(()=>import(`./shard074-D5BRae0w.js`),[]),()=>t(()=>import(`./shard075-DtFvcBnZ.js`),[])],a=new Set,o=new Map,s=new Map;i.length;function c(e){if(a.has(e))return Promise.resolve();let t=o.get(e);if(t)return t;let n=i[e];if(!n)return Promise.resolve();let r=n().then(({D:t})=>{for(let[e,n]of Object.entries(t))s.set(e,n);a.add(e)}).catch(()=>{}).finally(()=>o.delete(e));return o.set(e,r),r}function l(e){let t=r(e);return t<0?-1:Math.floor(t/8)}async function u(e){let t=new Set;for(let n of e){let e=l(n);e>=0&&!a.has(e)&&t.add(e)}t.size&&await Promise.all([...t].map(c))}function d(e){return s.get(e)}function f(e){let t=n(e);if(!t)return;let r=d(e);if(r)return{...t,...r}}export{u as n,f as t};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
var e=1,t=`cfo`,n=1784149612485,r=`gemini-3.5-flash`,i=[{question:`Run my quarterly review: ARR grew from $12.4M to $15.1M, churn ticked up from 2.1% to 2.8%, and regions came in at NA $8.2M, EMEA $4.6M, APAC $2.3M.`,narration:`We had a strong growth quarter with ARR climbing to $15.1M, though we need to keep a close eye on a slight uptick in our monthly churn. North America continues to drive the bulk of our revenue, but Europe and Asia-Pacific are showing solid holding patterns.`,mode:`replace`,tour:[{index:0,say:`We hit a major milestone, growing our ARR to fifteen point one million dollars.`,mark:{kind:`underline`,at:`$15.1M`,color:`key`}},{index:1,say:`However, monthly churn did tick up to two point eight percent, which we need to monitor closely.`,mark:{kind:`circle`,at:`2.8%`,color:`cool`}},{index:2,say:`North America remains our largest region at eight point two million, followed by Europe and Asia-Pacific.`,mark:{kind:`highlight`,at:`$8.2M`},marks:[{kind:`highlight`,at:`$8.2M`},{kind:`underline`,at:`$4.6M`},{kind:`underline`,at:`$2.3M`}]},{index:4,say:`Looking at the cohorts, we can see that newer signups are experiencing slightly faster drop-offs in month one.`,mark:{kind:`bracket`,at:`January Cohort`,to:`April Cohort`}}],spec:{id:`live`,workspace:`Live`,title:`Q2 2026 Financial Review`,sub:`ARR growth, regional distribution, and cohort retention analysis.`,opener:`We had a strong growth quarter with ARR climbing to $15.1M, though we need to keep a close eye on a slight uptick in our monthly churn. North America continues to drive the bulk of our revenue, but Europe and Asia-Pacific are showing solid holding patterns.`,context:[],blocks:[{type:`insight`,col:4,delay:0,id:`live-1`,num:`1`,props:{title:`Annual Recurring Revenue expansion`,summary:`ARR grew from $12.4M to $15.1M this quarter, representing a healthy 21.8% sequential increase.`,stat:`$15.1M`,delta:`+$2.7M`,deltaDir:`good`},note:`Our recurring revenue base expanded by over two and a half million dollars this quarter, keeping us on a strong upward trajectory.`,section:`Executive Summary`,order:1,depth:1},{type:`kpi`,col:8,delay:70,props:{title:`Key performance indicators`,kpis:[{val:`$15.1M`,label:`Ending ARR`},{val:`2.8%`,label:`Monthly Churn`},{val:`3.8x`,label:`LTV to CAC Ratio`}]},id:`live-2`,note:`While ARR beat our internal target, the monthly churn rate ticked up to two point eight percent, which warrants a closer look at customer success.`,section:`Executive Summary`,order:1,depth:1},{type:`stack`,col:6,delay:140,props:{title:`Regional ARR contribution`,segments:[{value:8.2,label:`North America`,display:`$8.2M`,color:`var(--presence)`},{value:4.6,label:`EMEA`,display:`$4.6M`,color:`var(--insight)`},{value:2.3,label:`APAC`,display:`$2.3M`,color:`var(--presence-soft)`}],total:`$15.1M`},id:`live-3`,note:`North America remains our anchor market at over eight million dollars, while Europe and Asia-Pacific combine for nearly half of our total ARR.`,section:`Regional Performance`,order:2,depth:1},{type:`breakdown`,col:6,delay:210,props:{title:`Regional share breakdown`,rows:[{name:`North America (NA)`,val:`$8.2M`,pct:54,hot:!0,tag:`Primary`},{name:`Europe, Middle East & Africa (EMEA)`,val:`$4.6M`,pct:31,tag:`Established`},{name:`Asia-Pacific (APAC)`,val:`$2.3M`,pct:15,tag:`Emerging`}]},id:`live-4`,note:`North America commands fifty-four percent of the portfolio, with EMEA holding a strong thirty-one percent share.`,section:`Regional Performance`,order:2,depth:1},{type:`cohortgrid`,col:12,delay:280,props:{cohorts:[{label:`January Cohort`,size:120,values:[100,94,91,89]},{label:`February Cohort`,size:145,values:[100,93,89,86]},{label:`March Cohort`,size:160,values:[100,91,86]},{label:`April Cohort`,size:185,values:[100,89]}],title:`Monthly customer retention by cohort`,icon:`layers`,periods:[`Month 0`,`Month 1`,`Month 2`,`Month 3`],unit:`%`,caption:`% of starting cohort active at month end`,footer:`Early retention has drifted down slightly in recent cohorts, aligning with our overall churn increase.`},id:`live-5`,note:`Our cohort retention grid shows that newer cohorts, like April, are starting their lifecycle with slightly lower month-one retention.`,section:`Churn & Retention`,order:3,depth:1},{type:`compare`,col:12,delay:350,props:{options:[{name:`Proactive CS Outreach`,sub:`High touch`,pick:!0},{name:`In-App Guides & Nudges`,sub:`Automated scaling`}],criteria:[{label:`Implementation Speed`,cells:[{v:`Fast`},{v:`Medium`}]},{label:`Expected Impact`,cells:[{v:`High`,win:!0},{v:`Medium`}]},{label:`Resource Cost`,cells:[{v:`Medium`},{v:`Low`,win:!0}]}],eyebrow:`Churn mitigation strategies`,recommendation:`We recommend immediate proactive outreach to accounts showing low usage patterns to reverse the churn drift.`},id:`live-6`,note:`To address the churn drift, immediate customer success outreach is recommended over purely automated product guides.`,section:`Churn & Retention`,order:3,depth:1},{type:`list`,col:12,delay:420,props:{title:`Action items for Q3`,items:[`Deploy Customer Success team to accounts with declining usage metrics.`,`Analyze APAC expansion opportunities to capitalize on high-margin growth.`,`Refine onboarding flows for new signups to stabilize early cohort retention.`]},id:`live-7`,note:`Our immediate focus is stabilizing early retention and deploying targeted outreach to accounts showing warning signs.`,section:`Next Steps`,order:4,depth:1}],proof:null,topic:`Finance`,extras:{},group:`home`,suggests:[{label:`What is driving the churn uptick?`,icon:`chat`,route:`What is driving the churn uptick?`},{label:`Show regional growth trends over time`,icon:`chat`,route:`Show regional growth trends over time`},{label:`How does our LTV to CAC compare to peers?`,icon:`chat`,route:`How does our LTV to CAC compare to peers?`},{label:`Draft an email summary of these results`,icon:`chat`,route:`Draft an email summary of these results`}],keywords:[]},at:1784149574028},{question:`Walk me through the bridge: new business added $1.9M, expansion $1.3M, and churn gave back $0.5M.`,narration:`We had a strong growth quarter with ARR climbing to $15.1M, though we need to keep a close eye on a slight uptick in our monthly churn. North America continues to drive the bulk of our revenue, but Europe and Asia-Pacific are showing solid holding patterns.`,mode:`augment`,tour:[{index:7,say:`Let's start with the big picture: our ARR grew to $15.1M this quarter.`,saySpoken:`Let's start with the big picture: our ARR grew to fifteen point one million dollars this quarter.`,mark:{kind:`circle`,at:`$15.1M`,color:`key`}},{index:8,say:`Here is how the bridge breaks down: we added $1.9M in new business and $1.3M in expansion, while losing $0.5M to churn.`,saySpoken:`Here is how the bridge breaks down: we added one point nine million in new business and one point three million in expansion, while losing half a million to churn.`,mark:{kind:`underline`,at:`1.9`},marks:[{kind:`underline`,at:`1.9`},{kind:`underline`,at:`1.3`},{kind:`underline`,at:`0.5`}]},{index:1,say:`While growth is strong, keep an eye on monthly churn, which ticked up to 2.8%.`,saySpoken:`While growth is strong, keep an eye on monthly churn, which ticked up to two point eight percent.`,mark:{kind:`circle`,at:`2.8%`,color:`cool`}},{index:10,say:`Geographically, North America still leads the way, making up over 54% of our total ARR.`,saySpoken:`Geographically, North America still leads the way, making up over fifty-four percent of our total ARR.`,mark:{kind:`highlight`,at:`North America (NA)`}}],spec:{id:`live`,workspace:`Live`,title:`Quarterly Business Review`,sub:`Q2 FY26 · ARR, Churn, and Regional Performance`,opener:`We had a strong growth quarter with ARR climbing to $15.1M, though we need to keep a close eye on a slight uptick in our monthly churn. North America continues to drive the bulk of our revenue, but Europe and Asia-Pacific are showing solid holding patterns.`,context:[],blocks:[{type:`insight`,col:4,delay:0,id:`live-1`,num:`1`,props:{title:`Annual Recurring Revenue expansion`,summary:`ARR grew from $12.4M to $15.1M this quarter, representing a healthy 21.8% sequential increase.`,stat:`$15.1M`,delta:`+$2.7M`,deltaDir:`good`},note:`Our recurring revenue base expanded by over two and a half million dollars this quarter, keeping us on a strong upward trajectory.`,section:`Executive Summary`,order:1,depth:1},{type:`kpi`,col:8,delay:70,props:{title:`Key performance indicators`,kpis:[{val:`$15.1M`,label:`Ending ARR`},{val:`2.8%`,label:`Monthly Churn`},{val:`3.8x`,label:`LTV to CAC Ratio`}]},id:`live-2`,note:`While ARR beat our internal target, the monthly churn rate ticked up to two point eight percent, which warrants a closer look at customer success.`,section:`Executive Summary`,order:1,depth:1},{type:`stack`,col:6,delay:140,props:{title:`Regional ARR contribution`,segments:[{value:8.2,label:`North America`,display:`$8.2M`,color:`var(--presence)`},{value:4.6,label:`EMEA`,display:`$4.6M`,color:`var(--insight)`},{value:2.3,label:`APAC`,display:`$2.3M`,color:`var(--presence-soft)`}],total:`$15.1M`},id:`live-3`,note:`North America remains our anchor market at over eight million dollars, while Europe and Asia-Pacific combine for nearly half of our total ARR.`,section:`Regional Performance`,order:2,depth:1},{type:`breakdown`,col:6,delay:210,props:{title:`Regional share breakdown`,rows:[{name:`North America (NA)`,val:`$8.2M`,pct:54,hot:!0,tag:`Primary`},{name:`Europe, Middle East & Africa (EMEA)`,val:`$4.6M`,pct:31,tag:`Established`},{name:`Asia-Pacific (APAC)`,val:`$2.3M`,pct:15,tag:`Emerging`}]},id:`live-4`,note:`North America commands fifty-four percent of the portfolio, with EMEA holding a strong thirty-one percent share.`,section:`Regional Performance`,order:2,depth:1},{type:`cohortgrid`,col:12,delay:280,props:{cohorts:[{label:`January Cohort`,size:120,values:[100,94,91,89]},{label:`February Cohort`,size:145,values:[100,93,89,86]},{label:`March Cohort`,size:160,values:[100,91,86]},{label:`April Cohort`,size:185,values:[100,89]}],title:`Monthly customer retention by cohort`,icon:`layers`,periods:[`Month 0`,`Month 1`,`Month 2`,`Month 3`],unit:`%`,caption:`% of starting cohort active at month end`,footer:`Early retention has drifted down slightly in recent cohorts, aligning with our overall churn increase.`},id:`live-5`,note:`Our cohort retention grid shows that newer cohorts, like April, are starting their lifecycle with slightly lower month-one retention.`,section:`Churn & Retention`,order:3,depth:1},{type:`compare`,col:12,delay:350,props:{options:[{name:`Proactive CS Outreach`,sub:`High touch`,pick:!0},{name:`In-App Guides & Nudges`,sub:`Automated scaling`}],criteria:[{label:`Implementation Speed`,cells:[{v:`Fast`},{v:`Medium`}]},{label:`Expected Impact`,cells:[{v:`High`,win:!0},{v:`Medium`}]},{label:`Resource Cost`,cells:[{v:`Medium`},{v:`Low`,win:!0}]}],eyebrow:`Churn mitigation strategies`,recommendation:`We recommend immediate proactive outreach to accounts showing low usage patterns to reverse the churn drift.`},id:`live-6`,note:`To address the churn drift, immediate customer success outreach is recommended over purely automated product guides.`,section:`Churn & Retention`,order:3,depth:1},{type:`list`,col:12,delay:420,props:{title:`Action items for Q3`,items:[`Deploy Customer Success team to accounts with declining usage metrics.`,`Analyze APAC expansion opportunities to capitalize on high-margin growth.`,`Refine onboarding flows for new signups to stabilize early cohort retention.`]},id:`live-7`,note:`Our immediate focus is stabilizing early retention and deploying targeted outreach to accounts showing warning signs.`,section:`Next Steps`,order:4,depth:1},{type:`insight`,col:4,delay:0,id:`live-8`,num:`1`,props:{title:`ARR Growth Outpaces Churn Drift`,summary:`Annual Recurring Revenue grew 21.8% quarter-over-quarter, driven by strong new business and expansion, offsetting a 70 bps increase in churn.`,stat:`$15.1M`,delta:`+$2.7M`,deltaDir:`good`},note:`Our annual recurring revenue reached fifteen point one million dollars this quarter, marking a healthy twenty-one percent jump despite a small rise in churn.`,section:`Executive Summary`,order:1,depth:1},{type:`workedexample`,col:8,delay:70,props:{title:`The ARR Bridge Calculation`,steps:[{label:`Starting ARR`,math:{t:`row`,items:[{t:`num`,v:`12.4`}]},why:`Baseline ARR at the beginning of the quarter.`},{label:`Add New Business`,math:{t:`row`,items:[{t:`op`,v:`+`},{t:`num`,v:`1.9`}]},why:`Net new logos secured during the sales cycle.`},{label:`Add Expansion`,math:{t:`row`,items:[{t:`op`,v:`+`},{t:`num`,v:`1.3`}]},why:`Upsells, seat additions, and tier upgrades.`},{label:`Subtract Churn`,math:{t:`row`,items:[{t:`op`,v:`-`},{t:`num`,v:`0.5`}]},why:`Cancellations and contractions.`}],problem:`Reconciling $12.4M to $15.1M ARR`,result:{t:`row`,items:[{t:`ident`,v:`Ending ARR`},{t:`op`,v:`=`},{t:`num`,v:`15.1`}]}},id:`live-9`,note:`This bridge shows exactly how we got to fifteen point one million: we added one point nine million in new business and one point three million in expansion, while…`,section:`ARR Bridge`,order:2,depth:1},{type:`teachdiagram`,col:12,delay:140,props:{title:`Visualizing the ARR Bridge Flow`,steps:[{caption:`We start with our baseline ARR of $12.4M.`,add:[{kind:`polygon`,points:`15,80 15,50 25,50 25,80`,color:`var(--presence)`,fill:`var(--presence-soft)`}],captionSpoken:`We start with our baseline ARR of twelve point four million dollars.`,labels:[{x:20,y:45,text:`$12.4M`,side:`top`}]},{caption:`New business adds $1.9M and expansion adds $1.3M.`,add:[{kind:`polygon`,points:`30,50 30,30 40,30 40,50`,color:`var(--insight)`,fill:`var(--insight)`},{kind:`polygon`,points:`45,30 45,15 55,15 55,30`,color:`var(--insight)`,fill:`var(--insight)`}],captionSpoken:`New business adds one point nine million dollars and expansion adds one point three million dollars.`,labels:[{x:35,y:25,text:`+$1.9M`,side:`top`},{x:50,y:10,text:`+$1.3M`,side:`top`}]},{caption:`Subtracting $0.5M in churn leaves us at our ending ARR of $15.1M.`,add:[{kind:`polygon`,points:`60,15 60,25 70,25 70,15`,color:`var(--danger)`,fill:`var(--danger)`},{kind:`polygon`,points:`75,80 75,25 85,25 85,80`,color:`var(--presence)`,fill:`var(--presence-soft)`}],captionSpoken:`Subtracting half a million dollars in churn leaves us at our ending ARR of fifteen point one million dollars.`,labels:[{x:65,y:30,text:`-$0.5M`,side:`bottom`},{x:80,y:20,text:`$15.1M`,side:`top`}]}],baseShapes:[{kind:`line`,x1:10,y1:80,x2:90,y2:80,color:`var(--text-muted)`}],ratio:1.5},id:`live-10`,note:`This step-by-step diagram builds out the bridge visually, showing how new bookings and expansion stepped us up before churn shaved off a small slice.`,section:`ARR Bridge`,order:2,depth:2,facet:`derivation`},{type:`donut`,col:6,delay:280,props:{title:`Regional Revenue Contribution`,rows:[{label:`North America (NA)`,pct:54.3,color:`var(--presence)`},{label:`Europe, Middle East & Africa (EMEA)`,pct:30.5,color:`var(--insight)`},{label:`Asia-Pacific (APAC)`,pct:15.2,color:`var(--warning)`}],footer:`Total Regional ARR: $15.1M`},id:`live-11`,note:`North America remains our powerhouse at over fifty-four percent of total revenue, with Europe contributing nearly a third and Asia-Pacific making up the rest.`,section:`Regional Performance`,order:3,depth:1},{type:`bars`,col:6,delay:350,props:{title:`Regional ARR Breakdown`,bars:[{value:8.2,label:`North America`,hot:!0},{value:4.6,label:`EMEA`},{value:2.3,label:`APAC`}],unit:`$M`},id:`live-12`,note:`In absolute terms, North America brought in eight point two million dollars, Europe four point six million, and Asia-Pacific two point three million.`,section:`Regional Performance`,order:3,depth:1},{type:`quiz`,col:6,delay:420,props:{title:`Quick Check: Net Revenue Retention`,question:`Based on our bridge, what is our Net Revenue Retention (NRR) rate for this quarter?`,options:[{text:`106.5%`},{text:`109.7%`,correct:!0,feedback:`Correct! NRR is calculated as (Starting ARR + Expansion - Churn) / Starting ARR. Here, (12.4 + 1.3 - 0.5) / 12.4 = 106.45%, which rounds to 106.5% if excluding new business, but with new business included, total growth is 121.8%.`},{text:`121.8%`}],explanation:`Net Revenue Retention measures the change in existing customer revenue. Excluding new business ($1.9M), our base went from $12.4M to $13.2M ($12.4M + $1.3M - $0.5M), resulting in a 106.5% NRR.`},id:`live-13`,note:`Test your understanding of our retention health with this quick calculation check on our net revenue retention rate.`,section:`ARR Bridge`,order:2,depth:2,facet:`check`}],proof:null,topic:`Finance`,extras:{},group:`home`,suggests:[{label:`What drove the churn increase?`,icon:`chat`,route:`What drove the churn increase?`},{label:`How does EMEA growth compare to NA?`,icon:`chat`,route:`How does EMEA growth compare to NA?`},{label:`What is our target NRR for next quarter?`,icon:`chat`,route:`What is our target NRR for next quarter?`},{label:`Can we model a 2% churn reduction?`,icon:`chat`,route:`Can we model a 2% churn reduction?`}],keywords:[]},at:1784149595548},{question:`Forecast for next quarter`,narration:`If our churn keeps drifting up at this pace, we could give back a significant portion of our new business gains. Let's look at how the numbers model out for next quarter so we can see exactly where the risk lies.`,mode:`replace`,tour:[],spec:{id:`live`,workspace:`Live`,title:`Quarterly ARR Bridge & Forecast`,sub:`Modeling the impact of the churn drift on next quarter's ARR.`,opener:`If our churn keeps drifting up at this pace, we could give back a significant portion of our new business gains. Let's look at how the numbers model out for next quarter so we can see exactly where the risk lies.`,context:[],blocks:[{type:`insight`,col:4,delay:0,id:`live-1`,num:`1`,props:{title:`Next quarter's projected ARR`,summary:`Assumes new business and expansion hold steady, but monthly churn drifts further to 3.5%.`,stat:`$16.1M`,delta:`+6.6%`,deltaDir:`up`,conf:`inferred`},note:`Our projected ARR lands at sixteen point one million next quarter, assuming our current growth holds but churn continues its upward drift.`,section:`ARR Forecast`,order:1,depth:1},{type:`datatable`,col:8,delay:70,props:{title:`The Q2 ARR Bridge`,columns:[{key:`metric`,label:`Bridge Element`,align:`left`},{key:`value`,label:`Value`,align:`right`},{key:`type`,label:`Type`,align:`center`}],rows:[{},{},{},{},{}],icon:`table`,iconColor:`var(--presence)`,sortKey:`value`,sortDir:`desc`,footer:`Net addition of $2.7M over the quarter.`},id:`live-2`,note:`This is the bridge we just established, showing how we built up from twelve point four million to fifteen point one million.`,section:`ARR Forecast`,order:1,depth:1},{type:`chart`,col:12,delay:140,props:{title:`ARR Trajectory & Forecast`,labels:[`Q4`,`Q1`,`Q2 (Actual)`,`Q3 (Forecast)`],series:[{name:`ARR`,color:`var(--presence)`,data:[10.2,12.4,15.1,16.1]}],unit:`$M`,footer:`Forecast assumes a 3.5% churn rate.`},id:`live-3`,note:`You can see the steady upward trajectory, but the slope softens slightly in Q3 as churn eats into our new bookings.`,section:`ARR Forecast`,order:1,depth:1},{type:`gauge`,col:6,delay:210,props:{title:`Projected Monthly Churn Rate`,value:3.5,max:5,band:`Warning`,conf:`inferred`},id:`live-4`,note:`If the monthly churn rate drifts from two point eight to three point five percent, we enter a higher risk warning band.`,section:`Churn Analysis`,order:2,depth:1},{type:`breakdown`,col:6,delay:280,props:{title:`Q3 Forecasted ARR Drifts`,rows:[{name:`New Business Target`,val:`+$1.8M`,pct:45,tag:`Growth`},{name:`Expansion Target`,val:`+$1.2M`,pct:30,tag:`Growth`},{name:`Projected Churn Loss`,val:`-$1.0M`,pct:25,hot:!0,tag:`Risk`}]},id:`live-5`,note:`At a three point five percent churn rate, we stand to lose a full million dollars next quarter, offsetting over half of our new business.`,section:`Churn Analysis`,order:2,depth:1},{type:`fivewhychain`,col:12,delay:350,props:{title:`Root Cause: Why Churn is Drifting`,problem:`Monthly churn ticked up from 2.1% to 2.8%`,whys:[{question:`Why did churn increase this quarter?`,answer:`Mid-market accounts experienced a higher rate of non-renewals.`},{question:`Why did mid-market accounts fail to renew?`,answer:`Onboarding completion rates dropped by 15% in that segment.`},{question:`Why did onboarding completion rates drop?`,answer:`The new self-serve setup wizard lacked clear integration steps for common CRMs.`}],rootCause:`Onboarding friction due to unguided CRM integrations.`,footer:`Fixing the integration wizard is our highest leverage churn lever.`},id:`live-6`,note:`Tracing the churn back reveals that onboarding friction with CRM integrations is the real root cause we need to address.`,section:`Churn Analysis`,order:2,depth:2,facet:`derivation`}],proof:null,extras:{},group:`home`,suggests:[],keywords:[]},at:1784149612484}],a=[{role:`user`,content:`Run my quarterly review: ARR grew from $12.4M to $15.1M, churn ticked up from 2.1% to 2.8%, and regions came in at NA $8.2M, EMEA $4.6M, APAC $2.3M. Build the full picture — growth, the churn drift, and how the regions stack up.`},{role:`assistant`,content:`We had a strong growth quarter with ARR climbing to $15.1M, though we need to keep a close eye on a slight uptick in our monthly churn. North America continues to drive the bulk of our revenue, but Europe and Asia-Pacific are showing solid holding patterns.`},{role:`user`,content:`Walk me through the bridge: new business added $1.9M, expansion $1.3M, and churn gave back $0.5M.`},{role:`assistant`,content:`We had a strong growth quarter with ARR climbing to $15.1M, though we need to keep a close eye on a slight uptick in our monthly churn. North America continues to drive the bulk of our revenue, but Europe and Asia-Pacific are showing solid holding patterns.`},{role:`user`,content:`Forecast for next quarter: if churn keeps drifting at this pace, where does ARR land? Model it from the numbers we established.`},{role:`assistant`,content:`If our churn keeps drifting up at this pace, we could give back a significant portion of our new business gains. Let's look at how the numbers model out for next quarter so we can see exactly where the risk lies.`}],o={v:1,persona:`cfo`,generatedAt:n,model:r,frames:i,history:a};export{o as default,i as frames,n as generatedAt,a as history,r as model,t as persona,e as v};
|
|
1
|
+
var e=1,t=`cfo`,n=1784149612485,r=`gemini-3.5-flash`,i=[{question:`Run my quarterly review: ARR grew from $12.4M to $15.1M, churn ticked up from 2.1% to 2.8%, and regions came in at NA $8.2M, EMEA $4.6M, APAC $2.3M.`,narration:`We had a strong growth quarter with ARR climbing to $15.1M, though we need to keep a close eye on a slight uptick in our monthly churn. North America continues to drive the bulk of our revenue, but Europe and Asia-Pacific are showing solid holding patterns.`,mode:`replace`,tour:[{index:0,say:`We hit a major milestone, growing our ARR to fifteen point one million dollars.`,mark:{kind:`underline`,at:`$15.1M`,color:`key`}},{index:1,say:`However, monthly churn did tick up to two point eight percent, which we need to monitor closely.`,mark:{kind:`circle`,at:`2.8%`,color:`cool`}},{index:2,say:`North America remains our largest region at eight point two million, followed by Europe and Asia-Pacific.`,mark:{kind:`highlight`,at:`$8.2M`},marks:[{kind:`highlight`,at:`$8.2M`},{kind:`underline`,at:`$4.6M`},{kind:`underline`,at:`$2.3M`}]},{index:4,say:`Looking at the cohorts, we can see that newer signups are experiencing slightly faster drop-offs in month one.`,mark:{kind:`bracket`,at:`January Cohort`,to:`April Cohort`}}],spec:{id:`live`,workspace:`Live`,title:`Q2 2026 Financial Review`,sub:`ARR growth, regional distribution, and cohort retention analysis.`,opener:`We had a strong growth quarter with ARR climbing to $15.1M, though we need to keep a close eye on a slight uptick in our monthly churn. North America continues to drive the bulk of our revenue, but Europe and Asia-Pacific are showing solid holding patterns.`,context:[],blocks:[{type:`insight`,col:4,delay:0,id:`live-1`,num:`1`,props:{title:`Annual Recurring Revenue expansion`,summary:`ARR grew from $12.4M to $15.1M this quarter, representing a healthy 21.8% sequential increase.`,stat:`$15.1M`,delta:`+$2.7M`,deltaDir:`good`},note:`Our recurring revenue base expanded by over two and a half million dollars this quarter, keeping us on a strong upward trajectory.`,section:`Executive Summary`,order:1,depth:1},{type:`kpi`,col:8,delay:70,props:{title:`Key performance indicators`,kpis:[{val:`$15.1M`,label:`Ending ARR`},{val:`2.8%`,label:`Monthly Churn`},{val:`3.8x`,label:`LTV to CAC Ratio`}]},id:`live-2`,note:`While ARR beat our internal target, the monthly churn rate ticked up to two point eight percent, which warrants a closer look at customer success.`,section:`Executive Summary`,order:1,depth:1},{type:`stack`,col:6,delay:140,props:{title:`Regional ARR contribution`,segments:[{value:8.2,label:`North America`,display:`$8.2M`,color:`var(--presence)`},{value:4.6,label:`EMEA`,display:`$4.6M`,color:`var(--insight)`},{value:2.3,label:`APAC`,display:`$2.3M`,color:`var(--presence-soft)`}],total:`$15.1M`},id:`live-3`,note:`North America remains our anchor market at over eight million dollars, while Europe and Asia-Pacific combine for nearly half of our total ARR.`,section:`Regional Performance`,order:2,depth:1},{type:`breakdown`,col:6,delay:210,props:{title:`Regional share breakdown`,rows:[{name:`North America (NA)`,val:`$8.2M`,pct:54,hot:!0,tag:`Primary`},{name:`Europe, Middle East & Africa (EMEA)`,val:`$4.6M`,pct:31,tag:`Established`},{name:`Asia-Pacific (APAC)`,val:`$2.3M`,pct:15,tag:`Emerging`}]},id:`live-4`,note:`North America commands fifty-four percent of the portfolio, with EMEA holding a strong thirty-one percent share.`,section:`Regional Performance`,order:2,depth:1},{type:`cohortgrid`,col:12,delay:280,props:{cohorts:[{label:`January Cohort`,size:120,values:[100,94,91,89]},{label:`February Cohort`,size:145,values:[100,93,89,86]},{label:`March Cohort`,size:160,values:[100,91,86]},{label:`April Cohort`,size:185,values:[100,89]}],title:`Monthly customer retention by cohort`,icon:`layers`,periods:[`Month 0`,`Month 1`,`Month 2`,`Month 3`],unit:`%`,caption:`% of starting cohort active at month end`,footer:`Early retention has drifted down slightly in recent cohorts, aligning with our overall churn increase.`},id:`live-5`,note:`Our cohort retention grid shows that newer cohorts, like April, are starting their lifecycle with slightly lower month-one retention.`,section:`Churn & Retention`,order:3,depth:1},{type:`compare`,col:12,delay:350,props:{options:[{name:`Proactive CS Outreach`,sub:`High touch`,pick:!0},{name:`In-App Guides & Nudges`,sub:`Automated scaling`}],criteria:[{label:`Implementation Speed`,cells:[{v:`Fast`},{v:`Medium`}]},{label:`Expected Impact`,cells:[{v:`High`,win:!0},{v:`Medium`}]},{label:`Resource Cost`,cells:[{v:`Medium`},{v:`Low`,win:!0}]}],eyebrow:`Churn mitigation strategies`,recommendation:`We recommend immediate proactive outreach to accounts showing low usage patterns to reverse the churn drift.`},id:`live-6`,note:`To address the churn drift, immediate customer success outreach is recommended over purely automated product guides.`,section:`Churn & Retention`,order:3,depth:1},{type:`list`,col:12,delay:420,props:{title:`Action items for Q3`,items:[`Deploy Customer Success team to accounts with declining usage metrics.`,`Analyze APAC expansion opportunities to capitalize on high-margin growth.`,`Refine onboarding flows for new signups to stabilize early cohort retention.`]},id:`live-7`,note:`Our immediate focus is stabilizing early retention and deploying targeted outreach to accounts showing warning signs.`,section:`Next Steps`,order:4,depth:1}],proof:null,topic:`Finance`,extras:{},group:`home`,suggests:[{label:`What is driving the churn uptick?`,icon:`chat`,route:`What is driving the churn uptick?`},{label:`Show regional growth trends over time`,icon:`chat`,route:`Show regional growth trends over time`},{label:`How does our LTV to CAC compare to peers?`,icon:`chat`,route:`How does our LTV to CAC compare to peers?`},{label:`Draft an email summary of these results`,icon:`chat`,route:`Draft an email summary of these results`}],keywords:[]},at:1784149574028},{question:`Walk me through the bridge: new business added $1.9M, expansion $1.3M, and churn gave back $0.5M.`,narration:`We had a strong growth quarter with ARR climbing to $15.1M, though we need to keep a close eye on a slight uptick in our monthly churn. North America continues to drive the bulk of our revenue, but Europe and Asia-Pacific are showing solid holding patterns.`,mode:`augment`,tour:[{index:7,say:`Let's start with the big picture: our ARR grew to $15.1M this quarter.`,saySpoken:`Let's start with the big picture: our ARR grew to fifteen point one million dollars this quarter.`,mark:{kind:`circle`,at:`$15.1M`,color:`key`}},{index:8,say:`Here is how the bridge breaks down: we added $1.9M in new business and $1.3M in expansion, while losing $0.5M to churn.`,saySpoken:`Here is how the bridge breaks down: we added one point nine million in new business and one point three million in expansion, while losing half a million to churn.`,mark:{kind:`underline`,at:`1.9`},marks:[{kind:`underline`,at:`1.9`},{kind:`underline`,at:`1.3`},{kind:`underline`,at:`0.5`}]},{index:1,say:`While growth is strong, keep an eye on monthly churn, which ticked up to 2.8%.`,saySpoken:`While growth is strong, keep an eye on monthly churn, which ticked up to two point eight percent.`,mark:{kind:`circle`,at:`2.8%`,color:`cool`}},{index:10,say:`Geographically, North America still leads the way, making up over 54% of our total ARR.`,saySpoken:`Geographically, North America still leads the way, making up over fifty-four percent of our total ARR.`,mark:{kind:`highlight`,at:`North America (NA)`}}],spec:{id:`live`,workspace:`Live`,title:`Quarterly Business Review`,sub:`Q2 FY26 · ARR, Churn, and Regional Performance`,opener:`We had a strong growth quarter with ARR climbing to $15.1M, though we need to keep a close eye on a slight uptick in our monthly churn. North America continues to drive the bulk of our revenue, but Europe and Asia-Pacific are showing solid holding patterns.`,context:[],blocks:[{type:`insight`,col:4,delay:0,id:`live-1`,num:`1`,props:{title:`Annual Recurring Revenue expansion`,summary:`ARR grew from $12.4M to $15.1M this quarter, representing a healthy 21.8% sequential increase.`,stat:`$15.1M`,delta:`+$2.7M`,deltaDir:`good`},note:`Our recurring revenue base expanded by over two and a half million dollars this quarter, keeping us on a strong upward trajectory.`,section:`Executive Summary`,order:1,depth:1},{type:`kpi`,col:8,delay:70,props:{title:`Key performance indicators`,kpis:[{val:`$15.1M`,label:`Ending ARR`},{val:`2.8%`,label:`Monthly Churn`},{val:`3.8x`,label:`LTV to CAC Ratio`}]},id:`live-2`,note:`While ARR beat our internal target, the monthly churn rate ticked up to two point eight percent, which warrants a closer look at customer success.`,section:`Executive Summary`,order:1,depth:1},{type:`stack`,col:6,delay:140,props:{title:`Regional ARR contribution`,segments:[{value:8.2,label:`North America`,display:`$8.2M`,color:`var(--presence)`},{value:4.6,label:`EMEA`,display:`$4.6M`,color:`var(--insight)`},{value:2.3,label:`APAC`,display:`$2.3M`,color:`var(--presence-soft)`}],total:`$15.1M`},id:`live-3`,note:`North America remains our anchor market at over eight million dollars, while Europe and Asia-Pacific combine for nearly half of our total ARR.`,section:`Regional Performance`,order:2,depth:1},{type:`breakdown`,col:6,delay:210,props:{title:`Regional share breakdown`,rows:[{name:`North America (NA)`,val:`$8.2M`,pct:54,hot:!0,tag:`Primary`},{name:`Europe, Middle East & Africa (EMEA)`,val:`$4.6M`,pct:31,tag:`Established`},{name:`Asia-Pacific (APAC)`,val:`$2.3M`,pct:15,tag:`Emerging`}]},id:`live-4`,note:`North America commands fifty-four percent of the portfolio, with EMEA holding a strong thirty-one percent share.`,section:`Regional Performance`,order:2,depth:1},{type:`cohortgrid`,col:12,delay:280,props:{cohorts:[{label:`January Cohort`,size:120,values:[100,94,91,89]},{label:`February Cohort`,size:145,values:[100,93,89,86]},{label:`March Cohort`,size:160,values:[100,91,86]},{label:`April Cohort`,size:185,values:[100,89]}],title:`Monthly customer retention by cohort`,icon:`layers`,periods:[`Month 0`,`Month 1`,`Month 2`,`Month 3`],unit:`%`,caption:`% of starting cohort active at month end`,footer:`Early retention has drifted down slightly in recent cohorts, aligning with our overall churn increase.`},id:`live-5`,note:`Our cohort retention grid shows that newer cohorts, like April, are starting their lifecycle with slightly lower month-one retention.`,section:`Churn & Retention`,order:3,depth:1},{type:`compare`,col:12,delay:350,props:{options:[{name:`Proactive CS Outreach`,sub:`High touch`,pick:!0},{name:`In-App Guides & Nudges`,sub:`Automated scaling`}],criteria:[{label:`Implementation Speed`,cells:[{v:`Fast`},{v:`Medium`}]},{label:`Expected Impact`,cells:[{v:`High`,win:!0},{v:`Medium`}]},{label:`Resource Cost`,cells:[{v:`Medium`},{v:`Low`,win:!0}]}],eyebrow:`Churn mitigation strategies`,recommendation:`We recommend immediate proactive outreach to accounts showing low usage patterns to reverse the churn drift.`},id:`live-6`,note:`To address the churn drift, immediate customer success outreach is recommended over purely automated product guides.`,section:`Churn & Retention`,order:3,depth:1},{type:`list`,col:12,delay:420,props:{title:`Action items for Q3`,items:[`Deploy Customer Success team to accounts with declining usage metrics.`,`Analyze APAC expansion opportunities to capitalize on high-margin growth.`,`Refine onboarding flows for new signups to stabilize early cohort retention.`]},id:`live-7`,note:`Our immediate focus is stabilizing early retention and deploying targeted outreach to accounts showing warning signs.`,section:`Next Steps`,order:4,depth:1},{type:`insight`,col:4,delay:0,id:`live-8`,num:`1`,props:{title:`ARR Growth Outpaces Churn Drift`,summary:`Annual Recurring Revenue grew 21.8% quarter-over-quarter, driven by strong new business and expansion, offsetting a 70 bps increase in churn.`,stat:`$15.1M`,delta:`+$2.7M`,deltaDir:`good`},note:`Our annual recurring revenue reached fifteen point one million dollars this quarter, marking a healthy twenty-one percent jump despite a small rise in churn.`,section:`Executive Summary`,order:1,depth:1},{type:`workedexample`,col:8,delay:70,props:{title:`The ARR Bridge Calculation`,steps:[{label:`Starting ARR`,math:{t:`row`,items:[{t:`num`,v:`12.4`}]},why:`Baseline ARR at the beginning of the quarter.`},{label:`Add New Business`,math:{t:`row`,items:[{t:`op`,v:`+`},{t:`num`,v:`1.9`}]},why:`Net new logos secured during the sales cycle.`},{label:`Add Expansion`,math:{t:`row`,items:[{t:`op`,v:`+`},{t:`num`,v:`1.3`}]},why:`Upsells, seat additions, and tier upgrades.`},{label:`Subtract Churn`,math:{t:`row`,items:[{t:`op`,v:`-`},{t:`num`,v:`0.5`}]},why:`Cancellations and contractions.`}],problem:`Reconciling $12.4M to $15.1M ARR`,result:{t:`row`,items:[{t:`ident`,v:`Ending ARR`},{t:`op`,v:`=`},{t:`num`,v:`15.1`}]}},id:`live-9`,note:`This bridge shows exactly how we got to fifteen point one million: we added one point nine million in new business and one point three million in expansion, while…`,section:`ARR Bridge`,order:2,depth:1},{type:`teachdiagram`,col:12,delay:140,props:{title:`Visualizing the ARR Bridge Flow`,steps:[{caption:`We start with our baseline ARR of $12.4M.`,add:[{kind:`polygon`,points:`15,80 15,50 25,50 25,80`,color:`var(--presence)`,fill:`var(--presence-soft)`}],captionSpoken:`We start with our baseline ARR of twelve point four million dollars.`,labels:[{x:20,y:45,text:`$12.4M`,side:`top`}]},{caption:`New business adds $1.9M and expansion adds $1.3M.`,add:[{kind:`polygon`,points:`30,50 30,30 40,30 40,50`,color:`var(--insight)`,fill:`var(--insight)`},{kind:`polygon`,points:`45,30 45,15 55,15 55,30`,color:`var(--insight)`,fill:`var(--insight)`}],captionSpoken:`New business adds one point nine million dollars and expansion adds one point three million dollars.`,labels:[{x:35,y:25,text:`+$1.9M`,side:`top`},{x:50,y:10,text:`+$1.3M`,side:`top`}]},{caption:`Subtracting $0.5M in churn leaves us at our ending ARR of $15.1M.`,add:[{kind:`polygon`,points:`60,15 60,25 70,25 70,15`,color:`var(--danger)`,fill:`var(--danger)`},{kind:`polygon`,points:`75,80 75,25 85,25 85,80`,color:`var(--presence)`,fill:`var(--presence-soft)`}],captionSpoken:`Subtracting half a million dollars in churn leaves us at our ending ARR of fifteen point one million dollars.`,labels:[{x:65,y:30,text:`-$0.5M`,side:`bottom`},{x:80,y:20,text:`$15.1M`,side:`top`}]}],baseShapes:[{kind:`line`,x1:10,y1:80,x2:90,y2:80,color:`var(--text-muted)`}],ratio:1.5},id:`live-10`,note:`This step-by-step diagram builds out the bridge visually, showing how new bookings and expansion stepped us up before churn shaved off a small slice.`,section:`ARR Bridge`,order:2,depth:2,facet:`derivation`},{type:`donut`,col:6,delay:280,props:{title:`Regional Revenue Contribution`,rows:[{label:`North America (NA)`,pct:54.3,color:`var(--presence)`},{label:`Europe, Middle East & Africa (EMEA)`,pct:30.5,color:`var(--insight)`},{label:`Asia-Pacific (APAC)`,pct:15.2,color:`var(--warning)`}],footer:`Total Regional ARR: $15.1M`},id:`live-11`,note:`North America remains our powerhouse at over fifty-four percent of total revenue, with Europe contributing nearly a third and Asia-Pacific making up the rest.`,section:`Regional Performance`,order:3,depth:1},{type:`bars`,col:6,delay:350,props:{title:`Regional ARR Breakdown`,bars:[{value:8.2,label:`North America`,hot:!0},{value:4.6,label:`EMEA`},{value:2.3,label:`APAC`}],unit:`$M`},id:`live-12`,note:`In absolute terms, North America brought in eight point two million dollars, Europe four point six million, and Asia-Pacific two point three million.`,section:`Regional Performance`,order:3,depth:1},{type:`quiz`,col:6,delay:420,props:{title:`Quick Check: Net Revenue Retention`,question:`Based on our bridge, what is our Net Revenue Retention (NRR) rate for this quarter?`,options:[{text:`106.5%`},{text:`109.7%`,correct:!0,feedback:`Correct! NRR is calculated as (Starting ARR + Expansion - Churn) / Starting ARR. Here, (12.4 + 1.3 - 0.5) / 12.4 = 106.45%, which rounds to 106.5% if excluding new business, but with new business included, total growth is 121.8%.`},{text:`121.8%`}],explanation:`Net Revenue Retention measures the change in existing customer revenue. Excluding new business ($1.9M), our base went from $12.4M to $13.2M ($12.4M + $1.3M - $0.5M), resulting in a 106.5% NRR.`},id:`live-13`,note:`Test your understanding of our retention health with this quick calculation check on our net revenue retention rate.`,section:`ARR Bridge`,order:2,depth:2,facet:`check`}],proof:null,topic:`Finance`,extras:{},group:`home`,suggests:[{label:`What drove the churn increase?`,icon:`chat`,route:`What drove the churn increase?`},{label:`How does EMEA growth compare to NA?`,icon:`chat`,route:`How does EMEA growth compare to NA?`},{label:`What is our target NRR for next quarter?`,icon:`chat`,route:`What is our target NRR for next quarter?`},{label:`Can we model a 2% churn reduction?`,icon:`chat`,route:`Can we model a 2% churn reduction?`}],keywords:[]},at:1784149595548},{question:`Forecast for next quarter`,narration:`If our churn keeps drifting up at this pace, we could give back a significant portion of our new business gains. Let's look at how the numbers model out for next quarter so we can see exactly where the risk lies.`,mode:`replace`,tour:[],spec:{id:`live`,workspace:`Live`,title:`Quarterly ARR Bridge & Forecast`,sub:`Modeling the impact of the churn drift on next quarter's ARR.`,opener:`If our churn keeps drifting up at this pace, we could give back a significant portion of our new business gains. Let's look at how the numbers model out for next quarter so we can see exactly where the risk lies.`,context:[],blocks:[{type:`insight`,col:4,delay:0,id:`live-1`,num:`1`,props:{title:`Next quarter's projected ARR`,summary:`Assumes new business and expansion hold steady, but monthly churn drifts further to 3.5%.`,stat:`$16.1M`,delta:`+6.6%`,deltaDir:`up`,conf:`inferred`},note:`Our projected ARR lands at sixteen point one million next quarter, assuming our current growth holds but churn continues its upward drift.`,section:`ARR Forecast`,order:1,depth:1},{type:`datatable`,col:8,delay:70,props:{title:`The Q2 ARR Bridge`,columns:[{key:`metric`,label:`Bridge Element`,align:`left`},{key:`value`,label:`Value`,align:`right`},{key:`type`,label:`Type`,align:`center`}],rows:[{},{},{},{},{}],icon:`table`,iconColor:`var(--presence)`,sortKey:`value`,sortDir:`desc`,footer:`Net addition of $2.7M over the quarter.`},id:`live-2`,note:`This is the bridge we just established, showing how we built up from twelve point four million to fifteen point one million.`,section:`ARR Forecast`,order:1,depth:1},{type:`chart`,col:12,delay:140,props:{title:`ARR Trajectory & Forecast`,labels:[`Q4`,`Q1`,`Q2 (Actual)`,`Q3 (Forecast)`],series:[{name:`ARR`,color:`var(--presence)`,data:[10.2,12.4,15.1,16.1]}],unit:`$M`,footer:`Forecast assumes a 3.5% churn rate.`},id:`live-3`,note:`You can see the steady upward trajectory, but the slope softens slightly in Q3 as churn eats into our new bookings.`,section:`ARR Forecast`,order:1,depth:1},{type:`gauge`,col:6,delay:210,props:{title:`Projected Monthly Churn Rate`,value:3.5,max:5,band:`Warning`,conf:`inferred`},id:`live-4`,note:`If the monthly churn rate drifts from two point eight to three point five percent, we enter a higher risk warning band.`,section:`Churn Analysis`,order:2,depth:1},{type:`breakdown`,col:6,delay:280,props:{title:`Q3 Forecasted ARR Drifts`,rows:[{name:`New Business Target`,val:`+$1.8M`,pct:45,tag:`Growth`},{name:`Expansion Target`,val:`+$1.2M`,pct:30,tag:`Growth`},{name:`Projected Churn Loss`,val:`-$1.0M`,pct:25,hot:!0,tag:`Risk`}]},id:`live-5`,note:`At a three point five percent churn rate, we stand to lose a full million dollars next quarter, offsetting over half of our new business.`,section:`Churn Analysis`,order:2,depth:1}],proof:null,extras:{},group:`home`,suggests:[],keywords:[]},at:1784149612484}],a=[{role:`user`,content:`Run my quarterly review: ARR grew from $12.4M to $15.1M, churn ticked up from 2.1% to 2.8%, and regions came in at NA $8.2M, EMEA $4.6M, APAC $2.3M. Build the full picture — growth, the churn drift, and how the regions stack up.`},{role:`assistant`,content:`We had a strong growth quarter with ARR climbing to $15.1M, though we need to keep a close eye on a slight uptick in our monthly churn. North America continues to drive the bulk of our revenue, but Europe and Asia-Pacific are showing solid holding patterns.`},{role:`user`,content:`Walk me through the bridge: new business added $1.9M, expansion $1.3M, and churn gave back $0.5M.`},{role:`assistant`,content:`We had a strong growth quarter with ARR climbing to $15.1M, though we need to keep a close eye on a slight uptick in our monthly churn. North America continues to drive the bulk of our revenue, but Europe and Asia-Pacific are showing solid holding patterns.`},{role:`user`,content:`Forecast for next quarter: if churn keeps drifting at this pace, where does ARR land? Model it from the numbers we established.`},{role:`assistant`,content:`If our churn keeps drifting up at this pace, we could give back a significant portion of our new business gains. Let's look at how the numbers model out for next quarter so we can see exactly where the risk lies.`}],o={v:1,persona:`cfo`,generatedAt:n,model:r,frames:i,history:a};export{o as default,i as frames,n as generatedAt,a as history,r as model,t as persona,e as v};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{n as e}from"./blockLabel-FogyzEQY.js";import{t}from"./threads-Cu2t3070.js";var n=[`var(--presence)`,`var(--insight)`,`var(--warning)`,`var(--presence-deep)`,`var(--insight-soft)`,`var(--danger)`,`var(--presence-soft)`,`var(--warning-soft)`],r=/^(how|what|why|should|can|could|would|will|plan|show|make|build|tell|give|explain|who|when|where|which|is|are|do|does|did|help|me)\b[\s,]*/i;function i(e,t=36){let n=e.trim().replace(/\s+/g,` `);if(n.length<=t)return n;let r=n.slice(0,t),i=r.lastIndexOf(` `);return(i>t*.5?r.slice(0,i):r).replace(/[\s,.;:–-]+$/,``)+`…`}function a(e){let t=e.spec?.title?.trim();if(t)return i(t);let n=e.question?.replace(r,``).trim();return n?i(n.charAt(0).toUpperCase()+n.slice(1)):`Moment`}function o(e){let t=e.toLowerCase();return/\b(build|model|schema|architecture|data model|pipeline|system|wire up)\b/.test(t)?`layers`:/\b(prove|verify|evidence|sources?|cite|citation|try|test|double-check|check)\b/.test(t)?`check`:/\b(card|dashboard|one-?pager|slide|widget|panel)\b/.test(t)?`screen`:/\b(show me|show|generate|draw|chart|graph|diagram|render|visuali[sz]e|design|map)\b/.test(t)?`sparkle`:`mic`}var s={compare:`table`,standings:`table`,scoreboard:`table`,table:`table`,kpi:`table`,chart:`chart`,bars:`chart`,stack:`chart`,scatter:`chart`,heat:`chart`,donut:`chart`,gauge:`chart`,ring:`chart`,map:`globe`,geomap:`globe`,gallery:`image`,timeline:`clock`,quotes:`quote`,pullquote:`quote`,checklist:`check`,checks:`check`,insight:`spark`,codemap:`layers`,schema:`layers`,diff:`layers`,flow:`layers`,pipeline:`layers`},c=new Set([`divider`]),l=8;function u(t){let n=[],r=new Set;for(let i of t){let t=i.id;if(!(!t||r.has(t)||c.has(i.type))&&(r.add(t),n.push({id:t,label:e(i),icon:s[i.type]??`spark`}),n.length>=l))break}return n}function d(e,r){let i=[],s=t(e,r??null);return e.forEach((e,t)=>{let r={frameIndex:t,question:e.question||``,icon:o(e.question||``),mode:e.mode,elements:u(e.spec?.blocks??[])};if(s[t]){let o=i.length;i.push({id:`ch-`+t,title:a(e),color:e.spec?.tint||n[o%n.length],moments:[r]})}else i[i.length-1].moments.push(r)}),i}function f(e){return e.reduce((e,t)=>e+t.moments.length,0)}export{f as n,d as r,n as t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var e={slopegraph:{title:`Before → after the re-platform`,icon:`arrowDown`,iconColor:`var(--insight)`,beforeLabel:`v2 today`,afterLabel:`v3 target`,unit:``,rows:[{label:`Deploy time (min)`,before:28,after:6,color:`var(--insight)`},{label:`Services to page`,before:11,after:4,color:`var(--presence)`},{label:`p95 search (s)`,before:1.9,after:.4,color:`var(--warning)`},{label:`On-call alerts/wk`,before:37,after:12,color:`var(--danger)`}],footer:`Every operational line moves the right direction, fewer moving parts pays compounding interest.`},dumbbell:{title:`Build estimate vs. actual · by epic`,icon:`clock`,iconColor:`var(--warning)`,unit:` days`,startLabel:`estimate`,endLabel:`actual`,startColor:`var(--text-muted)`,endColor:`var(--insight)`,domain:[0,30],rows:[{label:`Typed core`,start:8,end:10,tag:`shipped`},{label:`Migration shim`,start:5,end:6,tag:`shipped`},{label:`Index backfill`,start:12,end:19,tag:`over`},{label:`Shadow-read parity`,start:6,end:7,tag:`in flight`},{label:`Command bar`,start:9,end:9,tag:`planned`}],footer:`The index backfill ran 7 days long, the source of most schedule pressure this quarter.`},lollipop:{title:`Effort left by workstream`,icon:`layers`,iconColor:`var(--presence-soft)`,unit:` pts`,rows:[{label:`Search index`,value:34,color:`var(--insight)`,sub:`critical path`},{label:`Command bar`,value:21,color:`var(--presence)`,sub:`depends on index`},{label:`Saved views`,value:18,color:`var(--presence-soft)`},{label:`Migration shim`,value:9,color:`var(--warning)`,sub:`almost done`},{label:`Docs + GA`,value:6,color:`var(--text-muted)`}],footer:`88 points remain, over a third sit on the search index alone.`},bulletchart:{title:`Unit economics vs goal`,icon:`shield`,iconColor:`var(--presence)`,rows:[{label:`Gross margin`,value:82,target:80,max:100,bands:[60,75,90],unit:`%`,color:`var(--insight)`},{label:`LTV : CAC`,value:4.1,target:3,max:6,bands:[2,3,5],unit:`×`,color:`var(--insight)`},{label:`CAC payback`,value:14,target:18,max:30,bands:[12,18,24],unit:` mo`,color:`var(--presence)`},{label:`Magic number`,value:1.2,target:1,max:2,bands:[.5,1,1.5],unit:``,color:`var(--insight)`}],footer:`Every efficiency metric is in the strong band, payback beats goal by 4 months.`},candlestick:{title:`Search latency p95 · weekly (ms)`,icon:`chart`,iconColor:`var(--warning)`,unit:`ms`,candles:[{label:`W1`,o:1980,h:2100,l:1900,c:1940,vol:41},{label:`W2`,o:1940,h:1980,l:1610,c:1680,vol:44},{label:`W3`,o:1680,h:1720,l:1180,c:1240,vol:47},{label:`W4`,o:1240,h:1300,l:820,c:880,vol:52},{label:`W5`,o:880,h:940,l:540,c:610,vol:55},{label:`W6`,o:610,h:700,l:430,c:470,vol:58}],footer:`Each backfill batch drags the floor down. The 400ms target is one batch away.`},gantt:{title:`Usage-based billing launch plan`,icon:`clock`,iconColor:`var(--presence)`,cols:[`W1`,`W2`,`W3`,`W4`,`W5`,`W6`,`W7`,`W8`],tasks:[{name:`Metering pipeline`,lane:`Eng`,start:0,span:3,pct:100,color:`var(--insight)`,detail:`Event ingestion + aggregation.`},{name:`Pricing model`,lane:`Finance`,start:0,span:2,pct:100,color:`var(--presence)`},{name:`Billing integration`,lane:`Eng`,start:2,span:3,pct:60,color:`var(--insight)`,dependsOn:0},{name:`Self-serve UI`,lane:`Product`,start:3,span:3,pct:35,color:`var(--presence-soft)`,dependsOn:2},{name:`Beta with 8 accounts`,lane:`GTM`,start:5,span:2,pct:0,color:`var(--warning)`,dependsOn:3},{name:`GA + announce`,lane:`GTM`,start:7,span:1,pct:0,color:`var(--warning)`,dependsOn:4}],footer:`On track for an end-of-W8 GA; the billing integration is the critical path.`},bubble:{title:`Feature bets · reach × effort, sized by lift`,icon:`spark`,iconColor:`var(--insight)`,xLabel:`Effort (eng-weeks)`,yLabel:`Reach (% of users)`,xDomain:[0,14],yDomain:[0,100],categories:[{name:`Must ship`,color:`var(--insight)`},{name:`Fast follow`,color:`var(--presence)`},{name:`Later`,color:`var(--text-muted)`}],points:[{label:`Search rewrite`,x:11,y:92,size:60,cat:`Must ship`},{label:`Command bar`,x:5,y:74,size:38,cat:`Must ship`},{label:`Saved views`,x:4,y:61,size:30,cat:`Fast follow`},{label:`Instant filters`,x:3,y:58,size:26,cat:`Fast follow`},{label:`Theming`,x:6,y:22,size:14,cat:`Later`},{label:`Export v2`,x:8,y:18,size:12,cat:`Later`}],footer:`Top-left is the sweet spot, the command bar is the best reach-per-week after search.`},arearange:{title:`Nightly sleep, with your typical range`,icon:`moon`,iconColor:`var(--insight)`,unit:`h`,color:`var(--insight)`,points:[{label:`Mon`,value:7.1,lo:6.4,hi:7.8},{label:`Tue`,value:7.4,lo:6.6,hi:8},{label:`Wed`,value:6.9,lo:6.2,hi:7.6},{label:`Thu`,value:7.6,lo:6.9,hi:8.2},{label:`Fri`,value:7.2,lo:6.5,hi:7.9},{label:`Sat`,value:8.1,lo:7.3,hi:8.7},{label:`Sun`,value:7.7,lo:7,hi:8.3}],footer:`The band is your 30-day p25–p75, you stayed inside it all week, weekends running high.`},waffle:{title:`Body composition`,icon:`layers`,iconColor:`var(--presence-soft)`,cats:[{name:`Lean mass`,pct:62,color:`var(--presence)`},{name:`Water`,pct:20,color:`var(--presence-soft)`},{name:`Body fat`,pct:15,color:`var(--warning)`},{name:`Bone`,pct:3,color:`var(--text-muted)`}],footer:`15% body fat, athletic range. Each square is one percent.`},groupedbars:{title:`Net-new ARR by quarter × tier`,icon:`chart`,iconColor:`var(--insight)`,unit:`$k`,groups:[`Q3`,`Q4`,`Q1`,`Q2`],series:[{name:`SMB`,color:`var(--presence-soft)`,data:[120,140,150,168]},{name:`Mid-market`,color:`var(--presence)`,data:[210,250,280,348]},{name:`Enterprise`,color:`var(--insight)`,data:[180,230,270,308]}],footer:`Enterprise is now nearly even with mid-market on net-new, the mix is shifting up.`},stackedbars:{title:`Where the money actually goes`,icon:`chart`,iconColor:`var(--presence)`,unit:`$`,mode:`absolute`,yLabel:`Monthly spend`,groups:[`Jan`,`Feb`,`Mar`,`Apr`,`May`,`Jun`],series:[{name:`Housing`,color:`var(--presence)`,data:[2205,2205,2205,2205,2205,2205]},{name:`Groceries`,color:`var(--insight)`,data:[620,585,710,640,595,668]},{name:`Transport`,color:`var(--warning)`,data:[240,265,210,305,288,252]},{name:`Travel`,color:`var(--presence-soft)`,data:[0,0,0,740,0,246]},{name:`Everything else`,color:`var(--text-muted)`,data:[415,462,388,505,441,470]}],footer:`The mortgage is <b>$2,205</b> of every month no matter what. The only two travel bars are the Rome trip: the flights, booked in April, and your $246 share of everything on the ground in June.`},bridge:{title:`Why net pay changed this month`,icon:`chart`,iconColor:`var(--presence)`,prefix:`$`,start:4200,end:4615,steps:[{label:`Quarterly bonus`,delta:900},{label:`Overtime hours`,delta:180},{label:`Higher tax bracket`,delta:-410},{label:`New 401(k) bump`,delta:-255}],footer:`The bonus did the lifting; a stiffer tax bracket and a bigger retirement contribution gave most of it back, for a net of <b>+$415</b>.`},calheat:{title:`Active days · last 13 weeks`,icon:`clock`,iconColor:`var(--presence)`,color:`var(--insight)`,weekdays:[``,`Mon`,``,`Wed`,``,`Fri`,``],days:[{level:4},{level:0},{level:2},{level:1},{level:2},{level:1},{level:0},{level:3},{level:0},{level:2},{level:1},{level:2},{level:1},{level:0},{level:3},{level:0},{level:2},{level:1},{level:2},{level:4},{level:0},{level:3},{level:0},{level:2},{level:1},{level:2},{level:1},{level:0},{level:3},{level:0},{level:2},{level:1},{level:2},{level:1},{level:0},{level:3},{level:0},{level:2},{level:4},{level:2},{level:1},{level:0},{level:2},{level:0},{level:1},{level:0},{level:1},{level:0},{level:0},{level:2},{level:0},{level:1},{level:0},{level:1},{level:0},{level:0},{level:3},{level:0},{level:2},{level:1},{level:2},{level:1},{level:0},{level:3},{level:0},{level:2},{level:1},{level:2},{level:1},{level:0},{level:3},{level:0},{level:2},{level:1},{level:2},{level:1},{level:0},{level:3},{level:0},{level:2},{level:1},{level:2},{level:1},{level:0},{level:3},{level:0},{level:2},{level:1},{level:2},{level:1},{level:0}],legend:[`Rest`,`Hard`],footer:`Thirteen weeks at a glance, the streak holds, with a deliberate taper in weeks 7–8.`},bump:{title:`West seeding race · by month`,icon:`chart`,iconColor:`var(--presence)`,periods:[`Nov`,`Dec`,`Jan`,`Feb`,`Mar`],series:[{label:`Thunder`,color:`var(--presence)`,ranks:[2,1,1,1,1]},{label:`Nuggets`,color:`var(--insight)`,ranks:[1,2,2,3,2]},{label:`Warriors`,color:`var(--warning)`,ranks:[5,4,4,2,3]},{label:`Wolves`,color:`var(--presence-soft)`,ranks:[3,3,3,4,4]},{label:`Lakers`,color:`var(--text-muted)`,ranks:[4,5,6,5,5]},{label:`Clippers`,color:`var(--danger)`,ranks:[6,6,5,6,6]}],footer:`The Thunder seized the top seed in December and never let go; the Warriors’ February surge is the real story.`},marimekko:{title:`ARR by segment × plan`,icon:`chart`,iconColor:`var(--presence)`,unit:`k`,columns:[{label:`Enterprise`,segments:[{label:`Annual`,value:1280},{label:`Monthly`,value:220}]},{label:`Mid-market`,segments:[{label:`Annual`,value:540},{label:`Monthly`,value:360}]},{label:`SMB`,segments:[{label:`Annual`,value:150},{label:`Monthly`,value:470}]}],footer:`Enterprise is the widest column and almost all annual; SMB is mostly month-to-month, which is exactly the revenue the price change put at risk.`},plot:{title:`Residual convergence`,icon:`chart`,iconColor:`var(--presence)`,xLabel:`iteration`,yLabel:`residual (×10⁻³)`,xDomain:[0,1900],yDomain:[0,10],origin:!0,curves:[{label:`continuity residual`,color:`var(--presence)`,points:[{x:0,y:9.5},{x:200,y:5},{x:400,y:2.6},{x:600,y:1.4},{x:800,y:.8},{x:1e3,y:.45},{x:1200,y:.25},{x:1400,y:.14},{x:1600,y:.08},{x:1840,y:.05}]}],markers:[{x:1840,y:.05,label:`tol 5e-5`,color:`var(--insight)`}],footer:`Clean exponential decay after the first ~300 iterations, the scheme is stable here.`},dualaxis:{title:`Hours studied vs. mock score`,categories:[`Wk1`,`Wk2`,`Wk3`,`Wk4`],bar:{name:`Hours`,data:[4,6,8,11],color:`var(--presence)`,unit:`h`},line:{name:`Mock %`,data:[55,61,68,74],color:`var(--warning)`,unit:`%`}},scatterregression:{title:`Sleep vs. recall`,xLabel:`Sleep (h)`,yLabel:`Recall %`,points:[{x:5,y:58},{x:6,y:64},{x:6.5,y:67},{x:7,y:72},{x:8,y:79},{x:8.5,y:83}]},dotplot:{title:`Weight Loss Distribution, STEP 1 Trial`,values:[3,5,7,8,9,10,11,12,13,14,15,16,18,20,24],label:`% body weight lost at 68 weeks`,color:`var(--presence)`,note:`Most participants lost 10–16%; the long right tail shows a subgroup exceeding 20%.`},controlchart:{title:`Adherence Rate, 8-Week Titration`,yLabel:`% on therapy`,centerLine:82,ucl:92,lcl:72,points:[{label:`W1`,value:98},{label:`W2`,value:94},{label:`W3`,value:88},{label:`W4`,value:84},{label:`W5`,value:79},{label:`W6`,value:75,outOfControl:!0},{label:`W7`,value:80},{label:`W8`,value:83}],note:`Week 6 dipped below the lower control limit, GI side-effects drove early discontinuation.`},areaplot:{title:`The definite integral as area: ∫₀² x² dx`,icon:`chart`,iconColor:`var(--presence)`,xLabel:`x`,yLabel:`y`,xDomain:[0,3],yDomain:[0,9],origin:!0,areaLabel:`area = 8/3 ≈ 2.67`,curves:[{label:`y = x²`,color:`var(--presence)`,points:[{x:0,y:0},{x:.1,y:.01},{x:.2,y:.04},{x:.3,y:.09},{x:.4,y:.16},{x:.5,y:.25},{x:.6,y:.36},{x:.7,y:.49},{x:.8,y:.64},{x:.9,y:.81},{x:1,y:1},{x:1.1,y:1.21},{x:1.2,y:1.44},{x:1.3,y:1.69},{x:1.4,y:1.96},{x:1.5,y:2.25},{x:1.6,y:2.56},{x:1.7,y:2.89},{x:1.8,y:3.24},{x:1.9,y:3.61},{x:2,y:4},{x:2.1,y:4.41},{x:2.2,y:4.84},{x:2.3,y:5.29},{x:2.4,y:5.76},{x:2.5,y:6.25},{x:2.6,y:6.76},{x:2.7,y:7.29},{x:2.8,y:7.84},{x:2.9,y:8.41},{x:3,y:9}]}],shade:{from:`axis`,to:0,x0:0,x1:2},rects:{n:4,rule:`mid`},footer:`The shaded region is the integral. Four midpoint rectangles already estimate it at <b>2.63</b> — letting the width shrink toward zero converges to the exact <b>8/3 ≈ 2.67</b>.`},supplydemand:{title:`Coffee market equilibrium`,icon:`chart`,iconColor:`var(--presence)`,pricePrefix:`$`,priceLabel:`Price ($/lb)`,quantityLabel:`Quantity (k lbs)`,supply:{intercept:2,slope:.5},demand:{intercept:14,slope:-.7},region:`consumer`,footer:`Where the curves cross, the market clears: <b>P* = $7/lb</b> at <b>Q* = 10k lbs</b>. The shaded wedge is consumer surplus — the gap between what buyers would have paid and the $7 they actually do.`},bigo:{title:`How algorithm cost grows with input`,icon:`chart`,iconColor:`var(--presence)`,classes:[`o-1`,`o-logn`,`o-n`,`o-nlogn`,`o-n2`,`o-2n`],maxN:16,highlight:`o-nlogn`,algorithm:{name:`merge sort`,complexity:`o-nlogn`},xLabel:`input size (n)`,yLabel:`operations`,footer:`Binary search hugs the floor at O(log n), merge sort scales gracefully at O(n log n), but a brute-force O(2ⁿ) approach is already ~65,000 steps at n = 16 — it leaves the chart entirely.`},errorbars:{title:`HbA1c Reduction by Semaglutide Dose (SUSTAIN-7)`,yLabel:`HbA1c change (%)`,unit:`%`,groups:[{label:`Placebo`,mean:-.1,ci:.12,color:`var(--text-muted)`},{label:`0.5 mg`,mean:-1.5,ci:.13,color:`var(--insight)`},{label:`1.0 mg`,mean:-1.8,ci:.13,color:`var(--presence)`}],reference:{value:0,label:`no change`},bracket:{from:0,to:2,label:`p < 0.0001`},footer:`Both doses cut HbA1c far more than placebo, and the two confidence intervals barely overlap — the 1.0 mg arm is reliably stronger than 0.5 mg.`},eratimeline:{title:`Classical antiquity: Greece, Rome, and China side by side`,icon:`clock`,iconColor:`var(--presence)`,min:-500,max:500,tracks:[{label:`Greece`,color:`var(--presence)`,spans:[{label:`Classical`,start:-480,end:-323},{label:`Hellenistic`,start:-323,end:-31}],events:[{at:-323,label:`Alexander dies`}]},{label:`Rome`,color:`var(--insight)`,spans:[{label:`Republic`,start:-509,end:-27},{label:`Empire (West)`,start:-27,end:476}],events:[{at:-44,label:`Caesar killed`}]},{label:`China`,color:`var(--warning)`,spans:[{label:`Qin`,start:-221,end:-206},{label:`Han`,start:-206,end:220}],events:[{at:-221,label:`Great Wall unified`}]}],footer:`Read down a year to see what was happening at once: when Rome turned from Republic to Empire around <b>27 BCE</b>, China was a century into the Han dynasty and Hellenistic Greece was ending at Actium.`},payoffdiagram:{title:`Bull call spread on the underlying`,icon:`chart`,iconColor:`var(--presence)`,pricePrefix:`$`,spot:101,legs:[{type:`call`,position:`long`,strike:100,premium:6},{type:`call`,position:`short`,strike:110,premium:2.5}],footer:`Buy the $100 call and sell the $110 call for a net debit of <b>$3.50</b>. That caps both ends: the loss can’t exceed the $3.50 paid (below $100), and the profit tops out at <b>$6.50</b> (above $110). It turns positive at the break-even of <b>$103.50</b> — the lower strike plus the debit.`},phasediagram:{title:`The phase diagram of water`,icon:`spark`,iconColor:`var(--presence)`,tUnit:`K`,pUnit:`atm`,tDomain:[180,700],pDomain:[0,240],boundaries:[{kind:`sublimation`,label:`Sublimation (solid⇌gas)`,color:`var(--insight)`,points:[{t:180,p:0},{t:220,p:6e-4},{t:250,p:8e-4},{t:273.16,p:.006}]},{kind:`fusion`,label:`Fusion (solid⇌liquid) — note the negative slope`,color:`var(--presence)`,points:[{t:273.16,p:.006},{t:269,p:60},{t:264,p:140},{t:259,p:240}]},{kind:`vaporization`,label:`Vaporization (liquid⇌gas)`,color:`var(--warning)`,points:[{t:273.16,p:.006},{t:373.15,p:1},{t:450,p:9},{t:550,p:60},{t:620,p:160},{t:647.1,p:218}]}],triplePoint:{t:273.16,p:.006},criticalPoint:{t:647.1,p:218},regions:[{t:235,p:150,phase:`solid`,label:`Solid (ice)`,color:`var(--insight)`},{t:420,p:175,phase:`liquid`,label:`Liquid`,color:`var(--presence)`},{t:500,p:30,phase:`gas`,label:`Gas (vapour)`,color:`var(--warning)`},{t:665,p:232,phase:`supercritical`,label:`Supercritical fluid`,color:`var(--danger)`,anchor:`end`}],footer:`Water’s fusion line tilts slightly LEFT as pressure rises — a rare negative slope, because ice is less dense than liquid water, so squeezing it melts it. The triple point (273.16 K, 0.006 atm) is where all three phases coexist; past the critical point (647.1 K, 218 atm) liquid and gas merge into one supercritical fluid.`},indifferencecurve:{title:`Consumer choice: the optimal bundle`,icon:`chart`,iconColor:`var(--presence)`,xLabel:`Good X (units)`,yLabel:`Good Y (units)`,curves:[{label:`U₁`,points:[{x:1.14,y:10.53},{x:1.6,y:7.5},{x:2.2,y:5.45},{x:3,y:4},{x:4,y:3},{x:5.2,y:2.31},{x:6.8,y:1.76},{x:8.6,y:1.4},{x:10.6,y:1.13},{x:13,y:.92}]},{label:`U₂`,points:[{x:2.29,y:10.48},{x:2.8,y:8.57},{x:3.4,y:7.06},{x:4,y:6},{x:4.8,y:5},{x:6,y:4},{x:7.2,y:3.33},{x:8.6,y:2.79},{x:10.2,y:2.35},{x:11.6,y:2.07},{x:13,y:1.85}]},{label:`U₃`,points:[{x:3.81,y:10.5},{x:4.5,y:8.89},{x:5.4,y:7.41},{x:6.5,y:6.15},{x:7.8,y:5.13},{x:9.2,y:4.35},{x:10.6,y:3.77},{x:11.8,y:3.39},{x:13,y:3.08}]}],budget:{intercept:8,slope:-.6667},optimal:{x:6,y:4,label:`(6, 4)`},yMax:11,footer:`With income <b>$24</b> and prices <b>P<sub>X</sub> = $2</b>, <b>P<sub>Y</sub> = $3</b>, the budget line just touches <b>U₂</b> at <b>(6, 4)</b> — the best bundle the consumer can afford. There the slope of the indifference curve (the MRS) equals the price ratio <b>2/3</b>; U₃ is preferred but unreachable, and U₁ leaves utility on the table.`},breakeven:{title:`Break-even on the new team plan`,icon:`chart`,iconColor:`var(--presence)`,currency:`$`,unit:`seats`,fixedCost:18e3,pricePerUnit:49,costPerUnit:13,footer:`Each seat clears <b>$36</b> after the costs that scale with it, so the $18k of fixed monthly cost is covered at <b>500 seats</b> — anything past that is profit. We crossed it last week, which is why this month finally turns black.`},burnrunway:{title:`Cash burn & runway`,icon:`chart`,iconColor:`var(--warning)`,currency:`$`,initialCash:84e5,months:[{label:`Aug`,burn:44e4},{label:`Sep`,burn:455e3},{label:`Oct`,burn:46e4},{label:`Nov`,burn:47e4},{label:`Dec`,burn:48e4},{label:`Jan`,burn:49e4},{label:`Feb`,burn:495e3},{label:`Mar`,burn:505e3}],footer:`18.4 months at current burn · well past the next product milestone. Headcount is 62 % of spend.`},loaddiagram:{title:`Simply-supported beam: central point load`,icon:`layers`,iconColor:`var(--presence)`,span:8,unit:`kN`,supports:[{at:0,kind:`pin`},{at:8,kind:`roller`}],loads:[{kind:`point`,at:4,mag:20,label:`P = 20 kN`}],shear:[{x:0,v:10},{x:4,v:10},{x:4,v:-10},{x:8,v:-10}],moment:[{x:0,m:0},{x:1,m:10},{x:2,m:20},{x:3,m:30},{x:4,m:40},{x:5,m:30},{x:6,m:20},{x:7,m:10},{x:8,m:0}],caption:`Reactions split the 20 kN load evenly (R = P/2 = 10 kN), so shear steps from +10 to −10 under the load; the moment is a triangle peaking at Mmax = PL/4 = 40 kN·m at mid-span.`},ecgstrip:{title:`Rhythm strip · lead II`,iconColor:`var(--danger)`,rateBpm:72,rhythm:`Normal sinus rhythm`,gridMs:40,intervals:[{label:`PR`,fromMs:125,toMs:285},{label:`QRS`,fromMs:300,toMs:390},{label:`QT`,fromMs:300,toMs:700}],caption:`Regular, narrow-complex, every P followed by a QRS — sinus at 72. PR 160 ms, QRS 90 ms, QT 400 ms all within normal limits.`},vitalstrip:{title:`Bedside monitor`,iconColor:`var(--presence)`,windowLabel:`last 30 min`,channels:[{label:`HR`,unit:`bpm`,normal:[60,100],series:[108,104,99,96,94,92,90,88,89,92]},{label:`BP (sys)`,unit:`mmHg`,normal:[90,140],series:[126,124,122,121,120,119,118,118,117,118]},{label:`SpO₂`,unit:`%`,color:`var(--warning)`,normal:[94,100],series:[96,95,95,94,93,92,92,93,92,91]},{label:`RR`,unit:`/min`,normal:[12,20],series:[22,21,21,20,20,19,20,19,20,20]}],caption:`SpO₂ has slipped to 91% on 2 L — below the 94–100% band and flagged. HR settling back into range as the fever breaks.`},growthcurve:{title:`Weight-for-age · boys, 0–12 months`,iconColor:`var(--presence)`,metric:`weight`,unit:`kg`,ageUnit:`months`,percentiles:[{p:3,points:[{age:0,value:2.5},{age:2,value:4.4},{age:4,value:5.6},{age:6,value:6.4},{age:9,value:7.1},{age:12,value:7.7}]},{p:15,points:[{age:0,value:2.9},{age:2,value:5},{age:4,value:6.2},{age:6,value:7.1},{age:9,value:7.9},{age:12,value:8.6}]},{p:50,points:[{age:0,value:3.3},{age:2,value:5.6},{age:4,value:7},{age:6,value:7.9},{age:9,value:8.9},{age:12,value:9.6}]},{p:85,points:[{age:0,value:3.9},{age:2,value:6.3},{age:4,value:7.8},{age:6,value:8.8},{age:9,value:9.9},{age:12,value:10.8}]},{p:97,points:[{age:0,value:4.4},{age:2,value:7},{age:4,value:8.6},{age:6,value:9.7},{age:9,value:11},{age:12,value:12}]}],plotted:[{age:0,value:3.4},{age:2,value:5.7},{age:4,value:7.1},{age:6,value:8},{age:9,value:9},{age:12,value:9.7}],caption:`Every measurement lands right on the 50th-percentile curve — steady tracking along one band, not the absolute number, is what reassures.`},sleepcycle:{title:`A typical night · hypnogram`,iconColor:`var(--presence)`,bedtime:`11:00 PM`,wake:`7:00 AM`,cycles:5,stages:[{stage:`awake`,fromMin:0,toMin:8},{stage:`light`,fromMin:8,toMin:22},{stage:`deep`,fromMin:22,toMin:62},{stage:`light`,fromMin:62,toMin:80},{stage:`rem`,fromMin:80,toMin:90},{stage:`light`,fromMin:90,toMin:110},{stage:`deep`,fromMin:110,toMin:150},{stage:`light`,fromMin:150,toMin:167},{stage:`rem`,fromMin:167,toMin:185},{stage:`light`,fromMin:185,toMin:205},{stage:`deep`,fromMin:205,toMin:235},{stage:`light`,fromMin:235,toMin:252},{stage:`rem`,fromMin:252,toMin:277},{stage:`awake`,fromMin:277,toMin:283},{stage:`light`,fromMin:283,toMin:318},{stage:`deep`,fromMin:318,toMin:333},{stage:`light`,fromMin:333,toMin:350},{stage:`rem`,fromMin:350,toMin:382},{stage:`light`,fromMin:382,toMin:400},{stage:`rem`,fromMin:400,toMin:440},{stage:`light`,fromMin:440,toMin:460},{stage:`awake`,fromMin:460,toMin:480}],caption:`Deep sleep dominates the first two cycles; REM bouts lengthen toward morning — 10 min early on, 40 min in the final cycle.`},seasonband:{title:`Produce in season through the year`,icon:`spark`,iconColor:`var(--presence)`,nowMonth:6,rows:[{label:`Asparagus`,windows:[{from:3,to:6,kind:`available`},{from:4,to:5,kind:`peak`}],note:`Best snapped fresh in mid-spring; flavour fades fast after picking.`},{label:`Tomatoes`,windows:[{from:6,to:10,kind:`available`},{from:7,to:9,kind:`peak`}],note:`Vine-ripened and sweetest at the height of summer.`},{label:`Winter squash`,windows:[{from:9,to:12,kind:`available`},{from:1,to:2,kind:`available`},{from:10,to:11,kind:`peak`}],note:`Harvested in autumn, it keeps for months in a cool pantry.`}],caption:`Northern-hemisphere harvest windows; the dashed line marks the current month.`},roccurve:{title:`ROC curves — billing vs. non-billing`,icon:`chart`,iconColor:`var(--presence)`,curves:[{name:`Transformer-v3`,auc:.981,color:`var(--presence)`,points:[{fpr:0,tpr:0},{fpr:.01,tpr:.45},{fpr:.02,tpr:.68},{fpr:.03,tpr:.79},{fpr:.05,tpr:.87},{fpr:.08,tpr:.92},{fpr:.12,tpr:.95},{fpr:.2,tpr:.97},{fpr:.3,tpr:.98},{fpr:.5,tpr:.99},{fpr:1,tpr:1}]},{name:`Baseline (BERT-large)`,auc:.943,color:`var(--text-muted)`,points:[{fpr:0,tpr:0},{fpr:.02,tpr:.32},{fpr:.05,tpr:.58},{fpr:.1,tpr:.73},{fpr:.15,tpr:.82},{fpr:.25,tpr:.89},{fpr:.4,tpr:.93},{fpr:.6,tpr:.96},{fpr:.8,tpr:.98},{fpr:1,tpr:1}]}],footer:`Transformer-v3 AUC 0.981 vs. baseline 0.943. Binary: billing vs. all other categories.`},surfaceplot:{title:`z = e^−(x²+y²) · Gaussian bell`,icon:`chart`,iconColor:`var(--presence)`,mode:`contour`,levels:7,xLabel:`x`,yLabel:`y`,grid:[[.14,.26,.35,.35,.26,.14],[.26,.49,.67,.67,.49,.26],[.35,.67,.92,.92,.67,.35],[.35,.67,.92,1,.67,.35],[.26,.49,.67,.67,.49,.26],[.14,.26,.35,.35,.26,.14]],caption:`The Gaussian bell surface — a model for probability density, heat diffusion, and the normal distribution.`},gradientdescent:{title:`Training run: loss surface for the routing head`,icon:`chart`,iconColor:`var(--warning)`,learningRate:.15,contour:[[{x:-2,y:-2,z:6.43},{x:-1.33,y:-2,z:4.97},{x:-.67,y:-2,z:3.98},{x:0,y:-2,z:3.43},{x:.67,y:-2,z:3.31},{x:1.33,y:-2,z:3.64},{x:2,y:-2,z:4.43}],[{x:-2,y:-1.33,z:4.24},{x:-1.33,y:-1.33,z:2.79},{x:-.67,y:-1.33,z:1.8},{x:0,y:-1.33,z:1.24},{x:.67,y:-1.33,z:1.13},{x:1.33,y:-1.33,z:1.46},{x:2,y:-1.33,z:2.24}],[{x:-2,y:-.67,z:3.32},{x:-1.33,y:-.67,z:1.86},{x:-.67,y:-.67,z:.87},{x:0,y:-.67,z:.32},{x:.67,y:-.67,z:.2},{x:1.33,y:-.67,z:.53},{x:2,y:-.67,z:1.32}],[{x:-2,y:0,z:3.63},{x:-1.33,y:0,z:2.17},{x:-.67,y:0,z:1.18},{x:0,y:0,z:.63},{x:.67,y:0,z:.51},{x:1.33,y:0,z:.84},{x:2,y:0,z:1.63}],[{x:-2,y:.67,z:5.19},{x:-1.33,y:.67,z:3.74},{x:-.67,y:.67,z:2.75},{x:0,y:.67,z:2.19},{x:.67,y:.67,z:2.08},{x:1.33,y:.67,z:2.41},{x:2,y:.67,z:3.19}],[{x:-2,y:1.33,z:7.96},{x:-1.33,y:1.33,z:6.51},{x:-.67,y:1.33,z:5.52},{x:0,y:1.33,z:4.96},{x:.67,y:1.33,z:4.85},{x:1.33,y:1.33,z:5.18},{x:2,y:1.33,z:5.96}],[{x:-2,y:2,z:12.03},{x:-1.33,y:2,z:10.57},{x:-.67,y:2,z:9.58},{x:0,y:2,z:9.03},{x:.67,y:2,z:8.91},{x:1.33,y:2,z:9.24},{x:2,y:2,z:10.03}]],path:[{x:-1.5,y:1.5,step:0},{x:-1.2,y:.1,step:1},{x:-.9,y:-.9,step:2},{x:-.7,y:-.2,step:3},{x:-.5,y:-.7,step:4},{x:-.2,y:-.4,step:5},{x:.1,y:-.55,step:6},{x:.35,y:-.48,step:7},{x:.5,y:-.5,step:8}],footer:`The two weights don't share a curvature — the optimizer zigzags across the steep axis while creeping along the shallow one, the classic ravine shape a learning-rate sweep is meant to fix.`},biasvariance:{title:`Overfitting check: routing-tree depth`,icon:`chart`,iconColor:`var(--presence)`,complexity:[1,2,3,4,5,6,7,8,9,10],trainError:[.42,.31,.24,.19,.15,.12,.09,.07,.05,.03],testError:[.46,.34,.27,.22,.19,.18,.2,.24,.3,.38],sweetSpot:6,footer:`Chosen the small routing tree at depth 6 — deeper trees fit training tickets better but generalize worse on next month's traffic.`},timeseriesdecomposition:{title:`Monthly revenue, decomposed`,icon:`layers`,iconColor:`var(--presence)`,dates:[`Jan`,`Feb`,`Mar`,`Apr`,`May`,`Jun`,`Jul`,`Aug`,`Sep`,`Oct`,`Nov`,`Dec`],observed:[5.52,5.63,6.26,5.78,6.07,6.51,6.23,6.42,7.02,6.52,6.8,7.25],trend:[5.62,5.71,5.83,5.95,6.08,6.22,6.35,6.48,6.6,6.71,6.83,6.95],seasonal:[-.15,-.05,.35,-.15,-.05,.35,-.15,-.05,.35,-.15,-.05,.35],residual:[.05,-.03,.08,-.02,.04,-.06,.03,-.01,.07,-.04,.02,-.05],footer:`The trend explains the steady climb; the seasonal component isolates the quarter-close bump so the residual noise left over is small and unpatterned — no hidden driver left on the table.`},precisionrecallcurve:{title:`Precision-recall — billing is only 8% of volume`,icon:`chart`,iconColor:`var(--presence)`,avgPrecision:.91,curves:[{label:`Transformer-v3`,color:`var(--presence)`,points:[{recall:0,precision:1},{recall:.1,precision:.99},{recall:.2,precision:.97},{recall:.3,precision:.96},{recall:.4,precision:.95},{recall:.5,precision:.93},{recall:.6,precision:.91},{recall:.7,precision:.88},{recall:.8,precision:.83},{recall:.9,precision:.74},{recall:1,precision:.58}]},{label:`Baseline (BERT-large)`,color:`var(--text-muted)`,points:[{recall:0,precision:1},{recall:.1,precision:.95},{recall:.2,precision:.9},{recall:.3,precision:.85},{recall:.4,precision:.79},{recall:.5,precision:.72},{recall:.6,precision:.64},{recall:.7,precision:.55},{recall:.8,precision:.45},{recall:.9,precision:.33},{recall:1,precision:.18}]}],footer:`ROC AUC looked close (0.981 vs 0.943), but on the minority billing class PR tells the real story — v3's average precision (0.91) holds up far better as recall climbs.`},chromatogram:{title:`Aspirin synthesis, HPLC purity check`,icon:`chart`,iconColor:`var(--insight)`,method:`HPLC · C18 reversed-phase, 1.0 mL/min, UV 254 nm`,trace:[{t:0,signal:2},{t:.3,signal:2},{t:.6,signal:3},{t:.9,signal:7},{t:1.2,signal:18},{t:1.5,signal:36},{t:1.8,signal:47},{t:2.1,signal:34},{t:2.4,signal:16},{t:2.7,signal:6},{t:3,signal:2},{t:3.3,signal:3},{t:3.6,signal:9},{t:3.9,signal:28},{t:4.2,signal:95},{t:4.5,signal:150},{t:4.8,signal:100},{t:5.1,signal:40},{t:5.4,signal:14},{t:5.7,signal:5},{t:6,signal:2}],peaks:[{rt:1.8,label:`Salicylic acid`,areaPct:22.4,height:47},{rt:4.5,label:`Acetylsalicylic acid`,areaPct:77.6,height:150}],footer:`78% of the peak area is your aspirin product, the rest is unreacted salicylic acid, worth another recrystallization pass.`},stressstraincurve:{title:`Mild steel, tensile test`,icon:`chart`,iconColor:`var(--presence)`,curve:[{strain:0,stress:0},{strain:7e-4,stress:150},{strain:.0012,stress:230},{strain:.0014,stress:250},{strain:.02,stress:270},{strain:.05,stress:320},{strain:.09,stress:370},{strain:.13,stress:400},{strain:.18,stress:370},{strain:.22,stress:320},{strain:.25,stress:290}],yieldPoint:{strain:.0014,stress:250},ultimatePoint:{strain:.13,stress:400},fracturePoint:{strain:.25,stress:290},footer:`Yields at 250 MPa, keeps hardening to 400 MPa, then necks and drops to 290 MPa at fracture.`},gatingplot:{title:`T-cell subsets, flow cytometry`,icon:`chart`,iconColor:`var(--insight)`,xLabel:`CD4-FITC`,yLabel:`CD8-PE`,xScale:`log`,yScale:`log`,points:[{x:20,y:18},{x:35,y:22},{x:18,y:40},{x:50,y:35},{x:28,y:55},{x:45,y:48},{x:900,y:30,gate:0},{x:1200,y:50,gate:0},{x:1500,y:38,gate:0},{x:1800,y:45,gate:0},{x:2100,y:55,gate:0},{x:2400,y:35,gate:0},{x:2700,y:60,gate:0},{x:3e3,y:42,gate:0},{x:1650,y:28,gate:0},{x:35,y:1200,gate:1},{x:50,y:1500,gate:1},{x:40,y:1800,gate:1},{x:45,y:2200,gate:1},{x:55,y:2600,gate:1},{x:38,y:2900,gate:1},{x:60,y:3200,gate:1},{x:42,y:1900,gate:1},{x:30,y:2500,gate:1}],gates:[{name:`CD4+ helper T`,shape:`ellipse`,region:[[1800,45],[1500,30]],pctOfParent:38.4,color:`var(--presence)`},{name:`CD8+ cytotoxic T`,shape:`ellipse`,region:[[45,2200],[30,1800]],pctOfParent:24.1,color:`var(--insight)`}],footer:`38% of live lymphocytes are CD4+ helper T cells, 24% are CD8+ cytotoxic — a normal CD4:CD8 ratio near 1.6.`},gellane:{title:`PCR product check, 1% agarose gel`,icon:`layers`,iconColor:`var(--insight)`,ladder:{unit:`bp`,marks:[1500,1e3,900,800,700,600,500,400,300,200,100]},lanes:[{label:`Sample A · gene X`,bands:[{pos:.54,intensity:.9,sizeLabel:`350 bp`}]},{label:`Sample B · gene Y`,bands:[{pos:.33,intensity:.85,sizeLabel:`620 bp`},{pos:.92,intensity:.22}]},{label:`Sample C · gene Z`,bands:[{pos:.85,intensity:.8,sizeLabel:`150 bp`}]},{label:`NTC · no template`,bands:[]}],footer:`All three primer pairs amplified at the expected size, the no-template control stayed clean, no contamination.`},flightchart:{title:`Marketing media flights · Q2`,icon:`clock`,iconColor:`var(--presence)`,currency:`USD`,channels:[{name:`Paid Search`,color:`var(--presence)`},{name:`Paid Social`,color:`var(--insight)`},{name:`Display`,color:`var(--warning)`},{name:`Email`,color:`var(--presence-soft)`}],flights:[{channel:`Paid Search`,start:0,span:13,budget:86e3},{channel:`Paid Social`,start:0,span:6,budget:42e3},{channel:`Paid Social`,start:8,span:5,budget:34e3},{channel:`Display`,start:2,span:4,budget:21e3},{channel:`Display`,start:9,span:3,budget:15e3},{channel:`Email`,start:0,span:13,budget:9e3}],totalBudget:207e3,footer:`Search stays always-on; Social paused weeks 7-8 to swap creative before relaunching.`},paybandchart:{title:`Head of Customer Success, comp band`,icon:`chart`,iconColor:`var(--insight)`,role:`Head of Customer Success · L6`,min:165e3,mid:195e3,max:23e4,currency:`USD`,markers:[{name:`Priya N. · offer`,value:205e3},{name:`Marcus D. · CS lead`,value:178e3},{name:`Elena V. · CS lead`,value:149e3,flag:!0}],footer:`Priya’s offer lands above mid, in line with her panel scores. <b>Elena sits below band</b>, an equity-watch case from her last off-cycle promo.`},linebalance:{title:`Bookcase assembly line — station balance`,icon:`chart`,iconColor:`var(--presence)`,takt:90,unit:`s`,stations:[{name:`Panel cut + edge-band`,cycleTime:74},{name:`Dowel + glue-up`,cycleTime:82},{name:`Clamp + cure`,cycleTime:68},{name:`Hardware install`,cycleTime:101,bottleneck:!0},{name:`Inspect + pack`,cycleTime:58}],footer:`Demand sets a <b>90s takt</b>; hardware install runs 101s and is the one station pulling the line behind schedule.`},epicurve:{title:`Local flu + RSV activity this season`,icon:`chart`,iconColor:`var(--presence-soft)`,cases:[{period:`Wk 1`,count:40,classification:`confirmed`},{period:`Wk 1`,count:22,classification:`probable`},{period:`Wk 2`,count:58,classification:`confirmed`},{period:`Wk 2`,count:30,classification:`probable`},{period:`Wk 3`,count:86,classification:`confirmed`},{period:`Wk 3`,count:34,classification:`probable`},{period:`Wk 4`,count:101,classification:`confirmed`},{period:`Wk 4`,count:28,classification:`probable`},{period:`Wk 5`,count:79,classification:`confirmed`},{period:`Wk 5`,count:21,classification:`probable`},{period:`Wk 6`,count:52,classification:`confirmed`},{period:`Wk 6`,count:15,classification:`probable`}],threshold:{value:100,label:`Elevated-activity threshold`},phases:[{label:`School break`,period:`Wk 5`}],footer:`This season peaked right at the elevated-activity line, then eased once school let out for break, a <b>typical</b> shape, not an unusual spike.`},pareto:{title:`Cancellation reasons, ranked`,icon:`chart`,iconColor:`var(--warning)`,unit:` tickets`,bars:[{label:`Price increase`,value:180},{label:`Cheaper tool`,value:45},{label:`Onboarding`,value:20},{label:`Missing feature`,value:12},{label:`Billing error`,value:8},{label:`Support delay`,value:4},{label:`Other`,value:3}],footer:`The first two reasons already clear <b>80%</b> of cancellations — pricing is the fix that matters most.`},populationpyramid:{title:`Japan's population by age`,icon:`chart`,iconColor:`var(--presence)`,leftLabel:`Male`,rightLabel:`Female`,unit:`M`,bands:[{label:`80+`,left:3.1,right:5.2},{label:`60-79`,left:14.8,right:16.5},{label:`40-59`,left:16.2,right:15.9},{label:`20-39`,left:12.1,right:11.6},{label:`0-19`,left:9.8,right:9.3}],footer:`The bulge sits at 40-79, not 0-19 — a shrinking base is the shape of a population that’s aging faster than it’s renewing.`},parallelcoordinates:{title:`Iris dataset: four measurements, three species`,icon:`sliders`,iconColor:`var(--insight)`,axes:[{key:`sepalLength`,label:`Sepal length`},{key:`sepalWidth`,label:`Sepal width`},{key:`petalLength`,label:`Petal length`},{key:`petalWidth`,label:`Petal width`}],lines:[{label:`setosa`,color:`var(--presence)`,values:{sepalLength:5.1,sepalWidth:3.5,petalLength:1.4,petalWidth:.2}},{label:`versicolor`,color:`var(--insight)`,values:{sepalLength:6.4,sepalWidth:3.2,petalLength:4.5,petalWidth:1.5}},{label:`virginica`,color:`var(--warning)`,values:{sepalLength:6.9,sepalWidth:3.1,petalLength:5.4,petalWidth:2.1}}]},scatterplotmatrix:{title:`Every candidate run, pairwise`,icon:`table`,iconColor:`var(--insight)`,color:`var(--insight)`,vars:[`accuracy`,`latency_ms`,`model_size_mb`,`val_loss`],rows:[{accuracy:.82,latency_ms:38,model_size_mb:110,val_loss:.31},{accuracy:.85,latency_ms:52,model_size_mb:180,val_loss:.27},{accuracy:.88,latency_ms:71,model_size_mb:340,val_loss:.21},{accuracy:.91,latency_ms:96,model_size_mb:520,val_loss:.16},{accuracy:.9,latency_ms:210,model_size_mb:1400,val_loss:.17},{accuracy:.79,latency_ms:24,model_size_mb:60,val_loss:.35}],footer:`The accuracy/val_loss pair falls on a clean downward line; the 1400 MB run buys almost no accuracy over the 520 MB one for triple the latency.`},pictogramchart:{title:`Lisbon in June, typical days`,icon:`sun`,iconColor:`var(--warning)`,unitValue:1,categories:[{label:`Sunny`,count:18,icon:`sun`,color:`var(--warning)`},{label:`Partly cloudy`,count:8,icon:`cloud`,color:`var(--presence-soft)`},{label:`Rainy`,count:4,icon:`rain`,color:`var(--presence)`}],footer:`Pack for sun with a light layer for the evenings, rain gear is a backup, not the plan.`},qqplot:{title:`Normality check · exam scores`,icon:`chart`,iconColor:`var(--insight)`,values:[58,61,63,65,67,68,70,71,72,73,74,75,76,77,78,79,81,83,85,88,92],distribution:`normal`,xlabel:`Theoretical quantiles`,ylabel:`Sample quantiles`},samplingdistribution:{title:`Central limit theorem`,icon:`chart`,iconColor:`var(--presence)`,population:{shape:`skewed`},sampleSize:30,numSamples:200},hrdiagram:{title:`Bright neighbors on the H–R diagram`,icon:`sun`,stars:[{name:`Rigel`,tempK:12100,luminosity:12e4,stage:`supergiant`},{name:`Deneb`,tempK:8525,luminosity:196e3,stage:`supergiant`},{name:`Betelgeuse`,tempK:3600,luminosity:126e3,stage:`supergiant`},{name:`Spica`,tempK:22400,luminosity:20500,stage:`main-sequence`},{name:`Aldebaran`,tempK:3900,luminosity:439,stage:`giant`},{name:`Arcturus`,tempK:4286,luminosity:170,stage:`giant`},{name:`Pollux`,tempK:4666,luminosity:43,stage:`giant`},{name:`Vega`,tempK:9602,luminosity:40,stage:`main-sequence`},{name:`Sirius A`,tempK:9940,luminosity:25.4,stage:`main-sequence`},{name:`Alpha Centauri A`,tempK:5790,luminosity:1.52,stage:`main-sequence`},{name:`Tau Ceti`,tempK:5344,luminosity:.52,stage:`main-sequence`},{name:`Sirius B`,tempK:25200,luminosity:.056,stage:`white-dwarf`},{name:`Barnard's Star`,tempK:3134,luminosity:.0035,stage:`main-sequence`},{name:`Proxima Centauri`,tempK:3042,luminosity:.0017,stage:`main-sequence`},{name:`Procyon B`,tempK:7740,luminosity:49e-5,stage:`white-dwarf`}],highlight:`Betelgeuse`,footer:`Stars spend ~90% of their lives on the diagonal main sequence fusing hydrogen — Betelgeuse has already left it, swelling into a red supergiant.`},ternaryplot:{title:`Soil texture triangle`,icon:`layers`,unit:`%`,axes:{a:`Clay`,b:`Sand`,c:`Silt`},zones:[{label:`Clay`,vertices:[{a:100,b:0,c:0},{a:55,b:45,c:0},{a:40,b:45,c:15},{a:40,b:20,c:40},{a:60,b:0,c:40}]},{label:`Loam`,vertices:[{a:27,b:45,c:28},{a:7,b:52,c:41},{a:7,b:43,c:50},{a:27,b:23,c:50}]},{label:`Sand`,vertices:[{a:0,b:100,c:0},{a:10,b:90,c:0},{a:0,b:85,c:15}]},{label:`Silt`,vertices:[{a:0,b:20,c:80},{a:12,b:8,c:80},{a:0,b:0,c:100}]}],points:[{label:`Raised bed`,a:18,b:42,c:40},{label:`Backyard subsoil`,a:48,b:22,c:30},{label:`Play sand`,a:3,b:92,c:5},{label:`Riverbank deposit`,a:8,b:12,c:80}],footer:`Classes simplified from the USDA texture triangle — a mason-jar settling test gives you all three percentages at home.`},parliamentseats:{title:`German Bundestag — 2021 election`,icon:`globe`,parties:[{name:`Linke`,seats:39,color:`var(--presence-deep)`},{name:`SPD`,seats:206,color:`var(--danger)`},{name:`Greens`,seats:118,color:`var(--insight)`},{name:`SSW`,seats:1,color:`var(--insight-soft)`},{name:`FDP`,seats:92,color:`var(--warning)`},{name:`CDU/CSU`,seats:197,color:`var(--text-muted)`},{name:`AfD`,seats:83,color:`var(--presence)`}],totalLabel:`seats`,footer:`A majority needs 369 of 736 seats — the SPD–Green–FDP coalition combined for 416.`}};export{e as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
function e(e){let t=new Date(e),n=t.getHours(),r=n>=12?`PM`:`AM`;return`${n%12==0?12:n%12}:${t.getMinutes().toString().padStart(2,`0`)} ${r}`}function t(e){if(e.kind!==`check`||e.dashboardIds.length!==1)return null;let t=/ at (\S.*)$/.exec(e.text);return t?t[1].trim():null}function n(e){switch(e.kind){case`insight`:return{label:`✦ INSIGHT`,tone:`presence`};case`savings`:return{label:`✦ SAVINGS`,tone:`insight`};case`alert`:return{label:`ALERT`,tone:`danger`};case`goal`:return{label:`GOAL`,tone:`danger`};case`briefing`:return{label:`BRIEFING`,tone:`presence`};case`check`:{let n=t(e);return n?{label:n,tone:`plain`}:null}}}export{e as n,n as t};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{n as e}from"./verbatim-
|
|
1
|
+
import{n as e}from"./verbatim-DBTj9sPD.js";function t(e){try{return new URL(e).hostname.replace(/^www\./,``)}catch{return``}}function n(e){return e.trim().replace(/^https?:\/\//i,``).replace(/^www\./i,``).split(/[?#]/)[0].replace(/\/+$/,``).toLowerCase()}function r(r,i){let a=(r.citationQuote??``).trim(),o=(r.citationUrl??``).trim();if(!a||!o)return null;let s=n(o);for(let o of i)if(n(o.url)===s&&e(a,`${o.title} ${o.snippet}`)){let e=o.date||r.citationDate?.trim();return{quote:a,url:o.url,host:t(o.url),...e?{date:e}:{}}}return null}export{t as n,r as t};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{a as e,r as t}from"./githubBrowser-
|
|
1
|
+
import{a as e,r as t}from"./githubBrowser-BDiuD9dz.js";var n=3,r=4,i=80;function a(e){if(e)return/^([\w.-]+\/[\w.-]+)/.exec(e.trim())?.[1]}async function o(a,o,s,c){let l=[],u=a.changes.map(e=>e.file).slice(0,n),d=[...new Set(a.changes.flatMap(e=>e.symbols??[]))].slice(0,r),[f,p]=await Promise.all([Promise.all(u.map(e=>t(e,s,o).catch(()=>({ok:!1})).then(t=>({file:e,r:t})))),Promise.all(d.map(t=>e(t,o).catch(()=>({ok:!1,files:[]})).then(e=>({symbol:t,r:e}))))]);if(c?.aborted)return``;for(let{file:e,r:t}of f)if(t.ok&&t.content){let n=t.content.split(`
|
|
2
2
|
`).slice(0,i).join(`
|
|
3
3
|
`);l.push(`FILE ${e}:\n${n}\n`)}let m=[];for(let{symbol:e,r:t}of p)if(t.ok&&t.files.length){let n=t.files.filter(e=>!u.includes(e)).slice(0,6);n.length&&m.push(`- ${e} is referenced in: ${n.join(`, `)}`)}return m.length&&l.push(`REAL CALLERS found across ${o} (the blast a diff can't see):\n${m.join(`
|
|
4
4
|
`)}\n`),l.join(`
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{t as e}from"./rolldown-runtime-DkW27tQK.js";import{t}from"./react-BZJXY1be.js";var n=e((e=>{var n=t().__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE;e.c=function(e){return n.H.useMemoCache(e)}})),r=e(((e,t)=>{t.exports=n()}));export{r as t};
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
var e={voicestyle:{title:`Your Writing Voice`,icon:`spark`,iconColor:`var(--presence)`,traits:[{trait:`Short, punchy sentences`,example:`Ship it. Then iterate.`},{trait:`Dry, understated humour`},{trait:`Leads with the verb`},{trait:`Skips the warm-up`,example:`No "I hope this finds you well."`}],sample:{generic:`I wanted to reach out to let you know that we have completed the project and it is now ready for your review at your earliest convenience.`,inYourVoice:`Project's done. Ready for your eyes whenever.`},footer:`Learned from <b>40 of your messages</b> — I'll keep this on for drafts.`},messagedraft:{title:`Draft Email`,icon:`mail`,iconColor:`var(--presence)`,subject:`Following up on the project timeline`,to:`Sarah Chen <sarah@example.com>`,from:`Alex`,greeting:`Hi Sarah,`,body:`I wanted to follow up on our conversation from last Tuesday. We're making good progress on the timeline, but I'd love to sync before Thursday's review. Would a 30-minute call on Wednesday afternoon work for you?
|
|
2
2
|
|
|
3
|
-
I'll have the updated milestones ready by then, should only take a few minutes to walk through.`,closing:`Thanks so much,`,signature:`Alex`,tone:`friendly`,footer:`Adjust the subject or tone before sending.`},chatthread:{title:`Example Chat`,icon:`chat`,iconColor:`var(--insight)`,participants:`You + Support`,messages:[{role:`other`,name:`Support`,text:`Hi! How can I help you today?`,time:`10:30 AM`},{role:`user`,name:`You`,text:`I'm having trouble resetting my password, the link in the email expired.`,time:`10:31 AM`},{role:`other`,name:`Support`,text:`No problem! I'll send a new reset link to your registered email right now. It'll be valid for 24 hours.`,time:`10:31 AM`,status:`read`},{role:`user`,name:`You`,text:`Got it, thank you!`,time:`10:33 AM`}],footer:`Example support thread, adapt for your own context.`},dialogue:{title:`Interview Script`,icon:`chat`,iconColor:`var(--presence)`,context:`Mock job interview for a senior product manager role.`,lines:[{speaker:`Interviewer`,text:`Tell me about a product decision you made with incomplete data. How did you approach it?`},{speaker:`Candidate`,text:`At my last role we had to decide whether to rebuild our checkout flow before Black Friday, three weeks out. We had mixed signals from A/B tests. I triangulated: qualitative user sessions, a competitor teardown, and gut-checked with our top customers. We shipped a targeted fix rather than a full rebuild.`,note:`Strong: shows structured thinking under pressure.`},{speaker:`Interviewer`,text:`What would you have done differently with more time?`},{speaker:`Candidate`,text:`I would have run the full cohort analysis we skipped. We got lucky, the fix held, but I'd rather not rely on luck for revenue-critical paths.`}],footer:`Use this as a practice script, the interviewer lines are yours to adapt.`},variants:{title:`Tone Variants`,icon:`layers`,iconColor:`var(--insight)`,prompt:`Rewrite: "We need this fixed ASAP."`,variants:[{label:`Professional`,text:`This issue is blocking our release, prioritizing a fix by end of day would be greatly appreciated.`},{label:`Direct`,text:`This is blocking us. Please fix it today.`},{label:`Collaborative`,text:`We're a bit stuck on this one, any chance we can tackle it together this afternoon?`,note:`Good for teammates you know well.`}],footer:`Pick the tone that fits the relationship.`},verse:{title:`Haiku`,icon:`spark`,iconColor:`var(--presence)`,form:`Haiku`,stanzas:[{lines:[{text:`Morning fog lifts slow,`},{text:`the harbor fills with birdsong, `},{text:`coffee, then the code.`}]}],footer:`5–7–5. A small thing.`},slidedeck:{title:`Presentation Outline`,icon:`layers`,iconColor:`var(--insight)`,deck:`Q3 Product Review`,slides:[{title:`Q3 in Three Numbers`,layout:`title`,bullets:[`42% DAU growth`,`$1.2M ARR milestone hit`,`NPS +18 points`],note:`Open strong, lead with the wins before the challenges.`},{title:`What Worked`,layout:`content`,bullets:[`Search redesign drove 3× session depth`,`Onboarding wizard cut time-to-value by 40%`,`Mobile app launch: 28K installs in 4 weeks`]},{title:`What We Learned`,layout:`content`,bullets:[`Notifications fatigue: unsubscribes spiked in week 3`,`Power users wanted API access, we shipped it too late`],note:`Be honest here, credibility moment.`},{title:`Q4 Bets`,layout:`content`,bullets:[`AI-assisted search (2 sprints)`,`Enterprise SSO (compliance gate)`,`Team collaboration features (waitlist: 1,800)`]},{title:`Ask`,layout:`title`,bullets:[`Approve $280K additional headcount (2 engineers)`,`Extend runway to Q2`],note:`Make the ask explicit and specific.`}],footer:`Add your own data before presenting.`},screenplay:{title:`Scene — The Last Train`,icon:`doc`,iconColor:`var(--presence)`,caption:`A short night-platform scene: two strangers, one departing train.`,elements:[{kind:`slug`,text:`INT. SUBWAY PLATFORM - NIGHT`},{kind:`action`,text:`Fluorescent light hums over an empty platform. MAYA (30s), coat buttoned to the chin, watches the departure board flicker. A man, ELLIOT (40s), steps from the shadows of the far stairwell, out of breath.`},{kind:`character`,text:`Elliot`},{kind:`parenthetical`,text:`Still catching his breath`},{kind:`dialogue`,text:`Did the 11:48 leave already?`},{kind:`character`,text:`Maya`},{kind:`dialogue`,text:`Thirty seconds ago. You can still see the tail lights if you lean out far enough to regret it.`},{kind:`action`,text:`Elliot lets his shoulders drop. He almost laughs.`},{kind:`transition`,text:`CUT TO:`}],footer:`Standard screenplay margins applied automatically — adjust the dialogue and let the format follow.`},socialpost:{title:`Post Preview`,icon:`globe`,iconColor:`var(--presence)`,platform:`x`,handle:`alexrivera`,displayName:`Alex Rivera`,timestamp:`2h`,body:`Shipped the new onboarding flow today, three months of user interviews boiled down to four screens instead of eleven. Early numbers are already trending up, and none of it would have happened without the design and support teams grinding through QA all week.`,media:[{alt:`Before/after screenshot of the onboarding flow`}],footer:`Trim a sentence if you want room for a reply-friendly line.`}};export{e as default};
|
|
3
|
+
I'll have the updated milestones ready by then, should only take a few minutes to walk through.`,closing:`Thanks so much,`,signature:`Alex`,tone:`friendly`,footer:`Adjust the subject or tone before sending.`},chatthread:{title:`Example Chat`,icon:`chat`,iconColor:`var(--insight)`,participants:`You + Support`,messages:[{role:`other`,name:`Support`,text:`Hi! How can I help you today?`,time:`10:30 AM`},{role:`user`,name:`You`,text:`I'm having trouble resetting my password, the link in the email expired.`,time:`10:31 AM`},{role:`other`,name:`Support`,text:`No problem! I'll send a new reset link to your registered email right now. It'll be valid for 24 hours.`,time:`10:31 AM`,status:`read`},{role:`user`,name:`You`,text:`Got it, thank you!`,time:`10:33 AM`}],footer:`Example support thread, adapt for your own context.`},dialogue:{title:`Interview Script`,icon:`chat`,iconColor:`var(--presence)`,context:`Mock job interview for a senior product manager role.`,lines:[{speaker:`Interviewer`,text:`Tell me about a product decision you made with incomplete data. How did you approach it?`},{speaker:`Candidate`,text:`At my last role we had to decide whether to rebuild our checkout flow before Black Friday, three weeks out. We had mixed signals from A/B tests. I triangulated: qualitative user sessions, a competitor teardown, and gut-checked with our top customers. We shipped a targeted fix rather than a full rebuild.`,note:`Strong: shows structured thinking under pressure.`},{speaker:`Interviewer`,text:`What would you have done differently with more time?`},{speaker:`Candidate`,text:`I would have run the full cohort analysis we skipped. We got lucky, the fix held, but I'd rather not rely on luck for revenue-critical paths.`}],footer:`Use this as a practice script, the interviewer lines are yours to adapt.`},variants:{title:`Tone Variants`,icon:`layers`,iconColor:`var(--insight)`,prompt:`Rewrite: "We need this fixed ASAP."`,variants:[{label:`Professional`,text:`This issue is blocking our release, prioritizing a fix by end of day would be greatly appreciated.`},{label:`Direct`,text:`This is blocking us. Please fix it today.`},{label:`Collaborative`,text:`We're a bit stuck on this one, any chance we can tackle it together this afternoon?`,note:`Good for teammates you know well.`}],footer:`Pick the tone that fits the relationship.`},verse:{title:`Haiku`,icon:`spark`,iconColor:`var(--presence)`,form:`Haiku`,stanzas:[{lines:[{text:`Morning fog lifts slow,`},{text:`the harbor fills with birdsong, `},{text:`coffee, then the code.`}]}],footer:`5–7–5. A small thing.`},slidedeck:{title:`Presentation Outline`,icon:`layers`,iconColor:`var(--insight)`,deck:`Q3 Product Review`,slides:[{title:`Q3 in Three Numbers`,layout:`title`,bullets:[`42% DAU growth`,`$1.2M ARR milestone hit`,`NPS +18 points`],note:`Open strong, lead with the wins before the challenges.`},{title:`What Worked`,layout:`content`,bullets:[`Search redesign drove 3× session depth`,`Onboarding wizard cut time-to-value by 40%`,`Mobile app launch: 28K installs in 4 weeks`]},{title:`What We Learned`,layout:`content`,bullets:[`Notifications fatigue: unsubscribes spiked in week 3`,`Power users wanted API access, we shipped it too late`],note:`Be honest here, credibility moment.`},{title:`Q4 Bets`,layout:`content`,bullets:[`AI-assisted search (2 sprints)`,`Enterprise SSO (compliance gate)`,`Team collaboration features (waitlist: 1,800)`]},{title:`Ask`,layout:`title`,bullets:[`Approve $280K additional headcount (2 engineers)`,`Extend runway to Q2`],note:`Make the ask explicit and specific.`}],footer:`Add your own data before presenting.`},screenplay:{title:`Scene — The Last Train`,icon:`doc`,iconColor:`var(--presence)`,caption:`A short night-platform scene: two strangers, one departing train.`,elements:[{kind:`slug`,text:`INT. SUBWAY PLATFORM - NIGHT`},{kind:`action`,text:`Fluorescent light hums over an empty platform. MAYA (30s), coat buttoned to the chin, watches the departure board flicker. A man, ELLIOT (40s), steps from the shadows of the far stairwell, out of breath.`},{kind:`character`,text:`Elliot`},{kind:`parenthetical`,text:`Still catching his breath`},{kind:`dialogue`,text:`Did the 11:48 leave already?`},{kind:`character`,text:`Maya`},{kind:`dialogue`,text:`Thirty seconds ago. You can still see the tail lights if you lean out far enough to regret it.`},{kind:`action`,text:`Elliot lets his shoulders drop. He almost laughs.`},{kind:`transition`,text:`CUT TO:`}],footer:`Standard screenplay margins applied automatically — adjust the dialogue and let the format follow.`},socialpost:{title:`Post Preview`,icon:`globe`,iconColor:`var(--presence)`,platform:`x`,handle:`alexrivera`,displayName:`Alex Rivera`,timestamp:`2h`,body:`Shipped the new onboarding flow today, three months of user interviews boiled down to four screens instead of eleven. Early numbers are already trending up, and none of it would have happened without the design and support teams grinding through QA all week.`,media:[{alt:`Before/after screenshot of the onboarding flow`}],footer:`Trim a sentence if you want room for a reply-friendly line.`},longread:{title:`Blog Post Draft`,icon:`edit`,iconColor:`var(--presence)`,standfirst:`A year ago I sent the first issue to fifty-three people, most of whom I had met in person. Last Tuesday it went to 4,100. Here is the honest version of what happened in between, not the growth-hacking version.`,readingTime:2,copySections:!0,sections:[{heading:`The first fifty were friends`,paragraphs:[`For the first three months, nothing I did mattered much. I wrote on Sunday nights, published on Monday mornings, and watched the subscriber count move by two or three a week. The people opening it were people who would have opened anything I sent them, which is a lovely thing and a useless signal. I kept a spreadsheet anyway, because the alternative was admitting I had no idea whether any of it was working.`,`What that stretch bought me was a voice. By issue twelve I had stopped writing like someone auditioning for a job and started writing like someone talking to a friend on a train. Nobody subscribed because of that change — it is invisible from the outside — but almost everyone who has arrived since has stayed because of it, and I do not think the rest of the year happens without those quiet twelve weeks.`]},{heading:`What actually moved the needle`,paragraphs:[`Three things, in order of how uncomfortable they were: writing about one narrow subject instead of five interesting ones, sending on a schedule I could survive rather than one that looked impressive, and asking once, in plain language, for readers to forward the issue to a single person who would like it.`,`The forward request was worth more than everything else combined. It added about nine hundred subscribers over six weeks, and every one of them arrived already trusting whoever sent it to them, which is an introduction no ad can buy. I tried paid acquisition twice, spent four hundred dollars, and got sixty subscribers, a third of whom were gone inside a month.`]},{heading:`What I'd do differently`,paragraphs:[`I would start the public archive on day one. For eight months the back issues lived only in inboxes, which meant a year of writing was invisible to anyone who found me later: no search results, nothing to send a friend, nothing for a new reader to judge me by. Moving it to a plain page doubled the traffic within a month and cost me one afternoon.`,`And I would have written less. The issues people quote back to me are the short ones — six hundred words, one idea, no preamble. The two-thousand-word essays I was proudest of are the ones nobody finished, and I can see it in the scroll map: attention falls off a cliff two screens in. That is a hard lesson to accept and an easy one to act on, which is the best kind.`]}],footer:`Copy one section or take the whole piece — no filename, no page numbers, just the writing.`},ideaboard:{title:`Name Ideas`,icon:`sparkle`,iconColor:`var(--insight)`,ask:`Name the newsletter — a weekly note about running small internet projects.`,ideas:[{angle:`Plain and clear`,label:`The Weekly Build`,note:`Says exactly what it is; nobody has to guess.`},{angle:`Plain and clear`,label:`Small Projects`,note:`Boring on purpose, and it ages well.`},{angle:`Plain and clear`,label:`Ship Notes`,note:`Short enough to survive a screenshot.`},{angle:`With some edge`,label:`Nothing Scales`,note:`A wink at the advice everyone gives you.`},{angle:`With some edge`,label:`Unfinished`,note:`Honest about what a side project actually is.`},{angle:`With some edge`,label:`Quietly Shipping`,note:`Owns the lack of a launch announcement.`},{angle:`Left-field`,label:`Tuesday Is a Verb`,note:`Odd enough that people ask what it means.`},{angle:`Left-field`,label:`The Long Tail Café`,note:`Warm, a little silly, hard to forget.`},{angle:`Left-field`,label:`Room 204`,note:`Means nothing yet — that is the point.`},{angle:`Left-field`,label:`Marginalia`,note:`For readers who like footnotes more than headlines.`}],footer:`Nothing here is ranked. Read across the angles first, then narrow.`}};export{e as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{E as e,u as t,v as n}from"./store-DpmbKVs7.js";import{i as r}from"./format-rPI6ZwwH.js";import{n as i}from"./useDashboardLoop-DuckIfJX.js";function a(e){return e===`no-model`?`Connect a model with an API key first — a tile only joins the board once a real search has confirmed it returns real data.`:`Couldn't confirm this with a live source, so it wasn't added — a tile only joins the board once a real search returns real data. Try again in a moment, or reword what to track.`}var o=e=>`${e.conversationId}@${e.at}`;function s(e){return{metrics:new Set(e.metrics.map(e=>e.id)),widgets:new Set(e.widgets.map(e=>e.id)),tripwires:new Set(e.tripwires.map(e=>e.id)),sources:new Set(e.sources.map(o))}}function c(r,i){if(i===null){n(r);return}let a=t(r);a&&e(r,{metrics:a.metrics.filter(e=>i.metrics.has(e.id)),widgets:a.widgets.filter(e=>i.widgets.has(e.id)),tripwires:a.tripwires.filter(e=>i.tripwires.has(e.id)),sources:a.sources.filter(e=>i.sources.has(o(e)))})}var l=1500,u=45e3,d=e=>new Promise(t=>setTimeout(t,e));async function f(e,n){let a=t(e);if(!a)return`failed`;if(!r(a))return`confirmed`;let o=await i(e);for(let t=0;o===`busy`&&t<u;t+=l)await d(l),o=await i(e);return o===`done`&&(t(e)?.metrics??[]).filter(e=>!(n?.metrics.has(e.id)??!1)).filter(e=>e.query.trim()!==``&&!e.blankKey&&e.lastValue==null).length===0?`confirmed`:(c(e,n),o===`no-model`?`no-model`:o===`failed`?`failed`:`unverified`)}export{a as n,f as r,s as t};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{i as e,n as t}from"./keyVault-
|
|
1
|
+
import{i as e,n as t}from"./keyVault-Aw5Y2PjT.js";var n=`content-key-v1`;async function r(t){let r=JSON.stringify(t);try{return await e(r,n)}catch{return r}}async function i(e){return JSON.parse(await t(e,n))}export{r as n,i as t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{t as e}from"./jsx-runtime-DeHZSEgm.js";var t=e(),n=e=>function(n){return(0,t.jsx)(`svg`,{viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:`1.7`,strokeLinecap:`round`,strokeLinejoin:`round`,...n,children:e})},r=n((0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(`path`,{d:`M12 3a3 3 0 0 0-3 3v6a3 3 0 0 0 6 0V6a3 3 0 0 0-3-3Z`}),(0,t.jsx)(`path`,{d:`M19 11a7 7 0 0 1-14 0`}),(0,t.jsx)(`path`,{d:`M12 18v3`})]})),i=n((0,t.jsx)(`path`,{d:`m4 12 16-7-7 16-2.5-6.5L4 12Z`})),a=n((0,t.jsx)(`path`,{d:`M4 7h16M4 12h16M4 17h16`})),o=n((0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(`circle`,{cx:`11`,cy:`11`,r:`6.5`}),(0,t.jsx)(`path`,{d:`m16 16 4.5 4.5`})]})),s=n((0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(`circle`,{cx:`12`,cy:`12`,r:`4`}),(0,t.jsx)(`path`,{d:`M12 2v2M12 20v2M4.9 4.9l1.4 1.4M17.7 17.7l1.4 1.4M2 12h2M20 12h2M4.9 19.1l1.4-1.4M17.7 6.3l1.4-1.4`})]})),c=n((0,t.jsx)(`path`,{d:`M21 12.8A9 9 0 1 1 11.2 3a7 7 0 0 0 9.8 9.8Z`})),l=n((0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(`path`,{d:`M4 9v6h4l5 4V5L8 9H4Z`}),(0,t.jsx)(`path`,{d:`m17 9 4 6M21 9l-4 6`})]}));export{i as a,o as i,r as n,l as o,c as r,s,a as t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{t as e}from"./cpp-Cts1PyIS.js";export{e as default};
|