lighthouse 11.1.0 → 11.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (557) hide show
  1. package/CONTRIBUTING.md +3 -5
  2. package/cli/bin.js +4 -3
  3. package/cli/cli-flags.js +3 -3
  4. package/cli/commands/commands.js +3 -3
  5. package/cli/commands/list-audits.js +3 -3
  6. package/cli/commands/list-locales.js +3 -3
  7. package/cli/commands/list-trace-categories.js +3 -3
  8. package/cli/index.js +3 -3
  9. package/cli/printer.js +3 -3
  10. package/cli/run.js +3 -3
  11. package/cli/sentry-prompt.js +3 -3
  12. package/cli/test/smokehouse/__snapshots__/report-assert-test.js.snap +8 -0
  13. package/cli/test/smokehouse/config/exclusions.d.ts +3 -3
  14. package/cli/test/smokehouse/config/exclusions.js +3 -3
  15. package/cli/test/smokehouse/core-tests.js +3 -3
  16. package/cli/test/smokehouse/frontends/back-compat-util.d.ts +3 -3
  17. package/cli/test/smokehouse/frontends/back-compat-util.js +3 -3
  18. package/cli/test/smokehouse/frontends/lib.js +3 -3
  19. package/cli/test/smokehouse/frontends/node.js +3 -3
  20. package/cli/test/smokehouse/frontends/smokehouse-bin.js +3 -3
  21. package/cli/test/smokehouse/lib/child-process-error.d.ts +3 -3
  22. package/cli/test/smokehouse/lib/child-process-error.js +3 -3
  23. package/cli/test/smokehouse/lib/concurrent-mapper.d.ts +3 -3
  24. package/cli/test/smokehouse/lib/concurrent-mapper.js +3 -3
  25. package/cli/test/smokehouse/lib/local-console.d.ts +3 -3
  26. package/cli/test/smokehouse/lib/local-console.js +3 -3
  27. package/cli/test/smokehouse/lighthouse-runners/bundle.js +3 -3
  28. package/cli/test/smokehouse/lighthouse-runners/cli.js +3 -3
  29. package/cli/test/smokehouse/lighthouse-runners/devtools.js +3 -3
  30. package/cli/test/smokehouse/report-assert-test.js +3 -3
  31. package/cli/test/smokehouse/report-assert.js +3 -3
  32. package/cli/test/smokehouse/smokehouse.d.ts +0 -1
  33. package/cli/test/smokehouse/smokehouse.js +12 -6
  34. package/cli/test/smokehouse/version-check-test.js +3 -3
  35. package/cli/test/smokehouse/version-check.js +3 -3
  36. package/commitlint.config.js +3 -3
  37. package/core/audits/accessibility/accesskeys.js +3 -3
  38. package/core/audits/accessibility/aria-allowed-attr.js +3 -3
  39. package/core/audits/accessibility/aria-allowed-role.js +3 -3
  40. package/core/audits/accessibility/aria-command-name.js +3 -3
  41. package/core/audits/accessibility/aria-dialog-name.js +3 -3
  42. package/core/audits/accessibility/aria-hidden-body.js +3 -3
  43. package/core/audits/accessibility/aria-hidden-focus.js +3 -3
  44. package/core/audits/accessibility/aria-input-field-name.js +3 -3
  45. package/core/audits/accessibility/aria-meter-name.js +3 -3
  46. package/core/audits/accessibility/aria-progressbar-name.js +3 -3
  47. package/core/audits/accessibility/aria-required-attr.js +3 -3
  48. package/core/audits/accessibility/aria-required-children.js +3 -3
  49. package/core/audits/accessibility/aria-required-parent.js +3 -3
  50. package/core/audits/accessibility/aria-roles.js +3 -3
  51. package/core/audits/accessibility/aria-text.js +3 -3
  52. package/core/audits/accessibility/aria-toggle-field-name.js +3 -3
  53. package/core/audits/accessibility/aria-tooltip-name.js +3 -3
  54. package/core/audits/accessibility/aria-treeitem-name.js +3 -3
  55. package/core/audits/accessibility/aria-valid-attr-value.js +3 -3
  56. package/core/audits/accessibility/aria-valid-attr.js +3 -3
  57. package/core/audits/accessibility/axe-audit.js +3 -3
  58. package/core/audits/accessibility/button-name.js +3 -3
  59. package/core/audits/accessibility/bypass.js +3 -3
  60. package/core/audits/accessibility/color-contrast.js +3 -3
  61. package/core/audits/accessibility/definition-list.js +3 -3
  62. package/core/audits/accessibility/dlitem.js +3 -3
  63. package/core/audits/accessibility/document-title.js +3 -3
  64. package/core/audits/accessibility/duplicate-id-active.js +3 -3
  65. package/core/audits/accessibility/duplicate-id-aria.js +3 -3
  66. package/core/audits/accessibility/empty-heading.js +3 -3
  67. package/core/audits/accessibility/form-field-multiple-labels.js +3 -3
  68. package/core/audits/accessibility/frame-title.js +3 -3
  69. package/core/audits/accessibility/heading-order.js +3 -3
  70. package/core/audits/accessibility/html-has-lang.js +3 -3
  71. package/core/audits/accessibility/html-lang-valid.js +3 -3
  72. package/core/audits/accessibility/html-xml-lang-mismatch.js +3 -3
  73. package/core/audits/accessibility/identical-links-same-purpose.js +3 -3
  74. package/core/audits/accessibility/image-alt.js +3 -3
  75. package/core/audits/accessibility/image-redundant-alt.js +3 -3
  76. package/core/audits/accessibility/input-button-name.js +3 -3
  77. package/core/audits/accessibility/input-image-alt.js +3 -3
  78. package/core/audits/accessibility/label-content-name-mismatch.js +3 -3
  79. package/core/audits/accessibility/label.js +3 -3
  80. package/core/audits/accessibility/landmark-one-main.js +3 -3
  81. package/core/audits/accessibility/link-in-text-block.js +3 -3
  82. package/core/audits/accessibility/link-name.js +3 -3
  83. package/core/audits/accessibility/list.js +3 -3
  84. package/core/audits/accessibility/listitem.js +3 -3
  85. package/core/audits/accessibility/manual/custom-controls-labels.js +3 -3
  86. package/core/audits/accessibility/manual/custom-controls-roles.js +3 -3
  87. package/core/audits/accessibility/manual/focus-traps.js +3 -3
  88. package/core/audits/accessibility/manual/focusable-controls.js +3 -3
  89. package/core/audits/accessibility/manual/interactive-element-affordance.js +3 -3
  90. package/core/audits/accessibility/manual/logical-tab-order.js +3 -3
  91. package/core/audits/accessibility/manual/managed-focus.js +3 -3
  92. package/core/audits/accessibility/manual/offscreen-content-hidden.js +3 -3
  93. package/core/audits/accessibility/manual/use-landmarks.js +3 -3
  94. package/core/audits/accessibility/manual/visual-order-follows-dom.js +3 -3
  95. package/core/audits/accessibility/meta-refresh.js +3 -3
  96. package/core/audits/accessibility/meta-viewport.js +3 -3
  97. package/core/audits/accessibility/object-alt.js +3 -3
  98. package/core/audits/accessibility/select-name.js +3 -3
  99. package/core/audits/accessibility/skip-link.js +3 -3
  100. package/core/audits/accessibility/tabindex.js +3 -3
  101. package/core/audits/accessibility/table-duplicate-name.js +3 -3
  102. package/core/audits/accessibility/table-fake-caption.js +3 -3
  103. package/core/audits/accessibility/target-size.js +3 -3
  104. package/core/audits/accessibility/td-has-header.js +3 -3
  105. package/core/audits/accessibility/td-headers-attr.js +3 -3
  106. package/core/audits/accessibility/th-has-data-cells.js +3 -3
  107. package/core/audits/accessibility/valid-lang.js +3 -3
  108. package/core/audits/accessibility/video-caption.js +3 -3
  109. package/core/audits/audit.js +24 -14
  110. package/core/audits/autocomplete.js +3 -3
  111. package/core/audits/bf-cache.js +4 -3
  112. package/core/audits/bootup-time.js +7 -4
  113. package/core/audits/byte-efficiency/byte-efficiency-audit.js +4 -4
  114. package/core/audits/byte-efficiency/duplicated-javascript.js +4 -4
  115. package/core/audits/byte-efficiency/efficient-animated-content.js +4 -4
  116. package/core/audits/byte-efficiency/legacy-javascript.js +4 -4
  117. package/core/audits/byte-efficiency/modern-image-formats.js +4 -4
  118. package/core/audits/byte-efficiency/offscreen-images.js +4 -4
  119. package/core/audits/byte-efficiency/render-blocking-resources.js +5 -6
  120. package/core/audits/byte-efficiency/total-byte-weight.js +6 -4
  121. package/core/audits/byte-efficiency/unminified-css.js +4 -4
  122. package/core/audits/byte-efficiency/unminified-javascript.js +4 -4
  123. package/core/audits/byte-efficiency/unused-css-rules.js +4 -4
  124. package/core/audits/byte-efficiency/unused-javascript.js +4 -4
  125. package/core/audits/byte-efficiency/uses-long-cache-ttl.js +6 -11
  126. package/core/audits/byte-efficiency/uses-optimized-images.js +4 -4
  127. package/core/audits/byte-efficiency/uses-responsive-images-snapshot.js +4 -3
  128. package/core/audits/byte-efficiency/uses-responsive-images.js +4 -4
  129. package/core/audits/byte-efficiency/uses-text-compression.js +4 -4
  130. package/core/audits/content-width.js +3 -3
  131. package/core/audits/critical-request-chains.js +3 -3
  132. package/core/audits/csp-xss.js +4 -4
  133. package/core/audits/deprecations.js +3 -3
  134. package/core/audits/diagnostics.js +3 -3
  135. package/core/audits/dobetterweb/charset.js +3 -3
  136. package/core/audits/dobetterweb/doctype.js +3 -3
  137. package/core/audits/dobetterweb/dom-size.js +6 -4
  138. package/core/audits/dobetterweb/geolocation-on-start.js +3 -3
  139. package/core/audits/dobetterweb/inspector-issues.js +3 -3
  140. package/core/audits/dobetterweb/js-libraries.js +3 -3
  141. package/core/audits/dobetterweb/no-document-write.js +4 -3
  142. package/core/audits/dobetterweb/notification-on-start.js +3 -3
  143. package/core/audits/dobetterweb/paste-preventing-inputs.js +3 -3
  144. package/core/audits/dobetterweb/uses-http2.js +5 -6
  145. package/core/audits/dobetterweb/uses-passive-event-listeners.js +4 -3
  146. package/core/audits/errors-in-console.js +3 -3
  147. package/core/audits/final-screenshot.js +3 -3
  148. package/core/audits/font-display.js +4 -3
  149. package/core/audits/image-aspect-ratio.js +3 -3
  150. package/core/audits/image-size-responsive.js +3 -3
  151. package/core/audits/installable-manifest.js +5 -5
  152. package/core/audits/is-on-https.js +3 -3
  153. package/core/audits/largest-contentful-paint-element.js +6 -5
  154. package/core/audits/layout-shift-elements.js +10 -7
  155. package/core/audits/lcp-lazy-loaded.js +4 -3
  156. package/core/audits/long-tasks.js +11 -4
  157. package/core/audits/main-thread-tasks.js +3 -3
  158. package/core/audits/mainthread-work-breakdown.js +26 -5
  159. package/core/audits/manual/manual-audit.js +3 -3
  160. package/core/audits/manual/pwa-cross-browser.js +3 -3
  161. package/core/audits/manual/pwa-each-page-has-url.js +3 -3
  162. package/core/audits/manual/pwa-page-transitions.js +3 -3
  163. package/core/audits/maskable-icon.js +3 -3
  164. package/core/audits/metrics/cumulative-layout-shift.js +7 -4
  165. package/core/audits/metrics/first-contentful-paint.js +4 -3
  166. package/core/audits/metrics/first-meaningful-paint.js +3 -3
  167. package/core/audits/metrics/interaction-to-next-paint.js +3 -3
  168. package/core/audits/metrics/interactive.js +3 -3
  169. package/core/audits/metrics/largest-contentful-paint.js +4 -3
  170. package/core/audits/metrics/max-potential-fid.js +3 -3
  171. package/core/audits/metrics/speed-index.js +4 -3
  172. package/core/audits/metrics/total-blocking-time.js +4 -3
  173. package/core/audits/metrics.js +3 -3
  174. package/core/audits/multi-check-audit.js +3 -3
  175. package/core/audits/network-requests.js +3 -3
  176. package/core/audits/network-rtt.js +3 -3
  177. package/core/audits/network-server-latency.js +3 -3
  178. package/core/audits/no-unload-listeners.js +3 -3
  179. package/core/audits/non-composited-animations.js +3 -3
  180. package/core/audits/oopif-iframe-test-audit.js +3 -3
  181. package/core/audits/performance-budget.js +3 -3
  182. package/core/audits/predictive-perf.js +3 -3
  183. package/core/audits/preload-fonts.js +3 -3
  184. package/core/audits/prioritize-lcp-image.js +5 -6
  185. package/core/audits/redirects.js +5 -6
  186. package/core/audits/screenshot-thumbnails.js +3 -3
  187. package/core/audits/script-elements-test-audit.js +3 -3
  188. package/core/audits/script-treemap-data.js +3 -3
  189. package/core/audits/seo/canonical.js +3 -3
  190. package/core/audits/seo/crawlable-anchors.js +3 -3
  191. package/core/audits/seo/font-size.js +3 -3
  192. package/core/audits/seo/hreflang.js +3 -3
  193. package/core/audits/seo/http-status-code.js +3 -3
  194. package/core/audits/seo/is-crawlable.js +3 -3
  195. package/core/audits/seo/link-text.js +3 -3
  196. package/core/audits/seo/manual/structured-data.js +3 -3
  197. package/core/audits/seo/meta-description.js +3 -3
  198. package/core/audits/seo/plugins.js +3 -3
  199. package/core/audits/seo/robots-txt.js +3 -3
  200. package/core/audits/seo/tap-targets.js +3 -3
  201. package/core/audits/server-response-time.js +5 -3
  202. package/core/audits/splash-screen.js +3 -3
  203. package/core/audits/themed-omnibox.js +3 -3
  204. package/core/audits/third-party-facades.js +4 -3
  205. package/core/audits/third-party-summary.js +8 -4
  206. package/core/audits/timing-budget.js +3 -3
  207. package/core/audits/unsized-images.js +4 -4
  208. package/core/audits/user-timings.js +3 -3
  209. package/core/audits/uses-rel-preconnect.js +5 -6
  210. package/core/audits/uses-rel-preload.js +5 -6
  211. package/core/audits/valid-source-maps.js +2 -3
  212. package/core/audits/viewport.js +4 -3
  213. package/core/audits/violation-audit.js +3 -3
  214. package/core/audits/work-during-interaction.js +9 -5
  215. package/core/computed/computed-artifact.js +3 -3
  216. package/core/computed/critical-request-chains.js +3 -3
  217. package/core/computed/document-urls.js +3 -3
  218. package/core/computed/entity-classification.js +3 -3
  219. package/core/computed/image-records.js +3 -3
  220. package/core/computed/js-bundles.js +3 -3
  221. package/core/computed/lcp-image-record.js +3 -3
  222. package/core/computed/load-simulator.js +3 -3
  223. package/core/computed/main-resource.js +3 -3
  224. package/core/computed/main-thread-tasks.js +3 -3
  225. package/core/computed/manifest-values.js +3 -3
  226. package/core/computed/metrics/cumulative-layout-shift.js +3 -3
  227. package/core/computed/metrics/first-contentful-paint-all-frames.js +3 -3
  228. package/core/computed/metrics/first-contentful-paint.js +3 -3
  229. package/core/computed/metrics/first-meaningful-paint.js +3 -3
  230. package/core/computed/metrics/interactive.js +3 -3
  231. package/core/computed/metrics/lantern-first-contentful-paint.js +3 -3
  232. package/core/computed/metrics/lantern-first-meaningful-paint.js +3 -3
  233. package/core/computed/metrics/lantern-interactive.js +3 -3
  234. package/core/computed/metrics/lantern-largest-contentful-paint.js +3 -3
  235. package/core/computed/metrics/lantern-max-potential-fid.js +3 -3
  236. package/core/computed/metrics/lantern-metric.js +3 -3
  237. package/core/computed/metrics/lantern-speed-index.js +3 -3
  238. package/core/computed/metrics/lantern-total-blocking-time.js +3 -3
  239. package/core/computed/metrics/largest-contentful-paint-all-frames.js +3 -3
  240. package/core/computed/metrics/largest-contentful-paint.js +3 -3
  241. package/core/computed/metrics/lcp-breakdown.js +3 -3
  242. package/core/computed/metrics/max-potential-fid.js +3 -3
  243. package/core/computed/metrics/metric.js +3 -3
  244. package/core/computed/metrics/navigation-metric.js +3 -3
  245. package/core/computed/metrics/responsiveness.js +3 -3
  246. package/core/computed/metrics/speed-index.js +3 -3
  247. package/core/computed/metrics/tbt-utils.d.ts +3 -3
  248. package/core/computed/metrics/tbt-utils.js +3 -3
  249. package/core/computed/metrics/time-to-first-byte.js +3 -3
  250. package/core/computed/metrics/timing-summary.js +3 -3
  251. package/core/computed/metrics/total-blocking-time.js +3 -3
  252. package/core/computed/module-duplication.js +3 -3
  253. package/core/computed/network-analysis.js +3 -3
  254. package/core/computed/network-records.js +3 -3
  255. package/core/computed/page-dependency-graph.js +4 -3
  256. package/core/computed/processed-navigation.js +3 -3
  257. package/core/computed/processed-trace.js +3 -3
  258. package/core/computed/resource-summary.js +3 -3
  259. package/core/computed/screenshots.js +3 -3
  260. package/core/computed/speedline.js +3 -3
  261. package/core/computed/tbt-impact-tasks.js +3 -3
  262. package/core/computed/unused-css.js +3 -3
  263. package/core/computed/unused-javascript-summary.js +2 -3
  264. package/core/computed/user-timings.js +3 -3
  265. package/core/computed/viewport-meta.js +3 -3
  266. package/core/config/budget.js +3 -3
  267. package/core/config/config-helpers.js +3 -3
  268. package/core/config/config-plugin.js +3 -3
  269. package/core/config/config.js +3 -3
  270. package/core/config/constants.d.ts +3 -3
  271. package/core/config/constants.js +3 -3
  272. package/core/config/default-config.js +3 -3
  273. package/core/config/desktop-config.js +3 -3
  274. package/core/config/experimental-config.d.ts +3 -3
  275. package/core/config/experimental-config.js +3 -3
  276. package/core/config/filters.js +3 -3
  277. package/core/config/full-config.d.ts +3 -3
  278. package/core/config/full-config.js +3 -3
  279. package/core/config/lr-desktop-config.js +3 -3
  280. package/core/config/lr-mobile-config.d.ts +3 -3
  281. package/core/config/lr-mobile-config.js +3 -3
  282. package/core/config/metrics-to-audits.d.ts +3 -3
  283. package/core/config/metrics-to-audits.js +3 -3
  284. package/core/config/perf-config.d.ts +3 -3
  285. package/core/config/perf-config.js +3 -3
  286. package/core/config/validation.js +3 -3
  287. package/core/gather/base-artifacts.js +3 -3
  288. package/core/gather/base-gatherer.js +3 -3
  289. package/core/gather/driver/dom.js +3 -3
  290. package/core/gather/driver/environment.js +3 -3
  291. package/core/gather/driver/execution-context.js +3 -3
  292. package/core/gather/driver/navigation.js +3 -3
  293. package/core/gather/driver/network-monitor.js +3 -3
  294. package/core/gather/driver/network.js +3 -3
  295. package/core/gather/driver/prepare.js +3 -3
  296. package/core/gather/driver/service-workers.d.ts +3 -3
  297. package/core/gather/driver/service-workers.js +3 -3
  298. package/core/gather/driver/storage.js +3 -3
  299. package/core/gather/driver/target-manager.d.ts +5 -0
  300. package/core/gather/driver/target-manager.js +21 -11
  301. package/core/gather/driver/wait-for-condition.js +3 -3
  302. package/core/gather/driver.js +3 -3
  303. package/core/gather/fetcher.js +2 -3
  304. package/core/gather/gatherers/accessibility.js +3 -3
  305. package/core/gather/gatherers/anchor-elements.js +3 -3
  306. package/core/gather/gatherers/bf-cache-failures.js +3 -3
  307. package/core/gather/gatherers/cache-contents.js +3 -3
  308. package/core/gather/gatherers/console-messages.js +3 -3
  309. package/core/gather/gatherers/css-usage.js +3 -3
  310. package/core/gather/gatherers/devtools-log-compat.js +3 -3
  311. package/core/gather/gatherers/devtools-log.js +3 -3
  312. package/core/gather/gatherers/dobetterweb/doctype.js +3 -3
  313. package/core/gather/gatherers/dobetterweb/domstats.js +3 -3
  314. package/core/gather/gatherers/dobetterweb/optimized-images.js +5 -5
  315. package/core/gather/gatherers/dobetterweb/response-compression.js +4 -4
  316. package/core/gather/gatherers/dobetterweb/tags-blocking-first-paint.js +8 -3
  317. package/core/gather/gatherers/full-page-screenshot.js +2 -3
  318. package/core/gather/gatherers/global-listeners.js +3 -3
  319. package/core/gather/gatherers/iframe-elements.js +3 -3
  320. package/core/gather/gatherers/image-elements.js +3 -3
  321. package/core/gather/gatherers/inputs.js +3 -3
  322. package/core/gather/gatherers/inspector-issues.js +4 -3
  323. package/core/gather/gatherers/installability-errors.js +3 -3
  324. package/core/gather/gatherers/js-usage.js +3 -3
  325. package/core/gather/gatherers/link-elements.js +3 -3
  326. package/core/gather/gatherers/main-document-content.js +3 -3
  327. package/core/gather/gatherers/meta-elements.js +3 -3
  328. package/core/gather/gatherers/network-user-agent.js +3 -3
  329. package/core/gather/gatherers/script-elements.js +4 -4
  330. package/core/gather/gatherers/scripts.js +3 -3
  331. package/core/gather/gatherers/seo/embedded-content.js +3 -3
  332. package/core/gather/gatherers/seo/font-size.js +3 -3
  333. package/core/gather/gatherers/seo/robots-txt.js +3 -3
  334. package/core/gather/gatherers/seo/tap-targets.js +3 -3
  335. package/core/gather/gatherers/service-worker.js +3 -3
  336. package/core/gather/gatherers/source-maps.js +3 -3
  337. package/core/gather/gatherers/stacks.js +3 -3
  338. package/core/gather/gatherers/trace-compat.js +3 -3
  339. package/core/gather/gatherers/trace-elements.js +3 -3
  340. package/core/gather/gatherers/trace.js +3 -3
  341. package/core/gather/gatherers/viewport-dimensions.js +3 -3
  342. package/core/gather/gatherers/web-app-manifest.js +3 -3
  343. package/core/gather/navigation-runner.js +3 -3
  344. package/core/gather/runner-helpers.js +3 -3
  345. package/core/gather/session.js +5 -3
  346. package/core/gather/snapshot-runner.js +3 -3
  347. package/core/gather/timespan-runner.js +3 -3
  348. package/core/index.cjs +3 -3
  349. package/core/index.js +3 -3
  350. package/core/lib/arbitrary-equality-map.js +3 -3
  351. package/core/lib/asset-saver.d.ts +4 -4
  352. package/core/lib/asset-saver.js +17 -13
  353. package/core/lib/axe.js +3 -3
  354. package/core/lib/cdt/Common.js +3 -3
  355. package/core/lib/cdt/Platform.d.ts +3 -3
  356. package/core/lib/cdt/Platform.js +3 -3
  357. package/core/lib/cdt/SDK.js +3 -3
  358. package/core/lib/csp-evaluator.js +16 -16
  359. package/core/lib/dependency-graph/base-node.d.ts +3 -3
  360. package/core/lib/dependency-graph/base-node.js +3 -3
  361. package/core/lib/dependency-graph/cpu-node.js +3 -3
  362. package/core/lib/dependency-graph/network-node.js +3 -3
  363. package/core/lib/dependency-graph/simulator/connection-pool.js +3 -3
  364. package/core/lib/dependency-graph/simulator/dns-cache.js +3 -3
  365. package/core/lib/dependency-graph/simulator/network-analyzer.js +3 -3
  366. package/core/lib/dependency-graph/simulator/simulator-timing-map.js +3 -3
  367. package/core/lib/dependency-graph/simulator/simulator.js +3 -3
  368. package/core/lib/dependency-graph/simulator/tcp-connection.js +3 -3
  369. package/core/lib/deprecation-description.js +3 -3
  370. package/core/lib/emulation.js +3 -3
  371. package/core/lib/i18n/i18n.js +3 -3
  372. package/core/lib/icons.d.ts +3 -3
  373. package/core/lib/icons.js +3 -3
  374. package/core/lib/lantern-trace-saver.d.ts +3 -3
  375. package/core/lib/lantern-trace-saver.js +3 -3
  376. package/core/lib/lh-env.js +3 -3
  377. package/core/lib/lh-error.js +3 -3
  378. package/core/lib/lh-trace-processor.js +3 -3
  379. package/core/lib/lighthouse-compatibility.js +3 -3
  380. package/core/lib/manifest-parser.js +3 -3
  381. package/core/lib/median-run.js +3 -3
  382. package/core/lib/minification-estimator.js +3 -3
  383. package/core/lib/minify-devtoolslog.js +3 -3
  384. package/core/lib/navigation-error.js +3 -3
  385. package/core/lib/network-recorder.js +3 -3
  386. package/core/lib/network-request.js +3 -3
  387. package/core/lib/page-functions.js +3 -3
  388. package/core/lib/proto-preprocessor.js +3 -3
  389. package/core/lib/rect-helpers.d.ts +3 -3
  390. package/core/lib/rect-helpers.js +3 -3
  391. package/core/lib/script-helpers.d.ts +3 -3
  392. package/core/lib/script-helpers.js +3 -3
  393. package/core/lib/sentry.d.ts +2 -1
  394. package/core/lib/sentry.js +24 -18
  395. package/core/lib/stack-packs.js +3 -3
  396. package/core/lib/tappable-rects.js +3 -3
  397. package/core/lib/third-party-web.js +3 -3
  398. package/core/lib/timing-trace-saver.d.ts +3 -3
  399. package/core/lib/timing-trace-saver.js +3 -3
  400. package/core/lib/tracehouse/cpu-profile-model.js +3 -3
  401. package/core/lib/tracehouse/main-thread-tasks.js +3 -3
  402. package/core/lib/tracehouse/task-groups.d.ts +3 -3
  403. package/core/lib/tracehouse/task-groups.js +3 -3
  404. package/core/lib/tracehouse/task-summary.js +3 -3
  405. package/core/lib/tracehouse/trace-processor.js +3 -3
  406. package/core/lib/traces/metric-trace-events.js +3 -3
  407. package/core/lib/url-utils.js +3 -3
  408. package/core/runner.js +3 -3
  409. package/core/scoring.js +3 -3
  410. package/core/scripts/download-chrome.sh +2 -3
  411. package/core/user-flow.js +3 -3
  412. package/dist/report/bundle.esm.js +260 -175
  413. package/dist/report/flow.js +265 -181
  414. package/dist/report/standalone.js +261 -176
  415. package/flow-report/api.d.ts +3 -3
  416. package/flow-report/api.ts +3 -3
  417. package/flow-report/assets/standalone-flow-template.html +2 -13
  418. package/flow-report/assets/styles.css +3 -3
  419. package/flow-report/clients/standalone.d.ts +3 -3
  420. package/flow-report/clients/standalone.ts +3 -3
  421. package/flow-report/src/app.d.ts +3 -3
  422. package/flow-report/src/app.tsx +3 -3
  423. package/flow-report/src/common.d.ts +3 -3
  424. package/flow-report/src/common.tsx +3 -3
  425. package/flow-report/src/header.d.ts +3 -3
  426. package/flow-report/src/header.tsx +3 -3
  427. package/flow-report/src/help-dialog.d.ts +3 -3
  428. package/flow-report/src/help-dialog.tsx +3 -3
  429. package/flow-report/src/i18n/i18n.d.ts +3 -3
  430. package/flow-report/src/i18n/i18n.tsx +3 -3
  431. package/flow-report/src/i18n/localized-strings.d.ts +3 -3
  432. package/flow-report/src/i18n/localized-strings.js +3 -3
  433. package/flow-report/src/i18n/ui-strings.js +3 -3
  434. package/flow-report/src/icons.d.ts +3 -3
  435. package/flow-report/src/icons.tsx +3 -3
  436. package/flow-report/src/sidebar/flow.d.ts +3 -3
  437. package/flow-report/src/sidebar/flow.tsx +3 -3
  438. package/flow-report/src/sidebar/sidebar.d.ts +3 -3
  439. package/flow-report/src/sidebar/sidebar.tsx +3 -3
  440. package/flow-report/src/summary/category.d.ts +3 -3
  441. package/flow-report/src/summary/category.tsx +3 -3
  442. package/flow-report/src/summary/summary.d.ts +3 -3
  443. package/flow-report/src/summary/summary.tsx +3 -3
  444. package/flow-report/src/topbar.d.ts +3 -3
  445. package/flow-report/src/topbar.tsx +3 -3
  446. package/flow-report/src/util.d.ts +3 -3
  447. package/flow-report/src/util.ts +3 -3
  448. package/flow-report/src/wrappers/category-score.d.ts +3 -3
  449. package/flow-report/src/wrappers/category-score.tsx +3 -3
  450. package/flow-report/src/wrappers/markdown.d.ts +3 -3
  451. package/flow-report/src/wrappers/markdown.tsx +3 -3
  452. package/flow-report/src/wrappers/report.d.ts +3 -3
  453. package/flow-report/src/wrappers/report.tsx +3 -3
  454. package/flow-report/src/wrappers/styles.d.ts +3 -3
  455. package/flow-report/src/wrappers/styles.tsx +3 -3
  456. package/flow-report/types/flow-report.d.ts +3 -3
  457. package/package.json +11 -11
  458. package/readme.md +1 -1
  459. package/report/assets/standalone-template.html +2 -13
  460. package/report/assets/styles.css +231 -93
  461. package/report/assets/templates.html +24 -52
  462. package/report/clients/bundle.js +3 -3
  463. package/report/clients/standalone.js +3 -3
  464. package/report/generator/file-namer.js +3 -3
  465. package/report/generator/flow-report-assets.js +3 -3
  466. package/report/generator/report-assets.js +3 -3
  467. package/report/generator/report-generator.js +3 -3
  468. package/report/renderer/api.js +3 -3
  469. package/report/renderer/category-renderer.js +2 -13
  470. package/report/renderer/components.d.ts +2 -2
  471. package/report/renderer/components.js +35 -52
  472. package/report/renderer/crc-details-renderer.js +2 -13
  473. package/report/renderer/details-renderer.js +2 -13
  474. package/report/renderer/dom.d.ts +24 -4
  475. package/report/renderer/dom.js +32 -16
  476. package/report/renderer/drop-down-menu.d.ts +3 -3
  477. package/report/renderer/drop-down-menu.js +3 -3
  478. package/report/renderer/element-screenshot-renderer.js +3 -3
  479. package/report/renderer/explodey-gauge.d.ts +11 -0
  480. package/report/renderer/explodey-gauge.js +357 -0
  481. package/report/renderer/features-util.d.ts +3 -3
  482. package/report/renderer/features-util.js +3 -3
  483. package/report/renderer/i18n-formatter.js +3 -3
  484. package/report/renderer/logger.d.ts +2 -13
  485. package/report/renderer/logger.js +2 -13
  486. package/report/renderer/open-tab.js +2 -13
  487. package/report/renderer/performance-category-renderer.d.ts +16 -18
  488. package/report/renderer/performance-category-renderer.js +99 -115
  489. package/report/renderer/pwa-category-renderer.js +2 -13
  490. package/report/renderer/report-globals.js +3 -3
  491. package/report/renderer/report-renderer.js +2 -13
  492. package/report/renderer/report-ui-features.js +2 -13
  493. package/report/renderer/report-utils.js +3 -3
  494. package/report/renderer/snippet-renderer.js +3 -3
  495. package/report/renderer/swap-locale-feature.d.ts +3 -3
  496. package/report/renderer/swap-locale-feature.js +3 -3
  497. package/report/renderer/text-encoding.js +3 -3
  498. package/report/renderer/topbar-features.js +3 -3
  499. package/report/types/augment-dom.d.ts +3 -3
  500. package/report/types/buffer.d.ts +3 -3
  501. package/report/types/html-renderer.d.ts +3 -3
  502. package/report/types/report-renderer.d.ts +3 -3
  503. package/report/types/report-result.d.ts +3 -3
  504. package/shared/esm-utils.js +3 -3
  505. package/shared/localization/format.d.ts +21 -16
  506. package/shared/localization/format.js +76 -39
  507. package/shared/localization/i18n-module.js +2 -3
  508. package/shared/localization/locales/en-US.json +14 -14
  509. package/shared/localization/locales/en-XL.json +14 -14
  510. package/shared/localization/locales.js +3 -3
  511. package/shared/localization/swap-flow-locale.js +3 -3
  512. package/shared/localization/swap-locale.js +3 -3
  513. package/shared/root.js +3 -3
  514. package/{core/lib → shared}/statistics.js +3 -3
  515. package/shared/type-verifiers.d.ts +4 -4
  516. package/shared/type-verifiers.js +3 -3
  517. package/shared/types/shared.d.ts +3 -3
  518. package/shared/util.d.ts +22 -0
  519. package/shared/util.js +33 -13
  520. package/third-party/chromium-synchronization/inspector-issueAdded-types-test.js +4 -3
  521. package/third-party/chromium-synchronization/installability-errors-test.js +3 -3
  522. package/third-party/download-content-shell/README.md +1 -1
  523. package/types/artifacts.d.ts +4 -3
  524. package/types/audit.d.ts +8 -4
  525. package/types/config.d.ts +3 -3
  526. package/types/externs.d.ts +3 -3
  527. package/types/gatherer.d.ts +3 -3
  528. package/types/internal/cssstyle.d.ts +3 -3
  529. package/types/internal/enquirer.d.ts +3 -3
  530. package/types/internal/global.d.ts +3 -3
  531. package/types/internal/http-link-header.d.ts +3 -3
  532. package/types/internal/lookup-closest-locale.d.ts +3 -3
  533. package/types/internal/metaviewport-parser.d.ts +3 -3
  534. package/types/internal/node.d.ts +3 -3
  535. package/types/internal/parse-cache-control.d.ts +3 -3
  536. package/types/internal/pretty-json-stringify.d.ts +3 -3
  537. package/types/internal/query-selector.d.ts +3 -3
  538. package/types/internal/rollup-plugin-postprocess.d.ts +3 -3
  539. package/types/internal/rxjs.d.ts +6 -3
  540. package/types/internal/smokehouse.d.ts +3 -3
  541. package/types/internal/test.d.ts +3 -3
  542. package/types/lh.d.ts +3 -3
  543. package/types/lh.js +3 -3
  544. package/types/lhr/audit-details.d.ts +3 -3
  545. package/types/lhr/audit-result.d.ts +19 -3
  546. package/types/lhr/budget.d.ts +3 -3
  547. package/types/lhr/flow-result.d.ts +3 -3
  548. package/types/lhr/i18n.d.ts +3 -3
  549. package/types/lhr/lhr.d.ts +3 -3
  550. package/types/lhr/settings.d.ts +3 -3
  551. package/types/lhr/treemap.d.ts +3 -3
  552. package/types/protocol.d.ts +3 -3
  553. package/types/puppeteer.d.ts +3 -3
  554. package/types/user-flow.d.ts +3 -3
  555. package/types/utility-types.d.ts +3 -3
  556. package/AUTHORS +0 -9
  557. /package/{core/lib → shared}/statistics.d.ts +0 -0
@@ -1,4 +1,4 @@
1
- var D="\u2026",de="\xA0";var pe={PASS:{label:"pass",minScore:.9},AVERAGE:{label:"average",minScore:.5},FAIL:{label:"fail"},ERROR:{label:"error"}},he=["com","co","gov","edu","ac","org","go","gob","or","net","in","ne","nic","gouv","web","spb","blog","jus","kiev","mil","wi","qc","ca","bel","on"],k=class o{static get RATINGS(){return pe}static get PASS_THRESHOLD(){return .9}static get MS_DISPLAY_VALUE(){return`%10d${de}ms`}static getFinalDisplayedUrl(e){if(e.finalDisplayedUrl)return e.finalDisplayedUrl;if(e.finalUrl)return e.finalUrl;throw new Error("Could not determine final displayed URL")}static getMainDocumentUrl(e){return e.mainDocumentUrl||e.finalUrl}static getFullPageScreenshot(e){return e.fullPageScreenshot?e.fullPageScreenshot:e.audits["full-page-screenshot"]?.details}static splitMarkdownCodeSpans(e){let t=[],n=e.split(/`(.*?)`/g);for(let r=0;r<n.length;r++){let i=n[r];if(!i)continue;let a=r%2!==0;t.push({isCode:a,text:i})}return t}static splitMarkdownLink(e){let t=[],n=e.split(/\[([^\]]+?)\]\((https?:\/\/.*?)\)/g);for(;n.length;){let[r,i,a]=n.splice(0,3);r&&t.push({isLink:!1,text:r}),i&&a&&t.push({isLink:!0,text:i,linkHref:a})}return t}static truncate(e,t,n="\u2026"){if(e.length<=t)return e;let i=new Intl.Segmenter(void 0,{granularity:"grapheme"}).segment(e)[Symbol.iterator](),a=0;for(let l=0;l<=t-n.length;l++){let s=i.next();if(s.done)return e;a=s.value.index}for(let l=0;l<n.length;l++)if(i.next().done)return e;return e.slice(0,a)+n}static getURLDisplayName(e,t){t=t||{numPathParts:void 0,preserveQuery:void 0,preserveHost:void 0};let n=t.numPathParts!==void 0?t.numPathParts:2,r=t.preserveQuery!==void 0?t.preserveQuery:!0,i=t.preserveHost||!1,a;if(e.protocol==="about:"||e.protocol==="data:")a=e.href;else{a=e.pathname;let s=a.split("/").filter(c=>c.length);n&&s.length>n&&(a=D+s.slice(-1*n).join("/")),i&&(a=`${e.host}/${a.replace(/^\//,"")}`),r&&(a=`${a}${e.search}`)}let l=64;if(e.protocol!=="data:"&&(a=a.slice(0,200),a=a.replace(/([a-f0-9]{7})[a-f0-9]{13}[a-f0-9]*/g,`$1${D}`),a=a.replace(/([a-zA-Z0-9-_]{9})(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])[a-zA-Z0-9-_]{10,}/g,`$1${D}`),a=a.replace(/(\d{3})\d{6,}/g,`$1${D}`),a=a.replace(/\u2026+/g,D),a.length>l&&a.includes("?")&&(a=a.replace(/\?([^=]*)(=)?.*/,`?$1$2${D}`),a.length>l&&(a=a.replace(/\?.*/,`?${D}`)))),a.length>l){let s=a.lastIndexOf(".");s>=0?a=a.slice(0,l-1-(a.length-s))+`${D}${a.slice(s)}`:a=a.slice(0,l-1)+D}return a}static getChromeExtensionOrigin(e){let t=new URL(e);return t.protocol+"//"+t.host}static parseURL(e){let t=new URL(e);return{file:o.getURLDisplayName(t),hostname:t.hostname,origin:t.protocol==="chrome-extension:"?o.getChromeExtensionOrigin(e):t.origin}}static createOrReturnURL(e){return e instanceof URL?e:new URL(e)}static getTld(e){let t=e.split(".").slice(-2);return he.includes(t[0])?`.${t.join(".")}`:`.${t[t.length-1]}`}static getRootDomain(e){let t=o.createOrReturnURL(e).hostname,r=o.getTld(t).split(".");return t.split(".").slice(-r.length).join(".")}static filterRelevantLines(e,t,n){if(t.length===0)return e.slice(0,n*2+1);let r=3,i=new Set;return t=t.sort((a,l)=>(a.lineNumber||0)-(l.lineNumber||0)),t.forEach(({lineNumber:a})=>{let l=a-n,s=a+n;for(;l<1;)l++,s++;i.has(l-r-1)&&(l-=r);for(let c=l;c<=s;c++){let d=c;i.add(d)}}),e.filter(a=>i.has(a.lineNumber))}};function ue(o){let e=o.createFragment(),t=o.createElement("style");t.append(`
1
+ var Pe=.8999999999999999,Re=.5,Ie=.49999999999999994;function He(r){let e=Math.sign(r);r=Math.abs(r);let t=.254829592,n=-.284496736,o=1.421413741,i=-1.453152027,a=1.061405429,s=1/(1+.3275911*r),c=s*(t+s*(n+s*(o+s*(i+s*a))));return e*(1-c*Math.exp(-r*r))}function ve({median:r,p10:e},t){if(r<=0)throw new Error("median must be greater than zero");if(e<=0)throw new Error("p10 must be greater than zero");if(e>=r)throw new Error("p10 must be less than the median");if(t<=0)return 1;let n=.9061938024368232,o=Math.max(Number.MIN_VALUE,t/r),i=Math.log(o),a=Math.max(Number.MIN_VALUE,e/r),l=-Math.log(a),s=i*n/l,c=(1-He(s))/2,d;return t<=e?d=Math.max(.9,Math.min(1,c)):t<=r?d=Math.max(Re,Math.min(Pe,c)):d=Math.max(0,Math.min(Ie,c)),d}var $="\u2026",$e="\xA0",be=.9,Ge={PASS:{label:"pass",minScore:be},AVERAGE:{label:"average",minScore:.5},FAIL:{label:"fail"},ERROR:{label:"error"}},Ve=["com","co","gov","edu","ac","org","go","gob","or","net","in","ne","nic","gouv","web","spb","blog","jus","kiev","mil","wi","qc","ca","bel","on"],k=class r{static get RATINGS(){return Ge}static get PASS_THRESHOLD(){return be}static get MS_DISPLAY_VALUE(){return`%10d${$e}ms`}static getFinalDisplayedUrl(e){if(e.finalDisplayedUrl)return e.finalDisplayedUrl;if(e.finalUrl)return e.finalUrl;throw new Error("Could not determine final displayed URL")}static getMainDocumentUrl(e){return e.mainDocumentUrl||e.finalUrl}static getFullPageScreenshot(e){return e.fullPageScreenshot?e.fullPageScreenshot:e.audits["full-page-screenshot"]?.details}static splitMarkdownCodeSpans(e){let t=[],n=e.split(/`(.*?)`/g);for(let o=0;o<n.length;o++){let i=n[o];if(!i)continue;let a=o%2!==0;t.push({isCode:a,text:i})}return t}static splitMarkdownLink(e){let t=[],n=e.split(/\[([^\]]+?)\]\((https?:\/\/.*?)\)/g);for(;n.length;){let[o,i,a]=n.splice(0,3);o&&t.push({isLink:!1,text:o}),i&&a&&t.push({isLink:!0,text:i,linkHref:a})}return t}static truncate(e,t,n="\u2026"){if(e.length<=t)return e;let i=new Intl.Segmenter(void 0,{granularity:"grapheme"}).segment(e)[Symbol.iterator](),a=0;for(let l=0;l<=t-n.length;l++){let s=i.next();if(s.done)return e;a=s.value.index}for(let l=0;l<n.length;l++)if(i.next().done)return e;return e.slice(0,a)+n}static getURLDisplayName(e,t){t=t||{numPathParts:void 0,preserveQuery:void 0,preserveHost:void 0};let n=t.numPathParts!==void 0?t.numPathParts:2,o=t.preserveQuery!==void 0?t.preserveQuery:!0,i=t.preserveHost||!1,a;if(e.protocol==="about:"||e.protocol==="data:")a=e.href;else{a=e.pathname;let s=a.split("/").filter(c=>c.length);n&&s.length>n&&(a=$+s.slice(-1*n).join("/")),i&&(a=`${e.host}/${a.replace(/^\//,"")}`),o&&(a=`${a}${e.search}`)}let l=64;if(e.protocol!=="data:"&&(a=a.slice(0,200),a=a.replace(/([a-f0-9]{7})[a-f0-9]{13}[a-f0-9]*/g,`$1${$}`),a=a.replace(/([a-zA-Z0-9-_]{9})(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])[a-zA-Z0-9-_]{10,}/g,`$1${$}`),a=a.replace(/(\d{3})\d{6,}/g,`$1${$}`),a=a.replace(/\u2026+/g,$),a.length>l&&a.includes("?")&&(a=a.replace(/\?([^=]*)(=)?.*/,`?$1$2${$}`),a.length>l&&(a=a.replace(/\?.*/,`?${$}`)))),a.length>l){let s=a.lastIndexOf(".");s>=0?a=a.slice(0,l-1-(a.length-s))+`${$}${a.slice(s)}`:a=a.slice(0,l-1)+$}return a}static getChromeExtensionOrigin(e){let t=new URL(e);return t.protocol+"//"+t.host}static parseURL(e){let t=new URL(e);return{file:r.getURLDisplayName(t),hostname:t.hostname,origin:t.protocol==="chrome-extension:"?r.getChromeExtensionOrigin(e):t.origin}}static createOrReturnURL(e){return e instanceof URL?e:new URL(e)}static getTld(e){let t=e.split(".").slice(-2);return Ve.includes(t[0])?`.${t.join(".")}`:`.${t[t.length-1]}`}static getRootDomain(e){let t=r.createOrReturnURL(e).hostname,o=r.getTld(t).split(".");return t.split(".").slice(-o.length).join(".")}static filterRelevantLines(e,t,n){if(t.length===0)return e.slice(0,n*2+1);let o=3,i=new Set;return t=t.sort((a,l)=>(a.lineNumber||0)-(l.lineNumber||0)),t.forEach(({lineNumber:a})=>{let l=a-n,s=a+n;for(;l<1;)l++,s++;i.has(l-o-1)&&(l-=o);for(let c=l;c<=s;c++){let d=c;i.add(d)}}),e.filter(a=>i.has(a.lineNumber))}static computeLogNormalScore(e,t){let n=ve(e,t);return n>.9&&(n+=.05*(n-.9)),Math.floor(n*100)/100}};function Oe(r){let e=r.createFragment(),t=r.createElement("style");t.append(`
2
2
  .lh-3p-filter {
3
3
  color: var(--color-gray-600);
4
4
  float: right;
@@ -11,7 +11,7 @@ var D="\u2026",de="\xA0";var pe={PASS:{label:"pass",minScore:.9},AVERAGE:{label:
11
11
  .lh-3p-filter-input:disabled + .lh-3p-ui-string {
12
12
  text-decoration: line-through;
13
13
  }
14
- `),e.append(t);let n=o.createElement("div","lh-3p-filter"),r=o.createElement("label","lh-3p-filter-label"),i=o.createElement("input","lh-3p-filter-input");i.setAttribute("type","checkbox"),i.setAttribute("checked","");let a=o.createElement("span","lh-3p-ui-string");a.append("Show 3rd party resources");let l=o.createElement("span","lh-3p-filter-count");return r.append(" ",i," ",a," (",l,") "),n.append(" ",r," "),e.append(n),e}function ge(o){let e=o.createFragment(),t=o.createElement("div","lh-audit"),n=o.createElement("details","lh-expandable-details"),r=o.createElement("summary"),i=o.createElement("div","lh-audit__header lh-expandable-details__summary"),a=o.createElement("span","lh-audit__score-icon"),l=o.createElement("span","lh-audit__title-and-text"),s=o.createElement("span","lh-audit__title"),c=o.createElement("span","lh-audit__display-text");l.append(" ",s," ",c," ");let d=o.createElement("div","lh-chevron-container");i.append(" ",a," ",l," ",d," "),r.append(" ",i," ");let p=o.createElement("div","lh-audit__description"),h=o.createElement("div","lh-audit__stackpacks");return n.append(" ",r," ",p," ",h," "),t.append(" ",n," "),e.append(t),e}function me(o){let e=o.createFragment(),t=o.createElement("div","lh-category-header"),n=o.createElement("div","lh-score__gauge");n.setAttribute("role","heading"),n.setAttribute("aria-level","2");let r=o.createElement("div","lh-category-header__description");return t.append(" ",n," ",r," "),e.append(t),e}function fe(o){let e=o.createFragment(),t=o.createElementNS("http://www.w3.org/2000/svg","svg","lh-chevron");t.setAttribute("viewBox","0 0 100 100");let n=o.createElementNS("http://www.w3.org/2000/svg","g","lh-chevron__lines"),r=o.createElementNS("http://www.w3.org/2000/svg","path","lh-chevron__line lh-chevron__line-left");r.setAttribute("d","M10 50h40");let i=o.createElementNS("http://www.w3.org/2000/svg","path","lh-chevron__line lh-chevron__line-right");return i.setAttribute("d","M90 50H50"),n.append(" ",r," ",i," "),t.append(" ",n," "),e.append(t),e}function be(o){let e=o.createFragment(),t=o.createElement("div","lh-audit-group"),n=o.createElement("details","lh-clump"),r=o.createElement("summary"),i=o.createElement("div","lh-audit-group__summary"),a=o.createElement("div","lh-audit-group__header"),l=o.createElement("span","lh-audit-group__title"),s=o.createElement("span","lh-audit-group__itemcount");a.append(" ",l," ",s," "," "," ");let c=o.createElement("div","lh-clump-toggle"),d=o.createElement("span","lh-clump-toggletext--show"),p=o.createElement("span","lh-clump-toggletext--hide");return c.append(" ",d," ",p," "),i.append(" ",a," ",c," "),r.append(" ",i," "),n.append(" ",r," "),t.append(" "," ",n," "),e.append(t),e}function ve(o){let e=o.createFragment(),t=o.createElement("div","lh-crc-container"),n=o.createElement("style");n.append(`
14
+ `),e.append(t);let n=r.createElement("div","lh-3p-filter"),o=r.createElement("label","lh-3p-filter-label"),i=r.createElement("input","lh-3p-filter-input");i.setAttribute("type","checkbox"),i.setAttribute("checked","");let a=r.createElement("span","lh-3p-ui-string");a.append("Show 3rd party resources");let l=r.createElement("span","lh-3p-filter-count");return o.append(" ",i," ",a," (",l,") "),n.append(" ",o," "),e.append(n),e}function Be(r){let e=r.createFragment(),t=r.createElement("div","lh-audit"),n=r.createElement("details","lh-expandable-details"),o=r.createElement("summary"),i=r.createElement("div","lh-audit__header lh-expandable-details__summary"),a=r.createElement("span","lh-audit__score-icon"),l=r.createElement("span","lh-audit__title-and-text"),s=r.createElement("span","lh-audit__title"),c=r.createElement("span","lh-audit__display-text");l.append(" ",s," ",c," ");let d=r.createElement("div","lh-chevron-container");i.append(" ",a," ",l," ",d," "),o.append(" ",i," ");let p=r.createElement("div","lh-audit__description"),h=r.createElement("div","lh-audit__stackpacks");return n.append(" ",o," ",p," ",h," "),t.append(" ",n," "),e.append(t),e}function je(r){let e=r.createFragment(),t=r.createElement("div","lh-category-header"),n=r.createElement("div","lh-score__gauge");n.setAttribute("role","heading"),n.setAttribute("aria-level","2");let o=r.createElement("div","lh-category-header__description");return t.append(" ",n," ",o," "),e.append(t),e}function qe(r){let e=r.createFragment(),t=r.createElementNS("http://www.w3.org/2000/svg","svg","lh-chevron");t.setAttribute("viewBox","0 0 100 100");let n=r.createElementNS("http://www.w3.org/2000/svg","g","lh-chevron__lines"),o=r.createElementNS("http://www.w3.org/2000/svg","path","lh-chevron__line lh-chevron__line-left");o.setAttribute("d","M10 50h40");let i=r.createElementNS("http://www.w3.org/2000/svg","path","lh-chevron__line lh-chevron__line-right");return i.setAttribute("d","M90 50H50"),n.append(" ",o," ",i," "),t.append(" ",n," "),e.append(t),e}function We(r){let e=r.createFragment(),t=r.createElement("div","lh-audit-group"),n=r.createElement("details","lh-clump"),o=r.createElement("summary"),i=r.createElement("div","lh-audit-group__summary"),a=r.createElement("div","lh-audit-group__header"),l=r.createElement("span","lh-audit-group__title"),s=r.createElement("span","lh-audit-group__itemcount");a.append(" ",l," ",s," "," "," ");let c=r.createElement("div","lh-clump-toggle"),d=r.createElement("span","lh-clump-toggletext--show"),p=r.createElement("span","lh-clump-toggletext--hide");return c.append(" ",d," ",p," "),i.append(" ",a," ",c," "),o.append(" ",i," "),n.append(" ",o," "),t.append(" "," ",n," "),e.append(t),e}function Ke(r){let e=r.createFragment(),t=r.createElement("div","lh-crc-container"),n=r.createElement("style");n.append(`
15
15
  .lh-crc .lh-tree-marker {
16
16
  width: 12px;
17
17
  height: 26px;
@@ -60,7 +60,7 @@ var D="\u2026",de="\xA0";var pe={PASS:{label:"pass",minScore:.9},AVERAGE:{label:
60
60
  .lh-crc__summary-value {
61
61
  margin-bottom: 10px;
62
62
  }
63
- `);let r=o.createElement("div"),i=o.createElement("div","lh-crc__summary-value"),a=o.createElement("span","lh-crc__longest_duration_label"),l=o.createElement("b","lh-crc__longest_duration");i.append(" ",a," ",l," "),r.append(" ",i," ");let s=o.createElement("div","lh-crc"),c=o.createElement("div","lh-crc-initial-nav");return s.append(" ",c," "," "),t.append(" ",n," ",r," ",s," "),e.append(t),e}function _e(o){let e=o.createFragment(),t=o.createElement("div","lh-crc-node"),n=o.createElement("span","lh-crc-node__tree-marker"),r=o.createElement("span","lh-crc-node__tree-value");return t.append(" ",n," ",r," "),e.append(t),e}function we(o){let e=o.createFragment(),t=o.createElement("div","lh-element-screenshot"),n=o.createElement("div","lh-element-screenshot__content"),r=o.createElement("div","lh-element-screenshot__image"),i=o.createElement("div","lh-element-screenshot__mask"),a=o.createElementNS("http://www.w3.org/2000/svg","svg");a.setAttribute("height","0"),a.setAttribute("width","0");let l=o.createElementNS("http://www.w3.org/2000/svg","defs"),s=o.createElementNS("http://www.w3.org/2000/svg","clipPath");s.setAttribute("clipPathUnits","objectBoundingBox"),l.append(" ",s," "," "),a.append(" ",l," "),i.append(" ",a," ");let c=o.createElement("div","lh-element-screenshot__element-marker");return r.append(" ",i," ",c," "),n.append(" ",r," "),t.append(" ",n," "),e.append(t),e}function ye(o){let e=o.createFragment(),t=o.createElement("style");t.append(`
63
+ `);let o=r.createElement("div"),i=r.createElement("div","lh-crc__summary-value"),a=r.createElement("span","lh-crc__longest_duration_label"),l=r.createElement("b","lh-crc__longest_duration");i.append(" ",a," ",l," "),o.append(" ",i," ");let s=r.createElement("div","lh-crc"),c=r.createElement("div","lh-crc-initial-nav");return s.append(" ",c," "," "),t.append(" ",n," ",o," ",s," "),e.append(t),e}function Je(r){let e=r.createFragment(),t=r.createElement("div","lh-crc-node"),n=r.createElement("span","lh-crc-node__tree-marker"),o=r.createElement("span","lh-crc-node__tree-value");return t.append(" ",n," ",o," "),e.append(t),e}function Ze(r){let e=r.createFragment(),t=r.createElement("div","lh-element-screenshot"),n=r.createElement("div","lh-element-screenshot__content"),o=r.createElement("div","lh-element-screenshot__image"),i=r.createElement("div","lh-element-screenshot__mask"),a=r.createElementNS("http://www.w3.org/2000/svg","svg");a.setAttribute("height","0"),a.setAttribute("width","0");let l=r.createElementNS("http://www.w3.org/2000/svg","defs"),s=r.createElementNS("http://www.w3.org/2000/svg","clipPath");s.setAttribute("clipPathUnits","objectBoundingBox"),l.append(" ",s," "," "),a.append(" ",l," "),i.append(" ",a," ");let c=r.createElement("div","lh-element-screenshot__element-marker");return o.append(" ",i," ",c," "),n.append(" ",o," "),t.append(" ",n," "),e.append(t),e}function Qe(r){let e=r.createFragment(),t=r.createElement("div","lh-exp-gauge-component"),n=r.createElement("div","lh-exp-gauge__wrapper");n.setAttribute("target","_blank");let o=r.createElement("div","lh-exp-gauge__svg-wrapper"),i=r.createElementNS("http://www.w3.org/2000/svg","svg","lh-exp-gauge"),a=r.createElementNS("http://www.w3.org/2000/svg","g","lh-exp-gauge__inner"),l=r.createElementNS("http://www.w3.org/2000/svg","circle","lh-exp-gauge__bg"),s=r.createElementNS("http://www.w3.org/2000/svg","circle","lh-exp-gauge__base lh-exp-gauge--faded"),c=r.createElementNS("http://www.w3.org/2000/svg","circle","lh-exp-gauge__arc"),d=r.createElementNS("http://www.w3.org/2000/svg","text","lh-exp-gauge__percentage");a.append(" ",l," ",s," ",c," ",d," ");let p=r.createElementNS("http://www.w3.org/2000/svg","g","lh-exp-gauge__outer"),h=r.createElementNS("http://www.w3.org/2000/svg","circle","lh-cover");p.append(" ",h," ");let g=r.createElementNS("http://www.w3.org/2000/svg","text","lh-exp-gauge__label");return g.setAttribute("text-anchor","middle"),g.setAttribute("x","0"),g.setAttribute("y","60"),i.append(" ",a," ",p," ",g," "),o.append(" ",i," "),n.append(" ",o," "),t.append(" ",n," "),e.append(t),e}function Xe(r){let e=r.createFragment(),t=r.createElement("style");t.append(`
64
64
  .lh-footer {
65
65
  padding: var(--footer-padding-vertical) calc(var(--default-padding) * 2);
66
66
  max-width: var(--report-content-max-width);
@@ -69,7 +69,7 @@ var D="\u2026",de="\xA0";var pe={PASS:{label:"pass",minScore:.9},AVERAGE:{label:
69
69
  .lh-footer .lh-generated {
70
70
  text-align: center;
71
71
  }
72
- `),e.append(t);let n=o.createElement("footer","lh-footer"),r=o.createElement("ul","lh-meta__items");r.append(" ");let i=o.createElement("div","lh-generated"),a=o.createElement("b");a.append("Lighthouse");let l=o.createElement("span","lh-footer__version"),s=o.createElement("a","lh-footer__version_issue");return s.setAttribute("href","https://github.com/GoogleChrome/Lighthouse/issues"),s.setAttribute("target","_blank"),s.setAttribute("rel","noopener"),s.append("File an issue"),i.append(" "," Generated by ",a," ",l," | ",s," "),n.append(" ",r," ",i," "),e.append(n),e}function xe(o){let e=o.createFragment(),t=o.createElement("a","lh-fraction__wrapper"),n=o.createElement("div","lh-fraction__content-wrapper"),r=o.createElement("div","lh-fraction__content"),i=o.createElement("div","lh-fraction__background");r.append(" ",i," "),n.append(" ",r," ");let a=o.createElement("div","lh-fraction__label");return t.append(" ",n," ",a," "),e.append(t),e}function Ee(o){let e=o.createFragment(),t=o.createElement("a","lh-gauge__wrapper"),n=o.createElement("div","lh-gauge__svg-wrapper"),r=o.createElementNS("http://www.w3.org/2000/svg","svg","lh-gauge");r.setAttribute("viewBox","0 0 120 120");let i=o.createElementNS("http://www.w3.org/2000/svg","circle","lh-gauge-base");i.setAttribute("r","56"),i.setAttribute("cx","60"),i.setAttribute("cy","60"),i.setAttribute("stroke-width","8");let a=o.createElementNS("http://www.w3.org/2000/svg","circle","lh-gauge-arc");a.setAttribute("r","56"),a.setAttribute("cx","60"),a.setAttribute("cy","60"),a.setAttribute("stroke-width","8"),r.append(" ",i," ",a," "),n.append(" ",r," ");let l=o.createElement("div","lh-gauge__percentage"),s=o.createElement("div","lh-gauge__label");return t.append(" "," ",n," ",l," "," ",s," "),e.append(t),e}function ke(o){let e=o.createFragment(),t=o.createElement("style");t.append(`
72
+ `),e.append(t);let n=r.createElement("footer","lh-footer"),o=r.createElement("ul","lh-meta__items");o.append(" ");let i=r.createElement("div","lh-generated"),a=r.createElement("b");a.append("Lighthouse");let l=r.createElement("span","lh-footer__version"),s=r.createElement("a","lh-footer__version_issue");return s.setAttribute("href","https://github.com/GoogleChrome/Lighthouse/issues"),s.setAttribute("target","_blank"),s.setAttribute("rel","noopener"),s.append("File an issue"),i.append(" "," Generated by ",a," ",l," | ",s," "),n.append(" ",o," ",i," "),e.append(n),e}function Ye(r){let e=r.createFragment(),t=r.createElement("a","lh-fraction__wrapper"),n=r.createElement("div","lh-fraction__content-wrapper"),o=r.createElement("div","lh-fraction__content"),i=r.createElement("div","lh-fraction__background");o.append(" ",i," "),n.append(" ",o," ");let a=r.createElement("div","lh-fraction__label");return t.append(" ",n," ",a," "),e.append(t),e}function et(r){let e=r.createFragment(),t=r.createElement("a","lh-gauge__wrapper"),n=r.createElement("div","lh-gauge__svg-wrapper"),o=r.createElementNS("http://www.w3.org/2000/svg","svg","lh-gauge");o.setAttribute("viewBox","0 0 120 120");let i=r.createElementNS("http://www.w3.org/2000/svg","circle","lh-gauge-base");i.setAttribute("r","56"),i.setAttribute("cx","60"),i.setAttribute("cy","60"),i.setAttribute("stroke-width","8");let a=r.createElementNS("http://www.w3.org/2000/svg","circle","lh-gauge-arc");a.setAttribute("r","56"),a.setAttribute("cx","60"),a.setAttribute("cy","60"),a.setAttribute("stroke-width","8"),o.append(" ",i," ",a," "),n.append(" ",o," ");let l=r.createElement("div","lh-gauge__percentage"),s=r.createElement("div","lh-gauge__label");return t.append(" "," ",n," ",l," "," ",s," "),e.append(t),e}function tt(r){let e=r.createFragment(),t=r.createElement("style");t.append(`
73
73
  .lh-gauge--pwa .lh-gauge--pwa__component {
74
74
  display: none;
75
75
  }
@@ -111,7 +111,7 @@ var D="\u2026",de="\xA0";var pe={PASS:{label:"pass",minScore:.9},AVERAGE:{label:
111
111
  .lh-gauge--pwa__wrapper.lh-badged--all .lh-gauge--pwa__check-circle {
112
112
  display: inline;
113
113
  }
114
- `),e.append(t);let n=o.createElement("a","lh-gauge__wrapper lh-gauge--pwa__wrapper"),r=o.createElementNS("http://www.w3.org/2000/svg","svg","lh-gauge lh-gauge--pwa");r.setAttribute("viewBox","0 0 60 60");let i=o.createElementNS("http://www.w3.org/2000/svg","defs"),a=o.createElementNS("http://www.w3.org/2000/svg","linearGradient");a.setAttribute("id","lh-gauge--pwa__check-circle__gradient"),a.setAttribute("x1","50%"),a.setAttribute("y1","0%"),a.setAttribute("x2","50%"),a.setAttribute("y2","100%");let l=o.createElementNS("http://www.w3.org/2000/svg","stop");l.setAttribute("stop-color","#00C852"),l.setAttribute("offset","0%");let s=o.createElementNS("http://www.w3.org/2000/svg","stop");s.setAttribute("stop-color","#009688"),s.setAttribute("offset","100%"),a.append(" ",l," ",s," ");let c=o.createElementNS("http://www.w3.org/2000/svg","linearGradient");c.setAttribute("id","lh-gauge--pwa__installable__shadow-gradient"),c.setAttribute("x1","76.056%"),c.setAttribute("x2","24.111%"),c.setAttribute("y1","82.995%"),c.setAttribute("y2","24.735%");let d=o.createElementNS("http://www.w3.org/2000/svg","stop");d.setAttribute("stop-color","#A5D6A7"),d.setAttribute("offset","0%");let p=o.createElementNS("http://www.w3.org/2000/svg","stop");p.setAttribute("stop-color","#80CBC4"),p.setAttribute("offset","100%"),c.append(" ",d," ",p," ");let h=o.createElementNS("http://www.w3.org/2000/svg","g");h.setAttribute("id","lh-gauge--pwa__installable-badge");let u=o.createElementNS("http://www.w3.org/2000/svg","circle");u.setAttribute("fill","#FFFFFF"),u.setAttribute("cx","10"),u.setAttribute("cy","10"),u.setAttribute("r","10");let f=o.createElementNS("http://www.w3.org/2000/svg","path");f.setAttribute("fill","#009688"),f.setAttribute("d","M10 4.167A5.835 5.835 0 0 0 4.167 10 5.835 5.835 0 0 0 10 15.833 5.835 5.835 0 0 0 15.833 10 5.835 5.835 0 0 0 10 4.167zm2.917 6.416h-2.334v2.334H9.417v-2.334H7.083V9.417h2.334V7.083h1.166v2.334h2.334v1.166z"),h.append(" ",u," ",f," "),i.append(" ",a," ",c," ",h," ");let b=o.createElementNS("http://www.w3.org/2000/svg","g");b.setAttribute("stroke","none"),b.setAttribute("fill-rule","nonzero");let _=o.createElementNS("http://www.w3.org/2000/svg","circle","lh-gauge--pwa__disc");_.setAttribute("cx","30"),_.setAttribute("cy","30"),_.setAttribute("r","30");let m=o.createElementNS("http://www.w3.org/2000/svg","g","lh-gauge--pwa__logo"),w=o.createElementNS("http://www.w3.org/2000/svg","path","lh-gauge--pwa__logo--secondary-color");w.setAttribute("d","M35.66 19.39l.7-1.75h2L37.4 15 38.6 12l3.4 9h-2.51l-.58-1.61z");let v=o.createElementNS("http://www.w3.org/2000/svg","path","lh-gauge--pwa__logo--primary-color");v.setAttribute("d","M33.52 21l3.65-9h-2.42l-2.5 5.82L30.5 12h-1.86l-1.9 5.82-1.35-2.65-1.21 3.72L25.4 21h2.38l1.72-5.2 1.64 5.2z");let x=o.createElementNS("http://www.w3.org/2000/svg","path","lh-gauge--pwa__logo--secondary-color");x.setAttribute("fill-rule","nonzero"),x.setAttribute("d","M20.3 17.91h1.48c.45 0 .85-.05 1.2-.15l.39-1.18 1.07-3.3a2.64 2.64 0 0 0-.28-.37c-.55-.6-1.36-.91-2.42-.91H18v9h2.3V17.9zm1.96-3.84c.22.22.33.5.33.87 0 .36-.1.65-.29.87-.2.23-.59.35-1.15.35h-.86v-2.41h.87c.52 0 .89.1 1.1.32z"),m.append(" ",w," ",v," ",x," ");let E=o.createElementNS("http://www.w3.org/2000/svg","rect","lh-gauge--pwa__component lh-gauge--pwa__na-line");E.setAttribute("fill","#FFFFFF"),E.setAttribute("x","20"),E.setAttribute("y","32"),E.setAttribute("width","20"),E.setAttribute("height","4"),E.setAttribute("rx","2");let A=o.createElementNS("http://www.w3.org/2000/svg","g","lh-gauge--pwa__component lh-gauge--pwa__installable-badge");A.setAttribute("transform","translate(20, 29)");let C=o.createElementNS("http://www.w3.org/2000/svg","path");C.setAttribute("fill","url(#lh-gauge--pwa__installable__shadow-gradient)"),C.setAttribute("d","M33.629 19.487c-4.272 5.453-10.391 9.39-17.415 10.869L3 17.142 17.142 3 33.63 19.487z");let L=o.createElementNS("http://www.w3.org/2000/svg","use");L.setAttribute("href","#lh-gauge--pwa__installable-badge"),A.append(" ",C," ",L," ");let S=o.createElementNS("http://www.w3.org/2000/svg","g","lh-gauge--pwa__component lh-gauge--pwa__check-circle");S.setAttribute("transform","translate(18, 28)");let z=o.createElementNS("http://www.w3.org/2000/svg","circle");z.setAttribute("fill","#FFFFFF"),z.setAttribute("cx","12"),z.setAttribute("cy","12"),z.setAttribute("r","12");let M=o.createElementNS("http://www.w3.org/2000/svg","path");M.setAttribute("fill","url(#lh-gauge--pwa__check-circle__gradient)"),M.setAttribute("d","M12 2a10 10 0 1 0 0 20 10 10 0 0 0 0-20zm-2 15l-5-5 1.41-1.41L10 14.17l7.59-7.59L19 8l-9 9z"),S.append(" ",z," ",M," "),b.append(" "," ",_," ",m," "," ",E," "," ",A," "," ",S," "),r.append(" ",i," ",b," ");let T=o.createElement("div","lh-gauge__label");return n.append(" ",r," ",T," "),e.append(n),e}function Ae(o){let e=o.createFragment(),t=o.createElement("style");t.append(`
114
+ `),e.append(t);let n=r.createElement("a","lh-gauge__wrapper lh-gauge--pwa__wrapper"),o=r.createElementNS("http://www.w3.org/2000/svg","svg","lh-gauge lh-gauge--pwa");o.setAttribute("viewBox","0 0 60 60");let i=r.createElementNS("http://www.w3.org/2000/svg","defs"),a=r.createElementNS("http://www.w3.org/2000/svg","linearGradient");a.setAttribute("id","lh-gauge--pwa__check-circle__gradient"),a.setAttribute("x1","50%"),a.setAttribute("y1","0%"),a.setAttribute("x2","50%"),a.setAttribute("y2","100%");let l=r.createElementNS("http://www.w3.org/2000/svg","stop");l.setAttribute("stop-color","#00C852"),l.setAttribute("offset","0%");let s=r.createElementNS("http://www.w3.org/2000/svg","stop");s.setAttribute("stop-color","#009688"),s.setAttribute("offset","100%"),a.append(" ",l," ",s," ");let c=r.createElementNS("http://www.w3.org/2000/svg","linearGradient");c.setAttribute("id","lh-gauge--pwa__installable__shadow-gradient"),c.setAttribute("x1","76.056%"),c.setAttribute("x2","24.111%"),c.setAttribute("y1","82.995%"),c.setAttribute("y2","24.735%");let d=r.createElementNS("http://www.w3.org/2000/svg","stop");d.setAttribute("stop-color","#A5D6A7"),d.setAttribute("offset","0%");let p=r.createElementNS("http://www.w3.org/2000/svg","stop");p.setAttribute("stop-color","#80CBC4"),p.setAttribute("offset","100%"),c.append(" ",d," ",p," ");let h=r.createElementNS("http://www.w3.org/2000/svg","g");h.setAttribute("id","lh-gauge--pwa__installable-badge");let g=r.createElementNS("http://www.w3.org/2000/svg","circle");g.setAttribute("fill","#FFFFFF"),g.setAttribute("cx","10"),g.setAttribute("cy","10"),g.setAttribute("r","10");let v=r.createElementNS("http://www.w3.org/2000/svg","path");v.setAttribute("fill","#009688"),v.setAttribute("d","M10 4.167A5.835 5.835 0 0 0 4.167 10 5.835 5.835 0 0 0 10 15.833 5.835 5.835 0 0 0 15.833 10 5.835 5.835 0 0 0 10 4.167zm2.917 6.416h-2.334v2.334H9.417v-2.334H7.083V9.417h2.334V7.083h1.166v2.334h2.334v1.166z"),h.append(" ",g," ",v," "),i.append(" ",a," ",c," ",h," ");let b=r.createElementNS("http://www.w3.org/2000/svg","g");b.setAttribute("stroke","none"),b.setAttribute("fill-rule","nonzero");let f=r.createElementNS("http://www.w3.org/2000/svg","circle","lh-gauge--pwa__disc");f.setAttribute("cx","30"),f.setAttribute("cy","30"),f.setAttribute("r","30");let u=r.createElementNS("http://www.w3.org/2000/svg","g","lh-gauge--pwa__logo"),w=r.createElementNS("http://www.w3.org/2000/svg","path","lh-gauge--pwa__logo--secondary-color");w.setAttribute("d","M35.66 19.39l.7-1.75h2L37.4 15 38.6 12l3.4 9h-2.51l-.58-1.61z");let _=r.createElementNS("http://www.w3.org/2000/svg","path","lh-gauge--pwa__logo--primary-color");_.setAttribute("d","M33.52 21l3.65-9h-2.42l-2.5 5.82L30.5 12h-1.86l-1.9 5.82-1.35-2.65-1.21 3.72L25.4 21h2.38l1.72-5.2 1.64 5.2z");let E=r.createElementNS("http://www.w3.org/2000/svg","path","lh-gauge--pwa__logo--secondary-color");E.setAttribute("fill-rule","nonzero"),E.setAttribute("d","M20.3 17.91h1.48c.45 0 .85-.05 1.2-.15l.39-1.18 1.07-3.3a2.64 2.64 0 0 0-.28-.37c-.55-.6-1.36-.91-2.42-.91H18v9h2.3V17.9zm1.96-3.84c.22.22.33.5.33.87 0 .36-.1.65-.29.87-.2.23-.59.35-1.15.35h-.86v-2.41h.87c.52 0 .89.1 1.1.32z"),u.append(" ",w," ",_," ",E," ");let S=r.createElementNS("http://www.w3.org/2000/svg","rect","lh-gauge--pwa__component lh-gauge--pwa__na-line");S.setAttribute("fill","#FFFFFF"),S.setAttribute("x","20"),S.setAttribute("y","32"),S.setAttribute("width","20"),S.setAttribute("height","4"),S.setAttribute("rx","2");let z=r.createElementNS("http://www.w3.org/2000/svg","g","lh-gauge--pwa__component lh-gauge--pwa__installable-badge");z.setAttribute("transform","translate(20, 29)");let M=r.createElementNS("http://www.w3.org/2000/svg","path");M.setAttribute("fill","url(#lh-gauge--pwa__installable__shadow-gradient)"),M.setAttribute("d","M33.629 19.487c-4.272 5.453-10.391 9.39-17.415 10.869L3 17.142 17.142 3 33.63 19.487z");let F=r.createElementNS("http://www.w3.org/2000/svg","use");F.setAttribute("href","#lh-gauge--pwa__installable-badge"),z.append(" ",M," ",F," ");let T=r.createElementNS("http://www.w3.org/2000/svg","g","lh-gauge--pwa__component lh-gauge--pwa__check-circle");T.setAttribute("transform","translate(18, 28)");let A=r.createElementNS("http://www.w3.org/2000/svg","circle");A.setAttribute("fill","#FFFFFF"),A.setAttribute("cx","12"),A.setAttribute("cy","12"),A.setAttribute("r","12");let L=r.createElementNS("http://www.w3.org/2000/svg","path");L.setAttribute("fill","url(#lh-gauge--pwa__check-circle__gradient)"),L.setAttribute("d","M12 2a10 10 0 1 0 0 20 10 10 0 0 0 0-20zm-2 15l-5-5 1.41-1.41L10 14.17l7.59-7.59L19 8l-9 9z"),T.append(" ",A," ",L," "),b.append(" "," ",f," ",u," "," ",S," "," ",z," "," ",T," "),o.append(" ",i," ",b," ");let D=r.createElement("div","lh-gauge__label");return n.append(" ",o," ",D," "),e.append(n),e}function nt(r){let e=r.createFragment(),t=r.createElement("style");t.append(`
115
115
  /* CSS Fireworks. Originally by Eddie Lin
116
116
  https://codepen.io/paulirish/pen/yEVMbP
117
117
  */
@@ -182,7 +182,7 @@ var D="\u2026",de="\xA0";var pe={PASS:{label:"pass",minScore:.9},AVERAGE:{label:
182
182
  margin-left: 80%;
183
183
  }
184
184
  }
185
- `),e.append(t);let n=o.createElement("div","lh-header-container"),r=o.createElement("div","lh-scores-wrapper-placeholder");return n.append(" ",r," "),e.append(n),e}function Se(o){let e=o.createFragment(),t=o.createElement("div","lh-metric"),n=o.createElement("div","lh-metric__innerwrap"),r=o.createElement("div","lh-metric__icon"),i=o.createElement("span","lh-metric__title"),a=o.createElement("div","lh-metric__value"),l=o.createElement("div","lh-metric__description");return n.append(" ",r," ",i," ",a," ",l," "),t.append(" ",n," "),e.append(t),e}function Ce(o){let e=o.createFragment(),t=o.createElement("div","lh-audit lh-audit--load-opportunity"),n=o.createElement("details","lh-expandable-details"),r=o.createElement("summary"),i=o.createElement("div","lh-audit__header"),a=o.createElement("div","lh-load-opportunity__cols"),l=o.createElement("div","lh-load-opportunity__col lh-load-opportunity__col--one"),s=o.createElement("span","lh-audit__score-icon"),c=o.createElement("div","lh-audit__title");l.append(" ",s," ",c," ");let d=o.createElement("div","lh-load-opportunity__col lh-load-opportunity__col--two"),p=o.createElement("div","lh-load-opportunity__sparkline"),h=o.createElement("div","lh-sparkline"),u=o.createElement("div","lh-sparkline__bar");h.append(u),p.append(" ",h," ");let f=o.createElement("div","lh-audit__display-text"),b=o.createElement("div","lh-chevron-container");d.append(" ",p," ",f," ",b," "),a.append(" ",l," ",d," "),i.append(" ",a," "),r.append(" ",i," ");let _=o.createElement("div","lh-audit__description"),m=o.createElement("div","lh-audit__stackpacks");return n.append(" ",r," ",_," ",m," "),t.append(" ",n," "),e.append(t),e}function ze(o){let e=o.createFragment(),t=o.createElement("div","lh-load-opportunity__header lh-load-opportunity__cols"),n=o.createElement("div","lh-load-opportunity__col lh-load-opportunity__col--one"),r=o.createElement("div","lh-load-opportunity__col lh-load-opportunity__col--two");return t.append(" ",n," ",r," "),e.append(t),e}function Le(o){let e=o.createFragment(),t=o.createElement("div","lh-scorescale"),n=o.createElement("span","lh-scorescale-range lh-scorescale-range--fail");n.append("0\u201349");let r=o.createElement("span","lh-scorescale-range lh-scorescale-range--average");r.append("50\u201389");let i=o.createElement("span","lh-scorescale-range lh-scorescale-range--pass");return i.append("90\u2013100"),t.append(" ",n," ",r," ",i," "),e.append(t),e}function Me(o){let e=o.createFragment(),t=o.createElement("style");t.append(`
185
+ `),e.append(t);let n=r.createElement("div","lh-header-container"),o=r.createElement("div","lh-scores-wrapper-placeholder");return n.append(" ",o," "),e.append(n),e}function rt(r){let e=r.createFragment(),t=r.createElement("div","lh-metric"),n=r.createElement("div","lh-metric__innerwrap"),o=r.createElement("div","lh-metric__icon"),i=r.createElement("span","lh-metric__title"),a=r.createElement("div","lh-metric__value"),l=r.createElement("div","lh-metric__description");return n.append(" ",o," ",i," ",a," ",l," "),t.append(" ",n," "),e.append(t),e}function ot(r){let e=r.createFragment(),t=r.createElement("div","lh-scorescale"),n=r.createElement("span","lh-scorescale-range lh-scorescale-range--fail");n.append("0\u201349");let o=r.createElement("span","lh-scorescale-range lh-scorescale-range--average");o.append("50\u201389");let i=r.createElement("span","lh-scorescale-range lh-scorescale-range--pass");return i.append("90\u2013100"),t.append(" ",n," ",o," ",i," "),e.append(t),e}function it(r){let e=r.createFragment(),t=r.createElement("style");t.append(`
186
186
  .lh-scores-container {
187
187
  display: flex;
188
188
  flex-direction: column;
@@ -245,11 +245,7 @@ var D="\u2026",de="\xA0";var pe={PASS:{label:"pass",minScore:.9},AVERAGE:{label:
245
245
  left: 0px;
246
246
  right: 0px;
247
247
  }
248
-
249
- .lh-gauge__wrapper:first-of-type {
250
- contain: none;
251
- }
252
- `),e.append(t);let n=o.createElement("div","lh-scores-wrapper"),r=o.createElement("div","lh-scores-container"),i=o.createElement("div","lh-pyro"),a=o.createElement("div","lh-pyro-before"),l=o.createElement("div","lh-pyro-after");return i.append(" ",a," ",l," "),r.append(" ",i," "),n.append(" ",r," "),e.append(n),e}function Te(o){let e=o.createFragment(),t=o.createElement("div","lh-snippet"),n=o.createElement("style");return n.append(`
248
+ `),e.append(t);let n=r.createElement("div","lh-scores-wrapper"),o=r.createElement("div","lh-scores-container"),i=r.createElement("div","lh-pyro"),a=r.createElement("div","lh-pyro-before"),l=r.createElement("div","lh-pyro-after");return i.append(" ",a," ",l," "),o.append(" ",i," "),n.append(" ",o," "),e.append(n),e}function at(r){let e=r.createFragment(),t=r.createElement("div","lh-snippet"),n=r.createElement("style");return n.append(`
253
249
  :root {
254
250
  --snippet-highlight-light: #fbf1f2;
255
251
  --snippet-highlight-dark: #ffd6d8;
@@ -357,21 +353,10 @@ var D="\u2026",de="\xA0";var pe={PASS:{label:"pass",minScore:.9},AVERAGE:{label:
357
353
  color: var(--color-gray-600);
358
354
  user-select: none;
359
355
  }
360
- `),t.append(" ",n," "),e.append(t),e}function Fe(o){let e=o.createFragment(),t=o.createElement("div","lh-snippet__snippet"),n=o.createElement("div","lh-snippet__snippet-inner");return t.append(" ",n," "),e.append(t),e}function De(o){let e=o.createFragment(),t=o.createElement("div","lh-snippet__header"),n=o.createElement("div","lh-snippet__title"),r=o.createElement("div","lh-snippet__node"),i=o.createElement("button","lh-snippet__toggle-expand"),a=o.createElement("span","lh-snippet__btn-label-collapse lh-snippet__show-if-expanded"),l=o.createElement("span","lh-snippet__btn-label-expand lh-snippet__show-if-collapsed");return i.append(" ",a," ",l," "),t.append(" ",n," ",r," ",i," "),e.append(t),e}function Re(o){let e=o.createFragment(),t=o.createElement("div","lh-snippet__line"),n=o.createElement("div","lh-snippet__line-number"),r=o.createElement("div","lh-snippet__line-icon"),i=o.createElement("code");return t.append(" ",n," ",r," ",i," "),e.append(t),e}function Ne(o){let e=o.createFragment(),t=o.createElement("style");return t.append(`/**
356
+ `),t.append(" ",n," "),e.append(t),e}function lt(r){let e=r.createFragment(),t=r.createElement("div","lh-snippet__snippet"),n=r.createElement("div","lh-snippet__snippet-inner");return t.append(" ",n," "),e.append(t),e}function st(r){let e=r.createFragment(),t=r.createElement("div","lh-snippet__header"),n=r.createElement("div","lh-snippet__title"),o=r.createElement("div","lh-snippet__node"),i=r.createElement("button","lh-snippet__toggle-expand"),a=r.createElement("span","lh-snippet__btn-label-collapse lh-snippet__show-if-expanded"),l=r.createElement("span","lh-snippet__btn-label-expand lh-snippet__show-if-collapsed");return i.append(" ",a," ",l," "),t.append(" ",n," ",o," ",i," "),e.append(t),e}function ct(r){let e=r.createFragment(),t=r.createElement("div","lh-snippet__line"),n=r.createElement("div","lh-snippet__line-number"),o=r.createElement("div","lh-snippet__line-icon"),i=r.createElement("code");return t.append(" ",n," ",o," ",i," "),e.append(t),e}function dt(r){let e=r.createFragment(),t=r.createElement("style");return t.append(`/**
361
357
  * @license
362
- * Copyright 2017 The Lighthouse Authors. All Rights Reserved.
363
- *
364
- * Licensed under the Apache License, Version 2.0 (the "License");
365
- * you may not use this file except in compliance with the License.
366
- * You may obtain a copy of the License at
367
- *
368
- * http://www.apache.org/licenses/LICENSE-2.0
369
- *
370
- * Unless required by applicable law or agreed to in writing, software
371
- * distributed under the License is distributed on an "AS-IS" BASIS,
372
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
373
- * See the License for the specific language governing permissions and
374
- * limitations under the License.
358
+ * Copyright 2017 Google LLC
359
+ * SPDX-License-Identifier: Apache-2.0
375
360
  */
376
361
 
377
362
  /*
@@ -501,7 +486,6 @@ var D="\u2026",de="\xA0";var pe={PASS:{label:"pass",minScore:.9},AVERAGE:{label:
501
486
  --section-padding-vertical: calc(var(--default-padding) * 6);
502
487
  --snippet-background-color: var(--color-gray-50);
503
488
  --snippet-color: #0938C2;
504
- --sparkline-height: 5px;
505
489
  --stackpack-padding-horizontal: 10px;
506
490
  --sticky-header-background-color: var(--report-background-color);
507
491
  --sticky-header-buffer: calc(var(--topbar-height) + var(--sticky-header-height));
@@ -608,11 +592,6 @@ var D="\u2026",de="\xA0";var pe={PASS:{label:"pass",minScore:.9},AVERAGE:{label:
608
592
  --topbar-height: 28px;
609
593
  --topbar-logo-size: 20px;
610
594
  }
611
-
612
- /* Not enough space to adequately show the relative savings bars. */
613
- .lh-sparkline {
614
- display: none;
615
- }
616
595
  }
617
596
 
618
597
  .lh-vars.lh-devtools {
@@ -981,7 +960,6 @@ var D="\u2026",de="\xA0";var pe={PASS:{label:"pass",minScore:.9},AVERAGE:{label:
981
960
 
982
961
 
983
962
  .lh-audit__display-text,
984
- .lh-load-opportunity__sparkline,
985
963
  .lh-chevron-container {
986
964
  margin: 0 var(--audit-margin-horizontal);
987
965
  }
@@ -998,14 +976,11 @@ var D="\u2026",de="\xA0";var pe={PASS:{label:"pass",minScore:.9},AVERAGE:{label:
998
976
  font-size: var(--report-monospace-font-size);
999
977
  }
1000
978
 
1001
- /* Prepend display text with em dash separator. But not in Opportunities. */
979
+ /* Prepend display text with em dash separator. */
1002
980
  .lh-audit__display-text:not(:empty):before {
1003
981
  content: '\u2014';
1004
982
  margin-right: var(--audit-margin-horizontal);
1005
983
  }
1006
- .lh-audit-group.lh-audit-group--load-opportunities .lh-audit__display-text:not(:empty):before {
1007
- display: none;
1008
- }
1009
984
 
1010
985
  /* Expandable Details (Audit Groups, Audits) */
1011
986
  .lh-audit__header {
@@ -1014,10 +989,6 @@ var D="\u2026",de="\xA0";var pe={PASS:{label:"pass",minScore:.9},AVERAGE:{label:
1014
989
  padding: var(--default-padding);
1015
990
  }
1016
991
 
1017
- .lh-audit--load-opportunity .lh-audit__header {
1018
- display: block;
1019
- }
1020
-
1021
992
 
1022
993
  .lh-metricfilter {
1023
994
  display: grid;
@@ -1245,68 +1216,6 @@ var D="\u2026",de="\xA0";var pe={PASS:{label:"pass",minScore:.9},AVERAGE:{label:
1245
1216
  color: var(--color-fail-secondary);
1246
1217
  }
1247
1218
 
1248
- /* Perf load opportunity */
1249
-
1250
- .lh-load-opportunity__cols {
1251
- display: flex;
1252
- align-items: flex-start;
1253
- }
1254
-
1255
- .lh-load-opportunity__header .lh-load-opportunity__col {
1256
- color: var(--color-gray-600);
1257
- display: unset;
1258
- line-height: calc(2.3 * var(--report-font-size));
1259
- }
1260
-
1261
- .lh-load-opportunity__col {
1262
- display: flex;
1263
- }
1264
-
1265
- .lh-load-opportunity__col--one {
1266
- flex: 5;
1267
- align-items: center;
1268
- margin-right: 2px;
1269
- }
1270
- .lh-load-opportunity__col--two {
1271
- flex: 4;
1272
- text-align: right;
1273
- }
1274
-
1275
- .lh-audit--load-opportunity .lh-audit__display-text {
1276
- text-align: right;
1277
- flex: 0 0 7.5ch;
1278
- }
1279
-
1280
-
1281
- /* Sparkline */
1282
-
1283
- .lh-load-opportunity__sparkline {
1284
- flex: 1;
1285
- margin-top: calc((var(--report-line-height) - var(--sparkline-height)) / 2);
1286
- }
1287
-
1288
- .lh-sparkline {
1289
- height: var(--sparkline-height);
1290
- width: 100%;
1291
- }
1292
-
1293
- .lh-sparkline__bar {
1294
- height: 100%;
1295
- float: right;
1296
- }
1297
-
1298
- .lh-audit--pass .lh-sparkline__bar {
1299
- background: var(--color-pass);
1300
- }
1301
-
1302
- .lh-audit--average .lh-sparkline__bar {
1303
- background: var(--color-average);
1304
- }
1305
-
1306
- .lh-audit--fail .lh-sparkline__bar {
1307
- background: var(--color-fail);
1308
- }
1309
-
1310
1219
  /* Filmstrip */
1311
1220
 
1312
1221
  .lh-filmstrip-container {
@@ -1448,7 +1357,6 @@ var D="\u2026",de="\xA0";var pe={PASS:{label:"pass",minScore:.9},AVERAGE:{label:
1448
1357
 
1449
1358
  .lh-details,
1450
1359
  .lh-category-header__description,
1451
- .lh-load-opportunity__header,
1452
1360
  .lh-audit-group__footer {
1453
1361
  font-size: var(--report-font-size-secondary);
1454
1362
  line-height: var(--report-line-height-secondary);
@@ -1705,12 +1613,12 @@ var D="\u2026",de="\xA0";var pe={PASS:{label:"pass",minScore:.9},AVERAGE:{label:
1705
1613
  .lh-gauge__percentage {
1706
1614
  width: 100%;
1707
1615
  height: var(--gauge-circle-size);
1616
+ line-height: var(--gauge-circle-size);
1708
1617
  position: absolute;
1709
1618
  font-family: var(--report-font-family-monospace);
1710
1619
  font-size: calc(var(--gauge-circle-size) * 0.34 + 1.3px);
1711
- line-height: 0;
1712
1620
  text-align: center;
1713
- top: calc(var(--score-container-padding) + var(--gauge-circle-size) / 2);
1621
+ top: var(--score-container-padding);
1714
1622
  }
1715
1623
 
1716
1624
  .lh-category .lh-gauge__percentage {
@@ -2334,9 +2242,235 @@ details[open] .lh-clump-toggletext--hide { display: block;}
2334
2242
  }
2335
2243
  }
2336
2244
 
2245
+ /* Explodey gauge */
2246
+
2247
+ .lh-exp-gauge-component {
2248
+ margin-bottom: 10px;
2249
+ }
2250
+
2251
+ .lh-exp-gauge-component circle {
2252
+ stroke: currentcolor;
2253
+ r: var(--radius);
2254
+ }
2255
+
2256
+ .lh-exp-gauge-component text {
2257
+ font-size: calc(var(--radius) * 0.2);
2258
+ }
2259
+
2260
+ .lh-exp-gauge-component .lh-exp-gauge {
2261
+ margin: 0 auto;
2262
+ width: 225px;
2263
+ stroke-width: var(--stroke-width);
2264
+ stroke-linecap: round;
2265
+
2266
+ /* for better rendering perf */
2267
+ contain: strict;
2268
+ height: 225px;
2269
+ will-change: transform;
2270
+ }
2271
+ .lh-exp-gauge-component .lh-exp-gauge--faded {
2272
+ opacity: 0.1;
2273
+ }
2274
+ .lh-exp-gauge-component .lh-exp-gauge__wrapper {
2275
+ font-family: var(--report-font-family-monospace);
2276
+ text-align: center;
2277
+ text-decoration: none;
2278
+ transition: .3s;
2279
+ }
2280
+ .lh-exp-gauge-component .lh-exp-gauge__wrapper--pass {
2281
+ color: var(--color-pass);
2282
+ }
2283
+ .lh-exp-gauge-component .lh-exp-gauge__wrapper--average {
2284
+ color: var(--color-average);
2285
+ }
2286
+ .lh-exp-gauge-component .lh-exp-gauge__wrapper--fail {
2287
+ color: var(--color-fail);
2288
+ }
2289
+ .lh-exp-gauge-component .state--expanded {
2290
+ transition: color .3s;
2291
+ }
2292
+ .lh-exp-gauge-component .state--highlight {
2293
+ color: var(--color-highlight);
2294
+ }
2295
+ .lh-exp-gauge-component .lh-exp-gauge__svg-wrapper {
2296
+ display: flex;
2297
+ flex-direction: column-reverse;
2298
+ }
2299
+
2300
+ .lh-exp-gauge-component .lh-exp-gauge__label {
2301
+ fill: var(--report-text-color);
2302
+ font-family: var(--report-font-family);
2303
+ font-size: 12px;
2304
+ }
2305
+
2306
+ .lh-exp-gauge-component .lh-exp-gauge__cutout {
2307
+ opacity: .999;
2308
+ transition: opacity .3s;
2309
+ }
2310
+ .lh-exp-gauge-component .state--highlight .lh-exp-gauge__cutout {
2311
+ opacity: 0;
2312
+ }
2313
+
2314
+ .lh-exp-gauge-component .lh-exp-gauge__inner {
2315
+ color: inherit;
2316
+ }
2317
+ .lh-exp-gauge-component .lh-exp-gauge__base {
2318
+ fill: currentcolor;
2319
+ }
2320
+
2321
+
2322
+ .lh-exp-gauge-component .lh-exp-gauge__arc {
2323
+ fill: none;
2324
+ transition: opacity .3s;
2325
+ }
2326
+ .lh-exp-gauge-component .lh-exp-gauge__arc--metric {
2327
+ color: var(--metric-color);
2328
+ stroke-dashoffset: var(--metric-offset);
2329
+ opacity: 0.3;
2330
+ }
2331
+ .lh-exp-gauge-component .lh-exp-gauge-hovertarget {
2332
+ color: currentcolor;
2333
+ opacity: 0.001;
2334
+ stroke-linecap: butt;
2335
+ stroke-width: 24;
2336
+ /* hack. move the hover target out of the center. ideally i tweak the r instead but that rquires considerably more math. */
2337
+ transform: scale(1.15);
2338
+ }
2339
+ .lh-exp-gauge-component .lh-exp-gauge__arc--metric.lh-exp-gauge--miniarc {
2340
+ opacity: 0;
2341
+ stroke-dasharray: 0 calc(var(--circle-meas) * var(--radius));
2342
+ transition: 0s .005s;
2343
+ }
2344
+ .lh-exp-gauge-component .state--expanded .lh-exp-gauge__arc--metric.lh-exp-gauge--miniarc {
2345
+ opacity: .999;
2346
+ stroke-dasharray: var(--metric-array);
2347
+ transition: 0.3s; /* calc(.005s + var(--i)*.05s); entrace animation */
2348
+ }
2349
+ .lh-exp-gauge-component .state--expanded .lh-exp-gauge__inner .lh-exp-gauge__arc {
2350
+ opacity: 0;
2351
+ }
2352
+
2353
+
2354
+ .lh-exp-gauge-component .lh-exp-gauge__percentage {
2355
+ text-anchor: middle;
2356
+ dominant-baseline: middle;
2357
+ opacity: .999;
2358
+ font-size: calc(var(--radius) * 0.625);
2359
+ transition: opacity .3s ease-in;
2360
+ }
2361
+ .lh-exp-gauge-component .state--highlight .lh-exp-gauge__percentage {
2362
+ opacity: 0;
2363
+ }
2364
+
2365
+ .lh-exp-gauge-component .lh-exp-gauge__wrapper--fail .lh-exp-gauge__percentage {
2366
+ fill: var(--color-fail);
2367
+ }
2368
+ .lh-exp-gauge-component .lh-exp-gauge__wrapper--average .lh-exp-gauge__percentage {
2369
+ fill: var(--color-average);
2370
+ }
2371
+ .lh-exp-gauge-component .lh-exp-gauge__wrapper--pass .lh-exp-gauge__percentage {
2372
+ fill: var(--color-pass);
2373
+ }
2374
+
2375
+ .lh-exp-gauge-component .lh-cover {
2376
+ fill: none;
2377
+ opacity: .001;
2378
+ pointer-events: none;
2379
+ }
2380
+ .lh-exp-gauge-component .state--expanded .lh-cover {
2381
+ pointer-events: auto;
2382
+ }
2383
+
2384
+ .lh-exp-gauge-component .metric {
2385
+ transform: scale(var(--scale-initial));
2386
+ opacity: 0;
2387
+ transition: transform .1s .2s ease-out, opacity .3s ease-out;
2388
+ pointer-events: none;
2389
+ }
2390
+ .lh-exp-gauge-component .metric text {
2391
+ pointer-events: none;
2392
+ }
2393
+ .lh-exp-gauge-component .metric__value {
2394
+ fill: currentcolor;
2395
+ opacity: 0;
2396
+ transition: opacity 0.2s;
2397
+ }
2398
+ .lh-exp-gauge-component .state--expanded .metric {
2399
+ transform: scale(1);
2400
+ opacity: .999;
2401
+ transition: transform .3s ease-out, opacity .3s ease-in, stroke-width .1s ease-out;
2402
+ transition-delay: calc(var(--i)*.05s);
2403
+ pointer-events: auto;
2404
+ }
2405
+ .lh-exp-gauge-component .state--highlight .metric {
2406
+ opacity: .3;
2407
+ }
2408
+ .lh-exp-gauge-component .state--highlight .metric--highlight {
2409
+ opacity: .999;
2410
+ stroke-width: calc(1.5*var(--stroke-width));
2411
+ }
2412
+ .lh-exp-gauge-component .state--highlight .metric--highlight .metric__value {
2413
+ opacity: 0.999;
2414
+ }
2415
+
2416
+
2417
+ /*
2418
+ the initial first load peek
2419
+ */
2420
+ .lh-exp-gauge-component .lh-exp-gauge__bg { /* needed for the use zindex stacking w/ transparency */
2421
+ fill: var(--report-background-color);
2422
+ stroke: var(--report-background-color);
2423
+ }
2424
+ .lh-exp-gauge-component .state--peek .metric {
2425
+ transition-delay: 0ms;
2426
+ animation: peek var(--peek-dur) cubic-bezier(0.46, 0.03, 0.52, 0.96);
2427
+ animation-fill-mode: forwards;
2428
+ }
2429
+ .lh-exp-gauge-component .state--peek .lh-exp-gauge__inner .lh-exp-gauge__arc {
2430
+ opacity: 1;
2431
+ }
2432
+ .lh-exp-gauge-component .state--peek .lh-exp-gauge__arc.lh-exp-gauge--faded {
2433
+ opacity: 0.3; /* just a tad stronger cuz its fighting with a big solid arg */
2434
+ }
2435
+ /* do i need to set expanded and override this? */
2436
+ .lh-exp-gauge-component .state--peek .lh-exp-gauge__arc--metric.lh-exp-gauge--miniarc {
2437
+ transition: opacity 0.3s;
2438
+ }
2439
+ .lh-exp-gauge-component .state--peek {
2440
+ color: unset;
2441
+ }
2442
+ .lh-exp-gauge-component .state--peek .metric__label {
2443
+ display: none;
2444
+ }
2445
+
2446
+ .lh-exp-gauge-component .metric__label {
2447
+ fill: var(--report-text-color);
2448
+ }
2449
+
2450
+ @keyframes peek {
2451
+ /* biggest it should go is 0.92. smallest is 0.8 */
2452
+ 0% {
2453
+ transform: scale(0.8);
2454
+ opacity: 0.8;
2455
+ }
2456
+
2457
+ 50% {
2458
+ transform: scale(0.92);
2459
+ opacity: 1;
2460
+ }
2461
+
2462
+ 100% {
2463
+ transform: scale(0.8);
2464
+ opacity: 0.8;
2465
+ }
2466
+ }
2467
+
2468
+ .lh-exp-gauge-component .wrapper {
2469
+ width: 620px;
2470
+ }
2337
2471
 
2338
2472
  /*# sourceURL=report-styles.css */
2339
- `),e.append(t),e}function Pe(o){let e=o.createFragment(),t=o.createElement("style");t.append(`
2473
+ `),e.append(t),e}function pt(r){let e=r.createFragment(),t=r.createElement("style");t.append(`
2340
2474
  .lh-topbar {
2341
2475
  position: sticky;
2342
2476
  top: 0;
@@ -2478,92 +2612,43 @@ details[open] .lh-clump-toggletext--hide { display: block;}
2478
2612
  display: none;
2479
2613
  }
2480
2614
  }
2481
- `),e.append(t);let n=o.createElement("div","lh-topbar"),r=o.createElementNS("http://www.w3.org/2000/svg","svg","lh-topbar__logo");r.setAttribute("role","img"),r.setAttribute("title","Lighthouse logo"),r.setAttribute("fill","none"),r.setAttribute("xmlns","http://www.w3.org/2000/svg"),r.setAttribute("viewBox","0 0 48 48");let i=o.createElementNS("http://www.w3.org/2000/svg","path");i.setAttribute("d","m14 7 10-7 10 7v10h5v7h-5l5 24H9l5-24H9v-7h5V7Z"),i.setAttribute("fill","#F63");let a=o.createElementNS("http://www.w3.org/2000/svg","path");a.setAttribute("d","M31.561 24H14l-1.689 8.105L31.561 24ZM18.983 48H9l1.022-4.907L35.723 32.27l1.663 7.98L18.983 48Z"),a.setAttribute("fill","#FFA385");let l=o.createElementNS("http://www.w3.org/2000/svg","path");l.setAttribute("fill","#FF3"),l.setAttribute("d","M20.5 10h7v7h-7z"),r.append(" ",i," ",a," ",l," ");let s=o.createElement("a","lh-topbar__url");s.setAttribute("href",""),s.setAttribute("target","_blank"),s.setAttribute("rel","noopener");let c=o.createElement("div","lh-tools"),d=o.createElement("div","lh-tools-locale lh-hidden"),p=o.createElement("button","lh-button lh-tool-locale__button");p.setAttribute("id","lh-button__swap-locales"),p.setAttribute("title","Show Language Picker"),p.setAttribute("aria-label","Toggle language picker"),p.setAttribute("aria-haspopup","menu"),p.setAttribute("aria-expanded","false"),p.setAttribute("aria-controls","lh-tools-locale__selector-wrapper");let h=o.createElementNS("http://www.w3.org/2000/svg","svg");h.setAttribute("width","20px"),h.setAttribute("height","20px"),h.setAttribute("viewBox","0 0 24 24"),h.setAttribute("fill","currentColor");let u=o.createElementNS("http://www.w3.org/2000/svg","path");u.setAttribute("d","M0 0h24v24H0V0z"),u.setAttribute("fill","none");let f=o.createElementNS("http://www.w3.org/2000/svg","path");f.setAttribute("d","M12.87 15.07l-2.54-2.51.03-.03c1.74-1.94 2.98-4.17 3.71-6.53H17V4h-7V2H8v2H1v1.99h11.17C11.5 7.92 10.44 9.75 9 11.35 8.07 10.32 7.3 9.19 6.69 8h-2c.73 1.63 1.73 3.17 2.98 4.56l-5.09 5.02L4 19l5-5 3.11 3.11.76-2.04zM18.5 10h-2L12 22h2l1.12-3h4.75L21 22h2l-4.5-12zm-2.62 7l1.62-4.33L19.12 17h-3.24z"),h.append(u,f),p.append(" ",h," ");let b=o.createElement("div","lh-tools-locale__selector-wrapper");b.setAttribute("id","lh-tools-locale__selector-wrapper"),b.setAttribute("role","menu"),b.setAttribute("aria-labelledby","lh-button__swap-locales"),b.setAttribute("aria-hidden","true"),b.append(" "," "),d.append(" ",p," ",b," ");let _=o.createElement("button","lh-tools__button");_.setAttribute("id","lh-tools-button"),_.setAttribute("title","Tools menu"),_.setAttribute("aria-label","Toggle report tools menu"),_.setAttribute("aria-haspopup","menu"),_.setAttribute("aria-expanded","false"),_.setAttribute("aria-controls","lh-tools-dropdown");let m=o.createElementNS("http://www.w3.org/2000/svg","svg");m.setAttribute("width","100%"),m.setAttribute("height","100%"),m.setAttribute("viewBox","0 0 24 24");let w=o.createElementNS("http://www.w3.org/2000/svg","path");w.setAttribute("d","M0 0h24v24H0z"),w.setAttribute("fill","none");let v=o.createElementNS("http://www.w3.org/2000/svg","path");v.setAttribute("d","M12 8c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2zm0 2c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm0 6c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2z"),m.append(" ",w," ",v," "),_.append(" ",m," ");let x=o.createElement("div","lh-tools__dropdown");x.setAttribute("id","lh-tools-dropdown"),x.setAttribute("role","menu"),x.setAttribute("aria-labelledby","lh-tools-button");let E=o.createElement("a","lh-report-icon lh-report-icon--print");E.setAttribute("role","menuitem"),E.setAttribute("tabindex","-1"),E.setAttribute("href","#"),E.setAttribute("data-i18n","dropdownPrintSummary"),E.setAttribute("data-action","print-summary");let A=o.createElement("a","lh-report-icon lh-report-icon--print");A.setAttribute("role","menuitem"),A.setAttribute("tabindex","-1"),A.setAttribute("href","#"),A.setAttribute("data-i18n","dropdownPrintExpanded"),A.setAttribute("data-action","print-expanded");let C=o.createElement("a","lh-report-icon lh-report-icon--copy");C.setAttribute("role","menuitem"),C.setAttribute("tabindex","-1"),C.setAttribute("href","#"),C.setAttribute("data-i18n","dropdownCopyJSON"),C.setAttribute("data-action","copy");let L=o.createElement("a","lh-report-icon lh-report-icon--download lh-hidden");L.setAttribute("role","menuitem"),L.setAttribute("tabindex","-1"),L.setAttribute("href","#"),L.setAttribute("data-i18n","dropdownSaveHTML"),L.setAttribute("data-action","save-html");let S=o.createElement("a","lh-report-icon lh-report-icon--download");S.setAttribute("role","menuitem"),S.setAttribute("tabindex","-1"),S.setAttribute("href","#"),S.setAttribute("data-i18n","dropdownSaveJSON"),S.setAttribute("data-action","save-json");let z=o.createElement("a","lh-report-icon lh-report-icon--open");z.setAttribute("role","menuitem"),z.setAttribute("tabindex","-1"),z.setAttribute("href","#"),z.setAttribute("data-i18n","dropdownViewer"),z.setAttribute("data-action","open-viewer");let M=o.createElement("a","lh-report-icon lh-report-icon--open");M.setAttribute("role","menuitem"),M.setAttribute("tabindex","-1"),M.setAttribute("href","#"),M.setAttribute("data-i18n","dropdownSaveGist"),M.setAttribute("data-action","save-gist");let T=o.createElement("a","lh-report-icon lh-report-icon--open lh-hidden");T.setAttribute("role","menuitem"),T.setAttribute("tabindex","-1"),T.setAttribute("href","#"),T.setAttribute("data-i18n","dropdownViewUnthrottledTrace"),T.setAttribute("data-action","view-unthrottled-trace");let F=o.createElement("a","lh-report-icon lh-report-icon--dark");return F.setAttribute("role","menuitem"),F.setAttribute("tabindex","-1"),F.setAttribute("href","#"),F.setAttribute("data-i18n","dropdownDarkTheme"),F.setAttribute("data-action","toggle-dark"),x.append(" ",E," ",A," ",C," "," ",L," ",S," ",z," ",M," "," ",T," ",F," "),c.append(" ",d," ",_," ",x," "),n.append(" "," ",r," ",s," ",c," "),e.append(n),e}function He(o){let e=o.createFragment(),t=o.createElement("div","lh-warnings lh-warnings--toplevel"),n=o.createElement("p","lh-warnings__msg"),r=o.createElement("ul");return t.append(" ",n," ",r," "),e.append(t),e}function Y(o,e){switch(e){case"3pFilter":return ue(o);case"audit":return ge(o);case"categoryHeader":return me(o);case"chevron":return fe(o);case"clump":return be(o);case"crc":return ve(o);case"crcChain":return _e(o);case"elementScreenshot":return we(o);case"footer":return ye(o);case"fraction":return xe(o);case"gauge":return Ee(o);case"gaugePwa":return ke(o);case"heading":return Ae(o);case"metric":return Se(o);case"opportunity":return Ce(o);case"opportunityHeader":return ze(o);case"scorescale":return Le(o);case"scoresWrapper":return Me(o);case"snippet":return Te(o);case"snippetContent":return Fe(o);case"snippetHeader":return De(o);case"snippetLine":return Re(o);case"styles":return Ne(o);case"topbar":return Pe(o);case"warningsToplevel":return He(o)}throw new Error("unexpected component: "+e)}var I=class{constructor(e,t){this._document=e,this._lighthouseChannel="unknown",this._componentCache=new Map,this.rootEl=t}createElement(e,t){let n=this._document.createElement(e);if(t)for(let r of t.split(/\s+/))r&&n.classList.add(r);return n}createElementNS(e,t,n){let r=this._document.createElementNS(e,t);if(n)for(let i of n.split(/\s+/))i&&r.classList.add(i);return r}createFragment(){return this._document.createDocumentFragment()}createTextNode(e){return this._document.createTextNode(e)}createChildOf(e,t,n){let r=this.createElement(t,n);return e.append(r),r}createComponent(e){let t=this._componentCache.get(e);if(t){let r=t.cloneNode(!0);return this.findAll("style",r).forEach(i=>i.remove()),r}return t=Y(this,e),this._componentCache.set(e,t),t.cloneNode(!0)}clearComponentCache(){this._componentCache.clear()}convertMarkdownLinkSnippets(e,t={}){let n=this.createElement("span");for(let r of k.splitMarkdownLink(e)){let i=r.text.includes("`")?this.convertMarkdownCodeSnippets(r.text):r.text;if(!r.isLink){n.append(i);continue}let a=new URL(r.linkHref);(["https://developers.google.com","https://web.dev","https://developer.chrome.com"].includes(a.origin)||t.alwaysAppendUtmSource)&&(a.searchParams.set("utm_source","lighthouse"),a.searchParams.set("utm_medium",this._lighthouseChannel));let s=this.createElement("a");s.rel="noopener",s.target="_blank",s.append(i),this.safelySetHref(s,a.href),n.append(s)}return n}safelySetHref(e,t){if(t=t||"",t.startsWith("#")){e.href=t;return}let n=["https:","http:"],r;try{r=new URL(t)}catch{}r&&n.includes(r.protocol)&&(e.href=r.href)}safelySetBlobHref(e,t){if(t.type!=="text/html"&&t.type!=="application/json")throw new Error("Unsupported blob type");let n=URL.createObjectURL(t);e.href=n}convertMarkdownCodeSnippets(e){let t=this.createElement("span");for(let n of k.splitMarkdownCodeSpans(e))if(n.isCode){let r=this.createElement("code");r.textContent=n.text,t.append(r)}else t.append(this._document.createTextNode(n.text));return t}setLighthouseChannel(e){this._lighthouseChannel=e}document(){return this._document}isDevTools(){return!!this._document.querySelector(".lh-devtools")}find(e,t){let n=t.querySelector(e);if(n===null)throw new Error(`query ${e} not found`);return n}findAll(e,t){return Array.from(t.querySelectorAll(e))}fireEventOn(e,t=this._document,n){let r=new CustomEvent(e,n?{detail:n}:void 0);t.dispatchEvent(r)}saveFile(e,t){let n=this.createElement("a");n.download=t,this.safelySetBlobHref(n,e),this._document.body.append(n),n.click(),this._document.body.removeChild(n),setTimeout(()=>URL.revokeObjectURL(n.href),500)}};var X=0,g=class o{static i18n=null;static strings={};static reportJson=null;static apply(e){o.strings={...ee,...e.providedStrings},o.i18n=e.i18n,o.reportJson=e.reportJson}static getUniqueSuffix(){return X++}static resetUniqueSuffix(){X=0}};var te="data:image/jpeg;base64,";function ne(o){o.configSettings.locale||(o.configSettings.locale="en"),o.configSettings.formFactor||(o.configSettings.formFactor=o.configSettings.emulatedFormFactor),o.finalDisplayedUrl=k.getFinalDisplayedUrl(o),o.mainDocumentUrl=k.getMainDocumentUrl(o);for(let n of Object.values(o.audits))if((n.scoreDisplayMode==="not_applicable"||n.scoreDisplayMode==="not-applicable")&&(n.scoreDisplayMode="notApplicable"),n.details){if((n.details.type===void 0||n.details.type==="diagnostic")&&(n.details.type="debugdata"),n.details.type==="filmstrip")for(let r of n.details.items)r.data.startsWith(te)||(r.data=te+r.data);if(n.details.type==="table")for(let r of n.details.headings){let{itemType:i,text:a}=r;i!==void 0&&(r.valueType=i,delete r.itemType),a!==void 0&&(r.label=a,delete r.text);let l=r.subItemsHeading?.itemType;r.subItemsHeading&&l!==void 0&&(r.subItemsHeading.valueType=l,delete r.subItemsHeading.itemType)}if(n.id==="third-party-summary"&&(n.details.type==="opportunity"||n.details.type==="table")){let{headings:r,items:i}=n.details;if(r[0].valueType==="link"){r[0].valueType="text";for(let a of i)typeof a.entity=="object"&&a.entity.type==="link"&&(a.entity=a.entity.text);n.details.isEntityGrouped=!0}}}let[e]=o.lighthouseVersion.split(".").map(Number),t=o.categories.performance;if(e<9&&t){o.categoryGroups||(o.categoryGroups={}),o.categoryGroups.hidden={title:""};for(let n of t.auditRefs)n.group?["load-opportunities","diagnostics"].includes(n.group)&&delete n.group:n.group="hidden"}if(o.environment||(o.environment={benchmarkIndex:0,networkUserAgent:o.userAgent,hostUserAgent:o.userAgent}),o.configSettings.screenEmulation||(o.configSettings.screenEmulation={width:-1,height:-1,deviceScaleFactor:-1,mobile:/mobile/i.test(o.environment.hostUserAgent),disabled:!1}),o.i18n||(o.i18n={}),o.audits["full-page-screenshot"]){let n=o.audits["full-page-screenshot"].details;n?o.fullPageScreenshot={screenshot:n.screenshot,nodes:n.nodes}:o.fullPageScreenshot=null,delete o.audits["full-page-screenshot"]}}var R=k.RATINGS,y=class o{static prepareReportResult(e){let t=JSON.parse(JSON.stringify(e));ne(t);for(let r of Object.values(t.audits))r.details&&(r.details.type==="opportunity"||r.details.type==="table")&&!r.details.isEntityGrouped&&t.entities&&o.classifyEntities(t.entities,r.details);if(typeof t.categories!="object")throw new Error("No categories provided.");let n=new Map;for(let r of Object.values(t.categories))r.auditRefs.forEach(i=>{i.relevantAudits&&i.relevantAudits.forEach(a=>{let l=n.get(a)||[];l.push(i),n.set(a,l)})}),r.auditRefs.forEach(i=>{let a=t.audits[i.id];i.result=a,n.has(i.id)&&(i.relevantMetrics=n.get(i.id)),t.stackPacks&&t.stackPacks.forEach(l=>{l.descriptions[i.id]&&(i.stackPacks=i.stackPacks||[],i.stackPacks.push({title:l.title,iconDataURL:l.iconDataURL,description:l.descriptions[i.id]}))})});return t}static getUrlLocatorFn(e){let t=e.find(r=>r.valueType==="url")?.key;if(t&&typeof t=="string")return r=>{let i=r[t];if(typeof i=="string")return i};let n=e.find(r=>r.valueType==="source-location")?.key;if(n)return r=>{let i=r[n];if(typeof i=="object"&&i.type==="source-location")return i.url}}static classifyEntities(e,t){let{items:n,headings:r}=t;if(!n.length||n.some(a=>a.entity))return;let i=o.getUrlLocatorFn(r);if(i)for(let a of n){let l=i(a);if(!l)continue;let s="";try{s=k.parseURL(l).origin}catch{}if(!s)continue;let c=e.find(d=>d.origins.includes(s));c&&(a.entity=c.name)}}static getTableItemSortComparator(e){return(t,n)=>{for(let r of e){let i=t[r],a=n[r];if((typeof i!=typeof a||!["number","string"].includes(typeof i))&&console.warn(`Warning: Attempting to sort unsupported value type: ${r}.`),typeof i=="number"&&typeof a=="number"&&i!==a)return a-i;if(typeof i=="string"&&typeof a=="string"&&i!==a)return i.localeCompare(a)}return 0}}static getEmulationDescriptions(e){let t,n,r,i=e.throttling,a=g.i18n,l=g.strings;switch(e.throttlingMethod){case"provided":r=n=t=l.throttlingProvided;break;case"devtools":{let{cpuSlowdownMultiplier:h,requestLatencyMs:u}=i;t=`${a.formatNumber(h)}x slowdown (DevTools)`,n=`${a.formatMilliseconds(u)} HTTP RTT, ${a.formatKbps(i.downloadThroughputKbps)} down, ${a.formatKbps(i.uploadThroughputKbps)} up (DevTools)`,r=(()=>u===150*3.75&&i.downloadThroughputKbps===1.6*1024*.9&&i.uploadThroughputKbps===750*.9)()?l.runtimeSlow4g:l.runtimeCustom;break}case"simulate":{let{cpuSlowdownMultiplier:h,rttMs:u,throughputKbps:f}=i;t=`${a.formatNumber(h)}x slowdown (Simulated)`,n=`${a.formatMilliseconds(u)} TCP RTT, ${a.formatKbps(f)} throughput (Simulated)`,r=(()=>u===150&&f===1.6*1024)()?l.runtimeSlow4g:l.runtimeCustom;break}default:r=t=n=l.runtimeUnknown}let s=e.channel==="devtools"?!1:e.screenEmulation.disabled,c=e.channel==="devtools"?e.formFactor==="mobile":e.screenEmulation.mobile,d=l.runtimeMobileEmulation;s?d=l.runtimeNoEmulation:c||(d=l.runtimeDesktopEmulation);let p=s?void 0:`${e.screenEmulation.width}x${e.screenEmulation.height}, DPR ${e.screenEmulation.deviceScaleFactor}`;return{deviceEmulation:d,screenEmulation:p,cpuThrottling:t,networkThrottling:n,summary:r}}static showAsPassed(e){switch(e.scoreDisplayMode){case"manual":case"notApplicable":return!0;case"error":case"informative":return!1;case"numeric":case"binary":default:return Number(e.score)>=R.PASS.minScore}}static calculateRating(e,t){if(t==="manual"||t==="notApplicable")return R.PASS.label;if(t==="error")return R.ERROR.label;if(e===null)return R.FAIL.label;let n=R.FAIL.label;return e>=R.PASS.minScore?n=R.PASS.label:e>=R.AVERAGE.minScore&&(n=R.AVERAGE.label),n}static calculateCategoryFraction(e){let t=0,n=0,r=0,i=0;for(let a of e.auditRefs){let l=o.showAsPassed(a.result);if(!(a.group==="hidden"||a.result.scoreDisplayMode==="manual"||a.result.scoreDisplayMode==="notApplicable")){if(a.result.scoreDisplayMode==="informative"){l||++r;continue}++t,i+=a.weight,l&&n++}}return{numPassed:n,numPassableAudits:t,numInformative:r,totalWeight:i}}static isPluginCategory(e){return e.startsWith("lighthouse-plugin-")}static shouldDisplayAsFraction(e){return e==="timespan"||e==="snapshot"}},ee={varianceDisclaimer:"Values are estimated and may vary. The [performance score is calculated](https://developer.chrome.com/docs/lighthouse/performance/performance-scoring/) directly from these metrics.",calculatorLink:"See calculator.",showRelevantAudits:"Show audits relevant to:",opportunityResourceColumnLabel:"Opportunity",opportunitySavingsColumnLabel:"Estimated Savings",errorMissingAuditInfo:"Report error: no audit information",errorLabel:"Error!",warningHeader:"Warnings: ",warningAuditsGroupTitle:"Passed audits but with warnings",passedAuditsGroupTitle:"Passed audits",notApplicableAuditsGroupTitle:"Not applicable",manualAuditsGroupTitle:"Additional items to manually check",toplevelWarningsMessage:"There were issues affecting this run of Lighthouse:",crcInitialNavigation:"Initial Navigation",crcLongestDurationLabel:"Maximum critical path latency:",snippetExpandButtonLabel:"Expand snippet",snippetCollapseButtonLabel:"Collapse snippet",lsPerformanceCategoryDescription:"[Lighthouse](https://developers.google.com/web/tools/lighthouse/) analysis of the current page on an emulated mobile network. Values are estimated and may vary.",labDataTitle:"Lab Data",thirdPartyResourcesLabel:"Show 3rd-party resources",viewTreemapLabel:"View Treemap",viewTraceLabel:"View Trace",dropdownPrintSummary:"Print Summary",dropdownPrintExpanded:"Print Expanded",dropdownCopyJSON:"Copy JSON",dropdownSaveHTML:"Save as HTML",dropdownSaveJSON:"Save as JSON",dropdownViewer:"Open in Viewer",dropdownSaveGist:"Save as Gist",dropdownDarkTheme:"Toggle Dark Theme",dropdownViewUnthrottledTrace:"View Unthrottled Trace",runtimeSettingsDevice:"Device",runtimeSettingsNetworkThrottling:"Network throttling",runtimeSettingsCPUThrottling:"CPU throttling",runtimeSettingsUANetwork:"User agent (network)",runtimeSettingsBenchmark:"Unthrottled CPU/Memory Power",runtimeSettingsAxeVersion:"Axe version",runtimeSettingsScreenEmulation:"Screen emulation",footerIssue:"File an issue",runtimeNoEmulation:"No emulation",runtimeMobileEmulation:"Emulated Moto G Power",runtimeDesktopEmulation:"Emulated Desktop",runtimeUnknown:"Unknown",runtimeSingleLoad:"Single page load",runtimeAnalysisWindow:"Initial page load",runtimeSingleLoadTooltip:"This data is taken from a single page load, as opposed to field data summarizing many sessions.",throttlingProvided:"Provided by environment",show:"Show",hide:"Hide",expandView:"Expand view",collapseView:"Collapse view",runtimeSlow4g:"Slow 4G throttling",runtimeCustom:"Custom throttling",firstPartyChipLabel:"1st party",openInANewTabTooltip:"Open in a new tab",unattributable:"Unattributable"};var N=class{constructor(e,t){this.dom=e,this.detailsRenderer=t}get _clumpTitles(){return{warning:g.strings.warningAuditsGroupTitle,manual:g.strings.manualAuditsGroupTitle,passed:g.strings.passedAuditsGroupTitle,notApplicable:g.strings.notApplicableAuditsGroupTitle}}renderAudit(e){let t=this.dom.createComponent("audit");return this.populateAuditValues(e,t)}populateAuditValues(e,t){let n=g.strings,r=this.dom.find(".lh-audit",t);r.id=e.result.id;let i=e.result.scoreDisplayMode;e.result.displayValue&&(this.dom.find(".lh-audit__display-text",r).textContent=e.result.displayValue);let a=this.dom.find(".lh-audit__title",r);a.append(this.dom.convertMarkdownCodeSnippets(e.result.title));let l=this.dom.find(".lh-audit__description",r);l.append(this.dom.convertMarkdownLinkSnippets(e.result.description));for(let h of e.relevantMetrics||[]){let u=this.dom.createChildOf(l,"span","lh-audit__adorn");u.title=`Relevant to ${h.result.title}`,u.textContent=h.acronym||h.id}e.stackPacks&&e.stackPacks.forEach(h=>{let u=this.dom.createElement("img","lh-audit__stackpack__img");u.src=h.iconDataURL,u.alt=h.title;let f=this.dom.convertMarkdownLinkSnippets(h.description,{alwaysAppendUtmSource:!0}),b=this.dom.createElement("div","lh-audit__stackpack");b.append(u,f),this.dom.find(".lh-audit__stackpacks",r).append(b)});let s=this.dom.find("details",r);if(e.result.details){let h=this.detailsRenderer.render(e.result.details);h&&(h.classList.add("lh-details"),s.append(h))}if(this.dom.find(".lh-chevron-container",r).append(this._createChevron()),this._setRatingClass(r,e.result.score,i),e.result.scoreDisplayMode==="error"){r.classList.add("lh-audit--error");let h=this.dom.find(".lh-audit__display-text",r);h.textContent=n.errorLabel,h.classList.add("lh-tooltip-boundary");let u=this.dom.createChildOf(h,"div","lh-tooltip lh-tooltip--error");u.textContent=e.result.errorMessage||n.errorMissingAuditInfo}else if(e.result.explanation){let h=this.dom.createChildOf(a,"div","lh-audit-explanation");h.textContent=e.result.explanation}let c=e.result.warnings;if(!c||c.length===0)return r;let d=this.dom.find("summary",s),p=this.dom.createChildOf(d,"div","lh-warnings");if(this.dom.createChildOf(p,"span").textContent=n.warningHeader,c.length===1)p.append(this.dom.createTextNode(c.join("")));else{let h=this.dom.createChildOf(p,"ul");for(let u of c){let f=this.dom.createChildOf(h,"li");f.textContent=u}}return r}injectFinalScreenshot(e,t,n){let r=t["final-screenshot"];if(!r||r.scoreDisplayMode==="error"||!r.details||r.details.type!=="screenshot")return null;let i=this.dom.createElement("img","lh-final-ss-image"),a=r.details.data;i.src=a,i.alt=r.title;let l=this.dom.find(".lh-category .lh-category-header",e),s=this.dom.createElement("div","lh-category-headercol"),c=this.dom.createElement("div","lh-category-headercol lh-category-headercol--separator"),d=this.dom.createElement("div","lh-category-headercol");s.append(...l.childNodes),s.append(n),d.append(i),l.append(s,c,d),l.classList.add("lh-category-header__finalscreenshot")}_createChevron(){let e=this.dom.createComponent("chevron");return this.dom.find("svg.lh-chevron",e)}_setRatingClass(e,t,n){let r=y.calculateRating(t,n);return e.classList.add(`lh-audit--${n.toLowerCase()}`),n!=="informative"&&e.classList.add(`lh-audit--${r}`),e}renderCategoryHeader(e,t,n){let r=this.dom.createComponent("categoryHeader"),i=this.dom.find(".lh-score__gauge",r),a=this.renderCategoryScore(e,t,n);if(i.append(a),e.description){let l=this.dom.convertMarkdownLinkSnippets(e.description);this.dom.find(".lh-category-header__description",r).append(l)}return r}renderAuditGroup(e){let t=this.dom.createElement("div","lh-audit-group"),n=this.dom.createElement("div","lh-audit-group__header");this.dom.createChildOf(n,"span","lh-audit-group__title").textContent=e.title,t.append(n);let r=null;return e.description&&(r=this.dom.convertMarkdownLinkSnippets(e.description),r.classList.add("lh-audit-group__description","lh-audit-group__footer"),t.append(r)),[t,r]}_renderGroupedAudits(e,t){let n=new Map,r="NotAGroup";n.set(r,[]);for(let a of e){let l=a.group||r;if(l==="hidden")continue;let s=n.get(l)||[];s.push(a),n.set(l,s)}let i=[];for(let[a,l]of n){if(a===r){for(let p of l)i.push(this.renderAudit(p));continue}let s=t[a],[c,d]=this.renderAuditGroup(s);for(let p of l)c.insertBefore(this.renderAudit(p),d);c.classList.add(`lh-audit-group--${a}`),i.push(c)}return i}renderUnexpandableClump(e,t){let n=this.dom.createElement("div");return this._renderGroupedAudits(e,t).forEach(i=>n.append(i)),n}renderClump(e,{auditRefs:t,description:n,openByDefault:r}){let i=this.dom.createComponent("clump"),a=this.dom.find(".lh-clump",i);r&&a.setAttribute("open","");let l=this.dom.find(".lh-audit-group__header",a),s=this._clumpTitles[e];this.dom.find(".lh-audit-group__title",l).textContent=s;let c=this.dom.find(".lh-audit-group__itemcount",a);c.textContent=`(${t.length})`;let d=t.map(this.renderAudit.bind(this));a.append(...d);let p=this.dom.find(".lh-audit-group",i);if(n){let h=this.dom.convertMarkdownLinkSnippets(n);h.classList.add("lh-audit-group__description","lh-audit-group__footer"),p.append(h)}return this.dom.find(".lh-clump-toggletext--show",p).textContent=g.strings.show,this.dom.find(".lh-clump-toggletext--hide",p).textContent=g.strings.hide,a.classList.add(`lh-clump--${e.toLowerCase()}`),p}renderCategoryScore(e,t,n){let r;if(n&&y.shouldDisplayAsFraction(n.gatherMode)?r=this.renderCategoryFraction(e):r=this.renderScoreGauge(e,t),n?.omitLabel&&this.dom.find(".lh-gauge__label,.lh-fraction__label",r).remove(),n?.onPageAnchorRendered){let i=this.dom.find("a",r);n.onPageAnchorRendered(i)}return r}renderScoreGauge(e,t){let n=this.dom.createComponent("gauge"),r=this.dom.find("a.lh-gauge__wrapper",n);y.isPluginCategory(e.id)&&r.classList.add("lh-gauge__wrapper--plugin");let i=Number(e.score),a=this.dom.find(".lh-gauge",n),l=this.dom.find("circle.lh-gauge-arc",a);l&&this._setGaugeArc(l,i);let s=Math.round(i*100),c=this.dom.find("div.lh-gauge__percentage",n);return c.textContent=s.toString(),e.score===null&&(c.classList.add("lh-gauge--error"),c.textContent="",c.title=g.strings.errorLabel),e.auditRefs.length===0||this.hasApplicableAudits(e)?r.classList.add(`lh-gauge__wrapper--${y.calculateRating(e.score)}`):(r.classList.add("lh-gauge__wrapper--not-applicable"),c.textContent="-",c.title=g.strings.notApplicableAuditsGroupTitle),this.dom.find(".lh-gauge__label",n).textContent=e.title,n}renderCategoryFraction(e){let t=this.dom.createComponent("fraction"),n=this.dom.find("a.lh-fraction__wrapper",t),{numPassed:r,numPassableAudits:i,totalWeight:a}=y.calculateCategoryFraction(e),l=r/i,s=this.dom.find(".lh-fraction__content",t),c=this.dom.createElement("span");c.textContent=`${r}/${i}`,s.append(c);let d=y.calculateRating(l);return a===0&&(d="null"),n.classList.add(`lh-fraction__wrapper--${d}`),this.dom.find(".lh-fraction__label",t).textContent=e.title,t}hasApplicableAudits(e){return e.auditRefs.some(t=>t.result.scoreDisplayMode!=="notApplicable")}_setGaugeArc(e,t){let n=2*Math.PI*Number(e.getAttribute("r")),r=Number(e.getAttribute("stroke-width")),i=.25*r/n;e.style.transform=`rotate(${-90+i*360}deg)`;let a=t*n-r/2;t===0&&(e.style.opacity="0"),t===1&&(a=n),e.style.strokeDasharray=`${Math.max(a,0)} ${n}`}_auditHasWarning(e){return!!e.result.warnings?.length}_getClumpIdForAuditRef(e){let t=e.result.scoreDisplayMode;return t==="manual"||t==="notApplicable"?t:y.showAsPassed(e.result)?this._auditHasWarning(e)?"warning":"passed":"failed"}render(e,t={},n){let r=this.dom.createElement("div","lh-category");r.id=e.id,r.append(this.renderCategoryHeader(e,t,n));let i=new Map;i.set("failed",[]),i.set("warning",[]),i.set("manual",[]),i.set("passed",[]),i.set("notApplicable",[]);for(let l of e.auditRefs){let s=this._getClumpIdForAuditRef(l),c=i.get(s);c.push(l),i.set(s,c)}for(let l of i.values())l.sort((s,c)=>c.weight-s.weight);let a=i.get("failed")?.length;for(let[l,s]of i){if(s.length===0)continue;if(l==="failed"){let h=this.renderUnexpandableClump(s,t);h.classList.add("lh-clump--failed"),r.append(h);continue}let c=l==="manual"?e.manualDescription:void 0,d=l==="warning"||l==="manual"&&a===0,p=this.renderClump(l,{auditRefs:s,description:c,openByDefault:d});r.append(p)}return r}};var O=class{static initTree(e){let t=0,n=Object.keys(e);return n.length>0&&(t=e[n[0]].request.startTime),{tree:e,startTime:t,transferSize:0}}static createSegment(e,t,n,r,i,a){let l=e[t],s=Object.keys(e),c=s.indexOf(t)===s.length-1,d=!!l.children&&Object.keys(l.children).length>0,p=Array.isArray(i)?i.slice(0):[];return typeof a<"u"&&p.push(!a),{node:l,isLastChild:c,hasChildren:d,startTime:n,transferSize:r+l.request.transferSize,treeMarkers:p}}static createChainNode(e,t,n){let r=e.createComponent("crcChain");e.find(".lh-crc-node",r).setAttribute("title",t.node.request.url);let i=e.find(".lh-crc-node__tree-marker",r);t.treeMarkers.forEach(p=>{let h=p?"lh-tree-marker lh-vert":"lh-tree-marker";i.append(e.createElement("span",h),e.createElement("span","lh-tree-marker"))});let a=t.isLastChild?"lh-tree-marker lh-up-right":"lh-tree-marker lh-vert-right",l=t.hasChildren?"lh-tree-marker lh-horiz-down":"lh-tree-marker lh-right";i.append(e.createElement("span",a),e.createElement("span","lh-tree-marker lh-right"),e.createElement("span",l));let s=t.node.request.url,c=n.renderTextURL(s),d=e.find(".lh-crc-node__tree-value",r);if(d.append(c),!t.hasChildren){let{startTime:p,endTime:h,transferSize:u}=t.node.request,f=e.createElement("span","lh-crc-node__chain-duration");f.textContent=" - "+g.i18n.formatMilliseconds((h-p)*1e3)+", ";let b=e.createElement("span","lh-crc-node__chain-duration");b.textContent=g.i18n.formatBytesToKiB(u,.01),d.append(f,b)}return r}static buildTree(e,t,n,r,i,a){if(r.append(H.createChainNode(e,n,a)),n.node.children)for(let l of Object.keys(n.node.children)){let s=H.createSegment(n.node.children,l,n.startTime,n.transferSize,n.treeMarkers,n.isLastChild);H.buildTree(e,t,s,r,i,a)}}static render(e,t,n){let r=e.createComponent("crc"),i=e.find(".lh-crc",r);e.find(".lh-crc-initial-nav",r).textContent=g.strings.crcInitialNavigation,e.find(".lh-crc__longest_duration_label",r).textContent=g.strings.crcLongestDurationLabel,e.find(".lh-crc__longest_duration",r).textContent=g.i18n.formatMilliseconds(t.longestChain.duration);let a=H.initTree(t.chains);for(let l of Object.keys(a.tree)){let s=H.createSegment(a.tree,l,a.startTime,a.transferSize);H.buildTree(e,r,s,i,t,n)}return e.find(".lh-crc-container",r)}},H=O;function Ue(o,e){return e.left<=o.width&&0<=e.right&&e.top<=o.height&&0<=e.bottom}function re(o,e,t){return o<e?e:o>t?t:o}function Ie(o){return{x:o.left+o.width/2,y:o.top+o.height/2}}var P=class o{static getScreenshotPositions(e,t,n){let r=Ie(e),i=re(r.x-t.width/2,0,n.width-t.width),a=re(r.y-t.height/2,0,n.height-t.height);return{screenshot:{left:i,top:a},clip:{left:e.left-i,top:e.top-a}}}static renderClipPathInScreenshot(e,t,n,r,i){let a=e.find("clipPath",t),l=`clip-${g.getUniqueSuffix()}`;a.id=l,t.style.clipPath=`url(#${l})`;let s=n.top/i.height,c=s+r.height/i.height,d=n.left/i.width,p=d+r.width/i.width,h=[`0,0 1,0 1,${s} 0,${s}`,`0,${c} 1,${c} 1,1 0,1`,`0,${s} ${d},${s} ${d},${c} 0,${c}`,`${p},${s} 1,${s} 1,${c} ${p},${c}`];for(let u of h){let f=e.createElementNS("http://www.w3.org/2000/svg","polygon");f.setAttribute("points",u),a.append(f)}}static installFullPageScreenshot(e,t){e.style.setProperty("--element-screenshot-url",`url('${t.data}')`)}static installOverlayFeature(e){let{dom:t,rootEl:n,overlayContainerEl:r,fullPageScreenshot:i}=e,a="lh-screenshot-overlay--enabled";n.classList.contains(a)||(n.classList.add(a),n.addEventListener("click",l=>{let s=l.target;if(!s)return;let c=s.closest(".lh-node > .lh-element-screenshot");if(!c)return;let d=t.createElement("div","lh-element-screenshot__overlay");r.append(d);let p={width:d.clientWidth*.95,height:d.clientHeight*.8},h={width:Number(c.dataset.rectWidth),height:Number(c.dataset.rectHeight),left:Number(c.dataset.rectLeft),right:Number(c.dataset.rectLeft)+Number(c.dataset.rectWidth),top:Number(c.dataset.rectTop),bottom:Number(c.dataset.rectTop)+Number(c.dataset.rectHeight)},u=o.render(t,i.screenshot,h,p);if(!u){d.remove();return}d.append(u),d.addEventListener("click",()=>d.remove())}))}static _computeZoomFactor(e,t){let r={x:t.width/e.width,y:t.height/e.height},i=.75*Math.min(r.x,r.y);return Math.min(1,i)}static render(e,t,n,r){if(!Ue(t,n))return null;let i=e.createComponent("elementScreenshot"),a=e.find("div.lh-element-screenshot",i);a.dataset.rectWidth=n.width.toString(),a.dataset.rectHeight=n.height.toString(),a.dataset.rectLeft=n.left.toString(),a.dataset.rectTop=n.top.toString();let l=this._computeZoomFactor(n,r),s={width:r.width/l,height:r.height/l};s.width=Math.min(t.width,s.width),s.height=Math.min(t.height,s.height);let c={width:s.width*l,height:s.height*l},d=o.getScreenshotPositions(n,s,{width:t.width,height:t.height}),p=e.find("div.lh-element-screenshot__image",a);p.style.width=c.width+"px",p.style.height=c.height+"px",p.style.backgroundPositionY=-(d.screenshot.top*l)+"px",p.style.backgroundPositionX=-(d.screenshot.left*l)+"px",p.style.backgroundSize=`${t.width*l}px ${t.height*l}px`;let h=e.find("div.lh-element-screenshot__element-marker",a);h.style.width=n.width*l+"px",h.style.height=n.height*l+"px",h.style.left=d.clip.left*l+"px",h.style.top=d.clip.top*l+"px";let u=e.find("div.lh-element-screenshot__mask",a);return u.style.width=c.width+"px",u.style.height=c.height+"px",o.renderClipPathInScreenshot(e,u,d.clip,n,s),a}};var Oe=["http://","https://","data:"],Ve=["bytes","numeric","ms","timespanMs"],V=class{constructor(e,t={}){this._dom=e,this._fullPageScreenshot=t.fullPageScreenshot,this._entities=t.entities}render(e){switch(e.type){case"filmstrip":return this._renderFilmstrip(e);case"list":return this._renderList(e);case"table":case"opportunity":return this._renderTable(e);case"criticalrequestchain":return O.render(this._dom,e,this);case"screenshot":case"debugdata":case"treemap-data":return null;default:return this._renderUnknown(e.type,e)}}_renderBytes(e){let t=g.i18n.formatBytesToKiB(e.value,e.granularity||.1),n=this._renderText(t);return n.title=g.i18n.formatBytes(e.value),n}_renderMilliseconds(e){let t;return e.displayUnit==="duration"?t=g.i18n.formatDuration(e.value):t=g.i18n.formatMilliseconds(e.value,e.granularity||10),this._renderText(t)}renderTextURL(e){let t=e,n,r,i;try{let l=k.parseURL(t);n=l.file==="/"?l.origin:l.file,r=l.file==="/"||l.hostname===""?"":`(${l.hostname})`,i=t}catch{n=t}let a=this._dom.createElement("div","lh-text__url");if(a.append(this._renderLink({text:n,url:t})),r){let l=this._renderText(r);l.classList.add("lh-text__url-host"),a.append(l)}return i&&(a.title=t,a.dataset.url=t),a}_renderLink(e){let t=this._dom.createElement("a");if(this._dom.safelySetHref(t,e.url),!t.href){let n=this._renderText(e.text);return n.classList.add("lh-link"),n}return t.rel="noopener",t.target="_blank",t.textContent=e.text,t.classList.add("lh-link"),t}_renderText(e){let t=this._dom.createElement("div","lh-text");return t.textContent=e,t}_renderNumeric(e){let t=g.i18n.formatNumber(e.value,e.granularity||.1),n=this._dom.createElement("div","lh-numeric");return n.textContent=t,n}_renderThumbnail(e){let t=this._dom.createElement("img","lh-thumbnail"),n=e;return t.src=n,t.title=n,t.alt="",t}_renderUnknown(e,t){console.error(`Unknown details type: ${e}`,t);let n=this._dom.createElement("details","lh-unknown");return this._dom.createChildOf(n,"summary").textContent=`We don't know how to render audit details of type \`${e}\`. The Lighthouse version that collected this data is likely newer than the Lighthouse version of the report renderer. Expand for the raw JSON.`,this._dom.createChildOf(n,"pre").textContent=JSON.stringify(t,null,2),n}_renderTableValue(e,t){if(e==null)return null;if(typeof e=="object")switch(e.type){case"code":return this._renderCode(e.value);case"link":return this._renderLink(e);case"node":return this.renderNode(e);case"numeric":return this._renderNumeric(e);case"source-location":return this.renderSourceLocation(e);case"url":return this.renderTextURL(e.value);default:return this._renderUnknown(e.type,e)}switch(t.valueType){case"bytes":{let n=Number(e);return this._renderBytes({value:n,granularity:t.granularity})}case"code":{let n=String(e);return this._renderCode(n)}case"ms":{let n={value:Number(e),granularity:t.granularity,displayUnit:t.displayUnit};return this._renderMilliseconds(n)}case"numeric":{let n=Number(e);return this._renderNumeric({value:n,granularity:t.granularity})}case"text":{let n=String(e);return this._renderText(n)}case"thumbnail":{let n=String(e);return this._renderThumbnail(n)}case"timespanMs":{let n=Number(e);return this._renderMilliseconds({value:n})}case"url":{let n=String(e);return Oe.some(r=>n.startsWith(r))?this.renderTextURL(n):this._renderCode(n)}default:return this._renderUnknown(t.valueType,e)}}_getDerivedSubItemsHeading(e){return e.subItemsHeading?{key:e.subItemsHeading.key||"",valueType:e.subItemsHeading.valueType||e.valueType,granularity:e.subItemsHeading.granularity||e.granularity,displayUnit:e.subItemsHeading.displayUnit||e.displayUnit,label:""}:null}_renderTableRow(e,t){let n=this._dom.createElement("tr");for(let r of t){if(!r||!r.key){this._dom.createChildOf(n,"td","lh-table-column--empty");continue}let i=e[r.key],a;if(i!=null&&(a=this._renderTableValue(i,r)),a){let l=`lh-table-column--${r.valueType}`;this._dom.createChildOf(n,"td",l).append(a)}else this._dom.createChildOf(n,"td","lh-table-column--empty")}return n}_renderTableRowsFromItem(e,t){let n=this._dom.createFragment();if(n.append(this._renderTableRow(e,t)),!e.subItems)return n;let r=t.map(this._getDerivedSubItemsHeading);if(!r.some(Boolean))return n;for(let i of e.subItems.items){let a=this._renderTableRow(i,r);a.classList.add("lh-sub-item-row"),n.append(a)}return n}_adornEntityGroupRow(e){let t=e.dataset.entity;if(!t)return;let n=this._entities?.find(i=>i.name===t);if(!n)return;let r=this._dom.find("td",e);if(n.category){let i=this._dom.createElement("span");i.classList.add("lh-audit__adorn"),i.textContent=n.category,r.append(" ",i)}if(n.isFirstParty){let i=this._dom.createElement("span");i.classList.add("lh-audit__adorn","lh-audit__adorn1p"),i.textContent=g.strings.firstPartyChipLabel,r.append(" ",i)}if(n.homepage){let i=this._dom.createElement("a");i.href=n.homepage,i.target="_blank",i.title=g.strings.openInANewTabTooltip,i.classList.add("lh-report-icon--external"),r.append(" ",i)}}_renderEntityGroupRow(e,t){let n={...t[0]};n.valueType="text";let r=[n,...t.slice(1)],i=this._dom.createFragment();return i.append(this._renderTableRow(e,r)),this._dom.find("tr",i).classList.add("lh-row--group"),i}_getEntityGroupItems(e){let{items:t,headings:n,sortedBy:r}=e;if(!t.length||e.isEntityGrouped||!t.some(d=>d.entity))return[];let i=new Set(e.skipSumming||[]),a=[];for(let d of n)!d.key||i.has(d.key)||Ve.includes(d.valueType)&&a.push(d.key);let l=n[0].key;if(!l)return[];let s=new Map;for(let d of t){let p=typeof d.entity=="string"?d.entity:void 0,h=s.get(p)||{[l]:p||g.strings.unattributable,entity:p};for(let u of a)h[u]=Number(h[u]||0)+Number(d[u]||0);s.set(p,h)}let c=[...s.values()];return r&&c.sort(y.getTableItemSortComparator(r)),c}_renderTable(e){if(!e.items.length)return this._dom.createElement("span");let t=this._dom.createElement("table","lh-table"),n=this._dom.createChildOf(t,"thead"),r=this._dom.createChildOf(n,"tr");for(let l of e.headings){let c=`lh-table-column--${l.valueType||"text"}`,d=this._dom.createElement("div","lh-text");d.textContent=l.label,this._dom.createChildOf(r,"th",c).append(d)}let i=this._getEntityGroupItems(e),a=this._dom.createChildOf(t,"tbody");if(i.length)for(let l of i){let s=typeof l.entity=="string"?l.entity:void 0,c=this._renderEntityGroupRow(l,e.headings);for(let p of e.items.filter(h=>h.entity===s))c.append(this._renderTableRowsFromItem(p,e.headings));let d=this._dom.findAll("tr",c);s&&d.length&&(d.forEach(p=>p.dataset.entity=s),this._adornEntityGroupRow(d[0])),a.append(c)}else{let l=!0;for(let s of e.items){let c=this._renderTableRowsFromItem(s,e.headings),d=this._dom.findAll("tr",c),p=d[0];if(typeof s.entity=="string"&&(p.dataset.entity=s.entity),e.isEntityGrouped&&s.entity)p.classList.add("lh-row--group"),this._adornEntityGroupRow(p);else for(let h of d)h.classList.add(l?"lh-row--even":"lh-row--odd");l=!l,a.append(c)}}return t}_renderList(e){let t=this._dom.createElement("div","lh-list");return e.items.forEach(n=>{let r=this.render(n);r&&t.append(r)}),t}renderNode(e){let t=this._dom.createElement("span","lh-node");if(e.nodeLabel){let a=this._dom.createElement("div");a.textContent=e.nodeLabel,t.append(a)}if(e.snippet){let a=this._dom.createElement("div");a.classList.add("lh-node__snippet"),a.textContent=e.snippet,t.append(a)}if(e.selector&&(t.title=e.selector),e.path&&t.setAttribute("data-path",e.path),e.selector&&t.setAttribute("data-selector",e.selector),e.snippet&&t.setAttribute("data-snippet",e.snippet),!this._fullPageScreenshot)return t;let n=e.lhId&&this._fullPageScreenshot.nodes[e.lhId];if(!n||n.width===0||n.height===0)return t;let r={width:147,height:100},i=P.render(this._dom,this._fullPageScreenshot.screenshot,n,r);return i&&t.prepend(i),t}renderSourceLocation(e){if(!e.url)return null;let t=`${e.url}:${e.line+1}:${e.column}`,n;e.original&&(n=`${e.original.file||"<unmapped>"}:${e.original.line+1}:${e.original.column}`);let r;if(e.urlProvider==="network"&&n)r=this._renderLink({url:e.url,text:n}),r.title=`maps to generated location ${t}`;else if(e.urlProvider==="network"&&!n)r=this.renderTextURL(e.url),this._dom.find(".lh-link",r).textContent+=`:${e.line+1}:${e.column}`;else if(e.urlProvider==="comment"&&n)r=this._renderText(`${n} (from source map)`),r.title=`${t} (from sourceURL)`;else if(e.urlProvider==="comment"&&!n)r=this._renderText(`${t} (from sourceURL)`);else return null;return r.classList.add("lh-source-location"),r.setAttribute("data-source-url",e.url),r.setAttribute("data-source-line",String(e.line)),r.setAttribute("data-source-column",String(e.column)),r}_renderFilmstrip(e){let t=this._dom.createElement("div","lh-filmstrip");for(let n of e.items){let r=this._dom.createChildOf(t,"div","lh-filmstrip__frame"),i=this._dom.createChildOf(r,"img","lh-filmstrip__thumbnail");i.src=n.data,i.alt="Screenshot"}return t}_renderCode(e){let t=this._dom.createElement("pre","lh-code");return t.textContent=e,t}};var J="\xA0";var G=class{constructor(e){e==="en-XA"&&(e="de"),this._locale=e,this._cachedNumberFormatters=new Map}_formatNumberWithGranularity(e,t,n={}){if(t!==void 0){let a=-Math.log10(t);Number.isInteger(a)||(console.warn(`granularity of ${t} is invalid. Using 1 instead`),t=1),t<1&&(n={...n},n.minimumFractionDigits=n.maximumFractionDigits=Math.ceil(a)),e=Math.round(e/t)*t,Object.is(e,-0)&&(e=0)}else Math.abs(e)<5e-4&&(e=0);let r,i=[n.minimumFractionDigits,n.maximumFractionDigits,n.style,n.unit,n.unitDisplay,this._locale].join("");return r=this._cachedNumberFormatters.get(i),r||(r=new Intl.NumberFormat(this._locale,n),this._cachedNumberFormatters.set(i,r)),r.format(e).replace(" ",J)}formatNumber(e,t){return this._formatNumberWithGranularity(e,t)}formatInteger(e){return this._formatNumberWithGranularity(e,1)}formatPercent(e){return new Intl.NumberFormat(this._locale,{style:"percent"}).format(e)}formatBytesToKiB(e,t=void 0){return this._formatNumberWithGranularity(e/1024,t)+`${J}KiB`}formatBytesToMiB(e,t=void 0){return this._formatNumberWithGranularity(e/1048576,t)+`${J}MiB`}formatBytes(e,t=1){return this._formatNumberWithGranularity(e,t,{style:"unit",unit:"byte",unitDisplay:"long"})}formatBytesWithBestUnit(e,t=.1){return e>=1048576?this.formatBytesToMiB(e,t):e>=1024?this.formatBytesToKiB(e,t):this._formatNumberWithGranularity(e,t,{style:"unit",unit:"byte",unitDisplay:"narrow"})}formatKbps(e,t=void 0){return this._formatNumberWithGranularity(e,t,{style:"unit",unit:"kilobit-per-second",unitDisplay:"short"})}formatMilliseconds(e,t=void 0){return this._formatNumberWithGranularity(e,t,{style:"unit",unit:"millisecond",unitDisplay:"short"})}formatSeconds(e,t=void 0){return this._formatNumberWithGranularity(e/1e3,t,{style:"unit",unit:"second",unitDisplay:"narrow"})}formatDateTime(e){let t={month:"short",day:"numeric",year:"numeric",hour:"numeric",minute:"numeric",timeZoneName:"short"},n;try{n=new Intl.DateTimeFormat(this._locale,t)}catch{t.timeZone="UTC",n=new Intl.DateTimeFormat(this._locale,t)}return n.format(new Date(e))}formatDuration(e){let t=e/1e3;if(Math.round(t)===0)return"None";let n=[],r={day:60*60*24,hour:60*60,minute:60,second:1};return Object.keys(r).forEach(i=>{let a=r[i],l=Math.floor(t/a);if(l>0){t-=l*a;let s=this._formatNumberWithGranularity(l,1,{style:"unit",unit:i,unitDisplay:"narrow"});n.push(s)}}),n.join(" ")}};var W=class extends N{_renderMetric(e){let t=this.dom.createComponent("metric"),n=this.dom.find(".lh-metric",t);n.id=e.result.id;let r=y.calculateRating(e.result.score,e.result.scoreDisplayMode);n.classList.add(`lh-metric--${r}`);let i=this.dom.find(".lh-metric__title",t);i.textContent=e.result.title;let a=this.dom.find(".lh-metric__value",t);a.textContent=e.result.displayValue||"";let l=this.dom.find(".lh-metric__description",t);if(l.append(this.dom.convertMarkdownLinkSnippets(e.result.description)),e.result.scoreDisplayMode==="error"){l.textContent="",a.textContent="Error!";let s=this.dom.createChildOf(l,"span");s.textContent=e.result.errorMessage||"Report error: no metric information"}else e.result.scoreDisplayMode==="notApplicable"&&(a.textContent="--");return n}_renderOpportunity(e,t){let n=this.dom.createComponent("opportunity"),r=this.populateAuditValues(e,n);if(r.id=e.result.id,!e.result.details||e.result.scoreDisplayMode==="error")return r;let i=e.result.details;if(i.overallSavingsMs===void 0)return r;let a=this.dom.find("span.lh-audit__display-text, div.lh-audit__display-text",r),l=`${i.overallSavingsMs/t*100}%`;if(this.dom.find("div.lh-sparkline__bar",r).style.width=l,a.textContent=g.i18n.formatSeconds(i.overallSavingsMs,.01),e.result.displayValue){let s=e.result.displayValue;this.dom.find("div.lh-load-opportunity__sparkline",r).title=s,a.title=s}return r}_getWastedMs(e){if(e.result.details){let t=e.result.details;if(typeof t.overallSavingsMs!="number")throw new Error("non-opportunity details passed to _getWastedMs");return t.overallSavingsMs}else return Number.MIN_VALUE}_getScoringCalculatorHref(e){let t=e.filter(p=>p.group==="metrics"),n=e.find(p=>p.id==="interactive"),r=e.find(p=>p.id==="first-cpu-idle"),i=e.find(p=>p.id==="first-meaningful-paint");n&&t.push(n),r&&t.push(r),i&&t.push(i);let a=p=>Math.round(p*100)/100,s=[...t.map(p=>{let h;return typeof p.result.numericValue=="number"?(h=p.id==="cumulative-layout-shift"?a(p.result.numericValue):Math.round(p.result.numericValue),h=h.toString()):h="null",[p.acronym||p.id,h]})];g.reportJson&&(s.push(["device",g.reportJson.configSettings.formFactor]),s.push(["version",g.reportJson.lighthouseVersion]));let c=new URLSearchParams(s),d=new URL("https://googlechrome.github.io/lighthouse/scorecalc/");return d.hash=c.toString(),d.href}_classifyPerformanceAudit(e){return e.group?null:e.result.details?.overallSavingsMs!==void 0?"load-opportunity":"diagnostic"}render(e,t,n){let r=g.strings,i=this.dom.createElement("div","lh-category");i.id=e.id,i.append(this.renderCategoryHeader(e,t,n));let a=e.auditRefs.filter(m=>m.group==="metrics");if(a.length){let[m,w]=this.renderAuditGroup(t.metrics),v=this.dom.createElement("input","lh-metrics-toggle__input"),x=`lh-metrics-toggle${g.getUniqueSuffix()}`;v.setAttribute("aria-label","Toggle the display of metric descriptions"),v.type="checkbox",v.id=x,m.prepend(v);let E=this.dom.find(".lh-audit-group__header",m),A=this.dom.createChildOf(E,"label","lh-metrics-toggle__label");A.htmlFor=x;let C=this.dom.createChildOf(A,"span","lh-metrics-toggle__labeltext--show"),L=this.dom.createChildOf(A,"span","lh-metrics-toggle__labeltext--hide");C.textContent=g.strings.expandView,L.textContent=g.strings.collapseView;let S=this.dom.createElement("div","lh-metrics-container");if(m.insertBefore(S,w),a.forEach(z=>{S.append(this._renderMetric(z))}),i.querySelector(".lh-gauge__wrapper")){let z=this.dom.find(".lh-category-header__description",i),M=this.dom.createChildOf(z,"div","lh-metrics__disclaimer"),T=this.dom.convertMarkdownLinkSnippets(r.varianceDisclaimer);M.append(T);let F=this.dom.createChildOf(M,"a","lh-calclink");F.target="_blank",F.textContent=r.calculatorLink,this.dom.safelySetHref(F,this._getScoringCalculatorHref(e.auditRefs))}m.classList.add("lh-audit-group--metrics"),i.append(m)}let l=this.dom.createChildOf(i,"div","lh-filmstrip-container"),c=e.auditRefs.find(m=>m.id==="screenshot-thumbnails")?.result;if(c?.details){l.id=c.id;let m=this.detailsRenderer.render(c.details);m&&l.append(m)}let d=e.auditRefs.filter(m=>this._classifyPerformanceAudit(m)==="load-opportunity").filter(m=>!y.showAsPassed(m.result)).sort((m,w)=>this._getWastedMs(w)-this._getWastedMs(m)),p=a.filter(m=>!!m.relevantAudits);if(p.length&&this.renderMetricAuditFilter(p,i),d.length){let w=d.map(S=>this._getWastedMs(S)),v=Math.max(...w),x=Math.max(Math.ceil(v/1e3)*1e3,2e3),[E,A]=this.renderAuditGroup(t["load-opportunities"]),C=this.dom.createComponent("opportunityHeader");this.dom.find(".lh-load-opportunity__col--one",C).textContent=r.opportunityResourceColumnLabel,this.dom.find(".lh-load-opportunity__col--two",C).textContent=r.opportunitySavingsColumnLabel;let L=this.dom.find(".lh-load-opportunity__header",C);E.insertBefore(L,A),d.forEach(S=>E.insertBefore(this._renderOpportunity(S,x),A)),E.classList.add("lh-audit-group--load-opportunities"),i.append(E)}let h=e.auditRefs.filter(m=>this._classifyPerformanceAudit(m)==="diagnostic").filter(m=>!y.showAsPassed(m.result)).sort((m,w)=>{let v=m.result.scoreDisplayMode==="informative"?100:Number(m.result.score),x=w.result.scoreDisplayMode==="informative"?100:Number(w.result.score);return v-x});if(h.length){let[m,w]=this.renderAuditGroup(t.diagnostics);h.forEach(v=>m.insertBefore(this.renderAudit(v),w)),m.classList.add("lh-audit-group--diagnostics"),i.append(m)}let u=e.auditRefs.filter(m=>this._classifyPerformanceAudit(m)&&y.showAsPassed(m.result));if(!u.length)return i;let f={auditRefs:u,groupDefinitions:t},b=this.renderClump("passed",f);i.append(b);let _=[];if(["performance-budget","timing-budget"].forEach(m=>{let w=e.auditRefs.find(v=>v.id===m);if(w?.result.details){let v=this.detailsRenderer.render(w.result.details);v&&(v.id=m,v.classList.add("lh-details","lh-details--budget","lh-audit"),_.push(v))}}),_.length>0){let[m,w]=this.renderAuditGroup(t.budgets);_.forEach(v=>m.insertBefore(v,w)),m.classList.add("lh-audit-group--budgets"),i.append(m)}return i}renderMetricAuditFilter(e,t){let n=this.dom.createElement("div","lh-metricfilter"),r=this.dom.createChildOf(n,"span","lh-metricfilter__text");r.textContent=g.strings.showRelevantAudits;let i=[{acronym:"All"},...e],a=g.getUniqueSuffix();for(let l of i){let s=`metric-${l.acronym}-${a}`,c=this.dom.createChildOf(n,"input","lh-metricfilter__radio");c.type="radio",c.name=`metricsfilter-${a}`,c.id=s;let d=this.dom.createChildOf(n,"label","lh-metricfilter__label");d.htmlFor=s,d.title=l.result?.title,d.textContent=l.acronym||l.id,l.acronym==="All"&&(c.checked=!0,d.classList.add("lh-metricfilter__label--active")),t.append(n),c.addEventListener("input",p=>{for(let u of t.querySelectorAll("label.lh-metricfilter__label"))u.classList.toggle("lh-metricfilter__label--active",u.htmlFor===s);t.classList.toggle("lh-category--filtered",l.acronym!=="All");for(let u of t.querySelectorAll("div.lh-audit")){if(l.acronym==="All"){u.hidden=!1;continue}u.hidden=!0,l.relevantAudits&&l.relevantAudits.includes(u.id)&&(u.hidden=!1)}let h=t.querySelectorAll("div.lh-audit-group, details.lh-audit-group");for(let u of h){u.hidden=!1;let f=Array.from(u.querySelectorAll("div.lh-audit")),b=!!f.length&&f.every(_=>_.hidden);u.hidden=b}})}}};var j=class o extends N{render(e,t={}){let n=this.dom.createElement("div","lh-category");n.id=e.id,n.append(this.renderCategoryHeader(e,t));let r=e.auditRefs,i=r.filter(c=>c.result.scoreDisplayMode!=="manual"),a=this._renderAudits(i,t);n.append(a);let l=r.filter(c=>c.result.scoreDisplayMode==="manual"),s=this.renderClump("manual",{auditRefs:l,description:e.manualDescription,openByDefault:!0});return n.append(s),n}renderCategoryScore(e,t){if(e.score===null)return super.renderScoreGauge(e,t);let n=this.dom.createComponent("gaugePwa"),r=this.dom.find("a.lh-gauge--pwa__wrapper",n),i=n.querySelector("svg");if(!i)throw new Error("no SVG element found in PWA score gauge template");o._makeSvgReferencesUnique(i);let a=this._getGroupIds(e.auditRefs),l=this._getPassingGroupIds(e.auditRefs);if(l.size===a.size)r.classList.add("lh-badged--all");else for(let s of l)r.classList.add(`lh-badged--${s}`);return this.dom.find(".lh-gauge__label",n).textContent=e.title,r.title=this._getGaugeTooltip(e.auditRefs,t),n}_getGroupIds(e){let t=e.map(n=>n.group).filter(n=>!!n);return new Set(t)}_getPassingGroupIds(e){let t=this._getGroupIds(e);for(let n of e)!y.showAsPassed(n.result)&&n.group&&t.delete(n.group);return t}_getGaugeTooltip(e,t){let n=this._getGroupIds(e),r=[];for(let i of n){let a=e.filter(d=>d.group===i),l=a.length,s=a.filter(d=>y.showAsPassed(d.result)).length,c=t[i].title;r.push(`${c}: ${s}/${l}`)}return r.join(", ")}_renderAudits(e,t){let n=this.renderUnexpandableClump(e,t),r=this._getPassingGroupIds(e);for(let i of r)this.dom.find(`.lh-audit-group--${i}`,n).classList.add("lh-badged");return n}static _makeSvgReferencesUnique(e){let t=e.querySelector("defs");if(!t)return;let n=g.getUniqueSuffix(),r=t.querySelectorAll("[id]");for(let i of r){let a=i.id,l=`${a}-${n}`;i.id=l;let s=e.querySelectorAll(`use[href="#${a}"]`);for(let d of s)d.setAttribute("href",`#${l}`);let c=e.querySelectorAll(`[fill="url(#${a})"]`);for(let d of c)d.setAttribute("fill",`url(#${l})`)}}};var $=class{constructor(e){this._dom=e,this._opts={}}renderReport(e,t,n){if(!this._dom.rootEl&&t){console.warn("Please adopt the new report API in renderer/api.js.");let i=t.closest(".lh-root");i?this._dom.rootEl=i:(t.classList.add("lh-root","lh-vars"),this._dom.rootEl=t)}else this._dom.rootEl&&t&&(this._dom.rootEl=t);n&&(this._opts=n),this._dom.setLighthouseChannel(e.configSettings.channel||"unknown");let r=y.prepareReportResult(e);return this._dom.rootEl.textContent="",this._dom.rootEl.append(this._renderReport(r)),this._dom.rootEl}_renderReportTopbar(e){let t=this._dom.createComponent("topbar"),n=this._dom.find("a.lh-topbar__url",t);return n.textContent=e.finalDisplayedUrl,n.title=e.finalDisplayedUrl,this._dom.safelySetHref(n,e.finalDisplayedUrl),t}_renderReportHeader(){let e=this._dom.createComponent("heading"),t=this._dom.createComponent("scoresWrapper");return this._dom.find(".lh-scores-wrapper-placeholder",e).replaceWith(t),e}_renderReportFooter(e){let t=this._dom.createComponent("footer");return this._renderMetaBlock(e,t),this._dom.find(".lh-footer__version_issue",t).textContent=g.strings.footerIssue,this._dom.find(".lh-footer__version",t).textContent=e.lighthouseVersion,t}_renderMetaBlock(e,t){let n=y.getEmulationDescriptions(e.configSettings||{}),r=e.userAgent.match(/(\w*Chrome\/[\d.]+)/),i=Array.isArray(r)?r[1].replace("/"," ").replace("Chrome","Chromium"):"Chromium",a=e.configSettings.channel,l=e.environment.benchmarkIndex.toFixed(0),s=e.environment.credits?.["axe-core"],c=[`${g.strings.runtimeSettingsBenchmark}: ${l}`,`${g.strings.runtimeSettingsCPUThrottling}: ${n.cpuThrottling}`];n.screenEmulation&&c.push(`${g.strings.runtimeSettingsScreenEmulation}: ${n.screenEmulation}`),s&&c.push(`${g.strings.runtimeSettingsAxeVersion}: ${s}`);let d=[["date",`Captured at ${g.i18n.formatDateTime(e.fetchTime)}`],["devices",`${n.deviceEmulation} with Lighthouse ${e.lighthouseVersion}`,c.join(`
2482
- `)],["samples-one",g.strings.runtimeSingleLoad,g.strings.runtimeSingleLoadTooltip],["stopwatch",g.strings.runtimeAnalysisWindow],["networkspeed",`${n.summary}`,`${g.strings.runtimeSettingsNetworkThrottling}: ${n.networkThrottling}`],["chrome",`Using ${i}`+(a?` with ${a}`:""),`${g.strings.runtimeSettingsUANetwork}: "${e.environment.networkUserAgent}"`]],p=this._dom.find(".lh-meta__items",t);for(let[h,u,f]of d){let b=this._dom.createChildOf(p,"li","lh-meta__item");if(b.textContent=u,f){b.classList.add("lh-tooltip-boundary");let _=this._dom.createChildOf(b,"div","lh-tooltip");_.textContent=f}b.classList.add("lh-report-icon",`lh-report-icon--${h}`)}}_renderReportWarnings(e){if(!e.runWarnings||e.runWarnings.length===0)return this._dom.createElement("div");let t=this._dom.createComponent("warningsToplevel"),n=this._dom.find(".lh-warnings__msg",t);n.textContent=g.strings.toplevelWarningsMessage;let r=[];for(let i of e.runWarnings){let a=this._dom.createElement("li");a.append(this._dom.convertMarkdownLinkSnippets(i)),r.push(a)}return this._dom.find("ul",t).append(...r),t}_renderScoreGauges(e,t,n){let r=[],i=[],a=[];for(let l of Object.values(e.categories)){let s=n[l.id]||t,c=s.renderCategoryScore(l,e.categoryGroups||{},{gatherMode:e.gatherMode}),d=this._dom.find("a.lh-gauge__wrapper, a.lh-fraction__wrapper",c);d&&(this._dom.safelySetHref(d,`#${l.id}`),d.addEventListener("click",p=>{if(!d.matches('[href^="#"]'))return;let h=d.getAttribute("href"),u=this._dom.rootEl;if(!h||!u)return;let f=this._dom.find(h,u);p.preventDefault(),f.scrollIntoView()}),this._opts.onPageAnchorRendered?.(d)),y.isPluginCategory(l.id)?a.push(c):s.renderCategoryScore===t.renderCategoryScore?r.push(c):i.push(c)}return[...r,...i,...a]}_renderReport(e){g.apply({providedStrings:e.i18n.rendererFormattedStrings,i18n:new G(e.configSettings.locale),reportJson:e});let t=new V(this._dom,{fullPageScreenshot:e.fullPageScreenshot??void 0,entities:e.entities}),n=new N(this._dom,t),r={performance:new W(this._dom,t),pwa:new j(this._dom,t)},i=this._dom.createElement("div");i.append(this._renderReportHeader());let a=this._dom.createElement("div","lh-container"),l=this._dom.createElement("div","lh-report");l.append(this._renderReportWarnings(e));let s;Object.keys(e.categories).length===1?i.classList.add("lh-header--solo-category"):s=this._dom.createElement("div","lh-scores-header");let d=this._dom.createElement("div");if(d.classList.add("lh-scorescale-wrap"),d.append(this._dom.createComponent("scorescale")),s){let f=this._dom.find(".lh-scores-container",i);s.append(...this._renderScoreGauges(e,n,r)),f.append(s,d);let b=this._dom.createElement("div","lh-sticky-header");b.append(...this._renderScoreGauges(e,n,r)),a.append(b)}let p=this._dom.createElement("div","lh-categories");l.append(p);let h={gatherMode:e.gatherMode};for(let f of Object.values(e.categories)){let b=r[f.id]||n;b.dom.createChildOf(p,"div","lh-category-wrapper").append(b.render(f,e.categoryGroups,h))}n.injectFinalScreenshot(p,e.audits,d);let u=this._dom.createFragment();return this._opts.omitGlobalStyles||u.append(this._dom.createComponent("styles")),this._opts.omitTopbar||u.append(this._renderReportTopbar(e)),u.append(a),l.append(this._renderReportFooter(e)),a.append(i,l),e.fullPageScreenshot&&P.installFullPageScreenshot(this._dom.rootEl,e.fullPageScreenshot.screenshot),u}};function U(o,e){let t=o.rootEl;typeof e>"u"?t.classList.toggle("lh-dark"):t.classList.toggle("lh-dark",e)}var $e=typeof btoa<"u"?btoa:o=>Buffer.from(o).toString("base64"),Be=typeof atob<"u"?atob:o=>Buffer.from(o,"base64").toString();async function Ge(o,e){let t=new TextEncoder().encode(o);if(e.gzip)if(typeof CompressionStream<"u"){let i=new CompressionStream("gzip"),a=i.writable.getWriter();a.write(t),a.close();let l=await new Response(i.readable).arrayBuffer();t=new Uint8Array(l)}else t=window.pako.gzip(o);let n="",r=5e3;for(let i=0;i<t.length;i+=r)n+=String.fromCharCode(...t.subarray(i,i+r));return $e(n)}function We(o,e){let t=Be(o),n=Uint8Array.from(t,r=>r.charCodeAt(0));return e.gzip?window.pako.ungzip(n,{to:"string"}):new TextDecoder().decode(n)}var oe={toBase64:Ge,fromBase64:We};function Z(){let o=window.location.host.endsWith(".vercel.app"),e=new URLSearchParams(window.location.search).has("dev");return o?`https://${window.location.host}/gh-pages`:e?"http://localhost:7333":"https://googlechrome.github.io/lighthouse"}function Q(o){let e=o.generatedTime,t=o.fetchTime||e;return`${o.lighthouseVersion}-${o.finalDisplayedUrl}-${t}`}function je(o,e,t){let n=new URL(e).origin;window.addEventListener("message",function i(a){a.origin===n&&r&&a.data.opened&&(r.postMessage(o,n),window.removeEventListener("message",i))});let r=window.open(e,t)}async function ie(o,e,t){let n=new URL(e),r=!!window.CompressionStream;n.hash=await oe.toBase64(JSON.stringify(o),{gzip:r}),r&&n.searchParams.set("gzip","1"),window.open(n.toString(),t)}async function ae(o){let e="viewer-"+Q(o),t=Z()+"/viewer/";await ie({lhr:o},t,e)}async function le(o){let e="viewer-"+Q(o),t=Z()+"/viewer/";je({lhr:o},t,e)}function se(o){if(!o.audits["script-treemap-data"].details)throw new Error("no script treemap data found");let t={lhr:{mainDocumentUrl:o.mainDocumentUrl,finalUrl:o.finalUrl,finalDisplayedUrl:o.finalDisplayedUrl,audits:{"script-treemap-data":o.audits["script-treemap-data"]},configSettings:{locale:o.configSettings.locale}}},n=Z()+"/treemap/",r="treemap-"+Q(o);ie(t,n,r)}var q=class{constructor(e){this._dom=e,this._toggleEl,this._menuEl,this.onDocumentKeyDown=this.onDocumentKeyDown.bind(this),this.onToggleClick=this.onToggleClick.bind(this),this.onToggleKeydown=this.onToggleKeydown.bind(this),this.onMenuFocusOut=this.onMenuFocusOut.bind(this),this.onMenuKeydown=this.onMenuKeydown.bind(this),this._getNextMenuItem=this._getNextMenuItem.bind(this),this._getNextSelectableNode=this._getNextSelectableNode.bind(this),this._getPreviousMenuItem=this._getPreviousMenuItem.bind(this)}setup(e){this._toggleEl=this._dom.find(".lh-topbar button.lh-tools__button",this._dom.rootEl),this._toggleEl.addEventListener("click",this.onToggleClick),this._toggleEl.addEventListener("keydown",this.onToggleKeydown),this._menuEl=this._dom.find(".lh-topbar div.lh-tools__dropdown",this._dom.rootEl),this._menuEl.addEventListener("keydown",this.onMenuKeydown),this._menuEl.addEventListener("click",e)}close(){this._toggleEl.classList.remove("lh-active"),this._toggleEl.setAttribute("aria-expanded","false"),this._menuEl.contains(this._dom.document().activeElement)&&this._toggleEl.focus(),this._menuEl.removeEventListener("focusout",this.onMenuFocusOut),this._dom.document().removeEventListener("keydown",this.onDocumentKeyDown)}open(e){this._toggleEl.classList.contains("lh-active")?e.focus():this._menuEl.addEventListener("transitionend",()=>{e.focus()},{once:!0}),this._toggleEl.classList.add("lh-active"),this._toggleEl.setAttribute("aria-expanded","true"),this._menuEl.addEventListener("focusout",this.onMenuFocusOut),this._dom.document().addEventListener("keydown",this.onDocumentKeyDown)}onToggleClick(e){e.preventDefault(),e.stopImmediatePropagation(),this._toggleEl.classList.contains("lh-active")?this.close():this.open(this._getNextMenuItem())}onToggleKeydown(e){switch(e.code){case"ArrowUp":e.preventDefault(),this.open(this._getPreviousMenuItem());break;case"ArrowDown":case"Enter":case" ":e.preventDefault(),this.open(this._getNextMenuItem());break;default:}}onMenuKeydown(e){let t=e.target;switch(e.code){case"ArrowUp":e.preventDefault(),this._getPreviousMenuItem(t).focus();break;case"ArrowDown":e.preventDefault(),this._getNextMenuItem(t).focus();break;case"Home":e.preventDefault(),this._getNextMenuItem().focus();break;case"End":e.preventDefault(),this._getPreviousMenuItem().focus();break;default:}}onDocumentKeyDown(e){e.keyCode===27&&this.close()}onMenuFocusOut(e){let t=e.relatedTarget;this._menuEl.contains(t)||this.close()}_getNextSelectableNode(e,t){let n=e.filter(i=>!(!(i instanceof HTMLElement)||i.hasAttribute("disabled")||window.getComputedStyle(i).display==="none")),r=t?n.indexOf(t)+1:0;return r>=n.length&&(r=0),n[r]}_getNextMenuItem(e){let t=Array.from(this._menuEl.childNodes);return this._getNextSelectableNode(t,e)}_getPreviousMenuItem(e){let t=Array.from(this._menuEl.childNodes).reverse();return this._getNextSelectableNode(t,e)}};var K=class{constructor(e,t){this.lhr,this._reportUIFeatures=e,this._dom=t,this._dropDownMenu=new q(this._dom),this._copyAttempt=!1,this.topbarEl,this.categoriesEl,this.stickyHeaderEl,this.highlightEl,this.onDropDownMenuClick=this.onDropDownMenuClick.bind(this),this.onKeyUp=this.onKeyUp.bind(this),this.onCopy=this.onCopy.bind(this),this.collapseAllDetails=this.collapseAllDetails.bind(this)}enable(e){this.lhr=e,this._dom.rootEl.addEventListener("keyup",this.onKeyUp),this._dom.document().addEventListener("copy",this.onCopy),this._dropDownMenu.setup(this.onDropDownMenuClick),this._setUpCollapseDetailsAfterPrinting(),this._dom.find(".lh-topbar__logo",this._dom.rootEl).addEventListener("click",()=>U(this._dom)),this._setupStickyHeader()}onDropDownMenuClick(e){e.preventDefault();let t=e.target;if(!(!t||!t.hasAttribute("data-action"))){switch(t.getAttribute("data-action")){case"copy":this.onCopyButtonClick();break;case"print-summary":this.collapseAllDetails(),this._print();break;case"print-expanded":this.expandAllDetails(),this._print();break;case"save-json":{let n=JSON.stringify(this.lhr,null,2);this._reportUIFeatures._saveFile(new Blob([n],{type:"application/json"}));break}case"save-html":{let n=this._reportUIFeatures.getReportHtml();try{this._reportUIFeatures._saveFile(new Blob([n],{type:"text/html"}))}catch(r){this._dom.fireEventOn("lh-log",this._dom.document(),{cmd:"error",msg:"Could not export as HTML. "+r.message})}break}case"open-viewer":{this._dom.isDevTools()?ae(this.lhr):le(this.lhr);break}case"save-gist":{this._reportUIFeatures.saveAsGist();break}case"toggle-dark":{U(this._dom);break}case"view-unthrottled-trace":this._reportUIFeatures._opts.onViewTrace?.()}this._dropDownMenu.close()}}onCopy(e){this._copyAttempt&&e.clipboardData&&(e.preventDefault(),e.clipboardData.setData("text/plain",JSON.stringify(this.lhr,null,2)),this._dom.fireEventOn("lh-log",this._dom.document(),{cmd:"log",msg:"Report JSON copied to clipboard"})),this._copyAttempt=!1}onCopyButtonClick(){this._dom.fireEventOn("lh-analytics",this._dom.document(),{cmd:"send",fields:{hitType:"event",eventCategory:"report",eventAction:"copy"}});try{this._dom.document().queryCommandSupported("copy")&&(this._copyAttempt=!0,this._dom.document().execCommand("copy")||(this._copyAttempt=!1,this._dom.fireEventOn("lh-log",this._dom.document(),{cmd:"warn",msg:"Your browser does not support copy to clipboard."})))}catch(e){this._copyAttempt=!1,this._dom.fireEventOn("lh-log",this._dom.document(),{cmd:"log",msg:e.message})}}onKeyUp(e){(e.ctrlKey||e.metaKey)&&e.keyCode===80&&this._dropDownMenu.close()}expandAllDetails(){this._dom.findAll(".lh-categories details",this._dom.rootEl).map(t=>t.open=!0)}collapseAllDetails(){this._dom.findAll(".lh-categories details",this._dom.rootEl).map(t=>t.open=!1)}_print(){this._reportUIFeatures._opts.onPrintOverride?this._reportUIFeatures._opts.onPrintOverride(this._dom.rootEl):self.print()}resetUIState(){this._dropDownMenu.close()}_getScrollParent(e){let{overflowY:t}=window.getComputedStyle(e);return t!=="visible"&&t!=="hidden"?e:e.parentElement?this._getScrollParent(e.parentElement):document}_setUpCollapseDetailsAfterPrinting(){"onbeforeprint"in self?self.addEventListener("afterprint",this.collapseAllDetails):self.matchMedia("print").addListener(t=>{t.matches?this.expandAllDetails():this.collapseAllDetails()})}_setupStickyHeader(){this.topbarEl=this._dom.find("div.lh-topbar",this._dom.rootEl),this.categoriesEl=this._dom.find("div.lh-categories",this._dom.rootEl),window.requestAnimationFrame(()=>window.requestAnimationFrame(()=>{try{this.stickyHeaderEl=this._dom.find("div.lh-sticky-header",this._dom.rootEl)}catch{return}this.highlightEl=this._dom.createChildOf(this.stickyHeaderEl,"div","lh-highlighter");let e=this._getScrollParent(this._dom.find(".lh-container",this._dom.rootEl));e.addEventListener("scroll",()=>this._updateStickyHeader());let t=e instanceof window.Document?document.documentElement:e;new window.ResizeObserver(()=>this._updateStickyHeader()).observe(t)}))}_updateStickyHeader(){if(!this.stickyHeaderEl)return;let e=this.topbarEl.getBoundingClientRect().bottom,t=this.categoriesEl.getBoundingClientRect().top,n=e>=t,i=Array.from(this._dom.rootEl.querySelectorAll(".lh-category")).filter(p=>p.getBoundingClientRect().top-window.innerHeight/2<0),a=i.length>0?i.length-1:0,l=this.stickyHeaderEl.querySelectorAll(".lh-gauge__wrapper, .lh-fraction__wrapper"),s=l[a],c=l[0].getBoundingClientRect().left,d=s.getBoundingClientRect().left-c;this.highlightEl.style.transform=`translate(${d}px)`,this.stickyHeaderEl.classList.toggle("lh-sticky-header--visible",n)}};function qe(o,e){let t=e?new Date(e):new Date,n=t.toLocaleTimeString("en-US",{hour12:!1}),r=t.toLocaleDateString("en-US",{year:"numeric",month:"2-digit",day:"2-digit"}).split("/");r.unshift(r.pop());let i=r.join("-");return`${o}_${i}_${n}`.replace(/[/?<>\\:*|"]/g,"-")}function ce(o){let e=new URL(o.finalDisplayedUrl).hostname;return qe(e,o.fetchTime)}function Ke(o){return Array.from(o.tBodies[0].rows)}var B=class{constructor(e,t={}){this.json,this._dom=e,this._opts=t,this._topbar=t.omitTopbar?null:new K(this,e),this.onMediaQueryChange=this.onMediaQueryChange.bind(this)}initFeatures(e){this.json=e,this._fullPageScreenshot=k.getFullPageScreenshot(e),this._topbar&&(this._topbar.enable(e),this._topbar.resetUIState()),this._setupMediaQueryListeners(),this._setupThirdPartyFilter(),this._setupElementScreenshotOverlay(this._dom.rootEl);let t=this._dom.isDevTools()||this._opts.disableDarkMode||this._opts.disableAutoDarkModeAndFireworks;!t&&window.matchMedia("(prefers-color-scheme: dark)").matches&&U(this._dom,!0);let r=["performance","accessibility","best-practices","seo"].every(s=>{let c=e.categories[s];return c&&c.score===1}),i=this._opts.disableFireworks||this._opts.disableAutoDarkModeAndFireworks;if(r&&!i&&(this._enableFireworks(),t||U(this._dom,!0)),e.categories.performance&&e.categories.performance.auditRefs.some(s=>!!(s.group==="metrics"&&e.audits[s.id].errorMessage))){let s=this._dom.find("input.lh-metrics-toggle__input",this._dom.rootEl);s.checked=!0}this.json.audits["script-treemap-data"]&&this.json.audits["script-treemap-data"].details&&this.addButton({text:g.strings.viewTreemapLabel,icon:"treemap",onClick:()=>se(this.json)}),this._opts.onViewTrace&&(e.configSettings.throttlingMethod==="simulate"?this._dom.find('a[data-action="view-unthrottled-trace"]',this._dom.rootEl).classList.remove("lh-hidden"):this.addButton({text:g.strings.viewTraceLabel,onClick:()=>this._opts.onViewTrace?.()})),this._opts.getStandaloneReportHTML&&this._dom.find('a[data-action="save-html"]',this._dom.rootEl).classList.remove("lh-hidden");for(let s of this._dom.findAll("[data-i18n]",this._dom.rootEl)){let d=s.getAttribute("data-i18n");s.textContent=g.strings[d]}}addButton(e){let t=this._dom.rootEl.querySelector(".lh-audit-group--metrics");if(!t)return;let n=t.querySelector(".lh-buttons");n||(n=this._dom.createChildOf(t,"div","lh-buttons"));let r=["lh-button"];e.icon&&(r.push("lh-report-icon"),r.push(`lh-report-icon--${e.icon}`));let i=this._dom.createChildOf(n,"button",r.join(" "));return i.textContent=e.text,i.addEventListener("click",e.onClick),i}resetUIState(){this._topbar&&this._topbar.resetUIState()}getReportHtml(){if(!this._opts.getStandaloneReportHTML)throw new Error("`getStandaloneReportHTML` is not set");return this.resetUIState(),this._opts.getStandaloneReportHTML()}saveAsGist(){throw new Error("Cannot save as gist from base report")}_enableFireworks(){this._dom.find(".lh-scores-container",this._dom.rootEl).classList.add("lh-score100")}_setupMediaQueryListeners(){let e=self.matchMedia("(max-width: 500px)");e.addListener(this.onMediaQueryChange),this.onMediaQueryChange(e)}_resetUIState(){this._topbar&&this._topbar.resetUIState()}onMediaQueryChange(e){this._dom.rootEl.classList.toggle("lh-narrow",e.matches)}_setupThirdPartyFilter(){let e=["uses-rel-preconnect","third-party-facades"],t=["legacy-javascript"];Array.from(this._dom.rootEl.querySelectorAll("table.lh-table")).filter(i=>i.querySelector("td.lh-table-column--url, td.lh-table-column--source-location")).filter(i=>{let a=i.closest(".lh-audit");if(!a)throw new Error(".lh-table not within audit");return!e.includes(a.id)}).forEach(i=>{let a=Ke(i),l=a.filter(_=>!_.classList.contains("lh-sub-item-row")),s=this._getThirdPartyRows(l,k.getFinalDisplayedUrl(this.json)),c=a.some(_=>_.classList.contains("lh-row--even")),d=this._dom.createComponent("3pFilter"),p=this._dom.find("input",d);p.addEventListener("change",_=>{let m=_.target instanceof HTMLInputElement&&!_.target.checked,w=!0,v=l[0];for(;v;){let x=m&&s.includes(v);do v.classList.toggle("lh-row--hidden",x),c&&(v.classList.toggle("lh-row--even",!x&&w),v.classList.toggle("lh-row--odd",!x&&!w)),v=v.nextElementSibling;while(v&&v.classList.contains("lh-sub-item-row"));x||(w=!w)}});let h=s.filter(_=>!_.classList.contains("lh-row--group")).length;this._dom.find(".lh-3p-filter-count",d).textContent=`${h}`,this._dom.find(".lh-3p-ui-string",d).textContent=g.strings.thirdPartyResourcesLabel;let u=s.length===l.length,f=!s.length;if((u||f)&&(this._dom.find("div.lh-3p-filter",d).hidden=!0),!i.parentNode)return;i.parentNode.insertBefore(d,i);let b=i.closest(".lh-audit");if(!b)throw new Error(".lh-table not within audit");t.includes(b.id)&&!u&&p.click()})}_setupElementScreenshotOverlay(e){this._fullPageScreenshot&&P.installOverlayFeature({dom:this._dom,rootEl:e,overlayContainerEl:e,fullPageScreenshot:this._fullPageScreenshot})}_getThirdPartyRows(e,t){let n=k.getRootDomain(t),r=this.json.entities?.find(a=>a.isFirstParty===!0)?.name,i=[];for(let a of e){if(r){if(!a.dataset.entity||a.dataset.entity===r)continue}else{let l=a.querySelector("div.lh-text__url");if(!l)continue;let s=l.dataset.url;if(!s||!(k.getRootDomain(s)!==n))continue}i.push(a)}return i}_saveFile(e){let t=e.type.match("json")?".json":".html",n=ce({finalDisplayedUrl:k.getFinalDisplayedUrl(this.json),fetchTime:this.json.fetchTime})+t;this._opts.onSaveFileOverride?this._opts.onSaveFileOverride(e,n):this._dom.saveFile(e,n)}};function Je(o,e={}){let t=document.createElement("article");t.classList.add("lh-root","lh-vars");let n=new I(t.ownerDocument,t);return new $(n).renderReport(o,t,e),new B(n,e).initFeatures(o),t}function Ze(o,e){return{lhr:o,missingIcuMessageIds:[]}}function Qe(o,e){}function Ye(o){return!1}var Xe={registerLocaleData:Qe,hasLocale:Ye};export{I as DOM,$ as ReportRenderer,B as ReportUIFeatures,Xe as format,Je as renderReport,Ze as swapLocale};
2615
+ `),e.append(t);let n=r.createElement("div","lh-topbar"),o=r.createElementNS("http://www.w3.org/2000/svg","svg","lh-topbar__logo");o.setAttribute("role","img"),o.setAttribute("title","Lighthouse logo"),o.setAttribute("fill","none"),o.setAttribute("xmlns","http://www.w3.org/2000/svg"),o.setAttribute("viewBox","0 0 48 48");let i=r.createElementNS("http://www.w3.org/2000/svg","path");i.setAttribute("d","m14 7 10-7 10 7v10h5v7h-5l5 24H9l5-24H9v-7h5V7Z"),i.setAttribute("fill","#F63");let a=r.createElementNS("http://www.w3.org/2000/svg","path");a.setAttribute("d","M31.561 24H14l-1.689 8.105L31.561 24ZM18.983 48H9l1.022-4.907L35.723 32.27l1.663 7.98L18.983 48Z"),a.setAttribute("fill","#FFA385");let l=r.createElementNS("http://www.w3.org/2000/svg","path");l.setAttribute("fill","#FF3"),l.setAttribute("d","M20.5 10h7v7h-7z"),o.append(" ",i," ",a," ",l," ");let s=r.createElement("a","lh-topbar__url");s.setAttribute("href",""),s.setAttribute("target","_blank"),s.setAttribute("rel","noopener");let c=r.createElement("div","lh-tools"),d=r.createElement("div","lh-tools-locale lh-hidden"),p=r.createElement("button","lh-button lh-tool-locale__button");p.setAttribute("id","lh-button__swap-locales"),p.setAttribute("title","Show Language Picker"),p.setAttribute("aria-label","Toggle language picker"),p.setAttribute("aria-haspopup","menu"),p.setAttribute("aria-expanded","false"),p.setAttribute("aria-controls","lh-tools-locale__selector-wrapper");let h=r.createElementNS("http://www.w3.org/2000/svg","svg");h.setAttribute("width","20px"),h.setAttribute("height","20px"),h.setAttribute("viewBox","0 0 24 24"),h.setAttribute("fill","currentColor");let g=r.createElementNS("http://www.w3.org/2000/svg","path");g.setAttribute("d","M0 0h24v24H0V0z"),g.setAttribute("fill","none");let v=r.createElementNS("http://www.w3.org/2000/svg","path");v.setAttribute("d","M12.87 15.07l-2.54-2.51.03-.03c1.74-1.94 2.98-4.17 3.71-6.53H17V4h-7V2H8v2H1v1.99h11.17C11.5 7.92 10.44 9.75 9 11.35 8.07 10.32 7.3 9.19 6.69 8h-2c.73 1.63 1.73 3.17 2.98 4.56l-5.09 5.02L4 19l5-5 3.11 3.11.76-2.04zM18.5 10h-2L12 22h2l1.12-3h4.75L21 22h2l-4.5-12zm-2.62 7l1.62-4.33L19.12 17h-3.24z"),h.append(g,v),p.append(" ",h," ");let b=r.createElement("div","lh-tools-locale__selector-wrapper");b.setAttribute("id","lh-tools-locale__selector-wrapper"),b.setAttribute("role","menu"),b.setAttribute("aria-labelledby","lh-button__swap-locales"),b.setAttribute("aria-hidden","true"),b.append(" "," "),d.append(" ",p," ",b," ");let f=r.createElement("button","lh-tools__button");f.setAttribute("id","lh-tools-button"),f.setAttribute("title","Tools menu"),f.setAttribute("aria-label","Toggle report tools menu"),f.setAttribute("aria-haspopup","menu"),f.setAttribute("aria-expanded","false"),f.setAttribute("aria-controls","lh-tools-dropdown");let u=r.createElementNS("http://www.w3.org/2000/svg","svg");u.setAttribute("width","100%"),u.setAttribute("height","100%"),u.setAttribute("viewBox","0 0 24 24");let w=r.createElementNS("http://www.w3.org/2000/svg","path");w.setAttribute("d","M0 0h24v24H0z"),w.setAttribute("fill","none");let _=r.createElementNS("http://www.w3.org/2000/svg","path");_.setAttribute("d","M12 8c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2zm0 2c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm0 6c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2z"),u.append(" ",w," ",_," "),f.append(" ",u," ");let E=r.createElement("div","lh-tools__dropdown");E.setAttribute("id","lh-tools-dropdown"),E.setAttribute("role","menu"),E.setAttribute("aria-labelledby","lh-tools-button");let S=r.createElement("a","lh-report-icon lh-report-icon--print");S.setAttribute("role","menuitem"),S.setAttribute("tabindex","-1"),S.setAttribute("href","#"),S.setAttribute("data-i18n","dropdownPrintSummary"),S.setAttribute("data-action","print-summary");let z=r.createElement("a","lh-report-icon lh-report-icon--print");z.setAttribute("role","menuitem"),z.setAttribute("tabindex","-1"),z.setAttribute("href","#"),z.setAttribute("data-i18n","dropdownPrintExpanded"),z.setAttribute("data-action","print-expanded");let M=r.createElement("a","lh-report-icon lh-report-icon--copy");M.setAttribute("role","menuitem"),M.setAttribute("tabindex","-1"),M.setAttribute("href","#"),M.setAttribute("data-i18n","dropdownCopyJSON"),M.setAttribute("data-action","copy");let F=r.createElement("a","lh-report-icon lh-report-icon--download lh-hidden");F.setAttribute("role","menuitem"),F.setAttribute("tabindex","-1"),F.setAttribute("href","#"),F.setAttribute("data-i18n","dropdownSaveHTML"),F.setAttribute("data-action","save-html");let T=r.createElement("a","lh-report-icon lh-report-icon--download");T.setAttribute("role","menuitem"),T.setAttribute("tabindex","-1"),T.setAttribute("href","#"),T.setAttribute("data-i18n","dropdownSaveJSON"),T.setAttribute("data-action","save-json");let A=r.createElement("a","lh-report-icon lh-report-icon--open");A.setAttribute("role","menuitem"),A.setAttribute("tabindex","-1"),A.setAttribute("href","#"),A.setAttribute("data-i18n","dropdownViewer"),A.setAttribute("data-action","open-viewer");let L=r.createElement("a","lh-report-icon lh-report-icon--open");L.setAttribute("role","menuitem"),L.setAttribute("tabindex","-1"),L.setAttribute("href","#"),L.setAttribute("data-i18n","dropdownSaveGist"),L.setAttribute("data-action","save-gist");let D=r.createElement("a","lh-report-icon lh-report-icon--open lh-hidden");D.setAttribute("role","menuitem"),D.setAttribute("tabindex","-1"),D.setAttribute("href","#"),D.setAttribute("data-i18n","dropdownViewUnthrottledTrace"),D.setAttribute("data-action","view-unthrottled-trace");let R=r.createElement("a","lh-report-icon lh-report-icon--dark");return R.setAttribute("role","menuitem"),R.setAttribute("tabindex","-1"),R.setAttribute("href","#"),R.setAttribute("data-i18n","dropdownDarkTheme"),R.setAttribute("data-action","toggle-dark"),E.append(" ",S," ",z," ",M," "," ",F," ",T," ",A," ",L," "," ",D," ",R," "),c.append(" ",d," ",f," ",E," "),n.append(" "," ",o," ",s," ",c," "),e.append(n),e}function ht(r){let e=r.createFragment(),t=r.createElement("div","lh-warnings lh-warnings--toplevel"),n=r.createElement("p","lh-warnings__msg"),o=r.createElement("ul");return t.append(" ",n," ",o," "),e.append(t),e}function _e(r,e){switch(e){case"3pFilter":return Oe(r);case"audit":return Be(r);case"categoryHeader":return je(r);case"chevron":return qe(r);case"clump":return We(r);case"crc":return Ke(r);case"crcChain":return Je(r);case"elementScreenshot":return Ze(r);case"explodeyGauge":return Qe(r);case"footer":return Xe(r);case"fraction":return Ye(r);case"gauge":return et(r);case"gaugePwa":return tt(r);case"heading":return nt(r);case"metric":return rt(r);case"scorescale":return ot(r);case"scoresWrapper":return it(r);case"snippet":return at(r);case"snippetContent":return lt(r);case"snippetHeader":return st(r);case"snippetLine":return ct(r);case"styles":return dt(r);case"topbar":return pt(r);case"warningsToplevel":return ht(r)}throw new Error("unexpected component: "+e)}var X=class{constructor(e,t){this._document=e,this._lighthouseChannel="unknown",this._componentCache=new Map,this.rootEl=t}createElement(e,t){let n=this._document.createElement(e);if(t)for(let o of t.split(/\s+/))o&&n.classList.add(o);return n}createElementNS(e,t,n){let o=this._document.createElementNS(e,t);if(n)for(let i of n.split(/\s+/))i&&o.classList.add(i);return o}createSVGElement(e,t){return this._document.createElementNS("http://www.w3.org/2000/svg",e,t)}createFragment(){return this._document.createDocumentFragment()}createTextNode(e){return this._document.createTextNode(e)}createChildOf(e,t,n){let o=this.createElement(t,n);return e.append(o),o}createComponent(e){let t=this._componentCache.get(e);if(t){let o=t.cloneNode(!0);return this.findAll("style",o).forEach(i=>i.remove()),o}return t=_e(this,e),this._componentCache.set(e,t),t.cloneNode(!0)}clearComponentCache(){this._componentCache.clear()}convertMarkdownLinkSnippets(e,t={}){let n=this.createElement("span");for(let o of k.splitMarkdownLink(e)){let i=o.text.includes("`")?this.convertMarkdownCodeSnippets(o.text):o.text;if(!o.isLink){n.append(i);continue}let a=new URL(o.linkHref);(["https://developers.google.com","https://web.dev","https://developer.chrome.com"].includes(a.origin)||t.alwaysAppendUtmSource)&&(a.searchParams.set("utm_source","lighthouse"),a.searchParams.set("utm_medium",this._lighthouseChannel));let s=this.createElement("a");s.rel="noopener",s.target="_blank",s.append(i),this.safelySetHref(s,a.href),n.append(s)}return n}safelySetHref(e,t){if(t=t||"",t.startsWith("#")){e.href=t;return}let n=["https:","http:"],o;try{o=new URL(t)}catch{}o&&n.includes(o.protocol)&&(e.href=o.href)}safelySetBlobHref(e,t){if(t.type!=="text/html"&&t.type!=="application/json")throw new Error("Unsupported blob type");let n=URL.createObjectURL(t);e.href=n}convertMarkdownCodeSnippets(e){let t=this.createElement("span");for(let n of k.splitMarkdownCodeSpans(e))if(n.isCode){let o=this.createElement("code");o.textContent=n.text,t.append(o)}else t.append(this._document.createTextNode(n.text));return t}setLighthouseChannel(e){this._lighthouseChannel=e}document(){return this._document}isDevTools(){return!!this._document.querySelector(".lh-devtools")}find(e,t){let n=this.maybeFind(e,t);if(n===null)throw new Error(`query ${e} not found`);return n}maybeFind(e,t){return t.querySelector(e)}findAll(e,t){return Array.from(t.querySelectorAll(e))}fireEventOn(e,t=this._document,n){let o=new CustomEvent(e,n?{detail:n}:void 0);t.dispatchEvent(o)}saveFile(e,t){let n=this.createElement("a");n.download=t,this.safelySetBlobHref(n,e),this._document.body.append(n),n.click(),this._document.body.removeChild(n),setTimeout(()=>URL.revokeObjectURL(n.href),500)}};var we=0,m=class r{static i18n=null;static strings={};static reportJson=null;static apply(e){r.strings={...ye,...e.providedStrings},r.i18n=e.i18n,r.reportJson=e.reportJson}static getUniqueSuffix(){return we++}static resetUniqueSuffix(){we=0}};var xe="data:image/jpeg;base64,";function Ee(r){r.configSettings.locale||(r.configSettings.locale="en"),r.configSettings.formFactor||(r.configSettings.formFactor=r.configSettings.emulatedFormFactor),r.finalDisplayedUrl=k.getFinalDisplayedUrl(r),r.mainDocumentUrl=k.getMainDocumentUrl(r);for(let n of Object.values(r.audits))if((n.scoreDisplayMode==="not_applicable"||n.scoreDisplayMode==="not-applicable")&&(n.scoreDisplayMode="notApplicable"),n.details){if((n.details.type===void 0||n.details.type==="diagnostic")&&(n.details.type="debugdata"),n.details.type==="filmstrip")for(let o of n.details.items)o.data.startsWith(xe)||(o.data=xe+o.data);if(n.details.type==="table")for(let o of n.details.headings){let{itemType:i,text:a}=o;i!==void 0&&(o.valueType=i,delete o.itemType),a!==void 0&&(o.label=a,delete o.text);let l=o.subItemsHeading?.itemType;o.subItemsHeading&&l!==void 0&&(o.subItemsHeading.valueType=l,delete o.subItemsHeading.itemType)}if(n.id==="third-party-summary"&&(n.details.type==="opportunity"||n.details.type==="table")){let{headings:o,items:i}=n.details;if(o[0].valueType==="link"){o[0].valueType="text";for(let a of i)typeof a.entity=="object"&&a.entity.type==="link"&&(a.entity=a.entity.text);n.details.isEntityGrouped=!0}}}let[e]=r.lighthouseVersion.split(".").map(Number),t=r.categories.performance;if(e<9&&t){r.categoryGroups||(r.categoryGroups={}),r.categoryGroups.hidden={title:""};for(let n of t.auditRefs)n.group?["load-opportunities","diagnostics"].includes(n.group)&&delete n.group:n.group="hidden"}if(r.environment||(r.environment={benchmarkIndex:0,networkUserAgent:r.userAgent,hostUserAgent:r.userAgent}),r.configSettings.screenEmulation||(r.configSettings.screenEmulation={width:-1,height:-1,deviceScaleFactor:-1,mobile:/mobile/i.test(r.environment.hostUserAgent),disabled:!1}),r.i18n||(r.i18n={}),r.audits["full-page-screenshot"]){let n=r.audits["full-page-screenshot"].details;n?r.fullPageScreenshot={screenshot:n.screenshot,nodes:n.nodes}:r.fullPageScreenshot=null,delete r.audits["full-page-screenshot"]}}var G=k.RATINGS,x=class r{static prepareReportResult(e){let t=JSON.parse(JSON.stringify(e));Ee(t);for(let o of Object.values(t.audits))o.details&&(o.details.type==="opportunity"||o.details.type==="table")&&!o.details.isEntityGrouped&&t.entities&&r.classifyEntities(t.entities,o.details);if(typeof t.categories!="object")throw new Error("No categories provided.");let n=new Map;for(let o of Object.values(t.categories))o.auditRefs.forEach(i=>{i.relevantAudits&&i.relevantAudits.forEach(a=>{let l=n.get(a)||[];l.push(i),n.set(a,l)})}),o.auditRefs.forEach(i=>{let a=t.audits[i.id];i.result=a,n.has(i.id)&&(i.relevantMetrics=n.get(i.id)),t.stackPacks&&t.stackPacks.forEach(l=>{l.descriptions[i.id]&&(i.stackPacks=i.stackPacks||[],i.stackPacks.push({title:l.title,iconDataURL:l.iconDataURL,description:l.descriptions[i.id]}))})});return t}static getUrlLocatorFn(e){let t=e.find(o=>o.valueType==="url")?.key;if(t&&typeof t=="string")return o=>{let i=o[t];if(typeof i=="string")return i};let n=e.find(o=>o.valueType==="source-location")?.key;if(n)return o=>{let i=o[n];if(typeof i=="object"&&i.type==="source-location")return i.url}}static classifyEntities(e,t){let{items:n,headings:o}=t;if(!n.length||n.some(a=>a.entity))return;let i=r.getUrlLocatorFn(o);if(i)for(let a of n){let l=i(a);if(!l)continue;let s="";try{s=k.parseURL(l).origin}catch{}if(!s)continue;let c=e.find(d=>d.origins.includes(s));c&&(a.entity=c.name)}}static getTableItemSortComparator(e){return(t,n)=>{for(let o of e){let i=t[o],a=n[o];if((typeof i!=typeof a||!["number","string"].includes(typeof i))&&console.warn(`Warning: Attempting to sort unsupported value type: ${o}.`),typeof i=="number"&&typeof a=="number"&&i!==a)return a-i;if(typeof i=="string"&&typeof a=="string"&&i!==a)return i.localeCompare(a)}return 0}}static getEmulationDescriptions(e){let t,n,o,i=e.throttling,a=m.i18n,l=m.strings;switch(e.throttlingMethod){case"provided":o=n=t=l.throttlingProvided;break;case"devtools":{let{cpuSlowdownMultiplier:h,requestLatencyMs:g}=i;t=`${a.formatNumber(h)}x slowdown (DevTools)`,n=`${a.formatMilliseconds(g)} HTTP RTT, ${a.formatKbps(i.downloadThroughputKbps)} down, ${a.formatKbps(i.uploadThroughputKbps)} up (DevTools)`,o=(()=>g===150*3.75&&i.downloadThroughputKbps===1.6*1024*.9&&i.uploadThroughputKbps===750*.9)()?l.runtimeSlow4g:l.runtimeCustom;break}case"simulate":{let{cpuSlowdownMultiplier:h,rttMs:g,throughputKbps:v}=i;t=`${a.formatNumber(h)}x slowdown (Simulated)`,n=`${a.formatMilliseconds(g)} TCP RTT, ${a.formatKbps(v)} throughput (Simulated)`,o=(()=>g===150&&v===1.6*1024)()?l.runtimeSlow4g:l.runtimeCustom;break}default:o=t=n=l.runtimeUnknown}let s=e.channel==="devtools"?!1:e.screenEmulation.disabled,c=e.channel==="devtools"?e.formFactor==="mobile":e.screenEmulation.mobile,d=l.runtimeMobileEmulation;s?d=l.runtimeNoEmulation:c||(d=l.runtimeDesktopEmulation);let p=s?void 0:`${e.screenEmulation.width}x${e.screenEmulation.height}, DPR ${e.screenEmulation.deviceScaleFactor}`;return{deviceEmulation:d,screenEmulation:p,cpuThrottling:t,networkThrottling:n,summary:o}}static showAsPassed(e){switch(e.scoreDisplayMode){case"manual":case"notApplicable":return!0;case"error":case"informative":return!1;case"numeric":case"binary":default:return Number(e.score)>=G.PASS.minScore}}static calculateRating(e,t){if(t==="manual"||t==="notApplicable")return G.PASS.label;if(t==="error")return G.ERROR.label;if(e===null)return G.FAIL.label;let n=G.FAIL.label;return e>=G.PASS.minScore?n=G.PASS.label:e>=G.AVERAGE.minScore&&(n=G.AVERAGE.label),n}static calculateCategoryFraction(e){let t=0,n=0,o=0,i=0;for(let a of e.auditRefs){let l=r.showAsPassed(a.result);if(!(a.group==="hidden"||a.result.scoreDisplayMode==="manual"||a.result.scoreDisplayMode==="notApplicable")){if(a.result.scoreDisplayMode==="informative"){l||++o;continue}++t,i+=a.weight,l&&n++}}return{numPassed:n,numPassableAudits:t,numInformative:o,totalWeight:i}}static isPluginCategory(e){return e.startsWith("lighthouse-plugin-")}static shouldDisplayAsFraction(e){return e==="timespan"||e==="snapshot"}},ye={varianceDisclaimer:"Values are estimated and may vary. The [performance score is calculated](https://developer.chrome.com/docs/lighthouse/performance/performance-scoring/) directly from these metrics.",calculatorLink:"See calculator.",showRelevantAudits:"Show audits relevant to:",opportunityResourceColumnLabel:"Opportunity",opportunitySavingsColumnLabel:"Estimated Savings",errorMissingAuditInfo:"Report error: no audit information",errorLabel:"Error!",warningHeader:"Warnings: ",warningAuditsGroupTitle:"Passed audits but with warnings",passedAuditsGroupTitle:"Passed audits",notApplicableAuditsGroupTitle:"Not applicable",manualAuditsGroupTitle:"Additional items to manually check",toplevelWarningsMessage:"There were issues affecting this run of Lighthouse:",crcInitialNavigation:"Initial Navigation",crcLongestDurationLabel:"Maximum critical path latency:",snippetExpandButtonLabel:"Expand snippet",snippetCollapseButtonLabel:"Collapse snippet",lsPerformanceCategoryDescription:"[Lighthouse](https://developers.google.com/web/tools/lighthouse/) analysis of the current page on an emulated mobile network. Values are estimated and may vary.",labDataTitle:"Lab Data",thirdPartyResourcesLabel:"Show 3rd-party resources",viewTreemapLabel:"View Treemap",viewTraceLabel:"View Trace",dropdownPrintSummary:"Print Summary",dropdownPrintExpanded:"Print Expanded",dropdownCopyJSON:"Copy JSON",dropdownSaveHTML:"Save as HTML",dropdownSaveJSON:"Save as JSON",dropdownViewer:"Open in Viewer",dropdownSaveGist:"Save as Gist",dropdownDarkTheme:"Toggle Dark Theme",dropdownViewUnthrottledTrace:"View Unthrottled Trace",runtimeSettingsDevice:"Device",runtimeSettingsNetworkThrottling:"Network throttling",runtimeSettingsCPUThrottling:"CPU throttling",runtimeSettingsUANetwork:"User agent (network)",runtimeSettingsBenchmark:"Unthrottled CPU/Memory Power",runtimeSettingsAxeVersion:"Axe version",runtimeSettingsScreenEmulation:"Screen emulation",footerIssue:"File an issue",runtimeNoEmulation:"No emulation",runtimeMobileEmulation:"Emulated Moto G Power",runtimeDesktopEmulation:"Emulated Desktop",runtimeUnknown:"Unknown",runtimeSingleLoad:"Single page load",runtimeAnalysisWindow:"Initial page load",runtimeSingleLoadTooltip:"This data is taken from a single page load, as opposed to field data summarizing many sessions.",throttlingProvided:"Provided by environment",show:"Show",hide:"Hide",expandView:"Expand view",collapseView:"Collapse view",runtimeSlow4g:"Slow 4G throttling",runtimeCustom:"Custom throttling",firstPartyChipLabel:"1st party",openInANewTabTooltip:"Open in a new tab",unattributable:"Unattributable"};var V=class{constructor(e,t){this.dom=e,this.detailsRenderer=t}get _clumpTitles(){return{warning:m.strings.warningAuditsGroupTitle,manual:m.strings.manualAuditsGroupTitle,passed:m.strings.passedAuditsGroupTitle,notApplicable:m.strings.notApplicableAuditsGroupTitle}}renderAudit(e){let t=this.dom.createComponent("audit");return this.populateAuditValues(e,t)}populateAuditValues(e,t){let n=m.strings,o=this.dom.find(".lh-audit",t);o.id=e.result.id;let i=e.result.scoreDisplayMode;e.result.displayValue&&(this.dom.find(".lh-audit__display-text",o).textContent=e.result.displayValue);let a=this.dom.find(".lh-audit__title",o);a.append(this.dom.convertMarkdownCodeSnippets(e.result.title));let l=this.dom.find(".lh-audit__description",o);l.append(this.dom.convertMarkdownLinkSnippets(e.result.description));for(let h of e.relevantMetrics||[]){let g=this.dom.createChildOf(l,"span","lh-audit__adorn");g.title=`Relevant to ${h.result.title}`,g.textContent=h.acronym||h.id}e.stackPacks&&e.stackPacks.forEach(h=>{let g=this.dom.createElement("img","lh-audit__stackpack__img");g.src=h.iconDataURL,g.alt=h.title;let v=this.dom.convertMarkdownLinkSnippets(h.description,{alwaysAppendUtmSource:!0}),b=this.dom.createElement("div","lh-audit__stackpack");b.append(g,v),this.dom.find(".lh-audit__stackpacks",o).append(b)});let s=this.dom.find("details",o);if(e.result.details){let h=this.detailsRenderer.render(e.result.details);h&&(h.classList.add("lh-details"),s.append(h))}if(this.dom.find(".lh-chevron-container",o).append(this._createChevron()),this._setRatingClass(o,e.result.score,i),e.result.scoreDisplayMode==="error"){o.classList.add("lh-audit--error");let h=this.dom.find(".lh-audit__display-text",o);h.textContent=n.errorLabel,h.classList.add("lh-tooltip-boundary");let g=this.dom.createChildOf(h,"div","lh-tooltip lh-tooltip--error");g.textContent=e.result.errorMessage||n.errorMissingAuditInfo}else if(e.result.explanation){let h=this.dom.createChildOf(a,"div","lh-audit-explanation");h.textContent=e.result.explanation}let c=e.result.warnings;if(!c||c.length===0)return o;let d=this.dom.find("summary",s),p=this.dom.createChildOf(d,"div","lh-warnings");if(this.dom.createChildOf(p,"span").textContent=n.warningHeader,c.length===1)p.append(this.dom.createTextNode(c.join("")));else{let h=this.dom.createChildOf(p,"ul");for(let g of c){let v=this.dom.createChildOf(h,"li");v.textContent=g}}return o}injectFinalScreenshot(e,t,n){let o=t["final-screenshot"];if(!o||o.scoreDisplayMode==="error"||!o.details||o.details.type!=="screenshot")return null;let i=this.dom.createElement("img","lh-final-ss-image"),a=o.details.data;i.src=a,i.alt=o.title;let l=this.dom.find(".lh-category .lh-category-header",e),s=this.dom.createElement("div","lh-category-headercol"),c=this.dom.createElement("div","lh-category-headercol lh-category-headercol--separator"),d=this.dom.createElement("div","lh-category-headercol");s.append(...l.childNodes),s.append(n),d.append(i),l.append(s,c,d),l.classList.add("lh-category-header__finalscreenshot")}_createChevron(){let e=this.dom.createComponent("chevron");return this.dom.find("svg.lh-chevron",e)}_setRatingClass(e,t,n){let o=x.calculateRating(t,n);return e.classList.add(`lh-audit--${n.toLowerCase()}`),n!=="informative"&&e.classList.add(`lh-audit--${o}`),e}renderCategoryHeader(e,t,n){let o=this.dom.createComponent("categoryHeader"),i=this.dom.find(".lh-score__gauge",o),a=this.renderCategoryScore(e,t,n);if(i.append(a),e.description){let l=this.dom.convertMarkdownLinkSnippets(e.description);this.dom.find(".lh-category-header__description",o).append(l)}return o}renderAuditGroup(e){let t=this.dom.createElement("div","lh-audit-group"),n=this.dom.createElement("div","lh-audit-group__header");this.dom.createChildOf(n,"span","lh-audit-group__title").textContent=e.title,t.append(n);let o=null;return e.description&&(o=this.dom.convertMarkdownLinkSnippets(e.description),o.classList.add("lh-audit-group__description","lh-audit-group__footer"),t.append(o)),[t,o]}_renderGroupedAudits(e,t){let n=new Map,o="NotAGroup";n.set(o,[]);for(let a of e){let l=a.group||o;if(l==="hidden")continue;let s=n.get(l)||[];s.push(a),n.set(l,s)}let i=[];for(let[a,l]of n){if(a===o){for(let p of l)i.push(this.renderAudit(p));continue}let s=t[a],[c,d]=this.renderAuditGroup(s);for(let p of l)c.insertBefore(this.renderAudit(p),d);c.classList.add(`lh-audit-group--${a}`),i.push(c)}return i}renderUnexpandableClump(e,t){let n=this.dom.createElement("div");return this._renderGroupedAudits(e,t).forEach(i=>n.append(i)),n}renderClump(e,{auditRefs:t,description:n,openByDefault:o}){let i=this.dom.createComponent("clump"),a=this.dom.find(".lh-clump",i);o&&a.setAttribute("open","");let l=this.dom.find(".lh-audit-group__header",a),s=this._clumpTitles[e];this.dom.find(".lh-audit-group__title",l).textContent=s;let c=this.dom.find(".lh-audit-group__itemcount",a);c.textContent=`(${t.length})`;let d=t.map(this.renderAudit.bind(this));a.append(...d);let p=this.dom.find(".lh-audit-group",i);if(n){let h=this.dom.convertMarkdownLinkSnippets(n);h.classList.add("lh-audit-group__description","lh-audit-group__footer"),p.append(h)}return this.dom.find(".lh-clump-toggletext--show",p).textContent=m.strings.show,this.dom.find(".lh-clump-toggletext--hide",p).textContent=m.strings.hide,a.classList.add(`lh-clump--${e.toLowerCase()}`),p}renderCategoryScore(e,t,n){let o;if(n&&x.shouldDisplayAsFraction(n.gatherMode)?o=this.renderCategoryFraction(e):o=this.renderScoreGauge(e,t),n?.omitLabel&&this.dom.find(".lh-gauge__label,.lh-fraction__label",o).remove(),n?.onPageAnchorRendered){let i=this.dom.find("a",o);n.onPageAnchorRendered(i)}return o}renderScoreGauge(e,t){let n=this.dom.createComponent("gauge"),o=this.dom.find("a.lh-gauge__wrapper",n);x.isPluginCategory(e.id)&&o.classList.add("lh-gauge__wrapper--plugin");let i=Number(e.score),a=this.dom.find(".lh-gauge",n),l=this.dom.find("circle.lh-gauge-arc",a);l&&this._setGaugeArc(l,i);let s=Math.round(i*100),c=this.dom.find("div.lh-gauge__percentage",n);return c.textContent=s.toString(),e.score===null&&(c.classList.add("lh-gauge--error"),c.textContent="",c.title=m.strings.errorLabel),e.auditRefs.length===0||this.hasApplicableAudits(e)?o.classList.add(`lh-gauge__wrapper--${x.calculateRating(e.score)}`):(o.classList.add("lh-gauge__wrapper--not-applicable"),c.textContent="-",c.title=m.strings.notApplicableAuditsGroupTitle),this.dom.find(".lh-gauge__label",n).textContent=e.title,n}renderCategoryFraction(e){let t=this.dom.createComponent("fraction"),n=this.dom.find("a.lh-fraction__wrapper",t),{numPassed:o,numPassableAudits:i,totalWeight:a}=x.calculateCategoryFraction(e),l=o/i,s=this.dom.find(".lh-fraction__content",t),c=this.dom.createElement("span");c.textContent=`${o}/${i}`,s.append(c);let d=x.calculateRating(l);return a===0&&(d="null"),n.classList.add(`lh-fraction__wrapper--${d}`),this.dom.find(".lh-fraction__label",t).textContent=e.title,t}hasApplicableAudits(e){return e.auditRefs.some(t=>t.result.scoreDisplayMode!=="notApplicable")}_setGaugeArc(e,t){let n=2*Math.PI*Number(e.getAttribute("r")),o=Number(e.getAttribute("stroke-width")),i=.25*o/n;e.style.transform=`rotate(${-90+i*360}deg)`;let a=t*n-o/2;t===0&&(e.style.opacity="0"),t===1&&(a=n),e.style.strokeDasharray=`${Math.max(a,0)} ${n}`}_auditHasWarning(e){return!!e.result.warnings?.length}_getClumpIdForAuditRef(e){let t=e.result.scoreDisplayMode;return t==="manual"||t==="notApplicable"?t:x.showAsPassed(e.result)?this._auditHasWarning(e)?"warning":"passed":"failed"}render(e,t={},n){let o=this.dom.createElement("div","lh-category");o.id=e.id,o.append(this.renderCategoryHeader(e,t,n));let i=new Map;i.set("failed",[]),i.set("warning",[]),i.set("manual",[]),i.set("passed",[]),i.set("notApplicable",[]);for(let l of e.auditRefs){let s=this._getClumpIdForAuditRef(l),c=i.get(s);c.push(l),i.set(s,c)}for(let l of i.values())l.sort((s,c)=>c.weight-s.weight);let a=i.get("failed")?.length;for(let[l,s]of i){if(s.length===0)continue;if(l==="failed"){let h=this.renderUnexpandableClump(s,t);h.classList.add("lh-clump--failed"),o.append(h);continue}let c=l==="manual"?e.manualDescription:void 0,d=l==="warning"||l==="manual"&&a===0,p=this.renderClump(l,{auditRefs:s,description:c,openByDefault:d});o.append(p)}return o}};var Y=class{static initTree(e){let t=0,n=Object.keys(e);return n.length>0&&(t=e[n[0]].request.startTime),{tree:e,startTime:t,transferSize:0}}static createSegment(e,t,n,o,i,a){let l=e[t],s=Object.keys(e),c=s.indexOf(t)===s.length-1,d=!!l.children&&Object.keys(l.children).length>0,p=Array.isArray(i)?i.slice(0):[];return typeof a<"u"&&p.push(!a),{node:l,isLastChild:c,hasChildren:d,startTime:n,transferSize:o+l.request.transferSize,treeMarkers:p}}static createChainNode(e,t,n){let o=e.createComponent("crcChain");e.find(".lh-crc-node",o).setAttribute("title",t.node.request.url);let i=e.find(".lh-crc-node__tree-marker",o);t.treeMarkers.forEach(p=>{let h=p?"lh-tree-marker lh-vert":"lh-tree-marker";i.append(e.createElement("span",h),e.createElement("span","lh-tree-marker"))});let a=t.isLastChild?"lh-tree-marker lh-up-right":"lh-tree-marker lh-vert-right",l=t.hasChildren?"lh-tree-marker lh-horiz-down":"lh-tree-marker lh-right";i.append(e.createElement("span",a),e.createElement("span","lh-tree-marker lh-right"),e.createElement("span",l));let s=t.node.request.url,c=n.renderTextURL(s),d=e.find(".lh-crc-node__tree-value",o);if(d.append(c),!t.hasChildren){let{startTime:p,endTime:h,transferSize:g}=t.node.request,v=e.createElement("span","lh-crc-node__chain-duration");v.textContent=" - "+m.i18n.formatMilliseconds((h-p)*1e3)+", ";let b=e.createElement("span","lh-crc-node__chain-duration");b.textContent=m.i18n.formatBytesToKiB(g,.01),d.append(v,b)}return o}static buildTree(e,t,n,o,i,a){if(o.append(W.createChainNode(e,n,a)),n.node.children)for(let l of Object.keys(n.node.children)){let s=W.createSegment(n.node.children,l,n.startTime,n.transferSize,n.treeMarkers,n.isLastChild);W.buildTree(e,t,s,o,i,a)}}static render(e,t,n){let o=e.createComponent("crc"),i=e.find(".lh-crc",o);e.find(".lh-crc-initial-nav",o).textContent=m.strings.crcInitialNavigation,e.find(".lh-crc__longest_duration_label",o).textContent=m.strings.crcLongestDurationLabel,e.find(".lh-crc__longest_duration",o).textContent=m.i18n.formatMilliseconds(t.longestChain.duration);let a=W.initTree(t.chains);for(let l of Object.keys(a.tree)){let s=W.createSegment(a.tree,l,a.startTime,a.transferSize);W.buildTree(e,o,s,i,t,n)}return e.find(".lh-crc-container",o)}},W=Y;function gt(r,e){return e.left<=r.width&&0<=e.right&&e.top<=r.height&&0<=e.bottom}function ke(r,e,t){return r<e?e:r>t?t:r}function ut(r){return{x:r.left+r.width/2,y:r.top+r.height/2}}var O=class r{static getScreenshotPositions(e,t,n){let o=ut(e),i=ke(o.x-t.width/2,0,n.width-t.width),a=ke(o.y-t.height/2,0,n.height-t.height);return{screenshot:{left:i,top:a},clip:{left:e.left-i,top:e.top-a}}}static renderClipPathInScreenshot(e,t,n,o,i){let a=e.find("clipPath",t),l=`clip-${m.getUniqueSuffix()}`;a.id=l,t.style.clipPath=`url(#${l})`;let s=n.top/i.height,c=s+o.height/i.height,d=n.left/i.width,p=d+o.width/i.width,h=[`0,0 1,0 1,${s} 0,${s}`,`0,${c} 1,${c} 1,1 0,1`,`0,${s} ${d},${s} ${d},${c} 0,${c}`,`${p},${s} 1,${s} 1,${c} ${p},${c}`];for(let g of h){let v=e.createElementNS("http://www.w3.org/2000/svg","polygon");v.setAttribute("points",g),a.append(v)}}static installFullPageScreenshot(e,t){e.style.setProperty("--element-screenshot-url",`url('${t.data}')`)}static installOverlayFeature(e){let{dom:t,rootEl:n,overlayContainerEl:o,fullPageScreenshot:i}=e,a="lh-screenshot-overlay--enabled";n.classList.contains(a)||(n.classList.add(a),n.addEventListener("click",l=>{let s=l.target;if(!s)return;let c=s.closest(".lh-node > .lh-element-screenshot");if(!c)return;let d=t.createElement("div","lh-element-screenshot__overlay");o.append(d);let p={width:d.clientWidth*.95,height:d.clientHeight*.8},h={width:Number(c.dataset.rectWidth),height:Number(c.dataset.rectHeight),left:Number(c.dataset.rectLeft),right:Number(c.dataset.rectLeft)+Number(c.dataset.rectWidth),top:Number(c.dataset.rectTop),bottom:Number(c.dataset.rectTop)+Number(c.dataset.rectHeight)},g=r.render(t,i.screenshot,h,p);if(!g){d.remove();return}d.append(g),d.addEventListener("click",()=>d.remove())}))}static _computeZoomFactor(e,t){let o={x:t.width/e.width,y:t.height/e.height},i=.75*Math.min(o.x,o.y);return Math.min(1,i)}static render(e,t,n,o){if(!gt(t,n))return null;let i=e.createComponent("elementScreenshot"),a=e.find("div.lh-element-screenshot",i);a.dataset.rectWidth=n.width.toString(),a.dataset.rectHeight=n.height.toString(),a.dataset.rectLeft=n.left.toString(),a.dataset.rectTop=n.top.toString();let l=this._computeZoomFactor(n,o),s={width:o.width/l,height:o.height/l};s.width=Math.min(t.width,s.width),s.height=Math.min(t.height,s.height);let c={width:s.width*l,height:s.height*l},d=r.getScreenshotPositions(n,s,{width:t.width,height:t.height}),p=e.find("div.lh-element-screenshot__image",a);p.style.width=c.width+"px",p.style.height=c.height+"px",p.style.backgroundPositionY=-(d.screenshot.top*l)+"px",p.style.backgroundPositionX=-(d.screenshot.left*l)+"px",p.style.backgroundSize=`${t.width*l}px ${t.height*l}px`;let h=e.find("div.lh-element-screenshot__element-marker",a);h.style.width=n.width*l+"px",h.style.height=n.height*l+"px",h.style.left=d.clip.left*l+"px",h.style.top=d.clip.top*l+"px";let g=e.find("div.lh-element-screenshot__mask",a);return g.style.width=c.width+"px",g.style.height=c.height+"px",r.renderClipPathInScreenshot(e,g,d.clip,n,s),a}};var mt=["http://","https://","data:"],ft=["bytes","numeric","ms","timespanMs"],ee=class{constructor(e,t={}){this._dom=e,this._fullPageScreenshot=t.fullPageScreenshot,this._entities=t.entities}render(e){switch(e.type){case"filmstrip":return this._renderFilmstrip(e);case"list":return this._renderList(e);case"table":case"opportunity":return this._renderTable(e);case"criticalrequestchain":return Y.render(this._dom,e,this);case"screenshot":case"debugdata":case"treemap-data":return null;default:return this._renderUnknown(e.type,e)}}_renderBytes(e){let t=m.i18n.formatBytesToKiB(e.value,e.granularity||.1),n=this._renderText(t);return n.title=m.i18n.formatBytes(e.value),n}_renderMilliseconds(e){let t;return e.displayUnit==="duration"?t=m.i18n.formatDuration(e.value):t=m.i18n.formatMilliseconds(e.value,e.granularity||10),this._renderText(t)}renderTextURL(e){let t=e,n,o,i;try{let l=k.parseURL(t);n=l.file==="/"?l.origin:l.file,o=l.file==="/"||l.hostname===""?"":`(${l.hostname})`,i=t}catch{n=t}let a=this._dom.createElement("div","lh-text__url");if(a.append(this._renderLink({text:n,url:t})),o){let l=this._renderText(o);l.classList.add("lh-text__url-host"),a.append(l)}return i&&(a.title=t,a.dataset.url=t),a}_renderLink(e){let t=this._dom.createElement("a");if(this._dom.safelySetHref(t,e.url),!t.href){let n=this._renderText(e.text);return n.classList.add("lh-link"),n}return t.rel="noopener",t.target="_blank",t.textContent=e.text,t.classList.add("lh-link"),t}_renderText(e){let t=this._dom.createElement("div","lh-text");return t.textContent=e,t}_renderNumeric(e){let t=m.i18n.formatNumber(e.value,e.granularity||.1),n=this._dom.createElement("div","lh-numeric");return n.textContent=t,n}_renderThumbnail(e){let t=this._dom.createElement("img","lh-thumbnail"),n=e;return t.src=n,t.title=n,t.alt="",t}_renderUnknown(e,t){console.error(`Unknown details type: ${e}`,t);let n=this._dom.createElement("details","lh-unknown");return this._dom.createChildOf(n,"summary").textContent=`We don't know how to render audit details of type \`${e}\`. The Lighthouse version that collected this data is likely newer than the Lighthouse version of the report renderer. Expand for the raw JSON.`,this._dom.createChildOf(n,"pre").textContent=JSON.stringify(t,null,2),n}_renderTableValue(e,t){if(e==null)return null;if(typeof e=="object")switch(e.type){case"code":return this._renderCode(e.value);case"link":return this._renderLink(e);case"node":return this.renderNode(e);case"numeric":return this._renderNumeric(e);case"source-location":return this.renderSourceLocation(e);case"url":return this.renderTextURL(e.value);default:return this._renderUnknown(e.type,e)}switch(t.valueType){case"bytes":{let n=Number(e);return this._renderBytes({value:n,granularity:t.granularity})}case"code":{let n=String(e);return this._renderCode(n)}case"ms":{let n={value:Number(e),granularity:t.granularity,displayUnit:t.displayUnit};return this._renderMilliseconds(n)}case"numeric":{let n=Number(e);return this._renderNumeric({value:n,granularity:t.granularity})}case"text":{let n=String(e);return this._renderText(n)}case"thumbnail":{let n=String(e);return this._renderThumbnail(n)}case"timespanMs":{let n=Number(e);return this._renderMilliseconds({value:n})}case"url":{let n=String(e);return mt.some(o=>n.startsWith(o))?this.renderTextURL(n):this._renderCode(n)}default:return this._renderUnknown(t.valueType,e)}}_getDerivedSubItemsHeading(e){return e.subItemsHeading?{key:e.subItemsHeading.key||"",valueType:e.subItemsHeading.valueType||e.valueType,granularity:e.subItemsHeading.granularity||e.granularity,displayUnit:e.subItemsHeading.displayUnit||e.displayUnit,label:""}:null}_renderTableRow(e,t){let n=this._dom.createElement("tr");for(let o of t){if(!o||!o.key){this._dom.createChildOf(n,"td","lh-table-column--empty");continue}let i=e[o.key],a;if(i!=null&&(a=this._renderTableValue(i,o)),a){let l=`lh-table-column--${o.valueType}`;this._dom.createChildOf(n,"td",l).append(a)}else this._dom.createChildOf(n,"td","lh-table-column--empty")}return n}_renderTableRowsFromItem(e,t){let n=this._dom.createFragment();if(n.append(this._renderTableRow(e,t)),!e.subItems)return n;let o=t.map(this._getDerivedSubItemsHeading);if(!o.some(Boolean))return n;for(let i of e.subItems.items){let a=this._renderTableRow(i,o);a.classList.add("lh-sub-item-row"),n.append(a)}return n}_adornEntityGroupRow(e){let t=e.dataset.entity;if(!t)return;let n=this._entities?.find(i=>i.name===t);if(!n)return;let o=this._dom.find("td",e);if(n.category){let i=this._dom.createElement("span");i.classList.add("lh-audit__adorn"),i.textContent=n.category,o.append(" ",i)}if(n.isFirstParty){let i=this._dom.createElement("span");i.classList.add("lh-audit__adorn","lh-audit__adorn1p"),i.textContent=m.strings.firstPartyChipLabel,o.append(" ",i)}if(n.homepage){let i=this._dom.createElement("a");i.href=n.homepage,i.target="_blank",i.title=m.strings.openInANewTabTooltip,i.classList.add("lh-report-icon--external"),o.append(" ",i)}}_renderEntityGroupRow(e,t){let n={...t[0]};n.valueType="text";let o=[n,...t.slice(1)],i=this._dom.createFragment();return i.append(this._renderTableRow(e,o)),this._dom.find("tr",i).classList.add("lh-row--group"),i}_getEntityGroupItems(e){let{items:t,headings:n,sortedBy:o}=e;if(!t.length||e.isEntityGrouped||!t.some(d=>d.entity))return[];let i=new Set(e.skipSumming||[]),a=[];for(let d of n)!d.key||i.has(d.key)||ft.includes(d.valueType)&&a.push(d.key);let l=n[0].key;if(!l)return[];let s=new Map;for(let d of t){let p=typeof d.entity=="string"?d.entity:void 0,h=s.get(p)||{[l]:p||m.strings.unattributable,entity:p};for(let g of a)h[g]=Number(h[g]||0)+Number(d[g]||0);s.set(p,h)}let c=[...s.values()];return o&&c.sort(x.getTableItemSortComparator(o)),c}_renderTable(e){if(!e.items.length)return this._dom.createElement("span");let t=this._dom.createElement("table","lh-table"),n=this._dom.createChildOf(t,"thead"),o=this._dom.createChildOf(n,"tr");for(let l of e.headings){let c=`lh-table-column--${l.valueType||"text"}`,d=this._dom.createElement("div","lh-text");d.textContent=l.label,this._dom.createChildOf(o,"th",c).append(d)}let i=this._getEntityGroupItems(e),a=this._dom.createChildOf(t,"tbody");if(i.length)for(let l of i){let s=typeof l.entity=="string"?l.entity:void 0,c=this._renderEntityGroupRow(l,e.headings);for(let p of e.items.filter(h=>h.entity===s))c.append(this._renderTableRowsFromItem(p,e.headings));let d=this._dom.findAll("tr",c);s&&d.length&&(d.forEach(p=>p.dataset.entity=s),this._adornEntityGroupRow(d[0])),a.append(c)}else{let l=!0;for(let s of e.items){let c=this._renderTableRowsFromItem(s,e.headings),d=this._dom.findAll("tr",c),p=d[0];if(typeof s.entity=="string"&&(p.dataset.entity=s.entity),e.isEntityGrouped&&s.entity)p.classList.add("lh-row--group"),this._adornEntityGroupRow(p);else for(let h of d)h.classList.add(l?"lh-row--even":"lh-row--odd");l=!l,a.append(c)}}return t}_renderList(e){let t=this._dom.createElement("div","lh-list");return e.items.forEach(n=>{let o=this.render(n);o&&t.append(o)}),t}renderNode(e){let t=this._dom.createElement("span","lh-node");if(e.nodeLabel){let a=this._dom.createElement("div");a.textContent=e.nodeLabel,t.append(a)}if(e.snippet){let a=this._dom.createElement("div");a.classList.add("lh-node__snippet"),a.textContent=e.snippet,t.append(a)}if(e.selector&&(t.title=e.selector),e.path&&t.setAttribute("data-path",e.path),e.selector&&t.setAttribute("data-selector",e.selector),e.snippet&&t.setAttribute("data-snippet",e.snippet),!this._fullPageScreenshot)return t;let n=e.lhId&&this._fullPageScreenshot.nodes[e.lhId];if(!n||n.width===0||n.height===0)return t;let o={width:147,height:100},i=O.render(this._dom,this._fullPageScreenshot.screenshot,n,o);return i&&t.prepend(i),t}renderSourceLocation(e){if(!e.url)return null;let t=`${e.url}:${e.line+1}:${e.column}`,n;e.original&&(n=`${e.original.file||"<unmapped>"}:${e.original.line+1}:${e.original.column}`);let o;if(e.urlProvider==="network"&&n)o=this._renderLink({url:e.url,text:n}),o.title=`maps to generated location ${t}`;else if(e.urlProvider==="network"&&!n)o=this.renderTextURL(e.url),this._dom.find(".lh-link",o).textContent+=`:${e.line+1}:${e.column}`;else if(e.urlProvider==="comment"&&n)o=this._renderText(`${n} (from source map)`),o.title=`${t} (from sourceURL)`;else if(e.urlProvider==="comment"&&!n)o=this._renderText(`${t} (from sourceURL)`);else return null;return o.classList.add("lh-source-location"),o.setAttribute("data-source-url",e.url),o.setAttribute("data-source-line",String(e.line)),o.setAttribute("data-source-column",String(e.column)),o}_renderFilmstrip(e){let t=this._dom.createElement("div","lh-filmstrip");for(let n of e.items){let o=this._dom.createChildOf(t,"div","lh-filmstrip__frame"),i=this._dom.createChildOf(o,"img","lh-filmstrip__thumbnail");i.src=n.data,i.alt="Screenshot"}return t}_renderCode(e){let t=this._dom.createElement("pre","lh-code");return t.textContent=e,t}};var se="\xA0";var re=class{constructor(e){e==="en-XA"&&(e="de"),this._locale=e,this._cachedNumberFormatters=new Map}_formatNumberWithGranularity(e,t,n={}){if(t!==void 0){let a=-Math.log10(t);Number.isInteger(a)||(console.warn(`granularity of ${t} is invalid. Using 1 instead`),t=1),t<1&&(n={...n},n.minimumFractionDigits=n.maximumFractionDigits=Math.ceil(a)),e=Math.round(e/t)*t,Object.is(e,-0)&&(e=0)}else Math.abs(e)<5e-4&&(e=0);let o,i=[n.minimumFractionDigits,n.maximumFractionDigits,n.style,n.unit,n.unitDisplay,this._locale].join("");return o=this._cachedNumberFormatters.get(i),o||(o=new Intl.NumberFormat(this._locale,n),this._cachedNumberFormatters.set(i,o)),o.format(e).replace(" ",se)}formatNumber(e,t){return this._formatNumberWithGranularity(e,t)}formatInteger(e){return this._formatNumberWithGranularity(e,1)}formatPercent(e){return new Intl.NumberFormat(this._locale,{style:"percent"}).format(e)}formatBytesToKiB(e,t=void 0){return this._formatNumberWithGranularity(e/1024,t)+`${se}KiB`}formatBytesToMiB(e,t=void 0){return this._formatNumberWithGranularity(e/1048576,t)+`${se}MiB`}formatBytes(e,t=1){return this._formatNumberWithGranularity(e,t,{style:"unit",unit:"byte",unitDisplay:"long"})}formatBytesWithBestUnit(e,t=.1){return e>=1048576?this.formatBytesToMiB(e,t):e>=1024?this.formatBytesToKiB(e,t):this._formatNumberWithGranularity(e,t,{style:"unit",unit:"byte",unitDisplay:"narrow"})}formatKbps(e,t=void 0){return this._formatNumberWithGranularity(e,t,{style:"unit",unit:"kilobit-per-second",unitDisplay:"short"})}formatMilliseconds(e,t=void 0){return this._formatNumberWithGranularity(e,t,{style:"unit",unit:"millisecond",unitDisplay:"short"})}formatSeconds(e,t=void 0){return this._formatNumberWithGranularity(e/1e3,t,{style:"unit",unit:"second",unitDisplay:"narrow"})}formatDateTime(e){let t={month:"short",day:"numeric",year:"numeric",hour:"numeric",minute:"numeric",timeZoneName:"short"},n;try{n=new Intl.DateTimeFormat(this._locale,t)}catch{t.timeZone="UTC",n=new Intl.DateTimeFormat(this._locale,t)}return n.format(new Date(e))}formatDuration(e){let t=e/1e3;if(Math.round(t)===0)return"None";let n=[],o={day:60*60*24,hour:60*60,minute:60,second:1};return Object.keys(o).forEach(i=>{let a=o[i],l=Math.floor(t/a);if(l>0){t-=l*a;let s=this._formatNumberWithGranularity(l,1,{style:"unit",unit:i,unitDisplay:"narrow"});n.push(s)}}),n.join(" ")}};function Ae(r){let e=r.createComponent("explodeyGauge");return r.find(".lh-exp-gauge-component",e)}function Se(r,e,t){let n=r.find("div.lh-exp-gauge__wrapper",e);n.className="",n.classList.add("lh-exp-gauge__wrapper",`lh-exp-gauge__wrapper--${x.calculateRating(t.score)}`),bt(r,n,t)}function vt(r,e,t){t=t||r/32;let n=r/t,o=.5*t,i=n+o+t,a=2*Math.PI*n,l=Math.acos(1-.5*Math.pow(.5*t/n,2))*n,s=2*Math.PI*i,c=Math.acos(1-.5*Math.pow(.5*t/i,2))*i;return{radiusInner:n,radiusOuter:i,circumferenceInner:a,circumferenceOuter:s,getArcLength:()=>Math.max(0,Number(e*a)),getMetricArcLength:(d,p=!1)=>{let h=p?0:2*c;return Math.max(0,Number(d*s-o-h))},endDiffInner:l,endDiffOuter:c,strokeWidth:t,strokeGap:o}}function bt(r,e,t){let i=Number(t.score),{radiusInner:a,radiusOuter:l,circumferenceInner:s,circumferenceOuter:c,getArcLength:d,getMetricArcLength:p,endDiffInner:h,endDiffOuter:g,strokeWidth:v,strokeGap:b}=vt(128,i),f=r.find("svg.lh-exp-gauge",e);r.find(".lh-exp-gauge__label",f).textContent=t.title,f.setAttribute("viewBox",[-64,-64/2,128,128/2].join(" ")),f.style.setProperty("--stroke-width",`${v}px`),f.style.setProperty("--circle-meas",(2*Math.PI).toFixed(4));let u=r.find("g.lh-exp-gauge__outer",e),w=r.find("g.lh-exp-gauge__inner",e),_=r.find("circle.lh-cover",u),E=r.find("circle.lh-exp-gauge__arc",w),S=r.find("text.lh-exp-gauge__percentage",w);u.style.setProperty("--scale-initial",String(a/l)),u.style.setProperty("--radius",`${l}px`),_.style.setProperty("--radius",`${.5*(a+l)}px`),_.setAttribute("stroke-width",String(b)),f.style.setProperty("--radius",`${a}px`),E.setAttribute("stroke-dasharray",`${d()} ${(s-d()).toFixed(4)}`),E.setAttribute("stroke-dashoffset",String(.25*s-h)),S.textContent=Math.round(i*100).toString();let z=l+v,M=l-v,F=t.auditRefs.filter(y=>y.group==="metrics"&&y.weight),T=F.reduce((y,C)=>y+=C.weight,0),A=.25*c-g-.5*b,L=-.5*Math.PI;u.querySelectorAll(".metric").forEach(y=>{F.map(I=>`metric--${I.id}`).find(I=>y.classList.contains(I))||y.remove()}),F.forEach((y,C)=>{let N=y.acronym??y.id,I=!u.querySelector(`.metric--${N}`),P=r.maybeFind(`g.metric--${N}`,u)||r.createSVGElement("g"),B=r.maybeFind(`.metric--${N} circle.lh-exp-gauge--faded`,u)||r.createSVGElement("circle"),J=r.maybeFind(`.metric--${N} circle.lh-exp-gauge--miniarc`,u)||r.createSVGElement("circle"),j=r.maybeFind(`.metric--${N} circle.lh-exp-gauge-hovertarget`,u)||r.createSVGElement("circle"),H=r.maybeFind(`.metric--${N} text.metric__label`,u)||r.createSVGElement("text"),U=r.maybeFind(`.metric--${N} text.metric__value`,u)||r.createSVGElement("text");P.classList.add("metric",`metric--${N}`),B.classList.add("lh-exp-gauge__arc","lh-exp-gauge__arc--metric","lh-exp-gauge--faded"),J.classList.add("lh-exp-gauge__arc","lh-exp-gauge__arc--metric","lh-exp-gauge--miniarc"),j.classList.add("lh-exp-gauge__arc","lh-exp-gauge__arc--metric","lh-exp-gauge-hovertarget");let q=y.weight/T,pe=p(q),he=y.result.score?y.result.score*q:0,ge=p(he),Ne=q*c,ue=p(q,!0),me=x.calculateRating(y.result.score,y.result.scoreDisplayMode);P.style.setProperty("--metric-rating",me),P.style.setProperty("--metric-color",`var(--color-${me})`),P.style.setProperty("--metric-offset",`${A}`),P.style.setProperty("--i",C.toString()),B.setAttribute("stroke-dasharray",`${pe} ${c-pe}`),J.style.setProperty("--metric-array",`${ge} ${c-ge}`),j.setAttribute("stroke-dasharray",`${ue} ${c-ue-g}`),H.classList.add("metric__label"),U.classList.add("metric__value"),H.textContent=N,U.textContent=`+${Math.round(he*100)}`;let fe=L+q*Math.PI,Z=Math.cos(fe),Q=Math.sin(fe);switch(!0){case Z>0:U.setAttribute("text-anchor","end");break;case Z<0:H.setAttribute("text-anchor","end");break;case Z===0:H.setAttribute("text-anchor","middle"),U.setAttribute("text-anchor","middle");break}switch(!0){case Q>0:H.setAttribute("dominant-baseline","hanging");break;case Q<0:U.setAttribute("dominant-baseline","hanging");break;case Q===0:H.setAttribute("dominant-baseline","middle"),U.setAttribute("dominant-baseline","middle");break}H.setAttribute("x",(z*Z).toFixed(2)),H.setAttribute("y",(z*Q).toFixed(2)),U.setAttribute("x",(M*Z).toFixed(2)),U.setAttribute("y",(M*Q).toFixed(2)),I&&(P.appendChild(B),P.appendChild(J),P.appendChild(j),P.appendChild(H),P.appendChild(U),u.appendChild(P)),A-=Ne,L+=q*2*Math.PI});let D=u.querySelector(".lh-exp-gauge-underhovertarget")||r.createSVGElement("circle");D.classList.add("lh-exp-gauge__arc","lh-exp-gauge__arc--metric","lh-exp-gauge-hovertarget","lh-exp-gauge-underhovertarget");let R=p(1,!0);if(D.setAttribute("stroke-dasharray",`${R} ${c-R-g}`),D.isConnected||u.prepend(D),f.dataset.listenersSetup)return;f.dataset.listenersSetup=!0,De(f),f.addEventListener("pointerover",y=>{if(y.target===f&&f.classList.contains("state--expanded")){f.classList.remove("state--expanded"),f.classList.contains("state--highlight")&&(f.classList.remove("state--highlight"),r.find(".metric--highlight",f).classList.remove("metric--highlight"));return}if(!(y.target instanceof Element))return;let C=y.target.parentNode;if(C instanceof SVGElement){if(C&&C===w){f.classList.contains("state--expanded")?f.classList.contains("state--highlight")&&(f.classList.remove("state--highlight"),r.find(".metric--highlight",f).classList.remove("metric--highlight")):f.classList.add("state--expanded");return}if(C&&C.classList&&C.classList.contains("metric")){let N=C.style.getPropertyValue("--metric-rating");if(e.style.setProperty("--color-highlight",`var(--color-${N}-secondary)`),!f.classList.contains("state--highlight"))f.classList.add("state--highlight"),C.classList.add("metric--highlight");else{let I=r.find(".metric--highlight",f);C!==I&&(I.classList.remove("metric--highlight"),C.classList.add("metric--highlight"),console.log({highlightEl:I,parent:C}))}}}}),f.addEventListener("mouseleave",()=>{f.classList.remove("state--highlight"),f.querySelector(".metric--highlight")?.classList.remove("metric--highlight")});async function De(y){if(await new Promise(H=>setTimeout(H,1e3)),y.classList.contains("state--expanded"))return;let C=r.find(".lh-exp-gauge__inner",y),N=`uniq-${Math.random()}`;C.setAttribute("id",N);let I=r.createSVGElement("use");I.setAttribute("href",`#${N}`),y.appendChild(I);let P=2.5;y.style.setProperty("--peek-dur",`${P}s`),y.classList.add("state--peek","state--expanded");let B=()=>{y.classList.remove("state--peek","state--expanded"),I.remove()},J=setTimeout(()=>{y.removeEventListener("mouseenter",j),B()},P*1e3*1.5);function j(){clearTimeout(J),B()}y.addEventListener("mouseenter",j,{once:!0})}}var oe=class extends V{_renderMetric(e){let t=this.dom.createComponent("metric"),n=this.dom.find(".lh-metric",t);n.id=e.result.id;let o=x.calculateRating(e.result.score,e.result.scoreDisplayMode);n.classList.add(`lh-metric--${o}`);let i=this.dom.find(".lh-metric__title",t);i.textContent=e.result.title;let a=this.dom.find(".lh-metric__value",t);a.textContent=e.result.displayValue||"";let l=this.dom.find(".lh-metric__description",t);if(l.append(this.dom.convertMarkdownLinkSnippets(e.result.description)),e.result.scoreDisplayMode==="error"){l.textContent="",a.textContent="Error!";let s=this.dom.createChildOf(l,"span");s.textContent=e.result.errorMessage||"Report error: no metric information"}else e.result.scoreDisplayMode==="notApplicable"&&(a.textContent="--");return n}_getScoringCalculatorHref(e){let t=e.filter(p=>p.group==="metrics"),n=e.find(p=>p.id==="interactive"),o=e.find(p=>p.id==="first-cpu-idle"),i=e.find(p=>p.id==="first-meaningful-paint");n&&t.push(n),o&&t.push(o),i&&t.push(i);let a=p=>Math.round(p*100)/100,s=[...t.map(p=>{let h;return typeof p.result.numericValue=="number"?(h=p.id==="cumulative-layout-shift"?a(p.result.numericValue):Math.round(p.result.numericValue),h=h.toString()):h="null",[p.acronym||p.id,h]})];m.reportJson&&(s.push(["device",m.reportJson.configSettings.formFactor]),s.push(["version",m.reportJson.lighthouseVersion]));let c=new URLSearchParams(s),d=new URL("https://googlechrome.github.io/lighthouse/scorecalc/");return d.hash=c.toString(),d.href}_isPerformanceInsight(e){return!e.group}overallImpact(e,t){if(!e.result.metricSavings)return{overallImpact:0,overallLinearImpact:0};let n=0,o=0;for(let[i,a]of Object.entries(e.result.metricSavings)){if(a===void 0)continue;let l=t.find(g=>g.acronym===i);if(!l||l.result.score===null)continue;let s=l.result.numericValue;if(!s)continue;let c=a/s*l.weight;o+=c;let d=l.result.scoringOptions;if(!d)continue;let h=(k.computeLogNormalScore(d,s-a)-l.result.score)*l.weight;n+=h}return{overallImpact:n,overallLinearImpact:o}}render(e,t,n){let o=m.strings,i=this.dom.createElement("div","lh-category");i.id=e.id,i.append(this.renderCategoryHeader(e,t,n));let a=e.auditRefs.filter(u=>u.group==="metrics");if(a.length){let[u,w]=this.renderAuditGroup(t.metrics),_=this.dom.createElement("input","lh-metrics-toggle__input"),E=`lh-metrics-toggle${m.getUniqueSuffix()}`;_.setAttribute("aria-label","Toggle the display of metric descriptions"),_.type="checkbox",_.id=E,u.prepend(_);let S=this.dom.find(".lh-audit-group__header",u),z=this.dom.createChildOf(S,"label","lh-metrics-toggle__label");z.htmlFor=E;let M=this.dom.createChildOf(z,"span","lh-metrics-toggle__labeltext--show"),F=this.dom.createChildOf(z,"span","lh-metrics-toggle__labeltext--hide");M.textContent=m.strings.expandView,F.textContent=m.strings.collapseView;let T=this.dom.createElement("div","lh-metrics-container");if(u.insertBefore(T,w),a.forEach(A=>{T.append(this._renderMetric(A))}),i.querySelector(".lh-gauge__wrapper")){let A=this.dom.find(".lh-category-header__description",i),L=this.dom.createChildOf(A,"div","lh-metrics__disclaimer"),D=this.dom.convertMarkdownLinkSnippets(o.varianceDisclaimer);L.append(D);let R=this.dom.createChildOf(L,"a","lh-calclink");R.target="_blank",R.textContent=o.calculatorLink,this.dom.safelySetHref(R,this._getScoringCalculatorHref(e.auditRefs))}u.classList.add("lh-audit-group--metrics"),i.append(u)}let l=this.dom.createChildOf(i,"div","lh-filmstrip-container"),c=e.auditRefs.find(u=>u.id==="screenshot-thumbnails")?.result;if(c?.details){l.id=c.id;let u=this.detailsRenderer.render(c.details);u&&l.append(u)}let d=a.filter(u=>!!u.relevantAudits);d.length&&this.renderMetricAuditFilter(d,i);let p=e.auditRefs.filter(u=>this._isPerformanceInsight(u)).filter(u=>!x.showAsPassed(u.result)),h=[];if(p.forEach(u=>{let{overallImpact:w,overallLinearImpact:_}=this.overallImpact(u,a),E=u.result.guidanceLevel??1;h.push({auditRef:u,overallImpact:w,overallLinearImpact:_,guidanceLevel:E})}),h.sort((u,w)=>{let _=u.auditRef.result.scoreDisplayMode==="informative"?100:Number(u.auditRef.result.score),E=w.auditRef.result.scoreDisplayMode==="informative"?100:Number(w.auditRef.result.score);return _!==E?_-E:u.overallImpact!==w.overallImpact?w.overallImpact-u.overallImpact:u.overallImpact===0&&w.overallImpact===0&&u.overallLinearImpact!==w.overallLinearImpact?w.overallLinearImpact-u.overallLinearImpact:w.guidanceLevel-u.guidanceLevel}),h.length){let[u,w]=this.renderAuditGroup(t.diagnostics);h.forEach(_=>u.insertBefore(this.renderAudit(_.auditRef),w)),u.classList.add("lh-audit-group--diagnostics"),i.append(u)}let g=e.auditRefs.filter(u=>this._isPerformanceInsight(u)&&x.showAsPassed(u.result));if(!g.length)return i;let v={auditRefs:g,groupDefinitions:t},b=this.renderClump("passed",v);i.append(b);let f=[];if(["performance-budget","timing-budget"].forEach(u=>{let w=e.auditRefs.find(_=>_.id===u);if(w?.result.details){let _=this.detailsRenderer.render(w.result.details);_&&(_.id=u,_.classList.add("lh-details","lh-details--budget","lh-audit"),f.push(_))}}),f.length>0){let[u,w]=this.renderAuditGroup(t.budgets);f.forEach(_=>u.insertBefore(_,w)),u.classList.add("lh-audit-group--budgets"),i.append(u)}if(!n||n?.gatherMode==="navigation"){let u=Ae(this.dom);Se(this.dom,u,e),this.dom.find(".lh-score__gauge",i).replaceWith(u)}return i}renderMetricAuditFilter(e,t){let n=this.dom.createElement("div","lh-metricfilter"),o=this.dom.createChildOf(n,"span","lh-metricfilter__text");o.textContent=m.strings.showRelevantAudits;let i=[{acronym:"All"},...e],a=m.getUniqueSuffix();for(let l of i){let s=`metric-${l.acronym}-${a}`,c=this.dom.createChildOf(n,"input","lh-metricfilter__radio");c.type="radio",c.name=`metricsfilter-${a}`,c.id=s;let d=this.dom.createChildOf(n,"label","lh-metricfilter__label");d.htmlFor=s,d.title=l.result?.title,d.textContent=l.acronym||l.id,l.acronym==="All"&&(c.checked=!0,d.classList.add("lh-metricfilter__label--active")),t.append(n),c.addEventListener("input",p=>{for(let g of t.querySelectorAll("label.lh-metricfilter__label"))g.classList.toggle("lh-metricfilter__label--active",g.htmlFor===s);t.classList.toggle("lh-category--filtered",l.acronym!=="All");for(let g of t.querySelectorAll("div.lh-audit")){if(l.acronym==="All"){g.hidden=!1;continue}g.hidden=!0,l.relevantAudits&&l.relevantAudits.includes(g.id)&&(g.hidden=!1)}let h=t.querySelectorAll("div.lh-audit-group, details.lh-audit-group");for(let g of h){g.hidden=!1;let v=Array.from(g.querySelectorAll("div.lh-audit")),b=!!v.length&&v.every(f=>f.hidden);g.hidden=b}})}}};var ie=class r extends V{render(e,t={}){let n=this.dom.createElement("div","lh-category");n.id=e.id,n.append(this.renderCategoryHeader(e,t));let o=e.auditRefs,i=o.filter(c=>c.result.scoreDisplayMode!=="manual"),a=this._renderAudits(i,t);n.append(a);let l=o.filter(c=>c.result.scoreDisplayMode==="manual"),s=this.renderClump("manual",{auditRefs:l,description:e.manualDescription,openByDefault:!0});return n.append(s),n}renderCategoryScore(e,t){if(e.score===null)return super.renderScoreGauge(e,t);let n=this.dom.createComponent("gaugePwa"),o=this.dom.find("a.lh-gauge--pwa__wrapper",n),i=n.querySelector("svg");if(!i)throw new Error("no SVG element found in PWA score gauge template");r._makeSvgReferencesUnique(i);let a=this._getGroupIds(e.auditRefs),l=this._getPassingGroupIds(e.auditRefs);if(l.size===a.size)o.classList.add("lh-badged--all");else for(let s of l)o.classList.add(`lh-badged--${s}`);return this.dom.find(".lh-gauge__label",n).textContent=e.title,o.title=this._getGaugeTooltip(e.auditRefs,t),n}_getGroupIds(e){let t=e.map(n=>n.group).filter(n=>!!n);return new Set(t)}_getPassingGroupIds(e){let t=this._getGroupIds(e);for(let n of e)!x.showAsPassed(n.result)&&n.group&&t.delete(n.group);return t}_getGaugeTooltip(e,t){let n=this._getGroupIds(e),o=[];for(let i of n){let a=e.filter(d=>d.group===i),l=a.length,s=a.filter(d=>x.showAsPassed(d.result)).length,c=t[i].title;o.push(`${c}: ${s}/${l}`)}return o.join(", ")}_renderAudits(e,t){let n=this.renderUnexpandableClump(e,t),o=this._getPassingGroupIds(e);for(let i of o)this.dom.find(`.lh-audit-group--${i}`,n).classList.add("lh-badged");return n}static _makeSvgReferencesUnique(e){let t=e.querySelector("defs");if(!t)return;let n=m.getUniqueSuffix(),o=t.querySelectorAll("[id]");for(let i of o){let a=i.id,l=`${a}-${n}`;i.id=l;let s=e.querySelectorAll(`use[href="#${a}"]`);for(let d of s)d.setAttribute("href",`#${l}`);let c=e.querySelectorAll(`[fill="url(#${a})"]`);for(let d of c)d.setAttribute("fill",`url(#${l})`)}}};var te=class{constructor(e){this._dom=e,this._opts={}}renderReport(e,t,n){if(!this._dom.rootEl&&t){console.warn("Please adopt the new report API in renderer/api.js.");let i=t.closest(".lh-root");i?this._dom.rootEl=i:(t.classList.add("lh-root","lh-vars"),this._dom.rootEl=t)}else this._dom.rootEl&&t&&(this._dom.rootEl=t);n&&(this._opts=n),this._dom.setLighthouseChannel(e.configSettings.channel||"unknown");let o=x.prepareReportResult(e);return this._dom.rootEl.textContent="",this._dom.rootEl.append(this._renderReport(o)),this._dom.rootEl}_renderReportTopbar(e){let t=this._dom.createComponent("topbar"),n=this._dom.find("a.lh-topbar__url",t);return n.textContent=e.finalDisplayedUrl,n.title=e.finalDisplayedUrl,this._dom.safelySetHref(n,e.finalDisplayedUrl),t}_renderReportHeader(){let e=this._dom.createComponent("heading"),t=this._dom.createComponent("scoresWrapper");return this._dom.find(".lh-scores-wrapper-placeholder",e).replaceWith(t),e}_renderReportFooter(e){let t=this._dom.createComponent("footer");return this._renderMetaBlock(e,t),this._dom.find(".lh-footer__version_issue",t).textContent=m.strings.footerIssue,this._dom.find(".lh-footer__version",t).textContent=e.lighthouseVersion,t}_renderMetaBlock(e,t){let n=x.getEmulationDescriptions(e.configSettings||{}),o=e.userAgent.match(/(\w*Chrome\/[\d.]+)/),i=Array.isArray(o)?o[1].replace("/"," ").replace("Chrome","Chromium"):"Chromium",a=e.configSettings.channel,l=e.environment.benchmarkIndex.toFixed(0),s=e.environment.credits?.["axe-core"],c=[`${m.strings.runtimeSettingsBenchmark}: ${l}`,`${m.strings.runtimeSettingsCPUThrottling}: ${n.cpuThrottling}`];n.screenEmulation&&c.push(`${m.strings.runtimeSettingsScreenEmulation}: ${n.screenEmulation}`),s&&c.push(`${m.strings.runtimeSettingsAxeVersion}: ${s}`);let d=[["date",`Captured at ${m.i18n.formatDateTime(e.fetchTime)}`],["devices",`${n.deviceEmulation} with Lighthouse ${e.lighthouseVersion}`,c.join(`
2616
+ `)],["samples-one",m.strings.runtimeSingleLoad,m.strings.runtimeSingleLoadTooltip],["stopwatch",m.strings.runtimeAnalysisWindow],["networkspeed",`${n.summary}`,`${m.strings.runtimeSettingsNetworkThrottling}: ${n.networkThrottling}`],["chrome",`Using ${i}`+(a?` with ${a}`:""),`${m.strings.runtimeSettingsUANetwork}: "${e.environment.networkUserAgent}"`]],p=this._dom.find(".lh-meta__items",t);for(let[h,g,v]of d){let b=this._dom.createChildOf(p,"li","lh-meta__item");if(b.textContent=g,v){b.classList.add("lh-tooltip-boundary");let f=this._dom.createChildOf(b,"div","lh-tooltip");f.textContent=v}b.classList.add("lh-report-icon",`lh-report-icon--${h}`)}}_renderReportWarnings(e){if(!e.runWarnings||e.runWarnings.length===0)return this._dom.createElement("div");let t=this._dom.createComponent("warningsToplevel"),n=this._dom.find(".lh-warnings__msg",t);n.textContent=m.strings.toplevelWarningsMessage;let o=[];for(let i of e.runWarnings){let a=this._dom.createElement("li");a.append(this._dom.convertMarkdownLinkSnippets(i)),o.push(a)}return this._dom.find("ul",t).append(...o),t}_renderScoreGauges(e,t,n){let o=[],i=[],a=[];for(let l of Object.values(e.categories)){let s=n[l.id]||t,c=s.renderCategoryScore(l,e.categoryGroups||{},{gatherMode:e.gatherMode}),d=this._dom.find("a.lh-gauge__wrapper, a.lh-fraction__wrapper",c);d&&(this._dom.safelySetHref(d,`#${l.id}`),d.addEventListener("click",p=>{if(!d.matches('[href^="#"]'))return;let h=d.getAttribute("href"),g=this._dom.rootEl;if(!h||!g)return;let v=this._dom.find(h,g);p.preventDefault(),v.scrollIntoView()}),this._opts.onPageAnchorRendered?.(d)),x.isPluginCategory(l.id)?a.push(c):s.renderCategoryScore===t.renderCategoryScore?o.push(c):i.push(c)}return[...o,...i,...a]}_renderReport(e){m.apply({providedStrings:e.i18n.rendererFormattedStrings,i18n:new re(e.configSettings.locale),reportJson:e});let t=new ee(this._dom,{fullPageScreenshot:e.fullPageScreenshot??void 0,entities:e.entities}),n=new V(this._dom,t),o={performance:new oe(this._dom,t),pwa:new ie(this._dom,t)},i=this._dom.createElement("div");i.append(this._renderReportHeader());let a=this._dom.createElement("div","lh-container"),l=this._dom.createElement("div","lh-report");l.append(this._renderReportWarnings(e));let s;Object.keys(e.categories).length===1?i.classList.add("lh-header--solo-category"):s=this._dom.createElement("div","lh-scores-header");let d=this._dom.createElement("div");if(d.classList.add("lh-scorescale-wrap"),d.append(this._dom.createComponent("scorescale")),s){let v=this._dom.find(".lh-scores-container",i);s.append(...this._renderScoreGauges(e,n,o)),v.append(s,d);let b=this._dom.createElement("div","lh-sticky-header");b.append(...this._renderScoreGauges(e,n,o)),a.append(b)}let p=this._dom.createElement("div","lh-categories");l.append(p);let h={gatherMode:e.gatherMode};for(let v of Object.values(e.categories)){let b=o[v.id]||n;b.dom.createChildOf(p,"div","lh-category-wrapper").append(b.render(v,e.categoryGroups,h))}n.injectFinalScreenshot(p,e.audits,d);let g=this._dom.createFragment();return this._opts.omitGlobalStyles||g.append(this._dom.createComponent("styles")),this._opts.omitTopbar||g.append(this._renderReportTopbar(e)),g.append(a),l.append(this._renderReportFooter(e)),a.append(i,l),e.fullPageScreenshot&&O.installFullPageScreenshot(this._dom.rootEl,e.fullPageScreenshot.screenshot),g}};function K(r,e){let t=r.rootEl;typeof e>"u"?t.classList.toggle("lh-dark"):t.classList.toggle("lh-dark",e)}var _t=typeof btoa<"u"?btoa:r=>Buffer.from(r).toString("base64"),wt=typeof atob<"u"?atob:r=>Buffer.from(r,"base64").toString();async function yt(r,e){let t=new TextEncoder().encode(r);if(e.gzip)if(typeof CompressionStream<"u"){let i=new CompressionStream("gzip"),a=i.writable.getWriter();a.write(t),a.close();let l=await new Response(i.readable).arrayBuffer();t=new Uint8Array(l)}else t=window.pako.gzip(r);let n="",o=5e3;for(let i=0;i<t.length;i+=o)n+=String.fromCharCode(...t.subarray(i,i+o));return _t(n)}function xt(r,e){let t=wt(r),n=Uint8Array.from(t,o=>o.charCodeAt(0));return e.gzip?window.pako.ungzip(n,{to:"string"}):new TextDecoder().decode(n)}var Ce={toBase64:yt,fromBase64:xt};function ce(){let r=window.location.host.endsWith(".vercel.app"),e=new URLSearchParams(window.location.search).has("dev");return r?`https://${window.location.host}/gh-pages`:e?"http://localhost:7333":"https://googlechrome.github.io/lighthouse"}function de(r){let e=r.generatedTime,t=r.fetchTime||e;return`${r.lighthouseVersion}-${r.finalDisplayedUrl}-${t}`}function Et(r,e,t){let n=new URL(e).origin;window.addEventListener("message",function i(a){a.origin===n&&o&&a.data.opened&&(o.postMessage(r,n),window.removeEventListener("message",i))});let o=window.open(e,t)}async function ze(r,e,t){let n=new URL(e),o=!!window.CompressionStream;n.hash=await Ce.toBase64(JSON.stringify(r),{gzip:o}),o&&n.searchParams.set("gzip","1"),window.open(n.toString(),t)}async function Le(r){let e="viewer-"+de(r),t=ce()+"/viewer/";await ze({lhr:r},t,e)}async function Me(r){let e="viewer-"+de(r),t=ce()+"/viewer/";Et({lhr:r},t,e)}function Fe(r){if(!r.audits["script-treemap-data"].details)throw new Error("no script treemap data found");let t={lhr:{mainDocumentUrl:r.mainDocumentUrl,finalUrl:r.finalUrl,finalDisplayedUrl:r.finalDisplayedUrl,audits:{"script-treemap-data":r.audits["script-treemap-data"]},configSettings:{locale:r.configSettings.locale}}},n=ce()+"/treemap/",o="treemap-"+de(r);ze(t,n,o)}var ae=class{constructor(e){this._dom=e,this._toggleEl,this._menuEl,this.onDocumentKeyDown=this.onDocumentKeyDown.bind(this),this.onToggleClick=this.onToggleClick.bind(this),this.onToggleKeydown=this.onToggleKeydown.bind(this),this.onMenuFocusOut=this.onMenuFocusOut.bind(this),this.onMenuKeydown=this.onMenuKeydown.bind(this),this._getNextMenuItem=this._getNextMenuItem.bind(this),this._getNextSelectableNode=this._getNextSelectableNode.bind(this),this._getPreviousMenuItem=this._getPreviousMenuItem.bind(this)}setup(e){this._toggleEl=this._dom.find(".lh-topbar button.lh-tools__button",this._dom.rootEl),this._toggleEl.addEventListener("click",this.onToggleClick),this._toggleEl.addEventListener("keydown",this.onToggleKeydown),this._menuEl=this._dom.find(".lh-topbar div.lh-tools__dropdown",this._dom.rootEl),this._menuEl.addEventListener("keydown",this.onMenuKeydown),this._menuEl.addEventListener("click",e)}close(){this._toggleEl.classList.remove("lh-active"),this._toggleEl.setAttribute("aria-expanded","false"),this._menuEl.contains(this._dom.document().activeElement)&&this._toggleEl.focus(),this._menuEl.removeEventListener("focusout",this.onMenuFocusOut),this._dom.document().removeEventListener("keydown",this.onDocumentKeyDown)}open(e){this._toggleEl.classList.contains("lh-active")?e.focus():this._menuEl.addEventListener("transitionend",()=>{e.focus()},{once:!0}),this._toggleEl.classList.add("lh-active"),this._toggleEl.setAttribute("aria-expanded","true"),this._menuEl.addEventListener("focusout",this.onMenuFocusOut),this._dom.document().addEventListener("keydown",this.onDocumentKeyDown)}onToggleClick(e){e.preventDefault(),e.stopImmediatePropagation(),this._toggleEl.classList.contains("lh-active")?this.close():this.open(this._getNextMenuItem())}onToggleKeydown(e){switch(e.code){case"ArrowUp":e.preventDefault(),this.open(this._getPreviousMenuItem());break;case"ArrowDown":case"Enter":case" ":e.preventDefault(),this.open(this._getNextMenuItem());break;default:}}onMenuKeydown(e){let t=e.target;switch(e.code){case"ArrowUp":e.preventDefault(),this._getPreviousMenuItem(t).focus();break;case"ArrowDown":e.preventDefault(),this._getNextMenuItem(t).focus();break;case"Home":e.preventDefault(),this._getNextMenuItem().focus();break;case"End":e.preventDefault(),this._getPreviousMenuItem().focus();break;default:}}onDocumentKeyDown(e){e.keyCode===27&&this.close()}onMenuFocusOut(e){let t=e.relatedTarget;this._menuEl.contains(t)||this.close()}_getNextSelectableNode(e,t){let n=e.filter(i=>!(!(i instanceof HTMLElement)||i.hasAttribute("disabled")||window.getComputedStyle(i).display==="none")),o=t?n.indexOf(t)+1:0;return o>=n.length&&(o=0),n[o]}_getNextMenuItem(e){let t=Array.from(this._menuEl.childNodes);return this._getNextSelectableNode(t,e)}_getPreviousMenuItem(e){let t=Array.from(this._menuEl.childNodes).reverse();return this._getNextSelectableNode(t,e)}};var le=class{constructor(e,t){this.lhr,this._reportUIFeatures=e,this._dom=t,this._dropDownMenu=new ae(this._dom),this._copyAttempt=!1,this.topbarEl,this.categoriesEl,this.stickyHeaderEl,this.highlightEl,this.onDropDownMenuClick=this.onDropDownMenuClick.bind(this),this.onKeyUp=this.onKeyUp.bind(this),this.onCopy=this.onCopy.bind(this),this.collapseAllDetails=this.collapseAllDetails.bind(this)}enable(e){this.lhr=e,this._dom.rootEl.addEventListener("keyup",this.onKeyUp),this._dom.document().addEventListener("copy",this.onCopy),this._dropDownMenu.setup(this.onDropDownMenuClick),this._setUpCollapseDetailsAfterPrinting(),this._dom.find(".lh-topbar__logo",this._dom.rootEl).addEventListener("click",()=>K(this._dom)),this._setupStickyHeader()}onDropDownMenuClick(e){e.preventDefault();let t=e.target;if(!(!t||!t.hasAttribute("data-action"))){switch(t.getAttribute("data-action")){case"copy":this.onCopyButtonClick();break;case"print-summary":this.collapseAllDetails(),this._print();break;case"print-expanded":this.expandAllDetails(),this._print();break;case"save-json":{let n=JSON.stringify(this.lhr,null,2);this._reportUIFeatures._saveFile(new Blob([n],{type:"application/json"}));break}case"save-html":{let n=this._reportUIFeatures.getReportHtml();try{this._reportUIFeatures._saveFile(new Blob([n],{type:"text/html"}))}catch(o){this._dom.fireEventOn("lh-log",this._dom.document(),{cmd:"error",msg:"Could not export as HTML. "+o.message})}break}case"open-viewer":{this._dom.isDevTools()?Le(this.lhr):Me(this.lhr);break}case"save-gist":{this._reportUIFeatures.saveAsGist();break}case"toggle-dark":{K(this._dom);break}case"view-unthrottled-trace":this._reportUIFeatures._opts.onViewTrace?.()}this._dropDownMenu.close()}}onCopy(e){this._copyAttempt&&e.clipboardData&&(e.preventDefault(),e.clipboardData.setData("text/plain",JSON.stringify(this.lhr,null,2)),this._dom.fireEventOn("lh-log",this._dom.document(),{cmd:"log",msg:"Report JSON copied to clipboard"})),this._copyAttempt=!1}onCopyButtonClick(){this._dom.fireEventOn("lh-analytics",this._dom.document(),{cmd:"send",fields:{hitType:"event",eventCategory:"report",eventAction:"copy"}});try{this._dom.document().queryCommandSupported("copy")&&(this._copyAttempt=!0,this._dom.document().execCommand("copy")||(this._copyAttempt=!1,this._dom.fireEventOn("lh-log",this._dom.document(),{cmd:"warn",msg:"Your browser does not support copy to clipboard."})))}catch(e){this._copyAttempt=!1,this._dom.fireEventOn("lh-log",this._dom.document(),{cmd:"log",msg:e.message})}}onKeyUp(e){(e.ctrlKey||e.metaKey)&&e.keyCode===80&&this._dropDownMenu.close()}expandAllDetails(){this._dom.findAll(".lh-categories details",this._dom.rootEl).map(t=>t.open=!0)}collapseAllDetails(){this._dom.findAll(".lh-categories details",this._dom.rootEl).map(t=>t.open=!1)}_print(){this._reportUIFeatures._opts.onPrintOverride?this._reportUIFeatures._opts.onPrintOverride(this._dom.rootEl):self.print()}resetUIState(){this._dropDownMenu.close()}_getScrollParent(e){let{overflowY:t}=window.getComputedStyle(e);return t!=="visible"&&t!=="hidden"?e:e.parentElement?this._getScrollParent(e.parentElement):document}_setUpCollapseDetailsAfterPrinting(){"onbeforeprint"in self?self.addEventListener("afterprint",this.collapseAllDetails):self.matchMedia("print").addListener(t=>{t.matches?this.expandAllDetails():this.collapseAllDetails()})}_setupStickyHeader(){this.topbarEl=this._dom.find("div.lh-topbar",this._dom.rootEl),this.categoriesEl=this._dom.find("div.lh-categories",this._dom.rootEl),window.requestAnimationFrame(()=>window.requestAnimationFrame(()=>{try{this.stickyHeaderEl=this._dom.find("div.lh-sticky-header",this._dom.rootEl)}catch{return}this.highlightEl=this._dom.createChildOf(this.stickyHeaderEl,"div","lh-highlighter");let e=this._getScrollParent(this._dom.find(".lh-container",this._dom.rootEl));e.addEventListener("scroll",()=>this._updateStickyHeader());let t=e instanceof window.Document?document.documentElement:e;new window.ResizeObserver(()=>this._updateStickyHeader()).observe(t)}))}_updateStickyHeader(){if(!this.stickyHeaderEl)return;let e=this.topbarEl.getBoundingClientRect().bottom,t=this.categoriesEl.getBoundingClientRect().top,n=e>=t,i=Array.from(this._dom.rootEl.querySelectorAll(".lh-category")).filter(p=>p.getBoundingClientRect().top-window.innerHeight/2<0),a=i.length>0?i.length-1:0,l=this.stickyHeaderEl.querySelectorAll(".lh-gauge__wrapper, .lh-fraction__wrapper"),s=l[a],c=l[0].getBoundingClientRect().left,d=s.getBoundingClientRect().left-c;this.highlightEl.style.transform=`translate(${d}px)`,this.stickyHeaderEl.classList.toggle("lh-sticky-header--visible",n)}};function kt(r,e){let t=e?new Date(e):new Date,n=t.toLocaleTimeString("en-US",{hour12:!1}),o=t.toLocaleDateString("en-US",{year:"numeric",month:"2-digit",day:"2-digit"}).split("/");o.unshift(o.pop());let i=o.join("-");return`${r}_${i}_${n}`.replace(/[/?<>\\:*|"]/g,"-")}function Te(r){let e=new URL(r.finalDisplayedUrl).hostname;return kt(e,r.fetchTime)}function At(r){return Array.from(r.tBodies[0].rows)}var ne=class{constructor(e,t={}){this.json,this._dom=e,this._opts=t,this._topbar=t.omitTopbar?null:new le(this,e),this.onMediaQueryChange=this.onMediaQueryChange.bind(this)}initFeatures(e){this.json=e,this._fullPageScreenshot=k.getFullPageScreenshot(e),this._topbar&&(this._topbar.enable(e),this._topbar.resetUIState()),this._setupMediaQueryListeners(),this._setupThirdPartyFilter(),this._setupElementScreenshotOverlay(this._dom.rootEl);let t=this._dom.isDevTools()||this._opts.disableDarkMode||this._opts.disableAutoDarkModeAndFireworks;!t&&window.matchMedia("(prefers-color-scheme: dark)").matches&&K(this._dom,!0);let o=["performance","accessibility","best-practices","seo"].every(s=>{let c=e.categories[s];return c&&c.score===1}),i=this._opts.disableFireworks||this._opts.disableAutoDarkModeAndFireworks;if(o&&!i&&(this._enableFireworks(),t||K(this._dom,!0)),e.categories.performance&&e.categories.performance.auditRefs.some(s=>!!(s.group==="metrics"&&e.audits[s.id].errorMessage))){let s=this._dom.find("input.lh-metrics-toggle__input",this._dom.rootEl);s.checked=!0}this.json.audits["script-treemap-data"]&&this.json.audits["script-treemap-data"].details&&this.addButton({text:m.strings.viewTreemapLabel,icon:"treemap",onClick:()=>Fe(this.json)}),this._opts.onViewTrace&&(e.configSettings.throttlingMethod==="simulate"?this._dom.find('a[data-action="view-unthrottled-trace"]',this._dom.rootEl).classList.remove("lh-hidden"):this.addButton({text:m.strings.viewTraceLabel,onClick:()=>this._opts.onViewTrace?.()})),this._opts.getStandaloneReportHTML&&this._dom.find('a[data-action="save-html"]',this._dom.rootEl).classList.remove("lh-hidden");for(let s of this._dom.findAll("[data-i18n]",this._dom.rootEl)){let d=s.getAttribute("data-i18n");s.textContent=m.strings[d]}}addButton(e){let t=this._dom.rootEl.querySelector(".lh-audit-group--metrics");if(!t)return;let n=t.querySelector(".lh-buttons");n||(n=this._dom.createChildOf(t,"div","lh-buttons"));let o=["lh-button"];e.icon&&(o.push("lh-report-icon"),o.push(`lh-report-icon--${e.icon}`));let i=this._dom.createChildOf(n,"button",o.join(" "));return i.textContent=e.text,i.addEventListener("click",e.onClick),i}resetUIState(){this._topbar&&this._topbar.resetUIState()}getReportHtml(){if(!this._opts.getStandaloneReportHTML)throw new Error("`getStandaloneReportHTML` is not set");return this.resetUIState(),this._opts.getStandaloneReportHTML()}saveAsGist(){throw new Error("Cannot save as gist from base report")}_enableFireworks(){this._dom.find(".lh-scores-container",this._dom.rootEl).classList.add("lh-score100")}_setupMediaQueryListeners(){let e=self.matchMedia("(max-width: 500px)");e.addListener(this.onMediaQueryChange),this.onMediaQueryChange(e)}_resetUIState(){this._topbar&&this._topbar.resetUIState()}onMediaQueryChange(e){this._dom.rootEl.classList.toggle("lh-narrow",e.matches)}_setupThirdPartyFilter(){let e=["uses-rel-preconnect","third-party-facades"],t=["legacy-javascript"];Array.from(this._dom.rootEl.querySelectorAll("table.lh-table")).filter(i=>i.querySelector("td.lh-table-column--url, td.lh-table-column--source-location")).filter(i=>{let a=i.closest(".lh-audit");if(!a)throw new Error(".lh-table not within audit");return!e.includes(a.id)}).forEach(i=>{let a=At(i),l=a.filter(f=>!f.classList.contains("lh-sub-item-row")),s=this._getThirdPartyRows(l,k.getFinalDisplayedUrl(this.json)),c=a.some(f=>f.classList.contains("lh-row--even")),d=this._dom.createComponent("3pFilter"),p=this._dom.find("input",d);p.addEventListener("change",f=>{let u=f.target instanceof HTMLInputElement&&!f.target.checked,w=!0,_=l[0];for(;_;){let E=u&&s.includes(_);do _.classList.toggle("lh-row--hidden",E),c&&(_.classList.toggle("lh-row--even",!E&&w),_.classList.toggle("lh-row--odd",!E&&!w)),_=_.nextElementSibling;while(_&&_.classList.contains("lh-sub-item-row"));E||(w=!w)}});let h=s.filter(f=>!f.classList.contains("lh-row--group")).length;this._dom.find(".lh-3p-filter-count",d).textContent=`${h}`,this._dom.find(".lh-3p-ui-string",d).textContent=m.strings.thirdPartyResourcesLabel;let g=s.length===l.length,v=!s.length;if((g||v)&&(this._dom.find("div.lh-3p-filter",d).hidden=!0),!i.parentNode)return;i.parentNode.insertBefore(d,i);let b=i.closest(".lh-audit");if(!b)throw new Error(".lh-table not within audit");t.includes(b.id)&&!g&&p.click()})}_setupElementScreenshotOverlay(e){this._fullPageScreenshot&&O.installOverlayFeature({dom:this._dom,rootEl:e,overlayContainerEl:e,fullPageScreenshot:this._fullPageScreenshot})}_getThirdPartyRows(e,t){let n=k.getRootDomain(t),o=this.json.entities?.find(a=>a.isFirstParty===!0)?.name,i=[];for(let a of e){if(o){if(!a.dataset.entity||a.dataset.entity===o)continue}else{let l=a.querySelector("div.lh-text__url");if(!l)continue;let s=l.dataset.url;if(!s||!(k.getRootDomain(s)!==n))continue}i.push(a)}return i}_saveFile(e){let t=e.type.match("json")?".json":".html",n=Te({finalDisplayedUrl:k.getFinalDisplayedUrl(this.json),fetchTime:this.json.fetchTime})+t;this._opts.onSaveFileOverride?this._opts.onSaveFileOverride(e,n):this._dom.saveFile(e,n)}};function St(r,e={}){let t=document.createElement("article");t.classList.add("lh-root","lh-vars");let n=new X(t.ownerDocument,t);return new te(n).renderReport(r,t,e),new ne(n,e).initFeatures(r),t}function Ct(r,e){return{lhr:r,missingIcuMessageIds:[]}}function zt(r,e){}function Lt(r){return!1}var Mt={registerLocaleData:zt,hasLocale:Lt};export{X as DOM,te as ReportRenderer,ne as ReportUIFeatures,Mt as format,St as renderReport,Ct as swapLocale};
2483
2617
  /**
2484
2618
  * @license
2485
- * Copyright 2017 The Lighthouse Authors. All Rights Reserved.
2486
- *
2487
- * Licensed under the Apache License, Version 2.0 (the "License");
2488
- * you may not use this file except in compliance with the License.
2489
- * You may obtain a copy of the License at
2490
- *
2491
- * http://www.apache.org/licenses/LICENSE-2.0
2492
- *
2493
- * Unless required by applicable law or agreed to in writing, software
2494
- * distributed under the License is distributed on an "AS-IS" BASIS,
2495
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
2496
- * See the License for the specific language governing permissions and
2497
- * limitations under the License.
2619
+ * Copyright 2017 Google LLC
2620
+ * SPDX-License-Identifier: Apache-2.0
2498
2621
  */
2499
2622
  /**
2500
- * @license Copyright 2023 The Lighthouse Authors. All Rights Reserved.
2501
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
2502
- * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
2623
+ * @license
2624
+ * Copyright 2023 Google LLC
2625
+ * SPDX-License-Identifier: Apache-2.0
2503
2626
  */
2504
2627
  /**
2505
- * @license Copyright 2020 The Lighthouse Authors. All Rights Reserved.
2628
+ * @license
2629
+ * Copyright 2020 Google LLC
2630
+ * SPDX-License-Identifier: Apache-2.0
2631
+ */
2632
+ /**
2633
+ * @license Copyright 2023 The Lighthouse Authors. All Rights Reserved.
2506
2634
  * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
2507
2635
  * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
2508
- */
2636
+ */
2509
2637
  /**
2510
2638
  * @license
2511
- * Copyright 2018 The Lighthouse Authors. All Rights Reserved.
2512
- *
2513
- * Licensed under the Apache License, Version 2.0 (the "License");
2514
- * you may not use this file except in compliance with the License.
2515
- * You may obtain a copy of the License at
2516
- *
2517
- * http://www.apache.org/licenses/LICENSE-2.0
2518
- *
2519
- * Unless required by applicable law or agreed to in writing, software
2520
- * distributed under the License is distributed on an "AS-IS" BASIS,
2521
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
2522
- * See the License for the specific language governing permissions and
2523
- * limitations under the License.
2639
+ * Copyright 2018 Google LLC
2640
+ * SPDX-License-Identifier: Apache-2.0
2524
2641
  */
2525
2642
  /**
2526
2643
  * @license
2527
- * Copyright 2017 The Lighthouse Authors. All Rights Reserved.
2528
- *
2529
- * Licensed under the Apache License, Version 2.0 (the "License");
2530
- * you may not use this file except in compliance with the License.
2531
- * You may obtain a copy of the License at
2532
- *
2533
- * http://www.apache.org/licenses/LICENSE-2.0
2534
- *
2535
- * Unless required by applicable law or agreed to in writing, software
2536
- * distributed under the License is distributed on an "AS-IS" BASIS,
2537
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
2538
- * See the License for the specific language governing permissions and
2539
- * limitations under the License.
2644
+ * Copyright 2017 Google LLC
2645
+ * SPDX-License-Identifier: Apache-2.0
2540
2646
  *
2541
2647
  * Dummy text for ensuring report robustness: <\/script> pre$`post %%LIGHTHOUSE_JSON%%
2542
2648
  * (this is handled by terser)
2543
2649
  */
2544
- /**
2545
- * @license Copyright 2021 The Lighthouse Authors. All Rights Reserved.
2546
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
2547
- * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
2548
- */
2549
2650
  /**
2550
2651
  * @license
2551
- * Copyright 2021 The Lighthouse Authors. All Rights Reserved.
2552
- *
2553
- * Licensed under the Apache License, Version 2.0 (the "License");
2554
- * you may not use this file except in compliance with the License.
2555
- * You may obtain a copy of the License at
2556
- *
2557
- * http://www.apache.org/licenses/LICENSE-2.0
2558
- *
2559
- * Unless required by applicable law or agreed to in writing, software
2560
- * distributed under the License is distributed on an "AS-IS" BASIS,
2561
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
2562
- * See the License for the specific language governing permissions and
2563
- * limitations under the License.
2564
- */
2565
- /**
2566
- * @license Copyright 2017 The Lighthouse Authors. All Rights Reserved.
2567
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
2568
- * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
2652
+ * Copyright 2021 Google LLC
2653
+ * SPDX-License-Identifier: Apache-2.0
2569
2654
  */