@forsion/unit 2.13.0 → 2.13.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (144) hide show
  1. package/main.mjs +5 -3
  2. package/package.json +1 -1
  3. package/release.json +5 -5
  4. package/web/assets/{ArtificialView-BSv3Mx5C.js → ArtificialView-XwHMLUFb.js} +1 -1
  5. package/web/assets/{AutomationBuilder-BuiHtVB-.js → AutomationBuilder-hqs0QhMt.js} +1 -1
  6. package/web/assets/{CalendarConfigView-BJtG6cqN.js → CalendarConfigView-DKib8Oed.js} +1 -1
  7. package/web/assets/{CalendarView-C-FX1RED.js → CalendarView-DJ5iOzvu.js} +1 -1
  8. package/web/assets/{CapabilityMenu-kx1TIJYN.js → CapabilityMenu-SwVlZ06x.js} +1 -1
  9. package/web/assets/{CheckboxInput-eW7xdiRS.js → CheckboxInput-BC-5a_C9.js} +1 -1
  10. package/web/assets/{Chrome-B77-lQyh.js → Chrome-HdfyYV3i.js} +1 -1
  11. package/web/assets/{CodeView-Df3AiSIi.js → CodeView-CFL6yQ-6.js} +3 -3
  12. package/web/assets/{DashboardGridView-MlO1dpuo.js → DashboardGridView-B9DCWYVb.js} +12 -12
  13. package/web/assets/{EventCard-CDmeCbI8.js → EventCard-B_ndpqH_.js} +1 -1
  14. package/web/assets/{ExcalidrawCanvas-D9vkBh_5.js → ExcalidrawCanvas-BQ4KKLJP.js} +1 -1
  15. package/web/assets/{FloatingToc-tART_jC4.js → FloatingToc-Ce9GamvH.js} +1 -1
  16. package/web/assets/{HomepageView-Trqmd3RV.js → HomepageView-RCOfcVbE.js} +1 -1
  17. package/web/assets/{ImageStudioPanels-BfCVTnKC.js → ImageStudioPanels-lkS_y2uM.js} +2 -2
  18. package/web/assets/{ImageStudioView-KJhx0wJk.js → ImageStudioView-UPv52acl.js} +1 -1
  19. package/web/assets/{InlineFiles-BHwivGbQ.js → InlineFiles-CQbQumkf.js} +1 -1
  20. package/web/assets/{MarkdownBlock-D8LgHFYY.js → MarkdownBlock-CkqiwPXa.js} +19 -19
  21. package/web/assets/{ModelPill-DrW2cG0l.js → ModelPill-CY-rU1RU.js} +2 -2
  22. package/web/assets/{MuseLibraryView-CW78Uivf.js → MuseLibraryView-CtTHlVnT.js} +2 -2
  23. package/web/assets/{MuseView-Cb6R_l4i.js → MuseView-CC2A7MBs.js} +2 -2
  24. package/web/assets/{PageHistoryPanel-BQs9IWTP.js → PageHistoryPanel-KhKT1DLy.js} +2 -2
  25. package/web/assets/{PdfAnnotator-BFTBkxvO.js → PdfAnnotator-DUyrgY-t.js} +1 -1
  26. package/web/assets/{ProductView-mB-S0j81.js → ProductView-CgsIYZqD.js} +1 -1
  27. package/web/assets/{RightPanel-BVZeVO3c.js → RightPanel-BHDgqTFs.js} +3 -3
  28. package/web/assets/RunLocationPicker-DBnXYV5B.js +38 -0
  29. package/web/assets/{SidebarRow-D77yrSLf.js → SidebarRow-BAJxbMcx.js} +1 -1
  30. package/web/assets/{SketchCard-CAAr_cqF.js → SketchCard-BGYz-bXP.js} +1 -1
  31. package/web/assets/{StudioGuestSurface-DthpuVGg.js → StudioGuestSurface-lt6znmkl.js} +1 -1
  32. package/web/assets/{TodoListView-C3ZkMIIf.js → TodoListView-DPKhee6i.js} +1 -1
  33. package/web/assets/{Tooltip-D9Dt9ZTr.js → Tooltip-ZxrDqN4p.js} +1 -1
  34. package/web/assets/{UnifiedPage-C75y-MKT.js → UnifiedPage-BX6ZQL0h.js} +27 -27
  35. package/web/assets/{amadeus-manual.en-D5wZKuag.js → amadeus-manual.en-DzRWr4BL.js} +15 -15
  36. package/web/assets/{amadeus-manual.zh-Br5fidrj.js → amadeus-manual.zh-DW32DkL7.js} +15 -15
  37. package/web/assets/{appStore-B1ynyt42.js → appStore-DWP8UET9.js} +99 -79
  38. package/web/assets/appStore-wtOILggO.css +1 -0
  39. package/web/assets/{arrow-up-right-R10mR2I6.js → arrow-up-right-DrCXuWS7.js} +1 -1
  40. package/web/assets/{astryxBridge-CU_kQTEl.js → astryxBridge-D-m4_kYt.js} +3 -3
  41. package/web/assets/{automationListSource-B8EIRmDW.js → automationListSource-C8BNy6RY.js} +1 -1
  42. package/web/assets/{book-open-DBJ3dDpw.js → book-open-OLNm7OaB.js} +1 -1
  43. package/web/assets/{calendarNavStore-DGvUlU5N.js → calendarNavStore-Cylfvv3s.js} +1 -1
  44. package/web/assets/{canvasPrefs-DwL_OAAo.js → canvasPrefs-8taQ42Cz.js} +1 -1
  45. package/web/assets/{chatBoxSurface-Lq-2qfd3.js → chatBoxSurface-CIlzs45H.js} +1 -1
  46. package/web/assets/{circle-question-mark-HPZpZQxd.js → circle-question-mark-XbAFplz1.js} +1 -1
  47. package/web/assets/{circle-x-BZfe7d6S.js → circle-x-fcReAZaE.js} +1 -1
  48. package/web/assets/{client-DxGbwZLy.js → client-0MPbodA6.js} +1 -1
  49. package/web/assets/{code-xml-joKQ-qGS.js → code-xml-Cuna8Kh4.js} +1 -1
  50. package/web/assets/{codeStudioStore-C7rGKlOC.js → codeStudioStore-BBU62GTy.js} +1 -1
  51. package/web/assets/{codingNavigation-CjeWG4xm.js → codingNavigation-DDlPpPk5.js} +7 -7
  52. package/web/assets/{create-BjBRKATq.js → create-BGtEfCcg.js} +2 -2
  53. package/web/assets/{dashboardSurface-Cojgf_-U.js → dashboardSurface-BYM3C7WG.js} +1 -1
  54. package/web/assets/{deskCapture-DnGWk1iq.js → deskCapture-BiUCmqfc.js} +1 -1
  55. package/web/assets/{diff2html-Cd1rVi_Z.js → diff2html-BNp2FTbk.js} +1 -1
  56. package/web/assets/{docx-preview-CK0k1mUD.js → docx-preview-CFznGVOU.js} +1 -1
  57. package/web/assets/{emoji-Cjm3bKiF.js → emoji-6zl4yfOS.js} +1 -1
  58. package/web/assets/{floatingTocSurface-Dd1pT5j5.js → floatingTocSurface-DreXPCa6.js} +1 -1
  59. package/web/assets/{foldActions-Dm-uAt3L.js → foldActions-05QcQziQ.js} +1 -1
  60. package/web/assets/{folder-CvZyHIgb.js → folder-BpsfOHD4.js} +1 -1
  61. package/web/assets/{folder-plus-BRScGQ9m.js → folder-plus-BeQHr4AZ.js} +1 -1
  62. package/web/assets/{gestures-CZQVefU0.js → gestures-DQBCcK4y.js} +1 -1
  63. package/web/assets/{hand-D3QspKYq.js → hand-Bko7ms15.js} +1 -1
  64. package/web/assets/{hard-drive-BQsHSala.js → hard-drive-BpuI5ebj.js} +1 -1
  65. package/web/assets/{i18n.generated-BZRHO2Nc.js → i18n.generated-BuLjnmY8.js} +1 -1
  66. package/web/assets/{imageStudio-Cy3_437s.js → imageStudio-BLVNKmEG.js} +2 -2
  67. package/web/assets/{index-BPhwi4-v.js → index-BF10xp_K.js} +1 -1
  68. package/web/assets/{index-GjLSlygt.js → index-BHm6K743.js} +1 -1
  69. package/web/assets/{index-Bh_nLVTc.js → index-BM2o7PeV.js} +5 -5
  70. package/web/assets/{index-BcVGjCAJ.js → index-BgnNNv3e.js} +1 -1
  71. package/web/assets/{index-CcOag8eb.js → index-C0Gy2NQ6.js} +1 -1
  72. package/web/assets/{index-0AYHATDX.js → index-C1doZp5H.js} +1 -1
  73. package/web/assets/{index-9BmmlTjY.js → index-C4L6vjd_.js} +1 -1
  74. package/web/assets/{index-8ag1K7AZ.js → index-CD3yIkOA.js} +1 -1
  75. package/web/assets/{index-Dkd-nl1u.js → index-CJeUgjPU.js} +1 -1
  76. package/web/assets/{index-B5GxvbNm.js → index-CLHoq1w-.js} +1 -1
  77. package/web/assets/{index-DElrDw66.js → index-CUZI62qU.js} +1 -1
  78. package/web/assets/{index-BgtO11q8.js → index-Cff42k7q.js} +1 -1
  79. package/web/assets/{index-Dj-PygjB.js → index-Ck_O3Jdd.js} +1 -1
  80. package/web/assets/index-CuiYK18N.js +1 -0
  81. package/web/assets/{index-Bpc3R3DS.js → index-CwcOeZdT.js} +1 -1
  82. package/web/assets/{index-DJLWTPtq.js → index-D6AycQIz.js} +1 -1
  83. package/web/assets/{index-C9yo04Ck.js → index-D7gVhvNY.js} +1 -1
  84. package/web/assets/{index-BnWj6ggb.js → index-D9UZQy42.js} +1 -1
  85. package/web/assets/{index-D6mpAJ9S.js → index-DuBQ0j2g.js} +1 -1
  86. package/web/assets/{index-1FhRiJ_X.js → index-OD1gSX3h.js} +1 -1
  87. package/web/assets/{index-DNE_PBJt.js → index-Uo5tswys.js} +1 -1
  88. package/web/assets/{index-BgDZGDqt.js → index-o8cj0pRH.js} +1 -1
  89. package/web/assets/{index-BdZaheMZ.js → index-rHjhbwvm.js} +1 -1
  90. package/web/assets/{index-4E9nrhwf.js → index-rggq2czF.js} +1 -1
  91. package/web/assets/{index-D0FLFLfh.js → index-sCXThwqZ.js} +1 -1
  92. package/web/assets/{invitePage-B4gMvEKi.js → invitePage-b0HGvMj6.js} +1 -1
  93. package/web/assets/{ipc-CPhL3bPp.js → ipc-CxAyeo8q.js} +1 -1
  94. package/web/assets/{jszip.min-DAJT9RUA.js → jszip.min-B94KpE21.js} +1 -1
  95. package/web/assets/{layout-grid-DfUfnvDS.js → layout-grid-BBVuEdWG.js} +1 -1
  96. package/web/assets/{linkFollow-C6PHGUxk.js → linkFollow-B7ivDZMM.js} +5 -5
  97. package/web/assets/{list-tree-DaGpnIYu.js → list-tree-4-0QDbLu.js} +1 -1
  98. package/web/assets/{listFold-Q_8mh5ZG.js → listFold-DLuxXiIj.js} +1 -1
  99. package/web/assets/{lock-DQ_yL4nF.js → lock-CnbZm4vo.js} +1 -1
  100. package/web/assets/{log-out-DFwTeh2X.js → log-out-BEynWaHa.js} +1 -1
  101. package/web/assets/{main-NgUPPqDn.css → main-BiS_5wrB.css} +1 -1
  102. package/web/assets/main-sIq2N9Z5.js +20 -0
  103. package/web/assets/{markdownEditorSurface-e_oMhqx-.js → markdownEditorSurface-ZSJ3RHAv.js} +1 -1
  104. package/web/assets/{mdMarkStore-DjN4bf1T.js → mdMarkStore-DQHDjG7s.js} +2 -2
  105. package/web/assets/{mdMarks-cmL6vzR-.js → mdMarks-DbIcRa0O.js} +1 -1
  106. package/web/assets/{message-square-plus-CEHkduIL.js → message-square-plus-CpiKDvle.js} +1 -1
  107. package/web/assets/{messages-CBtmbpur.js → messages-_jta1lSI.js} +1 -1
  108. package/web/assets/minus-C9ndHJ9O.js +1 -0
  109. package/web/assets/{mobileEntry-qR7BAROr.js → mobileEntry-CPmU_c4m.js} +1 -1
  110. package/web/assets/{nativeDownload-CziEyW_p.js → nativeDownload-BYT082bY.js} +1 -1
  111. package/web/assets/{pageChrome-DFz_AAzZ.js → pageChrome-D3Niv1JM.js} +1 -1
  112. package/web/assets/{pageTree-yVO1_fSy.js → pageTree-CgfvpzIj.js} +1 -1
  113. package/web/assets/{pen-tool-uxsFELYC.js → pen-tool-BXEFnU2i.js} +1 -1
  114. package/web/assets/{pencil-BSbra1Ra.js → pencil-cqvCkekG.js} +1 -1
  115. package/web/assets/pluginChat-BbBukMuN.js +2 -0
  116. package/web/assets/{redo-2-BK5LMNa5.js → redo-2-BO7wCDwy.js} +1 -1
  117. package/web/assets/{rotate-ccw-HedfU4na.js → rotate-ccw-BvipPIjC.js} +1 -1
  118. package/web/assets/{sharePage-CpzDpuU1.js → sharePage-XbN50US7.js} +2 -2
  119. package/web/assets/{shareViewer-BwzH2bIs.js → shareViewer-BaYogetW.js} +1 -1
  120. package/web/assets/{star-CgYon3z4.js → star-BQWMXnn7.js} +1 -1
  121. package/web/assets/tableSurface-BXqqidd1.js +1 -0
  122. package/web/assets/{terminal-krsPf1mc.js → terminal-l9k6RDrH.js} +1 -1
  123. package/web/assets/{terminalView-4e2_u5_I.js → terminalView-Cpnt5_0P.js} +1 -1
  124. package/web/assets/{type-GJYLEhY-.js → type-CFoaj2eD.js} +1 -1
  125. package/web/assets/{undo-2-DCTs4Ro4.js → undo-2-DusxpdLa.js} +1 -1
  126. package/web/assets/{unitAccount-D3xjX3cu.js → unitAccount-DwutFPPw.js} +1 -1
  127. package/web/assets/{unitBridge-D5JcIkAP.js → unitBridge-CcgQpkqV.js} +1 -1
  128. package/web/assets/{unitCloudTransport-B44L3x6M.js → unitCloudTransport-vA7cLDts.js} +1 -1
  129. package/web/assets/{unitOwnerAccess-CRUHWGpf.js → unitOwnerAccess-LBlJ1YfA.js} +1 -1
  130. package/web/assets/{unitShim-_VzxvdEG.js → unitShim-B_M9IrbC.js} +3 -3
  131. package/web/assets/{upload-MVVRQtkj.js → upload-ZrOj6tXA.js} +1 -1
  132. package/web/assets/{userSpaces-CI4eqEgh.js → userSpaces-uJOnsedR.js} +1 -1
  133. package/web/assets/viewportLock-D3SNkwS2.js +631 -0
  134. package/web/assets/{workflow-DzeW9OXR.js → workflow-DPoG4QE2.js} +1 -1
  135. package/web/assets/{zoom-in-CovPsw4g.js → zoom-in-lbTgzdQP.js} +1 -1
  136. package/web/index.html +27 -7
  137. package/web/assets/RunLocationPicker-CyVa0RJa.js +0 -38
  138. package/web/assets/appStore-BC_CQv-L.css +0 -1
  139. package/web/assets/index-BaRySZ-M.js +0 -1
  140. package/web/assets/main-CwqZ_ymb.js +0 -19
  141. package/web/assets/minus-BUT48dAC.js +0 -1
  142. package/web/assets/pluginChat-BMFnf_j2.js +0 -2
  143. package/web/assets/tableSurface-CmDwnKnd.js +0 -1
  144. package/web/assets/viewportLock-BH26xHQO.js +0 -611
@@ -1 +1 @@
1
- import{F as e}from"./appStore-B1ynyt42.js";const o=[["rect",{width:"8",height:"8",x:"3",y:"3",rx:"2",key:"by2w9f"}],["path",{d:"M7 11v4a2 2 0 0 0 2 2h4",key:"xkn7yn"}],["rect",{width:"8",height:"8",x:"13",y:"13",rx:"2",key:"1cgmvn"}]],r=e("workflow",o);export{r as W};
1
+ import{F as e}from"./appStore-DWP8UET9.js";const o=[["rect",{width:"8",height:"8",x:"3",y:"3",rx:"2",key:"by2w9f"}],["path",{d:"M7 11v4a2 2 0 0 0 2 2h4",key:"xkn7yn"}],["rect",{width:"8",height:"8",x:"13",y:"13",rx:"2",key:"1cgmvn"}]],r=e("workflow",o);export{r as W};
@@ -1 +1 @@
1
- import{F as e}from"./appStore-B1ynyt42.js";const o=[["circle",{cx:"11",cy:"11",r:"8",key:"4ej97u"}],["line",{x1:"21",x2:"16.65",y1:"21",y2:"16.65",key:"13gj7c"}],["line",{x1:"8",x2:"14",y1:"11",y2:"11",key:"durymu"}]],n=e("zoom-out",o);const y=[["circle",{cx:"11",cy:"11",r:"8",key:"4ej97u"}],["line",{x1:"21",x2:"16.65",y1:"21",y2:"16.65",key:"13gj7c"}],["line",{x1:"11",x2:"11",y1:"8",y2:"14",key:"1vmskp"}],["line",{x1:"8",x2:"14",y1:"11",y2:"11",key:"durymu"}]],x=e("zoom-in",y);export{n as Z,x as a};
1
+ import{F as e}from"./appStore-DWP8UET9.js";const o=[["circle",{cx:"11",cy:"11",r:"8",key:"4ej97u"}],["line",{x1:"21",x2:"16.65",y1:"21",y2:"16.65",key:"13gj7c"}],["line",{x1:"8",x2:"14",y1:"11",y2:"11",key:"durymu"}]],n=e("zoom-out",o);const y=[["circle",{cx:"11",cy:"11",r:"8",key:"4ej97u"}],["line",{x1:"21",x2:"16.65",y1:"21",y2:"16.65",key:"13gj7c"}],["line",{x1:"11",x2:"11",y1:"8",y2:"14",key:"1vmskp"}],["line",{x1:"8",x2:"14",y1:"11",y2:"11",key:"durymu"}]],x=e("zoom-in",y);export{n as Z,x as a};
package/web/index.html CHANGED
@@ -236,7 +236,7 @@
236
236
  }
237
237
  </style>
238
238
  <link rel="stylesheet" href="./fonts/fonts.css">
239
- <script type="module" crossorigin src="./assets/index-Bh_nLVTc.js"></script>
239
+ <script type="module" crossorigin src="./assets/index-BM2o7PeV.js"></script>
240
240
  </head>
241
241
  <body>
242
242
  <div id="tangu-splash" aria-hidden="true">
@@ -252,7 +252,7 @@
252
252
  </svg>
253
253
  </div>
254
254
  <div id="root"></div>
255
- <script>window.FORSION_APP_VERSION="2.13.0";// Runs inline before app modules, from one source shared by Desktop, Web and Mobile.
255
+ <script>window.FORSION_APP_VERSION="2.13.1";// Runs inline before app modules, from one source shared by Desktop, Web and Mobile.
256
256
  (function () {
257
257
  var splash = document.getElementById('tangu-splash');
258
258
  if (!splash) return;
@@ -266,7 +266,9 @@
266
266
  if (saved && saved.version === 1) value = saved;
267
267
  } catch (_) { /* Default brand remains visible. */ }
268
268
  if (value.showSplash === false) { splash.remove(); return; }
269
- var reduce = matchMedia('(prefers-reduced-motion: reduce)').matches;
269
+ var reduce = matchMedia('(prefers-reduced-motion: reduce)').matches || !!(window.tangu && window.tangu.startupAppearance && window.tangu.startupAppearance.prefersReducedMotion);
270
+ if (reduce) splash.dataset.reducedMotion = '';
271
+ var softwareRendering = !!(window.tangu && window.tangu.startupAppearance && window.tangu.startupAppearance.softwareRendering), performanceStill = false;
270
272
  var animation = ['default', 'pulse', 'spin', 'none'].indexOf(value.animation) !== -1 ? value.animation : 'default';
271
273
  var style = document.createElement('style');
272
274
  style.textContent = '\
@@ -310,7 +312,7 @@
310
312
  @keyframes fts-in { from {opacity:0} }\
311
313
  #tangu-splash.out .fts-view { animation:fts-open 380ms cubic-bezier(.4,0,.2,1) both; }\
312
314
  @keyframes fts-open { to {transform:scale(1.08)} }\
313
- #tangu-splash[data-still] .fts * { animation:none; }\
315
+ #tangu-splash[data-still] .fts *, #tangu-splash[data-reduced-motion] *, #tangu-splash[data-performance-still] * { animation:none !important; }\
314
316
  @media(prefers-reduced-motion:reduce) { #tangu-splash .fts * { animation:none; } }';
315
317
  document.head.appendChild(style);
316
318
  // Tree shadow, the built-in default scene: window light on a wall, branch shadows and one Fusang verse.
@@ -325,6 +327,7 @@
325
327
  var original = splash.firstElementChild;
326
328
  function treeShadow(target) {
327
329
  try {
330
+ if (softwareRendering) { performanceStill = true; splash.dataset.performanceStill = 'software'; }
328
331
  var look = document.documentElement.dataset.mode === 'dark'
329
332
  ? { wall: '#121419', ink: '#05070c', near: .66, far: .42, word: '#8a94a8', verse: '#ccd4e2', bloom: 'rgba(140,165,215,.1)', lit: 'radial-gradient(70% 80% at 55% 35%, rgba(235,242,255,.16), transparent 70%), linear-gradient(165deg, #7889a8, #47536c)' }
330
333
  : { wall: '#e4d9cb', ink: '#5f4636', near: .4, far: .26, word: '#9a7c68', verse: '#6b4f3e', bloom: 'transparent', lit: 'linear-gradient(160deg, #fff7ea, #fbeede)' };
@@ -333,7 +336,7 @@
333
336
  // The tree is sized and rooted relative to the window light, so its branches reach the panes at any aspect ratio.
334
337
  var rootX = cx + pw * 2.1, rootY = cy + ph * 1.946;
335
338
  // Everything on the canvases is blurred, so a capped bitmap stretched by CSS is enough on large displays.
336
- var q = Math.min(1, 1600 / Math.max(W, H));
339
+ var q = Math.min(1, (performanceStill ? 960 : 1600) / Math.max(W, H));
337
340
  // A different verse on every launch. Storage is unavailable in the sandboxed settings preview.
338
341
  var last = -1, pick;
339
342
  try { last = parseInt(localStorage.getItem('forsion_startup_verse'), 10); } catch (_) { /* preview */ }
@@ -433,13 +436,30 @@
433
436
  } else if (animation !== 'default' || reduce) splash.dataset.customMotion = reduce ? 'none' : animation;
434
437
 
435
438
  // App readiness controls exit, with a hard upper bound even if initialization fails.
436
- var start = Date.now(), done = false, frame = 0;
439
+ var start = Date.now(), done = false, frame = 0, performanceFrame = 0, lastFrame = 0, slowFrames = [];
440
+ // Hardware acceleration can still be too slow on an integrated GPU or while cold-loading modules.
441
+ // Freeze a complete scene after sustained frame delays, never after one startup spike/backgrounding.
442
+ function watchPerformance(now) {
443
+ if (done || performanceStill || reduce || splash.dataset.scene !== 'tree-shadow') return;
444
+ if (!document.hidden && lastFrame) {
445
+ slowFrames.push(now - lastFrame > 50);
446
+ if (slowFrames.length > 6) slowFrames.shift();
447
+ if (slowFrames.length === 6 && slowFrames.filter(Boolean).length >= 4) {
448
+ performanceStill = true; splash.dataset.performanceStill = 'frames'; return;
449
+ }
450
+ } else slowFrames = [];
451
+ lastFrame = document.hidden ? 0 : now;
452
+ performanceFrame = requestAnimationFrame(watchPerformance);
453
+ }
454
+ if (!performanceStill) performanceFrame = requestAnimationFrame(watchPerformance);
437
455
  var ceiling = setTimeout(fade, 10000);
438
456
  function fade() {
439
457
  if (done) return;
440
458
  done = true;
441
459
  clearTimeout(ceiling);
442
460
  cancelAnimationFrame(frame);
461
+ cancelAnimationFrame(performanceFrame);
462
+ if (reduce || performanceStill) { splash.remove(); style.remove(); return; }
443
463
  splash.classList.add('out');
444
464
  setTimeout(function () { splash.remove(); style.remove(); }, 450);
445
465
  }
@@ -453,7 +473,7 @@
453
473
  frame = requestAnimationFrame(function () {
454
474
  var elapsed = Date.now() - start;
455
475
  // The classic mark leaves at its loop seam; the tree shadow has none and only keeps a short minimum.
456
- var duration = reduce ? 0 : splash.dataset.scene === 'tree-shadow' ? Math.max(0, 1300 - elapsed)
476
+ var duration = reduce || performanceStill ? 0 : splash.dataset.scene === 'tree-shadow' ? Math.max(0, 1300 - elapsed)
457
477
  : Math.max(0, Math.max(1, Math.ceil((elapsed + 300) / 1600)) * 1600 - 300 - elapsed);
458
478
  setTimeout(fade, duration);
459
479
  });