@mavea/mavea 1.0.17 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +59 -3
- package/DISCLAIMER.md +4 -1
- package/PRIVACY.md +14 -8
- package/README.md +67 -24
- package/TERMS.md +11 -1
- package/THIRD-PARTY.txt +25248 -621
- package/bin/mavea.mjs +156 -147
- package/dist/.vite/manifest.json +2333 -1738
- package/dist/assets/AnnotationLayer-ClU-e6qL.css +1 -0
- package/dist/assets/AnnotationLayer-IiuYsoSa.js +0 -0
- package/dist/assets/AppCommandPalette-Dm3SedPO.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-CcHXJqdq.js +2 -0
- package/dist/assets/CardEditor-DABIhGdQ.js +1 -0
- package/dist/assets/CheckLogRail-BOaXnqWK.css +1 -0
- package/dist/assets/CheckLogRail-BU_rmAFH.js +1 -0
- package/dist/assets/{CodeOutput-H8TQzjqL.js → CodeOutput-DF892aIR.js} +3 -3
- package/dist/assets/CommandPalette-E3reEqYR.js +1 -0
- package/dist/assets/ConversationVideoStudio-CIAMxElj.css +1 -0
- package/dist/assets/ConversationVideoStudio-DEZBpJUz.js +1 -0
- package/dist/assets/CourseLessonReader-Bpt-DkJo.js +2 -0
- package/dist/assets/CourseRail-C8MJG-zf.js +1 -0
- package/dist/assets/CoursesApp-DFVkhP2f.js +2 -0
- package/dist/assets/CrossExamPanel-CdIYUu-B.js +1 -0
- package/dist/assets/DashPresent-DwWDtjrU.js +1 -0
- package/dist/assets/DashboardDetail-D4wkiTux.js +2 -0
- package/dist/assets/DashboardLoopGate-B5UBPsvU.js +2 -0
- package/dist/assets/DashboardLoopRuntime-CAnZX234.js +1 -0
- package/dist/assets/DashboardOverview-C3hv9sm1.js +1 -0
- package/dist/assets/DashboardSettings-eMhHliVh.js +1 -0
- package/dist/assets/{DashboardsApp-Dx-EsaPW.css → DashboardsApp-B6yUtkKB.css} +1 -1
- package/dist/assets/DashboardsApp-BwFtTdWa.js +2 -0
- package/dist/assets/{DeepZoomApp-CQaTT2Uh.js → DeepZoomApp-CxdcUeFJ.js} +2 -2
- package/dist/assets/DelegatePanel-B0kIu8Et.js +33 -0
- package/dist/assets/DemoGallery-B__X0_H3.js +1 -0
- package/dist/assets/DropSelect-C3uYlej-.js +1 -0
- package/dist/assets/DropSelect-DilESAgA.css +1 -0
- package/dist/assets/ExportModal-CDGlhpdH.js +2 -0
- package/dist/assets/ExtractionPreview-CloJnrQi.js +18 -0
- package/dist/assets/{FallbackCard-B489rTd9.js → FallbackCard-ap_4wOfj.js} +1 -1
- package/dist/assets/FeatureUseNotice-CwHstxBh.js +1 -0
- package/dist/assets/FlagshipCTA-uoeGMQas.js +1 -0
- package/dist/assets/FlagshipCommandPalette-CHsD5BSH.js +1 -0
- package/dist/assets/FlagshipShowcase-D53Q_4m0.js +1 -0
- package/dist/assets/FlashcardsApp-CnLfEnDH.js +1 -0
- package/dist/assets/ForecastPanel-zPUh2ClQ.js +1 -0
- package/dist/assets/GalleryApp-2Ffc6CY6.js +1 -0
- package/dist/assets/{HonestByDesign-CCOt31nx.js → HonestByDesign-5jIu2ZC8.js} +1 -1
- package/dist/assets/{HowItWorks-auW5XXCZ.js → HowItWorks-BiJF84EM.js} +1 -1
- package/dist/assets/LegalApp-zC-rvTww.js +1 -0
- package/dist/assets/{LegalMarkdownDocument-DBjLz9Yf.js → LegalMarkdownDocument-CJ-gRHdX.js} +2 -2
- package/dist/assets/LegalPageShell-CmxGCdqJ.css +1 -0
- package/dist/assets/LegalPageShell-Dyd4Uh3r.js +1 -0
- package/dist/assets/LeverPanel-D1SNRGdm.js +1 -0
- package/dist/assets/Library-DmdzY2se.js +1 -0
- package/dist/assets/LibraryOverlay-_xpWdhLN.js +1 -0
- package/dist/assets/LiveApp-BNae3fDZ.css +1 -0
- package/dist/assets/LiveApp-DjcJQURO.js +78 -0
- package/dist/assets/LiveSettings-BceODlOb.js +6 -0
- package/dist/assets/MindMapViewerDrawer-BuDodC0s.js +1 -0
- package/dist/assets/MindShape-CBcCC7hP.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-DBIXvhlF.js +1 -0
- package/dist/assets/PlanReview-DUQ7OMvV.js +1 -0
- package/dist/assets/Presence-CKSoyuhE.js +1 -0
- package/dist/assets/PresentationDeck-C518t9pP.js +1 -0
- package/dist/assets/PrismApp-DRLl8841.js +2 -0
- package/dist/assets/PrismAskController-QRwxRP8D.js +37 -0
- package/dist/assets/PrismBriefingPlayer-Kyb8Vs_w.js +2 -0
- package/dist/assets/PrismOverlay-Bj7tCu5Q.js +105 -0
- package/dist/assets/PrismWorkbench-BCnhkp-S.js +1 -0
- package/dist/assets/{PrivacyApp-rhzy-5HG.js → PrivacyApp-DHSRr8wq.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-CKo5reXy.js +2 -0
- package/dist/assets/ReplayCard-Cs6mzTRa.css +1 -0
- package/dist/assets/ReplayOverlay-DqAwLshS.js +1 -0
- package/dist/assets/ReplayOverlay-DzkcTnCA.css +1 -0
- package/dist/assets/RewindOverlay-CkJIETE0.js +1 -0
- package/dist/assets/RippleApp-C76VTaZK.js +2 -0
- package/dist/assets/RippleAskController-CdlMlRH8.js +34 -0
- package/dist/assets/RippleOverlay-Mvz3CXhD.js +6 -0
- package/dist/assets/SeeDontRead-BkySmnP3.js +1 -0
- package/dist/assets/ShareModal-Cl3ryjgK.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-Cy5ldKLE.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-Cdkifjb8.js +1 -0
- package/dist/assets/SrsReview-B1B2VekR.css +1 -0
- package/dist/assets/SrsReview-DhWNYYv7.js +1 -0
- package/dist/assets/SynthesisApp-C5udWwng.js +2 -0
- package/dist/assets/SynthesisOverlay-1o-CJsyX.js +66 -0
- package/dist/assets/{TermsApp-Dk2jpxq-.js → TermsApp-DIAESAZs.js} +13 -3
- package/dist/assets/TopbarMenu-DQXxqSWY.js +1 -0
- package/dist/assets/TopicCanvas-DkzJORfl.js +2 -0
- package/dist/assets/TourPrism-Bxp--s0i.js +1 -0
- package/dist/assets/TrackerTile-CyPD0A6b.js +2 -0
- package/dist/assets/TwoSurfaces-C_0XBpwA.js +1 -0
- package/dist/assets/UnderstoodPanel-DmJph4el.js +1 -0
- package/dist/assets/WhyMachineOverlay-QDSZx5Y7.js +1 -0
- package/dist/assets/WorldOverlay-DRdBQMnb.css +1 -0
- package/dist/assets/WorldOverlay-DorHCLzw.js +1 -0
- package/dist/assets/WowFeatures-DNEeO2pr.js +1 -0
- package/dist/assets/ZoomDeck-qdlPe_yl.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-BmKrZ3hU.js +1 -0
- package/dist/assets/annotationReel-K2FYv-3B.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-PaRBwjJy.js +1 -0
- package/dist/assets/blockLabel-FogyzEQY.js +1 -0
- package/dist/assets/blockTypes-DUDdP3pB.js +1 -0
- package/dist/assets/buildShip-BgFg98tH.js +1 -0
- package/dist/assets/cache-CvbSI-pr.js +1 -0
- package/dist/assets/canvas-BlkTFnVo.js +1 -0
- package/dist/assets/capture-CL9ENM-c.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-CZPBG1xe.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/csv-DAqzYXUs.js +5 -0
- package/dist/assets/dash-composer-DeNWVwpU.css +1 -0
- package/dist/assets/dashboardEvents-D-wLCp1A.js +2 -0
- package/dist/assets/dashboards-CdzGklae.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/display-BrieMea1.js +1 -0
- package/dist/assets/dist-DRo0JOkC.js +14 -0
- package/dist/assets/{dist-DIKAXwpM.js → dist-kNHRtoqd.js} +21 -21
- package/dist/assets/emphasize-BqCIst-B.js +1 -0
- package/dist/assets/empty-BO1NC9qY.js +1 -0
- package/dist/assets/engine-2U7mvPIl.js +1 -0
- package/dist/assets/engine-BF8FqSbi.css +1 -0
- package/dist/assets/explode-qQ7Fzt6V.js +15 -0
- 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-C9vOL1C2.js} +3 -3
- package/dist/assets/generateBeats-DpDpBcgV.js +1 -0
- package/dist/assets/{generateCourse-Cj_-vDWu.js → generateCourse-DU281tDE.js} +1 -1
- package/dist/assets/generateLive-_x2tWkBH.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-CfcUMOBf.js +22 -0
- package/dist/assets/index-D4FIsool.css +1 -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-CdL8Kl48.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-B4bQtO88.js +100 -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-DxwoIVpo.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/nextFrame-12y0UrAd.js +1 -0
- package/dist/assets/notes-CUeZ1cYu.js +1 -0
- package/dist/assets/{number-DXgzss0v.js → number-Bmf7DqLj.js} +1 -1
- package/dist/assets/officeDoc-GU6Cssjf.js +3 -0
- package/dist/assets/openWorld-BHTJM39n.js +1 -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-BAEq0JnM.js +24 -0
- package/dist/assets/{perfProbe-Xs39DqMh.js → perfProbe-3Ip5n0yx.js} +1 -1
- package/dist/assets/{php-CYrBA5iX.js → php-CQT4wx5i.js} +1 -1
- package/dist/assets/pin-BwWjjqmt.js +1 -0
- package/dist/assets/pin-D-4Zjiik.css +1 -0
- package/dist/assets/planTracker-BI9z_0gW.js +1 -0
- package/dist/assets/portal-BJzn-Tgn.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-CheeUP2L.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-B2OCzEo1.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-DCMczU9R.js +1 -0
- package/dist/assets/quizResult-DB8yeqDr.js +1 -0
- package/dist/assets/react-BZJXY1be.js +1 -0
- package/dist/assets/ready-Ba6nk9O1.js +1 -0
- package/dist/assets/ready-DZY1bETr.js +1 -0
- package/dist/assets/receipts-ClyzFFGD.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-BM9FDQxO.js +1 -0
- package/dist/assets/registry-BRbEINOV.js +1 -0
- package/dist/assets/registry-BSX3aFUw.js +1 -0
- package/dist/assets/registry-BZuT2Epw.css +1 -0
- package/dist/assets/registry-Bv1f5UU4.js +2 -0
- package/dist/assets/registry-C28gYnVq.js +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-ChQGee7C.js +1 -0
- package/dist/assets/registry-Ci65uThi.js +1 -0
- package/dist/assets/{registry-upbw6pyj.css → registry-CuVk7MAI.css} +1 -1
- package/dist/assets/registry-CvylL2BN.css +1 -0
- package/dist/assets/registry-D4Xdd7dO.js +1 -0
- package/dist/assets/registry-D8O0apUT.js +2 -0
- package/dist/assets/registry-DLyrLfe-.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-D_4_HlMg.js +1 -0
- 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-DuP_q42N.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-BXcg3Ioz.js} +1 -1
- package/dist/assets/replay-rSsGKjEc.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-CkaYNX89.js +23 -0
- package/dist/assets/run-aj7robML.js +21 -0
- package/dist/assets/run-ndUTOxjM.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/seed-DN4mRJp-.js +1 -0
- package/dist/assets/shapes-C5fjibEc.js +42 -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-C88IQJ0M.js +1 -0
- package/dist/assets/spreadLabels-CQ8hufvK.js +1 -0
- package/dist/assets/src-DG1n-LFe.js +1 -0
- package/dist/assets/store-B39HvB_l.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-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-7IrMJ70_.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-C42I77wh.js +1 -0
- package/dist/assets/types-CaO6xOn5.js +1 -0
- package/dist/assets/useDashboardLoop-B_YA5jLs.js +5 -0
- package/dist/assets/useDashboards-GafZIADI.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-DWz7BRdk.js +1 -0
- package/dist/assets/useSpatialCanvas-CfmZOXXP.js +1 -0
- package/dist/assets/useSpotlightWalk-DxlxBezO.js +1 -0
- package/dist/assets/useSrsCards-C27o39fF.js +1 -0
- package/dist/assets/useStudy-CFIuakaM.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/validate-CnG23_8J.js +1 -0
- package/dist/assets/verbatim-DBTj9sPD.js +1 -0
- package/dist/assets/walkSync-AAocUygp.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 +24 -17
- 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 +72 -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/explode-WBykfhqW.js +0 -13
- 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-D5oMqeSa.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/run-Dc2ZJz6n.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,5 @@
|
|
|
1
|
+
var e=2e4,t=1e3;function n(e){let t=e.slice(0,e.indexOf(`
|
|
2
|
+
`)===-1?e.length:e.indexOf(`
|
|
3
|
+
`)),n={",":0," ":0,";":0},r=!1;for(let e of t)e===`"`?r=!r:!r&&e in n&&(n[e]+=1);let i=`,`;for(let e of Object.keys(n))n[e]>n[i]&&(i=e);return i}function r(e,t){let n=[],r=``,i=[],a=!1,o=()=>{i.push(r),r=``},s=()=>{o(),n.push(i),i=[]};for(let n=0;n<e.length;n+=1){let i=e[n];if(a){i===`"`?e[n+1]===`"`?(r+=`"`,n+=1):a=!1:r+=i;continue}i===`"`?a=!0:i===t?o():i===`
|
|
4
|
+
`?s():i===`\r`?e[n+1]!==`
|
|
5
|
+
`&&s():r+=i}return(r.length>0||i.length>0)&&s(),n}function i(t){let i=t.replace(/^\uFEFF/,``);if(!i.trim())return null;let a=r(i,n(i)).filter(e=>e.length!==1||e[0].trim()!==``);if(a.length===0)return null;let o=a[0].map((e,t)=>e.trim()||`col${t+1}`),s=o.length,c=a.slice(1),l=c.length,u=c.slice(0,e).map(e=>{let t=e.slice(0,s);for(;t.length<s;)t.push(``);return t});return{headers:o,rows:u,sourceRowCount:l,truncated:l>u.length}}export{e as n,t as r,i as t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.dash-composer-bar{z-index:4;border-radius:var(--r-full);border:1px solid var(--line);background:var(--surface-elevated);width:min(100%,640px);box-shadow:var(--shadow-raised);align-items:center;gap:10px;margin:24px auto 0;padding:8px 8px 8px 20px;display:flex;position:sticky;bottom:20px}.dash-composer-input{min-width:0;font-size:14px;font-family:var(--font);color:var(--text-primary);background:0 0;border:none;flex:1}.dash-composer-input::placeholder{color:var(--text-muted)}.dash-composer-input:focus{outline:none}.dash-composer-kbd{border-radius:var(--r-sm);border:1px solid var(--line);background:var(--surface-glass);font-family:var(--font-data,var(--font));color:var(--text-muted);flex:none;padding:3px 7px;font-size:10.5px}.dash-composer-submit{border-radius:var(--r-full);font-size:13px;font-weight:700;font-family:var(--font);cursor:pointer;color:var(--on-presence,#fff);background:var(--presence);border:none;flex:none;padding:9px 18px}.dash-composer-submit:disabled{opacity:.5;cursor:default}@media (width<=640px){.dash-composer-bar{width:calc(100% - 32px);bottom:12px}.dash-composer-kbd{display:none}}.dash-answer{flex-direction:column;gap:14px;padding:24px 22px;display:flex}.dash-answer-text{font-family:var(--font-voice);color:var(--text-primary);overflow-wrap:anywhere;margin:0;font-size:17px;line-height:1.55}.dash-answer-text--fallback{font-family:var(--font);color:var(--text-secondary);font-size:14px}.dash-answer-qualifier{color:var(--text-muted);margin:0;font-size:12px}.dash-answer-sources{flex-wrap:wrap;gap:6px;display:flex}.dash-answer-source{text-overflow:ellipsis;white-space:nowrap;border-radius:var(--r-full);border:1px solid var(--line);background:var(--surface-default);max-width:220px;color:var(--text-secondary);padding:3px 9px;font-size:11.5px;text-decoration:none;transition:border-color .14s,color .14s;overflow:hidden}.dash-answer-source:hover{border-color:var(--insight);color:var(--text-primary)}.dash-answer-foot{border-top:1px solid var(--line-soft);justify-content:space-between;align-items:center;gap:12px;margin-top:4px;padding-top:14px;display:flex}.dash-answer-badge{font-family:var(--font-data,var(--font));letter-spacing:.1em;text-transform:uppercase;color:var(--text-faint,var(--text-muted));font-size:9.5px;font-weight:600}.dash-answer-track{font-size:12.5px;font-weight:600;font-family:var(--font);color:var(--presence);cursor:pointer;background:0 0;border:none;flex:none;padding:0}.dash-answer-track:hover{text-decoration:underline}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{t as e}from"./react-BZJXY1be.js";import{a as t,i as n}from"./spokenText-C88IQJ0M.js";import{O as r,k as i}from"./kokoro-CdL8Kl48.js";import{n as a,t as o}from"./contentVault-xfUwSJ3i.js";import{A as s,R as c}from"./store-B39HvB_l.js";import{n as l,s as u}from"./ledger-Cv0LBflx.js";import{a as d,i as f}from"./format-rPI6ZwwH.js";var p=14,m=2,h=12096e5,g={"15min":()=>`hourly`,hourly:e=>e===0?`daily`:`6h`};function _(e){switch(e){case`15min`:return`every 15 min`;case`hourly`:return`hourly`;case`6h`:return`every 6 hours`;case`daily`:return`daily`;case`manual`:return`manual`}}function v(e,t,n){if(!f(e))return null;let r=g[e.cadence.data];if(!r||t<p||n>m)return null;let i=r(n),a=c[e.cadence.data],o=c[i];if(!Number.isFinite(a)||!Number.isFinite(o)||o<=a)return null;let s=Math.round(t*(1-a/o)*(30/7));return s<=0?null:{dashboardId:e.id,to:i,savesPerMonth:s,checks7d:t,opens7d:n}}function y(e,t,n){let r=n-h;return e.some(e=>e.kind===`savings`&&e.at>=r&&e.suggestion?.dashboardId===t)}function b(e,t,n,r,i,a=3){let o=[];for(let s of e){if(o.length>=a)break;if(y(t,s.id,i))continue;let e=v(s,n(s.id),r(s.id));e&&o.push(e)}return o}function x(e,t){let n=t.opens7d===1?`1 time`:`${t.opens7d} times`;return`You check ${e.title} ${_(e.cadence.data)} but only opened it ${n} this week. Dropping to ${_(t.to)} would save about ${t.savesPerMonth} searches a month.`}function S(e){return{action:`set-cadence`,dashboardId:e.dashboardId,to:e.to,savesPerMonth:e.savesPerMonth,state:`open`}}function C(e,t){let n=new Map(e.map(e=>[e.id,e]));for(let e of t){let t=n.get(e.dashboardId);t&&l({kind:`savings`,text:x(t,e),dashboardIds:[e.dashboardId],searches:0,suggestion:S(e)})}}function ee(e,t,n,r=Date.now()){s(t,{data:n},r),u(e,`applied`),l({kind:`savings`,text:`Applied — cadence dropped to ${_(n)}.`,dashboardIds:[t],searches:0})}function w(e){u(e,`dismissed`)}var T=`mavea-dash-optimizer-date`;function E(e){return new Date(e).toISOString().slice(0,10)}function D(e){try{return typeof localStorage>`u`?!1:localStorage.getItem(T)===E(e)}catch{return!1}}function O(e){try{typeof localStorage<`u`&&localStorage.setItem(T,E(e))}catch{}}function k(e,t,n,r,i=Date.now()){D(i)||(O(i),C(e,b(e,t,n,r,i)))}var A=e(),j=`mavea-dash-briefing-v1`,M=j,N=`mavea-dash-briefing-date`;function P(e){return new Date(e).toISOString().slice(0,10)}function F(e){return!!e&&typeof e==`object`}function I(e){return!F(e)||typeof e.dashboardId!=`string`||!e.dashboardId||typeof e.label!=`string`||typeof e.value!=`string`?null:{dashboardId:e.dashboardId,label:e.label,value:e.value}}function L(e){if(!F(e)||typeof e.date!=`string`||typeof e.text!=`string`||!e.text)return null;let t=typeof e.at==`number`&&Number.isFinite(e.at)?e.at:0,n=Array.isArray(e.chips)?e.chips.map(I).filter(e=>e!==null):[];return{date:e.date,at:t,text:e.text,...typeof e.spoken==`string`&&e.spoken?{spoken:e.spoken}:{},chips:n}}var R;async function z(e){try{if(typeof localStorage>`u`)return;localStorage.setItem(j,await a(e))}catch{}}function te(){try{if(typeof localStorage>`u`)return null;let e=localStorage.getItem(j);if(!e)return null;let t=L(JSON.parse(e));return t&&z(t),t}catch{return null}}async function B(){try{if(typeof localStorage>`u`)return;let e=localStorage.getItem(j);if(!e)return;try{JSON.parse(e);return}catch{}let t=L(await o(e));R=t,typeof window<`u`&&typeof CustomEvent==`function`&&window.dispatchEvent(new CustomEvent(M,{detail:t}))}catch{}}B();function V(){return R??=te(),R}function H(e){R=e,z(e);try{typeof window<`u`&&typeof CustomEvent==`function`&&window.dispatchEvent(new CustomEvent(M,{detail:e}))}catch{}}function U(e){return window.addEventListener(M,e),()=>window.removeEventListener(M,e)}function W(){return(0,A.useSyncExternalStore)(U,V,G)}function G(){return null}function K(){try{return typeof localStorage>`u`?null:localStorage.getItem(N)}catch{return null}}function q(e){try{typeof localStorage<`u`&&localStorage.setItem(N,e)}catch{}}function J(e){return K()!==P(e)}function Y(e){q(P(e))}function X(e,t){let n=[];for(let r of e){if(t.has(r.id))continue;let e=d(r);!e||e.value===`—`||n.push(`- ${r.title}: ${e.label} is ${e.value}`)}return n.join(`
|
|
2
|
+
`)}function Z(e){let t=[];for(let n of e){let e=d(n);!e||e.value===`—`||t.push({dashboardId:n.id,label:e.label,value:e.value})}return t}function Q(e,r,i){let a=n(e),o=t(e),s={date:P(i),at:i,text:a,...o&&o!==a?{spoken:o}:{},chips:Z(r)};return H(s),Y(i),s}function ne(e,t){i(r(t||e),`mavea`)}var $=`mavea-dashboard-tripwire-toast`;function re(e){try{typeof window<`u`&&typeof CustomEvent==`function`&&window.dispatchEvent(new CustomEvent($,{detail:e}))}catch{}}function ie(e){let t=t=>e(t.detail);return window.addEventListener($,t),()=>window.removeEventListener($,t)}export{Q as a,ee as c,X as i,w as l,ie as n,ne as o,J as r,W as s,re as t,k as u};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.mavea-app.dash-app{flex-direction:column;height:100%;display:flex;overflow-y:auto}.dash-risk-note{width:min(calc(100% - 40px), var(--canvas-col-max));flex:none;margin:12px auto 0}.dash-quota-note{width:min(calc(100% - 40px), var(--canvas-col-max));border:1px solid color-mix(in oklab, var(--warning) 40%, transparent);background:color-mix(in oklab, var(--warning) 8%, var(--surface-elevated));color:var(--text-primary);border-radius:10px;flex:none;margin:12px auto 0;padding:10px 14px;font-size:13px;line-height:1.45}.dash-cta{color:var(--on-presence,#fff);background:linear-gradient(120deg, var(--presence), var(--insight));border-radius:var(--r-full);font-size:13px;font-weight:600;font-family:var(--font);cursor:pointer;box-shadow:0 6px 18px -8px color-mix(in oklab, var(--presence) 70%, transparent);transition:transform var(--m-normal) var(--ease-out), box-shadow var(--m-normal) var(--ease-out);border:none;flex:none;align-items:center;gap:8px;padding:11px 20px;text-decoration:none;display:inline-flex}.dash-cta:hover{box-shadow:0 14px 30px -12px color-mix(in oklab, var(--presence) 75%, transparent);transform:translateY(-2px)}.dash-empty{text-align:center;max-width:460px;color:var(--text-secondary);margin:40px auto}.dash-empty-title{color:var(--text-primary);margin:0 0 10px;font-size:17px;font-weight:600}.dash-empty-how{color:var(--text-muted);margin:0;font-size:13.5px;line-height:1.65}.dash-empty-how a{color:var(--presence);text-decoration:none}.dash-detail{width:min(100%, var(--canvas-col-max));flex-direction:column;gap:20px;margin:0 auto;padding:24px 26px 64px;display:flex}.dash-detail-head{border-bottom:1px solid var(--line-soft);flex-wrap:wrap;align-items:center;gap:12px;padding-bottom:14px;display:flex}.dash-back{color:var(--text-muted);flex:none;font-size:18px;line-height:1;text-decoration:none}.dash-back:hover{color:var(--text-primary)}.dash-detail-title{text-overflow:ellipsis;white-space:nowrap;min-width:40px;color:var(--text-primary);flex:0 auto;font-size:18px;font-weight:700;overflow:hidden}.dash-detail-q{text-overflow:ellipsis;white-space:nowrap;min-width:0;color:var(--text-secondary);flex:1;font-size:13px;font-style:italic;overflow:hidden}.dash-detail-clock{font-family:var(--font-data,var(--font));letter-spacing:.06em;text-transform:uppercase;color:var(--text-muted);white-space:nowrap;flex:none;align-items:center;gap:6px;font-size:10px;display:inline-flex}.dash-live-dot{background:var(--presence);border-radius:50%;width:6px;height:6px;animation:1.6s ease-in-out infinite dashPulse}@keyframes dashPulse{0%,to{opacity:1}50%{opacity:.3}}@media (prefers-reduced-motion:reduce){.dash-live-dot{opacity:1;animation:none}}.dash-grid{grid-template-columns:repeat(12,1fr);align-items:stretch;gap:14px;display:grid}.dash-span-1{grid-column:span 4}.dash-span-2{grid-column:span 8}.dash-span-3{grid-column:span 12}.dash-tile{flex-direction:column;min-width:0;display:flex}.dash-tile .card{margin:0}.dash-tile .card-grid,.dash-talk-answer .card-grid{grid-template-columns:1fr;gap:12px;max-width:none;margin:0}.dash-tile .card-grid>[class*=col-],.dash-talk-answer .card-grid>[class*=col-]{grid-column:1/-1}.dash-tile,.dash-tile .card-grid,.dash-tile .card-grid>[class*=col-]{height:100%}@media (width<=760px){.dash-grid{grid-template-columns:1fr}.dash-span-1,.dash-span-2,.dash-span-3{grid-column:auto}}.dash-key-nudge{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:14px;padding:12px 16px;display:flex}.dash-key-nudge-text{color:var(--text-secondary);flex:1;min-width:220px;margin:0;font-size:13px}.dash-key-nudge-actions{flex:none;align-items:center;gap:8px;display:flex}.dash-key-nudge-keep{color:var(--on-presence,#fff);background:var(--presence);border-radius:var(--r-full);cursor:pointer;white-space:nowrap;border:none;padding:7px 14px;font-size:12.5px;font-weight:600}.dash-key-nudge-dismiss{color:var(--text-muted);border:1px solid var(--line-soft);border-radius:var(--r-full);cursor:pointer;white-space:nowrap;background:0 0;padding:7px 14px;font-size:12.5px;font-weight:600}.dash-key-nudge-dismiss:hover{color:var(--text-secondary);border-color:var(--line)}.dash-key-nudge-keep:focus-visible,.dash-key-nudge-dismiss:focus-visible{outline:2px solid var(--presence);outline-offset:2px}.dash-hero{flex-direction:column;gap:14px;display:flex}.dash-hero-top{flex-wrap:wrap;justify-content:space-between;align-items:baseline;gap:12px;display:flex}.dash-hero-eyebrow{font-family:var(--font-data);letter-spacing:.08em;text-transform:uppercase;color:var(--presence);font-size:11px;font-weight:600}.dash-hero-meta{font-family:var(--font-data,var(--font));letter-spacing:.05em;text-transform:uppercase;color:var(--text-muted);text-align:right;white-space:nowrap;font-size:10.5px}.dash-hero-value-row{flex-wrap:wrap;align-items:baseline;gap:12px;display:flex}.dash-hero-value{font-family:var(--font-data,var(--font));letter-spacing:-.01em;font-variant-numeric:tabular-nums;color:var(--text-primary);font-size:clamp(32px,6vw,56px);font-weight:700;line-height:1}.dash-hero-delta{font-family:var(--font-data,var(--font));font-variant-numeric:tabular-nums;border-radius:var(--r-full);flex:none;padding:4px 10px;font-size:15px;font-weight:700}.dash-hero-delta--up{color:var(--insight);background:color-mix(in oklab, var(--insight) 16%, transparent)}.dash-hero-delta--down{color:var(--danger);background:color-mix(in oklab, var(--danger) 16%, transparent)}.dash-hero-chart{width:100%;overflow:hidden}.dash-hero-chart .tile-viz-svg{height:72px}.dash-hero-chart-empty{color:var(--text-muted);margin:0;font-size:12px}.dash-lastcheck{border:1px solid color-mix(in oklab, var(--presence) 32%, var(--line));border-radius:var(--r-lg);background:linear-gradient(180deg, color-mix(in oklab, var(--presence) 7%, var(--surface-elevated)), var(--surface-elevated));padding:16px 18px}.dash-lastcheck-head{justify-content:space-between;align-items:baseline;gap:10px;margin-bottom:8px;display:flex}.dash-lastcheck-eyebrow{letter-spacing:.1em;text-transform:uppercase;color:var(--presence);font-weight:600}.dash-lastcheck-when{color:var(--text-secondary);white-space:nowrap;font-size:11.5px}.dash-lastcheck-text{font-family:var(--font-voice,var(--font));color:var(--text-primary);margin:0;font-size:14.5px;line-height:1.5}.dash-lastcheck-sources{flex-wrap:wrap;gap:6px;margin-top:10px;display:flex}.dash-lastcheck-source{text-overflow:ellipsis;white-space:nowrap;border-radius:var(--r-full);border:1px solid var(--line);background:var(--surface-default);max-width:220px;color:var(--text-secondary);padding:3px 9px;font-size:11.5px;text-decoration:none;transition:border-color .14s,color .14s;overflow:hidden}.dash-lastcheck-source:hover{border-color:var(--presence);color:var(--text-primary)}.dash-expects{border-top:1px solid var(--line-soft);flex-direction:column;gap:8px;margin-top:14px;padding-top:14px;display:flex}.dash-expects-eyebrow{color:var(--presence);letter-spacing:.08em;text-transform:uppercase;font-weight:600}.dash-expects-text{font-family:var(--font-voice,var(--font));color:var(--text-primary);margin:0;font-size:14.5px;line-height:1.5}.dash-expects-grade{flex-direction:column;gap:4px;display:flex}.dash-expects-chip{font-family:var(--font-data,var(--font));letter-spacing:.05em;text-transform:uppercase;border-radius:var(--r-full);align-self:flex-start;padding:3px 9px;font-size:11px;font-weight:700}.dash-expects-chip.is-hit{color:var(--insight);background:color-mix(in oklab, var(--insight) 16%, transparent)}.dash-expects-chip.is-miss{color:var(--danger);background:color-mix(in oklab, var(--danger) 16%, transparent)}.dash-expects-chip.is-unclear{color:var(--warning);background:color-mix(in oklab, var(--warning) 18%, transparent)}.dash-expects-expected{font-family:var(--font-voice,var(--font));color:var(--text-secondary);margin:0;font-size:13.5px;font-style:italic;line-height:1.5}.dash-expects-note{color:var(--text-muted);margin:0;font-size:12px}.dash-expects-foot{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:10px;display:flex}.dash-expects-tally,.dash-expects-label{font-family:var(--font-data,var(--font));letter-spacing:.06em;text-transform:uppercase;color:var(--text-muted);font-size:10px}.dash-cadence-card{flex-direction:column;gap:12px;display:flex}.dash-cadence-cost{color:var(--text-muted);margin:0;font-size:12px;line-height:1.5}.dash-cadence-window,.dash-cadence-oneshot{border:1px solid var(--line-soft);border-radius:var(--r-md);background:var(--surface-glass);justify-content:space-between;align-items:center;gap:10px;padding:10px 12px;display:flex}.dash-cadence-window-text{color:var(--text-secondary);margin:0;font-size:12px;line-height:1.45}.dash-cadence-clear{font-family:var(--font-data,var(--font));letter-spacing:.04em;text-transform:uppercase;color:var(--text-muted);border:1px solid var(--line);border-radius:var(--r-full);cursor:pointer;background:0 0;flex:none;padding:5px 11px;font-size:11px;font-weight:600;transition:color .14s,border-color .14s}.dash-cadence-clear:hover{color:var(--text-primary);border-color:var(--presence)}.dash-alertcard{flex-direction:column;gap:10px;display:flex}.dash-alertcard-list{flex-direction:column;gap:8px;margin:0;padding:0;list-style:none;display:flex}.dash-alertcard-row{border-radius:var(--r-sm);align-items:center;gap:11px;padding:6px 8px;display:flex}.dash-alertcard-row.is-triggered{background:color-mix(in oklab, var(--danger) 12%, transparent)}.dash-alertcard-body{flex-direction:column;gap:2px;min-width:0;display:flex}.dash-alertcard-line{color:var(--text-primary);font-size:13px;line-height:1.4}.dash-alertcard-state{font-family:var(--font-data,var(--font));letter-spacing:.06em;text-transform:uppercase;color:var(--text-muted);font-size:10px;font-weight:600}.dash-alertcard-crossed{font-family:var(--font-data,var(--font));letter-spacing:.04em;text-transform:uppercase;color:var(--danger);font-size:10.5px;font-weight:700}.dash-detail-cols{grid-template-columns:minmax(0,1fr) minmax(260px,320px);align-items:start;gap:18px;display:grid}.dash-detail-main{flex-direction:column;gap:18px;min-width:0;display:flex}.dash-detail-section{min-width:0}.dash-detail-section-title{letter-spacing:.08em;text-transform:uppercase;color:var(--text-muted);margin-bottom:10px;font-weight:600;display:block}.dash-detail-side{flex-direction:column;gap:16px;min-width:0;display:flex}@media (width<=900px){.dash-detail-cols{grid-template-columns:1fr}}.dash-talk{border-top:1px solid var(--line-soft);flex-direction:column;gap:12px;padding-top:16px;display:flex}.dash-talk-eyebrow{margin-bottom:0}.dash-talk-chips{flex-wrap:wrap;gap:8px;display:flex}.dash-talk-chip{background:var(--surface-glass);border:1px solid var(--line);border-radius:var(--r-full);max-width:min(100%,340px);color:var(--text-primary);cursor:pointer;align-items:center;gap:8px;padding:8px 13px;font-size:12.5px;transition:border-color .14s;display:inline-flex}.dash-talk-chip-t{text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}.dash-talk-chip:hover:not(:disabled){border-color:var(--presence)}.dash-talk-chip:disabled{opacity:.5;cursor:default}.dash-talk-chip-orb{background:radial-gradient(circle at 34% 28%, var(--presence-soft,#a9afff), var(--presence) 60%, var(--presence-deep,#3a43c9));border-radius:50%;flex:none;width:14px;height:14px}.dash-talk-ask{gap:8px;display:flex}.dash-talk-input{background:var(--surface-elevated);border:1px solid var(--line);border-radius:var(--r-full);min-width:0;font-size:14px;font-family:var(--font);color:var(--text-primary);flex:1;padding:12px 18px}.dash-talk-input:focus{border-color:var(--presence);outline:none}.dash-talk-send{background:linear-gradient(120deg, var(--presence), var(--insight));color:var(--on-presence,#fff);border-radius:var(--r-full);cursor:pointer;border:none;flex:none;padding:12px 20px;font-size:13px;font-weight:600}.dash-talk-send:disabled{opacity:.5;cursor:default}.dash-talk-gate,.dash-talk-error{color:var(--text-secondary);font-size:13px;line-height:1.55}.dash-talk-gate a,.dash-talk-error a,.dash-detail-q a{color:var(--presence);text-decoration:none}.dash-talk-answer{border:1px solid var(--line-soft);background:var(--surface-elevated);border-radius:14px;flex-direction:column;gap:10px;padding:14px;display:flex}.dash-talk-q{color:var(--text-secondary);font-size:13px;font-style:italic;font-weight:600}.dash-talk-narration{color:var(--text-primary);margin:0;font-size:13.5px;line-height:1.55}.dash-talk-thinking{color:var(--text-muted);font-size:13px}.xt-scrim{z-index:50;background:color-mix(in oklab, var(--surface-deep,#000) 64%, transparent);-webkit-backdrop-filter:blur(3px);backdrop-filter:blur(3px);justify-content:center;align-items:center;padding:28px;display:flex;position:fixed;inset:0}.xt-modal{background:var(--surface-elevated);border:1px solid var(--line);width:min(100%,920px);max-height:88vh;box-shadow:var(--shadow-modal);border-radius:18px;flex-direction:column;display:flex;overflow:hidden}.xt-head{border-bottom:1px solid var(--line-soft);justify-content:space-between;align-items:center;gap:12px;padding:14px 20px;display:flex}.xt-head-title{color:var(--text-primary);font-size:15px;font-weight:700}.xt-close{border-radius:var(--r-sm);background:var(--surface-glass);width:28px;height:28px;color:var(--text-muted);cursor:pointer;border:none;flex:none;font-size:17px;line-height:1}.xt-close:hover{color:var(--text-primary)}.xt-empty,.xt-loading{text-align:center;color:var(--text-secondary);padding:40px 28px;font-size:14px}.xt-empty a,.xt-comp-body a{color:var(--presence);text-decoration:none}.xt-split{grid-template-columns:1fr 1.2fr;min-height:0;display:grid;overflow:hidden}.xt-left,.xt-right{flex-direction:column;gap:11px;padding:18px 20px;display:flex;overflow-y:auto}.xt-left{border-right:1px solid var(--line-soft);background:var(--surface-glass)}.xt-section-label{font-family:var(--font-data,var(--font));letter-spacing:.14em;text-transform:uppercase;color:var(--text-muted);font-size:9.5px;font-weight:600}.xt-line{color:var(--text-secondary);overflow-wrap:anywhere;margin:0;font-size:13px;line-height:1.6}.xt-hl{background:color-mix(in oklab, var(--hl,var(--presence)) 18%, transparent);color:var(--text-primary);border-radius:4px;padding:1px 3px;position:relative}.xt-goal{--hl:var(--presence)}.xt-risk{--hl:var(--warning)}.xt-metric{--hl:var(--insight)}.xt-tag{font-family:var(--font-data,var(--font));letter-spacing:.1em;color:var(--hl,var(--presence));vertical-align:middle;margin-left:5px;font-size:9px;font-weight:700}.xt-comp{border:1px solid var(--line-soft);border-radius:var(--r-md);overflow:hidden}.xt-comp.xt-off{opacity:.5}.xt-comp-head{background:color-mix(in oklab, var(--hl,var(--presence)) 12%, transparent);justify-content:space-between;align-items:center;gap:10px;padding:9px 12px;display:flex}.xt-comp--goal{--hl:var(--presence)}.xt-comp--risk{--hl:var(--warning)}.xt-comp--metric{--hl:var(--insight)}.xt-comp-kind{font-family:var(--font-data,var(--font));letter-spacing:.1em;color:var(--hl,var(--presence));font-size:9px;font-weight:700}.xt-comp-toggle{border-radius:var(--r-sm);cursor:pointer;background:var(--surface-glass);color:var(--text-secondary);border:none;padding:4px 10px;font-size:11px;font-weight:600}.xt-comp-toggle:disabled{cursor:default;color:var(--text-muted)}.xt-comp-body{color:var(--text-primary);overflow-wrap:anywhere;padding:10px 12px;font-size:12.5px;line-height:1.5}.dash-plan-estimate{font-family:var(--font-data,var(--font));letter-spacing:.02em;color:var(--text-muted);margin:0;font-size:11px}.xt-confirm-err{color:var(--warning);margin:0;font-size:11.5px;line-height:1.45}.xt-build-row{gap:10px;margin-top:4px;display:flex}.xt-name{border:1.5px solid var(--presence);min-width:0;font-size:14px;font-weight:600;font-family:var(--font);background:var(--surface-default);color:var(--text-primary);border-radius:10px;flex:1;padding:10px 14px}.xt-name:focus{outline:none}.xt-build{cursor:pointer;background:var(--presence);color:var(--on-presence,#fff);border:none;border-radius:10px;flex:none;padding:10px 18px;font-size:13px;font-weight:700}@media (width<=720px){.xt-split{grid-template-columns:1fr}.xt-left{border-right:none;border-bottom:1px solid var(--line-soft)}}.dash-settings{flex-direction:column;gap:20px;width:min(100%,1180px);margin:0 auto;padding:24px 26px 64px;display:flex}.dash-gear{color:var(--text-muted);flex:none;font-size:15px;line-height:1;text-decoration:none}.dash-gear:hover{color:var(--text-primary)}.dash-settings-grid{grid-template-columns:1.4fr 1fr;align-items:start;gap:18px;display:grid}.dash-settings-cols{flex-direction:column;gap:16px;display:flex}.dash-set-card{flex-direction:column;gap:12px;display:flex}.dash-set-blurb{color:var(--text-muted);margin:0;font-size:12.5px;line-height:1.5}.dash-seg{flex-wrap:wrap;gap:7px;display:flex}.dash-seg-opt{color:var(--text-secondary);background:var(--surface-glass);border:1px solid var(--line);border-radius:var(--r-sm);cursor:pointer;font-size:12.5px;font-weight:600;font-family:var(--font);padding:7px 13px;transition:color .14s,background .14s,border-color .14s}.dash-seg-opt:hover{border-color:var(--presence)}.dash-seg-opt.is-active{color:var(--on-presence,#fff);background:var(--presence);border-color:var(--presence)}.dash-switch{border-radius:var(--r-full);background:var(--track,var(--line));flex:none;width:42px;height:24px;transition:background .16s;position:relative}.dash-switch.on{background:var(--insight)}.dash-switch-knob{background:#fff;border-radius:50%;width:20px;height:20px;transition:transform .16s;position:absolute;top:2px;left:2px;box-shadow:0 1px 3px #00000040}.dash-switch.on .dash-switch-knob{transform:translate(18px)}.dash-set-alerts{flex-direction:column;gap:8px;display:flex}.dash-check{cursor:pointer;text-align:left;font-family:var(--font);background:0 0;border:none;align-items:center;gap:11px;padding:4px 0;display:flex}.dash-check.disabled{cursor:default;opacity:.6}.dash-check-box{border-radius:var(--r-sm);border:1px solid var(--line);width:20px;height:20px;color:var(--on-presence,#fff);flex:none;justify-content:center;align-items:center;font-size:12px;display:flex}.dash-check.on .dash-check-box{background:var(--presence);border-color:var(--presence)}.dash-check-text{flex-direction:column;display:flex}.dash-check-label{color:var(--text-primary);font-size:13px}.dash-check-note{color:var(--text-muted);font-size:11px}.dash-alert-test-row{flex-wrap:wrap;align-items:baseline;gap:8px;margin:2px 0 2px 31px;display:flex}.dash-alert-test{font:600 var(--fs-2xs) / 1 var(--font);color:var(--presence);cursor:pointer;white-space:nowrap;background:0 0;border:none;padding:0}.dash-alert-test-note{font-size:var(--fs-2xs);color:var(--text-muted);max-width:320px;line-height:1.5}.dash-usage{top:calc(var(--bar-h) + 10px);flex-direction:column;gap:12px;display:flex;position:sticky}.dash-usage-band{font-family:var(--font-data,var(--font));letter-spacing:.04em;color:var(--insight);font-size:13px;font-weight:700}.dash-usage--none{color:var(--text-muted)}.dash-usage--minimal,.dash-usage--light{color:var(--insight)}.dash-usage--moderate{color:var(--warning)}.dash-usage--frequent{color:var(--danger)}.dash-usage-rows{border-top:1px solid var(--line-soft);border-bottom:1px solid var(--line-soft);flex-direction:column;gap:8px;padding:12px 0;display:flex}.dash-usage-row{color:var(--text-secondary);justify-content:space-between;align-items:baseline;gap:12px;font-size:12.5px;display:flex}.dash-usage-val{font-family:var(--font-data,var(--font));color:var(--text-primary);text-align:right;font-size:11.5px}.dash-usage-warning{color:var(--text-muted);margin:0;font-size:12px;line-height:1.55}.dash-usage-done{text-align:center;color:var(--on-presence,#fff);background:var(--presence);border-radius:11px;margin-top:2px;padding:11px;font-size:13px;font-weight:600;text-decoration:none}@media (width<=760px){.dash-settings-grid{grid-template-columns:1fr}.dash-usage{position:static}}.dash-edit-btn{color:var(--presence);background:color-mix(in oklab, var(--presence) 12%, transparent);border:1px solid color-mix(in oklab, var(--presence) 35%, transparent);border-radius:var(--r-sm);cursor:pointer;font-size:12px;font-weight:600;font-family:var(--font);flex:none;padding:6px 13px}.dash-edit-btn.is-active{color:var(--on-presence,#fff);background:var(--presence);border-color:var(--presence)}.dash-refresh-btn,.dash-read-btn{align-items:center;gap:6px;display:inline-flex}.dash-refresh-btn:disabled,.dash-read-btn:disabled{cursor:default;opacity:.7}.dash-refresh-btn svg,.dash-read-btn svg{width:13px;height:13px}.dash-read-btn{color:var(--presence)}.dash-refresh-spin{animation:.8s linear infinite dash-refresh-spin}@keyframes dash-refresh-spin{to{transform:rotate(360deg)}}.dash-refresh-hint{color:var(--text-muted);flex:none;font-size:11px}.dash-edit-bar{border:1px solid color-mix(in oklab, var(--presence) 28%, transparent);background:color-mix(in oklab, var(--presence) 8%, transparent);border-radius:var(--r-md);flex-wrap:wrap;justify-content:space-between;align-items:center;gap:12px;padding:10px 14px;display:flex;position:relative}.dash-edit-hint{color:var(--text-secondary);font-size:12.5px}.dash-edit-add{color:var(--on-presence,#fff);background:var(--presence);border-radius:var(--r-sm);cursor:pointer;font-size:12px;font-weight:600;font-family:var(--font);border:none;flex:none;padding:7px 14px}.dash-palette{z-index:6;background:var(--surface-elevated);border:1px solid var(--line);border-radius:var(--r-md);min-width:180px;box-shadow:var(--shadow-modal);flex-direction:column;gap:2px;padding:6px;display:flex;position:absolute;top:calc(100% + 6px);right:14px}.dash-palette-item{text-align:left;color:var(--text-primary);border-radius:var(--r-sm);cursor:pointer;font-size:13px;font-family:var(--font);background:0 0;border:none;padding:9px 11px}.dash-palette-item:hover{background:var(--surface-glass)}.dash-tile--editing{border:1.5px dashed color-mix(in oklab, var(--presence) 45%, transparent);border-radius:18px;padding:2px;position:relative}.dash-tile--dragging{opacity:.55}.dash-tile-chrome{z-index:3;background:color-mix(in oklab, var(--surface-elevated) 92%, var(--presence));border-radius:var(--r-lg) var(--r-lg) 0 0;justify-content:space-between;align-items:center;gap:8px;padding:5px 8px;display:flex;position:absolute;top:-1px;left:-1px;right:-1px}.dash-tile-handle{cursor:grab;color:var(--text-muted);border-radius:var(--r-sm);touch-action:none;-webkit-user-select:none;user-select:none;padding:2px 6px;font-size:13px}.dash-tile-handle:hover{color:var(--text-primary);background:var(--surface-glass)}.dash-tile-ctrls{align-items:center;gap:6px;display:inline-flex}.dash-tile-size{font-family:var(--font-data,var(--font));color:var(--presence);background:color-mix(in oklab, var(--presence) 14%, transparent);border-radius:var(--r-sm);cursor:pointer;border:none;padding:3px 8px;font-size:10px;font-weight:700}.dash-tile-x{width:22px;height:22px;color:var(--danger);background:color-mix(in oklab, var(--danger) 12%, transparent);border-radius:var(--r-sm);cursor:pointer;border:none;justify-content:center;align-items:center;font-size:13px;display:inline-flex}.dash-tile--editing .card{margin-top:30px}.dash-overview{width:min(100%, var(--canvas-col-max));flex-direction:column;gap:36px;margin:0 auto;padding:36px 26px 72px;display:flex}.dash-ov-kicker{letter-spacing:.22em;text-transform:uppercase;color:var(--text-muted);margin-bottom:10px;font-size:11px;font-weight:600}.dash-ov-title{font-family:var(--font-voice,var(--font));letter-spacing:-.02em;color:var(--text-primary);margin:0;font-size:34px;font-weight:600;line-height:1.18}.dash-ov-lede{color:var(--text-secondary);max-width:660px;margin:12px 0 0;font-size:14.5px;line-height:1.6}.dash-ov-cta{align-items:center;gap:16px;margin-top:20px;display:flex}.dash-ov-link{color:var(--presence);font-size:13px;font-weight:600;text-decoration:none}.dash-ov-label{font-family:var(--font-data,var(--font));letter-spacing:.16em;text-transform:uppercase;color:var(--text-muted);margin-bottom:16px;font-size:10px;font-weight:600}.dash-ov-steps{grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:14px;display:grid}.dash-ov-step,.dash-ov-layer{border:1px solid var(--line-soft);border-radius:var(--r-md);background:var(--surface-elevated);gap:12px;padding:16px;display:flex}.dash-ov-step-n{border-radius:var(--r-sm);width:24px;height:24px;font-family:var(--font-data,var(--font));color:var(--presence);background:color-mix(in oklab, var(--presence) 14%, transparent);flex:none;justify-content:center;align-items:center;font-size:12px;font-weight:700;display:flex}.dash-ov-step-text{flex-direction:column;gap:4px;min-width:0;display:flex}.dash-ov-step-title{color:var(--text-primary);font-size:13.5px;font-weight:700}.dash-ov-step-body{color:var(--text-muted);font-size:12.5px;line-height:1.55}.dash-ov-layers{flex-direction:column;gap:12px;display:flex}.dash-ov-layer-tag{font-family:var(--font-data,var(--font));letter-spacing:.08em;color:var(--tag,var(--presence));background:color-mix(in oklab, var(--tag,var(--presence)) 14%, transparent);border-radius:var(--r-sm);flex:none;align-self:flex-start;padding:4px 8px;font-size:9px;font-weight:700}.dash-ov-note{color:var(--text-muted);margin:16px 0 0;font-size:12.5px;font-style:italic;line-height:1.6}.xt-fold{border-top:1px solid var(--line-soft);margin-top:14px;padding-top:12px}.xt-fold-label{color:var(--text-muted);margin-bottom:8px;font-size:12px;font-style:italic}.xt-fold-chips{flex-wrap:wrap;gap:8px;display:flex}.xt-fold-chip{color:var(--text-primary);background:var(--surface-glass);border:1px solid var(--line);border-radius:var(--r-full);cursor:pointer;font-size:12px;font-weight:600;font-family:var(--font);padding:7px 13px;transition:border-color .14s}.xt-fold-chip:hover{border-color:var(--insight)}.xt-fold-chip.xt-fold-armed{color:var(--warning);background:color-mix(in oklab, var(--warning) 14%, var(--surface-glass));border-color:color-mix(in oklab, var(--warning) 50%, var(--line))}.dash-fill{align-items:center;gap:6px;margin-top:8px;display:flex}.dash-fill-input{background:var(--surface-elevated);border:1px solid var(--line);min-width:0;font-size:12.5px;font-family:var(--font);color:var(--text-primary);border-radius:9px;flex:1;padding:7px 11px}.dash-fill-input:focus{border-color:var(--presence);outline:none}.dash-fill-unit{color:var(--text-muted);flex:none;font-size:12px}.dash-fill-save{font-size:12px;font-weight:600;font-family:var(--font);cursor:pointer;color:var(--on-presence,#fff);background:var(--presence);border:none;border-radius:9px;flex:none;padding:7px 13px}.dash-fill-save:disabled{opacity:.5;cursor:default}.dash-set-danger{border-color:color-mix(in oklab, var(--danger) 30%, var(--line-soft))}.dash-del-btn{border:1px solid color-mix(in oklab, var(--danger) 40%, transparent);background:color-mix(in oklab, var(--danger) 10%, transparent);color:var(--danger);font-size:13px;font-weight:600;font-family:var(--font);cursor:pointer;border-radius:9px;align-self:flex-start;padding:8px 14px;transition:background .14s,color .14s}.dash-del-btn.armed{background:var(--danger);color:var(--on-presence,#fff)}.dash-talk-pin{border:1px solid color-mix(in oklab, var(--insight) 40%, transparent);background:color-mix(in oklab, var(--insight) 10%, transparent);color:var(--insight);font-size:12.5px;font-weight:600;font-family:var(--font);cursor:pointer;border-radius:9px;align-self:flex-start;margin-top:4px;padding:7px 13px}.dash-talk-pin:hover{background:color-mix(in oklab, var(--insight) 16%, transparent)}.dash-talk-pinned{color:var(--insight);align-self:flex-start;margin-top:4px;font-size:12.5px;font-weight:600}.xt-pick{border-bottom:1px solid var(--line-soft);background:var(--surface-glass);flex-wrap:wrap;align-items:center;gap:10px;padding:10px 20px;display:flex}.xt-pick-label{font-family:var(--font-data,var(--font));letter-spacing:.12em;text-transform:uppercase;color:var(--text-muted);font-size:9.5px;font-weight:600}.xt-pick-chips{flex-wrap:wrap;gap:7px;min-width:0;display:flex}.xt-pick-chip{text-overflow:ellipsis;white-space:nowrap;max-width:220px;color:var(--text-secondary);background:var(--surface-elevated);border:1px solid var(--line);border-radius:var(--r-full);cursor:pointer;font-size:12px;font-weight:600;font-family:var(--font);padding:6px 12px;overflow:hidden}.xt-pick-chip.is-active{color:var(--on-presence,#fff);background:var(--presence);border-color:var(--presence)}.xt-cadence-pick{background:0 0;border-bottom:none;flex-direction:column;align-items:flex-start;gap:8px;padding:0}.dash-sr-only{clip:rect(0, 0, 0, 0);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.tpl-back{color:var(--text-muted);cursor:pointer;font-size:13px;font-weight:600;font-family:var(--font);background:0 0;border:none;padding:0}.tpl-back:hover{color:var(--text-primary)}.tpl-grid{grid-template-columns:repeat(2,1fr);gap:12px;padding:20px;display:grid;overflow-y:auto}.tpl-tile{text-align:left;border:1px solid var(--line);border-radius:var(--r-md);background:var(--surface-glass);cursor:pointer;font-family:var(--font);flex-direction:column;align-items:flex-start;gap:6px;padding:16px 18px;transition:border-color .14s,background .14s;display:flex}.tpl-tile:hover{border-color:var(--presence);background:color-mix(in oklab, var(--presence) 6%, var(--surface-glass))}.tpl-tile-label{color:var(--text-primary);font-size:14px;font-weight:700}.tpl-tile-blurb{color:var(--text-secondary);font-size:12px;line-height:1.45}@media (width<=640px){.tpl-grid{grid-template-columns:1fr}}.tpl-form{flex-direction:column;gap:16px;padding:20px;display:flex;overflow-y:auto}.tpl-field{flex-direction:column;gap:6px;display:flex}.tpl-chip-group{flex-direction:column;gap:8px;display:flex}.tpl-chips{flex-wrap:wrap;gap:8px;display:flex}.tpl-chip{border:1px solid var(--line);border-radius:var(--r-full);background:var(--surface-elevated);cursor:pointer;font-family:var(--font);align-items:center;gap:7px;padding:6px 12px;transition:opacity .14s,border-color .14s;display:flex}.tpl-chip.xt-comp--metric{border-color:color-mix(in oklab, var(--insight) 35%, var(--line))}.tpl-chip.xt-comp--risk{border-color:color-mix(in oklab, var(--warning) 35%, var(--line))}.tpl-chip.xt-comp--goal{border-color:color-mix(in oklab, var(--presence) 35%, var(--line))}.tpl-chip.tpl-chip-off{opacity:.5}.tpl-chip-kind{font-family:var(--font-data,var(--font));letter-spacing:.1em;color:var(--hl,var(--presence));font-size:9px;font-weight:700}.tpl-chip-label{color:var(--text-primary);font-size:12px;font-weight:600}.tpl-chip-state{color:var(--text-muted);font-size:10.5px}.tpl-create{cursor:pointer;font-size:13px;font-weight:700;font-family:var(--font);color:var(--on-presence,#fff);background:var(--presence);border:none;border-radius:10px;padding:10px 18px}.tpl-create:disabled{opacity:.5;cursor:default}.tpl-interstitial{flex-direction:column;gap:14px;padding:28px 24px;display:flex}.tpl-interstitial-text{color:var(--text-primary);margin:0;font-size:14px;line-height:1.6}.tpl-interstitial-actions{flex-wrap:wrap;gap:10px;display:flex}.tpl-fold-btn{cursor:pointer;font-size:13px;font-weight:700;font-family:var(--font);color:var(--on-presence,#fff);background:var(--presence);border:none;border-radius:10px;padding:10px 16px}.tpl-create-anyway{border:1px solid var(--line);cursor:pointer;font-size:13px;font-weight:600;font-family:var(--font);color:var(--text-secondary);background:var(--surface-glass);border-radius:10px;padding:10px 16px}.tpl-ask-row{gap:10px;display:flex}.tpl-ask-input{border-radius:var(--r-full);flex:1;min-width:0;padding:14px 20px;font-size:15px}.tpl-examples{flex-wrap:wrap;gap:8px;margin-top:12px;display:flex}.tpl-example-chip{border:1px solid var(--line);border-radius:var(--r-full);font-size:12.5px;font-weight:500;font-family:var(--font);color:var(--text-secondary);background:var(--surface-glass);cursor:pointer;transition:color var(--m-fast) var(--ease-out), border-color var(--m-fast) var(--ease-out), background var(--m-fast) var(--ease-out);padding:7px 14px}.tpl-example-chip:hover{color:var(--text-primary);border-color:var(--line-strong);background:var(--surface-glass-strong)}.tpl-example-chip:disabled{opacity:.5;cursor:default}.tpl-gate-note{color:var(--text-muted);margin:14px 0 0;font-size:12.5px;line-height:1.6}.tpl-cadence-note{font-family:var(--font-data,var(--font));letter-spacing:.08em;text-transform:uppercase;color:var(--text-muted);align-self:center;margin-right:auto;font-size:10px}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{t as e}from"./react-BZJXY1be.js";import{t}from"./compiler-runtime-qQQXpJgv.js";import{o as n}from"./ledger-Cv0LBflx.js";var r=e(),i=`mavea-dash-settings-v1`,a=i,o={dailySearchBudget:40,briefingEnabled:!0,briefingSpoken:!1,keyNudgeShown:!1};function s(e){return Math.min(200,Math.max(5,Math.round(e)))}function c(e){return!!e&&typeof e==`object`}function l(e){return c(e)?{dailySearchBudget:typeof e.dailySearchBudget==`number`&&Number.isFinite(e.dailySearchBudget)?s(e.dailySearchBudget):o.dailySearchBudget,briefingEnabled:typeof e.briefingEnabled==`boolean`?e.briefingEnabled:o.briefingEnabled,briefingSpoken:typeof e.briefingSpoken==`boolean`?e.briefingSpoken:o.briefingSpoken,keyNudgeShown:typeof e.keyNudgeShown==`boolean`?e.keyNudgeShown:o.keyNudgeShown}:{...o}}var u;function d(){try{if(typeof localStorage>`u`)return{...o};let e=localStorage.getItem(i);return e?l(JSON.parse(e)):{...o}}catch{return{...o}}}function f(){return u??=d(),u}function p(e){u=e;try{typeof localStorage<`u`&&localStorage.setItem(i,JSON.stringify(e))}catch{}try{typeof window<`u`&&typeof CustomEvent==`function`&&window.dispatchEvent(new CustomEvent(a,{detail:e}))}catch{}}function m(){return f()}function h(e){p(l({...f(),...e}))}function g(){u=void 0}function _(e){let t=t=>{(t.key===null||t.key===i)&&(g(),e())};return window.addEventListener(a,e),window.addEventListener(`storage`,t),()=>{window.removeEventListener(a,e),window.removeEventListener(`storage`,t)}}function v(){return(0,r.useSyncExternalStore)(_,m)}var y=.85;function b(e){let t=new Date(e);return t.setHours(24,0,0,0),t.getTime()}function x(e,t,r){let i=n(e,r);return{used:i,cap:t,amber:i>=t*y,paused:i>=t,resumesAt:b(r)}}var S=t(),C=new Set,w=`mavea-dashboard-data-pending`;function T(e,t){for(let n of e)t?C.add(n):C.delete(n);try{typeof window<`u`&&typeof CustomEvent==`function`&&window.dispatchEvent(new CustomEvent(w))}catch{}}function E(e){return window.addEventListener(w,e),()=>window.removeEventListener(w,e)}function D(e){let t=(0,S.c)(2),n;return t[0]===e?n=t[1]:(n=()=>C.has(e),t[0]=e,t[1]=n),(0,r.useSyncExternalStore)(E,n,O)}function O(){return!1}export{h as a,m as i,D as n,v as o,x as r,T as t};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
var e={diagramflow:{title:`The solver loop`,icon:`layers`,iconColor:`var(--presence)`,layout:`cycle`,nodes:[{id:`init`,label:`Initialize field`,kind:`start`},{id:`assemble`,label:`Assemble system`,sub:`discretize PDE`},{id:`solve`,label:`Solve linear system`,kind:`accent`},{id:`check`,label:`Residual < tol?`,kind:`muted`},{id:`done`,label:`Converged`,kind:`good`}],edges:[{from:`init`,to:`assemble`},{from:`assemble`,to:`solve`},{from:`solve`,to:`check`},{from:`check`,to:`assemble`,label:`no`,kind:`warn`,dashed:!0},{from:`check`,to:`done`,label:`yes`,kind:`good`}],footer:`Each iteration re-assembles and re-solves until the residual falls below tolerance.`},composite:{title:`Launch readiness`,icon:`layers`,regions:[{block:{type:`kpi`,id:`gallery-composite-kpi`,props:{title:`Release checks`,kpis:[{val:`12/12`,label:`Passing`}]}},span:5},{block:{type:`list`,id:`gallery-composite-list`,props:{title:`Next steps`,items:[`Ship the candidate`,`Watch real-user metrics`]}},span:7}],footer:`The same typed children and layout path used in Live.`},sequencediagram:{title:`How a graded exam flows`,actors:[{id:`you`,label:`You`},{id:`prof`,label:`Prof`},{id:`lms`,label:`LMS`}],messages:[{from:`you`,to:`prof`,label:`submit`},{from:`prof`,to:`lms`,label:`enter grade`},{from:`lms`,to:`you`,label:`notify`,reply:!0}]},statemachine:{title:`Study session states`,states:[{id:`idle`,label:`Idle`,start:!0},{id:`study`,label:`Study`},{id:`break`,label:`Break`},{id:`done`,label:`Done`,final:!0}],transitions:[{from:`idle`,to:`study`,label:`start`},{from:`study`,to:`break`,label:`25 min`},{from:`break`,to:`study`,label:`resume`},{from:`study`,to:`done`,label:`finish`}]},erdiagram:{title:`How your grades data is modelled`,entities:[{id:`student`,label:`Student`,fields:[{name:`id`,type:`uuid`,key:`pk`},{name:`name`,type:`text`}]},{id:`grade`,label:`Grade`,fields:[{name:`id`,type:`uuid`,key:`pk`},{name:`student_id`,type:`uuid`,key:`fk`},{name:`course`,type:`text`},{name:`score`,type:`int`}]}],relationships:[{from:`student`,to:`grade`,fromCard:`1`,toCard:`many`,label:`earns`}]},circuitdiagram:{title:`A simple series circuit`,components:[{id:`bat`,kind:`battery`,x:20,y:50,label:`9V`},{id:`r1`,kind:`resistor`,x:60,y:20,label:`R₁ 10Ω`},{id:`bulb`,kind:`bulb`,x:80,y:50}],wires:[{from:`bat`,to:`r1`},{from:`r1`,to:`bulb`},{from:`bulb`,to:`bat`}],footer:`Current is the same everywhere in series; the bulb’s brightness tracks it.`},controlblockdiagram:{title:`Your Thermostat's Feedback Loop`,icon:`sliders`,iconColor:`var(--insight)`,blocks:[{id:`setpoint`,label:`Setpoint 68°F`,kind:`block`},{id:`err`,label:`Σ`,kind:`sum`},{id:`ctrl`,label:`Controller`,kind:`block`},{id:`heater`,label:`Heater`,kind:`block`},{id:`room`,label:`Room Temp`,kind:`block`},{id:`sensor`,label:`Sensor H(s)`,kind:`block`}],wires:[{from:`setpoint`,to:`err`,sign:`plus`},{from:`err`,to:`ctrl`},{from:`ctrl`,to:`heater`},{from:`heater`,to:`room`},{from:`room`,to:`sensor`,feedback:!0},{from:`sensor`,to:`err`,sign:`minus`,feedback:!0}],footer:`The sensor feeds measured room temperature back with a minus sign; a wide 15A-driven duty cycle (the controller's gain) is what turned a 2°F drift into the heating line item that jumped your bill.`},fiveforces:{title:`Why the market is pushing us this way`,icon:`chart`,iconColor:`var(--warning)`,industry:`AI coding assistants`,forces:[{id:`rivalry`,label:`Well-funded incumbents`,strength:`high`,note:`Two capitalized players already own distribution.`},{id:`newEntrants`,label:`New entrants`,strength:`high`,note:`Foundation-model APIs lower the barrier every quarter.`},{id:`suppliers`,label:`Model API providers`,strength:`medium`,note:`A handful of frontier labs set the price and the pace.`},{id:`buyers`,label:`Enterprise buyers`,strength:`medium`,note:`Switching cost is low until data + workflow lock-in builds.`},{id:`substitutes`,label:`General chat LLMs`,strength:`high`,note:`A generic assistant already covers the easy 80% of asks, free.`}],footer:`Rivalry and substitutes are the two forces working against the fictional company — source visibility is one possible response.`},fivewhychain:{title:`Root cause: the SMB churn spike`,icon:`eye`,iconColor:`var(--danger)`,problem:`SMB churn nearly doubled in two months`,whys:[{question:`Why did SMB churn spike?`,answer:`58% of cancellations cite the February price increase.`},{question:`Why did the price increase hit so hard?`,answer:`It landed as a flat 40% jump with no advance notice.`},{question:`Why no advance notice or phased rollout?`,answer:`The pricing change shipped with the Q1 close, not a customer-comms plan.`},{question:`Why wasn't comms part of the pricing rollout?`,answer:`Pricing changes have never needed sign-off from anyone outside finance.`},{question:`Why is there no cross-team sign-off on pricing?`,answer:`There's no defined process connecting pricing, growth, and support before a change ships.`}],rootCause:`Missing cross-team process for pricing changes, not the price itself.`,footer:`Fix the process and the next price change stops costing accounts.`},sysarchdiagram:{title:`Whiteboard: a URL shortener at scale`,icon:`share`,iconColor:`var(--presence)`,nodes:[{id:`client`,label:`Client`,kind:`client`},{id:`cdn`,label:`CDN`,kind:`cdn`,sub:`static assets`},{id:`lb`,label:`Load Balancer`,kind:`loadbalancer`},{id:`api`,label:`API Service`,kind:`service`,sub:`×12 instances`},{id:`cache`,label:`Redis Cache`,kind:`cache`,sub:`hot slugs`},{id:`queue`,label:`Write Queue`,kind:`queue`,sub:`Kafka`},{id:`db`,label:`Postgres`,kind:`database`,sub:`primary + replicas`},{id:`gw`,label:`Auth Gateway`,kind:`gateway`}],edges:[{from:`client`,to:`cdn`,protocol:`HTTPS`},{from:`client`,to:`gw`,protocol:`HTTPS`},{from:`gw`,to:`lb`},{from:`lb`,to:`api`,protocol:`HTTP/2`},{from:`api`,to:`cache`,label:`read-through`},{from:`api`,to:`queue`,label:`enqueue write`},{from:`queue`,to:`db`,label:`batched insert`},{from:`cache`,to:`db`,label:`cache-aside`,protocol:`TCP:5432`}],footer:`Reads hit the cache first (sub-ms for hot slugs); writes go through the queue so Postgres never sees a request-rate spike directly. The gateway terminates auth before anything reaches the load balancer.`},datapipeline:{title:`How test_set.parquet gets built`,icon:`table`,iconColor:`var(--insight)`,stages:[{id:`raw`,label:`Ticket Events`,kind:`source`,sub:`Kafka topic`},{id:`dedup`,label:`Dedup & Clean`,kind:`transform`,sub:`drop dupes, strip PII`},{id:`label`,label:`Join Labels`,kind:`transform`,sub:`label-queue export`},{id:`features`,label:`Feature Store`,kind:`store`,sub:`Parquet, versioned`},{id:`split`,label:`Train/Test Split`,kind:`transform`,sub:`80/20 stratified`},{id:`train`,label:`train_set.parquet`,kind:`sink`,sub:`33,600 rows`},{id:`test`,label:`test_set.parquet`,kind:`sink`,sub:`8,400 rows`}],edges:[{from:`raw`,to:`dedup`,label:`nightly batch`},{from:`dedup`,to:`label`},{from:`label`,to:`features`,label:`write`},{from:`features`,to:`split`,label:`read`},{from:`split`,to:`train`},{from:`split`,to:`test`}],footer:`Dedup and the label join both run before anything lands in the feature store, so the same cleaned, labeled row is what both the training split and this eval set are drawn from — no separate path for either.`},threatmodel:{title:`Threat model — the Atlas v3 search path`,icon:`shield`,iconColor:`var(--danger)`,assets:[{id:`client`,name:`Web / mobile client`,kind:`external-entity`},{id:`gateway`,name:`API Gateway`,kind:`process`},{id:`search`,name:`Search Service`,kind:`process`},{id:`auth`,name:`Auth Service`,kind:`process`},{id:`userdb`,name:`User DB`,kind:`datastore`},{id:`index`,name:`Search Index`,kind:`datastore`}],boundaries:[{label:`Public internet`,contains:[`client`]},{label:`Application tier`,contains:[`gateway`,`search`,`auth`]},{label:`Data tier`,contains:[`userdb`,`index`]}],threats:[{assetId:`gateway`,stride:`spoofing`,mitigation:`mTLS + signed JWT on every internal hop.`,status:`mitigated`},{assetId:`gateway`,stride:`repudiation`,mitigation:`Structured audit log per request.`,status:`mitigated`},{assetId:`auth`,stride:`tampering`,mitigation:`Request signing lands with RFC-114 phase 2.`,status:`open`},{assetId:`search`,stride:`info-disclosure`,mitigation:`Field-level redaction on index responses.`,status:`mitigated`},{assetId:`index`,stride:`dos`,mitigation:`Rate limiting at the gateway.`,status:`mitigated`},{assetId:`userdb`,stride:`elevation`,mitigation:`Privilege review scheduled this sprint.`,status:`open`}],footer:`Two threats are still open — request signing on Auth ships with RFC-114 phase 2, and the User DB privilege review is this sprint.`},foodweb:{title:`Who ate whom in the Cretaceous`,icon:`globe`,iconColor:`var(--insight)`,tiers:[`Plants`,`Plant-eaters`,`Hunters`,`Top predator`],organisms:[{id:`ferns`,tier:0,label:`Ferns & cycads`},{id:`conifers`,tier:0,label:`Conifers`},{id:`tric`,tier:1,label:`Triceratops`},{id:`edmont`,tier:1,label:`Edmontosaurus`},{id:`ankyl`,tier:1,label:`Ankylosaurus`},{id:`dromae`,tier:2,label:`Dromaeosaurus`},{id:`trex`,tier:3,label:`T. rex`}],links:[{from:`ferns`,to:`tric`},{from:`conifers`,to:`edmont`},{from:`ferns`,to:`ankyl`},{from:`conifers`,to:`tric`},{from:`tric`,to:`dromae`},{from:`edmont`,to:`dromae`},{from:`dromae`,to:`trex`},{from:`tric`,to:`trex`},{from:`edmont`,to:`trex`}],footer:`T. rex sat at the top, but it likely scavenged just as often as it hunted.`},recursiontree:{title:`Naive Recursive fib(4)`,icon:`spark`,iconColor:`var(--presence)`,root:{call:`fib(4)`,result:3,children:[{call:`fib(3)`,result:2,children:[{call:`fib(2)`,result:1,children:[{call:`fib(1)`,result:1},{call:`fib(0)`,result:0}]},{call:`fib(1)`,result:1}]},{call:`fib(2)`,result:1,children:[{call:`fib(1)`,result:1},{call:`fib(0)`,result:0}]}]},footer:`fib(2) is recomputed twice here and the redundant subtree only grows with n — O(2ⁿ) calls total. A memo table (see the LCS dptable above) collapses each distinct call to O(1) after its first evaluation.`},primefactortree:{title:`Prime factorization of 360`,icon:`share`,iconColor:`var(--insight)`,number:360,nodes:[{value:360,isPrime:!1,children:[{value:8,isPrime:!1,children:[{value:2,isPrime:!0},{value:4,isPrime:!1,children:[{value:2,isPrime:!0},{value:2,isPrime:!0}]}]},{value:45,isPrime:!1,children:[{value:9,isPrime:!1,children:[{value:3,isPrime:!0},{value:3,isPrime:!0}]},{value:5,isPrime:!0}]}]}]},nnarchitecture:{title:`Transformer-v3 Routing Head`,icon:`layers`,iconColor:`var(--presence)`,connections:`sparse`,layers:[{name:`Input`,units:768},{name:`Hidden 1`,units:256,activation:`ReLU`},{name:`Hidden 2`,units:64,activation:`ReLU`},{name:`Output`,units:3,activation:`softmax`}],highlight:{layer:3,unit:0},footer:`A small classifier head sits on top of the frozen encoder — 768→256→64→3, softmax over {tier-1, enterprise, billing}. The highlighted output unit is the one deciding tier-1 routing.`},synthesisroute:{title:`Aspirin: a Convergent Synthesis`,icon:`spark`,iconColor:`var(--presence)`,nodes:[{id:`sal`,label:`Salicylic acid`,smiles:`OC(=O)c1ccccc1O`,role:`start`},{id:`anh`,label:`Acetic anhydride`,smiles:`CC(=O)OC(C)=O`,role:`start`},{id:`asp`,label:`Aspirin`,smiles:`CC(=O)Oc1ccccc1C(=O)O`,role:`target`},{id:`phenol`,label:`Phenol`,smiles:`Oc1ccccc1`,role:`start`}],edges:[{from:`sal`,to:`asp`,reagents:`Ac₂O`,conditions:`H₂SO₄ (cat.), 90 °C`,yieldPct:87},{from:`anh`,to:`asp`},{from:`asp`,to:`phenol`,direction:`retro`}],footer:`Salicylic acid and acetic anhydride converge on aspirin in one acetylation step (87% isolated yield). The dashed retrosynthetic arrow traces the target further back to phenol, the aromatic feedstock reached via a Kolbe–Schmitt carboxylation to salicylic acid.`},plasmidmap:{title:`pUC19 Cloning Vector`,icon:`sparkle`,iconColor:`var(--presence)`,sizeBp:2686,features:[{name:`AmpR`,startBp:1626,endBp:2486,kind:`marker`,strand:`minus`},{name:`lacZα`,startBp:396,endBp:626,kind:`gene`,strand:`plus`},{name:`lac promoter`,startBp:626,endBp:656,kind:`promoter`,strand:`plus`},{name:`rep origin`,startBp:2600,endBp:2650,kind:`terminator`}],sites:[{name:`EcoRI`,posBp:396,cutsOnce:!0},{name:`BamHI`,posBp:411,cutsOnce:!0},{name:`HindIII`,posBp:447,cutsOnce:!0},{name:`PstI`,posBp:435}],origin:{name:`ori`,posBp:2e3},footer:`The multiple cloning site sits inside lacZα (blue/white screening); AmpR selects for transformants. EcoRI, BamHI, and HindIII each cut once — safe choices for a single-site digest.`},argumentmap:{title:`SN2 vs SN1, which mechanism?`,claim:`The reaction proceeds via an SN2 (bimolecular nucleophilic substitution) mechanism.`,premises:[{type:`support`,text:`Primary substrate, minimal steric hindrance favors backside attack.`},{type:`support`,text:`Strong nucleophile (OH⁻) present in high concentration.`},{type:`support`,text:`Rate is second-order: rate = k[CH₃Br][OH⁻], both species appear in rate law.`},{type:`objection`,text:`Polar protic solvent (water) could stabilise a carbocation and favour SN1.`},{type:`qualifier`,text:`Solvent choice matters: aprotic solvents would further favour SN2 by not solvating the nucleophile.`}],verdict:`SN2 dominates: primary substrate + strong nucleophile + second-order kinetics all point the same way.`},toulmin:{title:`Toulmin Analysis`,icon:`proof`,iconColor:`var(--presence)`,claim:`Harry is a British citizen.`,grounds:`Harry was born in Bermuda.`,warrant:`A person born in Bermuda is generally a British citizen.`,backing:`On account of the British Nationality Acts and the statutes governing citizenship by birth in British territories.`,qualifier:`presumably`,rebuttal:`both his parents were foreign nationals, or he has since formally renounced his citizenship.`,footer:`The classic worked example from Toulmin’s <em>The Uses of Argument</em> (1958).`},castmap:{title:`Cast Map — The Keeper`,icon:`share`,iconColor:`var(--presence)`,nodes:[{id:`elara`,name:`Elara`,role:`The lighthouse keeper`,faction:`The Island`},{id:`mira`,name:`Mira`,role:`A runaway she shelters`,faction:`The Island`},{id:`bram`,name:`Old Bram`,role:`The keeper before her`,faction:`The Island`},{id:`davo`,name:`Captain Davo`,role:`Master of the Wrenn`,faction:`The Sea`},{id:`tomas`,name:`Tomas`,role:`Davo's first mate`,faction:`The Sea`},{id:`warden`,name:`The Warden`,role:`Hunts the runaway`,faction:`The Crown`}],links:[{from:`elara`,to:`mira`,kind:`ally`,label:`shelters`},{from:`bram`,to:`elara`,kind:`mentor`,label:`taught the light`},{from:`davo`,to:`mira`,kind:`family`,label:`her father`},{from:`elara`,to:`davo`,kind:`ally`,label:`saves the Wrenn`},{from:`warden`,to:`mira`,kind:`rival`,label:`hunts`},{from:`warden`,to:`elara`,kind:`rival`,label:`suspects`},{from:`tomas`,to:`davo`,kind:`betrays`,label:`cut the lines`}],caption:`Who protects whom — and who is hunting the runaway.`,footer:`The hidden <strong>father</strong> and the first mate’s <strong>betrayal</strong> are the two secrets the third act turns on.`},probabilitytree:{title:`Two Coin Tosses`,branches:[{label:`Heads`,prob:.5,children:[{label:`Heads`,prob:.5,outcome:`P = 0.25`},{label:`Tails`,prob:.5,outcome:`P = 0.25`}]},{label:`Tails`,prob:.5,children:[{label:`Heads`,prob:.5,outcome:`P = 0.25`},{label:`Tails`,prob:.5,outcome:`P = 0.25`}]}],note:`Each outcome has equal probability of 25%.`},datastructure:{title:`Binary search tree — searching for 40`,icon:`share`,iconColor:`var(--presence)`,kind:`bst`,nodes:[{id:`a`,value:50,left:`b`,right:`c`},{id:`b`,value:30,left:`d`,right:`e`},{id:`c`,value:70,left:`f`,right:`g`},{id:`d`,value:20},{id:`e`,value:40},{id:`f`,value:60},{id:`g`,value:80}],highlight:`e`,footer:`Search visits <b>50 → 30 → 40</b>: 40 < 50 go left, 40 > 30 go right, match. Three comparisons in a balanced tree of seven nodes — O(log n).`},causationchain:{title:`Causes and consequences of World War I`,event:{label:`Outbreak of World War I (1914)`},causes:[{label:`Assassination of Archduke Franz Ferdinand`,weight:.95,term:`short`},{label:`July Crisis and ultimatum to Serbia`,weight:.7,term:`short`},{label:`The alliance system (Triple Entente vs. Triple Alliance)`,weight:.85,term:`long`},{label:`Militarism and the arms race`,weight:.6,term:`long`},{label:`Imperial and nationalist rivalries`,weight:.55,term:`long`}],consequences:[{label:`Roughly 17 million deaths across the war`,weight:.9,term:`short`},{label:`Treaty of Versailles (1919)`,weight:.8,term:`short`},{label:`Collapse of four empires`,weight:.7,term:`long`},{label:`Rise of fascism and the path to World War II`,weight:.85,term:`long`}],footer:`The assassination was the trigger, but it lit a fuse laid by years of alliances, militarism, and rivalry — the line weights show which forces mattered most.`},protocolstack:{title:`The TCP/IP stack: how a request travels down`,icon:`layers`,iconColor:`var(--presence)`,layers:[{name:`Application`,role:`Your request lives here — the actual message a program speaks.`,protocols:[`HTTP`,`DNS`,`TLS`,`SMTP`]},{name:`Transport`,role:`Splits the message into segments and guarantees order & delivery.`,protocols:[`TCP`,`UDP`]},{name:`Internet`,role:`Wraps each segment in a packet and routes it across networks by IP address.`,protocols:[`IP`,`ICMP`]},{name:`Link`,role:`Frames the packet for the local wire and addresses the next hop by MAC.`,protocols:[`Ethernet`,`Wi-Fi`,`ARP`]}],packet:[{header:`Ethernet`,layer:`Link`},{header:`IP`,layer:`Internet`},{header:`TCP`,layer:`Transport`},{header:`HTTP`,layer:`Application`},{header:`Your request`,layer:`Application`}],caption:`Each layer adds its own header on the way down, then the receiver peels them off in reverse on the way back up.`},wiringdiagram:{title:`Three-Way Switch Loop`,icon:`spark`,iconColor:`var(--warning)`,nodes:[{id:`panel`,kind:`panel`,label:`Panel`,x:8,y:32},{id:`cb`,kind:`breaker`,label:`15A`,x:26,y:32},{id:`sw1`,kind:`switch3way`,label:`SW1`,x:46,y:14},{id:`sw2`,kind:`switch3way`,label:`SW2`,x:70,y:14},{id:`light`,kind:`light`,label:`Fixture`,x:90,y:32},{id:`gnd`,kind:`ground`,label:`Bond`,x:8,y:56}],wires:[{from:`panel`,to:`cb`,conductor:`hot`,gauge:`14 AWG`},{from:`cb`,to:`sw1`,conductor:`hot`},{from:`sw1`,to:`sw2`,conductor:`traveler`,gauge:`14/3`},{from:`sw2`,to:`light`,conductor:`hot`},{from:`light`,to:`panel`,conductor:`neutral`},{from:`panel`,to:`gnd`,conductor:`ground`}],caption:`One fixture controlled from two locations: the common feeds switch one, two travelers run between the switches, and the switched hot returns to the light.`,footer:`Black = hot, white = neutral, green = equipment ground, and the two travelers (here as 14/3) carry the switched leg between the 3-way switches.`},pipingschematic:{title:`Closed Hydronic Heating Loop`,icon:`sliders`,iconColor:`var(--insight)`,components:[{id:`tank`,kind:`tank`,label:`Buffer Tank`,x:12,y:18},{id:`pump`,kind:`pump`,label:`P-101`,x:42,y:18},{id:`heater`,kind:`heater`,label:`Boiler`,x:74,y:18},{id:`rad`,kind:`filter`,label:`Radiator`,x:74,y:46},{id:`valve`,kind:`valve`,label:`Balancing`,x:42,y:46},{id:`temp`,kind:`sensor`,label:`TT-1`,x:12,y:46}],lines:[{from:`tank`,to:`pump`,flow:!0,size:`DN50`},{from:`pump`,to:`heater`,flow:!0,size:`DN50`},{from:`heater`,to:`rad`,flow:!0,size:`DN40`},{from:`rad`,to:`valve`,flow:!0,size:`DN40`},{from:`valve`,to:`temp`,flow:!0},{from:`temp`,to:`tank`,flow:!0}],caption:`Water circulates buffer tank to pump to boiler, sheds heat at the radiator, then a balancing valve and return-temperature sensor close the loop back to the tank.`,footer:`Arrows show flow direction; line-size labels (DN50 supply, DN40 emitter branch) size each run for the design flow rate.`},logicgates:{title:`Half Adder`,icon:`share`,iconColor:`var(--presence)`,inputs:[{id:`A`,label:`A`,value:1},{id:`B`,label:`B`,value:0}],gates:[{id:`sum`,kind:`XOR`,inputs:[`A`,`B`]},{id:`carry`,kind:`AND`,inputs:[`A`,`B`]}],output:{from:`sum`,label:`Sum`},truth:[{row:[0,0],out:0},{row:[0,1],out:1},{row:[1,0],out:1},{row:[1,1],out:0}],caption:`A half adder sums two bits: the XOR gate produces the sum, the AND gate produces the carry. With A=1, B=0 the sum line lights (1) and there is no carry.`,footer:`The truth table row matching the live inputs is highlighted; flip A or B in your head and read the Sum column to see XOR in action.`},algorithmtrace:{title:`Bubble Sort — First Pass`,icon:`layers`,iconColor:`var(--presence)`,values:[5,1,4,2,8,3,7],steps:[{caption:`Start the pass: compare the first adjacent pair, 5 and 1.`,compare:[0,1],pointer:{i:0,j:1}},{caption:`5 > 1, so swap them — the larger value bubbles right.`,swapped:[0,1],pointer:{i:0,j:1}},{caption:`Advance the window and compare 5 and 4.`,compare:[1,2],pointer:{i:1,j:2}},{caption:`5 > 4, swap again.`,swapped:[1,2],pointer:{i:1,j:2}},{caption:`Compare 5 and 2.`,compare:[2,3],pointer:{i:2,j:3}},{caption:`5 > 2, swap.`,swapped:[2,3],pointer:{i:2,j:3}},{caption:`Compare 5 and 8 — already in order, no swap.`,compare:[3,4],pointer:{i:3,j:4}},{caption:`The largest value, 8, settles into the last sorted slot.`,highlight:[6],pointer:{i:5,j:6}}],caption:`Step through one full pass: each comparison either holds or swaps, walking the largest remaining value to the right end.`,footer:`After this pass the maximum (8) is locked in its final position; bubble sort repeats over the shrinking unsorted prefix.`},dptable:{title:`LCS — Longest Common Subsequence: "ABCB" vs "BCAB"`,recurrence:`dp[i][j] = dp[i-1][j-1]+1 if s[i]=t[j], else max(dp[i-1][j], dp[i][j-1])`,cols:[`ε`,`B`,`C`,`A`,`B`],rows:[`ε`,`A`,`B`,`C`,`B`],cells:[[0,0,0,0,0],[0,0,0,1,1],[0,1,1,1,2],[0,1,2,2,2],[0,1,2,2,3]],path:[[1,3],[2,4],[3,2],[4,4]],steps:[{caption:`Base case: row 0 and col 0 are all 0 — empty string has LCS 0 with anything.`,current:[0,0],deps:[]},{caption:`dp[1][3]: A matches A → dp[0][2]+1 = 1. First character matched.`,current:[1,3],deps:[[0,2]]},{caption:`dp[2][4]: B matches B → dp[1][3]+1 = 2. Two-character match.`,current:[2,4],deps:[[1,3]]},{caption:`dp[3][2]: C matches C → dp[2][1]+1 = 2.`,current:[3,2],deps:[[2,1]]},{caption:`dp[4][4]: B matches B → dp[3][3]+1 = 3. Final answer: LCS = "BCB" (length 3).`,current:[4,4],deps:[[3,3]]}],footer:`LCS is <b>"BCB"</b> (length 3). Backtrack from dp[4][4]=3 via diagonal match cells. Classic FAANG problem: edit distance, diff tools, DNA sequencing.`},cyclewheel:{title:`The water cycle`,icon:`cloud`,iconColor:`var(--presence)`,stages:[{label:`Evaporation`,caption:`Sun heats water to vapor`,icon:`sun`},{label:`Condensation`,caption:`Vapor cools into clouds`,icon:`cloud`},{label:`Precipitation`,caption:`Rain, snow, and hail fall`,icon:`rain`},{label:`Collection`,caption:`Water gathers in oceans`,icon:`globe`}],caption:`A closed loop driven by the sun: water leaves the surface as vapor, returns as precipitation, and collects to start the round again.`,footer:`No water is created or lost — the same supply circulates endlessly between the surface, the atmosphere, and back.`},hashtable:{title:`Hash table — separate chaining, h(k) = k mod 7`,size:7,hashFn:`h(k) = k mod 7`,entries:[{key:14,value:`Alice`},{key:21,value:`Bob`},{key:7,value:`Carol`},{key:3,value:`Dan`},{key:10,value:`Eve`},{key:1,value:`Frank`}],highlight:10,footer:`Keys 7, 14 and 21 hash to bucket 0 (all divisible by 7). Key 10 hashes to bucket 3, colliding with key 3 — the chain is walked to find Eve. Load factor = 6/7 ≈ 86%.`},trie:{title:`Prefix tree (Trie) — autocomplete words`,words:[`apple`,`app`,`apt`,`apply`,`bat`,`ball`,`ban`],highlight:`apply`,footer:`Trie lookup: O(m) where m = word length, regardless of dictionary size. Each edge is one character; double-ringed nodes mark end-of-word. Use for autocomplete, spell-check, prefix search.`},graphtrace:{title:`BFS Graph Traversal`,algorithm:`bfs`,nodes:[{id:`A`,label:`A`,x:50,y:10},{id:`B`,label:`B`,x:20,y:40},{id:`C`,label:`C`,x:80,y:40},{id:`D`,label:`D`,x:10,y:75},{id:`E`,label:`E`,x:40,y:75},{id:`F`,label:`F`,x:70,y:75}],edges:[{from:`A`,to:`B`},{from:`A`,to:`C`},{from:`B`,to:`D`},{from:`B`,to:`E`},{from:`C`,to:`F`}],steps:[{caption:`Start BFS at A. Add A to queue.`,current:`A`,frontier:[`A`],visited:[]},{caption:`Dequeue A. Enqueue neighbors B and C.`,current:`A`,visited:[`A`],frontier:[`B`,`C`]},{caption:`Dequeue B. Enqueue neighbors D and E.`,current:`B`,visited:[`A`,`B`],frontier:[`C`,`D`,`E`]},{caption:`Dequeue C. Enqueue neighbor F.`,current:`C`,visited:[`A`,`B`,`C`],frontier:[`D`,`E`,`F`]},{caption:`Dequeue D. No unvisited neighbors.`,current:`D`,visited:[`A`,`B`,`C`,`D`],frontier:[`E`,`F`]},{caption:`Dequeue E. No unvisited neighbors.`,current:`E`,visited:[`A`,`B`,`C`,`D`,`E`],frontier:[`F`]},{caption:`Dequeue F. Queue empty — BFS complete! Order: A B C D E F.`,current:`F`,visited:[`A`,`B`,`C`,`D`,`E`,`F`],frontier:[]}],footer:`BFS visits nodes level-by-level (breadth-first). Queue is FIFO. Time: O(V+E). Contrast with DFS which uses a stack and goes deep before wide.`},binarytree:{title:`BST Search — find 7`,nodes:[{id:`n10`,value:10,left:`n5`,right:`n15`},{id:`n5`,value:5,left:`n3`,right:`n7`},{id:`n15`,value:15},{id:`n3`,value:3},{id:`n7`,value:7}],root:`n10`,steps:[{caption:`Start at root: 10. Is 7 == 10?`,states:{n10:`visiting`}},{caption:`7 < 10 → go left to 5.`,states:{n10:`visited`,n5:`visiting`}},{caption:`7 > 5 → go right to 7.`,states:{n10:`visited`,n5:`visited`,n7:`visiting`}},{caption:`7 == 7 → Found! 3 comparisons.`,states:{n10:`visited`,n5:`visited`,n7:`found`}}],footer:`BST search: O(h) time where h is tree height — O(log n) balanced, O(n) worst case. Each comparison halves the search space in a balanced BST.`},sortingviz:{title:`Bubble Sort step-by-step`,algorithm:`Bubble Sort`,complexity:`o-n2`,values:[5,3,8,1,6],steps:[{caption:`Pass 1: compare 5 and 3.`,values:[5,3,8,1,6],compared:[0,1]},{caption:`5 > 3 → swap.`,values:[3,5,8,1,6],swapped:[0,1]},{caption:`Compare 5 and 8. No swap.`,values:[3,5,8,1,6],compared:[1,2]},{caption:`Compare 8 and 1.`,values:[3,5,8,1,6],compared:[2,3]},{caption:`8 > 1 → swap.`,values:[3,5,1,8,6],swapped:[2,3]},{caption:`Compare 8 and 6.`,values:[3,5,1,8,6],compared:[3,4]},{caption:`8 > 6 → swap. 8 is sorted!`,values:[3,5,1,6,8],swapped:[3,4],sorted:[4]},{caption:`Pass 2: 3 and 5. No swap.`,values:[3,5,1,6,8],compared:[0,1],sorted:[4]},{caption:`Compare 5 and 1.`,values:[3,5,1,6,8],compared:[1,2],sorted:[4]},{caption:`5 > 1 → swap.`,values:[3,1,5,6,8],swapped:[1,2],sorted:[4]},{caption:`5 and 6 — no swap. 6 sorted.`,values:[3,1,5,6,8],compared:[2,3],sorted:[3,4]},{caption:`Pass 3: 3 and 1.`,values:[3,1,5,6,8],compared:[0,1],sorted:[3,4]},{caption:`3 > 1 → swap. Done!`,values:[1,3,5,6,8],swapped:[0,1],sorted:[0,1,2,3,4]}],footer:`Bubble sort: O(n²) time. Each pass bubbles the largest unsorted element to its final position. Simple to understand, rarely used in practice.`},gridtrace:{title:`BFS Shortest Path on a Grid`,algorithm:`BFS`,steps:[{caption:`Find shortest path S→E. Walls (#) block movement.`,grid:[[{state:`start`},{state:`empty`},{state:`wall`},{state:`empty`}],[{state:`empty`},{state:`empty`},{state:`empty`},{state:`empty`}],[{state:`empty`},{state:`empty`},{state:`empty`},{state:`end`}]]},{caption:`BFS expands: S visited, neighbors queued.`,grid:[[{state:`visited`},{state:`queued`},{state:`wall`},{state:`empty`}],[{state:`queued`},{state:`empty`},{state:`empty`},{state:`empty`}],[{state:`empty`},{state:`empty`},{state:`empty`},{state:`end`}]]},{caption:`Wave reaches E. Shortest path length = 5.`,grid:[[{state:`path`},{state:`visited`},{state:`wall`},{state:`visited`}],[{state:`path`},{state:`path`},{state:`path`},{state:`visited`}],[{state:`visited`},{state:`visited`},{state:`visited`},{state:`end`}]]}],footer:`BFS guarantees shortest path in unweighted grids. O(rows×cols). Classic FAANG: islands (LC 200), rotting oranges (994), word search (79).`},tournamentbracket:{title:`Your projected playoff bracket`,icon:`share`,iconColor:`var(--presence)`,rounds:[`Wild Card`,`Semifinal`,`Final`],matchups:[{id:`wc-1`,round:0,slot:0,a:`Dynasty Dave`,winner:`a`},{id:`wc-2`,round:0,slot:1,a:`You · Gridiron`,winner:`a`},{id:`wc-3`,round:0,slot:2,a:`The Karens`,b:`Bottom Feeders`},{id:`wc-4`,round:0,slot:3,a:`Brady Bunch`,b:`Waiver Warriors`},{id:`sf-1`,round:1,slot:0,a:`Dynasty Dave`},{id:`sf-2`,round:1,slot:1,a:`You · Gridiron`},{id:`final`,round:2,slot:0}],footer:`Dynasty Dave and you both clinch a Wild Card bye with a win this week, everyone else plays in.`},prooftree:{title:`Natural deduction · P → R`,icon:`proof`,steps:[{id:`a1`,statement:`[P]`},{id:`p1`,statement:`P → Q`},{id:`p2`,statement:`Q → R`},{id:`s1`,statement:`Q`,rule:`→E`,from:[`a1`,`p1`]},{id:`s2`,statement:`R`,rule:`→E`,from:[`s1`,`p2`]},{id:`s3`,statement:`P → R`,rule:`→I`,from:[`s2`]}],conclusionId:`s3`,footer:`Read upward: each bar is one inference, its rule named at the right. The bracketed [P] is an assumption discharged by the final →I step — the shape of every conditional proof.`},fishbone:{title:`Why the loaf came out dense`,icon:`share`,effect:`Dense sourdough loaf`,categories:[{label:`Starter`,causes:[`Not at peak activity`,`Too little inoculation`]},{label:`Flour`,causes:[`Low-protein flour`,`Stale whole wheat`]},{label:`Process`,causes:[`Underproofed bulk`,`Degassed at shaping`]},{label:`Environment`,causes:[`Kitchen below 22 °C`,`Dry air crusts the dough`]},{label:`Baking`,causes:[`No steam in the oven`,`Baked before full preheat`]},{label:`Timing`,causes:[`Rushed the poke test`]}],footer:`An Ishikawa fishbone groups candidate causes by category — work each rib tip-to-spine, then test the likeliest twig first.`},classdiagram:{title:`A tiny 2D drawing engine`,icon:`layers`,classes:[{name:`Drawable`,stereotype:`interface`,methods:[`+ draw(ctx): void`]},{name:`Shape`,stereotype:`abstract`,fields:[`# x: number`,`# y: number`],methods:[`+ move(dx, dy): void`,`+ area(): number`]},{name:`Circle`,fields:[`- radius: number`],methods:[`+ area(): number`]},{name:`Rectangle`,fields:[`- w: number`,`- h: number`],methods:[`+ area(): number`]},{name:`CanvasScene`,fields:[`- shapes: Shape[]`],methods:[`+ add(s: Shape): void`,`+ render(): void`]},{name:`Viewport`,fields:[`- zoom: number`,`- panX: number`,`- panY: number`]}],relations:[{from:`Shape`,to:`Drawable`,kind:`implements`},{from:`Circle`,to:`Shape`,kind:`inheritance`},{from:`Rectangle`,to:`Shape`,kind:`inheritance`},{from:`CanvasScene`,to:`Shape`,kind:`aggregation`,label:`shapes *`},{from:`CanvasScene`,to:`Viewport`,kind:`composition`},{from:`CanvasScene`,to:`Drawable`,kind:`dependency`,label:`renders via`}],footer:`Five of the six UML relation kinds in one figure: hollow triangle = inheritance (dashed when implementing an interface), filled diamond = composition, hollow diamond = aggregation, dashed open arrow = dependency.`}};export{e as default};
|
|
1
|
+
var e={diagramflow:{title:`The solver loop`,icon:`layers`,iconColor:`var(--presence)`,layout:`cycle`,nodes:[{id:`init`,label:`Initialize field`,kind:`start`},{id:`assemble`,label:`Assemble system`,sub:`discretize PDE`},{id:`solve`,label:`Solve linear system`,kind:`accent`},{id:`check`,label:`Residual < tol?`,kind:`muted`},{id:`done`,label:`Converged`,kind:`good`}],edges:[{from:`init`,to:`assemble`},{from:`assemble`,to:`solve`},{from:`solve`,to:`check`},{from:`check`,to:`assemble`,label:`no`,kind:`warn`,dashed:!0},{from:`check`,to:`done`,label:`yes`,kind:`good`}],footer:`Each iteration re-assembles and re-solves until the residual falls below tolerance.`},composite:{title:`Launch readiness`,icon:`layers`,regions:[{block:{type:`kpi`,id:`gallery-composite-kpi`,props:{title:`Release checks`,kpis:[{val:`12/12`,label:`Passing`}]}},span:5},{block:{type:`list`,id:`gallery-composite-list`,props:{title:`Next steps`,items:[`Ship the candidate`,`Watch real-user metrics`]}},span:7}],footer:`The same typed children and layout path used in Live.`},sequencediagram:{title:`How a graded exam flows`,actors:[{id:`you`,label:`You`},{id:`prof`,label:`Prof`},{id:`lms`,label:`LMS`}],messages:[{from:`you`,to:`prof`,label:`submit`},{from:`prof`,to:`lms`,label:`enter grade`},{from:`lms`,to:`you`,label:`notify`,reply:!0}]},statemachine:{title:`Study session states`,states:[{id:`idle`,label:`Idle`,start:!0},{id:`study`,label:`Study`},{id:`break`,label:`Break`},{id:`done`,label:`Done`,final:!0}],transitions:[{from:`idle`,to:`study`,label:`start`},{from:`study`,to:`break`,label:`25 min`},{from:`break`,to:`study`,label:`resume`},{from:`study`,to:`done`,label:`finish`}]},erdiagram:{title:`How your grades data is modelled`,entities:[{id:`student`,label:`Student`,fields:[{name:`id`,type:`uuid`,key:`pk`},{name:`name`,type:`text`}]},{id:`grade`,label:`Grade`,fields:[{name:`id`,type:`uuid`,key:`pk`},{name:`student_id`,type:`uuid`,key:`fk`},{name:`course`,type:`text`},{name:`score`,type:`int`}]}],relationships:[{from:`student`,to:`grade`,fromCard:`1`,toCard:`many`,label:`earns`}]},circuitdiagram:{title:`A simple series circuit`,components:[{id:`bat`,kind:`battery`,x:20,y:50,label:`9V`},{id:`r1`,kind:`resistor`,x:60,y:20,label:`R₁ 10Ω`},{id:`bulb`,kind:`bulb`,x:80,y:50}],wires:[{from:`bat`,to:`r1`},{from:`r1`,to:`bulb`},{from:`bulb`,to:`bat`}],footer:`Current is the same everywhere in series; the bulb’s brightness tracks it.`},controlblockdiagram:{title:`Your Thermostat's Feedback Loop`,icon:`sliders`,iconColor:`var(--insight)`,blocks:[{id:`setpoint`,label:`Setpoint 68°F`,kind:`block`},{id:`err`,label:`Σ`,kind:`sum`},{id:`ctrl`,label:`Controller`,kind:`block`},{id:`heater`,label:`Heater`,kind:`block`},{id:`room`,label:`Room Temp`,kind:`block`},{id:`sensor`,label:`Sensor H(s)`,kind:`block`}],wires:[{from:`setpoint`,to:`err`,sign:`plus`},{from:`err`,to:`ctrl`},{from:`ctrl`,to:`heater`},{from:`heater`,to:`room`},{from:`room`,to:`sensor`,feedback:!0},{from:`sensor`,to:`err`,sign:`minus`,feedback:!0}],footer:`The sensor feeds measured room temperature back with a minus sign; a wide 15A-driven duty cycle (the controller's gain) is what turned a 2°F drift into the heating line item that jumped your bill.`},fiveforces:{title:`Why the market is pushing us this way`,icon:`chart`,iconColor:`var(--warning)`,industry:`AI coding assistants`,forces:[{id:`rivalry`,label:`Well-funded incumbents`,strength:`high`,note:`Two capitalized players already own distribution.`},{id:`newEntrants`,label:`New entrants`,strength:`high`,note:`Foundation-model APIs lower the barrier every quarter.`},{id:`suppliers`,label:`Model API providers`,strength:`medium`,note:`A handful of frontier labs set the price and the pace.`},{id:`buyers`,label:`Enterprise buyers`,strength:`medium`,note:`Switching cost is low until data + workflow lock-in builds.`},{id:`substitutes`,label:`General chat LLMs`,strength:`high`,note:`A generic assistant already covers the easy 80% of asks, free.`}],footer:`Rivalry and substitutes are the two forces working against the fictional company — source visibility is one possible response.`},fivewhychain:{title:`Root cause: the SMB churn spike`,icon:`eye`,iconColor:`var(--danger)`,problem:`SMB churn nearly doubled in two months`,whys:[{question:`Why did SMB churn spike?`,answer:`58% of cancellations cite the February price increase.`},{question:`Why did the price increase hit so hard?`,answer:`It landed as a flat 40% jump with no advance notice.`},{question:`Why no advance notice or phased rollout?`,answer:`The pricing change shipped with the Q1 close, not a customer-comms plan.`},{question:`Why wasn't comms part of the pricing rollout?`,answer:`Pricing changes have never needed sign-off from anyone outside finance.`},{question:`Why is there no cross-team sign-off on pricing?`,answer:`There's no defined process connecting pricing, growth, and support before a change ships.`}],rootCause:`Missing cross-team process for pricing changes, not the price itself.`,footer:`Fix the process and the next price change stops costing accounts.`},sysarchdiagram:{title:`Whiteboard: a URL shortener at scale`,icon:`share`,iconColor:`var(--presence)`,nodes:[{id:`client`,label:`Client`,kind:`client`},{id:`cdn`,label:`CDN`,kind:`cdn`,sub:`static assets`},{id:`lb`,label:`Load Balancer`,kind:`loadbalancer`},{id:`api`,label:`API Service`,kind:`service`,sub:`×12 instances`},{id:`cache`,label:`Redis Cache`,kind:`cache`,sub:`hot slugs`},{id:`queue`,label:`Write Queue`,kind:`queue`,sub:`Kafka`},{id:`db`,label:`Postgres`,kind:`database`,sub:`primary + replicas`},{id:`gw`,label:`Auth Gateway`,kind:`gateway`}],edges:[{from:`client`,to:`cdn`,protocol:`HTTPS`},{from:`client`,to:`gw`,protocol:`HTTPS`},{from:`gw`,to:`lb`},{from:`lb`,to:`api`,protocol:`HTTP/2`},{from:`api`,to:`cache`,label:`read-through`},{from:`api`,to:`queue`,label:`enqueue write`},{from:`queue`,to:`db`,label:`batched insert`},{from:`cache`,to:`db`,label:`cache-aside`,protocol:`TCP:5432`}],footer:`Reads hit the cache first (sub-ms for hot slugs); writes go through the queue so Postgres never sees a request-rate spike directly. The gateway terminates auth before anything reaches the load balancer.`},datapipeline:{title:`How test_set.parquet gets built`,icon:`table`,iconColor:`var(--insight)`,stages:[{id:`raw`,label:`Ticket Events`,kind:`source`,sub:`Kafka topic`},{id:`dedup`,label:`Dedup & Clean`,kind:`transform`,sub:`drop dupes, strip PII`},{id:`label`,label:`Join Labels`,kind:`transform`,sub:`label-queue export`},{id:`features`,label:`Feature Store`,kind:`store`,sub:`Parquet, versioned`},{id:`split`,label:`Train/Test Split`,kind:`transform`,sub:`80/20 stratified`},{id:`train`,label:`train_set.parquet`,kind:`sink`,sub:`33,600 rows`},{id:`test`,label:`test_set.parquet`,kind:`sink`,sub:`8,400 rows`}],edges:[{from:`raw`,to:`dedup`,label:`nightly batch`},{from:`dedup`,to:`label`},{from:`label`,to:`features`,label:`write`},{from:`features`,to:`split`,label:`read`},{from:`split`,to:`train`},{from:`split`,to:`test`}],footer:`Dedup and the label join both run before anything lands in the feature store, so the same cleaned, labeled row is what both the training split and this eval set are drawn from — no separate path for either.`},threatmodel:{title:`Threat model — the Atlas v3 search path`,icon:`shield`,iconColor:`var(--danger)`,assets:[{id:`client`,name:`Web / mobile client`,kind:`external-entity`},{id:`gateway`,name:`API Gateway`,kind:`process`},{id:`search`,name:`Search Service`,kind:`process`},{id:`auth`,name:`Auth Service`,kind:`process`},{id:`userdb`,name:`User DB`,kind:`datastore`},{id:`index`,name:`Search Index`,kind:`datastore`}],boundaries:[{label:`Public internet`,contains:[`client`]},{label:`Application tier`,contains:[`gateway`,`search`,`auth`]},{label:`Data tier`,contains:[`userdb`,`index`]}],threats:[{assetId:`gateway`,stride:`spoofing`,mitigation:`mTLS + signed JWT on every internal hop.`,status:`mitigated`},{assetId:`gateway`,stride:`repudiation`,mitigation:`Structured audit log per request.`,status:`mitigated`},{assetId:`auth`,stride:`tampering`,mitigation:`Request signing lands with RFC-114 phase 2.`,status:`open`},{assetId:`search`,stride:`info-disclosure`,mitigation:`Field-level redaction on index responses.`,status:`mitigated`},{assetId:`index`,stride:`dos`,mitigation:`Rate limiting at the gateway.`,status:`mitigated`},{assetId:`userdb`,stride:`elevation`,mitigation:`Privilege review scheduled this sprint.`,status:`open`}],footer:`Two threats are still open — request signing on Auth ships with RFC-114 phase 2, and the User DB privilege review is this sprint.`},foodweb:{title:`Who ate whom in the Cretaceous`,icon:`globe`,iconColor:`var(--insight)`,tiers:[`Plants`,`Plant-eaters`,`Hunters`,`Top predator`],organisms:[{id:`ferns`,tier:0,label:`Ferns & cycads`},{id:`conifers`,tier:0,label:`Conifers`},{id:`tric`,tier:1,label:`Triceratops`},{id:`edmont`,tier:1,label:`Edmontosaurus`},{id:`ankyl`,tier:1,label:`Ankylosaurus`},{id:`dromae`,tier:2,label:`Dromaeosaurus`},{id:`trex`,tier:3,label:`T. rex`}],links:[{from:`ferns`,to:`tric`},{from:`conifers`,to:`edmont`},{from:`ferns`,to:`ankyl`},{from:`conifers`,to:`tric`},{from:`tric`,to:`dromae`},{from:`edmont`,to:`dromae`},{from:`dromae`,to:`trex`},{from:`tric`,to:`trex`},{from:`edmont`,to:`trex`}],footer:`T. rex sat at the top, but it likely scavenged just as often as it hunted.`},recursiontree:{title:`Naive Recursive fib(4)`,icon:`spark`,iconColor:`var(--presence)`,root:{call:`fib(4)`,result:3,children:[{call:`fib(3)`,result:2,children:[{call:`fib(2)`,result:1,children:[{call:`fib(1)`,result:1},{call:`fib(0)`,result:0}]},{call:`fib(1)`,result:1}]},{call:`fib(2)`,result:1,children:[{call:`fib(1)`,result:1},{call:`fib(0)`,result:0}]}]},footer:`fib(2) is recomputed twice here and the redundant subtree only grows with n — O(2ⁿ) calls total. A memo table (see the LCS dptable above) collapses each distinct call to O(1) after its first evaluation.`},primefactortree:{title:`Prime factorization of 360`,icon:`share`,iconColor:`var(--insight)`,number:360,nodes:[{value:360,isPrime:!1,children:[{value:8,isPrime:!1,children:[{value:2,isPrime:!0},{value:4,isPrime:!1,children:[{value:2,isPrime:!0},{value:2,isPrime:!0}]}]},{value:45,isPrime:!1,children:[{value:9,isPrime:!1,children:[{value:3,isPrime:!0},{value:3,isPrime:!0}]},{value:5,isPrime:!0}]}]}]},nnarchitecture:{title:`Transformer-v3 Routing Head`,icon:`layers`,iconColor:`var(--presence)`,connections:`sparse`,layers:[{name:`Input`,units:768},{name:`Hidden 1`,units:256,activation:`ReLU`},{name:`Hidden 2`,units:64,activation:`ReLU`},{name:`Output`,units:3,activation:`softmax`}],highlight:{layer:3,unit:0},footer:`A small classifier head sits on top of the frozen encoder — 768→256→64→3, softmax over {tier-1, enterprise, billing}. The highlighted output unit is the one deciding tier-1 routing.`},synthesisroute:{title:`Aspirin: a Convergent Synthesis`,icon:`spark`,iconColor:`var(--presence)`,nodes:[{id:`sal`,label:`Salicylic acid`,smiles:`OC(=O)c1ccccc1O`,role:`start`},{id:`anh`,label:`Acetic anhydride`,smiles:`CC(=O)OC(C)=O`,role:`start`},{id:`asp`,label:`Aspirin`,smiles:`CC(=O)Oc1ccccc1C(=O)O`,role:`target`},{id:`phenol`,label:`Phenol`,smiles:`Oc1ccccc1`,role:`start`}],edges:[{from:`sal`,to:`asp`,reagents:`Ac₂O`,conditions:`H₂SO₄ (cat.), 90 °C`,yieldPct:87},{from:`anh`,to:`asp`},{from:`asp`,to:`phenol`,direction:`retro`}],footer:`Salicylic acid and acetic anhydride converge on aspirin in one acetylation step (87% isolated yield). The dashed retrosynthetic arrow traces the target further back to phenol, the aromatic feedstock reached via a Kolbe–Schmitt carboxylation to salicylic acid.`},plasmidmap:{title:`pUC19 Cloning Vector`,icon:`sparkle`,iconColor:`var(--presence)`,sizeBp:2686,features:[{name:`AmpR`,startBp:1626,endBp:2486,kind:`marker`,strand:`minus`},{name:`lacZα`,startBp:396,endBp:626,kind:`gene`,strand:`plus`},{name:`lac promoter`,startBp:626,endBp:656,kind:`promoter`,strand:`plus`},{name:`rep origin`,startBp:2600,endBp:2650,kind:`terminator`}],sites:[{name:`EcoRI`,posBp:396,cutsOnce:!0},{name:`BamHI`,posBp:411,cutsOnce:!0},{name:`HindIII`,posBp:447,cutsOnce:!0},{name:`PstI`,posBp:435}],origin:{name:`ori`,posBp:2e3},footer:`The multiple cloning site sits inside lacZα (blue/white screening); AmpR selects for transformants. EcoRI, BamHI, and HindIII each cut once — safe choices for a single-site digest.`},argumentmap:{title:`SN2 vs SN1, which mechanism?`,claim:`The reaction proceeds via an SN2 (bimolecular nucleophilic substitution) mechanism.`,premises:[{type:`support`,text:`Primary substrate, minimal steric hindrance favors backside attack.`},{type:`support`,text:`Strong nucleophile (OH⁻) present in high concentration.`},{type:`support`,text:`Rate is second-order: rate = k[CH₃Br][OH⁻], both species appear in rate law.`},{type:`objection`,text:`Polar protic solvent (water) could stabilise a carbocation and favour SN1.`},{type:`qualifier`,text:`Solvent choice matters: aprotic solvents would further favour SN2 by not solvating the nucleophile.`}],verdict:`SN2 dominates: primary substrate + strong nucleophile + second-order kinetics all point the same way.`},toulmin:{title:`Toulmin Analysis`,icon:`proof`,iconColor:`var(--presence)`,claim:`Harry is a British citizen.`,grounds:`Harry was born in Bermuda.`,warrant:`A person born in Bermuda is generally a British citizen.`,backing:`On account of the British Nationality Acts and the statutes governing citizenship by birth in British territories.`,qualifier:`presumably`,rebuttal:`both his parents were foreign nationals, or he has since formally renounced his citizenship.`,footer:`The classic worked example from Toulmin’s <em>The Uses of Argument</em> (1958).`},castmap:{title:`Cast Map — The Keeper`,icon:`share`,iconColor:`var(--presence)`,nodes:[{id:`elara`,name:`Elara`,role:`The lighthouse keeper`,faction:`The Island`},{id:`mira`,name:`Mira`,role:`A runaway she shelters`,faction:`The Island`},{id:`bram`,name:`Old Bram`,role:`The keeper before her`,faction:`The Island`},{id:`davo`,name:`Captain Davo`,role:`Master of the Wrenn`,faction:`The Sea`},{id:`tomas`,name:`Tomas`,role:`Davo's first mate`,faction:`The Sea`},{id:`warden`,name:`The Warden`,role:`Hunts the runaway`,faction:`The Crown`}],links:[{from:`elara`,to:`mira`,kind:`ally`,label:`shelters`},{from:`bram`,to:`elara`,kind:`mentor`,label:`taught the light`},{from:`davo`,to:`mira`,kind:`family`,label:`her father`},{from:`elara`,to:`davo`,kind:`ally`,label:`saves the Wrenn`},{from:`warden`,to:`mira`,kind:`rival`,label:`hunts`},{from:`warden`,to:`elara`,kind:`rival`,label:`suspects`},{from:`tomas`,to:`davo`,kind:`betrays`,label:`cut the lines`}],caption:`Who protects whom — and who is hunting the runaway.`,footer:`The hidden <strong>father</strong> and the first mate’s <strong>betrayal</strong> are the two secrets the third act turns on.`},probabilitytree:{title:`Two Coin Tosses`,branches:[{label:`Heads`,prob:.5,children:[{label:`Heads`,prob:.5,outcome:`P = 0.25`},{label:`Tails`,prob:.5,outcome:`P = 0.25`}]},{label:`Tails`,prob:.5,children:[{label:`Heads`,prob:.5,outcome:`P = 0.25`},{label:`Tails`,prob:.5,outcome:`P = 0.25`}]}],note:`Each outcome has equal probability of 25%.`},datastructure:{title:`Binary search tree — searching for 40`,icon:`share`,iconColor:`var(--presence)`,kind:`bst`,nodes:[{id:`a`,value:50,left:`b`,right:`c`},{id:`b`,value:30,left:`d`,right:`e`},{id:`c`,value:70,left:`f`,right:`g`},{id:`d`,value:20},{id:`e`,value:40},{id:`f`,value:60},{id:`g`,value:80}],highlight:`e`,footer:`Search visits <b>50 → 30 → 40</b>: 40 < 50 go left, 40 > 30 go right, match. Three comparisons in a balanced tree of seven nodes — O(log n).`},causationchain:{title:`Causes and consequences of World War I`,event:{label:`Outbreak of World War I (1914)`},causes:[{label:`Assassination of Archduke Franz Ferdinand`,weight:.95,term:`short`},{label:`July Crisis and ultimatum to Serbia`,weight:.7,term:`short`},{label:`The alliance system (Triple Entente vs. Triple Alliance)`,weight:.85,term:`long`},{label:`Militarism and the arms race`,weight:.6,term:`long`},{label:`Imperial and nationalist rivalries`,weight:.55,term:`long`}],consequences:[{label:`Roughly 17 million deaths across the war`,weight:.9,term:`short`},{label:`Treaty of Versailles (1919)`,weight:.8,term:`short`},{label:`Collapse of four empires`,weight:.7,term:`long`},{label:`Rise of fascism and the path to World War II`,weight:.85,term:`long`}],footer:`The assassination was the trigger, but it lit a fuse laid by years of alliances, militarism, and rivalry — the line weights show which forces mattered most.`},protocolstack:{title:`The TCP/IP stack: how a request travels down`,icon:`layers`,iconColor:`var(--presence)`,layers:[{name:`Application`,role:`Your request lives here — the actual message a program speaks.`,protocols:[`HTTP`,`DNS`,`TLS`,`SMTP`]},{name:`Transport`,role:`Splits the message into segments and guarantees order & delivery.`,protocols:[`TCP`,`UDP`]},{name:`Internet`,role:`Wraps each segment in a packet and routes it across networks by IP address.`,protocols:[`IP`,`ICMP`]},{name:`Link`,role:`Frames the packet for the local wire and addresses the next hop by MAC.`,protocols:[`Ethernet`,`Wi-Fi`,`ARP`]}],packet:[{header:`Ethernet`,layer:`Link`},{header:`IP`,layer:`Internet`},{header:`TCP`,layer:`Transport`},{header:`HTTP`,layer:`Application`},{header:`Your request`,layer:`Application`}],caption:`Each layer adds its own header on the way down, then the receiver peels them off in reverse on the way back up.`},wiringdiagram:{title:`Three-Way Switch Loop`,icon:`spark`,iconColor:`var(--warning)`,nodes:[{id:`panel`,kind:`panel`,label:`Panel`,x:8,y:32},{id:`cb`,kind:`breaker`,label:`15A`,x:26,y:32},{id:`sw1`,kind:`switch3way`,label:`SW1`,x:46,y:14},{id:`sw2`,kind:`switch3way`,label:`SW2`,x:70,y:14},{id:`light`,kind:`light`,label:`Fixture`,x:90,y:32},{id:`gnd`,kind:`ground`,label:`Bond`,x:8,y:56}],wires:[{from:`panel`,to:`cb`,conductor:`hot`,gauge:`14 AWG`},{from:`cb`,to:`sw1`,conductor:`hot`},{from:`sw1`,to:`sw2`,conductor:`traveler`,gauge:`14/3`},{from:`sw2`,to:`light`,conductor:`hot`},{from:`light`,to:`panel`,conductor:`neutral`},{from:`panel`,to:`gnd`,conductor:`ground`}],caption:`One fixture controlled from two locations: the common feeds switch one, two travelers run between the switches, and the switched hot returns to the light.`,footer:`Black = hot, white = neutral, green = equipment ground, and the two travelers (here as 14/3) carry the switched leg between the 3-way switches.`},pipingschematic:{title:`Closed Hydronic Heating Loop`,icon:`sliders`,iconColor:`var(--insight)`,components:[{id:`tank`,kind:`tank`,label:`Buffer Tank`,x:12,y:18},{id:`pump`,kind:`pump`,label:`P-101`,x:42,y:18},{id:`heater`,kind:`heater`,label:`Boiler`,x:74,y:18},{id:`rad`,kind:`filter`,label:`Radiator`,x:74,y:46},{id:`valve`,kind:`valve`,label:`Balancing`,x:42,y:46},{id:`temp`,kind:`sensor`,label:`TT-1`,x:12,y:46}],lines:[{from:`tank`,to:`pump`,flow:!0,size:`DN50`},{from:`pump`,to:`heater`,flow:!0,size:`DN50`},{from:`heater`,to:`rad`,flow:!0,size:`DN40`},{from:`rad`,to:`valve`,flow:!0,size:`DN40`},{from:`valve`,to:`temp`,flow:!0},{from:`temp`,to:`tank`,flow:!0}],caption:`Water circulates buffer tank to pump to boiler, sheds heat at the radiator, then a balancing valve and return-temperature sensor close the loop back to the tank.`,footer:`Arrows show flow direction; line-size labels (DN50 supply, DN40 emitter branch) size each run for the design flow rate.`},logicgates:{title:`Half Adder`,icon:`share`,iconColor:`var(--presence)`,inputs:[{id:`A`,label:`A`,value:1},{id:`B`,label:`B`,value:0}],gates:[{id:`sum`,kind:`XOR`,inputs:[`A`,`B`]},{id:`carry`,kind:`AND`,inputs:[`A`,`B`]}],output:{from:`sum`,label:`Sum`},truth:[{row:[0,0],out:0},{row:[0,1],out:1},{row:[1,0],out:1},{row:[1,1],out:0}],caption:`A half adder sums two bits: the XOR gate produces the sum, the AND gate produces the carry. With A=1, B=0 the sum line lights (1) and there is no carry.`,footer:`The truth table row matching the live inputs is highlighted; flip A or B in your head and read the Sum column to see XOR in action.`},algorithmtrace:{title:`Bubble Sort — First Pass`,icon:`layers`,iconColor:`var(--presence)`,values:[5,1,4,2,8,3,7],steps:[{caption:`Start the pass: compare the first adjacent pair, 5 and 1.`,compare:[0,1],pointer:{i:0,j:1}},{caption:`5 > 1, so swap them — the larger value bubbles right.`,swapped:[0,1],pointer:{i:0,j:1}},{caption:`Advance the window and compare 5 and 4.`,compare:[1,2],pointer:{i:1,j:2}},{caption:`5 > 4, swap again.`,swapped:[1,2],pointer:{i:1,j:2}},{caption:`Compare 5 and 2.`,compare:[2,3],pointer:{i:2,j:3}},{caption:`5 > 2, swap.`,swapped:[2,3],pointer:{i:2,j:3}},{caption:`Compare 5 and 8 — already in order, no swap.`,compare:[3,4],pointer:{i:3,j:4}},{caption:`The largest value, 8, settles into the last sorted slot.`,highlight:[6],pointer:{i:5,j:6}}],caption:`Step through one full pass: each comparison either holds or swaps, walking the largest remaining value to the right end.`,footer:`After this pass the maximum (8) is locked in its final position; bubble sort repeats over the shrinking unsorted prefix.`},dptable:{title:`LCS — Longest Common Subsequence: "ABCB" vs "BCAB"`,recurrence:`dp[i][j] = dp[i-1][j-1]+1 if s[i]=t[j], else max(dp[i-1][j], dp[i][j-1])`,cols:[`ε`,`B`,`C`,`A`,`B`],rows:[`ε`,`A`,`B`,`C`,`B`],cells:[[0,0,0,0,0],[0,0,0,1,1],[0,1,1,1,2],[0,1,2,2,2],[0,1,2,2,3]],path:[[1,3],[2,4],[3,2],[4,4]],steps:[{caption:`Base case: row 0 and col 0 are all 0 — empty string has LCS 0 with anything.`,current:[0,0],deps:[]},{caption:`dp[1][3]: A matches A → dp[0][2]+1 = 1. First character matched.`,current:[1,3],deps:[[0,2]]},{caption:`dp[2][4]: B matches B → dp[1][3]+1 = 2. Two-character match.`,current:[2,4],deps:[[1,3]]},{caption:`dp[3][2]: C matches C → dp[2][1]+1 = 2.`,current:[3,2],deps:[[2,1]]},{caption:`dp[4][4]: B matches B → dp[3][3]+1 = 3. Final answer: LCS = "BCB" (length 3).`,current:[4,4],deps:[[3,3]]}],footer:`LCS is <b>"BCB"</b> (length 3). Backtrack from dp[4][4]=3 via diagonal match cells. Classic FAANG problem: edit distance, diff tools, DNA sequencing.`},cyclewheel:{title:`The water cycle`,icon:`cloud`,iconColor:`var(--presence)`,stages:[{label:`Evaporation`,caption:`Sun heats water to vapor`,icon:`sun`},{label:`Condensation`,caption:`Vapor cools into clouds`,icon:`cloud`},{label:`Precipitation`,caption:`Rain, snow, and hail fall`,icon:`rain`},{label:`Collection`,caption:`Water gathers in oceans`,icon:`globe`}],caption:`A closed loop driven by the sun: water leaves the surface as vapor, returns as precipitation, and collects to start the round again.`,footer:`No water is created or lost — the same supply circulates endlessly between the surface, the atmosphere, and back.`},hashtable:{title:`Hash table — separate chaining, h(k) = k mod 7`,size:7,hashFn:`h(k) = k mod 7`,entries:[{key:14,value:`Alice`},{key:21,value:`Bob`},{key:7,value:`Carol`},{key:3,value:`Dan`},{key:10,value:`Eve`},{key:1,value:`Frank`}],highlight:10,footer:`Keys 7, 14 and 21 hash to bucket 0 (all divisible by 7). Key 10 hashes to bucket 3, colliding with key 3 — the chain is walked to find Eve. Load factor = 6/7 ≈ 86%.`},trie:{title:`Prefix tree (Trie) — autocomplete words`,words:[`apple`,`app`,`apt`,`apply`,`bat`,`ball`,`ban`],highlight:`apply`,footer:`Trie lookup: O(m) where m = word length, regardless of dictionary size. Each edge is one character; double-ringed nodes mark end-of-word. Use for autocomplete, spell-check, prefix search.`},graphtrace:{title:`BFS Graph Traversal`,algorithm:`bfs`,nodes:[{id:`A`,label:`A`,x:50,y:10},{id:`B`,label:`B`,x:20,y:40},{id:`C`,label:`C`,x:80,y:40},{id:`D`,label:`D`,x:10,y:75},{id:`E`,label:`E`,x:40,y:75},{id:`F`,label:`F`,x:70,y:75}],edges:[{from:`A`,to:`B`},{from:`A`,to:`C`},{from:`B`,to:`D`},{from:`B`,to:`E`},{from:`C`,to:`F`}],steps:[{caption:`Start BFS at A. Add A to queue.`,current:`A`,frontier:[`A`],visited:[]},{caption:`Dequeue A. Enqueue neighbors B and C.`,current:`A`,visited:[`A`],frontier:[`B`,`C`]},{caption:`Dequeue B. Enqueue neighbors D and E.`,current:`B`,visited:[`A`,`B`],frontier:[`C`,`D`,`E`]},{caption:`Dequeue C. Enqueue neighbor F.`,current:`C`,visited:[`A`,`B`,`C`],frontier:[`D`,`E`,`F`]},{caption:`Dequeue D. No unvisited neighbors.`,current:`D`,visited:[`A`,`B`,`C`,`D`],frontier:[`E`,`F`]},{caption:`Dequeue E. No unvisited neighbors.`,current:`E`,visited:[`A`,`B`,`C`,`D`,`E`],frontier:[`F`]},{caption:`Dequeue F. Queue empty — BFS complete! Order: A B C D E F.`,current:`F`,visited:[`A`,`B`,`C`,`D`,`E`,`F`],frontier:[]}],footer:`BFS visits nodes level-by-level (breadth-first). Queue is FIFO. Time: O(V+E). Contrast with DFS which uses a stack and goes deep before wide.`},binarytree:{title:`BST Search — find 7`,nodes:[{id:`n10`,value:10,left:`n5`,right:`n15`},{id:`n5`,value:5,left:`n3`,right:`n7`},{id:`n15`,value:15},{id:`n3`,value:3},{id:`n7`,value:7}],root:`n10`,steps:[{caption:`Start at root: 10. Is 7 == 10?`,states:{n10:`visiting`}},{caption:`7 < 10 → go left to 5.`,states:{n10:`visited`,n5:`visiting`}},{caption:`7 > 5 → go right to 7.`,states:{n10:`visited`,n5:`visited`,n7:`visiting`}},{caption:`7 == 7 → Found! 3 comparisons.`,states:{n10:`visited`,n5:`visited`,n7:`found`}}],footer:`BST search: O(h) time where h is tree height — O(log n) balanced, O(n) worst case. Each comparison halves the search space in a balanced BST.`},sortingviz:{title:`Bubble Sort step-by-step`,algorithm:`Bubble Sort`,complexity:`o-n2`,values:[5,3,8,1,6],steps:[{caption:`Pass 1: compare 5 and 3.`,values:[5,3,8,1,6],compared:[0,1]},{caption:`5 > 3 → swap.`,values:[3,5,8,1,6],swapped:[0,1]},{caption:`Compare 5 and 8. No swap.`,values:[3,5,8,1,6],compared:[1,2]},{caption:`Compare 8 and 1.`,values:[3,5,8,1,6],compared:[2,3]},{caption:`8 > 1 → swap.`,values:[3,5,1,8,6],swapped:[2,3]},{caption:`Compare 8 and 6.`,values:[3,5,1,8,6],compared:[3,4]},{caption:`8 > 6 → swap. 8 is sorted!`,values:[3,5,1,6,8],swapped:[3,4],sorted:[4]},{caption:`Pass 2: 3 and 5. No swap.`,values:[3,5,1,6,8],compared:[0,1],sorted:[4]},{caption:`Compare 5 and 1.`,values:[3,5,1,6,8],compared:[1,2],sorted:[4]},{caption:`5 > 1 → swap.`,values:[3,1,5,6,8],swapped:[1,2],sorted:[4]},{caption:`5 and 6 — no swap. 6 sorted.`,values:[3,1,5,6,8],compared:[2,3],sorted:[3,4]},{caption:`Pass 3: 3 and 1.`,values:[3,1,5,6,8],compared:[0,1],sorted:[3,4]},{caption:`3 > 1 → swap. Done!`,values:[1,3,5,6,8],swapped:[0,1],sorted:[0,1,2,3,4]}],footer:`Bubble sort: O(n²) time. Each pass bubbles the largest unsorted element to its final position. Simple to understand, rarely used in practice.`},gridtrace:{title:`BFS Shortest Path on a Grid`,algorithm:`BFS`,steps:[{caption:`Find shortest path S→E. Walls (#) block movement.`,grid:[[{state:`start`},{state:`empty`},{state:`wall`},{state:`empty`}],[{state:`empty`},{state:`empty`},{state:`empty`},{state:`empty`}],[{state:`empty`},{state:`empty`},{state:`empty`},{state:`end`}]]},{caption:`BFS expands: S visited, neighbors queued.`,grid:[[{state:`visited`},{state:`queued`},{state:`wall`},{state:`empty`}],[{state:`queued`},{state:`empty`},{state:`empty`},{state:`empty`}],[{state:`empty`},{state:`empty`},{state:`empty`},{state:`end`}]]},{caption:`Wave reaches E. Shortest path length = 5.`,grid:[[{state:`path`},{state:`visited`},{state:`wall`},{state:`visited`}],[{state:`path`},{state:`path`},{state:`path`},{state:`visited`}],[{state:`visited`},{state:`visited`},{state:`visited`},{state:`end`}]]}],footer:`BFS guarantees shortest path in unweighted grids. O(rows×cols). Classic FAANG: islands (LC 200), rotting oranges (994), word search (79).`},tournamentbracket:{title:`Your projected playoff bracket`,icon:`share`,iconColor:`var(--presence)`,rounds:[`Wild Card`,`Semifinal`,`Final`],matchups:[{id:`wc-1`,round:0,slot:0,a:`Dynasty Dave`,winner:`a`},{id:`wc-2`,round:0,slot:1,a:`You · Gridiron`,winner:`a`},{id:`wc-3`,round:0,slot:2,a:`The Karens`,b:`Bottom Feeders`},{id:`wc-4`,round:0,slot:3,a:`Brady Bunch`,b:`Waiver Warriors`},{id:`sf-1`,round:1,slot:0,a:`Dynasty Dave`},{id:`sf-2`,round:1,slot:1,a:`You · Gridiron`},{id:`final`,round:2,slot:0}],footer:`Dynasty Dave and you both clinch a Wild Card bye with a win this week, everyone else plays in.`},prooftree:{title:`Natural deduction · P → R`,icon:`proof`,steps:[{id:`a1`,statement:`[P]`},{id:`p1`,statement:`P → Q`},{id:`p2`,statement:`Q → R`},{id:`s1`,statement:`Q`,rule:`→E`,from:[`a1`,`p1`]},{id:`s2`,statement:`R`,rule:`→E`,from:[`s1`,`p2`]},{id:`s3`,statement:`P → R`,rule:`→I`,from:[`s2`]}],conclusionId:`s3`,footer:`Read upward: each bar is one inference, its rule named at the right. The bracketed [P] is an assumption discharged by the final →I step — the shape of every conditional proof.`},fishbone:{title:`Why the loaf came out dense`,icon:`share`,effect:`Dense sourdough loaf`,categories:[{label:`Starter`,causes:[`Not at peak activity`,`Too little inoculation`]},{label:`Flour`,causes:[`Low-protein flour`,`Stale whole wheat`]},{label:`Process`,causes:[`Underproofed bulk`,`Degassed at shaping`]},{label:`Environment`,causes:[`Kitchen below 22 °C`,`Dry air crusts the dough`]},{label:`Baking`,causes:[`No steam in the oven`,`Baked before full preheat`]},{label:`Timing`,causes:[`Rushed the poke test`]}],footer:`An Ishikawa fishbone groups candidate causes by category — work each rib tip-to-spine, then test the likeliest twig first.`},classdiagram:{title:`A tiny 2D drawing engine`,icon:`layers`,classes:[{name:`Drawable`,stereotype:`interface`,methods:[`+ draw(ctx): void`]},{name:`Shape`,stereotype:`abstract`,fields:[`# x: number`,`# y: number`],methods:[`+ move(dx, dy): void`,`+ area(): number`]},{name:`Circle`,fields:[`- radius: number`],methods:[`+ area(): number`]},{name:`Rectangle`,fields:[`- w: number`,`- h: number`],methods:[`+ area(): number`]},{name:`CanvasScene`,fields:[`- shapes: Shape[]`],methods:[`+ add(s: Shape): void`,`+ render(): void`]},{name:`Viewport`,fields:[`- zoom: number`,`- panX: number`,`- panY: number`]}],relations:[{from:`Shape`,to:`Drawable`,kind:`implements`},{from:`Circle`,to:`Shape`,kind:`inheritance`},{from:`Rectangle`,to:`Shape`,kind:`inheritance`},{from:`CanvasScene`,to:`Shape`,kind:`aggregation`,label:`shapes *`},{from:`CanvasScene`,to:`Viewport`,kind:`composition`},{from:`CanvasScene`,to:`Drawable`,kind:`dependency`,label:`renders via`}],footer:`Five of the six UML relation kinds in one figure: hollow triangle = inheritance (dashed when implementing an interface), filled diamond = composition, hollow diamond = aggregation, dashed open arrow = dependency.`},analogymap:{title:`Compound interest is a snowball`,icon:`link`,iconColor:`var(--insight)`,familiar:`A snowball rolling downhill`,target:`Compound interest`,pairs:[{familiar:`The handful of snow you pack to start`,target:`Your first deposit`,note:`the seed everything else grows on`},{familiar:`The snow it picks up on one turn`,target:`The interest one period pays`,note:`added on top, never set aside`},{familiar:`A wider ball, so the next turn sweeps up more`,target:`A bigger balance, so the next period earns more`,note:`this is the whole trick`},{familiar:`How long the hill is`,target:`How many years you leave it alone`,note:`the biggest lever, by far`},{familiar:`Kicking the ball apart halfway down`,target:`Withdrawing early`,note:`you restart from a smaller ball`,loose:!0}],breaksDown:[`A snowball adds roughly the same layer on every turn; a balance adds a fixed percentage of itself, which is why the curve bends upward instead of running straight.`,`The hill ends. A balance keeps compounding for as long as you leave it, so there is no bottom of the slope to stop it.`],caption:`Every row is the same one idea: this period's gain becomes next period's starting point.`,footer:`The hill length is the load-bearing part — <b>time</b> beats deposit size, which is exactly why the 30-year line pulls away so hard.`}};export{e as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var e={grounded:`GROUNDED`,calculated:`CALCULATED LOCALLY`,illustrative:`ILLUSTRATIVE`,structure:`NO NUMBER`};function t(e){return e.kind===`calculated`?e.raw:e.resolution.raw}function n(e){let t=[];return e.doc!==void 0&&t.push(`doc ${e.doc+1}`),e.page!==void 0&&t.push(`p. ${e.page}`),e.cell!==void 0&&t.push(`cell ${e.cell}`),t.length?`Your file · ${t.join(`, `)}`:`Your file`}var r=/[A-Za-z_][A-Za-z0-9_]*/g;function i(e,t){return e.replace(r,e=>t(e)??e)}export{n as i,i as n,t as r,e as t};
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
function e(e,t){return e[13]=1,e[14]=t>>8,e[15]=t&255,e[16]=t>>8,e[17]=t&255,e}var t;function n(){let e=new Int32Array(256);for(let t=0;t<256;t++){let n=t;for(let e=0;e<8;e++)n=n&1?3988292384^n>>>1:n>>>1;e[t]=n}return e}function r(e){let r=-1;t||=n();for(let n=0;n<e.length;n++)r=t[(r^e[n])&255]^r>>>8;return r^-1}function i(e){let t=e.length-1;for(let n=t;n>=4;n--)if(e[n-4]===9&&e[n-3]===112&&e[n-2]===72&&e[n-1]===89&&e[n]===115)return n-3;return 0}function a(e,t,n=!1){let a=new Uint8Array(13);t*=39.3701,a[0]=112,a[1]=72,a[2]=89,a[3]=115,a[4]=t>>>24,a[5]=t>>>16,a[6]=t>>>8,a[7]=t&255,a[8]=a[4],a[9]=a[5],a[10]=a[6],a[11]=a[7],a[12]=1;let o=r(a),s=new Uint8Array(4);if(s[0]=o>>>24,s[1]=o>>>16,s[2]=o>>>8,s[3]=o&255,n){let t=i(e);return e.set(a,t),e.set(s,t+13),e}{let t=new Uint8Array(4);t[0]=0,t[1]=0,t[2]=0,t[3]=9;let n=new Uint8Array(54);return n.set(e,0),n.set(t,33),n.set(a,37),n.set(s,50),n}}function o(e){let t=e.indexOf(`AAlwSFlz`);return t===-1&&(t=e.indexOf(`AAAJcEhZ`)),t===-1&&(t=e.indexOf(`AAAACXBI`)),t}var s=`[modern-screenshot]`,c=typeof window<`u`,l=c&&`Worker`in window,u=c&&`atob`in window,d=c&&`btoa`in window,f=c?window.navigator?.userAgent:``,p=f.includes(`Chrome`),m=f.includes(`AppleWebKit`)&&!p,h=f.includes(`Firefox`),g=e=>e&&`__CONTEXT__`in e,_=e=>e.constructor.name===`CSSFontFaceRule`,v=e=>e.constructor.name===`CSSImportRule`,y=e=>e.constructor.name===`CSSLayerBlockRule`,b=e=>e.nodeType===1,x=e=>typeof e.className==`object`,S=e=>e.tagName===`image`,ee=e=>e.tagName===`use`,C=e=>b(e)&&e.style!==void 0&&!x(e),te=e=>e.nodeType===8,ne=e=>e.nodeType===3,w=e=>e.tagName===`IMG`,T=e=>e.tagName===`VIDEO`,re=e=>e.tagName===`CANVAS`,ie=e=>e.tagName===`TEXTAREA`,ae=e=>e.tagName===`INPUT`,oe=e=>e.tagName===`STYLE`,se=e=>e.tagName===`SCRIPT`,ce=e=>e.tagName===`SELECT`,le=e=>e.tagName===`SLOT`,ue=e=>e.tagName===`IFRAME`,de=(...e)=>console.warn(s,...e);function fe(e){let t=e?.createElement?.(`canvas`);return t&&(t.height=t.width=1),!!t&&`toDataURL`in t&&!!t.toDataURL(`image/webp`).includes(`image/webp`)}var E=e=>e.startsWith(`data:`);function D(e,t){if(e.match(/^[a-z]+:\/\//i))return e;if(c&&e.match(/^\/\//))return window.location.protocol+e;if(e.match(/^[a-z]+:/i)||!c)return e;let n=O().implementation.createHTMLDocument(),r=n.createElement(`base`),i=n.createElement(`a`);return n.head.appendChild(r),n.body.appendChild(i),t&&(r.href=t),i.href=e,i.href}function O(e){return(e&&b(e)?e?.ownerDocument:e)??window.document}var k=`http://www.w3.org/2000/svg`;function A(e,t,n){let r=O(n).createElementNS(k,`svg`);return r.setAttributeNS(null,`width`,e.toString()),r.setAttributeNS(null,`height`,t.toString()),r.setAttributeNS(null,`viewBox`,`0 0 ${e} ${t}`),r}function j(e,t){let n=new XMLSerializer().serializeToString(e);return t&&(n=n.replace(/[\u0000-\u0008\v\f\u000E-\u001F\uD800-\uDFFF\uFFFE\uFFFF]/gu,``)),`data:image/svg+xml;charset=utf-8,${encodeURIComponent(n)}`}async function pe(e,t=`image/png`,n=1){try{return await new Promise((r,i)=>{e.toBlob(e=>{e?r(e):i(Error(`Blob is null`))},t,n)})}catch(r){if(u)return me(e.toDataURL(t,n));throw r}}function me(e){let[t,n]=e.split(`,`),r=t.match(/data:(.+);/)?.[1]??void 0,i=window.atob(n),a=i.length,o=new Uint8Array(a);for(let e=0;e<a;e+=1)o[e]=i.charCodeAt(e);return new Blob([o],{type:r})}function M(e,t){return new Promise((n,r)=>{let i=new FileReader;i.onload=()=>n(i.result),i.onerror=()=>r(i.error),i.onabort=()=>r(Error(`Failed read blob to ${t}`)),t===`dataUrl`?i.readAsDataURL(e):t===`arrayBuffer`&&i.readAsArrayBuffer(e)})}var he=e=>M(e,`dataUrl`),ge=e=>M(e,`arrayBuffer`);function N(e,t){let n=O(t).createElement(`img`);return n.decoding=`sync`,n.loading=`eager`,n.src=e,n}function P(e,t){return new Promise(n=>{let{timeout:r,ownerDocument:i,onError:a,onWarn:o}=t??{},s=typeof e==`string`?N(e,O(i)):e,c=null,l=null;function u(){n(s),c&&clearTimeout(c),l?.()}if(r&&(c=setTimeout(u,r)),T(s)){let e=s.currentSrc||s.src;if(!e)return s.poster?P(s.poster,t).then(n):u();if(s.readyState>=2)return u();let r=u,i=t=>{o?.(`Failed video load`,e,t),a?.(t),u()};l=()=>{s.removeEventListener(`loadeddata`,r),s.removeEventListener(`error`,i)},s.addEventListener(`loadeddata`,r,{once:!0}),s.addEventListener(`error`,i,{once:!0})}else{let e=S(s)?s.href.baseVal:s.currentSrc||s.src;if(!e)return u();let t=async()=>{if(w(s)&&`decode`in s)try{await s.decode()}catch(t){o?.(`Failed to decode image, trying to render anyway`,s.dataset.originalSrc||e,t)}u()},n=t=>{o?.(`Failed image load`,s.dataset.originalSrc||e,t),u()};if(w(s)&&s.complete)return t();l=()=>{s.removeEventListener(`load`,t),s.removeEventListener(`error`,n)},s.addEventListener(`load`,t,{once:!0}),s.addEventListener(`error`,n,{once:!0})}})}async function F(e,t){C(e)&&(w(e)||T(e)?await P(e,t):await Promise.all([`img`,`video`].flatMap(n=>Array.from(e.querySelectorAll(n)).map(e=>P(e,t)))))}var I=function(){let e=0,t=()=>`0000${(Math.random()*36**4<<0).toString(36)}`.slice(-4);return()=>(e+=1,`u${t()}${e}`)}();function L(e){return e?.split(`,`).map(e=>e.trim().replace(/"|'/g,``).toLowerCase()).filter(Boolean)}var R=0;function _e(e){let t=`${s}[#${R}]`;return R++,{time:n=>e&&console.time(`${t} ${n}`),timeEnd:n=>e&&console.timeEnd(`${t} ${n}`),warn:(...t)=>e&&de(...t)}}function ve(e){return{cache:e?`no-cache`:`force-cache`}}async function z(e,t){return g(e)?e:B(e,{...t,autoDestruct:!0})}async function B(e,t){let{scale:n=1,workerUrl:r,workerNumber:i=1}=t||{},a=!!t?.debug,o=t?.features??!0,s=e.ownerDocument??(c?window.document:void 0),u=e.ownerDocument?.defaultView??(c?window:void 0),d=new Map,f={width:0,height:0,quality:1,type:`image/png`,scale:n,backgroundColor:null,style:null,filter:null,maximumCanvasSize:0,timeout:3e4,progress:null,debug:a,fetch:{requestInit:ve(t?.fetch?.bypassingCache),placeholderImage:`data:image/png;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7`,bypassingCache:!1,...t?.fetch},fetchFn:null,font:{},drawImageInterval:100,workerUrl:null,workerNumber:i,onCloneEachNode:null,onCloneNode:null,onEmbedNode:null,onCreateForeignObjectSvg:null,includeStyleProperties:null,autoDestruct:!1,...t,__CONTEXT__:!0,log:_e(a),node:e,ownerDocument:s,ownerWindow:u,dpi:n===1?null:96*n,svgStyleElement:V(s),svgDefsElement:s?.createElementNS(k,`defs`),svgStyles:new Map,defaultComputedStyles:new Map,workers:[...Array.from({length:l&&r&&i?i:0})].map(()=>{try{let e=new Worker(r);return e.onmessage=async e=>{let{url:t,result:n}=e.data;n?d.get(t)?.resolve?.(n):d.get(t)?.reject?.(Error(`Error receiving message from worker: ${t}`))},e.onmessageerror=e=>{let{url:t}=e.data;d.get(t)?.reject?.(Error(`Error receiving message from worker: ${t}`))},e}catch(e){return f.log.warn(`Failed to new Worker`,e),null}}).filter(Boolean),fontFamilies:new Map,fontCssTexts:new Map,acceptOfImage:`${[fe(s)&&`image/webp`,`image/svg+xml`,`image/*`,`*/*`].filter(Boolean).join(`,`)};q=0.8`,requests:d,drawImageCount:0,tasks:[],features:o,isEnable:e=>e===`restoreScrollPosition`?typeof o==`boolean`?!1:o[e]??!1:typeof o==`boolean`?o:o[e]??!0,shadowRoots:[]};f.log.time(`wait until load`),await F(e,{timeout:f.timeout,onWarn:f.log.warn}),f.log.timeEnd(`wait until load`);let{width:p,height:m}=ye(e,f);return f.width=p,f.height=m,f}function V(e){if(!e)return;let t=e.createElement(`style`),n=t.ownerDocument.createTextNode(`
|
|
2
|
+
.______background-clip--text {
|
|
3
|
+
background-clip: text;
|
|
4
|
+
-webkit-background-clip: text;
|
|
5
|
+
}
|
|
6
|
+
`);return t.appendChild(n),t}function ye(e,t){let{width:n,height:r}=t;if(b(e)&&(!n||!r)){let t=e.getBoundingClientRect();n=n||t.width||Number(e.getAttribute(`width`))||0,r=r||t.height||Number(e.getAttribute(`height`))||0}return{width:n,height:r}}async function be(e,t){let{log:n,timeout:r,drawImageCount:i,drawImageInterval:a}=t;n.time(`image to canvas`);let o=await P(e,{timeout:r,onWarn:t.log.warn}),{canvas:s,context2d:c}=xe(e.ownerDocument,t),l=()=>{try{c?.drawImage(o,0,0,s.width,s.height)}catch(e){t.log.warn(`Failed to drawImage`,e)}};if(l(),t.isEnable(`fixSvgXmlDecode`))for(let e=0;e<i;e++)await new Promise(t=>{setTimeout(()=>{c?.clearRect(0,0,s.width,s.height),l(),t()},e+a)});return t.drawImageCount=0,n.timeEnd(`image to canvas`),s}function xe(e,t){let{width:n,height:r,scale:i,backgroundColor:a,maximumCanvasSize:o}=t,s=e.createElement(`canvas`);s.width=Math.floor(n*i),s.height=Math.floor(r*i),s.style.width=`${n}px`,s.style.height=`${r}px`,o&&(s.width>o||s.height>o)&&(s.width>o&&s.height>o?s.width>s.height?(s.height*=o/s.width,s.width=o):(s.width*=o/s.height,s.height=o):s.width>o?(s.height*=o/s.width,s.width=o):(s.width*=o/s.height,s.height=o));let c=s.getContext(`2d`);return c&&a&&(c.fillStyle=a,c.fillRect(0,0,s.width,s.height)),{canvas:s,context2d:c}}function H(e,t){if(e.ownerDocument)try{let t=e.toDataURL();if(t!==`data:,`)return N(t,e.ownerDocument)}catch(e){t.log.warn(`Failed to clone canvas`,e)}let n=e.cloneNode(!1),r=e.getContext(`2d`),i=n.getContext(`2d`);try{return r&&i&&i.putImageData(r.getImageData(0,0,e.width,e.height),0,0),n}catch(e){t.log.warn(`Failed to clone canvas`,e)}return n}function Se(e,t){try{if(e?.contentDocument?.documentElement)return q(e.contentDocument.documentElement,t)}catch(e){t.log.warn(`Failed to clone iframe`,e)}return e.cloneNode(!1)}function Ce(e){let t=e.cloneNode(!1);return e.currentSrc&&e.currentSrc!==e.src&&(t.src=e.currentSrc,t.srcset=``),t.loading===`lazy`&&(t.loading=`eager`),t}async function we(e,t){if(e.ownerDocument&&!e.currentSrc&&e.poster)return N(e.poster,e.ownerDocument);let n=e.cloneNode(!1);n.crossOrigin=`anonymous`,e.currentSrc&&e.currentSrc!==e.src&&(n.src=e.currentSrc);let r=n.ownerDocument;if(r){let i=!0;if(await P(n,{onError:()=>i=!1,onWarn:t.log.warn}),!i)return e.poster?N(e.poster,e.ownerDocument):n;n.currentTime=e.currentTime,await new Promise(e=>{n.addEventListener(`seeked`,e,{once:!0})});let a=r.createElement(`canvas`);a.width=e.offsetWidth,a.height=e.offsetHeight;try{let e=a.getContext(`2d`);e&&e.drawImage(n,0,0,a.width,a.height)}catch(r){return t.log.warn(`Failed to clone video`,r),e.poster?N(e.poster,e.ownerDocument):n}return H(a,t)}return n}function Te(e,t){return re(e)?H(e,t):ue(e)?Se(e,t):w(e)?Ce(e):T(e)?we(e,t):e.cloneNode(!1)}function Ee(e){let t=e.sandbox;if(!t){let{ownerDocument:n}=e;try{n&&(t=n.createElement(`iframe`),t.id=`__SANDBOX__${I()}`,t.width=`0`,t.height=`0`,t.style.visibility=`hidden`,t.style.position=`fixed`,n.body.appendChild(t),t.srcdoc=`<!DOCTYPE html><meta charset="UTF-8"><title></title><body>`,e.sandbox=t)}catch(t){e.log.warn(`Failed to getSandBox`,t)}}return t}var De=[`width`,`height`,`-webkit-text-fill-color`],Oe=[`stroke`,`fill`];function U(e,t,n){let{defaultComputedStyles:r}=n,i=e.nodeName.toLowerCase(),a=x(e)&&i!==`svg`,o=a?Oe.map(t=>[t,e.getAttribute(t)]).filter(([,e])=>e!==null):[],s=[a&&`svg`,i,o.map((e,t)=>`${e}=${t}`).join(`,`),t].filter(Boolean).join(`:`);if(r.has(s))return r.get(s);let c=Ee(n)?.contentWindow;if(!c)return new Map;let l=c?.document,u,d;a?(u=l.createElementNS(k,`svg`),d=u.ownerDocument.createElementNS(u.namespaceURI,i),o.forEach(([e,t])=>{d.setAttributeNS(null,e,t)}),u.appendChild(d)):u=d=l.createElement(i),d.textContent=` `,l.body.appendChild(u);let f=c.getComputedStyle(d,t),p=new Map;for(let e=f.length,t=0;t<e;t++){let e=f.item(t);De.includes(e)||p.set(e,f.getPropertyValue(e))}return l.body.removeChild(u),r.set(s,p),p}function W(e,t,n){let r=new Map,i=[],a=new Map;if(n)for(let e of n)o(e);else for(let t=e.length,n=0;n<t;n++)o(e.item(n));for(let e=i.length,t=0;t<e;t++)a.get(i[t])?.forEach((e,t)=>r.set(t,e));function o(n){let o=e.getPropertyValue(n),s=e.getPropertyPriority(n),c=n.lastIndexOf(`-`),l=c>-1?n.substring(0,c):void 0;if(l){let e=a.get(l);e||(e=new Map,a.set(l,e)),e.set(n,[o,s])}t.get(n)===o&&!s||(l?i.push(l):r.set(n,[o,s]))}return r}function ke(e,t,n,r){let{ownerWindow:i,includeStyleProperties:a,currentParentNodeStyle:o}=r,s=t.style,c=i.getComputedStyle(e),l=U(e,null,r);o?.forEach((e,t)=>{l.delete(t)});let u=W(c,l,a);u.delete(`transition-property`),u.delete(`all`),u.delete(`d`),u.delete(`content`),n&&(u.delete(`position`),u.delete(`margin-top`),u.delete(`margin-right`),u.delete(`margin-bottom`),u.delete(`margin-left`),u.delete(`margin-block-start`),u.delete(`margin-block-end`),u.delete(`margin-inline-start`),u.delete(`margin-inline-end`),u.set(`box-sizing`,[`border-box`,``])),u.get(`background-clip`)?.[0]===`text`&&t.classList.add(`______background-clip--text`),p&&(u.has(`font-kerning`)||u.set(`font-kerning`,[`normal`,``]),(u.get(`overflow-x`)?.[0]===`hidden`||u.get(`overflow-y`)?.[0]===`hidden`)&&u.get(`text-overflow`)?.[0]===`ellipsis`&&e.scrollWidth===e.clientWidth&&u.set(`text-overflow`,[`clip`,``]));for(let e=s.length,t=0;t<e;t++)s.removeProperty(s.item(t));return u.forEach(([e,t],n)=>{s.setProperty(n,e,t)}),u}function Ae(e,t){(ie(e)||ae(e)||ce(e))&&t.setAttribute(`value`,e.value)}var je=[`::before`,`::after`],Me=[`::-webkit-scrollbar`,`::-webkit-scrollbar-button`,`::-webkit-scrollbar-thumb`,`::-webkit-scrollbar-track`,`::-webkit-scrollbar-track-piece`,`::-webkit-scrollbar-corner`,`::-webkit-resizer`];function Ne(e,t,n,r,i){let{ownerWindow:a,svgStyleElement:o,svgStyles:s,currentNodeStyle:c}=r;if(!o||!a)return;function l(n){let o=a.getComputedStyle(e,n),l=o.getPropertyValue(`content`);if(!l||l===`none`)return;i?.(l),l=l.replace(/(')|(")|(counter\(.+\))/g,``);let u=[I()],d=U(e,n,r);c?.forEach((e,t)=>{d.delete(t)});let f=W(o,d,r.includeStyleProperties);f.delete(`content`),f.delete(`-webkit-locale`),f.get(`background-clip`)?.[0]===`text`&&t.classList.add(`______background-clip--text`);let p=[`content: '${l}';`];if(f.forEach(([e,t],n)=>{p.push(`${n}: ${e}${t?` !important`:``};`)}),p.length===1)return;try{t.className=[t.className,...u].join(` `)}catch(e){r.log.warn(`Failed to copyPseudoClass`,e);return}let m=p.join(`
|
|
7
|
+
`),h=s.get(m);h||(h=[],s.set(m,h)),h.push(`.${u[0]}${n}`)}je.forEach(l),n&&Me.forEach(l)}var G=new Set([`symbol`]);async function K(e,t,n,r,i){if(b(n)&&(oe(n)||se(n))||r.filter&&!r.filter(n))return;r.currentParentNodeStyle=G.has(t.nodeName)||G.has(n.nodeName)?void 0:r.currentNodeStyle;let a=await q(n,r,!1,i);r.isEnable(`restoreScrollPosition`)&&Fe(e,a),t.appendChild(a)}async function Pe(e,t,n,r){let i=e.firstChild;b(e)&&e.shadowRoot&&(i=e.shadowRoot?.firstChild,n.shadowRoots.push(e.shadowRoot));for(let a=i;a;a=a.nextSibling)if(!te(a)){if(b(a)&&le(a)&&typeof a.assignedNodes==`function`){let i=a.assignedNodes();for(let a=0;a<i.length;a++)await K(e,t,i[a],n,r)}else await K(e,t,a,n,r)}}function Fe(e,t){if(!C(e)||!C(t))return;let{scrollTop:n,scrollLeft:r}=e;if(!n&&!r)return;let{transform:i}=t.style,a=new DOMMatrix(i),{a:o,b:s,c,d:l}=a;a.a=1,a.b=0,a.c=0,a.d=1,a.translateSelf(-r,-n),a.a=o,a.b=s,a.c=c,a.d=l,t.style.transform=a.toString()}function Ie(e,t){let{backgroundColor:n,width:r,height:i,style:a}=t,o=e.style;if(n&&o.setProperty(`background-color`,n,`important`),r&&o.setProperty(`width`,`${r}px`,`important`),i&&o.setProperty(`height`,`${i}px`,`important`),a)for(let e in a)o[e]=a[e]}var Le=/^[\w-:]+$/;async function q(e,t,n=!1,r){let{ownerDocument:i,ownerWindow:a,fontFamilies:o,onCloneEachNode:s}=t;if(i&&ne(e))return r&&/\S/.test(e.data)&&r(e.data),i.createTextNode(e.data);if(i&&a&&b(e)&&(C(e)||x(e))){let r=await Te(e,t);if(t.isEnable(`removeAbnormalAttributes`)){let e=r.getAttributeNames();for(let t=e.length,n=0;n<t;n++){let t=e[n];Le.test(t)||r.removeAttribute(t)}}let i=t.currentNodeStyle=ke(e,r,n,t);n&&Ie(r,t);let a=!1;if(t.isEnable(`copyScrollbar`)){let t=[i.get(`overflow-x`)?.[0],i.get(`overflow-y`)?.[0]];a=t.includes(`scroll`)||(t.includes(`auto`)||t.includes(`overlay`))&&(e.scrollHeight>e.clientHeight||e.scrollWidth>e.clientWidth)}let c=i.get(`text-transform`)?.[0],l=L(i.get(`font-family`)?.[0]),u=l?e=>{c===`uppercase`?e=e.toUpperCase():c===`lowercase`?e=e.toLowerCase():c===`capitalize`&&(e=e[0].toUpperCase()+e.substring(1)),l.forEach(t=>{let n=o.get(t);n||o.set(t,n=new Set),e.split(``).forEach(e=>n.add(e))})}:void 0;return Ne(e,r,a,t,u),Ae(e,r),T(e)||await Pe(e,r,t,u),await s?.(r),r}let c=e.cloneNode(!1);return await Pe(e,c,t),await s?.(c),c}function Re(e){if(e.ownerDocument=void 0,e.ownerWindow=void 0,e.svgStyleElement=void 0,e.svgDefsElement=void 0,e.svgStyles.clear(),e.defaultComputedStyles.clear(),e.sandbox){try{e.sandbox.remove()}catch(t){e.log.warn(`Failed to destroyContext`,t)}e.sandbox=void 0}e.workers=[],e.fontFamilies.clear(),e.fontCssTexts.clear(),e.requests.clear(),e.tasks=[],e.shadowRoots=[]}function ze(e){let{url:t,timeout:n,responseType:r,...i}=e,a=new AbortController,o=n?setTimeout(()=>a.abort(),n):void 0;return fetch(t,{signal:a.signal,...i}).then(e=>{if(!e.ok)throw Error(`Failed fetch, not 2xx response`,{cause:e});switch(r){case`arrayBuffer`:return e.arrayBuffer();case`dataUrl`:return e.blob().then(he);default:return e.text()}}).finally(()=>clearTimeout(o))}function J(e,t){let{url:n,requestType:r=`text`,responseType:i=`text`,imageDom:a}=t,o=n,{timeout:s,acceptOfImage:c,requests:l,fetchFn:u,fetch:{requestInit:d,bypassingCache:f,placeholderImage:p},font:g,workers:_,fontFamilies:v}=e;r===`image`&&(m||h)&&e.drawImageCount++;let y=l.get(n);if(!y){f&&f instanceof RegExp&&f.test(o)&&(o+=(/\?/.test(o)?`&`:`?`)+new Date().getTime());let t=r.startsWith(`font`)&&g&&g.minify,h=new Set;t&&r.split(`;`)[1].split(`,`).forEach(e=>{v.has(e)&&v.get(e).forEach(e=>h.add(e))});let b=t&&h.size,x={url:o,timeout:s,responseType:b?`arrayBuffer`:i,headers:r===`image`?{accept:c}:void 0,...d};y={type:r,resolve:void 0,reject:void 0,response:null},y.response=(async()=>{if(u&&r===`image`){let e=await u(n);if(e)return e}return!m&&n.startsWith(`http`)&&_.length?new Promise((e,t)=>{_[l.size&_.length-1].postMessage({rawUrl:n,...x}),y.resolve=e,y.reject=t}):ze(x)})().catch(t=>{if(l.delete(n),r===`image`&&p)return e.log.warn(`Failed to fetch image base64, trying to use placeholder image`,o),typeof p==`string`?p:p(a);throw t}),l.set(n,y)}return y.response}async function Be(e,t,n,r){if(!Ve(e))return e;for(let[i,a]of Ue(e,t))try{let t=await J(n,{url:a,requestType:r?`image`:`text`,responseType:`dataUrl`});e=e.replace(We(i),`$1${t}$3`)}catch(e){n.log.warn(`Failed to fetch css data url`,i,e)}return e}function Ve(e){return/url\((['"]?)([^'"]+?)\1\)/.test(e)}var He=/url\((['"]?)([^'"]+?)\1\)/g;function Ue(e,t){let n=[];return e.replace(He,(e,r,i)=>(n.push([i,D(i,t)]),e)),n.filter(([e])=>!E(e))}function We(e){let t=e.replace(/([.*+?^${}()|\[\]\/\\])/g,`\\$1`);return RegExp(`(url\\(['"]?)(${t})(['"]?\\))`,`g`)}var Ge=[`background-image`,`border-image-source`,`-webkit-border-image`,`-webkit-mask-image`,`list-style-image`];function Ke(e,t){return Ge.map(n=>{let r=e.getPropertyValue(n);return!r||r===`none`?null:((m||h)&&t.drawImageCount++,Be(r,null,t,!0).then(t=>{!t||r===t||e.setProperty(n,t,e.getPropertyPriority(n))}))}).filter(Boolean)}function qe(e,t){if(w(e)){let n=e.currentSrc||e.src;if(!E(n))return[J(t,{url:n,imageDom:e,requestType:`image`,responseType:`dataUrl`}).then(t=>{t&&(e.srcset=``,e.dataset.originalSrc=n,e.src=t||``)})];(m||h)&&t.drawImageCount++}else if(x(e)&&!E(e.href.baseVal)){let n=e.href.baseVal;return[J(t,{url:n,imageDom:e,requestType:`image`,responseType:`dataUrl`}).then(t=>{t&&(e.dataset.originalSrc=n,e.href.baseVal=t||``)})]}return[]}function Je(e,t){let{ownerDocument:n,svgDefsElement:r}=t,i=e.getAttribute(`href`)??e.getAttribute(`xlink:href`);if(!i)return[];let[a,o]=i.split(`#`);if(o){let i=`#${o}`,s=t.shadowRoots.reduce((e,t)=>e??t.querySelector(`svg ${i}`),n?.querySelector(`svg ${i}`));if(a&&e.setAttribute(`href`,i),r?.querySelector(i))return[];if(s)return r?.appendChild(s.cloneNode(!0)),[];if(a)return[J(t,{url:a,responseType:`text`}).then(e=>{r?.insertAdjacentHTML(`beforeend`,e)})]}return[]}function Ye(e,t){let{tasks:n}=t;b(e)&&((w(e)||S(e))&&n.push(...qe(e,t)),ee(e)&&n.push(...Je(e,t))),C(e)&&n.push(...Ke(e.style,t)),e.childNodes.forEach(e=>{Ye(e,t)})}async function Xe(e,t){let{ownerDocument:n,svgStyleElement:r,fontFamilies:i,fontCssTexts:a,tasks:o,font:s}=t;if(!(!n||!r||!i.size)){if(s&&s.cssText){let e=Y(s.cssText,t);r.appendChild(n.createTextNode(`${e}
|
|
8
|
+
`))}else{let e=Array.from(n.styleSheets).filter(e=>{try{return`cssRules`in e&&!!e.cssRules.length}catch(n){return t.log.warn(`Error while reading CSS rules from ${e.href}`,n),!1}}),s=n.implementation.createHTMLDocument(``),c=s.createElement(`style`);s.head.appendChild(c);let l=c.sheet;await Promise.all(e.flatMap(e=>Array.from(e.cssRules).map(async e=>{if(v(e)){let n=e.href,r=``;try{r=await J(t,{url:n,requestType:`text`,responseType:`text`})}catch(e){t.log.warn(`Error fetch remote css import from ${n}`,e)}let i=r.replace(He,(e,t,r)=>e.replace(r,D(r,n)));for(let e of $e(i))try{l.insertRule(e,l.cssRules.length)}catch(n){t.log.warn(`Error inserting rule from remote css import`,{rule:e,error:n})}}}))),l.cssRules.length&&e.push(l);let u=[];e.forEach(e=>{X(e.cssRules,u)}),u.filter(e=>_(e)&&Ve(e.style.getPropertyValue(`src`))&&L(e.style.getPropertyValue(`font-family`))?.some(e=>i.has(e))).forEach(e=>{let i=e,s=a.get(i.cssText);s?r.appendChild(n.createTextNode(`${s}
|
|
9
|
+
`)):o.push(Be(i.cssText,i.parentStyleSheet?i.parentStyleSheet.href:null,t).then(e=>{e=Y(e,t),a.set(i.cssText,e),r.appendChild(n.createTextNode(`${e}
|
|
10
|
+
`))}))})}}}var Ze=/(\/\*[\s\S]*?\*\/)/g,Qe=/((@.*?keyframes [\s\S]*?){([\s\S]*?}\s*?)})/gi;function $e(e){if(e==null)return[];let t=[],n=e.replace(Ze,``);for(;;){let e=Qe.exec(n);if(!e)break;t.push(e[0])}n=n.replace(Qe,``);let r=/@import[\s\S]*?url\([^)]*\)[\s\S]*?;/gi,i=RegExp(`((\\s*?(?:\\/\\*[\\s\\S]*?\\*\\/)?\\s*?@media[\\s\\S]*?){([\\s\\S]*?)}\\s*?})|(([\\s\\S]*?){([\\s\\S]*?)})`,`gi`);for(;;){let e=r.exec(n);if(e)i.lastIndex=r.lastIndex;else if(e=i.exec(n),e)r.lastIndex=i.lastIndex;else break;t.push(e[0])}return t}var et=/url\([^)]+\)\s*format\((["']?)([^"']+)\1\)/g,tt=/src:\s*(?:url\([^)]+\)\s*format\([^)]+\)[,;]\s*)+/g;function Y(e,t){let{font:n}=t,r=n?n?.preferredFormat:void 0;return r?e.replace(tt,e=>{for(;;){let[t,,n]=et.exec(e)||[];if(!n)return``;if(n===r)return`src: ${t};`}}):e}function X(e,t=[]){for(let n of Array.from(e))y(n)?t.push(...X(n.cssRules)):`cssRules`in n?X(n.cssRules,t):t.push(n);return t}var nt=/\bx?link:?href\s*=\s*["'](?!data:)[^"']+["']/i;function rt(e){return nt.test(e.innerHTML)}async function it(e,t){let n=await z(e,t);if(b(n.node)&&x(n.node)&&!rt(n.node))return n.node;let{ownerDocument:r,log:i,tasks:a,svgStyleElement:o,svgDefsElement:s,svgStyles:c,font:l,progress:u,autoDestruct:d,onCloneNode:f,onEmbedNode:p,onCreateForeignObjectSvg:m}=n;i.time(`clone node`);let h=await q(n.node,n,!0);if(o&&r){let e=``;c.forEach((t,n)=>{e+=`${t.join(`,
|
|
11
|
+
`)} {
|
|
12
|
+
${n}
|
|
13
|
+
}
|
|
14
|
+
`}),o.appendChild(r.createTextNode(e))}i.timeEnd(`clone node`),await f?.(h),l!==!1&&b(h)&&(i.time(`embed web font`),await Xe(h,n),i.timeEnd(`embed web font`)),i.time(`embed node`),Ye(h,n);let g=a.length,_=0,v=async()=>{for(;;){let e=a.pop();if(!e)break;try{await e}catch(e){n.log.warn(`Failed to run task`,e)}u?.(++_,g)}};u?.(_,g),await Promise.all([...Array.from({length:4})].map(v)),i.timeEnd(`embed node`),await p?.(h);let y=at(h,n);return s&&y.insertBefore(s,y.children[0]),o&&y.insertBefore(o,y.children[0]),d&&Re(n),await m?.(y),y}function at(e,t){let{width:n,height:r}=t,i=A(n,r,e.ownerDocument),a=i.ownerDocument.createElementNS(i.namespaceURI,`foreignObject`);return a.setAttributeNS(null,`x`,`0%`),a.setAttributeNS(null,`y`,`0%`),a.setAttributeNS(null,`width`,`100%`),a.setAttributeNS(null,`height`,`100%`),a.append(e),i.appendChild(a),i}async function Z(e,t){let n=await z(e,t),r=await it(n),i=j(r,n.isEnable(`removeControlCharacter`));return n.autoDestruct||(n.svgStyleElement=V(n.ownerDocument),n.svgDefsElement=n.ownerDocument?.createElementNS(k,`defs`),n.svgStyles.clear()),await be(N(i,r.ownerDocument),n)}async function ot(t,n){let r=await z(t,n),{log:i,type:o,quality:s,dpi:c}=r,l=await Z(r);i.time(`canvas to blob`);let u=await pe(l,o,s);if([`image/png`,`image/jpeg`].includes(o)&&c){let t=await ge(u.slice(0,33)),n=new Uint8Array(t);return o===`image/png`?n=a(n,c):o===`image/jpeg`&&(n=e(n,c)),i.timeEnd(`canvas to blob`),new Blob([n,u.slice(33)],{type:o})}return i.timeEnd(`canvas to blob`),u}async function Q(t,n){let r=await z(t,n),{log:i,quality:s,type:c,dpi:l}=r,f=await Z(r);i.time(`canvas to data url`);let p=f.toDataURL(c,s);if([`image/png`,`image/jpeg`].includes(c)&&l&&u&&d){let[t,n]=p.split(`,`),r=0,i=!1;if(c===`image/png`){let e=o(n);e>=0?(r=Math.ceil((e+28)/3)*4,i=!0):r=44}else c===`image/jpeg`&&(r=24);let s=n.substring(0,r),u=n.substring(r),d=window.atob(s),f=new Uint8Array(d.length);for(let e=0;e<f.length;e++)f[e]=d.charCodeAt(e);let m=c===`image/png`?a(f,l,i):e(f,l);p=[t,`,`,window.btoa(String.fromCharCode(...m)),u].join(``)}return i.timeEnd(`canvas to data url`),p}async function $(e,t){let n=await z(e,t),{width:r,height:i,ownerDocument:a}=n,o=await Q(n),s=A(r,i,a),c=s.ownerDocument.createElementNS(s.namespaceURI,`image`);return c.setAttributeNS(null,`href`,o),c.setAttributeNS(null,`height`,`100%`),c.setAttributeNS(null,`width`,`100%`),s.appendChild(c),j(s,n.isEnable(`removeControlCharacter`))}async function st(e,t){let n=await z(e,t),{ownerDocument:r,width:i,height:a,scale:o,type:s}=n,c=N(s===`image/svg+xml`?await $(n):await Q(n),r);return c.width=Math.floor(i*o),c.height=Math.floor(a*o),c.style.width=`${i}px`,c.style.height=`${a}px`,c}async function ct(e,t){return Q(await z(e,{...t,type:`image/jpeg`}))}async function lt(e,t){let n=await Z(await z(e,t));return n.getContext(`2d`).getImageData(0,0,n.width,n.height).data}async function ut(e,t){return Q(await z(e,{...t,type:`image/png`}))}async function dt(e,t){return Q(await z(e,{...t,type:`image/webp`}))}export{B as createContext,Re as destroyContext,ot as domToBlob,Z as domToCanvas,Q as domToDataUrl,it as domToForeignObjectSvg,st as domToImage,ct as domToJpeg,lt as domToPixel,ut as domToPng,$ as domToSvg,dt as domToWebp,P as loadMedia,F as waitUntilLoad};
|