@qilin-agent/experimental-inspector 0.0.0-stage → 3.1.3

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 (930) hide show
  1. package/README.i18n.yaml +49 -0
  2. package/README.md +179 -2
  3. package/README.zh.md +180 -0
  4. package/cordis.patch.yml +5 -0
  5. package/icon.svg +12 -0
  6. package/lib/client.js +3572 -0
  7. package/lib/client.page.js +314 -0
  8. package/lib/devtools/Images/3d-center.svg +3 -0
  9. package/lib/devtools/Images/3d-pan.svg +3 -0
  10. package/lib/devtools/Images/3d-rotate.svg +3 -0
  11. package/lib/devtools/Images/accelerometer-back.svg +69 -0
  12. package/lib/devtools/Images/accelerometer-bottom.png +0 -0
  13. package/lib/devtools/Images/accelerometer-front.svg +28 -0
  14. package/lib/devtools/Images/accelerometer-left.png +0 -0
  15. package/lib/devtools/Images/accelerometer-right.png +0 -0
  16. package/lib/devtools/Images/accelerometer-top.png +0 -0
  17. package/lib/devtools/Images/account-tree.svg +10 -0
  18. package/lib/devtools/Images/add-photo.svg +3 -0
  19. package/lib/devtools/Images/ai-explorer-badge.svg +114 -0
  20. package/lib/devtools/Images/align-content-center.svg +5 -0
  21. package/lib/devtools/Images/align-content-end.svg +5 -0
  22. package/lib/devtools/Images/align-content-space-around.svg +6 -0
  23. package/lib/devtools/Images/align-content-space-between.svg +4 -0
  24. package/lib/devtools/Images/align-content-space-evenly.svg +6 -0
  25. package/lib/devtools/Images/align-content-start.svg +5 -0
  26. package/lib/devtools/Images/align-content-stretch.svg +4 -0
  27. package/lib/devtools/Images/align-items-baseline.svg +4 -0
  28. package/lib/devtools/Images/align-items-center.svg +5 -0
  29. package/lib/devtools/Images/align-items-end.svg +5 -0
  30. package/lib/devtools/Images/align-items-start.svg +5 -0
  31. package/lib/devtools/Images/align-items-stretch.svg +6 -0
  32. package/lib/devtools/Images/align-self-center.svg +3 -0
  33. package/lib/devtools/Images/align-self-end.svg +4 -0
  34. package/lib/devtools/Images/align-self-start.svg +4 -0
  35. package/lib/devtools/Images/align-self-stretch.svg +5 -0
  36. package/lib/devtools/Images/animation.svg +3 -0
  37. package/lib/devtools/Images/arrow-back.svg +4 -0
  38. package/lib/devtools/Images/arrow-collapse.svg +3 -0
  39. package/lib/devtools/Images/arrow-down.svg +10 -0
  40. package/lib/devtools/Images/arrow-drop-down-dark.svg +3 -0
  41. package/lib/devtools/Images/arrow-drop-down-light.svg +3 -0
  42. package/lib/devtools/Images/arrow-drop-down.svg +3 -0
  43. package/lib/devtools/Images/arrow-forward.svg +4 -0
  44. package/lib/devtools/Images/arrow-right-circle.svg +3 -0
  45. package/lib/devtools/Images/arrow-up-down-circle.svg +3 -0
  46. package/lib/devtools/Images/arrow-up-down.svg +3 -0
  47. package/lib/devtools/Images/arrow-up.svg +10 -0
  48. package/lib/devtools/Images/attach-file.svg +3 -0
  49. package/lib/devtools/Images/baseline-high-availability.svg +17 -0
  50. package/lib/devtools/Images/baseline-limited-availability.svg +19 -0
  51. package/lib/devtools/Images/baseline-low-availability.svg +31 -0
  52. package/lib/devtools/Images/bell.svg +3 -0
  53. package/lib/devtools/Images/bezier-curve-filled.svg +3 -0
  54. package/lib/devtools/Images/bin.svg +1 -0
  55. package/lib/devtools/Images/bottom-panel-close.svg +1 -0
  56. package/lib/devtools/Images/bottom-panel-open.svg +1 -0
  57. package/lib/devtools/Images/brackets.svg +1 -0
  58. package/lib/devtools/Images/breakpoint-circle.svg +4 -0
  59. package/lib/devtools/Images/breakpoint-crossed-filled.svg +1 -0
  60. package/lib/devtools/Images/breakpoint-crossed.svg +1 -0
  61. package/lib/devtools/Images/brush-2.svg +3 -0
  62. package/lib/devtools/Images/brush-filled.svg +1 -0
  63. package/lib/devtools/Images/brush.svg +1 -0
  64. package/lib/devtools/Images/bucket.svg +4 -0
  65. package/lib/devtools/Images/bug.svg +3 -0
  66. package/lib/devtools/Images/button-magic.svg +3 -0
  67. package/lib/devtools/Images/calendar-today.svg +3 -0
  68. package/lib/devtools/Images/center-focus-weak.svg +3 -0
  69. package/lib/devtools/Images/check-circle.svg +3 -0
  70. package/lib/devtools/Images/check-double.svg +3 -0
  71. package/lib/devtools/Images/checker.svg +12 -0
  72. package/lib/devtools/Images/checkmark.svg +1 -0
  73. package/lib/devtools/Images/chevron-double-right.svg +3 -0
  74. package/lib/devtools/Images/chevron-down.svg +3 -0
  75. package/lib/devtools/Images/chevron-left-dot.svg +4 -0
  76. package/lib/devtools/Images/chevron-left.svg +3 -0
  77. package/lib/devtools/Images/chevron-right.svg +3 -0
  78. package/lib/devtools/Images/chevron-up.svg +3 -0
  79. package/lib/devtools/Images/chromeLeft.avif +0 -0
  80. package/lib/devtools/Images/chromeMiddle.avif +0 -0
  81. package/lib/devtools/Images/chromeRight.avif +0 -0
  82. package/lib/devtools/Images/class.svg +6 -0
  83. package/lib/devtools/Images/clear-list.svg +3 -0
  84. package/lib/devtools/Images/clear.svg +3 -0
  85. package/lib/devtools/Images/cloud.svg +3 -0
  86. package/lib/devtools/Images/code-circle.svg +5 -0
  87. package/lib/devtools/Images/code-whisperer-badge.svg +166 -0
  88. package/lib/devtools/Images/code.svg +3 -0
  89. package/lib/devtools/Images/colon.svg +4 -0
  90. package/lib/devtools/Images/color-picker-filled.svg +3 -0
  91. package/lib/devtools/Images/color-picker.svg +3 -0
  92. package/lib/devtools/Images/compress.svg +8 -0
  93. package/lib/devtools/Images/console-conditional-breakpoint.svg +1 -0
  94. package/lib/devtools/Images/console-logpoint.svg +1 -0
  95. package/lib/devtools/Images/container.svg +4 -0
  96. package/lib/devtools/Images/cookie.svg +3 -0
  97. package/lib/devtools/Images/cookie_off.svg +3 -0
  98. package/lib/devtools/Images/copy.svg +3 -0
  99. package/lib/devtools/Images/corporate-fare.svg +3 -0
  100. package/lib/devtools/Images/credit-card.svg +3 -0
  101. package/lib/devtools/Images/cross-circle-filled.svg +3 -0
  102. package/lib/devtools/Images/cross-circle.svg +3 -0
  103. package/lib/devtools/Images/cross.svg +3 -0
  104. package/lib/devtools/Images/cssoverview_icons_2x.avif +0 -0
  105. package/lib/devtools/Images/database-off.svg +1 -0
  106. package/lib/devtools/Images/database.svg +3 -0
  107. package/lib/devtools/Images/deployed.svg +3 -0
  108. package/lib/devtools/Images/device-fold.svg +1 -0
  109. package/lib/devtools/Images/devices.svg +3 -0
  110. package/lib/devtools/Images/devtools-thumbnail.svg +57 -0
  111. package/lib/devtools/Images/devtools-tips.svg +61 -0
  112. package/lib/devtools/Images/devtools-user-badge.svg +129 -0
  113. package/lib/devtools/Images/devtools.svg +13 -0
  114. package/lib/devtools/Images/difference.svg +3 -0
  115. package/lib/devtools/Images/dock-bottom.svg +3 -0
  116. package/lib/devtools/Images/dock-left.svg +3 -0
  117. package/lib/devtools/Images/dock-right.svg +3 -0
  118. package/lib/devtools/Images/dock-window.svg +3 -0
  119. package/lib/devtools/Images/document.svg +3 -0
  120. package/lib/devtools/Images/dog-paw.svg +10 -0
  121. package/lib/devtools/Images/dom-detective-badge.svg +136 -0
  122. package/lib/devtools/Images/domain.svg +3 -0
  123. package/lib/devtools/Images/dots-horizontal.svg +1 -0
  124. package/lib/devtools/Images/dots-vertical.svg +3 -0
  125. package/lib/devtools/Images/download.svg +3 -0
  126. package/lib/devtools/Images/edit.svg +1 -0
  127. package/lib/devtools/Images/empty.svg +2 -0
  128. package/lib/devtools/Images/errorWave.svg +74 -0
  129. package/lib/devtools/Images/exclamation.svg +3 -0
  130. package/lib/devtools/Images/expand.svg +1 -0
  131. package/lib/devtools/Images/experiment-check.svg +1 -0
  132. package/lib/devtools/Images/experiment.svg +3 -0
  133. package/lib/devtools/Images/extension.svg +1 -0
  134. package/lib/devtools/Images/eye-crossed.svg +3 -0
  135. package/lib/devtools/Images/eye.svg +3 -0
  136. package/lib/devtools/Images/file-document.svg +3 -0
  137. package/lib/devtools/Images/file-fetch-xhr.svg +3 -0
  138. package/lib/devtools/Images/file-font.svg +4 -0
  139. package/lib/devtools/Images/file-generic.svg +3 -0
  140. package/lib/devtools/Images/file-image.svg +3 -0
  141. package/lib/devtools/Images/file-json.svg +4 -0
  142. package/lib/devtools/Images/file-manifest.svg +3 -0
  143. package/lib/devtools/Images/file-media.svg +3 -0
  144. package/lib/devtools/Images/file-script.svg +3 -0
  145. package/lib/devtools/Images/file-snippet.svg +4 -0
  146. package/lib/devtools/Images/file-stylesheet.svg +4 -0
  147. package/lib/devtools/Images/file-wasm.svg +5 -0
  148. package/lib/devtools/Images/file-websocket.svg +3 -0
  149. package/lib/devtools/Images/filter-clear.svg +3 -0
  150. package/lib/devtools/Images/filter-filled.svg +3 -0
  151. package/lib/devtools/Images/filter.svg +3 -0
  152. package/lib/devtools/Images/flex-direction.svg +5 -0
  153. package/lib/devtools/Images/flex-no-wrap.svg +5 -0
  154. package/lib/devtools/Images/flex-wrap.svg +8 -0
  155. package/lib/devtools/Images/flow.svg +3 -0
  156. package/lib/devtools/Images/flowsheet.svg +1 -0
  157. package/lib/devtools/Images/fold-more.svg +3 -0
  158. package/lib/devtools/Images/folder-asterisk.svg +10 -0
  159. package/lib/devtools/Images/folder-off.svg +3 -0
  160. package/lib/devtools/Images/folder.svg +3 -0
  161. package/lib/devtools/Images/frame-crossed.svg +3 -0
  162. package/lib/devtools/Images/frame-icon.svg +54 -0
  163. package/lib/devtools/Images/frame.svg +3 -0
  164. package/lib/devtools/Images/gdp-logo-dark.png +0 -0
  165. package/lib/devtools/Images/gdp-logo-light.png +0 -0
  166. package/lib/devtools/Images/gear-filled.svg +3 -0
  167. package/lib/devtools/Images/gear.svg +4 -0
  168. package/lib/devtools/Images/gears.svg +3 -0
  169. package/lib/devtools/Images/geminiInDevTools.png +0 -0
  170. package/lib/devtools/Images/geminiInDevTools_2x.png +0 -0
  171. package/lib/devtools/Images/global.svg +5 -0
  172. package/lib/devtools/Images/google.svg +3 -0
  173. package/lib/devtools/Images/goto-filled.svg +1 -0
  174. package/lib/devtools/Images/grid-direction.svg +6 -0
  175. package/lib/devtools/Images/grid-on.svg +10 -0
  176. package/lib/devtools/Images/group.svg +3 -0
  177. package/lib/devtools/Images/heap-snapshot.svg +6 -0
  178. package/lib/devtools/Images/heap-snapshots.svg +7 -0
  179. package/lib/devtools/Images/help.svg +3 -0
  180. package/lib/devtools/Images/history.svg +3 -0
  181. package/lib/devtools/Images/home.svg +3 -0
  182. package/lib/devtools/Images/hover.svg +6 -0
  183. package/lib/devtools/Images/iframe-crossed.svg +3 -0
  184. package/lib/devtools/Images/iframe.svg +3 -0
  185. package/lib/devtools/Images/import.svg +3 -0
  186. package/lib/devtools/Images/indeterminate-question-box.svg +3 -0
  187. package/lib/devtools/Images/info-filled.svg +3 -0
  188. package/lib/devtools/Images/info.svg +3 -0
  189. package/lib/devtools/Images/issue-cross-filled.svg +3 -0
  190. package/lib/devtools/Images/issue-exclamation-filled.svg +3 -0
  191. package/lib/devtools/Images/issue-questionmark-filled.svg +3 -0
  192. package/lib/devtools/Images/issue-text-filled.svg +3 -0
  193. package/lib/devtools/Images/justify-content-center.svg +5 -0
  194. package/lib/devtools/Images/justify-content-end.svg +5 -0
  195. package/lib/devtools/Images/justify-content-space-around.svg +6 -0
  196. package/lib/devtools/Images/justify-content-space-between.svg +4 -0
  197. package/lib/devtools/Images/justify-content-space-evenly.svg +6 -0
  198. package/lib/devtools/Images/justify-content-start.svg +5 -0
  199. package/lib/devtools/Images/justify-content-stretch.svg +4 -0
  200. package/lib/devtools/Images/justify-items-center.svg +4 -0
  201. package/lib/devtools/Images/justify-items-end.svg +4 -0
  202. package/lib/devtools/Images/justify-items-start.svg +4 -0
  203. package/lib/devtools/Images/justify-items-stretch.svg +4 -0
  204. package/lib/devtools/Images/keyboard-arrow-right.svg +1 -0
  205. package/lib/devtools/Images/keyboard-full.svg +10 -0
  206. package/lib/devtools/Images/keyboard-pen.svg +1 -0
  207. package/lib/devtools/Images/keyboard.svg +3 -0
  208. package/lib/devtools/Images/label-auto.svg +3 -0
  209. package/lib/devtools/Images/label.svg +10 -0
  210. package/lib/devtools/Images/large-arrow-right-filled.svg +1 -0
  211. package/lib/devtools/Images/layers-filled.svg +1 -0
  212. package/lib/devtools/Images/layers.svg +1 -0
  213. package/lib/devtools/Images/left-panel-close.svg +1 -0
  214. package/lib/devtools/Images/left-panel-open.svg +1 -0
  215. package/lib/devtools/Images/lightbulb-spark.svg +13 -0
  216. package/lib/devtools/Images/lightbulb.svg +3 -0
  217. package/lib/devtools/Images/lighthouse_logo.svg +158 -0
  218. package/lib/devtools/Images/list.svg +3 -0
  219. package/lib/devtools/Images/location-on.svg +3 -0
  220. package/lib/devtools/Images/lock-person.svg +1 -0
  221. package/lib/devtools/Images/lock.svg +3 -0
  222. package/lib/devtools/Images/mark-email-unread.svg +3 -0
  223. package/lib/devtools/Images/match-case.svg +3 -0
  224. package/lib/devtools/Images/match-whole-word.svg +1 -0
  225. package/lib/devtools/Images/memory.svg +6 -0
  226. package/lib/devtools/Images/minus.svg +3 -0
  227. package/lib/devtools/Images/mop.svg +1 -0
  228. package/lib/devtools/Images/mouse.svg +4 -0
  229. package/lib/devtools/Images/navigationControls.png +0 -0
  230. package/lib/devtools/Images/navigationControls_2x.png +0 -0
  231. package/lib/devtools/Images/network-settings.svg +3 -0
  232. package/lib/devtools/Images/node-stack-icon.svg +1 -0
  233. package/lib/devtools/Images/nodeIcon.avif +0 -0
  234. package/lib/devtools/Images/open-externally.svg +3 -0
  235. package/lib/devtools/Images/override.svg +11 -0
  236. package/lib/devtools/Images/palette.svg +10 -0
  237. package/lib/devtools/Images/pause-circle.svg +1 -0
  238. package/lib/devtools/Images/pause.svg +1 -0
  239. package/lib/devtools/Images/pen-spark.svg +3 -0
  240. package/lib/devtools/Images/performance-panel-delete-annotation.svg +32 -0
  241. package/lib/devtools/Images/performance-panel-diagram.svg +34 -0
  242. package/lib/devtools/Images/performance-panel-entry-label.svg +75 -0
  243. package/lib/devtools/Images/performance-panel-time-range.svg +15 -0
  244. package/lib/devtools/Images/performance.svg +3 -0
  245. package/lib/devtools/Images/person.svg +3 -0
  246. package/lib/devtools/Images/photo-camera.svg +10 -0
  247. package/lib/devtools/Images/play.svg +3 -0
  248. package/lib/devtools/Images/plus.svg +3 -0
  249. package/lib/devtools/Images/policy.svg +3 -0
  250. package/lib/devtools/Images/popoverArrows.png +0 -0
  251. package/lib/devtools/Images/popup.svg +3 -0
  252. package/lib/devtools/Images/preview_feature_video_thumbnail.svg +92 -0
  253. package/lib/devtools/Images/profile.svg +3 -0
  254. package/lib/devtools/Images/psychiatry.svg +3 -0
  255. package/lib/devtools/Images/puzzle.svg +3 -0
  256. package/lib/devtools/Images/record-start.svg +4 -0
  257. package/lib/devtools/Images/record-stop.svg +4 -0
  258. package/lib/devtools/Images/redo.svg +3 -0
  259. package/lib/devtools/Images/refresh.svg +10 -0
  260. package/lib/devtools/Images/regular-expression.svg +3 -0
  261. package/lib/devtools/Images/replace.svg +1 -0
  262. package/lib/devtools/Images/replay.svg +3 -0
  263. package/lib/devtools/Images/report.svg +1 -0
  264. package/lib/devtools/Images/resizeDiagonal.svg +1 -0
  265. package/lib/devtools/Images/resizeHorizontal.svg +1 -0
  266. package/lib/devtools/Images/resizeVertical.svg +1 -0
  267. package/lib/devtools/Images/resume.svg +1 -0
  268. package/lib/devtools/Images/revert.svg +3 -0
  269. package/lib/devtools/Images/review.svg +5 -0
  270. package/lib/devtools/Images/right-panel-close.svg +1 -0
  271. package/lib/devtools/Images/right-panel-open.svg +1 -0
  272. package/lib/devtools/Images/scissors.svg +3 -0
  273. package/lib/devtools/Images/screen-rotation.svg +1 -0
  274. package/lib/devtools/Images/search.svg +3 -0
  275. package/lib/devtools/Images/select-element.svg +3 -0
  276. package/lib/devtools/Images/send.svg +3 -0
  277. package/lib/devtools/Images/shadow.svg +3 -0
  278. package/lib/devtools/Images/shield.svg +3 -0
  279. package/lib/devtools/Images/small-status-dot.svg +3 -0
  280. package/lib/devtools/Images/smart-assistant.svg +3 -0
  281. package/lib/devtools/Images/snippet.svg +4 -0
  282. package/lib/devtools/Images/spark-info.svg +3 -0
  283. package/lib/devtools/Images/spark.svg +3 -0
  284. package/lib/devtools/Images/speculative-loads.svg +1 -0
  285. package/lib/devtools/Images/speedster-badge.svg +166 -0
  286. package/lib/devtools/Images/star.svg +3 -0
  287. package/lib/devtools/Images/step-into.svg +1 -0
  288. package/lib/devtools/Images/step-out.svg +1 -0
  289. package/lib/devtools/Images/step-over.svg +1 -0
  290. package/lib/devtools/Images/step.svg +1 -0
  291. package/lib/devtools/Images/stop.svg +3 -0
  292. package/lib/devtools/Images/symbol.svg +3 -0
  293. package/lib/devtools/Images/sync.svg +3 -0
  294. package/lib/devtools/Images/tab-move.svg +1 -0
  295. package/lib/devtools/Images/table.svg +3 -0
  296. package/lib/devtools/Images/terminal.svg +10 -0
  297. package/lib/devtools/Images/text-analysis.svg +3 -0
  298. package/lib/devtools/Images/thumb-down-filled.svg +3 -0
  299. package/lib/devtools/Images/thumb-down.svg +3 -0
  300. package/lib/devtools/Images/thumb-up-filled.svg +3 -0
  301. package/lib/devtools/Images/thumb-up.svg +3 -0
  302. package/lib/devtools/Images/tonality.svg +10 -0
  303. package/lib/devtools/Images/toolbarResizerVertical.png +0 -0
  304. package/lib/devtools/Images/top-panel-close.svg +1 -0
  305. package/lib/devtools/Images/top-panel-open.svg +1 -0
  306. package/lib/devtools/Images/touch-app.svg +4 -0
  307. package/lib/devtools/Images/touchCursor.png +0 -0
  308. package/lib/devtools/Images/touchCursor_2x.png +0 -0
  309. package/lib/devtools/Images/triangle-bottom-right.svg +3 -0
  310. package/lib/devtools/Images/triangle-down.svg +1 -0
  311. package/lib/devtools/Images/triangle-left.svg +1 -0
  312. package/lib/devtools/Images/triangle-right.svg +1 -0
  313. package/lib/devtools/Images/triangle-up.svg +3 -0
  314. package/lib/devtools/Images/trophy.svg +3 -0
  315. package/lib/devtools/Images/tune.svg +3 -0
  316. package/lib/devtools/Images/undo.svg +1 -0
  317. package/lib/devtools/Images/warning-filled.svg +3 -0
  318. package/lib/devtools/Images/warning.svg +3 -0
  319. package/lib/devtools/Images/watch.svg +3 -0
  320. package/lib/devtools/Images/whatsnew.svg +61 -0
  321. package/lib/devtools/Images/width.svg +3 -0
  322. package/lib/devtools/Images/zoom-in.svg +3 -0
  323. package/lib/devtools/LICENSE +27 -0
  324. package/lib/devtools/application_tokens.css +413 -0
  325. package/lib/devtools/chunks/FormatterActions-FcPgI0uV.js +19 -0
  326. package/lib/devtools/chunks/UIFilter-CIzBruM3.js +18 -0
  327. package/lib/devtools/chunks/UIRequestLocation-CtGcVN3I.js +48 -0
  328. package/lib/devtools/chunks/_qilin-devtools_empty-BvRk9kiK.js +0 -0
  329. package/lib/devtools/chunks/accessibility-CwvHp3sj.js +2718 -0
  330. package/lib/devtools/chunks/acorn-_jSanihy.js +3232 -0
  331. package/lib/devtools/chunks/adorners-D4aU6nuY.js +45 -0
  332. package/lib/devtools/chunks/ai_assistance-BU6E0Wio.js +4255 -0
  333. package/lib/devtools/chunks/angular-Dutmu-L9.js +117 -0
  334. package/lib/devtools/chunks/animation-TEwO5UI_.js +922 -0
  335. package/lib/devtools/chunks/application-SCf6MiCN.js +12740 -0
  336. package/lib/devtools/chunks/autofill-Dp3nMnuK.js +198 -0
  337. package/lib/devtools/chunks/autofill_manager-BXntqfdp.js +58 -0
  338. package/lib/devtools/chunks/bindings-DgoVEdsr.js +4105 -0
  339. package/lib/devtools/chunks/browser-DL1S1Kiu.js +62 -0
  340. package/lib/devtools/chunks/browser_debugger-p7Rr4IBR.js +629 -0
  341. package/lib/devtools/chunks/changes-DeW5MC9u.js +2 -0
  342. package/lib/devtools/chunks/changes-k42bihtm.js +393 -0
  343. package/lib/devtools/chunks/checkbox.css-CZJJ6atQ.js +4 -0
  344. package/lib/devtools/chunks/chunk-DF993M8W.js +11 -0
  345. package/lib/devtools/chunks/code_highlighter-BnTPt9_G.js +210 -0
  346. package/lib/devtools/chunks/codemirror-CBR9VJma.js +15842 -0
  347. package/lib/devtools/chunks/color_picker-Cuh_X19Y.js +1566 -0
  348. package/lib/devtools/chunks/common-DjRFwulW.js +15145 -0
  349. package/lib/devtools/chunks/common-Uu9A2glf.js +2 -0
  350. package/lib/devtools/chunks/common-qd_KLeYO.js +6639 -0
  351. package/lib/devtools/chunks/components-CnPGgDUW.js +704 -0
  352. package/lib/devtools/chunks/components-Cw5tHQqN.js +1338 -0
  353. package/lib/devtools/chunks/components-EJwviLtZ.js +1090 -0
  354. package/lib/devtools/chunks/console-D1WlMaFQ.js +3855 -0
  355. package/lib/devtools/chunks/console-yMm3XVTY.js +2 -0
  356. package/lib/devtools/chunks/console_counters-9SfIdrUo.js +103 -0
  357. package/lib/devtools/chunks/coverage-BbFH390Q.js +1176 -0
  358. package/lib/devtools/chunks/coverage-CLBpovLw.js +2 -0
  359. package/lib/devtools/chunks/cpp-CdElSCaB.js +435 -0
  360. package/lib/devtools/chunks/css_overview-cITV9auE.js +1288 -0
  361. package/lib/devtools/chunks/data_grid-pC5qqfsJ.js +1671 -0
  362. package/lib/devtools/chunks/developer_resources-4DqQIvy6.js +240 -0
  363. package/lib/devtools/chunks/diff-qn55JSCS.js +444 -0
  364. package/lib/devtools/chunks/dom_extension-BfrKZ4JG.js +172 -0
  365. package/lib/devtools/chunks/elements-CgEYz3mX.js +2 -0
  366. package/lib/devtools/chunks/elements-Dbx4q9-v.js +11407 -0
  367. package/lib/devtools/chunks/emulation-C6XKPPGu.js +1306 -0
  368. package/lib/devtools/chunks/emulation-D8xbdsAj.js +2 -0
  369. package/lib/devtools/chunks/emulation-EtJlEukP.js +2732 -0
  370. package/lib/devtools/chunks/emulation-cjFPXHT9.js +157 -0
  371. package/lib/devtools/chunks/event_listeners-BeTH3gi2.js +414 -0
  372. package/lib/devtools/chunks/explain-P_aDGFSD.js +747 -0
  373. package/lib/devtools/chunks/greendev-BU0QcVPX.js +152 -0
  374. package/lib/devtools/chunks/heap_snapshot-CZt2KUPL.js +427 -0
  375. package/lib/devtools/chunks/helper-CI72KvIC.js +33 -0
  376. package/lib/devtools/chunks/helpers--xrfGSwQ.js +29 -0
  377. package/lib/devtools/chunks/i18n-DvFMqQdJ.js +17 -0
  378. package/lib/devtools/chunks/icon_button-BebVdJD8.js +83 -0
  379. package/lib/devtools/chunks/inline_editor-D54X5UUr.js +1309 -0
  380. package/lib/devtools/chunks/inspector_main-DRbdXLmF.js +279 -0
  381. package/lib/devtools/chunks/issue_counter-CeOjTNGW.js +193 -0
  382. package/lib/devtools/chunks/issues-CegBKEda.js +1649 -0
  383. package/lib/devtools/chunks/issues_manager-D7nfNPN1.js +3009 -0
  384. package/lib/devtools/chunks/java-7g_qfFa2.js +263 -0
  385. package/lib/devtools/chunks/layer_viewer-CaFC5oyv.js +1423 -0
  386. package/lib/devtools/chunks/layers-CXqlD9zH.js +370 -0
  387. package/lib/devtools/chunks/legacy-Bqn4Q0Tf.js +41804 -0
  388. package/lib/devtools/chunks/legacy-DOCLCisy.js +1434 -0
  389. package/lib/devtools/chunks/less-DXiRNbd4.js +195 -0
  390. package/lib/devtools/chunks/lighthouse-DtpzvfT6.js +3920 -0
  391. package/lib/devtools/chunks/lighthouse-T9ZpmENr.js +2 -0
  392. package/lib/devtools/chunks/linear_memory_inspector-C50PtM45.js +305 -0
  393. package/lib/devtools/chunks/live-metrics-Bs7wxibB.js +284 -0
  394. package/lib/devtools/chunks/main-C5y6NscM.js +2 -0
  395. package/lib/devtools/chunks/main-DcgYyEI0.js +755 -0
  396. package/lib/devtools/chunks/markdown-tZoR6Bsu.js +1512 -0
  397. package/lib/devtools/chunks/markdown_view-C67b2DdG.js +461 -0
  398. package/lib/devtools/chunks/marked-zGgfoDxO.js +1362 -0
  399. package/lib/devtools/chunks/media-BhuqASbO.js +1337 -0
  400. package/lib/devtools/chunks/media-Wfo1AbXC.js +2 -0
  401. package/lib/devtools/chunks/menus-BAUukA5-.js +969 -0
  402. package/lib/devtools/chunks/mobile_throttling-C26zde8o.js +2 -0
  403. package/lib/devtools/chunks/mobile_throttling-Cw4AkJH4.js +1052 -0
  404. package/lib/devtools/chunks/network-C3gIloDN.js +2 -0
  405. package/lib/devtools/chunks/network-CaxdpGU2.js +9181 -0
  406. package/lib/devtools/chunks/objectValue.css-C9o9fdM2.js +4 -0
  407. package/lib/devtools/chunks/object_ui-BYgPTK_b.js +1461 -0
  408. package/lib/devtools/chunks/object_ui-E7eR7aD-.js +2 -0
  409. package/lib/devtools/chunks/perf_ui-BqzJrt4p.js +2 -0
  410. package/lib/devtools/chunks/perf_ui-CQMkYfn3.js +3143 -0
  411. package/lib/devtools/chunks/performance_monitor-B2kUoCv0.js +385 -0
  412. package/lib/devtools/chunks/php-tl5gKrxu.js +423 -0
  413. package/lib/devtools/chunks/platform-BzB373NB.js +600 -0
  414. package/lib/devtools/chunks/profiler-BGu3akEf.js +4608 -0
  415. package/lib/devtools/chunks/protocol_client-Cwf_jb8R.js +24329 -0
  416. package/lib/devtools/chunks/protocol_monitor-B9nMqAAE.js +2 -0
  417. package/lib/devtools/chunks/protocol_monitor-CvLQ8ms1.js +1224 -0
  418. package/lib/devtools/chunks/puppeteer-CaOjgj3v.js +13299 -0
  419. package/lib/devtools/chunks/python-D9AdRkMm.js +580 -0
  420. package/lib/devtools/chunks/quick_open-C3IZ69m9.js +2 -0
  421. package/lib/devtools/chunks/quick_open-DRITaPnZ.js +722 -0
  422. package/lib/devtools/chunks/recorder-C0f1n95b.js +5465 -0
  423. package/lib/devtools/chunks/recorder-actions-S2RfLX4H.js +6 -0
  424. package/lib/devtools/chunks/request_link_icon-fGy57GcW.js +87 -0
  425. package/lib/devtools/chunks/root-DbVQo07X.js +255 -0
  426. package/lib/devtools/chunks/sass-BPQlMmw2.js +370 -0
  427. package/lib/devtools/chunks/security-NbgKa3ux.js +898 -0
  428. package/lib/devtools/chunks/sensors-nM7qcBE4.js +752 -0
  429. package/lib/devtools/chunks/settings-aKtQC12v.js +1433 -0
  430. package/lib/devtools/chunks/settings_ui-CzxAFzIb.js +175 -0
  431. package/lib/devtools/chunks/snackbars-lPThuWYs.js +12010 -0
  432. package/lib/devtools/chunks/snippets-dIuBmVBv.js +173 -0
  433. package/lib/devtools/chunks/source_frame-CSjno3kf.js +1352 -0
  434. package/lib/devtools/chunks/sources-BIZssBei.js +8216 -0
  435. package/lib/devtools/chunks/sources-Bf8QJxju.js +2 -0
  436. package/lib/devtools/chunks/suggestion_input-Duuu5pyd.js +196 -0
  437. package/lib/devtools/chunks/svelte-DJS1itbE.js +744 -0
  438. package/lib/devtools/chunks/textInput.css-DPvwvIic.js +4 -0
  439. package/lib/devtools/chunks/text_editor-Dq1P6D2J.js +15706 -0
  440. package/lib/devtools/chunks/text_utils-ohNt_gua.js +608 -0
  441. package/lib/devtools/chunks/theme_support-CbSSLkbO.js +92 -0
  442. package/lib/devtools/chunks/third-party-web-DGiPoc0U.js +12626 -0
  443. package/lib/devtools/chunks/timeline-BE_ysZxO.js +2 -0
  444. package/lib/devtools/chunks/timeline-C4vCX79k.js +16347 -0
  445. package/lib/devtools/chunks/utils-CELci976.js +298 -0
  446. package/lib/devtools/chunks/vue-CjH9yovn.js +73 -0
  447. package/lib/devtools/chunks/wast-CbGHiqaW.js +109 -0
  448. package/lib/devtools/chunks/web_audio-IdfBLjwV.js +277 -0
  449. package/lib/devtools/chunks/webauthn-iRZlbjGV.js +522 -0
  450. package/lib/devtools/chunks/whats_new-DOTPf2xJ.js +177 -0
  451. package/lib/devtools/chunks/xml-DI9dcP5w.js +327 -0
  452. package/lib/devtools/connect.js +9 -0
  453. package/lib/devtools/design_system_tokens.css +1061 -0
  454. package/lib/devtools/device_mode_emulation_frame.html +25 -0
  455. package/lib/devtools/devtools_app.html +25 -0
  456. package/lib/devtools/emulated_devices/optimized/MotoG4-landscape.avif +0 -0
  457. package/lib/devtools/emulated_devices/optimized/MotoG4-portrait.avif +0 -0
  458. package/lib/devtools/emulated_devices/optimized/Nexus5X-landscape.avif +0 -0
  459. package/lib/devtools/emulated_devices/optimized/Nexus5X-portrait.avif +0 -0
  460. package/lib/devtools/emulated_devices/optimized/Nexus6P-landscape.avif +0 -0
  461. package/lib/devtools/emulated_devices/optimized/Nexus6P-portrait.avif +0 -0
  462. package/lib/devtools/emulated_devices/optimized/google-nest-hub-horizontal.avif +0 -0
  463. package/lib/devtools/emulated_devices/optimized/google-nest-hub-max-horizontal.avif +0 -0
  464. package/lib/devtools/emulated_devices/optimized/google-nexus-5-horizontal-default-1x.avif +0 -0
  465. package/lib/devtools/emulated_devices/optimized/google-nexus-5-horizontal-default-2x.avif +0 -0
  466. package/lib/devtools/emulated_devices/optimized/google-nexus-5-horizontal-keyboard-1x.avif +0 -0
  467. package/lib/devtools/emulated_devices/optimized/google-nexus-5-horizontal-keyboard-2x.avif +0 -0
  468. package/lib/devtools/emulated_devices/optimized/google-nexus-5-horizontal-navigation-1x.avif +0 -0
  469. package/lib/devtools/emulated_devices/optimized/google-nexus-5-horizontal-navigation-2x.avif +0 -0
  470. package/lib/devtools/emulated_devices/optimized/google-nexus-5-vertical-default-1x.avif +0 -0
  471. package/lib/devtools/emulated_devices/optimized/google-nexus-5-vertical-default-2x.avif +0 -0
  472. package/lib/devtools/emulated_devices/optimized/google-nexus-5-vertical-keyboard-1x.avif +0 -0
  473. package/lib/devtools/emulated_devices/optimized/google-nexus-5-vertical-keyboard-2x.avif +0 -0
  474. package/lib/devtools/emulated_devices/optimized/google-nexus-5-vertical-navigation-1x.avif +0 -0
  475. package/lib/devtools/emulated_devices/optimized/google-nexus-5-vertical-navigation-2x.avif +0 -0
  476. package/lib/devtools/emulated_devices/optimized/google-nexus-5x-horizontal-default-1x.avif +0 -0
  477. package/lib/devtools/emulated_devices/optimized/google-nexus-5x-horizontal-default-2x.avif +0 -0
  478. package/lib/devtools/emulated_devices/optimized/google-nexus-5x-horizontal-keyboard-1x.avif +0 -0
  479. package/lib/devtools/emulated_devices/optimized/google-nexus-5x-horizontal-keyboard-2x.avif +0 -0
  480. package/lib/devtools/emulated_devices/optimized/google-nexus-5x-horizontal-navigation-1x.avif +0 -0
  481. package/lib/devtools/emulated_devices/optimized/google-nexus-5x-horizontal-navigation-2x.avif +0 -0
  482. package/lib/devtools/emulated_devices/optimized/google-nexus-5x-vertical-default-1x.avif +0 -0
  483. package/lib/devtools/emulated_devices/optimized/google-nexus-5x-vertical-default-2x.avif +0 -0
  484. package/lib/devtools/emulated_devices/optimized/google-nexus-5x-vertical-keyboard-1x.avif +0 -0
  485. package/lib/devtools/emulated_devices/optimized/google-nexus-5x-vertical-keyboard-2x.avif +0 -0
  486. package/lib/devtools/emulated_devices/optimized/google-nexus-5x-vertical-navigation-1x.avif +0 -0
  487. package/lib/devtools/emulated_devices/optimized/google-nexus-5x-vertical-navigation-2x.avif +0 -0
  488. package/lib/devtools/emulated_devices/optimized/iPad-landscape.avif +0 -0
  489. package/lib/devtools/emulated_devices/optimized/iPad-portrait.avif +0 -0
  490. package/lib/devtools/emulated_devices/optimized/iPhone5-landscape.avif +0 -0
  491. package/lib/devtools/emulated_devices/optimized/iPhone5-portrait.avif +0 -0
  492. package/lib/devtools/emulated_devices/optimized/iPhone6-landscape.avif +0 -0
  493. package/lib/devtools/emulated_devices/optimized/iPhone6-portrait.avif +0 -0
  494. package/lib/devtools/emulated_devices/optimized/iPhone6Plus-landscape.avif +0 -0
  495. package/lib/devtools/emulated_devices/optimized/iPhone6Plus-portrait.avif +0 -0
  496. package/lib/devtools/emulated_devices/optimized/optimized_images.gni +53 -0
  497. package/lib/devtools/entrypoints/device_mode_emulation_frame/device_mode_emulation_frame.js +4 -0
  498. package/lib/devtools/entrypoints/devtools_app/devtools_app.js +6240 -0
  499. package/lib/devtools/entrypoints/formatter_worker/formatter_worker-entrypoint.js +2810 -0
  500. package/lib/devtools/entrypoints/heap_snapshot_worker/heap_snapshot_worker-entrypoint.js +2142 -0
  501. package/lib/devtools/entrypoints/lighthouse_worker/lighthouse_worker.js +290095 -0
  502. package/lib/devtools/entrypoints/wasmparser_worker/wasmparser_worker-entrypoint.js +3403 -0
  503. package/lib/devtools/models/issues_manager/descriptions/CoepCoopSandboxedIframeCannotNavigateToCoopPage.md +4 -0
  504. package/lib/devtools/models/issues_manager/descriptions/CoepCorpNotSameOrigin.md +8 -0
  505. package/lib/devtools/models/issues_manager/descriptions/CoepCorpNotSameOriginAfterDefaultedToSameOriginByCoep.md +18 -0
  506. package/lib/devtools/models/issues_manager/descriptions/CoepCorpNotSameSite.md +7 -0
  507. package/lib/devtools/models/issues_manager/descriptions/CoepFrameResourceNeedsCoepHeader.md +10 -0
  508. package/lib/devtools/models/issues_manager/descriptions/CompatibilityModeQuirks.md +5 -0
  509. package/lib/devtools/models/issues_manager/descriptions/CookieAttributeValueExceedsMaxSize.md +5 -0
  510. package/lib/devtools/models/issues_manager/descriptions/LowTextContrast.md +5 -0
  511. package/lib/devtools/models/issues_manager/descriptions/SameSiteExcludeContextDowngradeRead.md +8 -0
  512. package/lib/devtools/models/issues_manager/descriptions/SameSiteExcludeContextDowngradeSet.md +8 -0
  513. package/lib/devtools/models/issues_manager/descriptions/SameSiteExcludeNavigationContextDowngrade.md +8 -0
  514. package/lib/devtools/models/issues_manager/descriptions/SameSiteNoneInsecureErrorRead.md +8 -0
  515. package/lib/devtools/models/issues_manager/descriptions/SameSiteNoneInsecureErrorSet.md +8 -0
  516. package/lib/devtools/models/issues_manager/descriptions/SameSiteNoneInsecureWarnRead.md +8 -0
  517. package/lib/devtools/models/issues_manager/descriptions/SameSiteNoneInsecureWarnSet.md +8 -0
  518. package/lib/devtools/models/issues_manager/descriptions/SameSiteUnspecifiedLaxAllowUnsafeRead.md +9 -0
  519. package/lib/devtools/models/issues_manager/descriptions/SameSiteUnspecifiedLaxAllowUnsafeSet.md +9 -0
  520. package/lib/devtools/models/issues_manager/descriptions/SameSiteWarnCrossDowngradeRead.md +8 -0
  521. package/lib/devtools/models/issues_manager/descriptions/SameSiteWarnCrossDowngradeSet.md +8 -0
  522. package/lib/devtools/models/issues_manager/descriptions/SameSiteWarnStrictLaxDowngradeStrict.md +8 -0
  523. package/lib/devtools/models/issues_manager/descriptions/arInsecureContext.md +7 -0
  524. package/lib/devtools/models/issues_manager/descriptions/arInvalidInfoHeader.md +5 -0
  525. package/lib/devtools/models/issues_manager/descriptions/arInvalidRegisterOsSourceHeader.md +5 -0
  526. package/lib/devtools/models/issues_manager/descriptions/arInvalidRegisterOsTriggerHeader.md +5 -0
  527. package/lib/devtools/models/issues_manager/descriptions/arInvalidRegisterSourceHeader.md +5 -0
  528. package/lib/devtools/models/issues_manager/descriptions/arInvalidRegisterTriggerHeader.md +5 -0
  529. package/lib/devtools/models/issues_manager/descriptions/arNavigationRegistrationUniqueScopeAlreadySet.md +5 -0
  530. package/lib/devtools/models/issues_manager/descriptions/arNavigationRegistrationWithoutTransientUserActivation.md +6 -0
  531. package/lib/devtools/models/issues_manager/descriptions/arNoRegisterOsSourceHeader.md +5 -0
  532. package/lib/devtools/models/issues_manager/descriptions/arNoRegisterOsTriggerHeader.md +5 -0
  533. package/lib/devtools/models/issues_manager/descriptions/arNoRegisterSourceHeader.md +5 -0
  534. package/lib/devtools/models/issues_manager/descriptions/arNoRegisterTriggerHeader.md +5 -0
  535. package/lib/devtools/models/issues_manager/descriptions/arNoWebOrOsSupport.md +4 -0
  536. package/lib/devtools/models/issues_manager/descriptions/arOsSourceIgnored.md +18 -0
  537. package/lib/devtools/models/issues_manager/descriptions/arOsTriggerIgnored.md +19 -0
  538. package/lib/devtools/models/issues_manager/descriptions/arPermissionPolicyDisabled.md +8 -0
  539. package/lib/devtools/models/issues_manager/descriptions/arSourceAndTriggerHeaders.md +9 -0
  540. package/lib/devtools/models/issues_manager/descriptions/arSourceIgnored.md +13 -0
  541. package/lib/devtools/models/issues_manager/descriptions/arTriggerIgnored.md +12 -0
  542. package/lib/devtools/models/issues_manager/descriptions/arUntrustworthyReportingOrigin.md +10 -0
  543. package/lib/devtools/models/issues_manager/descriptions/arWebAndOsHeaders.md +11 -0
  544. package/lib/devtools/models/issues_manager/descriptions/bounceTrackingMitigations.md +3 -0
  545. package/lib/devtools/models/issues_manager/descriptions/clientHintMetaTagAllowListInvalidOrigin.md +4 -0
  546. package/lib/devtools/models/issues_manager/descriptions/clientHintMetaTagModifiedHTML.md +4 -0
  547. package/lib/devtools/models/issues_manager/descriptions/connectionAllowlistInvalidAllowlistItemType.md +12 -0
  548. package/lib/devtools/models/issues_manager/descriptions/connectionAllowlistInvalidHeader.md +12 -0
  549. package/lib/devtools/models/issues_manager/descriptions/connectionAllowlistInvalidUrlPattern.md +8 -0
  550. package/lib/devtools/models/issues_manager/descriptions/connectionAllowlistItemNotInnerList.md +12 -0
  551. package/lib/devtools/models/issues_manager/descriptions/connectionAllowlistMoreThanOneList.md +7 -0
  552. package/lib/devtools/models/issues_manager/descriptions/connectionAllowlistReportingEndpointNotToken.md +10 -0
  553. package/lib/devtools/models/issues_manager/descriptions/cookieCrossSiteRedirectDowngrade.md +12 -0
  554. package/lib/devtools/models/issues_manager/descriptions/cookieExcludeBlockedWithinRelatedWebsiteSet.md +4 -0
  555. package/lib/devtools/models/issues_manager/descriptions/cookieExcludeDomainNonAscii.md +11 -0
  556. package/lib/devtools/models/issues_manager/descriptions/cookieExcludePortMismatch.md +8 -0
  557. package/lib/devtools/models/issues_manager/descriptions/cookieExcludeSchemeMismatch.md +7 -0
  558. package/lib/devtools/models/issues_manager/descriptions/cookieExcludeThirdPartyPhaseoutRead.md +6 -0
  559. package/lib/devtools/models/issues_manager/descriptions/cookieExcludeThirdPartyPhaseoutSet.md +6 -0
  560. package/lib/devtools/models/issues_manager/descriptions/cookieWarnDomainNonAscii.md +11 -0
  561. package/lib/devtools/models/issues_manager/descriptions/cookieWarnMetadataGrantRead.md +4 -0
  562. package/lib/devtools/models/issues_manager/descriptions/cookieWarnMetadataGrantSet.md +4 -0
  563. package/lib/devtools/models/issues_manager/descriptions/cookieWarnThirdPartyPhaseoutRead.md +6 -0
  564. package/lib/devtools/models/issues_manager/descriptions/cookieWarnThirdPartyPhaseoutSet.md +6 -0
  565. package/lib/devtools/models/issues_manager/descriptions/corsAllowCredentialsRequired.md +6 -0
  566. package/lib/devtools/models/issues_manager/descriptions/corsDisabledScheme.md +7 -0
  567. package/lib/devtools/models/issues_manager/descriptions/corsDisallowedByMode.md +7 -0
  568. package/lib/devtools/models/issues_manager/descriptions/corsHeaderDisallowedByPreflightResponse.md +5 -0
  569. package/lib/devtools/models/issues_manager/descriptions/corsInvalidHeaderValues.md +7 -0
  570. package/lib/devtools/models/issues_manager/descriptions/corsLocalNetworkAccessPermissionDenied.md +19 -0
  571. package/lib/devtools/models/issues_manager/descriptions/corsMethodDisallowedByPreflightResponse.md +5 -0
  572. package/lib/devtools/models/issues_manager/descriptions/corsNoCorsRedirectModeNotFollow.md +5 -0
  573. package/lib/devtools/models/issues_manager/descriptions/corsOriginMismatch.md +6 -0
  574. package/lib/devtools/models/issues_manager/descriptions/corsPreflightResponseInvalid.md +5 -0
  575. package/lib/devtools/models/issues_manager/descriptions/corsRedirectContainsCredentials.md +5 -0
  576. package/lib/devtools/models/issues_manager/descriptions/corsWildcardOriginNotAllowed.md +8 -0
  577. package/lib/devtools/models/issues_manager/descriptions/cspEvalViolation.md +9 -0
  578. package/lib/devtools/models/issues_manager/descriptions/cspInlineViolation.md +10 -0
  579. package/lib/devtools/models/issues_manager/descriptions/cspTrustedTypesPolicyViolation.md +5 -0
  580. package/lib/devtools/models/issues_manager/descriptions/cspTrustedTypesSinkViolation.md +8 -0
  581. package/lib/devtools/models/issues_manager/descriptions/cspURLViolation.md +10 -0
  582. package/lib/devtools/models/issues_manager/descriptions/deprecation.md +3 -0
  583. package/lib/devtools/models/issues_manager/descriptions/emailVerificationRequestDnsFetchFailed.md +1 -0
  584. package/lib/devtools/models/issues_manager/descriptions/emailVerificationRequestDnsInvalidRecord.md +1 -0
  585. package/lib/devtools/models/issues_manager/descriptions/emailVerificationRequestInvalidEmail.md +1 -0
  586. package/lib/devtools/models/issues_manager/descriptions/emailVerificationRequestKeyBindingSigningFailed.md +1 -0
  587. package/lib/devtools/models/issues_manager/descriptions/emailVerificationRequestRpOriginIsOpaque.md +1 -0
  588. package/lib/devtools/models/issues_manager/descriptions/emailVerificationRequestTokenHttpNotFound.md +1 -0
  589. package/lib/devtools/models/issues_manager/descriptions/emailVerificationRequestTokenInvalidContentType.md +1 -0
  590. package/lib/devtools/models/issues_manager/descriptions/emailVerificationRequestTokenInvalidResponse.md +1 -0
  591. package/lib/devtools/models/issues_manager/descriptions/emailVerificationRequestTokenInvalidSdJwt.md +1 -0
  592. package/lib/devtools/models/issues_manager/descriptions/emailVerificationRequestTokenMalformedSdJwt.md +1 -0
  593. package/lib/devtools/models/issues_manager/descriptions/emailVerificationRequestTokenNoResponse.md +1 -0
  594. package/lib/devtools/models/issues_manager/descriptions/emailVerificationRequestUserLoggedOut.md +1 -0
  595. package/lib/devtools/models/issues_manager/descriptions/emailVerificationRequestWellKnownAccountsEndpointCrossOrigin.md +1 -0
  596. package/lib/devtools/models/issues_manager/descriptions/emailVerificationRequestWellKnownHttpNotFound.md +1 -0
  597. package/lib/devtools/models/issues_manager/descriptions/emailVerificationRequestWellKnownInvalidContentType.md +1 -0
  598. package/lib/devtools/models/issues_manager/descriptions/emailVerificationRequestWellKnownInvalidResponse.md +1 -0
  599. package/lib/devtools/models/issues_manager/descriptions/emailVerificationRequestWellKnownIssuanceEndpointCrossOrigin.md +1 -0
  600. package/lib/devtools/models/issues_manager/descriptions/emailVerificationRequestWellKnownListEmpty.md +1 -0
  601. package/lib/devtools/models/issues_manager/descriptions/emailVerificationRequestWellKnownMissingAccountsEndpoint.md +1 -0
  602. package/lib/devtools/models/issues_manager/descriptions/emailVerificationRequestWellKnownMissingIssuanceEndpoint.md +1 -0
  603. package/lib/devtools/models/issues_manager/descriptions/emailVerificationRequestWellKnownNoResponse.md +1 -0
  604. package/lib/devtools/models/issues_manager/descriptions/emailVerificationRequestWellKnownUnsupportedSigningAlgorithm.md +1 -0
  605. package/lib/devtools/models/issues_manager/descriptions/federatedAuthRequestAccountsHttpNotFound.md +1 -0
  606. package/lib/devtools/models/issues_manager/descriptions/federatedAuthRequestAccountsInvalidResponse.md +1 -0
  607. package/lib/devtools/models/issues_manager/descriptions/federatedAuthRequestAccountsNoResponse.md +1 -0
  608. package/lib/devtools/models/issues_manager/descriptions/federatedAuthRequestApprovalDeclined.md +1 -0
  609. package/lib/devtools/models/issues_manager/descriptions/federatedAuthRequestCanceled.md +1 -0
  610. package/lib/devtools/models/issues_manager/descriptions/federatedAuthRequestErrorFetchingSignin.md +1 -0
  611. package/lib/devtools/models/issues_manager/descriptions/federatedAuthRequestErrorIdToken.md +1 -0
  612. package/lib/devtools/models/issues_manager/descriptions/federatedAuthRequestIdTokenHttpNotFound.md +1 -0
  613. package/lib/devtools/models/issues_manager/descriptions/federatedAuthRequestIdTokenInvalidRequest.md +1 -0
  614. package/lib/devtools/models/issues_manager/descriptions/federatedAuthRequestIdTokenInvalidResponse.md +1 -0
  615. package/lib/devtools/models/issues_manager/descriptions/federatedAuthRequestIdTokenNoResponse.md +1 -0
  616. package/lib/devtools/models/issues_manager/descriptions/federatedAuthRequestInvalidSigninResponse.md +1 -0
  617. package/lib/devtools/models/issues_manager/descriptions/federatedAuthRequestManifestHttpNotFound.md +1 -0
  618. package/lib/devtools/models/issues_manager/descriptions/federatedAuthRequestManifestInvalidResponse.md +1 -0
  619. package/lib/devtools/models/issues_manager/descriptions/federatedAuthRequestManifestNoResponse.md +1 -0
  620. package/lib/devtools/models/issues_manager/descriptions/federatedAuthRequestTooManyRequests.md +1 -0
  621. package/lib/devtools/models/issues_manager/descriptions/federatedAuthUserInfoRequestInvalidAccountsResponse.md +1 -0
  622. package/lib/devtools/models/issues_manager/descriptions/federatedAuthUserInfoRequestInvalidConfigOrWellKnown.md +1 -0
  623. package/lib/devtools/models/issues_manager/descriptions/federatedAuthUserInfoRequestNoAccountSharingPermission.md +1 -0
  624. package/lib/devtools/models/issues_manager/descriptions/federatedAuthUserInfoRequestNoApiPermission.md +1 -0
  625. package/lib/devtools/models/issues_manager/descriptions/federatedAuthUserInfoRequestNoReturningUserFromFetchedAccounts.md +1 -0
  626. package/lib/devtools/models/issues_manager/descriptions/federatedAuthUserInfoRequestNotIframe.md +1 -0
  627. package/lib/devtools/models/issues_manager/descriptions/federatedAuthUserInfoRequestNotPotentiallyTrustworthy.md +1 -0
  628. package/lib/devtools/models/issues_manager/descriptions/federatedAuthUserInfoRequestNotSameOrigin.md +1 -0
  629. package/lib/devtools/models/issues_manager/descriptions/federatedAuthUserInfoRequestNotSignedInWithIdp.md +1 -0
  630. package/lib/devtools/models/issues_manager/descriptions/fetchingPartitionedBlobURL.md +7 -0
  631. package/lib/devtools/models/issues_manager/descriptions/genericBackUINavigationWouldSkipAd.md +4 -0
  632. package/lib/devtools/models/issues_manager/descriptions/genericFormAriaLabelledByToNonExistingIdError.md +8 -0
  633. package/lib/devtools/models/issues_manager/descriptions/genericFormAutocompleteAttributeEmptyError.md +5 -0
  634. package/lib/devtools/models/issues_manager/descriptions/genericFormDuplicateIdForInputError.md +5 -0
  635. package/lib/devtools/models/issues_manager/descriptions/genericFormEmptyIdAndNameAttributesForInputError.md +5 -0
  636. package/lib/devtools/models/issues_manager/descriptions/genericFormInputAssignedAutocompleteValueToIdOrNameAttributeError.md +5 -0
  637. package/lib/devtools/models/issues_manager/descriptions/genericFormInputHasWrongButWellIntendedAutocompleteValueError.md +5 -0
  638. package/lib/devtools/models/issues_manager/descriptions/genericFormInputWithNoLabelError.md +5 -0
  639. package/lib/devtools/models/issues_manager/descriptions/genericFormLabelForMatchesNonExistingIdError.md +5 -0
  640. package/lib/devtools/models/issues_manager/descriptions/genericFormLabelForNameError.md +5 -0
  641. package/lib/devtools/models/issues_manager/descriptions/genericFormLabelHasNeitherForNorNestedInputError.md +5 -0
  642. package/lib/devtools/models/issues_manager/descriptions/genericFormModelContextMissingToolDescription.md +5 -0
  643. package/lib/devtools/models/issues_manager/descriptions/genericFormModelContextMissingToolName.md +5 -0
  644. package/lib/devtools/models/issues_manager/descriptions/genericFormModelContextParameterMissingName.md +5 -0
  645. package/lib/devtools/models/issues_manager/descriptions/genericFormModelContextParameterMissingTitleAndDescription.md +5 -0
  646. package/lib/devtools/models/issues_manager/descriptions/genericFormModelContextRequiredParameterMissingName.md +5 -0
  647. package/lib/devtools/models/issues_manager/descriptions/genericNavigationEntryMarkedSkippable.md +7 -0
  648. package/lib/devtools/models/issues_manager/descriptions/genericResponseWasBlockedByORB.md +4 -0
  649. package/lib/devtools/models/issues_manager/descriptions/heavyAd.md +10 -0
  650. package/lib/devtools/models/issues_manager/descriptions/mixedContent.md +5 -0
  651. package/lib/devtools/models/issues_manager/descriptions/navigatingPartitionedBlobURL.md +5 -0
  652. package/lib/devtools/models/issues_manager/descriptions/permissionElementActivationDisabled.md +7 -0
  653. package/lib/devtools/models/issues_manager/descriptions/permissionElementActivationDisabledWithOccluder.md +9 -0
  654. package/lib/devtools/models/issues_manager/descriptions/permissionElementActivationDisabledWithOccluderParent.md +9 -0
  655. package/lib/devtools/models/issues_manager/descriptions/permissionElementCspFrameAncestorsMissing.md +5 -0
  656. package/lib/devtools/models/issues_manager/descriptions/permissionElementFencedFrameDisallowed.md +5 -0
  657. package/lib/devtools/models/issues_manager/descriptions/permissionElementFontSizeTooLarge.md +5 -0
  658. package/lib/devtools/models/issues_manager/descriptions/permissionElementFontSizeTooSmall.md +5 -0
  659. package/lib/devtools/models/issues_manager/descriptions/permissionElementGeolocationDeprecated.md +5 -0
  660. package/lib/devtools/models/issues_manager/descriptions/permissionElementInsetBoxShadowUnsupported.md +5 -0
  661. package/lib/devtools/models/issues_manager/descriptions/permissionElementInvalidDisplayStyle.md +5 -0
  662. package/lib/devtools/models/issues_manager/descriptions/permissionElementInvalidSizeValue.md +5 -0
  663. package/lib/devtools/models/issues_manager/descriptions/permissionElementInvalidType.md +5 -0
  664. package/lib/devtools/models/issues_manager/descriptions/permissionElementInvalidTypeActivation.md +5 -0
  665. package/lib/devtools/models/issues_manager/descriptions/permissionElementLowContrast.md +5 -0
  666. package/lib/devtools/models/issues_manager/descriptions/permissionElementNonOpaqueColor.md +5 -0
  667. package/lib/devtools/models/issues_manager/descriptions/permissionElementPaddingBottomUnsupported.md +6 -0
  668. package/lib/devtools/models/issues_manager/descriptions/permissionElementPaddingRightUnsupported.md +6 -0
  669. package/lib/devtools/models/issues_manager/descriptions/permissionElementPermissionsPolicyBlocked.md +5 -0
  670. package/lib/devtools/models/issues_manager/descriptions/permissionElementRegistrationFailed.md +5 -0
  671. package/lib/devtools/models/issues_manager/descriptions/permissionElementRequestInProgress.md +5 -0
  672. package/lib/devtools/models/issues_manager/descriptions/permissionElementSecurityChecksFailed.md +5 -0
  673. package/lib/devtools/models/issues_manager/descriptions/permissionElementTypeNotSupported.md +5 -0
  674. package/lib/devtools/models/issues_manager/descriptions/permissionElementUntrustedEvent.md +7 -0
  675. package/lib/devtools/models/issues_manager/descriptions/placeholderDescriptionForInvisibleIssues.md +3 -0
  676. package/lib/devtools/models/issues_manager/descriptions/propertyRuleInvalidNameIssue.md +3 -0
  677. package/lib/devtools/models/issues_manager/descriptions/propertyRuleIssue.md +7 -0
  678. package/lib/devtools/models/issues_manager/descriptions/selectElementAccessibilityDisallowedOptGroupChild.md +7 -0
  679. package/lib/devtools/models/issues_manager/descriptions/selectElementAccessibilityDisallowedSelectChild.md +7 -0
  680. package/lib/devtools/models/issues_manager/descriptions/selectElementAccessibilityInteractiveContentAttributesSelectDescendant.md +3 -0
  681. package/lib/devtools/models/issues_manager/descriptions/selectElementAccessibilityInteractiveContentLegendChild.md +3 -0
  682. package/lib/devtools/models/issues_manager/descriptions/selectElementAccessibilityInteractiveContentOptionChild.md +3 -0
  683. package/lib/devtools/models/issues_manager/descriptions/selectElementAccessibilityNonPhrasingContentOptionChild.md +3 -0
  684. package/lib/devtools/models/issues_manager/descriptions/selectivePermissionsIntervention.md +7 -0
  685. package/lib/devtools/models/issues_manager/descriptions/sharedArrayBuffer.md +7 -0
  686. package/lib/devtools/models/issues_manager/descriptions/sharedDictionaryUseErrorCrossOriginNoCorsRequest.md +1 -0
  687. package/lib/devtools/models/issues_manager/descriptions/sharedDictionaryUseErrorDictionaryLoadFailure.md +3 -0
  688. package/lib/devtools/models/issues_manager/descriptions/sharedDictionaryUseErrorMatchingDictionaryNotUsed.md +3 -0
  689. package/lib/devtools/models/issues_manager/descriptions/sharedDictionaryUseErrorUnexpectedContentDictionaryHeader.md +1 -0
  690. package/lib/devtools/models/issues_manager/descriptions/sharedDictionaryWriteErrorCossOriginNoCorsRequest.md +1 -0
  691. package/lib/devtools/models/issues_manager/descriptions/sharedDictionaryWriteErrorDisallowedBySettings.md +1 -0
  692. package/lib/devtools/models/issues_manager/descriptions/sharedDictionaryWriteErrorExpiredResponse.md +3 -0
  693. package/lib/devtools/models/issues_manager/descriptions/sharedDictionaryWriteErrorFeatureDisabled.md +3 -0
  694. package/lib/devtools/models/issues_manager/descriptions/sharedDictionaryWriteErrorInsufficientResources.md +1 -0
  695. package/lib/devtools/models/issues_manager/descriptions/sharedDictionaryWriteErrorInvalidMatchField.md +1 -0
  696. package/lib/devtools/models/issues_manager/descriptions/sharedDictionaryWriteErrorInvalidStructuredHeader.md +1 -0
  697. package/lib/devtools/models/issues_manager/descriptions/sharedDictionaryWriteErrorInvalidTTLField.md +1 -0
  698. package/lib/devtools/models/issues_manager/descriptions/sharedDictionaryWriteErrorNavigationRequest.md +3 -0
  699. package/lib/devtools/models/issues_manager/descriptions/sharedDictionaryWriteErrorNoMatchField.md +1 -0
  700. package/lib/devtools/models/issues_manager/descriptions/sharedDictionaryWriteErrorNonIntegerTTLField.md +1 -0
  701. package/lib/devtools/models/issues_manager/descriptions/sharedDictionaryWriteErrorNonListMatchDestField.md +1 -0
  702. package/lib/devtools/models/issues_manager/descriptions/sharedDictionaryWriteErrorNonSecureContext.md +3 -0
  703. package/lib/devtools/models/issues_manager/descriptions/sharedDictionaryWriteErrorNonStringIdField.md +1 -0
  704. package/lib/devtools/models/issues_manager/descriptions/sharedDictionaryWriteErrorNonStringInMatchDestList.md +1 -0
  705. package/lib/devtools/models/issues_manager/descriptions/sharedDictionaryWriteErrorNonStringMatchField.md +1 -0
  706. package/lib/devtools/models/issues_manager/descriptions/sharedDictionaryWriteErrorNonTokenTypeField.md +1 -0
  707. package/lib/devtools/models/issues_manager/descriptions/sharedDictionaryWriteErrorRequestAborted.md +1 -0
  708. package/lib/devtools/models/issues_manager/descriptions/sharedDictionaryWriteErrorShuttingDown.md +1 -0
  709. package/lib/devtools/models/issues_manager/descriptions/sharedDictionaryWriteErrorTooLongIdField.md +3 -0
  710. package/lib/devtools/models/issues_manager/descriptions/sharedDictionaryWriteErrorUnsupportedType.md +3 -0
  711. package/lib/devtools/models/issues_manager/descriptions/sriInvalidSignatureHeader.md +14 -0
  712. package/lib/devtools/models/issues_manager/descriptions/sriInvalidSignatureInputHeader.md +15 -0
  713. package/lib/devtools/models/issues_manager/descriptions/sriMissingSignatureHeader.md +8 -0
  714. package/lib/devtools/models/issues_manager/descriptions/sriMissingSignatureInputHeader.md +7 -0
  715. package/lib/devtools/models/issues_manager/descriptions/sriSignatureHeaderValueIsIncorrectLength.md +11 -0
  716. package/lib/devtools/models/issues_manager/descriptions/sriSignatureHeaderValueIsNotByteSequence.md +14 -0
  717. package/lib/devtools/models/issues_manager/descriptions/sriSignatureHeaderValueIsParameterized.md +15 -0
  718. package/lib/devtools/models/issues_manager/descriptions/sriSignatureInputHeaderInvalidComponentName.md +8 -0
  719. package/lib/devtools/models/issues_manager/descriptions/sriSignatureInputHeaderInvalidComponentType.md +13 -0
  720. package/lib/devtools/models/issues_manager/descriptions/sriSignatureInputHeaderInvalidDerivedComponentParameter.md +4 -0
  721. package/lib/devtools/models/issues_manager/descriptions/sriSignatureInputHeaderInvalidHeaderComponentParameter.md +5 -0
  722. package/lib/devtools/models/issues_manager/descriptions/sriSignatureInputHeaderInvalidParameter.md +11 -0
  723. package/lib/devtools/models/issues_manager/descriptions/sriSignatureInputHeaderKeyIdLength.md +12 -0
  724. package/lib/devtools/models/issues_manager/descriptions/sriSignatureInputHeaderMissingLabel.md +6 -0
  725. package/lib/devtools/models/issues_manager/descriptions/sriSignatureInputHeaderMissingRequiredParameters.md +8 -0
  726. package/lib/devtools/models/issues_manager/descriptions/sriSignatureInputHeaderValueMissingComponents.md +11 -0
  727. package/lib/devtools/models/issues_manager/descriptions/sriSignatureInputHeaderValueNotInnerList.md +11 -0
  728. package/lib/devtools/models/issues_manager/descriptions/sriValidationFailedIntegrityMismatch.md +10 -0
  729. package/lib/devtools/models/issues_manager/descriptions/sriValidationFailedInvalidLength.md +5 -0
  730. package/lib/devtools/models/issues_manager/descriptions/sriValidationFailedSignatureExpired.md +6 -0
  731. package/lib/devtools/models/issues_manager/descriptions/sriValidationFailedSignatureMismatch.md +11 -0
  732. package/lib/devtools/models/issues_manager/descriptions/stylesheetLateImport.md +4 -0
  733. package/lib/devtools/models/issues_manager/descriptions/stylesheetRequestFailed.md +3 -0
  734. package/lib/devtools/models/issues_manager/descriptions/summaryElementAccessibilityInteractiveContentSummaryDescendant.md +3 -0
  735. package/lib/devtools/models/issues_manager/descriptions/unencodedDigestIncorrectDigestLength.md +12 -0
  736. package/lib/devtools/models/issues_manager/descriptions/unencodedDigestIncorrectDigestType.md +17 -0
  737. package/lib/devtools/models/issues_manager/descriptions/unencodedDigestMalformedDictionary.md +14 -0
  738. package/lib/devtools/models/issues_manager/descriptions/unencodedDigestUnknownAlgorithm.md +15 -0
  739. package/lib/devtools/models/live-metrics/web-vitals-injected/web-vitals-injected.generated.js +1 -0
  740. package/lib/devtools/panels/recorder/injected/injected.generated.js +1 -0
  741. package/lib/devtools/panels/whats_new/resources/WNDT.md +14 -0
  742. package/lib/devtools/resource-manifest.json +3818 -0
  743. package/lib/devtools/third_party/acorn/package/LICENSE +21 -0
  744. package/lib/devtools/third_party/axe-core/LICENSE +362 -0
  745. package/lib/devtools/third_party/chromium/LICENSE +27 -0
  746. package/lib/devtools/third_party/codemirror/package/LICENSE +21 -0
  747. package/lib/devtools/third_party/codemirror.next/LICENSE +21 -0
  748. package/lib/devtools/third_party/csp_evaluator/package/LICENSE +202 -0
  749. package/lib/devtools/third_party/diff/LICENSE +202 -0
  750. package/lib/devtools/third_party/i18n/LICENSE +202 -0
  751. package/lib/devtools/third_party/intl-messageformat/LICENSE +33 -0
  752. package/lib/devtools/third_party/intl-messageformat/package/LICENSE.md +33 -0
  753. package/lib/devtools/third_party/json5/LICENSE +23 -0
  754. package/lib/devtools/third_party/legacy-javascript/LICENSE +202 -0
  755. package/lib/devtools/third_party/lighthouse/LICENSE +202 -0
  756. package/lib/devtools/third_party/lit/LICENSE +28 -0
  757. package/lib/devtools/third_party/marked/LICENSE +39 -0
  758. package/lib/devtools/third_party/marked/package/LICENSE.md +44 -0
  759. package/lib/devtools/third_party/puppeteer/LICENSE +202 -0
  760. package/lib/devtools/third_party/puppeteer/third_party/mitt/LICENSE +21 -0
  761. package/lib/devtools/third_party/puppeteer/third_party/parsel/LICENSE +21 -0
  762. package/lib/devtools/third_party/puppeteer/third_party/rxjs/LICENSE +201 -0
  763. package/lib/devtools/third_party/puppeteer-replay/package/LICENSE +202 -0
  764. package/lib/devtools/third_party/source-map-scopes-codec/LICENSE +26 -0
  765. package/lib/devtools/third_party/source-map-scopes-codec/package/LICENSE +26 -0
  766. package/lib/devtools/third_party/third-party-web/LICENSE +20 -0
  767. package/lib/devtools/third_party/third-party-web/package/LICENSE +20 -0
  768. package/lib/devtools/third_party/vscode.web-custom-data/package/LICENSE.md +21 -0
  769. package/lib/devtools/third_party/wasmparser/package/LICENSE +177 -0
  770. package/lib/devtools/third_party/web-vitals/package/LICENSE +202 -0
  771. package/lib/index.js +2554 -0
  772. package/lib/types/client/bottom/keyboard.d.ts +10 -0
  773. package/lib/types/client/bottom/locales.d.ts +17 -0
  774. package/lib/types/client/bottom/page.d.ts +10 -0
  775. package/lib/types/client/bottom/resize.d.ts +12 -0
  776. package/lib/types/client/bridge/controller.d.ts +10 -0
  777. package/lib/types/client/bridge/dispatcher.d.ts +26 -0
  778. package/lib/types/client/bridge/lifecycle.d.ts +22 -0
  779. package/lib/types/client/bridge/locales.d.ts +3 -0
  780. package/lib/types/client/bridge/publisher.d.ts +42 -0
  781. package/lib/types/client/bridge/rpc.d.ts +13 -0
  782. package/lib/types/client/bridge/transport.d.ts +41 -0
  783. package/lib/types/client/cdp/console.d.ts +45 -0
  784. package/lib/types/client/cdp/debugger.d.ts +8 -0
  785. package/lib/types/client/cdp/errors.d.ts +8 -0
  786. package/lib/types/client/cdp/heap-profiler.d.ts +8 -0
  787. package/lib/types/client/cdp/index.d.ts +10 -0
  788. package/lib/types/client/cdp/objects.d.ts +69 -0
  789. package/lib/types/client/cdp/profiler.d.ts +8 -0
  790. package/lib/types/client/cdp/properties.d.ts +16 -0
  791. package/lib/types/client/cdp/runtime.d.ts +79 -0
  792. package/lib/types/client/cdp/sources.d.ts +53 -0
  793. package/lib/types/client/cdp/stack.d.ts +27 -0
  794. package/lib/types/client/index.d.ts +3 -0
  795. package/lib/types/client/inspection/cordis.d.ts +3 -0
  796. package/lib/types/client/inspection/network.d.ts +4 -0
  797. package/lib/types/client/inspection/realm.d.ts +27 -0
  798. package/lib/types/client/plugin.d.ts +29 -0
  799. package/lib/types/host/bridge/controller.d.ts +108 -0
  800. package/lib/types/host/bridge/dispatcher.d.ts +16 -0
  801. package/lib/types/host/bridge/lifecycle.d.ts +42 -0
  802. package/lib/types/host/bridge/publisher.d.ts +31 -0
  803. package/lib/types/host/bridge/rpc.d.ts +15 -0
  804. package/lib/types/host/bridge/transport.d.ts +28 -0
  805. package/lib/types/host/cdp/console.d.ts +14 -0
  806. package/lib/types/host/cdp/debugger.d.ts +8 -0
  807. package/lib/types/host/cdp/errors.d.ts +6 -0
  808. package/lib/types/host/cdp/heap-profiler.d.ts +8 -0
  809. package/lib/types/host/cdp/index.d.ts +10 -0
  810. package/lib/types/host/cdp/objects.d.ts +8 -0
  811. package/lib/types/host/cdp/profiler.d.ts +8 -0
  812. package/lib/types/host/cdp/properties.d.ts +7 -0
  813. package/lib/types/host/cdp/runtime.d.ts +16 -0
  814. package/lib/types/host/cdp/sources.d.ts +14 -0
  815. package/lib/types/host/cdp/stack.d.ts +4 -0
  816. package/lib/types/host/index.d.ts +3 -0
  817. package/lib/types/host/inspection/cordis.d.ts +3 -0
  818. package/lib/types/host/inspection/network.d.ts +23 -0
  819. package/lib/types/host/inspection/realm.d.ts +9 -0
  820. package/lib/types/host/plugin.d.ts +19 -0
  821. package/lib/types/index.d.ts +50 -0
  822. package/lib/types/shared/bridge/buffer.d.ts +62 -0
  823. package/lib/types/shared/bridge/codec.d.ts +4 -0
  824. package/lib/types/shared/bridge/control-codec.d.ts +27 -0
  825. package/lib/types/shared/bridge/ids.d.ts +19 -0
  826. package/lib/types/shared/bridge/messages/control.d.ts +64 -0
  827. package/lib/types/shared/bridge/messages/cordis.d.ts +4 -0
  828. package/lib/types/shared/bridge/messages/network.d.ts +4 -0
  829. package/lib/types/shared/bridge/messages/observation.d.ts +110 -0
  830. package/lib/types/shared/bridge/messages/query/codec.d.ts +40 -0
  831. package/lib/types/shared/bridge/messages/query/commands.d.ts +35 -0
  832. package/lib/types/shared/bridge/messages/query/frames.d.ts +31 -0
  833. package/lib/types/shared/bridge/messages/query/index.d.ts +5 -0
  834. package/lib/types/shared/bridge/messages/runtime/command-codec.d.ts +9 -0
  835. package/lib/types/shared/bridge/messages/runtime/commands.d.ts +76 -0
  836. package/lib/types/shared/bridge/messages/runtime/console-frames.d.ts +52 -0
  837. package/lib/types/shared/bridge/messages/runtime/frames.d.ts +98 -0
  838. package/lib/types/shared/bridge/messages/runtime/index.d.ts +5 -0
  839. package/lib/types/shared/bridge/messages/runtime/value-codec.d.ts +28 -0
  840. package/lib/types/shared/bridge/messages/sources/codec.d.ts +15 -0
  841. package/lib/types/shared/bridge/messages/sources/commands.d.ts +42 -0
  842. package/lib/types/shared/bridge/messages/sources/frames.d.ts +67 -0
  843. package/lib/types/shared/bridge/messages/sources/index.d.ts +5 -0
  844. package/lib/types/shared/bridge/publisher.d.ts +33 -0
  845. package/lib/types/shared/bridge/query-reader.d.ts +10 -0
  846. package/lib/types/shared/bridge/rpc.d.ts +62 -0
  847. package/lib/types/shared/bridge/validation.d.ts +3 -0
  848. package/lib/types/shared/bridge/version.d.ts +3 -0
  849. package/lib/types/shared/cdp/capabilities.d.ts +17 -0
  850. package/lib/types/shared/cdp/console.d.ts +28 -0
  851. package/lib/types/shared/cdp/debugger.d.ts +69 -0
  852. package/lib/types/shared/cdp/errors.d.ts +27 -0
  853. package/lib/types/shared/cdp/ids.d.ts +9 -0
  854. package/lib/types/shared/cdp/index.d.ts +11 -0
  855. package/lib/types/shared/cdp/operations.d.ts +86 -0
  856. package/lib/types/shared/cdp/property.d.ts +28 -0
  857. package/lib/types/shared/cdp/realm.d.ts +137 -0
  858. package/lib/types/shared/cdp/remote-object.d.ts +44 -0
  859. package/lib/types/shared/cdp/sources.d.ts +18 -0
  860. package/lib/types/shared/cordis/collector.d.ts +26 -0
  861. package/lib/types/shared/cordis/ids.d.ts +7 -0
  862. package/lib/types/shared/cordis/model.d.ts +61 -0
  863. package/lib/types/shared/cordis/object-reference.d.ts +14 -0
  864. package/lib/types/shared/cordis/object-registry.d.ts +80 -0
  865. package/lib/types/shared/cordis/observer.d.ts +15 -0
  866. package/lib/types/shared/cordis/projector.d.ts +34 -0
  867. package/lib/types/shared/cordis/publisher.d.ts +13 -0
  868. package/lib/types/shared/cordis/reader.d.ts +18 -0
  869. package/lib/types/shared/cordis/snapshot.d.ts +39 -0
  870. package/lib/types/shared/dispose.d.ts +11 -0
  871. package/lib/types/shared/identity.d.ts +12 -0
  872. package/lib/types/shared/index.d.ts +18 -0
  873. package/lib/types/shared/json.d.ts +35 -0
  874. package/lib/types/shared/network/event-source.d.ts +20 -0
  875. package/lib/types/shared/network/observation.d.ts +52 -0
  876. package/lib/types/shared/service.d.ts +23 -0
  877. package/lib/types/shared/validation.d.ts +52 -0
  878. package/lib/types/shared/web.d.ts +16 -0
  879. package/lib/types/worker/bridge/endpoint.d.ts +49 -0
  880. package/lib/types/worker/bridge/hub.d.ts +108 -0
  881. package/lib/types/worker/bridge/runtime-rpc.d.ts +90 -0
  882. package/lib/types/worker/bridge/session.d.ts +15 -0
  883. package/lib/types/worker/bridge/source-rpc.d.ts +42 -0
  884. package/lib/types/worker/cdp/domains/debugger/cdp-params.d.ts +15 -0
  885. package/lib/types/worker/cdp/domains/debugger/index.d.ts +6 -0
  886. package/lib/types/worker/cdp/domains/debugger/projector.d.ts +22 -0
  887. package/lib/types/worker/cdp/domains/debugger/script-registry.d.ts +70 -0
  888. package/lib/types/worker/cdp/domains/debugger/session.d.ts +47 -0
  889. package/lib/types/worker/cdp/domains/dom/index.d.ts +4 -0
  890. package/lib/types/worker/cdp/domains/dom/model.d.ts +121 -0
  891. package/lib/types/worker/cdp/domains/dom/session.d.ts +78 -0
  892. package/lib/types/worker/cdp/domains/native.d.ts +25 -0
  893. package/lib/types/worker/cdp/domains/network/session.d.ts +46 -0
  894. package/lib/types/worker/cdp/domains/runtime/cdp-params.d.ts +82 -0
  895. package/lib/types/worker/cdp/domains/runtime/index.d.ts +3 -0
  896. package/lib/types/worker/cdp/domains/runtime/object-table.d.ts +117 -0
  897. package/lib/types/worker/cdp/domains/runtime/session.d.ts +97 -0
  898. package/lib/types/worker/cdp/ids.d.ts +37 -0
  899. package/lib/types/worker/cdp/protocol.d.ts +46 -0
  900. package/lib/types/worker/cdp/realm-sessions.d.ts +67 -0
  901. package/lib/types/worker/cdp/session.d.ts +39 -0
  902. package/lib/types/worker/cdp/target.d.ts +17 -0
  903. package/lib/types/worker/entry.d.ts +3 -0
  904. package/lib/types/worker/inspection/cordis-query.d.ts +11 -0
  905. package/lib/types/worker/inspection/cordis-store.d.ts +94 -0
  906. package/lib/types/worker/inspection/network-store.d.ts +110 -0
  907. package/lib/types/worker/inspection/query-router.d.ts +78 -0
  908. package/lib/types/worker/inspection/realm-store.d.ts +58 -0
  909. package/lib/types/worker/inspection/realm.d.ts +43 -0
  910. package/lib/types/worker/realms/client/bridge.d.ts +18 -0
  911. package/lib/types/worker/realms/client/console.d.ts +21 -0
  912. package/lib/types/worker/realms/client/debugger.d.ts +8 -0
  913. package/lib/types/worker/realms/client/index.d.ts +18 -0
  914. package/lib/types/worker/realms/client/runtime.d.ts +28 -0
  915. package/lib/types/worker/realms/client/scripts.d.ts +15 -0
  916. package/lib/types/worker/realms/client/sources.d.ts +30 -0
  917. package/lib/types/worker/realms/client/values.d.ts +55 -0
  918. package/lib/types/worker/realms/host/bridge.d.ts +49 -0
  919. package/lib/types/worker/realms/host/console.d.ts +25 -0
  920. package/lib/types/worker/realms/host/debugger.d.ts +25 -0
  921. package/lib/types/worker/realms/host/index.d.ts +13 -0
  922. package/lib/types/worker/realms/host/runtime.d.ts +54 -0
  923. package/lib/types/worker/realms/host/scripts.d.ts +9 -0
  924. package/lib/types/worker/realms/host/sources.d.ts +26 -0
  925. package/lib/types/worker/realms/host/values.d.ts +22 -0
  926. package/lib/types/worker/server.d.ts +16 -0
  927. package/lib/worker.js +7289 -0
  928. package/locale/en.json +6 -0
  929. package/locale/zh.json +6 -0
  930. package/package.json +90 -3
@@ -0,0 +1,3920 @@
1
+ import { n as e, t } from "./chunk-DF993M8W.js";
2
+ import { gt as n } from "./platform-BzB373NB.js";
3
+ import { At as r, F as i, Ot as a, Z as o, _n as s, at as c, bt as l, d as u, u as d, vt as f, wt as p } from "./common-qd_KLeYO.js";
4
+ import { $i as m, $r as h, Ad as g, B as _, Dt as v, Fo as y, Ft as b, Ht as x, Jo as S, La as C, Md as w, Na as T, No as E, Po as D, Qn as O, S as k, St as ee, Ur as te, V as ne, Vc as re, Wc as ie, Wo as ae, Xn as oe, Yo as A, Zo as se, bn as ce, cf as le, cr as ue, fa as de, fc as fe, hd as pe, jr as me, lc as he, lr as ge, ma as _e, mf as ve, mo as ye, ni as be, ns as xe, pf as j, sr as Se, tl as Ce, tr as we, ts as Te, ut as Ee, vf as M, vi as De, vn as Oe, yf as ke } from "./legacy-Bqn4Q0Tf.js";
5
+ import { g as Ae } from "./text_utils-ohNt_gua.js";
6
+ import { P as je } from "./bindings-DgoVEdsr.js";
7
+ import { C as Me, c as Ne } from "./common-DjRFwulW.js";
8
+ import { a as Pe, l as Fe, t as Ie } from "./emulation-EtJlEukP.js";
9
+ import { n as Le, t as Re } from "./theme_support-CbSSLkbO.js";
10
+ import { n as ze } from "./emulation-C6XKPPGu.js";
11
+ (/* @__PURE__ */ t(((e, t) => {
12
+ (function(e, n) {
13
+ typeof define == "function" && define.amd ? define(n) : typeof t == "object" && t.exports ? t.exports = n() : (e.Lighthouse = e.Lighthouse || {}, e.Lighthouse.ReportGenerator = n(), e.Lighthouse.ReportGenerator.ReportGenerator = e.Lighthouse.ReportGenerator);
14
+ })(typeof self < "u" ? self : e, function() {
15
+ var e = (() => {
16
+ var e = Object.defineProperty, t = Object.getOwnPropertyDescriptor, n = Object.getOwnPropertyNames, r = Object.prototype.hasOwnProperty, i = (t, n) => {
17
+ for (var r in n) e(t, r, {
18
+ get: n[r],
19
+ enumerable: !0
20
+ });
21
+ }, a = (i, a, o, s) => {
22
+ if (a && typeof a == "object" || typeof a == "function") for (let c of n(a)) !r.call(i, c) && c !== o && e(i, c, {
23
+ get: () => a[c],
24
+ enumerable: !(s = t(a, c)) || s.enumerable
25
+ });
26
+ return i;
27
+ }, o = (t) => a(e({}, "__esModule", { value: !0 }), t), s = {};
28
+ i(s, { ReportGenerator: () => l });
29
+ var c = {
30
+ REPORT_TEMPLATE: "<!--\n@license\nCopyright 2018 Google LLC\nSPDX-License-Identifier: Apache-2.0\n-->\n<!doctype html>\n<html lang=\"en\">\n<head>\n <meta charset=\"utf-8\">\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1, minimum-scale=1\">\n <link rel=\"icon\" href='data:image/svg+xml;utf8,<svg fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 48 48\"><path d=\"m14 7 10-7 10 7v10h5v7h-5l5 24H9l5-24H9v-7h5V7Z\" fill=\"%23F63\"/><path d=\"M31.561 24H14l-1.689 8.105L31.561 24ZM18.983 48H9l1.022-4.907L35.723 32.27l1.663 7.98L18.983 48Z\" fill=\"%23FFA385\"/><path fill=\"%23FF3\" d=\"M20.5 10h7v7h-7z\"/></svg>'>\n <title>Lighthouse Report</title>\n <style>body {margin: 0}</style>\n</head>\n<body>\n <noscript>Lighthouse report requires JavaScript. Please enable.</noscript>\n\n <div id=\"lh-log\"></div>\n\n <script>window.__LIGHTHOUSE_JSON__ = %%LIGHTHOUSE_JSON%%;<\/script>\n <script>%%LIGHTHOUSE_JAVASCRIPT%%\n __initLighthouseReport__();\n //# sourceURL=compiled-reportrenderer.js\n <\/script>\n <script>console.log('window.__LIGHTHOUSE_JSON__', __LIGHTHOUSE_JSON__);<\/script>\n</body>\n</html>\n",
31
+ REPORT_JAVASCRIPT: "\"use strict\";(()=>{function e({median:e,p10:t},n){if(e<=0)throw new Error(\"median must be greater than zero\");if(t<=0)throw new Error(\"p10 must be greater than zero\");if(t>=e)throw new Error(\"p10 must be less than the median\");if(n<=0)return 1;let r,i=Math.max(Number.MIN_VALUE,n/e),a=Math.log(i),o=Math.max(Number.MIN_VALUE,t/e),l=(1-function(e){let t=Math.sign(e),n=1/(1+.3275911*(e=Math.abs(e)));return t*(1-n*(.254829592+n*(n*(1.421413741+n*(1.061405429*n-1.453152027))-.284496736))*Math.exp(-e*e))}(.9061938024368232*a/-Math.log(o)))/2;return r=n<=t?Math.max(.9,Math.min(1,l)):n<=e?Math.max(.5,Math.min(.8999999999999999,l)):Math.max(0,Math.min(.49999999999999994,l)),r}var t=\"…\",n={PASS:{label:\"pass\",minScore:.9},AVERAGE:{label:\"average\",minScore:.5},FAIL:{label:\"fail\"},ERROR:{label:\"error\"}},r=[\"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\"],i=class i{static get RATINGS(){return n}static get PASS_THRESHOLD(){return.9}static get MS_DISPLAY_VALUE(){return\"%10d\xA0ms\"}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 getEntityFromUrl(e,t){return t&&t.find((t=>t.origins.find((t=>e.startsWith(t)))))||i.getPseudoRootDomain(e)}static splitMarkdownCodeSpans(e){let t=[],n=e.split(/`(.*?)`/g);for(let e=0;e<n.length;e++){let r=n[e];if(!r)continue;let i=e%2!=0;t.push({isCode:i,text:r})}return t}static splitMarkdownLink(e){let t=[],n=e.split(/\\[([^\\]]+?)\\]\\((https?:\\/\\/.*?)\\)/g);for(;n.length;){let[e,r,i]=n.splice(0,3);e&&t.push({isLink:!1,text:e}),r&&i&&t.push({isLink:!0,text:r,linkHref:i})}return t}static truncate(e,t,n=\"…\"){if(e.length<=t)return e;let r=new Intl.Segmenter(void 0,{granularity:\"grapheme\"}).segment(e)[Symbol.iterator](),i=0;for(let a=0;a<=t-n.length;a++){let t=r.next();if(t.done)return e;i=t.value.index}for(let t=0;t<n.length;t++)if(r.next().done)return e;return e.slice(0,i)+n}static getURLDisplayName(e,n){let r,i=void 0!==(n=n||{numPathParts:void 0,preserveQuery:void 0,preserveHost:void 0}).numPathParts?n.numPathParts:2,a=void 0===n.preserveQuery||n.preserveQuery,o=n.preserveHost||!1;if(\"about:\"===e.protocol||\"data:\"===e.protocol)r=e.href;else{r=e.pathname;let n=r.split(\"/\").filter((e=>e.length));i&&n.length>i&&(r=t+n.slice(-1*i).join(\"/\")),o&&(r=`${e.host}/${r.replace(/^\\//,\"\")}`),a&&(r=`${r}${e.search}`)}if(\"data:\"!==e.protocol&&(r=r.slice(0,200),r=r.replace(/([a-f0-9]{7})[a-f0-9]{13}[a-f0-9]*/g,`$1${t}`),r=r.replace(/([a-zA-Z0-9-_]{9})(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])[a-zA-Z0-9-_]{10,}/g,`$1${t}`),r=r.replace(/(\\d{3})\\d{6,}/g,`$1${t}`),r=r.replace(/\\u2026+/g,t),r.length>64&&r.includes(\"?\")&&(r=r.replace(/\\?([^=]*)(=)?.*/,`?$1$2${t}`),r.length>64&&(r=r.replace(/\\?.*/,`?${t}`)))),r.length>64){let e=r.lastIndexOf(\".\");r=e>=0?r.slice(0,63-(r.length-e))+`${t}${r.slice(e)}`:r.slice(0,63)+t}return r}static getChromeExtensionOrigin(e){let t=new URL(e);return t.protocol+\"//\"+t.host}static parseURL(e){let t=new URL(e);return{file:i.getURLDisplayName(t),hostname:t.hostname,origin:\"chrome-extension:\"===t.protocol?i.getChromeExtensionOrigin(e):t.origin}}static createOrReturnURL(e){return e instanceof URL?e:new URL(e)}static getPseudoTld(e){let t=e.split(\".\").slice(-2);return r.includes(t[0])?`.${t.join(\".\")}`:`.${t[t.length-1]}`}static getPseudoRootDomain(e){let t=i.createOrReturnURL(e).hostname,n=i.getPseudoTld(t).split(\".\");return t.split(\".\").slice(-n.length).join(\".\")}static filterRelevantLines(e,t,n){if(0===t.length)return e.slice(0,2*n+1);let r=new Set;return(t=t.sort(((e,t)=>(e.lineNumber||0)-(t.lineNumber||0)))).forEach((({lineNumber:e})=>{let t=e-n,i=e+n;for(;t<1;)t++,i++;r.has(t-3-1)&&(t-=3);for(let e=t;e<=i;e++){let t=e;r.add(t)}})),e.filter((e=>r.has(e.lineNumber)))}static computeLogNormalScore(t,n){let r=e(t,n);return r>.9&&(r+=.05*(r-.9)),Math.floor(100*r)/100}};var a=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 e of t.split(/\\s+/))e&&n.classList.add(e);return n}createElementNS(e,t,n){let r=this._document.createElementNS(e,t);if(n)for(let e of n.split(/\\s+/))e&&r.classList.add(e);return r}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 r=this.createElement(t,n);return e.append(r),r}createComponent(e){let t=this._componentCache.get(e);if(t){let e=t.cloneNode(!0);return this.findAll(\"style\",e).forEach((e=>e.remove())),e}return t=function(e,t){switch(t){case\"3pFilter\":return function(e){let t=e.createFragment(),n=e.createElement(\"style\");n.append(\"\\n .lh-3p-filter {\\n color: var(--color-gray-600);\\n float: right;\\n padding: 6px var(--stackpack-padding-horizontal);\\n }\\n .lh-3p-filter-label, .lh-3p-filter-input {\\n vertical-align: middle;\\n user-select: none;\\n }\\n .lh-3p-filter-input:disabled + .lh-3p-ui-string {\\n text-decoration: line-through;\\n }\\n \"),t.append(n);let r=e.createElement(\"div\",\"lh-3p-filter\"),i=e.createElement(\"label\",\"lh-3p-filter-label\"),a=e.createElement(\"input\",\"lh-3p-filter-input\");a.setAttribute(\"type\",\"checkbox\"),a.setAttribute(\"checked\",\"\");let o=e.createElement(\"span\",\"lh-3p-ui-string\");o.append(\"Show 3rd party resources\");let l=e.createElement(\"span\",\"lh-3p-filter-count\");return i.append(\" \",a,\" \",o,\" (\",l,\") \"),r.append(\" \",i,\" \"),t.append(r),t}(e);case\"audit\":return function(e){let t=e.createFragment(),n=e.createElement(\"div\",\"lh-audit\"),r=e.createElement(\"details\",\"lh-expandable-details\"),i=e.createElement(\"summary\"),a=e.createElement(\"div\",\"lh-audit__header lh-expandable-details__summary\"),o=e.createElement(\"span\",\"lh-audit__score-icon\"),l=e.createElement(\"span\",\"lh-audit__title-and-text\"),s=e.createElement(\"span\",\"lh-audit__title\"),c=e.createElement(\"span\",\"lh-audit__display-text\");l.append(\" \",s,\" \",c,\" \");let d=e.createElement(\"div\",\"lh-chevron-container\");a.append(\" \",o,\" \",l,\" \",d,\" \"),i.append(\" \",a,\" \");let h=e.createElement(\"div\",\"lh-audit__description\"),p=e.createElement(\"div\",\"lh-audit__stackpacks\");return r.append(\" \",i,\" \",h,\" \",p,\" \"),n.append(\" \",r,\" \"),t.append(n),t}(e);case\"categoryHeader\":return function(e){let t=e.createFragment(),n=e.createElement(\"div\",\"lh-category-header\"),r=e.createElement(\"div\",\"lh-score__gauge\");r.setAttribute(\"role\",\"heading\"),r.setAttribute(\"aria-level\",\"2\");let i=e.createElement(\"div\",\"lh-category-header__description\");return n.append(\" \",r,\" \",i,\" \"),t.append(n),t}(e);case\"chevron\":return function(e){let t=e.createFragment(),n=e.createElementNS(\"http://www.w3.org/2000/svg\",\"svg\",\"lh-chevron\");n.setAttribute(\"viewBox\",\"0 0 100 100\");let r=e.createElementNS(\"http://www.w3.org/2000/svg\",\"g\",\"lh-chevron__lines\"),i=e.createElementNS(\"http://www.w3.org/2000/svg\",\"path\",\"lh-chevron__line lh-chevron__line-left\");i.setAttribute(\"d\",\"M10 50h40\");let a=e.createElementNS(\"http://www.w3.org/2000/svg\",\"path\",\"lh-chevron__line lh-chevron__line-right\");return a.setAttribute(\"d\",\"M90 50H50\"),r.append(\" \",i,\" \",a,\" \"),n.append(\" \",r,\" \"),t.append(n),t}(e);case\"clump\":return function(e){let t=e.createFragment(),n=e.createElement(\"div\",\"lh-audit-group\"),r=e.createElement(\"details\",\"lh-clump\"),i=e.createElement(\"summary\"),a=e.createElement(\"div\",\"lh-audit-group__summary\"),o=e.createElement(\"div\",\"lh-audit-group__header\"),l=e.createElement(\"span\",\"lh-audit-group__title\"),s=e.createElement(\"span\",\"lh-audit-group__itemcount\");o.append(\" \",l,\" \",s,\" \",\" \",\" \");let c=e.createElement(\"div\",\"lh-clump-toggle\"),d=e.createElement(\"span\",\"lh-clump-toggletext--show\"),h=e.createElement(\"span\",\"lh-clump-toggletext--hide\");return c.append(\" \",d,\" \",h,\" \"),a.append(\" \",o,\" \",c,\" \"),i.append(\" \",a,\" \"),r.append(\" \",i,\" \"),n.append(\" \",\" \",r,\" \"),t.append(n),t}(e);case\"crc\":return function(e){let t=e.createFragment(),n=e.createElement(\"div\",\"lh-crc-container\"),r=e.createElement(\"style\");r.append('\\n .lh-crc .lh-tree-marker {\\n width: 12px;\\n height: 26px;\\n display: block;\\n float: left;\\n background-position: top left;\\n }\\n .lh-crc .lh-horiz-down {\\n background: url(\\'data:image/svg+xml;utf8,<svg width=\"16\" height=\"26\" viewBox=\"0 0 16 26\" xmlns=\"http://www.w3.org/2000/svg\"><g fill=\"%23D8D8D8\" fill-rule=\"evenodd\"><path d=\"M16 12v2H-2v-2z\"/><path d=\"M9 12v14H7V12z\"/></g></svg>\\');\\n }\\n .lh-crc .lh-right {\\n background: url(\\'data:image/svg+xml;utf8,<svg width=\"16\" height=\"26\" viewBox=\"0 0 16 26\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M16 12v2H0v-2z\" fill=\"%23D8D8D8\" fill-rule=\"evenodd\"/></svg>\\');\\n }\\n .lh-crc .lh-up-right {\\n background: url(\\'data:image/svg+xml;utf8,<svg width=\"16\" height=\"26\" viewBox=\"0 0 16 26\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M7 0h2v14H7zm2 12h7v2H9z\" fill=\"%23D8D8D8\" fill-rule=\"evenodd\"/></svg>\\');\\n }\\n .lh-crc .lh-vert-right {\\n background: url(\\'data:image/svg+xml;utf8,<svg width=\"16\" height=\"26\" viewBox=\"0 0 16 26\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M7 0h2v27H7zm2 12h7v2H9z\" fill=\"%23D8D8D8\" fill-rule=\"evenodd\"/></svg>\\');\\n }\\n .lh-crc .lh-vert {\\n background: url(\\'data:image/svg+xml;utf8,<svg width=\"16\" height=\"26\" viewBox=\"0 0 16 26\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M7 0h2v26H7z\" fill=\"%23D8D8D8\" fill-rule=\"evenodd\"/></svg>\\');\\n }\\n .lh-crc .lh-crc-tree {\\n font-size: 14px;\\n width: 100%;\\n overflow-x: auto;\\n }\\n .lh-crc .lh-crc-node {\\n height: 26px;\\n line-height: 26px;\\n white-space: nowrap;\\n }\\n .lh-crc .lh-crc-node__longest {\\n color: var(--color-average-secondary);\\n }\\n .lh-crc .lh-crc-node__tree-value {\\n margin-left: 10px;\\n }\\n .lh-crc .lh-crc-node__tree-value div {\\n display: inline;\\n }\\n .lh-crc .lh-crc-node__chain-duration {\\n font-weight: 700;\\n }\\n .lh-crc .lh-crc-initial-nav {\\n color: #595959;\\n font-style: italic;\\n }\\n .lh-crc__summary-value {\\n margin-bottom: 10px;\\n }\\n ');let i=e.createElement(\"div\"),a=e.createElement(\"div\",\"lh-crc__summary-value\"),o=e.createElement(\"span\",\"lh-crc__longest_duration_label\"),l=e.createElement(\"b\",\"lh-crc__longest_duration\");a.append(\" \",o,\" \",l,\" \"),i.append(\" \",a,\" \");let s=e.createElement(\"div\",\"lh-crc\"),c=e.createElement(\"div\",\"lh-crc-initial-nav\");return s.append(\" \",c,\" \",\" \"),n.append(\" \",r,\" \",i,\" \",s,\" \"),t.append(n),t}(e);case\"crcChain\":return function(e){let t=e.createFragment(),n=e.createElement(\"div\",\"lh-crc-node\"),r=e.createElement(\"span\",\"lh-crc-node__tree-marker\"),i=e.createElement(\"span\",\"lh-crc-node__tree-value\");return n.append(\" \",r,\" \",i,\" \"),t.append(n),t}(e);case\"elementScreenshot\":return function(e){let t=e.createFragment(),n=e.createElement(\"div\",\"lh-element-screenshot\"),r=e.createElement(\"div\",\"lh-element-screenshot__content\"),i=e.createElement(\"div\",\"lh-element-screenshot__image\"),a=e.createElement(\"div\",\"lh-element-screenshot__mask\"),o=e.createElementNS(\"http://www.w3.org/2000/svg\",\"svg\");o.setAttribute(\"height\",\"0\"),o.setAttribute(\"width\",\"0\");let l=e.createElementNS(\"http://www.w3.org/2000/svg\",\"defs\"),s=e.createElementNS(\"http://www.w3.org/2000/svg\",\"clipPath\");s.setAttribute(\"clipPathUnits\",\"objectBoundingBox\"),l.append(\" \",s,\" \",\" \"),o.append(\" \",l,\" \"),a.append(\" \",o,\" \");let c=e.createElement(\"div\",\"lh-element-screenshot__element-marker\");return i.append(\" \",a,\" \",c,\" \"),r.append(\" \",i,\" \"),n.append(\" \",r,\" \"),t.append(n),t}(e);case\"explodeyGauge\":return function(e){let t=e.createFragment(),n=e.createElement(\"div\",\"lh-exp-gauge-component\"),r=e.createElement(\"div\",\"lh-exp-gauge__wrapper\");r.setAttribute(\"target\",\"_blank\");let i=e.createElement(\"div\",\"lh-exp-gauge__svg-wrapper\"),a=e.createElementNS(\"http://www.w3.org/2000/svg\",\"svg\",\"lh-exp-gauge\"),o=e.createElementNS(\"http://www.w3.org/2000/svg\",\"g\",\"lh-exp-gauge__inner\"),l=e.createElementNS(\"http://www.w3.org/2000/svg\",\"circle\",\"lh-exp-gauge__bg\"),s=e.createElementNS(\"http://www.w3.org/2000/svg\",\"circle\",\"lh-exp-gauge__base lh-exp-gauge--faded\"),c=e.createElementNS(\"http://www.w3.org/2000/svg\",\"circle\",\"lh-exp-gauge__arc\"),d=e.createElementNS(\"http://www.w3.org/2000/svg\",\"text\",\"lh-exp-gauge__percentage\");o.append(\" \",l,\" \",s,\" \",c,\" \",d,\" \");let h=e.createElementNS(\"http://www.w3.org/2000/svg\",\"g\",\"lh-exp-gauge__outer\"),p=e.createElementNS(\"http://www.w3.org/2000/svg\",\"circle\",\"lh-cover\");h.append(\" \",p,\" \");let g=e.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\"),a.append(\" \",o,\" \",h,\" \",g,\" \"),i.append(\" \",a,\" \"),r.append(\" \",i,\" \"),n.append(\" \",r,\" \"),t.append(n),t}(e);case\"footer\":return function(e){let t=e.createFragment(),n=e.createElement(\"style\");n.append(\"\\n .lh-footer {\\n padding: var(--footer-padding-vertical) calc(var(--default-padding) * 2);\\n max-width: var(--report-content-max-width);\\n margin: 0 auto;\\n }\\n .lh-footer .lh-generated {\\n text-align: center;\\n }\\n \"),t.append(n);let r=e.createElement(\"footer\",\"lh-footer\"),i=e.createElement(\"ul\",\"lh-meta__items\");i.append(\" \");let a=e.createElement(\"div\",\"lh-generated\"),o=e.createElement(\"b\");o.append(\"Lighthouse\");let l=e.createElement(\"span\",\"lh-footer__version\"),s=e.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\"),a.append(\" \",\" Generated by \",o,\" \",l,\" | \",s,\" \"),r.append(\" \",i,\" \",a,\" \"),t.append(r),t}(e);case\"fraction\":return function(e){let t=e.createFragment(),n=e.createElement(\"a\",\"lh-fraction__wrapper\"),r=e.createElement(\"div\",\"lh-fraction__content-wrapper\"),i=e.createElement(\"div\",\"lh-fraction__content\"),a=e.createElement(\"div\",\"lh-fraction__background\");i.append(\" \",a,\" \"),r.append(\" \",i,\" \");let o=e.createElement(\"div\",\"lh-fraction__label\");return n.append(\" \",r,\" \",o,\" \"),t.append(n),t}(e);case\"gauge\":return function(e){let t=e.createFragment(),n=e.createElement(\"a\",\"lh-gauge__wrapper\"),r=e.createElement(\"div\",\"lh-gauge__svg-wrapper\"),i=e.createElementNS(\"http://www.w3.org/2000/svg\",\"svg\",\"lh-gauge\");i.setAttribute(\"viewBox\",\"0 0 120 120\");let a=e.createElementNS(\"http://www.w3.org/2000/svg\",\"circle\",\"lh-gauge-base\");a.setAttribute(\"r\",\"56\"),a.setAttribute(\"cx\",\"60\"),a.setAttribute(\"cy\",\"60\"),a.setAttribute(\"stroke-width\",\"8\");let o=e.createElementNS(\"http://www.w3.org/2000/svg\",\"circle\",\"lh-gauge-arc\");o.setAttribute(\"r\",\"56\"),o.setAttribute(\"cx\",\"60\"),o.setAttribute(\"cy\",\"60\"),o.setAttribute(\"stroke-width\",\"8\"),i.append(\" \",a,\" \",o,\" \"),r.append(\" \",i,\" \");let l=e.createElement(\"div\",\"lh-gauge__percentage\"),s=e.createElement(\"div\",\"lh-gauge__label\");return n.append(\" \",\" \",r,\" \",l,\" \",\" \",s,\" \"),t.append(n),t}(e);case\"heading\":return function(e){let t=e.createFragment(),n=e.createElement(\"style\");n.append(\"\\n /* CSS Fireworks. Originally by Eddie Lin\\n https://codepen.io/paulirish/pen/yEVMbP\\n */\\n .lh-pyro {\\n display: none;\\n z-index: 1;\\n pointer-events: none;\\n }\\n .lh-score100 .lh-pyro {\\n display: block;\\n }\\n .lh-score100 .lh-lighthouse stop:first-child {\\n stop-color: hsla(200, 12%, 95%, 0);\\n }\\n .lh-score100 .lh-lighthouse stop:last-child {\\n stop-color: hsla(65, 81%, 76%, 1);\\n }\\n\\n .lh-pyro > .lh-pyro-before, .lh-pyro > .lh-pyro-after {\\n position: absolute;\\n width: 5px;\\n height: 5px;\\n border-radius: 2.5px;\\n box-shadow: 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff;\\n animation: 1s bang ease-out infinite backwards, 1s gravity ease-in infinite backwards, 5s position linear infinite backwards;\\n animation-delay: 1s, 1s, 1s;\\n }\\n\\n .lh-pyro > .lh-pyro-after {\\n animation-delay: 2.25s, 2.25s, 2.25s;\\n animation-duration: 1.25s, 1.25s, 6.25s;\\n }\\n\\n @keyframes bang {\\n to {\\n opacity: 1;\\n box-shadow: -70px -115.67px #47ebbc, -28px -99.67px #eb47a4, 58px -31.67px #7eeb47, 13px -141.67px #eb47c5, -19px 6.33px #7347eb, -2px -74.67px #ebd247, 24px -151.67px #eb47e0, 57px -138.67px #b4eb47, -51px -104.67px #479eeb, 62px 8.33px #ebcf47, -93px 0.33px #d547eb, -16px -118.67px #47bfeb, 53px -84.67px #47eb83, 66px -57.67px #eb47bf, -93px -65.67px #91eb47, 30px -13.67px #86eb47, -2px -59.67px #83eb47, -44px 1.33px #eb47eb, 61px -58.67px #47eb73, 5px -22.67px #47e8eb, -66px -28.67px #ebe247, 42px -123.67px #eb5547, -75px 26.33px #7beb47, 15px -52.67px #a147eb, 36px -51.67px #eb8347, -38px -12.67px #eb5547, -46px -59.67px #47eb81, 78px -114.67px #eb47ba, 15px -156.67px #eb47bf, -36px 1.33px #eb4783, -72px -86.67px #eba147, 31px -46.67px #ebe247, -68px 29.33px #47e2eb, -55px 19.33px #ebe047, -56px 27.33px #4776eb, -13px -91.67px #eb5547, -47px -138.67px #47ebc7, -18px -96.67px #eb47ac, 11px -88.67px #4783eb, -67px -28.67px #47baeb, 53px 10.33px #ba47eb, 11px 19.33px #5247eb, -5px -11.67px #eb4791, -68px -4.67px #47eba7, 95px -37.67px #eb478b, -67px -162.67px #eb5d47, -54px -120.67px #eb6847, 49px -12.67px #ebe047, 88px 8.33px #47ebda, 97px 33.33px #eb8147, 6px -71.67px #ebbc47;\\n }\\n }\\n @keyframes gravity {\\n from {\\n opacity: 1;\\n }\\n to {\\n transform: translateY(80px);\\n opacity: 0;\\n }\\n }\\n @keyframes position {\\n 0%, 19.9% {\\n margin-top: 4%;\\n margin-left: 47%;\\n }\\n 20%, 39.9% {\\n margin-top: 7%;\\n margin-left: 30%;\\n }\\n 40%, 59.9% {\\n margin-top: 6%;\\n margin-left: 70%;\\n }\\n 60%, 79.9% {\\n margin-top: 3%;\\n margin-left: 20%;\\n }\\n 80%, 99.9% {\\n margin-top: 3%;\\n margin-left: 80%;\\n }\\n }\\n \"),t.append(n);let r=e.createElement(\"div\",\"lh-header-container\"),i=e.createElement(\"div\",\"lh-scores-wrapper-placeholder\");return r.append(\" \",i,\" \"),t.append(r),t}(e);case\"metric\":return function(e){let t=e.createFragment(),n=e.createElement(\"div\",\"lh-metric\"),r=e.createElement(\"div\",\"lh-metric__innerwrap\"),i=e.createElement(\"div\",\"lh-metric__icon\"),a=e.createElement(\"span\",\"lh-metric__title\"),o=e.createElement(\"div\",\"lh-metric__value\"),l=e.createElement(\"div\",\"lh-metric__description\");return r.append(\" \",i,\" \",a,\" \",o,\" \",l,\" \"),n.append(\" \",r,\" \"),t.append(n),t}(e);case\"scorescale\":return function(e){let t=e.createFragment(),n=e.createElement(\"div\",\"lh-scorescale\"),r=e.createElement(\"span\",\"lh-scorescale-range lh-scorescale-range--fail\");r.append(\"0–49\");let i=e.createElement(\"span\",\"lh-scorescale-range lh-scorescale-range--average\");i.append(\"50–89\");let a=e.createElement(\"span\",\"lh-scorescale-range lh-scorescale-range--pass\");return a.append(\"90–100\"),n.append(\" \",r,\" \",i,\" \",a,\" \"),t.append(n),t}(e);case\"scoresWrapper\":return function(e){let t=e.createFragment(),n=e.createElement(\"style\");n.append(\"\\n .lh-scores-container {\\n display: flex;\\n flex-direction: column;\\n padding: var(--default-padding) 0;\\n position: relative;\\n width: 100%;\\n }\\n\\n .lh-sticky-header {\\n --gauge-circle-size: var(--gauge-circle-size-sm);\\n --plugin-badge-size: 16px;\\n --plugin-icon-size: 75%;\\n --gauge-wrapper-width: 60px;\\n --gauge-percentage-font-size: 13px;\\n position: fixed;\\n left: 0;\\n right: 0;\\n top: var(--topbar-height);\\n font-weight: 500;\\n display: none;\\n justify-content: center;\\n background-color: var(--sticky-header-background-color);\\n border-bottom: 1px solid var(--color-gray-200);\\n padding-top: var(--score-container-padding);\\n padding-bottom: 4px;\\n z-index: 2;\\n pointer-events: none;\\n }\\n\\n .lh-devtools .lh-sticky-header {\\n /* The report within DevTools is placed in a container with overflow, which changes the placement of this header unless we change `position` to `sticky.` */\\n position: sticky;\\n }\\n\\n .lh-sticky-header--visible {\\n display: grid;\\n grid-auto-flow: column;\\n pointer-events: auto;\\n }\\n\\n /* Disable the gauge arc animation for the sticky header, so toggling display: none\\n does not play the animation. */\\n .lh-sticky-header .lh-gauge-arc {\\n animation: none;\\n }\\n\\n .lh-sticky-header .lh-gauge__label,\\n .lh-sticky-header .lh-fraction__label {\\n display: none;\\n }\\n\\n .lh-highlighter {\\n width: var(--gauge-wrapper-width);\\n height: 1px;\\n background-color: var(--highlighter-background-color);\\n /* Position at bottom of first gauge in sticky header. */\\n position: absolute;\\n grid-column: 1;\\n bottom: -1px;\\n left: 0px;\\n right: 0px;\\n }\\n \"),t.append(n);let r=e.createElement(\"div\",\"lh-scores-wrapper\"),i=e.createElement(\"div\",\"lh-scores-container\"),a=e.createElement(\"div\",\"lh-pyro\"),o=e.createElement(\"div\",\"lh-pyro-before\"),l=e.createElement(\"div\",\"lh-pyro-after\");return a.append(\" \",o,\" \",l,\" \"),i.append(\" \",a,\" \"),r.append(\" \",i,\" \"),t.append(r),t}(e);case\"snippet\":return function(e){let t=e.createFragment(),n=e.createElement(\"div\",\"lh-snippet\"),r=e.createElement(\"style\");return r.append('\\n :root {\\n --snippet-highlight-light: #fbf1f2;\\n --snippet-highlight-dark: #ffd6d8;\\n }\\n\\n .lh-snippet__header {\\n position: relative;\\n overflow: hidden;\\n padding: 10px;\\n border-bottom: none;\\n color: var(--snippet-color);\\n background-color: var(--snippet-background-color);\\n border: 1px solid var(--report-border-color-secondary);\\n }\\n .lh-snippet__title {\\n font-weight: bold;\\n float: left;\\n }\\n .lh-snippet__node {\\n float: left;\\n margin-left: 4px;\\n }\\n .lh-snippet__toggle-expand {\\n padding: 1px 7px;\\n margin-top: -1px;\\n margin-right: -7px;\\n float: right;\\n background: transparent;\\n border: none;\\n cursor: pointer;\\n font-size: 14px;\\n color: #0c50c7;\\n }\\n\\n .lh-snippet__snippet {\\n overflow: auto;\\n border: 1px solid var(--report-border-color-secondary);\\n }\\n /* Container needed so that all children grow to the width of the scroll container */\\n .lh-snippet__snippet-inner {\\n display: inline-block;\\n min-width: 100%;\\n }\\n\\n .lh-snippet:not(.lh-snippet--expanded) .lh-snippet__show-if-expanded {\\n display: none;\\n }\\n .lh-snippet.lh-snippet--expanded .lh-snippet__show-if-collapsed {\\n display: none;\\n }\\n\\n .lh-snippet__line {\\n background: white;\\n white-space: pre;\\n display: flex;\\n }\\n .lh-snippet__line:not(.lh-snippet__line--message):first-child {\\n padding-top: 4px;\\n }\\n .lh-snippet__line:not(.lh-snippet__line--message):last-child {\\n padding-bottom: 4px;\\n }\\n .lh-snippet__line--content-highlighted {\\n background: var(--snippet-highlight-dark);\\n }\\n .lh-snippet__line--message {\\n background: var(--snippet-highlight-light);\\n }\\n .lh-snippet__line--message .lh-snippet__line-number {\\n padding-top: 10px;\\n padding-bottom: 10px;\\n }\\n .lh-snippet__line--message code {\\n padding: 10px;\\n padding-left: 5px;\\n color: var(--color-fail);\\n font-family: var(--report-font-family);\\n }\\n .lh-snippet__line--message code {\\n white-space: normal;\\n }\\n .lh-snippet__line-icon {\\n padding-top: 10px;\\n display: none;\\n }\\n .lh-snippet__line--message .lh-snippet__line-icon {\\n display: block;\\n }\\n .lh-snippet__line-icon:before {\\n content: \"\";\\n display: inline-block;\\n vertical-align: middle;\\n margin-right: 4px;\\n width: var(--score-icon-size);\\n height: var(--score-icon-size);\\n background-image: var(--fail-icon-url);\\n }\\n .lh-snippet__line-number {\\n flex-shrink: 0;\\n width: 40px;\\n text-align: right;\\n font-family: monospace;\\n padding-right: 5px;\\n margin-right: 5px;\\n color: var(--color-gray-600);\\n user-select: none;\\n }\\n '),n.append(\" \",r,\" \"),t.append(n),t}(e);case\"snippetContent\":return function(e){let t=e.createFragment(),n=e.createElement(\"div\",\"lh-snippet__snippet\"),r=e.createElement(\"div\",\"lh-snippet__snippet-inner\");return n.append(\" \",r,\" \"),t.append(n),t}(e);case\"snippetHeader\":return function(e){let t=e.createFragment(),n=e.createElement(\"div\",\"lh-snippet__header\"),r=e.createElement(\"div\",\"lh-snippet__title\"),i=e.createElement(\"div\",\"lh-snippet__node\"),a=e.createElement(\"button\",\"lh-snippet__toggle-expand\"),o=e.createElement(\"span\",\"lh-snippet__btn-label-collapse lh-snippet__show-if-expanded\"),l=e.createElement(\"span\",\"lh-snippet__btn-label-expand lh-snippet__show-if-collapsed\");return a.append(\" \",o,\" \",l,\" \"),n.append(\" \",r,\" \",i,\" \",a,\" \"),t.append(n),t}(e);case\"snippetLine\":return function(e){let t=e.createFragment(),n=e.createElement(\"div\",\"lh-snippet__line\"),r=e.createElement(\"div\",\"lh-snippet__line-number\"),i=e.createElement(\"div\",\"lh-snippet__line-icon\"),a=e.createElement(\"code\");return n.append(\" \",r,\" \",i,\" \",a,\" \"),t.append(n),t}(e);case\"styles\":return function(e){let t=e.createFragment(),n=e.createElement(\"style\");return n.append('/**\\n * @license\\n * Copyright 2017 Google LLC\\n * SPDX-License-Identifier: Apache-2.0\\n */\\n\\n/*\\n Naming convention:\\n\\n If a variable is used for a specific component: --{component}-{property name}-{modifier}\\n\\n Both {component} and {property name} should be kebab-case. If the target is the entire page,\\n use \\'report\\' for the component. The property name should not be abbreviated. Use the\\n property name the variable is intended for - if it\\'s used for multiple, a common descriptor\\n is fine (ex: \\'size\\' for a variable applied to \\'width\\' and \\'height\\'). If a variable is shared\\n across multiple components, either create more variables or just drop the \"{component}-\"\\n part of the name. Append any modifiers at the end (ex: \\'big\\', \\'dark\\').\\n\\n For colors: --color-{hue}-{intensity}\\n\\n {intensity} is the Material Design tag - 700, A700, etc.\\n*/\\n.lh-vars {\\n /* Palette using Material Design Colors\\n * https://www.materialui.co/colors */\\n --color-amber-50: #FFF8E1;\\n --color-blue-200: #90CAF9;\\n --color-blue-900: #0D47A1;\\n --color-blue-A700: #2962FF;\\n --color-blue-primary: #06f;\\n --color-cyan-500: #00BCD4;\\n --color-gray-100: #F5F5F5;\\n --color-gray-300: #CFCFCF;\\n --color-gray-200: #E0E0E0;\\n --color-gray-400: #BDBDBD;\\n --color-gray-50: #FAFAFA;\\n --color-gray-500: #9E9E9E;\\n --color-gray-600: #757575;\\n --color-gray-700: #616161;\\n --color-gray-800: #424242;\\n --color-gray-900: #212121;\\n --color-gray: #000000;\\n --color-green-700: #080;\\n --color-green: #0c6;\\n --color-lime-400: #D3E156;\\n --color-orange-50: #FFF3E0;\\n --color-orange-700: #C33300;\\n --color-orange: #fa3;\\n --color-red-700: #c00;\\n --color-red: #f33;\\n --color-teal-600: #00897B;\\n --color-white: #FFFFFF;\\n\\n /* Context-specific colors */\\n --color-average-secondary: var(--color-orange-700);\\n --color-average: var(--color-orange);\\n --color-fail-secondary: var(--color-red-700);\\n --color-fail: var(--color-red);\\n --color-hover: var(--color-gray-50);\\n --color-informative: var(--color-blue-900);\\n --color-pass-secondary: var(--color-green-700);\\n --color-pass: var(--color-green);\\n --color-not-applicable: var(--color-gray-600);\\n\\n /* Component variables */\\n --audit-description-padding-left: calc(var(--score-icon-size) + var(--score-icon-margin-left) + var(--score-icon-margin-right));\\n --audit-explanation-line-height: 16px;\\n --audit-group-margin-bottom: calc(var(--default-padding) * 6);\\n --audit-group-padding-vertical: 8px;\\n --audit-margin-horizontal: 5px;\\n --audit-padding-vertical: 8px;\\n --category-padding: calc(var(--default-padding) * 6) var(--edge-gap-padding) calc(var(--default-padding) * 4);\\n --chevron-line-stroke: var(--color-gray-600);\\n --chevron-size: 12px;\\n --default-padding: 8px;\\n --edge-gap-padding: calc(var(--default-padding) * 4);\\n --env-item-background-color: var(--color-gray-100);\\n --env-item-font-size: 28px;\\n --env-item-line-height: 36px;\\n --env-item-padding: 10px 0px;\\n --env-name-min-width: 220px;\\n --footer-padding-vertical: 16px;\\n --gauge-circle-size-big: 96px;\\n --gauge-circle-size: 48px;\\n --gauge-circle-size-sm: 32px;\\n --gauge-label-font-size-big: 18px;\\n --gauge-label-font-size: var(--report-font-size-secondary);\\n --gauge-label-line-height-big: 24px;\\n --gauge-label-line-height: var(--report-line-height-secondary);\\n --gauge-percentage-font-size-big: 38px;\\n --gauge-percentage-font-size: var(--report-font-size-secondary);\\n --gauge-wrapper-width: 120px;\\n --header-line-height: 24px;\\n --highlighter-background-color: var(--report-text-color);\\n --icon-square-size: calc(var(--score-icon-size) * 0.88);\\n --image-preview-size: 48px;\\n --link-color: var(--color-blue-primary);\\n --locale-selector-background-color: var(--color-white);\\n --metric-toggle-lines-fill: #7F7F7F;\\n --metric-value-font-size: calc(var(--report-font-size) * 1.8);\\n --metrics-toggle-background-color: var(--color-gray-200);\\n --plugin-badge-background-color: var(--color-white);\\n --plugin-badge-size-big: calc(var(--gauge-circle-size-big) / 2.7);\\n --plugin-badge-size: calc(var(--gauge-circle-size) / 2.7);\\n --plugin-icon-size: 65%;\\n --report-background-color: #fff;\\n --report-border-color-secondary: #ebebeb;\\n --report-font-family-monospace: monospace, \\'Roboto Mono\\', \\'Menlo\\', \\'dejavu sans mono\\', \\'Consolas\\', \\'Lucida Console\\';\\n --report-font-family: system-ui, Roboto, Helvetica, Arial, sans-serif;\\n --report-font-size: 14px;\\n --report-font-size-secondary: 12px;\\n --report-icon-size: var(--score-icon-background-size);\\n --report-line-height: 24px;\\n --report-line-height-secondary: 20px;\\n --report-monospace-font-size: calc(var(--report-font-size) * 0.85);\\n --report-text-color-secondary: var(--color-gray-800);\\n --report-text-color: var(--color-gray-900);\\n --report-content-max-width: calc(60 * var(--report-font-size)); /* defaults to 840px */\\n --report-content-min-width: 360px;\\n --report-content-max-width-minus-edge-gap: calc(var(--report-content-max-width) - var(--edge-gap-padding) * 2);\\n --score-container-padding: 8px;\\n --score-icon-background-size: 24px;\\n --score-icon-margin-left: 6px;\\n --score-icon-margin-right: 14px;\\n --score-icon-margin: 0 var(--score-icon-margin-right) 0 var(--score-icon-margin-left);\\n --score-icon-size: 12px;\\n --score-icon-size-big: 16px;\\n --screenshot-overlay-background: rgba(0, 0, 0, 0.3);\\n --section-padding-vertical: calc(var(--default-padding) * 6);\\n --snippet-background-color: var(--color-gray-50);\\n --snippet-color: #0938C2;\\n --stackpack-padding-horizontal: 10px;\\n --sticky-header-background-color: var(--report-background-color);\\n --sticky-header-buffer: var(--topbar-height);\\n --sticky-header-height: calc(var(--gauge-circle-size-sm) + var(--score-container-padding) * 2 + 1em);\\n --table-group-header-background-color: #EEF1F4;\\n --table-group-header-text-color: var(--color-gray-700);\\n --table-higlight-background-color: #F5F7FA;\\n --tools-icon-color: var(--color-gray-600);\\n --topbar-background-color: var(--color-white);\\n --topbar-height: 32px;\\n --topbar-logo-size: 24px;\\n --topbar-padding: 0 8px;\\n --toplevel-warning-background-color: hsla(30, 100%, 75%, 10%);\\n --toplevel-warning-message-text-color: var(--color-average-secondary);\\n --toplevel-warning-padding: 18px;\\n --toplevel-warning-text-color: var(--report-text-color);\\n\\n /* SVGs */\\n --plugin-icon-url-dark: url(\\'data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" fill=\"%23FFFFFF\"><path d=\"M0 0h24v24H0z\" fill=\"none\"/><path d=\"M20.5 11H19V7c0-1.1-.9-2-2-2h-4V3.5C13 2.12 11.88 1 10.5 1S8 2.12 8 3.5V5H4c-1.1 0-1.99.9-1.99 2v3.8H3.5c1.49 0 2.7 1.21 2.7 2.7s-1.21 2.7-2.7 2.7H2V20c0 1.1.9 2 2 2h3.8v-1.5c0-1.49 1.21-2.7 2.7-2.7 1.49 0 2.7 1.21 2.7 2.7V22H17c1.1 0 2-.9 2-2v-4h1.5c1.38 0 2.5-1.12 2.5-2.5S21.88 11 20.5 11z\"/></svg>\\');\\n --plugin-icon-url: url(\\'data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" fill=\"%23757575\"><path d=\"M0 0h24v24H0z\" fill=\"none\"/><path d=\"M20.5 11H19V7c0-1.1-.9-2-2-2h-4V3.5C13 2.12 11.88 1 10.5 1S8 2.12 8 3.5V5H4c-1.1 0-1.99.9-1.99 2v3.8H3.5c1.49 0 2.7 1.21 2.7 2.7s-1.21 2.7-2.7 2.7H2V20c0 1.1.9 2 2 2h3.8v-1.5c0-1.49 1.21-2.7 2.7-2.7 1.49 0 2.7 1.21 2.7 2.7V22H17c1.1 0 2-.9 2-2v-4h1.5c1.38 0 2.5-1.12 2.5-2.5S21.88 11 20.5 11z\"/></svg>\\');\\n\\n --pass-icon-url: url(\\'data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 48 48\"><title>check</title><path fill=\"%23178239\" d=\"M24 4C12.95 4 4 12.95 4 24c0 11.04 8.95 20 20 20 11.04 0 20-8.96 20-20 0-11.05-8.96-20-20-20zm-4 30L10 24l2.83-2.83L20 28.34l15.17-15.17L38 16 20 34z\"/></svg>\\');\\n --average-icon-url: url(\\'data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 48 48\"><title>info</title><path fill=\"%23E67700\" d=\"M24 4C12.95 4 4 12.95 4 24s8.95 20 20 20 20-8.95 20-20S35.05 4 24 4zm2 30h-4V22h4v12zm0-16h-4v-4h4v4z\"/></svg>\\');\\n --fail-icon-url: url(\\'data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 48 48\"><title>warn</title><path fill=\"%23C7221F\" d=\"M2 42h44L24 4 2 42zm24-6h-4v-4h4v4zm0-8h-4v-8h4v8z\"/></svg>\\');\\n --error-icon-url: url(\\'data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 3 15\"><title>error</title><path d=\"M0 15H 3V 12H 0V\" fill=\"%23FF4E42\"/><path d=\"M0 9H 3V 0H 0V\" fill=\"%23FF4E42\"/></svg>\\');\\n\\n --swap-locale-icon-url: url(\\'data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 0 24 24\" width=\"24px\" fill=\"%23000000\"><path d=\"M0 0h24v24H0V0z\" fill=\"none\"/><path 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\"/></svg>\\');\\n \\n --baseline-high-icon-url: url(\"data:image/svg+xml;utf8,<svg width=\\'18\\' height=\\'10\\' viewBox=\\'0 0 540 300\\' fill=\\'none\\' xmlns=\\'http://www.w3.org/2000/svg\\'> <path d=\\'M420 30L390 60L480 150L390 240L330 180L300 210L390 300L540 150L420 30Z\\' fill=\\'%23C4EED0\\'/> <path d=\\'M150 0L30 120L60 150L150 60L210 120L240 90L150 0Z\\' fill=\\'%23C4EED0\\'/> <path d=\\'M390 0L420 30L150 300L0 150L30 120L150 240L390 0Z\\' fill=\\'%231EA446\\'/> </svg>\");\\n --baseline-low-icon-url: url(\"data:image/svg+xml;utf8,<svg width=\\'18\\' height=\\'10\\' viewBox=\\'0 0 540 300\\' fill=\\'none\\' xmlns=\\'http://www.w3.org/2000/svg\\'> <path d=\\'M150 0L180 30L150 60L120 30L150 0Z\\' fill=\\'%23A8C7FA\\'/> <path d=\\'M210 60L240 90L210 120L180 90L210 60Z\\' fill=\\'%23A8C7FA\\'/> <path d=\\'M450 60L480 90L450 120L420 90L450 60Z\\' fill=\\'%23A8C7FA\\'/> <path d=\\'M510 120L540 150L510 180L480 150L510 120Z\\' fill=\\'%23A8C7FA\\'/> <path d=\\'M450 180L480 210L450 240L420 210L450 180Z\\' fill=\\'%23A8C7FA\\'/> <path d=\\'M390 240L420 270L390 300L360 270L390 240Z\\' fill=\\'%23A8C7FA\\'/> <path d=\\'M330 180L360 210L330 240L300 210L330 180Z\\' fill=\\'%23A8C7FA\\'/> <path d=\\'M90 60L120 90L90 120L60 90L90 60Z\\' fill=\\'%23A8C7FA\\'/> <path d=\\'M390 0L420 30L150 300L0 150L30 120L150 240L390 0Z\\' fill=\\'%231B6EF3\\'/> </svg>\");\\n --baseline-limited-icon-url: url(\"data:image/svg+xml;utf8,<svg width=\\'18\\' height=\\'10\\' viewBox=\\'0 0 540 300\\' fill=\\'none\\' xmlns=\\'http://www.w3.org/2000/svg\\'> <path d=\\'M150 0L240 90L210 120L120 30L150 0Z\\' fill=\\'%23F09409\\'/> <path d=\\'M420 30L540 150L420 270L390 240L480 150L390 60L420 30Z\\' fill=\\'%23C6C6C6\\'/> <path d=\\'M330 180L300 210L390 300L420 270L330 180Z\\' fill=\\'%23F09409\\'/> <path d=\\'M120 30L150 60L60 150L150 240L120 270L0 150L120 30Z\\' fill=\\'%23C6C6C6\\'/> <path d=\\'M390 0L420 30L150 300L120 270L390 0Z\\' fill=\\'%23F09409\\'/> </svg>\");\\n}\\n\\n@media not print {\\n .lh-dark {\\n /* Pallete */\\n --color-gray-200: var(--color-gray-800);\\n --color-gray-300: #616161;\\n --color-gray-400: var(--color-gray-600);\\n --color-gray-700: var(--color-gray-400);\\n --color-gray-50: #757575;\\n --color-gray-600: var(--color-gray-500);\\n --color-green-700: var(--color-green);\\n --color-orange-700: var(--color-orange);\\n --color-red-700: var(--color-red);\\n --color-teal-600: var(--color-cyan-500);\\n\\n /* Context-specific colors */\\n --color-hover: rgba(0, 0, 0, 0.2);\\n --color-informative: var(--color-blue-200);\\n\\n /* Component variables */\\n --env-item-background-color: #393535;\\n --link-color: var(--color-blue-200);\\n --locale-selector-background-color: var(--color-gray-200);\\n --plugin-badge-background-color: var(--color-gray-800);\\n --report-background-color: var(--color-gray-900);\\n --report-border-color-secondary: var(--color-gray-200);\\n --report-text-color-secondary: var(--color-gray-400);\\n --report-text-color: var(--color-gray-100);\\n --snippet-color: var(--color-cyan-500);\\n --topbar-background-color: var(--color-gray);\\n --toplevel-warning-background-color: hsl(33deg 14% 18%);\\n --toplevel-warning-message-text-color: var(--color-orange-700);\\n --toplevel-warning-text-color: var(--color-gray-100);\\n --table-group-header-background-color: rgba(186, 196, 206, 0.15);\\n --table-group-header-text-color: var(--color-gray-100);\\n --table-higlight-background-color: rgba(186, 196, 206, 0.09);\\n\\n /* SVGs */\\n --plugin-icon-url: var(--plugin-icon-url-dark);\\n }\\n}\\n\\n/**\\n* This media query is a temporary fallback for browsers that do not support `@container query`.\\n* TODO: remove this media query when `@container query` is fully supported by browsers\\n* See https://github.com/GoogleChrome/lighthouse/pull/16332\\n*/\\n@media only screen and (max-width: 480px) {\\n .lh-vars {\\n --audit-group-margin-bottom: 20px;\\n --edge-gap-padding: var(--default-padding);\\n --env-name-min-width: 120px;\\n --gauge-circle-size-big: 96px;\\n --gauge-circle-size: 72px;\\n --gauge-label-font-size-big: 22px;\\n --gauge-label-font-size: 14px;\\n --gauge-label-line-height-big: 26px;\\n --gauge-label-line-height: 20px;\\n --gauge-percentage-font-size-big: 34px;\\n --gauge-percentage-font-size: 26px;\\n --gauge-wrapper-width: 112px;\\n --header-padding: 16px 0 16px 0;\\n --image-preview-size: 24px;\\n --plugin-icon-size: 75%;\\n --report-font-size: 14px;\\n --report-line-height: 20px;\\n --score-icon-margin-left: 2px;\\n --score-icon-size: 10px;\\n --topbar-height: 28px;\\n --topbar-logo-size: 20px;\\n }\\n}\\n\\n@container lh-container (max-width: 480px) {\\n .lh-vars {\\n --audit-group-margin-bottom: 20px;\\n --edge-gap-padding: var(--default-padding);\\n --env-name-min-width: 120px;\\n --gauge-circle-size-big: 96px;\\n --gauge-circle-size: 72px;\\n --gauge-label-font-size-big: 22px;\\n --gauge-label-font-size: 14px;\\n --gauge-label-line-height-big: 26px;\\n --gauge-label-line-height: 20px;\\n --gauge-percentage-font-size-big: 34px;\\n --gauge-percentage-font-size: 26px;\\n --gauge-wrapper-width: 112px;\\n --header-padding: 16px 0 16px 0;\\n --image-preview-size: 24px;\\n --plugin-icon-size: 75%;\\n --report-font-size: 14px;\\n --report-line-height: 20px;\\n --score-icon-margin-left: 2px;\\n --score-icon-size: 10px;\\n --topbar-height: 28px;\\n --topbar-logo-size: 20px;\\n }\\n}\\n\\n.lh-vars.lh-devtools {\\n --audit-explanation-line-height: 14px;\\n --audit-group-margin-bottom: 20px;\\n --audit-group-padding-vertical: 12px;\\n --audit-padding-vertical: 4px;\\n --category-padding: 12px;\\n --default-padding: 12px;\\n --env-name-min-width: 120px;\\n --footer-padding-vertical: 8px;\\n --gauge-circle-size-big: 72px;\\n --gauge-circle-size: 64px;\\n --gauge-label-font-size-big: 22px;\\n --gauge-label-font-size: 14px;\\n --gauge-label-line-height-big: 26px;\\n --gauge-label-line-height: 20px;\\n --gauge-percentage-font-size-big: 34px;\\n --gauge-percentage-font-size: 26px;\\n --gauge-wrapper-width: 97px;\\n --header-line-height: 20px;\\n --header-padding: 16px 0 16px 0;\\n --screenshot-overlay-background: transparent;\\n --plugin-icon-size: 75%;\\n --report-font-size: 12px;\\n --report-line-height: 20px;\\n --score-icon-margin-left: 2px;\\n --score-icon-size: 10px;\\n --section-padding-vertical: 8px;\\n}\\n\\n.lh-devtools :focus-visible {\\n outline: -webkit-focus-ring-color auto 1px;\\n}\\n\\n.lh-container:has(.lh-sticky-header) {\\n --sticky-header-buffer: calc(var(--topbar-height) + var(--sticky-header-height));\\n}\\n\\n.lh-container:not(.lh-topbar + .lh-container) {\\n --topbar-height: 0;\\n --sticky-header-height: 0;\\n --sticky-header-buffer: 0;\\n}\\n\\n.lh-max-viewport {\\n display: flex;\\n flex-direction: column;\\n min-height: 100vh;\\n width: 100%;\\n}\\n\\n.lh-devtools.lh-root {\\n height: 100%;\\n}\\n.lh-devtools.lh-root img {\\n /* Override devtools default \\'min-width: 0\\' so svg without size in a flexbox isn\\'t collapsed. */\\n min-width: auto;\\n}\\n.lh-devtools .lh-container {\\n overflow-y: scroll;\\n height: calc(100% - var(--topbar-height));\\n /** The .lh-container is the scroll parent in DevTools so we exclude the topbar from the sticky header buffer. */\\n --sticky-header-buffer: 0;\\n}\\n.lh-devtools .lh-container:has(.lh-sticky-header) {\\n /** The .lh-container is the scroll parent in DevTools so we exclude the topbar from the sticky header buffer. */\\n --sticky-header-buffer: var(--sticky-header-height);\\n}\\n@media print {\\n .lh-devtools .lh-container {\\n overflow: unset;\\n }\\n}\\n.lh-devtools .lh-sticky-header {\\n /* This is normally the height of the topbar, but we want it to stick to the top of our scroll container .lh-container` */\\n top: 0;\\n}\\n.lh-devtools .lh-element-screenshot__overlay {\\n position: absolute;\\n}\\n\\n@keyframes fadeIn {\\n 0% { opacity: 0;}\\n 100% { opacity: 0.6;}\\n}\\n\\n.lh-root *, .lh-root *::before, .lh-root *::after {\\n box-sizing: border-box;\\n}\\n\\n.lh-root {\\n font-family: var(--report-font-family);\\n font-size: var(--report-font-size);\\n margin: 0;\\n line-height: var(--report-line-height);\\n background: var(--report-background-color);\\n color: var(--report-text-color);\\n}\\n\\n.lh-root [hidden] {\\n display: none !important;\\n}\\n\\n.lh-root pre {\\n margin: 0;\\n}\\n\\n.lh-root pre,\\n.lh-root code {\\n font-family: var(--report-font-family-monospace);\\n}\\n\\n.lh-root details > summary {\\n cursor: pointer;\\n}\\n\\n.lh-hidden {\\n display: none !important;\\n}\\n\\n.lh-container {\\n /*\\n Text wrapping in the report is so much FUN!\\n We have a `word-break: break-word;` globally here to prevent a few common scenarios, namely\\n long non-breakable text (usually URLs) found in:\\n 1. The footer\\n 2. .lh-node (outerHTML)\\n 3. .lh-code\\n\\n With that sorted, the next challenge is appropriate column sizing and text wrapping inside our\\n .lh-details tables. Even more fun.\\n * We don\\'t want table headers (\"Est Savings (ms)\") to wrap or their column values, but\\n we\\'d be happy for the URL column to wrap if the URLs are particularly long.\\n * We want the narrow columns to remain narrow, providing the most column width for URL\\n * We don\\'t want the table to extend past 100% width.\\n * Long URLs in the URL column can wrap. Util.getURLDisplayName maxes them out at 64 characters,\\n but they do not get any overflow:ellipsis treatment.\\n */\\n word-break: break-word;\\n\\n container-name: lh-container;\\n container-type: inline-size;\\n}\\n\\n.lh-audit-group a,\\n.lh-category-header__description a,\\n.lh-audit__description a,\\n.lh-warnings a,\\n.lh-footer a,\\n.lh-table-column--link a {\\n color: var(--link-color);\\n}\\n\\n.lh-audit__description, .lh-audit__stackpack, .lh-list-section__description {\\n --inner-audit-padding-right: var(--stackpack-padding-horizontal);\\n padding-left: var(--audit-description-padding-left);\\n padding-right: var(--inner-audit-padding-right);\\n padding-top: 8px;\\n padding-bottom: 8px;\\n}\\n\\n.lh-details {\\n margin-top: var(--default-padding);\\n margin-bottom: var(--default-padding);\\n margin-left: var(--audit-description-padding-left);\\n}\\n\\n.lh-audit__stackpack {\\n display: flex;\\n align-items: center;\\n}\\n\\n.lh-audit__stackpack__img {\\n max-width: 30px;\\n margin-right: var(--default-padding)\\n}\\n\\n/* Report header */\\n\\n.lh-report-icon {\\n display: flex;\\n align-items: center;\\n padding: 10px 12px;\\n cursor: pointer;\\n}\\n.lh-report-icon[disabled] {\\n opacity: 0.3;\\n pointer-events: none;\\n}\\n\\n.lh-report-icon::before {\\n content: \"\";\\n margin: 4px;\\n background-repeat: no-repeat;\\n width: var(--report-icon-size);\\n height: var(--report-icon-size);\\n opacity: 0.7;\\n display: inline-block;\\n vertical-align: middle;\\n}\\n.lh-report-icon:hover::before {\\n opacity: 1;\\n}\\n.lh-dark .lh-report-icon::before {\\n filter: invert(1);\\n}\\n.lh-report-icon--print::before {\\n background-image: url(\\'data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\"><path d=\"M19 8H5c-1.66 0-3 1.34-3 3v6h4v4h12v-4h4v-6c0-1.66-1.34-3-3-3zm-3 11H8v-5h8v5zm3-7c-.55 0-1-.45-1-1s.45-1 1-1 1 .45 1 1-.45 1-1 1zm-1-9H6v4h12V3z\"/><path fill=\"none\" d=\"M0 0h24v24H0z\"/></svg>\\');\\n}\\n.lh-report-icon--copy::before {\\n background-image: url(\\'data:image/svg+xml;utf8,<svg height=\"24\" viewBox=\"0 0 24 24\" width=\"24\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M0 0h24v24H0z\" fill=\"none\"/><path d=\"M16 1H4c-1.1 0-2 .9-2 2v14h2V3h12V1zm3 4H8c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h11c1.1 0 2-.9 2-2V7c0-1.1-.9-2-2-2zm0 16H8V7h11v14z\"/></svg>\\');\\n}\\n.lh-report-icon--open::before {\\n background-image: url(\\'data:image/svg+xml;utf8,<svg height=\"24\" viewBox=\"0 0 24 24\" width=\"24\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M0 0h24v24H0z\" fill=\"none\"/><path d=\"M19 4H5c-1.11 0-2 .9-2 2v12c0 1.1.89 2 2 2h4v-2H5V8h14v10h-4v2h4c1.1 0 2-.9 2-2V6c0-1.1-.89-2-2-2zm-7 6l-4 4h3v6h2v-6h3l-4-4z\"/></svg>\\');\\n}\\n.lh-report-icon--download::before {\\n background-image: url(\\'data:image/svg+xml;utf8,<svg height=\"24\" viewBox=\"0 0 24 24\" width=\"24\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M19 9h-4V3H9v6H5l7 7 7-7zM5 18v2h14v-2H5z\"/><path d=\"M0 0h24v24H0z\" fill=\"none\"/></svg>\\');\\n}\\n.lh-report-icon--dark::before {\\n background-image:url(\\'data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24\" viewBox=\"0 0 100 125\"><path d=\"M50 23.587c-16.27 0-22.799 12.574-22.799 21.417 0 12.917 10.117 22.451 12.436 32.471h20.726c2.32-10.02 12.436-19.554 12.436-32.471 0-8.843-6.528-21.417-22.799-21.417zM39.637 87.161c0 3.001 1.18 4.181 4.181 4.181h.426l.41 1.231C45.278 94.449 46.042 95 48.019 95h3.963c1.978 0 2.74-.551 3.365-2.427l.409-1.231h.427c3.002 0 4.18-1.18 4.18-4.181V80.91H39.637v6.251zM50 18.265c1.26 0 2.072-.814 2.072-2.073v-9.12C52.072 5.813 51.26 5 50 5c-1.259 0-2.072.813-2.072 2.073v9.12c0 1.259.813 2.072 2.072 2.072zM68.313 23.727c.994.774 2.135.634 2.91-.357l5.614-7.187c.776-.992.636-2.135-.356-2.909-.992-.776-2.135-.636-2.91.357l-5.613 7.186c-.778.993-.636 2.135.355 2.91zM91.157 36.373c-.306-1.222-1.291-1.815-2.513-1.51l-8.85 2.207c-1.222.305-1.814 1.29-1.51 2.512.305 1.223 1.291 1.814 2.513 1.51l8.849-2.206c1.223-.305 1.816-1.291 1.511-2.513zM86.757 60.48l-8.331-3.709c-1.15-.512-2.225-.099-2.736 1.052-.512 1.151-.1 2.224 1.051 2.737l8.33 3.707c1.15.514 2.225.101 2.736-1.05.513-1.149.1-2.223-1.05-2.737zM28.779 23.37c.775.992 1.917 1.131 2.909.357.992-.776 1.132-1.917.357-2.91l-5.615-7.186c-.775-.992-1.917-1.132-2.909-.357s-1.131 1.917-.356 2.909l5.614 7.187zM21.715 39.583c.305-1.223-.288-2.208-1.51-2.513l-8.849-2.207c-1.222-.303-2.208.289-2.513 1.511-.303 1.222.288 2.207 1.511 2.512l8.848 2.206c1.222.304 2.208-.287 2.513-1.509zM21.575 56.771l-8.331 3.711c-1.151.511-1.563 1.586-1.05 2.735.511 1.151 1.586 1.563 2.736 1.052l8.331-3.711c1.151-.511 1.563-1.586 1.05-2.735-.512-1.15-1.585-1.562-2.736-1.052z\"/></svg>\\');\\n}\\n.lh-report-icon--treemap::before {\\n background-image: url(\\'data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 0 24 24\" width=\"24px\" fill=\"black\"><path d=\"M3 5v14h19V5H3zm2 2h15v4H5V7zm0 10v-4h4v4H5zm6 0v-4h9v4h-9z\"/></svg>\\');\\n}\\n\\n.lh-report-icon--date::before {\\n background-image: url(\\'data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"><path d=\"M7 11h2v2H7v-2zm14-5v14a2 2 0 01-2 2H5a2 2 0 01-2-2V6c0-1.1.9-2 2-2h1V2h2v2h8V2h2v2h1a2 2 0 012 2zM5 8h14V6H5v2zm14 12V10H5v10h14zm-4-7h2v-2h-2v2zm-4 0h2v-2h-2v2z\"/></svg>\\');\\n}\\n.lh-report-icon--devices::before {\\n background-image: url(\\'data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"><path d=\"M4 6h18V4H4a2 2 0 00-2 2v11H0v3h14v-3H4V6zm19 2h-6a1 1 0 00-1 1v10c0 .6.5 1 1 1h6c.6 0 1-.5 1-1V9c0-.6-.5-1-1-1zm-1 9h-4v-7h4v7z\"/></svg>\\');\\n}\\n.lh-report-icon--world::before {\\n background-image: url(\\'data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"><path d=\"M12 2a10 10 0 1 0 0 20 10 10 0 0 0 0-20zm7 6h-3c-.3-1.3-.8-2.5-1.4-3.6A8 8 0 0 1 18.9 8zm-7-4a14 14 0 0 1 2 4h-4a14 14 0 0 1 2-4zM4.3 14a8.2 8.2 0 0 1 0-4h3.3a16.5 16.5 0 0 0 0 4H4.3zm.8 2h3a14 14 0 0 0 1.3 3.6A8 8 0 0 1 5.1 16zm3-8H5a8 8 0 0 1 4.3-3.6L8 8zM12 20a14 14 0 0 1-2-4h4a14 14 0 0 1-2 4zm2.3-6H9.7a14.7 14.7 0 0 1 0-4h4.6a14.6 14.6 0 0 1 0 4zm.3 5.6c.6-1.2 1-2.4 1.4-3.6h3a8 8 0 0 1-4.4 3.6zm1.8-5.6a16.5 16.5 0 0 0 0-4h3.3a8.2 8.2 0 0 1 0 4h-3.3z\"/></svg>\\');\\n}\\n.lh-report-icon--stopwatch::before {\\n background-image: url(\\'data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"><path d=\"M15 1H9v2h6V1zm-4 13h2V8h-2v6zm8.1-6.6L20.5 6l-1.4-1.4L17.7 6A9 9 0 0 0 3 13a9 9 0 1 0 16-5.6zm-7 12.6a7 7 0 1 1 0-14 7 7 0 0 1 0 14z\"/></svg>\\');\\n}\\n.lh-report-icon--networkspeed::before {\\n background-image: url(\\'data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"><path d=\"M15.9 5c-.2 0-.3 0-.4.2v.2L10.1 17a2 2 0 0 0-.2 1 2 2 0 0 0 4 .4l2.4-12.9c0-.3-.2-.5-.5-.5zM1 9l2 2c2.9-2.9 6.8-4 10.5-3.6l1.2-2.7C10 3.8 4.7 5.3 1 9zm20 2 2-2a15.4 15.4 0 0 0-5.6-3.6L17 8.2c1.5.7 2.9 1.6 4.1 2.8zm-4 4 2-2a9.9 9.9 0 0 0-2.7-1.9l-.5 3 1.2.9zM5 13l2 2a7.1 7.1 0 0 1 4-2l1.3-2.9C9.7 10.1 7 11 5 13z\"/></svg>\\');\\n}\\n.lh-report-icon--samples-one::before {\\n background-image: url(\\'data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"><circle cx=\"7\" cy=\"14\" r=\"3\"/><path d=\"M7 18a4 4 0 1 1 0-8 4 4 0 0 1 0 8zm0-6c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm4-2a4 4 0 1 1 0-8 4 4 0 0 1 0 8zm0-6c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm5.6 17.6a4 4 0 1 1 0-8 4 4 0 0 1 0 8zm0-6c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2z\"/></svg>\\');\\n}\\n.lh-report-icon--samples-many::before {\\n background-image: url(\\'data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"><path d=\"M7 18a4 4 0 1 1 0-8 4 4 0 0 1 0 8zm0-6c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm4-2a4 4 0 1 1 0-8 4 4 0 0 1 0 8zm0-6c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm5.6 17.6a4 4 0 1 1 0-8 4 4 0 0 1 0 8zm0-6c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2z\"/><circle cx=\"7\" cy=\"14\" r=\"3\"/><circle cx=\"11\" cy=\"6\" r=\"3\"/></svg>\\');\\n}\\n.lh-report-icon--chrome::before {\\n background-image: url(\\'data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"-50 -50 562 562\"><path d=\"M256 25.6v25.6a204 204 0 0 1 144.8 60 204 204 0 0 1 60 144.8 204 204 0 0 1-60 144.8 204 204 0 0 1-144.8 60 204 204 0 0 1-144.8-60 204 204 0 0 1-60-144.8 204 204 0 0 1 60-144.8 204 204 0 0 1 144.8-60V0a256 256 0 1 0 0 512 256 256 0 0 0 0-512v25.6z\"/><path d=\"M256 179.2v25.6a51.3 51.3 0 0 1 0 102.4 51.3 51.3 0 0 1 0-102.4v-51.2a102.3 102.3 0 1 0-.1 204.7 102.3 102.3 0 0 0 .1-204.7v25.6z\"/><path d=\"M256 204.8h217.6a25.6 25.6 0 0 0 0-51.2H256a25.6 25.6 0 0 0 0 51.2m44.3 76.8L191.5 470.1a25.6 25.6 0 1 0 44.4 25.6l108.8-188.5a25.6 25.6 0 1 0-44.4-25.6m-88.6 0L102.9 93.2a25.7 25.7 0 0 0-35-9.4 25.7 25.7 0 0 0-9.4 35l108.8 188.5a25.7 25.7 0 0 0 35 9.4 25.9 25.9 0 0 0 9.4-35.1\"/></svg>\\');\\n}\\n.lh-report-icon--external::before {\\n background-image: url(\\'data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M3.15 11.9a1.01 1.01 0 0 1-.743-.307 1.01 1.01 0 0 1-.306-.743v-7.7c0-.292.102-.54.306-.744a1.01 1.01 0 0 1 .744-.306H7v1.05H3.15v7.7h7.7V7h1.05v3.85c0 .291-.103.54-.307.743a1.01 1.01 0 0 1-.743.307h-7.7Zm2.494-2.8-.743-.744 5.206-5.206H8.401V2.1h3.5v3.5h-1.05V3.893L5.644 9.1Z\"/></svg>\\');\\n}\\n.lh-report-icon--experiment::before {\\n background-image: url(\\'data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 20 20\" fill=\"none\"><path d=\"M4.50002 17C3.86136 17 3.40302 16.7187 3.12502 16.156C2.84702 15.5933 2.90936 15.069 3.31202 14.583L7.50002 9.5V4.5H6.75002C6.54202 4.5 6.36502 4.427 6.21902 4.281C6.07302 4.135 6.00002 3.958 6.00002 3.75C6.00002 3.542 6.07302 3.365 6.21902 3.219C6.36502 3.073 6.54202 3 6.75002 3H13.25C13.458 3 13.635 3.073 13.781 3.219C13.927 3.365 14 3.542 14 3.75C14 3.958 13.927 4.135 13.781 4.281C13.635 4.427 13.458 4.5 13.25 4.5H12.5V9.5L16.688 14.583C17.0767 15.069 17.132 15.5933 16.854 16.156C16.5767 16.7187 16.1254 17 15.5 17H4.50002ZM4.50002 15.5H15.5L11 10V4.5H9.00002V10L4.50002 15.5Z\" fill=\"black\"/></svg>\\');\\n}\\n\\n/** These are still icons, but w/o the auto-color invert / opacity / etc. that come with .lh-report-icon */\\n\\n.lh-report-plain-icon {\\n display: flex;\\n align-items: center;\\n}\\n.lh-report-plain-icon::before {\\n content: \"\";\\n background-repeat: no-repeat;\\n width: var(--report-icon-size);\\n height: var(--report-icon-size);\\n display: inline-block;\\n margin-right: 5px;\\n}\\n\\n.lh-report-plain-icon--checklist-pass::before {\\n --icon-url: url(\\'data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 20 20\"><path d=\"M8.938 13L13.896 8.062L12.833 7L8.938 10.875L7.167 9.125L6.104 10.188L8.938 13ZM10 18C8.90267 18 7.868 17.7917 6.896 17.375C5.924 16.9583 5.07333 16.3853 4.344 15.656C3.61467 14.9267 3.04167 14.076 2.625 13.104C2.20833 12.132 2 11.0973 2 10C2 8.88867 2.20833 7.85033 2.625 6.885C3.04167 5.92033 3.61467 5.07333 4.344 4.344C5.07333 3.61467 5.924 3.04167 6.896 2.625C7.868 2.20833 8.90267 2 10 2C11.1113 2 12.1497 2.20833 13.115 2.625C14.0797 3.04167 14.9267 3.61467 15.656 4.344C16.3853 5.07333 16.9583 5.92033 17.375 6.885C17.7917 7.85033 18 8.88867 18 10C18 11.0973 17.7917 12.132 17.375 13.104C16.9583 14.076 16.3853 14.9267 15.656 15.656C14.9267 16.3853 14.0797 16.9583 13.115 17.375C12.1497 17.7917 11.1113 18 10 18ZM10 16.5C11.8053 16.5 13.34 15.868 14.604 14.604C15.868 13.34 16.5 11.8053 16.5 10C16.5 8.19467 15.868 6.66 14.604 5.396C13.34 4.132 11.8053 3.5 10 3.5C8.19467 3.5 6.66 4.132 5.396 5.396C4.132 6.66 3.5 8.19467 3.5 10C3.5 11.8053 4.132 13.34 5.396 14.604C6.66 15.868 8.19467 16.5 10 16.5Z\" fill=\"black\"/></svg>\\');\\n background-color: var(--color-pass);\\n mask: var(--icon-url) center / contain no-repeat;\\n}\\n.lh-report-plain-icon--checklist-fail::before {\\n --icon-url: url(\\'data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 20 20\"><path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M17.5 10C17.5 14.1421 14.1421 17.5 10 17.5C5.85786 17.5 2.5 14.1421 2.5 10C2.5 5.85786 5.85786 2.5 10 2.5C14.1421 2.5 17.5 5.85786 17.5 10ZM16 10C16 13.3137 13.3137 16 10 16C8.6135 16 7.33683 15.5297 6.32083 14.7399L14.7399 6.32083C15.5297 7.33683 16 8.6135 16 10ZM5.26016 13.6793L13.6793 5.26016C12.6633 4.47033 11.3866 4 10 4C6.68629 4 4 6.68629 4 10C4 11.3866 4.47033 12.6633 5.26016 13.6793Z\" fill=\"black\"/></svg>\\');\\n background-color: var(--color-fail);\\n mask: var(--icon-url) center / contain no-repeat;\\n}\\n\\n.lh-buttons {\\n display: flex;\\n flex-wrap: wrap;\\n margin: var(--default-padding) 0;\\n}\\n.lh-button {\\n height: 32px;\\n border: 1px solid var(--report-border-color-secondary);\\n border-radius: 3px;\\n color: var(--link-color);\\n background-color: var(--report-background-color);\\n margin: 5px;\\n}\\n\\n.lh-button:first-of-type {\\n margin-left: 0;\\n}\\n\\n/* Node */\\n.lh-node {\\n display: flow-root;\\n}\\n\\n.lh-node__snippet {\\n font-family: var(--report-font-family-monospace);\\n color: var(--snippet-color);\\n font-size: var(--report-monospace-font-size);\\n line-height: 20px;\\n}\\n\\n.lh-checklist {\\n list-style: none;\\n padding: 0;\\n}\\n\\n.lh-checklist-item {\\n margin: 10px 0 10px 0;\\n}\\n\\n/* Baseline Status */\\n.lh-baseline-status {\\n display: flex;\\n align-items: center;\\n}\\n.lh-baseline-status::before {\\n content: \"\";\\n display: inline-block;\\n width: 18px;\\n height: 10px;\\n margin-right: 6px;\\n background-repeat: no-repeat;\\n background-size: contain;\\n}\\n.lh-baseline-status--high::before {\\n background-image: var(--baseline-high-icon-url);\\n}\\n.lh-baseline-status--low::before {\\n background-image: var(--baseline-low-icon-url);\\n}\\n.lh-baseline-status--limited::before {\\n background-image: var(--baseline-limited-icon-url);\\n}\\n\\n/* Score */\\n\\n.lh-audit__score-icon {\\n width: var(--score-icon-size);\\n height: var(--score-icon-size);\\n margin: var(--score-icon-margin);\\n}\\n\\n.lh-audit--pass .lh-audit__display-text {\\n color: var(--color-pass-secondary);\\n}\\n.lh-audit--pass .lh-audit__score-icon,\\n.lh-scorescale-range--pass::before {\\n border-radius: 100%;\\n background: var(--color-pass);\\n}\\n\\n.lh-audit--average .lh-audit__display-text {\\n color: var(--color-average-secondary);\\n}\\n.lh-audit--average .lh-audit__score-icon,\\n.lh-scorescale-range--average::before {\\n background: var(--color-average);\\n width: var(--icon-square-size);\\n height: var(--icon-square-size);\\n}\\n\\n.lh-audit--fail .lh-audit__display-text {\\n color: var(--color-fail-secondary);\\n}\\n.lh-audit--fail .lh-audit__score-icon,\\n.lh-audit--error .lh-audit__score-icon,\\n.lh-scorescale-range--fail::before {\\n border-left: calc(var(--score-icon-size) / 2) solid transparent;\\n border-right: calc(var(--score-icon-size) / 2) solid transparent;\\n border-bottom: var(--score-icon-size) solid var(--color-fail);\\n}\\n\\n.lh-audit--error .lh-audit__score-icon,\\n.lh-metric--error .lh-metric__icon {\\n background-image: var(--error-icon-url);\\n background-repeat: no-repeat;\\n background-position: center;\\n border: none;\\n}\\n\\n.lh-gauge__wrapper--fail .lh-gauge--error {\\n background-image: var(--error-icon-url);\\n background-repeat: no-repeat;\\n background-position: center;\\n transform: scale(0.5);\\n top: var(--score-container-padding);\\n}\\n\\n.lh-audit--manual .lh-audit__display-text,\\n.lh-audit--notapplicable .lh-audit__display-text {\\n color: var(--color-gray-600);\\n}\\n.lh-audit--manual .lh-audit__score-icon,\\n.lh-audit--notapplicable .lh-audit__score-icon {\\n border: calc(0.2 * var(--score-icon-size)) solid var(--color-gray-400);\\n border-radius: 100%;\\n background: none;\\n}\\n\\n.lh-audit--informative .lh-audit__display-text {\\n color: var(--color-gray-600);\\n}\\n\\n.lh-audit--informative .lh-audit__score-icon {\\n border: calc(0.2 * var(--score-icon-size)) solid var(--color-gray-400);\\n border-radius: 100%;\\n}\\n\\n.lh-audit__description,\\n.lh-audit__stackpack {\\n color: var(--report-text-color-secondary);\\n}\\n.lh-audit__adorn {\\n border: 1px solid var(--color-gray-500);\\n border-radius: 3px;\\n margin: 0 3px;\\n padding: 0 2px;\\n line-height: 1.1;\\n display: inline-block;\\n font-size: 90%;\\n color: var(--report-text-color-secondary);\\n}\\n\\n.lh-category-header__description {\\n text-align: center;\\n color: var(--color-gray-700);\\n margin: 0px auto;\\n max-width: 400px;\\n}\\n\\n\\n.lh-audit__display-text,\\n.lh-chevron-container {\\n margin: 0 var(--audit-margin-horizontal);\\n}\\n.lh-chevron-container {\\n margin-right: 0;\\n}\\n\\n.lh-audit__title-and-text {\\n flex: 1;\\n}\\n\\n.lh-audit__title-and-text code {\\n color: var(--snippet-color);\\n font-size: var(--report-monospace-font-size);\\n}\\n\\n/* Prepend display text with em dash separator. */\\n.lh-audit__display-text:not(:empty):before {\\n content: \\'—\\';\\n margin-right: var(--audit-margin-horizontal);\\n}\\n\\n/* Expandable Details (Audit Groups, Audits) */\\n.lh-audit__header {\\n display: flex;\\n align-items: center;\\n padding: var(--default-padding);\\n}\\n\\n\\n.lh-metricfilter {\\n display: grid;\\n justify-content: end;\\n align-items: center;\\n grid-auto-flow: column;\\n gap: 4px;\\n color: var(--color-gray-700);\\n}\\n\\n.lh-metricfilter__radio {\\n /*\\n * Instead of hiding, position offscreen so it\\'s still accessible to screen readers\\n * https://bugs.chromium.org/p/chromium/issues/detail?id=1439785\\n */\\n position: fixed;\\n left: -9999px;\\n}\\n.lh-metricfilter input[type=\\'radio\\']:focus-visible + label {\\n outline: -webkit-focus-ring-color auto 1px;\\n}\\n\\n.lh-metricfilter__label {\\n display: inline-flex;\\n padding: 0 4px;\\n height: 16px;\\n text-decoration: underline;\\n align-items: center;\\n cursor: pointer;\\n font-size: 90%;\\n}\\n\\n.lh-metricfilter__label--active {\\n background: var(--color-blue-primary);\\n color: var(--color-white);\\n border-radius: 3px;\\n text-decoration: none;\\n}\\n/* Give the \\'All\\' choice a more muted display */\\n.lh-metricfilter__label--active[for=\"metric-All\"] {\\n background-color: var(--color-blue-200) !important;\\n color: black !important;\\n}\\n\\n.lh-metricfilter__text {\\n margin-right: 8px;\\n}\\n\\n/* If audits are filtered, hide the itemcount for Passed Audits… */\\n.lh-category--filtered .lh-audit-group .lh-audit-group__itemcount {\\n display: none;\\n}\\n\\n\\n.lh-audit__header:hover {\\n background-color: var(--color-hover);\\n}\\n\\n/* We want to hide the browser\\'s default arrow marker on summary elements. Admittedly, it\\'s complicated. */\\n.lh-root details > summary {\\n /* Blink 89+ and Firefox will hide the arrow when display is changed from (new) default of `list-item` to block. https://chromestatus.com/feature/6730096436051968*/\\n display: block;\\n}\\n/* Safari and Blink <=88 require using the -webkit-details-marker selector */\\n.lh-root details > summary::-webkit-details-marker {\\n display: none;\\n}\\n\\n/* Perf Metric */\\n\\n.lh-metrics-container {\\n display: grid;\\n grid-auto-rows: 1fr;\\n grid-template-columns: 1fr 1fr;\\n grid-column-gap: var(--report-line-height);\\n margin-bottom: var(--default-padding);\\n}\\n\\n.lh-metric {\\n border-top: 1px solid var(--report-border-color-secondary);\\n}\\n\\n.lh-category:not(.lh--hoisted-meta) .lh-metric:nth-last-child(-n+2) {\\n border-bottom: 1px solid var(--report-border-color-secondary);\\n}\\n\\n.lh-metric__innerwrap {\\n display: grid;\\n /**\\n * Icon -- Metric Name\\n * -- Metric Value\\n */\\n grid-template-columns: calc(var(--score-icon-size) + var(--score-icon-margin-left) + var(--score-icon-margin-right)) 1fr;\\n align-items: center;\\n padding: var(--default-padding);\\n}\\n\\n.lh-metric__details {\\n order: -1;\\n}\\n\\n.lh-metric__title {\\n flex: 1;\\n}\\n\\n.lh-calclink {\\n padding-left: calc(1ex / 3);\\n}\\n\\n.lh-metric__description {\\n display: none;\\n grid-column-start: 2;\\n grid-column-end: 4;\\n color: var(--report-text-color-secondary);\\n}\\n\\n.lh-metric__value {\\n font-size: var(--metric-value-font-size);\\n margin: calc(var(--default-padding) / 2) 0;\\n white-space: nowrap; /* No wrapping between metric value and the icon */\\n grid-column-start: 2;\\n}\\n\\n/**\\n* This media query is a temporary fallback for browsers that do not support `@container query`.\\n* TODO: remove this media query when `@container query` is fully supported by browsers\\n* See https://github.com/GoogleChrome/lighthouse/pull/16332\\n*/\\n@media screen and (max-width: 535px) {\\n .lh-metrics-container {\\n display: block;\\n }\\n\\n .lh-metric {\\n border-bottom: none !important;\\n }\\n .lh-category:not(.lh--hoisted-meta) .lh-metric:nth-last-child(1) {\\n border-bottom: 1px solid var(--report-border-color-secondary) !important;\\n }\\n\\n /* Change the grid to 3 columns for narrow viewport. */\\n .lh-metric__innerwrap {\\n /**\\n * Icon -- Metric Name -- Metric Value\\n */\\n grid-template-columns: calc(var(--score-icon-size) + var(--score-icon-margin-left) + var(--score-icon-margin-right)) 2fr 1fr;\\n }\\n .lh-metric__value {\\n justify-self: end;\\n grid-column-start: unset;\\n }\\n}\\n\\n@container lh-container (max-width: 535px) {\\n .lh-metrics-container {\\n display: block;\\n }\\n\\n .lh-metric {\\n border-bottom: none !important;\\n }\\n .lh-category:not(.lh--hoisted-meta) .lh-metric:nth-last-child(1) {\\n border-bottom: 1px solid var(--report-border-color-secondary) !important;\\n }\\n\\n /* Change the grid to 3 columns for narrow viewport. */\\n .lh-metric__innerwrap {\\n /**\\n * Icon -- Metric Name -- Metric Value\\n */\\n grid-template-columns: calc(var(--score-icon-size) + var(--score-icon-margin-left) + var(--score-icon-margin-right)) 2fr 1fr;\\n }\\n .lh-metric__value {\\n justify-self: end;\\n grid-column-start: unset;\\n }\\n}\\n\\n/* No-JS toggle switch */\\n/* Keep this selector sync\\'d w/ `magicSelector` in report-ui-features-test.js */\\n .lh-metrics-toggle__input:checked ~ .lh-metrics-container .lh-metric__description {\\n display: block;\\n}\\n\\n/* TODO get rid of the SVGS and clean up these some more */\\n.lh-metrics-toggle__input {\\n opacity: 0;\\n position: absolute;\\n right: 0;\\n top: 0px;\\n}\\n\\n.lh-metrics-toggle__input + div > label > .lh-metrics-toggle__labeltext--hide,\\n.lh-metrics-toggle__input:checked + div > label > .lh-metrics-toggle__labeltext--show {\\n display: none;\\n}\\n.lh-metrics-toggle__input:checked + div > label > .lh-metrics-toggle__labeltext--hide {\\n display: inline;\\n}\\n.lh-metrics-toggle__input:focus + div > label {\\n outline: -webkit-focus-ring-color auto 3px;\\n}\\n\\n.lh-metrics-toggle__label {\\n cursor: pointer;\\n font-size: var(--report-font-size-secondary);\\n line-height: var(--report-line-height-secondary);\\n color: var(--color-gray-700);\\n}\\n\\n/* Pushes the metric description toggle button to the right. */\\n.lh-audit-group--metrics .lh-audit-group__header {\\n display: flex;\\n justify-content: space-between;\\n}\\n\\n.lh-metric__icon,\\n.lh-scorescale-range::before {\\n content: \\'\\';\\n width: var(--score-icon-size);\\n height: var(--score-icon-size);\\n display: inline-block;\\n margin: var(--score-icon-margin);\\n}\\n\\n.lh-metric--pass .lh-metric__value {\\n color: var(--color-pass-secondary);\\n}\\n.lh-metric--pass .lh-metric__icon {\\n border-radius: 100%;\\n background: var(--color-pass);\\n}\\n\\n.lh-metric--average .lh-metric__value {\\n color: var(--color-average-secondary);\\n}\\n.lh-metric--average .lh-metric__icon {\\n background: var(--color-average);\\n width: var(--icon-square-size);\\n height: var(--icon-square-size);\\n}\\n\\n.lh-metric--fail .lh-metric__value {\\n color: var(--color-fail-secondary);\\n}\\n.lh-metric--fail .lh-metric__icon {\\n border-left: calc(var(--score-icon-size) / 2) solid transparent;\\n border-right: calc(var(--score-icon-size) / 2) solid transparent;\\n border-bottom: var(--score-icon-size) solid var(--color-fail);\\n}\\n\\n.lh-metric--error .lh-metric__value,\\n.lh-metric--error .lh-metric__description {\\n color: var(--color-fail-secondary);\\n}\\n\\n/* Filmstrip */\\n\\n.lh-filmstrip-container {\\n /* smaller gap between metrics and filmstrip */\\n margin: -8px auto 0 auto;\\n}\\n\\n.lh-filmstrip {\\n display: flex;\\n justify-content: space-between;\\n justify-items: center;\\n margin-bottom: var(--default-padding);\\n width: 100%;\\n}\\n\\n.lh-filmstrip__frame {\\n overflow: hidden;\\n line-height: 0;\\n}\\n\\n.lh-filmstrip__thumbnail {\\n border: 1px solid var(--report-border-color-secondary);\\n max-height: 150px;\\n max-width: 120px;\\n}\\n\\n.lh-dark .lh-perf-toggle-text {\\n color: rgba(30, 164, 70, 1);\\n}\\n\\n.lh-perf-toggle-text a {\\n color: var(--link-color);\\n}\\n\\n/* Audit */\\n\\n.lh-audit {\\n border-bottom: 1px solid var(--report-border-color-secondary);\\n}\\n\\n/* Apply border-top to just the first audit. */\\n.lh-audit {\\n border-top: 1px solid var(--report-border-color-secondary);\\n}\\n.lh-audit ~ .lh-audit {\\n border-top: none;\\n}\\n\\n\\n.lh-audit--error .lh-audit__display-text {\\n color: var(--color-fail-secondary);\\n}\\n\\n/* Audit Group */\\n\\n.lh-audit-group {\\n margin-bottom: var(--audit-group-margin-bottom);\\n position: relative;\\n}\\n.lh-audit-group--metrics {\\n margin-bottom: calc(var(--audit-group-margin-bottom) / 2);\\n}\\n\\n.lh-audit-group--metrics .lh-audit-group__summary {\\n margin-top: 0;\\n margin-bottom: 0;\\n}\\n\\n.lh-audit-group__summary {\\n display: flex;\\n justify-content: space-between;\\n align-items: center;\\n}\\n\\n.lh-audit-group__header .lh-chevron {\\n margin-top: calc((var(--report-line-height) - 5px) / 2);\\n}\\n\\n.lh-audit-group__header {\\n letter-spacing: 0.8px;\\n padding: var(--default-padding);\\n padding-left: 0;\\n}\\n\\n.lh-audit-group__header, .lh-audit-group__summary {\\n font-size: var(--report-font-size-secondary);\\n line-height: var(--report-line-height-secondary);\\n color: var(--color-gray-700);\\n}\\n\\n.lh-audit-group__title {\\n text-transform: uppercase;\\n font-weight: 500;\\n}\\n\\n.lh-audit-group__itemcount {\\n color: var(--color-gray-600);\\n}\\n\\n.lh-audit-group__footer {\\n color: var(--color-gray-600);\\n display: block;\\n margin-top: var(--default-padding);\\n}\\n\\n.lh-details,\\n.lh-category-header__description,\\n.lh-audit-group__footer {\\n font-size: var(--report-font-size-secondary);\\n line-height: var(--report-line-height-secondary);\\n}\\n\\n.lh-audit-explanation {\\n margin: var(--audit-padding-vertical) 0 calc(var(--audit-padding-vertical) / 2) var(--audit-margin-horizontal);\\n line-height: var(--audit-explanation-line-height);\\n display: inline-block;\\n}\\n\\n.lh-audit--fail .lh-audit-explanation {\\n color: var(--color-fail-secondary);\\n}\\n\\n/* Report */\\n.lh-list {\\n margin-right: calc(var(--default-padding) * 2);\\n}\\n.lh-list > :not(:last-child) {\\n margin-bottom: calc(var(--default-padding) * 2);\\n border-bottom: 1px solid #A8C7FA;\\n}\\n.lh-list-section {\\n padding: calc(var(--default-padding) * 2) 0;\\n}\\n.lh-list-section__title {\\n text-decoration: underline;\\n}\\n\\n.lh-header-container {\\n display: block;\\n margin: 0 auto;\\n position: relative;\\n word-wrap: break-word;\\n}\\n\\n.lh-header-container .lh-scores-wrapper {\\n border-bottom: 1px solid var(--color-gray-200);\\n}\\n\\n\\n.lh-report {\\n min-width: var(--report-content-min-width);\\n}\\n\\n.lh-exception {\\n font-size: large;\\n}\\n\\n.lh-code {\\n white-space: normal;\\n margin-top: 0;\\n font-size: var(--report-monospace-font-size);\\n}\\n\\n.lh-warnings {\\n --item-margin: calc(var(--report-line-height) / 6);\\n color: var(--color-average-secondary);\\n margin: var(--audit-padding-vertical) 0;\\n padding: var(--default-padding)\\n var(--default-padding)\\n var(--default-padding)\\n calc(var(--audit-description-padding-left));\\n background-color: var(--toplevel-warning-background-color);\\n}\\n.lh-warnings span {\\n font-weight: bold;\\n}\\n\\n.lh-warnings--toplevel {\\n --item-margin: calc(var(--header-line-height) / 4);\\n color: var(--toplevel-warning-text-color);\\n margin-left: auto;\\n margin-right: auto;\\n max-width: var(--report-content-max-width-minus-edge-gap);\\n padding: var(--toplevel-warning-padding);\\n border-radius: 8px;\\n}\\n\\n.lh-warnings__msg {\\n color: var(--toplevel-warning-message-text-color);\\n margin: 0;\\n}\\n\\n.lh-warnings ul {\\n margin: 0;\\n}\\n.lh-warnings li {\\n margin: var(--item-margin) 0;\\n}\\n.lh-warnings li:last-of-type {\\n margin-bottom: 0;\\n}\\n\\n.lh-scores-header {\\n display: flex;\\n flex-wrap: wrap;\\n justify-content: center;\\n}\\n.lh-scores-header__solo {\\n padding: 0;\\n border: 0;\\n}\\n\\n/* Gauge */\\n\\n.lh-gauge__wrapper--pass {\\n color: var(--color-pass-secondary);\\n fill: var(--color-pass);\\n stroke: var(--color-pass);\\n}\\n\\n.lh-gauge__wrapper--average {\\n color: var(--color-average-secondary);\\n fill: var(--color-average);\\n stroke: var(--color-average);\\n}\\n\\n.lh-gauge__wrapper--fail {\\n color: var(--color-fail-secondary);\\n fill: var(--color-fail);\\n stroke: var(--color-fail);\\n}\\n\\n.lh-gauge__wrapper--not-applicable {\\n color: var(--color-not-applicable);\\n fill: var(--color-not-applicable);\\n stroke: var(--color-not-applicable);\\n}\\n\\n.lh-fraction__wrapper .lh-fraction__content::before {\\n content: \\'\\';\\n height: var(--score-icon-size);\\n width: var(--score-icon-size);\\n margin: var(--score-icon-margin);\\n display: inline-block;\\n}\\n.lh-fraction__wrapper--pass .lh-fraction__content {\\n color: var(--color-pass-secondary);\\n}\\n.lh-fraction__wrapper--pass .lh-fraction__background {\\n background-color: var(--color-pass);\\n}\\n.lh-fraction__wrapper--pass .lh-fraction__content::before {\\n background-color: var(--color-pass);\\n border-radius: 50%;\\n}\\n.lh-fraction__wrapper--average .lh-fraction__content {\\n color: var(--color-average-secondary);\\n}\\n.lh-fraction__wrapper--average .lh-fraction__background,\\n.lh-fraction__wrapper--average .lh-fraction__content::before {\\n background-color: var(--color-average);\\n}\\n.lh-fraction__wrapper--fail .lh-fraction__content {\\n color: var(--color-fail);\\n}\\n.lh-fraction__wrapper--fail .lh-fraction__background {\\n background-color: var(--color-fail);\\n}\\n.lh-fraction__wrapper--fail .lh-fraction__content::before {\\n border-left: calc(var(--score-icon-size) / 2) solid transparent;\\n border-right: calc(var(--score-icon-size) / 2) solid transparent;\\n border-bottom: var(--score-icon-size) solid var(--color-fail);\\n}\\n.lh-fraction__wrapper--null .lh-fraction__content {\\n color: var(--color-gray-700);\\n}\\n.lh-fraction__wrapper--null .lh-fraction__background {\\n background-color: var(--color-gray-700);\\n}\\n.lh-fraction__wrapper--null .lh-fraction__content::before {\\n border-radius: 50%;\\n border: calc(0.2 * var(--score-icon-size)) solid var(--color-gray-700);\\n}\\n\\n.lh-fraction__background {\\n position: absolute;\\n height: 100%;\\n width: 100%;\\n border-radius: calc(var(--gauge-circle-size) / 2);\\n opacity: 0.1;\\n z-index: -1;\\n}\\n\\n.lh-fraction__content-wrapper {\\n height: var(--gauge-circle-size);\\n display: flex;\\n align-items: center;\\n}\\n\\n.lh-fraction__content {\\n display: flex;\\n position: relative;\\n align-items: center;\\n justify-content: center;\\n font-size: calc(0.3 * var(--gauge-circle-size));\\n line-height: calc(0.4 * var(--gauge-circle-size));\\n width: max-content;\\n min-width: calc(1.5 * var(--gauge-circle-size));\\n padding: calc(0.1 * var(--gauge-circle-size)) calc(0.2 * var(--gauge-circle-size));\\n --score-icon-size: calc(0.21 * var(--gauge-circle-size));\\n --score-icon-margin: 0 calc(0.15 * var(--gauge-circle-size)) 0 0;\\n}\\n\\n.lh-gauge {\\n stroke-linecap: round;\\n width: var(--gauge-circle-size);\\n height: var(--gauge-circle-size);\\n}\\n\\n.lh-category .lh-gauge {\\n --gauge-circle-size: var(--gauge-circle-size-big);\\n}\\n\\n.lh-gauge-base {\\n opacity: 0.1;\\n}\\n\\n.lh-gauge-arc {\\n fill: none;\\n transform-origin: 50% 50%;\\n animation: load-gauge var(--transition-length) ease both;\\n animation-delay: 250ms;\\n}\\n\\n.lh-gauge__svg-wrapper {\\n position: relative;\\n height: var(--gauge-circle-size);\\n}\\n.lh-category .lh-gauge__svg-wrapper,\\n.lh-category .lh-fraction__wrapper {\\n --gauge-circle-size: var(--gauge-circle-size-big);\\n}\\n\\n/* The plugin badge overlay */\\n.lh-gauge__wrapper--plugin .lh-gauge__svg-wrapper::before {\\n width: var(--plugin-badge-size);\\n height: var(--plugin-badge-size);\\n background-color: var(--plugin-badge-background-color);\\n background-image: var(--plugin-icon-url);\\n background-repeat: no-repeat;\\n background-size: var(--plugin-icon-size);\\n background-position: 58% 50%;\\n content: \"\";\\n position: absolute;\\n right: -6px;\\n bottom: 0px;\\n display: block;\\n z-index: 100;\\n box-shadow: 0 0 4px rgba(0,0,0,.2);\\n border-radius: 25%;\\n}\\n.lh-category .lh-gauge__wrapper--plugin .lh-gauge__svg-wrapper::before {\\n width: var(--plugin-badge-size-big);\\n height: var(--plugin-badge-size-big);\\n}\\n\\n@keyframes load-gauge {\\n from { stroke-dasharray: 0 352; }\\n}\\n\\n.lh-gauge__percentage {\\n width: 100%;\\n height: var(--gauge-circle-size);\\n line-height: var(--gauge-circle-size);\\n position: absolute;\\n font-family: var(--report-font-family-monospace);\\n font-size: calc(var(--gauge-circle-size) * 0.34 + 1.3px);\\n text-align: center;\\n top: var(--score-container-padding);\\n}\\n\\n.lh-category .lh-gauge__percentage {\\n --gauge-circle-size: var(--gauge-circle-size-big);\\n --gauge-percentage-font-size: var(--gauge-percentage-font-size-big);\\n}\\n\\n.lh-gauge__wrapper,\\n.lh-fraction__wrapper {\\n position: relative;\\n display: flex;\\n align-items: center;\\n flex-direction: column;\\n text-decoration: none;\\n padding: var(--score-container-padding);\\n\\n --transition-length: 1s;\\n\\n /* Contain the layout style paint & layers during animation*/\\n contain: content;\\n will-change: opacity; /* Only using for layer promotion */\\n}\\n\\n.lh-gauge__label,\\n.lh-fraction__label {\\n font-size: var(--gauge-label-font-size);\\n font-weight: 500;\\n line-height: var(--gauge-label-line-height);\\n margin-top: 10px;\\n text-align: center;\\n color: var(--report-text-color);\\n word-break: keep-all;\\n}\\n\\n/* TODO(#8185) use more BEM (.lh-gauge__label--big) instead of relying on descendant selector */\\n.lh-category .lh-gauge__label,\\n.lh-category .lh-fraction__label {\\n --gauge-label-font-size: var(--gauge-label-font-size-big);\\n --gauge-label-line-height: var(--gauge-label-line-height-big);\\n margin-top: 14px;\\n}\\n\\n.lh-scores-header .lh-gauge__wrapper,\\n.lh-scores-header .lh-fraction__wrapper,\\n.lh-sticky-header .lh-gauge__wrapper,\\n.lh-sticky-header .lh-fraction__wrapper {\\n width: var(--gauge-wrapper-width);\\n}\\n\\n.lh-scorescale {\\n display: inline-flex;\\n\\n gap: calc(var(--default-padding) * 4);\\n margin: 16px auto 0 auto;\\n font-size: var(--report-font-size-secondary);\\n color: var(--color-gray-700);\\n\\n}\\n\\n.lh-scorescale-range {\\n display: flex;\\n align-items: center;\\n font-family: var(--report-font-family-monospace);\\n white-space: nowrap;\\n}\\n\\n.lh-category-header__finalscreenshot .lh-scorescale {\\n border: 0;\\n display: flex;\\n justify-content: center;\\n}\\n\\n.lh-category-header__finalscreenshot .lh-scorescale-range {\\n font-family: unset;\\n font-size: 12px;\\n}\\n\\n.lh-scorescale-wrap {\\n display: contents;\\n}\\n\\n/* Hide category score gauages if it\\'s a single category report */\\n.lh-header--solo-category .lh-scores-wrapper {\\n display: none;\\n}\\n\\n\\n.lh-categories {\\n width: 100%;\\n}\\n\\n.lh-category {\\n padding: var(--category-padding);\\n max-width: var(--report-content-max-width);\\n margin: 0 auto;\\n\\n scroll-margin-top: calc(var(--sticky-header-buffer) - 1em);\\n}\\n\\n.lh-category-wrapper {\\n border-bottom: 1px solid var(--color-gray-200);\\n}\\n.lh-category-wrapper:last-of-type {\\n border-bottom: 0;\\n}\\n\\n.lh-category-header {\\n margin-bottom: var(--section-padding-vertical);\\n}\\n\\n.lh-category-header .lh-score__gauge {\\n max-width: 400px;\\n width: auto;\\n margin: 0px auto;\\n}\\n\\n.lh-category-header__finalscreenshot {\\n display: grid;\\n grid-template: none / 1fr 1px 1fr;\\n justify-items: center;\\n align-items: center;\\n gap: var(--report-line-height);\\n min-height: 288px;\\n margin-bottom: var(--default-padding);\\n}\\n\\n.lh-final-ss-image {\\n /* constrain the size of the image to not be too large */\\n max-height: calc(var(--gauge-circle-size-big) * 2.8);\\n max-width: calc(var(--gauge-circle-size-big) * 3.5);\\n border: 1px solid var(--color-gray-200);\\n padding: 4px;\\n border-radius: 3px;\\n display: block;\\n}\\n\\n.lh-category-headercol--separator {\\n background: var(--color-gray-200);\\n width: 1px;\\n height: var(--gauge-circle-size-big);\\n}\\n\\n/**\\n* This media query is a temporary fallback for browsers that do not support `@container query`.\\n* TODO: remove this media query when `@container query` is fully supported by browsers\\n* See https://github.com/GoogleChrome/lighthouse/pull/16332\\n*/\\n@media screen and (max-width: 780px) {\\n .lh-category-header__finalscreenshot {\\n grid-template: 1fr 1fr / none\\n }\\n .lh-category-headercol--separator {\\n display: none;\\n }\\n}\\n\\n@container lh-container (max-width: 780px) {\\n .lh-category-header__finalscreenshot {\\n grid-template: 1fr 1fr / none\\n }\\n .lh-category-headercol--separator {\\n display: none;\\n }\\n}\\n\\n/**\\n* This media query is a temporary fallback for browsers that do not support `@container query`.\\n* TODO: remove this media query when `@container query` is fully supported by browsers\\n* See https://github.com/GoogleChrome/lighthouse/pull/16332\\n*/\\n@media screen and (max-width: 964px) {\\n .lh-report {\\n margin-left: 0;\\n width: 100%;\\n }\\n}\\n\\n/* 964 fits the min-width of the filmstrip */\\n@container lh-container (max-width: 964px) {\\n .lh-report {\\n margin-left: 0;\\n width: 100%;\\n }\\n}\\n\\n@media print {\\n body {\\n -webkit-print-color-adjust: exact; /* print background colors */\\n }\\n .lh-container {\\n display: block;\\n }\\n .lh-report {\\n margin-left: 0;\\n padding-top: 0;\\n }\\n .lh-categories {\\n margin-top: 0;\\n }\\n .lh-buttons, .lh-highlighter {\\n /* hide stickyheader marker when printing. crbug.com/41486992 */\\n display: none;\\n }\\n}\\n\\n.lh-table {\\n position: relative;\\n border-collapse: separate;\\n border-spacing: 0;\\n /* Can\\'t assign padding to table, so shorten the width instead. */\\n width: calc(100% - var(--audit-description-padding-left) - var(--stackpack-padding-horizontal));\\n border: 1px solid var(--report-border-color-secondary);\\n}\\n\\n.lh-table thead th {\\n position: sticky;\\n top: var(--sticky-header-buffer);\\n z-index: 1;\\n background-color: var(--report-background-color);\\n border-bottom: 1px solid var(--report-border-color-secondary);\\n font-weight: normal;\\n color: var(--color-gray-600);\\n /* See text-wrapping comment on .lh-container. */\\n word-break: normal;\\n}\\n\\n.lh-row--group {\\n background-color: var(--table-group-header-background-color);\\n}\\n\\n.lh-row--group td {\\n font-weight: bold;\\n font-size: 1.05em;\\n color: var(--table-group-header-text-color);\\n}\\n\\n.lh-row--group td:first-child {\\n display: block;\\n min-width: max-content;\\n font-weight: normal;\\n}\\n\\n.lh-row--group .lh-text {\\n color: inherit;\\n text-decoration: none;\\n display: inline-block;\\n}\\n\\n.lh-row--group a.lh-link:hover {\\n text-decoration: underline;\\n}\\n\\n.lh-row--group .lh-audit__adorn {\\n text-transform: capitalize;\\n font-weight: normal;\\n padding: 2px 3px 1px 3px;\\n}\\n\\n.lh-row--group .lh-audit__adorn1p {\\n color: var(--link-color);\\n border-color: var(--link-color);\\n}\\n\\n.lh-row--group .lh-report-icon--external::before {\\n content: \"\";\\n background-repeat: no-repeat;\\n width: 14px;\\n height: 16px;\\n opacity: 0.7;\\n display: inline-block;\\n vertical-align: middle;\\n}\\n\\n.lh-row--group .lh-report-icon--external {\\n visibility: hidden;\\n}\\n\\n.lh-row--group:hover .lh-report-icon--external {\\n visibility: visible;\\n}\\n\\n.lh-dark .lh-report-icon--external::before {\\n filter: invert(1);\\n}\\n\\n/** Manages indentation of two-level and three-level nested adjacent rows */\\n\\n.lh-row--group ~ [data-entity]:not(.lh-row--group) td:first-child {\\n padding-left: 20px;\\n}\\n\\n.lh-row--group ~ [data-entity]:not(.lh-row--group) ~ .lh-sub-item-row td:first-child {\\n margin-left: 20px;\\n padding-left: 10px;\\n border-left: 1px solid #A8C7FA;\\n display: block;\\n}\\n\\n.lh-row--even {\\n background-color: var(--table-group-header-background-color);\\n}\\n.lh-row--hidden {\\n display: none;\\n}\\n\\n.lh-table th,\\n.lh-table td {\\n padding: var(--default-padding);\\n}\\n\\n.lh-table tr {\\n vertical-align: middle;\\n}\\n\\n.lh-table tr:hover {\\n background-color: var(--table-higlight-background-color);\\n}\\n\\n/* Looks unnecessary, but mostly for keeping the <th>s left-aligned */\\n.lh-table-column--text,\\n.lh-table-column--source-location,\\n.lh-table-column--url,\\n/* .lh-table-column--thumbnail, */\\n/* .lh-table-column--empty,*/\\n.lh-table-column--code,\\n.lh-table-column--node {\\n text-align: left;\\n}\\n\\n.lh-table-column--code {\\n min-width: 100px;\\n}\\n\\n.lh-table-column--bytes,\\n.lh-table-column--timespanMs,\\n.lh-table-column--ms,\\n.lh-table-column--numeric {\\n text-align: right;\\n word-break: normal;\\n}\\n\\n\\n\\n.lh-table .lh-table-column--thumbnail {\\n width: var(--image-preview-size);\\n}\\n\\n.lh-table-column--url {\\n min-width: 250px;\\n}\\n\\n.lh-table-column--text {\\n min-width: 80px;\\n}\\n\\n/* Keep columns narrow if they follow the URL column */\\n/* 12% was determined to be a decent narrow width, but wide enough for column headings */\\n.lh-table-column--url + th.lh-table-column--bytes,\\n.lh-table-column--url + .lh-table-column--bytes + th.lh-table-column--bytes,\\n.lh-table-column--url + .lh-table-column--ms,\\n.lh-table-column--url + .lh-table-column--ms + th.lh-table-column--bytes,\\n.lh-table-column--url + .lh-table-column--bytes + th.lh-table-column--timespanMs {\\n width: 12%;\\n}\\n\\n/** Tweak styling for tables in insight audits. */\\n.lh-audit[id$=\"-insight\"] .lh-table {\\n border: none;\\n}\\n\\n.lh-audit[id$=\"-insight\"] .lh-table thead th {\\n font-weight: bold;\\n color: unset;\\n}\\n\\n.lh-audit[id$=\"-insight\"] .lh-table th,\\n.lh-audit[id$=\"-insight\"] .lh-table td {\\n padding: calc(var(--default-padding) / 2);\\n}\\n\\n.lh-audit[id$=\"-insight\"] .lh-table .lh-row--even,\\n.lh-audit[id$=\"-insight\"] .lh-table tr:not(.lh-row--group):hover {\\n background-color: unset;\\n}\\n\\n.lh-text__url-host {\\n display: inline;\\n}\\n\\n.lh-text__url-host {\\n margin-left: calc(var(--report-font-size) / 2);\\n opacity: 0.6;\\n font-size: 90%\\n}\\n\\n.lh-thumbnail {\\n object-fit: cover;\\n width: var(--image-preview-size);\\n height: var(--image-preview-size);\\n display: block;\\n}\\n\\n.lh-unknown pre {\\n overflow: scroll;\\n border: solid 1px var(--color-gray-200);\\n}\\n\\n.lh-text__url > a {\\n color: inherit;\\n text-decoration: none;\\n}\\n\\n.lh-text__url > a:hover {\\n text-decoration: underline dotted #999;\\n}\\n\\n.lh-sub-item-row {\\n margin-left: 20px;\\n margin-bottom: 0;\\n color: var(--color-gray-700);\\n}\\n\\n.lh-sub-item-row td {\\n padding-top: 4px;\\n padding-bottom: 4px;\\n padding-left: 20px;\\n}\\n\\n.lh-sub-item-row .lh-element-screenshot {\\n zoom: 0.6;\\n}\\n\\n/* Chevron\\n https://codepen.io/paulirish/pen/LmzEmK\\n */\\n.lh-chevron {\\n --chevron-angle: 42deg;\\n /* Edge doesn\\'t support transform: rotate(calc(...)), so we define it here */\\n --chevron-angle-right: -42deg;\\n width: var(--chevron-size);\\n height: var(--chevron-size);\\n margin-top: calc((var(--report-line-height) - 12px) / 2);\\n}\\n\\n.lh-chevron__lines {\\n transition: transform 0.4s;\\n transform: translateY(var(--report-line-height));\\n}\\n.lh-chevron__line {\\n stroke: var(--chevron-line-stroke);\\n stroke-width: var(--chevron-size);\\n stroke-linecap: square;\\n transform-origin: 50%;\\n transform: rotate(var(--chevron-angle));\\n transition: transform 300ms, stroke 300ms;\\n}\\n\\n.lh-expandable-details .lh-chevron__line-right,\\n.lh-expandable-details[open] .lh-chevron__line-left {\\n transform: rotate(var(--chevron-angle-right));\\n}\\n\\n.lh-expandable-details[open] .lh-chevron__line-right {\\n transform: rotate(var(--chevron-angle));\\n}\\n\\n\\n.lh-expandable-details[open] .lh-chevron__lines {\\n transform: translateY(calc(var(--chevron-size) * -1));\\n}\\n\\n.lh-expandable-details[open] {\\n animation: 300ms openDetails forwards;\\n padding-bottom: var(--default-padding);\\n}\\n\\n@keyframes openDetails {\\n from {\\n outline: 1px solid var(--report-background-color);\\n }\\n to {\\n outline: 1px solid;\\n box-shadow: 0 2px 4px rgba(0, 0, 0, .24);\\n }\\n}\\n\\n/**\\n* This media query is a temporary fallback for browsers that do not support `@container query`.\\n* TODO: remove this media query when `@container query` is fully supported by browsers\\n* See https://github.com/GoogleChrome/lighthouse/pull/16332\\n*/\\n@media screen and (max-width: 780px) {\\n /* no black outline if we\\'re not confident the entire table can be displayed within bounds */\\n .lh-expandable-details[open] {\\n animation: none;\\n }\\n}\\n\\n@container lh-container (max-width: 780px) {\\n /* no black outline if we\\'re not confident the entire table can be displayed within bounds */\\n .lh-expandable-details[open] {\\n animation: none;\\n }\\n}\\n\\n.lh-expandable-details[open] summary, details.lh-clump > summary {\\n border-bottom: 1px solid var(--report-border-color-secondary);\\n}\\ndetails.lh-clump[open] > summary {\\n border-bottom-width: 0;\\n}\\n\\n\\n\\ndetails .lh-clump-toggletext--hide,\\ndetails[open] .lh-clump-toggletext--show { display: none; }\\ndetails[open] .lh-clump-toggletext--hide { display: block;}\\n\\n\\n/* Tooltip */\\n.lh-tooltip-boundary {\\n position: relative;\\n}\\n\\n.lh-tooltip {\\n position: absolute;\\n display: none; /* Don\\'t retain these layers when not needed */\\n opacity: 0;\\n background: #ffffff;\\n white-space: pre-line; /* Render newlines in the text */\\n min-width: 246px;\\n max-width: 275px;\\n padding: 15px;\\n border-radius: 5px;\\n text-align: initial;\\n line-height: 1.4;\\n}\\n\\n/**\\n* This media query is a temporary fallback for browsers that do not support `@container query`.\\n* TODO: remove this media query when `@container query` is fully supported by browsers\\n* See https://github.com/GoogleChrome/lighthouse/pull/16332\\n*/\\n@media screen and (max-width: 535px) {\\n .lh-tooltip {\\n min-width: 45cqi;\\n padding: 3cqi;\\n }\\n}\\n\\n/* shrink tooltips to not be cutoff on left edge of narrow container\\n 45vw is chosen to be ~= width of the left column of metrics\\n*/\\n@container lh-container (max-width: 535px) {\\n .lh-tooltip {\\n min-width: 45cqi;\\n padding: 3cqi;\\n }\\n}\\n\\n.lh-tooltip-boundary:hover .lh-tooltip {\\n display: block;\\n animation: fadeInTooltip 250ms;\\n animation-fill-mode: forwards;\\n animation-delay: 850ms;\\n bottom: 100%;\\n z-index: 1;\\n will-change: opacity;\\n right: 0;\\n pointer-events: none;\\n}\\n\\n.lh-tooltip::before {\\n content: \"\";\\n border: solid transparent;\\n border-bottom-color: #fff;\\n border-width: 10px;\\n position: absolute;\\n bottom: -20px;\\n right: 6px;\\n transform: rotate(180deg);\\n pointer-events: none;\\n}\\n\\n@keyframes fadeInTooltip {\\n 0% { opacity: 0; }\\n 75% { opacity: 1; }\\n 100% { opacity: 1; filter: drop-shadow(1px 0px 1px #aaa) drop-shadow(0px 2px 4px hsla(206, 6%, 25%, 0.15)); pointer-events: auto; }\\n}\\n\\n/* Element screenshot */\\n.lh-element-screenshot {\\n float: left;\\n margin-right: 20px;\\n}\\n.lh-element-screenshot__content {\\n overflow: hidden;\\n min-width: 110px;\\n display: flex;\\n justify-content: center;\\n background-color: var(--report-background-color);\\n}\\n.lh-element-screenshot__image {\\n position: relative;\\n /* Set by ElementScreenshotRenderer.installFullPageScreenshotCssVariable */\\n background-image: var(--element-screenshot-url);\\n outline: 2px solid #777;\\n background-color: white;\\n background-repeat: no-repeat;\\n}\\n.lh-element-screenshot__mask {\\n position: absolute;\\n background: #555;\\n opacity: 0.8;\\n}\\n.lh-element-screenshot__element-marker {\\n position: absolute;\\n outline: 2px solid var(--color-lime-400);\\n}\\n.lh-element-screenshot__overlay {\\n position: fixed;\\n top: 0;\\n left: 0;\\n right: 0;\\n bottom: 0;\\n z-index: 2000; /* .lh-topbar is 1000 */\\n background: var(--screenshot-overlay-background);\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n cursor: zoom-out;\\n}\\n\\n.lh-element-screenshot__overlay .lh-element-screenshot {\\n margin-right: 0; /* clearing margin used in thumbnail case */\\n outline: 1px solid var(--color-gray-700);\\n}\\n\\n.lh-screenshot-overlay--enabled .lh-element-screenshot {\\n cursor: zoom-out;\\n}\\n.lh-screenshot-overlay--enabled .lh-node .lh-element-screenshot {\\n cursor: zoom-in;\\n}\\n\\n\\n.lh-meta__items {\\n --meta-icon-size: calc(var(--report-icon-size) * 0.667);\\n padding: var(--default-padding);\\n display: grid;\\n grid-template-columns: 1fr 1fr 1fr;\\n background-color: var(--env-item-background-color);\\n border-radius: 3px;\\n margin: 0 0 var(--default-padding) 0;\\n font-size: 12px;\\n column-gap: var(--default-padding);\\n color: var(--color-gray-700);\\n}\\n\\n.lh-meta__item {\\n display: block;\\n list-style-type: none;\\n position: relative;\\n padding: 0 0 0 calc(var(--meta-icon-size) + var(--default-padding) * 2);\\n cursor: unset; /* disable pointer cursor from report-icon */\\n}\\n\\n.lh-meta__item.lh-tooltip-boundary {\\n text-decoration: dotted underline var(--color-gray-500);\\n cursor: help;\\n}\\n\\n.lh-meta__item.lh-report-icon::before {\\n position: absolute;\\n left: var(--default-padding);\\n width: var(--meta-icon-size);\\n height: var(--meta-icon-size);\\n}\\n\\n.lh-meta__item.lh-report-icon:hover::before {\\n opacity: 0.7;\\n}\\n\\n.lh-meta__item .lh-tooltip {\\n color: var(--color-gray-800);\\n}\\n\\n.lh-meta__item .lh-tooltip::before {\\n right: auto; /* Set the tooltip arrow to the leftside */\\n left: 6px;\\n}\\n\\n.lh-meta__item:hover .lh-tooltip {\\n right: auto;\\n left: 6px;\\n}\\n/**\\n* This media query is a temporary fallback for browsers that do not support `@container query`.\\n* TODO: remove this media query when `@container query` is fully supported by browsers\\n* See https://github.com/GoogleChrome/lighthouse/pull/16332\\n*/\\n@media screen and (max-width: 640px) {\\n .lh-meta__items {\\n grid-template-columns: 1fr 1fr;\\n }\\n}\\n\\n/* Change the grid for narrow container */\\n@container lh-container (max-width: 640px) {\\n .lh-meta__items {\\n grid-template-columns: 1fr 1fr;\\n }\\n}\\n\\n/**\\n* This media query is a temporary fallback for browsers that do not support `@container query`.\\n* TODO: remove this media query when `@container query` is fully supported by browsers\\n* See https://github.com/GoogleChrome/lighthouse/pull/16332\\n*/\\n@media screen and (max-width: 535px) {\\n .lh-meta__items {\\n display: block;\\n }\\n}\\n\\n@container lh-container (max-width: 535px) {\\n .lh-meta__items {\\n display: block;\\n }\\n}\\n\\n/* Explodey gauge */\\n\\n.lh-exp-gauge-component {\\n margin-bottom: 10px;\\n}\\n\\n.lh-exp-gauge-component circle {\\n stroke: currentcolor;\\n r: var(--radius);\\n}\\n\\n.lh-exp-gauge-component text {\\n font-size: calc(var(--radius) * 0.2);\\n}\\n\\n.lh-exp-gauge-component .lh-exp-gauge {\\n margin: 0 auto;\\n width: 225px;\\n stroke-width: var(--stroke-width);\\n stroke-linecap: round;\\n\\n /* for better rendering perf */\\n contain: strict;\\n height: 225px;\\n will-change: transform;\\n}\\n.lh-exp-gauge-component .lh-exp-gauge--faded {\\n opacity: 0.1;\\n}\\n.lh-exp-gauge-component .lh-exp-gauge__wrapper {\\n font-family: var(--report-font-family-monospace);\\n text-align: center;\\n text-decoration: none;\\n transition: .3s;\\n}\\n.lh-exp-gauge-component .lh-exp-gauge__wrapper--pass {\\n color: var(--color-pass);\\n}\\n.lh-exp-gauge-component .lh-exp-gauge__wrapper--average {\\n color: var(--color-average);\\n}\\n.lh-exp-gauge-component .lh-exp-gauge__wrapper--fail {\\n color: var(--color-fail);\\n}\\n.lh-exp-gauge-component .state--expanded {\\n transition: color .3s;\\n}\\n.lh-exp-gauge-component .state--highlight {\\n color: var(--color-highlight);\\n}\\n.lh-exp-gauge-component .lh-exp-gauge__svg-wrapper {\\n display: flex;\\n flex-direction: column-reverse;\\n}\\n\\n.lh-exp-gauge-component .lh-exp-gauge__label {\\n fill: var(--report-text-color);\\n font-family: var(--report-font-family);\\n font-size: 12px;\\n}\\n\\n.lh-exp-gauge-component .lh-exp-gauge__cutout {\\n opacity: .999;\\n transition: opacity .3s;\\n}\\n.lh-exp-gauge-component .state--highlight .lh-exp-gauge__cutout {\\n opacity: 0;\\n}\\n\\n.lh-exp-gauge-component .lh-exp-gauge__inner {\\n color: inherit;\\n}\\n.lh-exp-gauge-component .lh-exp-gauge__base {\\n fill: currentcolor;\\n}\\n\\n\\n.lh-exp-gauge-component .lh-exp-gauge__arc {\\n fill: none;\\n transition: opacity .3s;\\n}\\n.lh-exp-gauge-component .lh-exp-gauge__arc--metric {\\n color: var(--metric-color);\\n stroke-dashoffset: var(--metric-offset);\\n opacity: 0.3;\\n}\\n.lh-exp-gauge-component .lh-exp-gauge-hovertarget {\\n color: currentcolor;\\n opacity: 0.001;\\n stroke-linecap: butt;\\n stroke-width: 24;\\n /* hack. move the hover target out of the center. ideally i tweak the r instead but that rquires considerably more math. */\\n transform: scale(1.15);\\n}\\n.lh-exp-gauge-component .lh-exp-gauge__arc--metric.lh-exp-gauge--miniarc {\\n opacity: 0;\\n stroke-dasharray: 0 calc(var(--circle-meas) * var(--radius));\\n transition: 0s .005s;\\n}\\n.lh-exp-gauge-component .state--expanded .lh-exp-gauge__arc--metric.lh-exp-gauge--miniarc {\\n opacity: .999;\\n stroke-dasharray: var(--metric-array);\\n transition: 0.3s; /* calc(.005s + var(--i)*.05s); entrace animation */\\n}\\n.lh-exp-gauge-component .state--expanded .lh-exp-gauge__inner .lh-exp-gauge__arc {\\n opacity: 0;\\n}\\n\\n\\n.lh-exp-gauge-component .lh-exp-gauge__percentage {\\n text-anchor: middle;\\n dominant-baseline: middle;\\n opacity: .999;\\n font-size: calc(var(--radius) * 0.625);\\n transition: opacity .3s ease-in;\\n}\\n.lh-exp-gauge-component .state--highlight .lh-exp-gauge__percentage {\\n opacity: 0;\\n}\\n\\n.lh-exp-gauge-component .lh-exp-gauge__wrapper--fail .lh-exp-gauge__percentage {\\n fill: var(--color-fail);\\n}\\n.lh-exp-gauge-component .lh-exp-gauge__wrapper--average .lh-exp-gauge__percentage {\\n fill: var(--color-average);\\n}\\n.lh-exp-gauge-component .lh-exp-gauge__wrapper--pass .lh-exp-gauge__percentage {\\n fill: var(--color-pass);\\n}\\n\\n.lh-exp-gauge-component .lh-cover {\\n fill: none;\\n opacity: .001;\\n pointer-events: none;\\n}\\n.lh-exp-gauge-component .state--expanded .lh-cover {\\n pointer-events: auto;\\n}\\n\\n.lh-exp-gauge-component .metric {\\n transform: scale(var(--scale-initial));\\n opacity: 0;\\n transition: transform .1s .2s ease-out, opacity .3s ease-out;\\n pointer-events: none;\\n}\\n.lh-exp-gauge-component .metric text {\\n pointer-events: none;\\n}\\n.lh-exp-gauge-component .metric__value {\\n fill: currentcolor;\\n opacity: 0;\\n transition: opacity 0.2s;\\n}\\n.lh-exp-gauge-component .state--expanded .metric {\\n transform: scale(1);\\n opacity: .999;\\n transition: transform .3s ease-out, opacity .3s ease-in, stroke-width .1s ease-out;\\n transition-delay: calc(var(--i)*.05s);\\n pointer-events: auto;\\n}\\n.lh-exp-gauge-component .state--highlight .metric {\\n opacity: .3;\\n}\\n.lh-exp-gauge-component .state--highlight .metric--highlight {\\n opacity: .999;\\n stroke-width: calc(1.5*var(--stroke-width));\\n}\\n.lh-exp-gauge-component .state--highlight .metric--highlight .metric__value {\\n opacity: 0.999;\\n}\\n\\n\\n/*\\n the initial first load peek\\n*/\\n.lh-exp-gauge-component .lh-exp-gauge__bg { /* needed for the use zindex stacking w/ transparency */\\n fill: var(--report-background-color);\\n stroke: var(--report-background-color);\\n}\\n.lh-exp-gauge-component .state--peek .metric {\\n transition-delay: 0ms;\\n animation: peek var(--peek-dur) cubic-bezier(0.46, 0.03, 0.52, 0.96);\\n animation-fill-mode: forwards;\\n}\\n.lh-exp-gauge-component .state--peek .lh-exp-gauge__inner .lh-exp-gauge__arc {\\n opacity: 1;\\n}\\n.lh-exp-gauge-component .state--peek .lh-exp-gauge__arc.lh-exp-gauge--faded {\\n opacity: 0.3; /* just a tad stronger cuz its fighting with a big solid arg */\\n}\\n/* do i need to set expanded and override this? */\\n.lh-exp-gauge-component .state--peek .lh-exp-gauge__arc--metric.lh-exp-gauge--miniarc {\\n transition: opacity 0.3s;\\n}\\n.lh-exp-gauge-component .state--peek {\\n color: unset;\\n}\\n.lh-exp-gauge-component .state--peek .metric__label {\\n display: none;\\n}\\n\\n.lh-exp-gauge-component .metric__label {\\n fill: var(--report-text-color);\\n}\\n\\n@keyframes peek {\\n /* biggest it should go is 0.92. smallest is 0.8 */\\n 0% {\\n transform: scale(0.8);\\n opacity: 0.8;\\n }\\n\\n 50% {\\n transform: scale(0.92);\\n opacity: 1;\\n }\\n\\n 100% {\\n transform: scale(0.8);\\n opacity: 0.8;\\n }\\n}\\n\\n.lh-exp-gauge-component .wrapper {\\n width: 620px;\\n}\\n\\n/*# sourceURL=report-styles.css */\\n'),t.append(n),t}(e);case\"topbar\":return function(e){let t=e.createFragment(),n=e.createElement(\"style\");n.append(\"\\n .lh-topbar {\\n position: sticky;\\n top: 0;\\n left: 0;\\n right: 0;\\n z-index: 1000;\\n display: flex;\\n align-items: center;\\n height: var(--topbar-height);\\n padding: var(--topbar-padding);\\n font-size: var(--report-font-size-secondary);\\n background-color: var(--topbar-background-color);\\n border-bottom: 1px solid var(--color-gray-200);\\n }\\n\\n .lh-topbar__logo {\\n width: var(--topbar-logo-size);\\n height: var(--topbar-logo-size);\\n user-select: none;\\n flex: none;\\n }\\n\\n .lh-topbar__url {\\n margin: var(--topbar-padding);\\n text-decoration: none;\\n color: var(--report-text-color);\\n text-overflow: ellipsis;\\n overflow: hidden;\\n white-space: nowrap;\\n }\\n\\n .lh-tools {\\n display: flex;\\n align-items: center;\\n margin-left: auto;\\n will-change: transform;\\n min-width: var(--report-icon-size);\\n }\\n .lh-tools__button {\\n width: var(--report-icon-size);\\n min-width: 24px;\\n height: var(--report-icon-size);\\n cursor: pointer;\\n margin-right: 5px;\\n /* This is actually a button element, but we want to style it like a transparent div. */\\n display: flex;\\n background: none;\\n color: inherit;\\n border: none;\\n padding: 0;\\n font: inherit;\\n }\\n .lh-tools__button svg {\\n fill: var(--tools-icon-color);\\n }\\n .lh-dark .lh-tools__button svg {\\n filter: invert(1);\\n }\\n .lh-tools__button.lh-active + .lh-tools__dropdown {\\n opacity: 1;\\n clip: rect(-1px, 194px, 270px, -3px);\\n visibility: visible;\\n }\\n .lh-tools__dropdown {\\n position: absolute;\\n background-color: var(--report-background-color);\\n border: 1px solid var(--report-border-color);\\n border-radius: 3px;\\n padding: calc(var(--default-padding) / 2) 0;\\n cursor: pointer;\\n top: 36px;\\n right: 0;\\n box-shadow: 1px 1px 3px #ccc;\\n min-width: 125px;\\n clip: rect(0, 164px, 0, 0);\\n visibility: hidden;\\n opacity: 0;\\n transition: all 200ms cubic-bezier(0,0,0.2,1);\\n }\\n .lh-tools__dropdown a {\\n color: currentColor;\\n text-decoration: none;\\n white-space: nowrap;\\n padding: 0 6px;\\n line-height: 2;\\n }\\n .lh-tools__dropdown a:hover,\\n .lh-tools__dropdown a:focus {\\n background-color: var(--color-gray-200);\\n outline: none;\\n }\\n /* save-gist option hidden in report. */\\n .lh-tools__dropdown a[data-action='save-gist'] {\\n display: none;\\n }\\n\\n .lh-locale-selector {\\n width: 100%;\\n color: var(--report-text-color);\\n background-color: var(--locale-selector-background-color);\\n padding: 2px;\\n }\\n .lh-tools-locale {\\n display: flex;\\n align-items: center;\\n flex-direction: row-reverse;\\n }\\n .lh-tools-locale__selector-wrapper {\\n transition: opacity 0.15s;\\n opacity: 0;\\n max-width: 200px;\\n }\\n .lh-button.lh-tool-locale__button {\\n height: var(--topbar-height);\\n color: var(--tools-icon-color);\\n padding: calc(var(--default-padding) / 2);\\n }\\n .lh-tool-locale__button.lh-active + .lh-tools-locale__selector-wrapper {\\n opacity: 1;\\n clip: rect(-1px, 255px, 242px, -3px);\\n visibility: visible;\\n margin: 0 4px;\\n }\\n\\n /**\\n * This media query is a temporary fallback for browsers that do not support `@container query`.\\n * TODO: remove this media query when `@container query` is fully supported by browsers\\n * See https://github.com/GoogleChrome/lighthouse/pull/16332\\n */\\n @media screen and (max-width: 964px) {\\n .lh-tools__dropdown {\\n right: 0;\\n left: initial;\\n }\\n }\\n\\n @container lh-container (max-width: 964px) {\\n .lh-tools__dropdown {\\n right: 0;\\n left: initial;\\n }\\n }\\n\\n @media print {\\n .lh-topbar {\\n position: static;\\n margin-left: 0;\\n }\\n\\n .lh-tools__dropdown {\\n display: none;\\n }\\n }\\n \"),t.append(n);let r=e.createElement(\"div\",\"lh-topbar\"),i=e.createElementNS(\"http://www.w3.org/2000/svg\",\"svg\",\"lh-topbar__logo\");i.setAttribute(\"role\",\"img\"),i.setAttribute(\"title\",\"Lighthouse logo\"),i.setAttribute(\"fill\",\"none\"),i.setAttribute(\"xmlns\",\"http://www.w3.org/2000/svg\"),i.setAttribute(\"viewBox\",\"0 0 48 48\");let a=e.createElementNS(\"http://www.w3.org/2000/svg\",\"path\");a.setAttribute(\"d\",\"m14 7 10-7 10 7v10h5v7h-5l5 24H9l5-24H9v-7h5V7Z\"),a.setAttribute(\"fill\",\"#F63\");let o=e.createElementNS(\"http://www.w3.org/2000/svg\",\"path\");o.setAttribute(\"d\",\"M31.561 24H14l-1.689 8.105L31.561 24ZM18.983 48H9l1.022-4.907L35.723 32.27l1.663 7.98L18.983 48Z\"),o.setAttribute(\"fill\",\"#FFA385\");let l=e.createElementNS(\"http://www.w3.org/2000/svg\",\"path\");l.setAttribute(\"fill\",\"#FF3\"),l.setAttribute(\"d\",\"M20.5 10h7v7h-7z\"),i.append(\" \",a,\" \",o,\" \",l,\" \");let s=e.createElement(\"a\",\"lh-topbar__url\");s.setAttribute(\"href\",\"\"),s.setAttribute(\"target\",\"_blank\"),s.setAttribute(\"rel\",\"noopener\");let c=e.createElement(\"div\",\"lh-tools\"),d=e.createElement(\"div\",\"lh-tools-locale lh-hidden\"),h=e.createElement(\"button\",\"lh-button lh-tool-locale__button\");h.setAttribute(\"id\",\"lh-button__swap-locales\"),h.setAttribute(\"title\",\"Show Language Picker\"),h.setAttribute(\"aria-label\",\"Toggle language picker\"),h.setAttribute(\"aria-haspopup\",\"menu\"),h.setAttribute(\"aria-expanded\",\"false\"),h.setAttribute(\"aria-controls\",\"lh-tools-locale__selector-wrapper\");let p=e.createElementNS(\"http://www.w3.org/2000/svg\",\"svg\");p.setAttribute(\"width\",\"20px\"),p.setAttribute(\"height\",\"20px\"),p.setAttribute(\"viewBox\",\"0 0 24 24\"),p.setAttribute(\"fill\",\"currentColor\");let g=e.createElementNS(\"http://www.w3.org/2000/svg\",\"path\");g.setAttribute(\"d\",\"M0 0h24v24H0V0z\"),g.setAttribute(\"fill\",\"none\");let u=e.createElementNS(\"http://www.w3.org/2000/svg\",\"path\");u.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\"),p.append(g,u),h.append(\" \",p,\" \");let m=e.createElement(\"div\",\"lh-tools-locale__selector-wrapper\");m.setAttribute(\"id\",\"lh-tools-locale__selector-wrapper\"),m.setAttribute(\"role\",\"menu\"),m.setAttribute(\"aria-labelledby\",\"lh-button__swap-locales\"),m.setAttribute(\"aria-hidden\",\"true\"),m.append(\" \",\" \"),d.append(\" \",h,\" \",m,\" \");let f=e.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 v=e.createElementNS(\"http://www.w3.org/2000/svg\",\"svg\");v.setAttribute(\"width\",\"100%\"),v.setAttribute(\"height\",\"100%\"),v.setAttribute(\"viewBox\",\"0 0 24 24\");let b=e.createElementNS(\"http://www.w3.org/2000/svg\",\"path\");b.setAttribute(\"d\",\"M0 0h24v24H0z\"),b.setAttribute(\"fill\",\"none\");let _=e.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\"),v.append(\" \",b,\" \",_,\" \"),f.append(\" \",v,\" \");let w=e.createElement(\"div\",\"lh-tools__dropdown\");w.setAttribute(\"id\",\"lh-tools-dropdown\"),w.setAttribute(\"role\",\"menu\"),w.setAttribute(\"aria-labelledby\",\"lh-tools-button\");let y=e.createElement(\"a\",\"lh-report-icon lh-report-icon--print\");y.setAttribute(\"role\",\"menuitem\"),y.setAttribute(\"tabindex\",\"-1\"),y.setAttribute(\"href\",\"#\"),y.setAttribute(\"data-i18n\",\"dropdownPrintSummary\"),y.setAttribute(\"data-action\",\"print-summary\");let x=e.createElement(\"a\",\"lh-report-icon lh-report-icon--print\");x.setAttribute(\"role\",\"menuitem\"),x.setAttribute(\"tabindex\",\"-1\"),x.setAttribute(\"href\",\"#\"),x.setAttribute(\"data-i18n\",\"dropdownPrintExpanded\"),x.setAttribute(\"data-action\",\"print-expanded\");let k=e.createElement(\"a\",\"lh-report-icon lh-report-icon--copy\");k.setAttribute(\"role\",\"menuitem\"),k.setAttribute(\"tabindex\",\"-1\"),k.setAttribute(\"href\",\"#\"),k.setAttribute(\"data-i18n\",\"dropdownCopyJSON\"),k.setAttribute(\"data-action\",\"copy\");let E=e.createElement(\"a\",\"lh-report-icon lh-report-icon--download lh-hidden\");E.setAttribute(\"role\",\"menuitem\"),E.setAttribute(\"tabindex\",\"-1\"),E.setAttribute(\"href\",\"#\"),E.setAttribute(\"data-i18n\",\"dropdownSaveHTML\"),E.setAttribute(\"data-action\",\"save-html\");let L=e.createElement(\"a\",\"lh-report-icon lh-report-icon--download\");L.setAttribute(\"role\",\"menuitem\"),L.setAttribute(\"tabindex\",\"-1\"),L.setAttribute(\"href\",\"#\"),L.setAttribute(\"data-i18n\",\"dropdownSaveJSON\"),L.setAttribute(\"data-action\",\"save-json\");let C=e.createElement(\"a\",\"lh-report-icon lh-report-icon--open\");C.setAttribute(\"role\",\"menuitem\"),C.setAttribute(\"tabindex\",\"-1\"),C.setAttribute(\"href\",\"#\"),C.setAttribute(\"data-i18n\",\"dropdownViewer\"),C.setAttribute(\"data-action\",\"open-viewer\");let A=e.createElement(\"a\",\"lh-report-icon lh-report-icon--open\");A.setAttribute(\"role\",\"menuitem\"),A.setAttribute(\"tabindex\",\"-1\"),A.setAttribute(\"href\",\"#\"),A.setAttribute(\"data-i18n\",\"dropdownSaveGist\"),A.setAttribute(\"data-action\",\"save-gist\");let S=e.createElement(\"a\",\"lh-report-icon lh-report-icon--open lh-hidden\");S.setAttribute(\"role\",\"menuitem\"),S.setAttribute(\"tabindex\",\"-1\"),S.setAttribute(\"href\",\"#\"),S.setAttribute(\"data-i18n\",\"dropdownViewUnthrottledTrace\"),S.setAttribute(\"data-action\",\"view-unthrottled-trace\");let z=e.createElement(\"a\",\"lh-report-icon lh-report-icon--dark\");return z.setAttribute(\"role\",\"menuitem\"),z.setAttribute(\"tabindex\",\"-1\"),z.setAttribute(\"href\",\"#\"),z.setAttribute(\"data-i18n\",\"dropdownDarkTheme\"),z.setAttribute(\"data-action\",\"toggle-dark\"),w.append(\" \",y,\" \",x,\" \",k,\" \",\" \",E,\" \",L,\" \",C,\" \",A,\" \",\" \",S,\" \",z,\" \"),c.append(\" \",d,\" \",f,\" \",w,\" \"),r.append(\" \",\" \",i,\" \",s,\" \",c,\" \"),t.append(r),t}(e);case\"warningsToplevel\":return function(e){let t=e.createFragment(),n=e.createElement(\"div\",\"lh-warnings lh-warnings--toplevel\"),r=e.createElement(\"p\",\"lh-warnings__msg\"),i=e.createElement(\"ul\");return n.append(\" \",r,\" \",i,\" \"),t.append(n),t}(e)}throw new Error(\"unexpected component: \"+t)}(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 i.splitMarkdownLink(e)){let e=r.text.includes(\"`\")?this.convertMarkdownCodeSnippets(r.text):r.text;if(!r.isLink){n.append(e);continue}let i=new URL(r.linkHref);([\"https://developers.google.com\",\"https://web.dev\",\"https://developer.chrome.com\"].includes(i.origin)||t.alwaysAppendUtmSource)&&(i.searchParams.set(\"utm_source\",\"lighthouse\"),i.searchParams.set(\"utm_medium\",this._lighthouseChannel));let a=this.createElement(\"a\");a.rel=\"noopener\",a.target=\"_blank\",a.append(e),this.safelySetHref(a,i.href),n.append(a)}return n}safelySetHref(e,t){if((t=t||\"\").startsWith(\"#\"))return void(e.href=t);let n;try{n=new URL(t)}catch{}n&&[\"https:\",\"http:\"].includes(n.protocol)&&(e.href=n.href)}safelySetBlobHref(e,t){if(\"text/html\"!==t.type&&\"application/json\"!==t.type)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 i.splitMarkdownCodeSpans(e))if(n.isCode){let e=this.createElement(\"code\");e.textContent=n.text,t.append(e)}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=this.rootEl??this._document){let n=this.maybeFind(e,t);if(null===n)throw new Error(`query ${e} not found`);return n}maybeFind(e,t=this.rootEl??this._document){return t.querySelector(e)}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)}},o=0,l=class e{static i18n=null;static strings={};static reportJson=null;static apply(t){e.strings={...h,...t.providedStrings},e.i18n=t.i18n,e.reportJson=t.reportJson}static getUniqueSuffix(){return o++}static resetUniqueSuffix(){o=0}},s=\"data:image/jpeg;base64,\";var c=i.RATINGS,d=class e{static prepareReportResult(t){let n=JSON.parse(JSON.stringify(t));!function(e){e.configSettings.locale||(e.configSettings.locale=\"en\"),e.configSettings.formFactor||(e.configSettings.formFactor=e.configSettings.emulatedFormFactor),e.finalDisplayedUrl=i.getFinalDisplayedUrl(e),e.mainDocumentUrl=i.getMainDocumentUrl(e);for(let t of Object.values(e.audits))if((\"not_applicable\"===t.scoreDisplayMode||\"not-applicable\"===t.scoreDisplayMode)&&(t.scoreDisplayMode=\"notApplicable\"),\"informative\"===t.scoreDisplayMode&&(t.score=1),t.details){if((void 0===t.details.type||\"diagnostic\"===t.details.type)&&(t.details.type=\"debugdata\"),\"filmstrip\"===t.details.type)for(let e of t.details.items)e.data.startsWith(s)||(e.data=s+e.data);if(\"table\"===t.details.type)for(let e of t.details.headings){let{itemType:t,text:n}=e;void 0!==t&&(e.valueType=t,delete e.itemType),void 0!==n&&(e.label=n,delete e.text);let r=e.subItemsHeading?.itemType;e.subItemsHeading&&void 0!==r&&(e.subItemsHeading.valueType=r,delete e.subItemsHeading.itemType)}if(\"third-party-summary\"===t.id&&(\"opportunity\"===t.details.type||\"table\"===t.details.type)){let{headings:e,items:n}=t.details;if(\"link\"===e[0].valueType){e[0].valueType=\"text\";for(let e of n)\"object\"==typeof e.entity&&\"link\"===e.entity.type&&(e.entity=e.entity.text);t.details.isEntityGrouped=!0}}}let[t]=e.lighthouseVersion.split(\".\").map(Number),n=e.categories.performance;if(n)if(t<9){e.categoryGroups||(e.categoryGroups={}),e.categoryGroups.hidden={title:\"\"};for(let e of n.auditRefs)e.group?\"load-opportunities\"===e.group&&(e.group=\"diagnostics\"):e.group=\"hidden\"}else if(t<12)for(let e of n.auditRefs)e.group||(e.group=\"diagnostics\");if(t<12&&n){let t=new Map;for(let e of n.auditRefs){let n=e.relevantAudits;if(n&&e.acronym)for(let r of n){let n=t.get(r)||[];n.push(e.acronym),t.set(r,n)}}for(let[n,r]of t){if(!r.length)continue;let t=e.audits[n];if(t&&!t.metricSavings){t.metricSavings={};for(let e of r)t.metricSavings[e]=0}}}if(e.environment||(e.environment={benchmarkIndex:0,networkUserAgent:e.userAgent,hostUserAgent:e.userAgent}),e.configSettings.screenEmulation||(e.configSettings.screenEmulation={width:-1,height:-1,deviceScaleFactor:-1,mobile:/mobile/i.test(e.environment.hostUserAgent),disabled:!1}),e.i18n||(e.i18n={}),e.audits[\"full-page-screenshot\"]){let t=e.audits[\"full-page-screenshot\"].details;e.fullPageScreenshot=t?{screenshot:t.screenshot,nodes:t.nodes}:null,delete e.audits[\"full-page-screenshot\"]}}(n);for(let t of Object.values(n.audits))t.details&&(\"opportunity\"===t.details.type||\"table\"===t.details.type)&&!t.details.isEntityGrouped&&n.entities&&e.classifyEntities(n.entities,t.details);if(\"object\"!=typeof n.categories)throw new Error(\"No categories provided.\");let r=new Map;for(let e of Object.values(n.categories))e.auditRefs.forEach((e=>{e.acronym&&r.set(e.acronym,e)})),e.auditRefs.forEach((e=>{let t=n.audits[e.id];e.result=t;let i=Object.keys(e.result.metricSavings||{});if(i.length){e.relevantMetrics=[];for(let t of i){let n=r.get(t);n&&e.relevantMetrics.push(n)}}if(n.stackPacks){let t=[e.id,...e.result.replacesAudits??[]];n.stackPacks.forEach((n=>{let r=t.find((e=>n.descriptions[e]));r&&n.descriptions[r]&&(e.stackPacks=e.stackPacks||[],e.stackPacks.push({title:n.title,iconDataURL:n.iconDataURL,description:n.descriptions[r]}))}))}}));return n}static getUrlLocatorFn(e){let t=e.find((e=>\"url\"===e.valueType))?.key;if(t&&\"string\"==typeof t)return e=>{let n=e[t];if(\"string\"==typeof n)return n};let n=e.find((e=>\"source-location\"===e.valueType))?.key;return n?e=>{let t=e[n];if(\"object\"==typeof t&&\"source-location\"===t.type)return t.url}:void 0}static classifyEntities(t,n){let{items:r,headings:a}=n;if(!r.length||r.some((e=>e.entity)))return;let o=e.getUrlLocatorFn(a);if(o)for(let e of r){let n=o(e);if(!n)continue;let r=\"\";try{r=i.parseURL(n).origin}catch{}if(!r)continue;let a=t.find((e=>e.origins.includes(r)));a&&(e.entity=a.name)}}static getTableItemSortComparator(e){return(t,n)=>{for(let r of e){let e=t[r],i=n[r];if((typeof e!=typeof i||![\"number\",\"string\"].includes(typeof e))&&console.warn(`Warning: Attempting to sort unsupported value type: ${r}.`),\"number\"==typeof e&&\"number\"==typeof i&&e!==i)return i-e;if(\"string\"==typeof e&&\"string\"==typeof i&&e!==i)return e.localeCompare(i)}return 0}}static getEmulationDescriptions(e){let t,n,r,i=e.throttling,a=l.i18n,o=l.strings;switch(e.throttlingMethod){case\"provided\":r=n=t=o.throttlingProvided;break;case\"devtools\":{let{cpuSlowdownMultiplier:e,requestLatencyMs:l}=i;t=`${a.formatNumber(e)}x slowdown (DevTools)`,n=`${a.formatMilliseconds(l)} HTTP RTT, ${a.formatKbps(i.downloadThroughputKbps)} down, ${a.formatKbps(i.uploadThroughputKbps)} up (DevTools)`,r=562.5===l&&i.downloadThroughputKbps===1638.4*.9&&675===i.uploadThroughputKbps?o.runtimeSlow4g:o.runtimeCustom;break}case\"simulate\":{let{cpuSlowdownMultiplier:e,rttMs:l,throughputKbps:s}=i;t=`${a.formatNumber(e)}x slowdown (Simulated)`,n=`${a.formatMilliseconds(l)} TCP RTT, ${a.formatKbps(s)} throughput (Simulated)`,r=150===l&&1638.4===s?o.runtimeSlow4g:o.runtimeCustom;break}default:r=t=n=o.runtimeUnknown}let s=\"devtools\"!==e.channel&&e.screenEmulation.disabled,c=\"devtools\"===e.channel?\"mobile\"===e.formFactor:e.screenEmulation.mobile,d=o.runtimeMobileEmulation;return s?d=o.runtimeNoEmulation:c||(d=o.runtimeDesktopEmulation),{deviceEmulation:d,screenEmulation:s?void 0:`${e.screenEmulation.width}x${e.screenEmulation.height}, DPR ${e.screenEmulation.deviceScaleFactor}`,cpuThrottling:t,networkThrottling:n,summary:r}}static showAsPassed(e){switch(e.scoreDisplayMode){case\"manual\":case\"notApplicable\":return!0;case\"error\":case\"informative\":return!1;default:return Number(e.score)>=c.PASS.minScore}}static calculateRating(e,t){if(\"manual\"===t||\"notApplicable\"===t)return c.PASS.label;if(\"error\"===t)return c.ERROR.label;if(null===e)return c.FAIL.label;let n=c.FAIL.label;return e>=c.PASS.minScore?n=c.PASS.label:e>=c.AVERAGE.minScore&&(n=c.AVERAGE.label),n}static calculateCategoryFraction(t){let n=0,r=0,i=0,a=0;for(let o of t.auditRefs){let t=e.showAsPassed(o.result);if(\"hidden\"!==o.group&&\"manual\"!==o.result.scoreDisplayMode&&\"notApplicable\"!==o.result.scoreDisplayMode){if(\"informative\"===o.result.scoreDisplayMode){t||++i;continue}++n,a+=o.weight,t&&r++}}return{numPassed:r,numPassableAudits:n,numInformative:i,totalWeight:a}}static isPluginCategory(e){return e.startsWith(\"lighthouse-plugin-\")}static shouldDisplayAsFraction(e,t){return\"timespan\"===e||\"snapshot\"===e||\"fraction\"===t?.categoryScoreDisplayMode}},h={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 session\",runtimeAnalysisWindow:\"Initial page load\",runtimeAnalysisWindowTimespan:\"User interactions timespan\",runtimeAnalysisWindowSnapshot:\"Point-in-time snapshot\",runtimeSingleLoadTooltip:\"This data is taken from a single page session, 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\",unscoredLabel:\"Unscored\",unscoredTitle:\"This audit does not contribute to the overall category score.\"},p=class{constructor(e,t){this.dom=e,this.detailsRenderer=t}get _clumpTitles(){return{warning:l.strings.warningAuditsGroupTitle,manual:l.strings.manualAuditsGroupTitle,passed:l.strings.passedAuditsGroupTitle,notApplicable:l.strings.notApplicableAuditsGroupTitle}}renderAudit(e){let t=l.strings,n=this.dom.createComponent(\"audit\"),r=this.dom.find(\"div.lh-audit\",n);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 o=this.dom.find(\".lh-audit__description\",r);o.append(this.dom.convertMarkdownLinkSnippets(e.result.description));for(let t of e.relevantMetrics||[]){let e=this.dom.createChildOf(o,\"span\",\"lh-audit__adorn\");e.title=`Relevant to ${t.result.title}`,e.textContent=t.acronym||t.id}if(0===e.weight){let e=this.dom.createChildOf(o,\"span\",\"lh-audit__adorn\");e.title=l.strings.unscoredTitle,e.textContent=l.strings.unscoredLabel}e.stackPacks&&e.stackPacks.forEach((e=>{let t=this.dom.createElement(\"img\",\"lh-audit__stackpack__img\");t.src=e.iconDataURL,t.alt=e.title;let n=this.dom.convertMarkdownLinkSnippets(e.description,{alwaysAppendUtmSource:!0}),i=this.dom.createElement(\"div\",\"lh-audit__stackpack\");i.append(t,n),this.dom.find(\".lh-audit__stackpacks\",r).append(i)}));let s=this.dom.find(\"details\",r);if(e.result.details){let t=this.detailsRenderer.render(e.result.details);t&&(t.classList.add(\"lh-details\"),s.append(t))}if(this.dom.find(\".lh-chevron-container\",r).append(this._createChevron()),this._setRatingClass(r,e.result.score,i),\"error\"===e.result.scoreDisplayMode){r.classList.add(\"lh-audit--error\");let n=this.dom.find(\".lh-audit__display-text\",r);n.textContent=t.errorLabel,n.classList.add(\"lh-tooltip-boundary\"),this.dom.createChildOf(n,\"div\",\"lh-tooltip lh-tooltip--error\").textContent=e.result.errorMessage||t.errorMissingAuditInfo}else if(e.result.explanation){this.dom.createChildOf(a,\"div\",\"lh-audit-explanation\").textContent=e.result.explanation}let c=e.result.warnings;if(!c||0===c.length)return r;let d=this.dom.find(\"summary\",s),h=this.dom.createChildOf(d,\"div\",\"lh-warnings\");if(this.dom.createChildOf(h,\"span\").textContent=t.warningHeader,1===c.length)h.append(this.dom.createTextNode(c.join(\"\")));else{let e=this.dom.createChildOf(h,\"ul\");for(let t of c){this.dom.createChildOf(e,\"li\").textContent=t}}return r}injectFinalScreenshot(e,t,n){let r=t[\"final-screenshot\"];if(!r||\"error\"===r.scoreDisplayMode||!r.details||\"screenshot\"!==r.details.type)return null;let i=this.dom.createElement(\"img\",\"lh-final-ss-image\"),a=r.details.data;i.src=a,i.alt=r.title;let o=this.dom.find(\".lh-category .lh-category-header\",e),l=this.dom.createElement(\"div\",\"lh-category-headercol\"),s=this.dom.createElement(\"div\",\"lh-category-headercol lh-category-headercol--separator\"),c=this.dom.createElement(\"div\",\"lh-category-headercol\");l.append(...o.childNodes),l.append(n),c.append(i),o.append(l,s,c),o.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=d.calculateRating(t,n);return e.classList.add(`lh-audit--${n.toLowerCase()}`),\"informative\"!==n&&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 t=this.dom.convertMarkdownLinkSnippets(e.description);this.dom.find(\".lh-category-header__description\",r).append(t)}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 t of e){let e=t.group||r,i=n.get(e)||[];i.push(t),n.set(e,i)}let i=[];for(let[e,a]of n){if(e===r){for(let e of a)i.push(this.renderAudit(e));continue}let n=t[e],[o,l]=this.renderAuditGroup(n);for(let e of a)o.insertBefore(this.renderAudit(e),l);o.classList.add(`lh-audit-group--${e}`),i.push(o)}return i}renderUnexpandableClump(e,t){let n=this.dom.createElement(\"div\");return this._renderGroupedAudits(e,t).forEach((e=>n.append(e))),n}renderClump(e,{auditRefsOrEls:t,description:n,openByDefault:r}){let i=this.dom.createComponent(\"clump\"),a=this.dom.find(\".lh-clump\",i);r&&a.setAttribute(\"open\",\"\");let o=this.dom.find(\".lh-audit-group__header\",a),s=this._clumpTitles[e];this.dom.find(\".lh-audit-group__title\",o).textContent=s,this.dom.find(\".lh-audit-group__itemcount\",a).textContent=`(${t.length})`;let c=t.map((e=>e instanceof HTMLElement?e:this.renderAudit(e)));a.append(...c);let d=this.dom.find(\".lh-audit-group\",i);if(n){let e=this.dom.convertMarkdownLinkSnippets(n);e.classList.add(\"lh-audit-group__description\",\"lh-audit-group__footer\"),d.append(e)}return this.dom.find(\".lh-clump-toggletext--show\",d).textContent=l.strings.show,this.dom.find(\".lh-clump-toggletext--hide\",d).textContent=l.strings.hide,a.classList.add(`lh-clump--${e.toLowerCase()}`),d}renderCategoryScore(e,t,n){let r;if(r=n&&d.shouldDisplayAsFraction(n.gatherMode,e)?this.renderCategoryFraction(e):this.renderScoreGauge(e,t),n?.omitLabel&&this.dom.find(\".lh-gauge__label,.lh-fraction__label\",r).remove(),n?.onPageAnchorRendered){let e=this.dom.find(\"a\",r);n.onPageAnchorRendered(e)}return r}renderScoreGauge(e,t){let n=this.dom.createComponent(\"gauge\"),r=this.dom.find(\"a.lh-gauge__wrapper\",n);d.isPluginCategory(e.id)&&r.classList.add(\"lh-gauge__wrapper--plugin\");let i=Number(e.score),a=this.dom.find(\".lh-gauge\",n),o=this.dom.find(\"circle.lh-gauge-arc\",a);o&&this._setGaugeArc(o,i);let s=Math.round(100*i),c=this.dom.find(\"div.lh-gauge__percentage\",n);return c.textContent=s.toString(),null===e.score&&(c.classList.add(\"lh-gauge--error\"),c.textContent=\"\",c.title=l.strings.errorLabel),0===e.auditRefs.length||this.hasApplicableAudits(e)?r.classList.add(`lh-gauge__wrapper--${d.calculateRating(e.score)}`):(r.classList.add(\"lh-gauge__wrapper--not-applicable\"),c.textContent=\"-\",c.title=l.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}=d.calculateCategoryFraction(e),o=r/i,l=this.dom.find(\".lh-fraction__content\",t),s=this.dom.createElement(\"span\");s.textContent=`${r}/${i}`,l.append(s);let c=d.calculateRating(o);return 0===a&&(c=\"null\"),n.classList.add(`lh-fraction__wrapper--${c}`),this.dom.find(\".lh-fraction__label\",t).textContent=e.title,t}hasApplicableAudits(e){return e.auditRefs.some((e=>\"notApplicable\"!==e.result.scoreDisplayMode))}_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(${360*i-90}deg)`;let a=t*n-r/2;0===t&&(e.style.opacity=\"0\"),1===t&&(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\"manual\"===t||\"notApplicable\"===t?t:d.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 t of e.auditRefs){if(\"hidden\"===t.group)continue;let e=this._getClumpIdForAuditRef(t),n=i.get(e);n.push(t),i.set(e,n)}for(let e of i.values())e.sort(((e,t)=>t.weight-e.weight));let a=i.get(\"failed\")?.length;for(let[n,o]of i){if(0===o.length)continue;if(\"failed\"===n){let e=this.renderUnexpandableClump(o,t);e.classList.add(\"lh-clump--failed\"),r.append(e);continue}let i=\"manual\"===n?e.manualDescription:void 0,l=\"warning\"===n||\"manual\"===n&&0===a,s=this.renderClump(n,{auditRefsOrEls:o,description:i,openByDefault:l});r.append(s)}return r}},g=class{static createSegment(e,t,n,r){let i=e[t],a=Object.keys(e),o=a.indexOf(t)===a.length-1,l=!!i.children&&Object.keys(i.children).length>0,s=Array.isArray(n)?n.slice(0):[];return typeof r<\"u\"&&s.push(!r),{node:i,isLastChild:o,hasChildren:l,treeMarkers:s}}static createChainNode(e,t,n){let r,i,a,o,s,c=e.createComponent(\"crcChain\");\"request\"in t.node?(i=t.node.request.transferSize,a=t.node.request.url,r=1e3*(t.node.request.endTime-t.node.request.startTime),o=!1):(i=t.node.transferSize,a=t.node.url,r=t.node.navStartToEndTime,o=!0,s=t.node.isLongest);let d=e.find(\".lh-crc-node\",c);d.setAttribute(\"title\",a),s&&d.classList.add(\"lh-crc-node__longest\");let h=e.find(\".lh-crc-node__tree-marker\",c);t.treeMarkers.forEach((t=>{let n=t?\"lh-tree-marker lh-vert\":\"lh-tree-marker\";h.append(e.createElement(\"span\",n),e.createElement(\"span\",\"lh-tree-marker\"))}));let p=t.isLastChild?\"lh-tree-marker lh-up-right\":\"lh-tree-marker lh-vert-right\",g=t.hasChildren?\"lh-tree-marker lh-horiz-down\":\"lh-tree-marker lh-right\";h.append(e.createElement(\"span\",p),e.createElement(\"span\",\"lh-tree-marker lh-right\"),e.createElement(\"span\",g));let u=n.renderTextURL(a),m=e.find(\".lh-crc-node__tree-value\",c);if(m.append(u),!t.hasChildren||o){let t=e.createElement(\"span\",\"lh-crc-node__chain-duration\");t.textContent=\" - \"+l.i18n.formatMilliseconds(r)+\", \";let n=e.createElement(\"span\",\"lh-crc-node__chain-size\");n.textContent=l.i18n.formatBytesToKiB(i,.01),m.append(t,n)}return c}static buildTree(e,t,n,r){if(n.append(u.createChainNode(e,t,r)),t.node.children)for(let i of Object.keys(t.node.children)){let a=u.createSegment(t.node.children,i,t.treeMarkers,t.isLastChild);u.buildTree(e,a,n,r)}}static render(e,t,n){let r=e.createComponent(\"crc\"),i=e.find(\".lh-crc\",r);e.find(\".lh-crc-initial-nav\",r).textContent=l.strings.crcInitialNavigation,e.find(\".lh-crc__longest_duration_label\",r).textContent=l.strings.crcLongestDurationLabel,e.find(\".lh-crc__longest_duration\",r).textContent=l.i18n.formatMilliseconds(t.longestChain.duration);let a=t.chains;for(let t of Object.keys(a)){let r=u.createSegment(a,t);u.buildTree(e,r,i,n)}return e.find(\".lh-crc-container\",r)}},u=g;function m(e,t,n){return e<t?t:e>n?n:e}var f=class e{static getScreenshotPositions(e,t,n){let r=function(e){return{x:e.left+e.width/2,y:e.top+e.height/2}}(e),i=m(r.x-t.width/2,0,n.width-t.width),a=m(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),o=`clip-${l.getUniqueSuffix()}`;a.id=o,t.style.clipPath=`url(#${o})`;let s=n.top/i.height,c=s+r.height/i.height,d=n.left/i.width,h=d+r.width/i.width,p=[`0,0 1,0 1,${s} 0,${s}`,`0,${c} 1,${c} 1,1 0,1`,`0,${s} ${d},${s} ${d},${c} 0,${c}`,`${h},${s} 1,${s} 1,${c} ${h},${c}`];for(let t of p){let n=e.createElementNS(\"http://www.w3.org/2000/svg\",\"polygon\");n.setAttribute(\"points\",t),a.append(n)}}static installFullPageScreenshot(e,t){e.style.setProperty(\"--element-screenshot-url\",`url('${t.data}')`)}static installOverlayFeature(t){let{dom:n,rootEl:r,overlayContainerEl:i,fullPageScreenshot:a}=t,o=\"lh-screenshot-overlay--enabled\";r.classList.contains(o)||(r.classList.add(o),r.addEventListener(\"click\",(t=>{let r=t.target;if(!r)return;let o=r.closest(\".lh-node > .lh-element-screenshot\");if(!o)return;let l=n.createElement(\"div\",\"lh-element-screenshot__overlay\");i.append(l);let s={width:.95*l.clientWidth,height:.8*l.clientHeight},c={width:Number(o.dataset.rectWidth),height:Number(o.dataset.rectHeight),left:Number(o.dataset.rectLeft),right:Number(o.dataset.rectLeft)+Number(o.dataset.rectWidth),top:Number(o.dataset.rectTop),bottom:Number(o.dataset.rectTop)+Number(o.dataset.rectHeight)},d=e.render(n,a.screenshot,c,s);d?(l.append(d),l.addEventListener(\"click\",(()=>l.remove()))):l.remove()})))}static _computeZoomFactor(e,t){let n={x:t.width/e.width,y:t.height/e.height},r=.75*Math.min(n.x,n.y);return Math.min(1,r)}static render(t,n,r,i){if(!function(e,t){return t.left<=e.width&&0<=t.right&&t.top<=e.height&&0<=t.bottom}(n,r))return null;let a=t.createComponent(\"elementScreenshot\"),o=t.find(\"div.lh-element-screenshot\",a);o.dataset.rectWidth=r.width.toString(),o.dataset.rectHeight=r.height.toString(),o.dataset.rectLeft=r.left.toString(),o.dataset.rectTop=r.top.toString();let l=this._computeZoomFactor(r,i),s={width:i.width/l,height:i.height/l};s.width=Math.min(n.width,s.width),s.height=Math.min(n.height,s.height);let c=s.width*l,d=s.height*l,h=e.getScreenshotPositions(r,s,{width:n.width,height:n.height}),p=t.find(\"div.lh-element-screenshot__image\",o);p.style.width=c+\"px\",p.style.height=d+\"px\",p.style.backgroundPositionY=-h.screenshot.top*l+\"px\",p.style.backgroundPositionX=-h.screenshot.left*l+\"px\",p.style.backgroundSize=`${n.width*l}px ${n.height*l}px`;let g=t.find(\"div.lh-element-screenshot__element-marker\",o);g.style.width=r.width*l+\"px\",g.style.height=r.height*l+\"px\",g.style.left=h.clip.left*l+\"px\",g.style.top=h.clip.top*l+\"px\";let u=t.find(\"div.lh-element-screenshot__mask\",o);return u.style.width=c+\"px\",u.style.height=d+\"px\",e.renderClipPathInScreenshot(t,u,h.clip,r,s),o}},v=[\"http://\",\"https://\",\"data:\"],b=[\"bytes\",\"numeric\",\"ms\",\"timespanMs\"],_=class{constructor(e){\"en-XA\"===e&&(e=\"de\"),this._locale=e,this._cachedNumberFormatters=new Map}_formatNumberWithGranularity(e,t,n={}){if(void 0!==t){let r=-Math.log10(t);Number.isInteger(r)||(console.warn(`granularity of ${t} is invalid. Using 1 instead`),t=1),t<1&&((n={...n}).minimumFractionDigits=n.maximumFractionDigits=Math.ceil(r)),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(\" \",\"\xA0\")}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)+\"\xA0KiB\"}formatBytesToMiB(e,t=void 0){return this._formatNumberWithGranularity(e/1048576,t)+\"\xA0MiB\"}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,n={month:\"short\",day:\"numeric\",year:\"numeric\",hour:\"numeric\",minute:\"numeric\",timeZoneName:\"short\"};try{t=new Intl.DateTimeFormat(this._locale,n)}catch{n.timeZone=\"UTC\",t=new Intl.DateTimeFormat(this._locale,n)}return t.format(new Date(e))}formatDuration(e){let t=e/1e3;if(0===Math.round(t))return\"None\";let n=[],r={day:86400,hour:3600,minute:60,second:1};return Object.keys(r).forEach((e=>{let i=r[e],a=Math.floor(t/i);if(a>0){t-=a*i;let r=this._formatNumberWithGranularity(a,1,{style:\"unit\",unit:e,unitDisplay:\"narrow\"});n.push(r)}})),n.join(\" \")}};function w(e,t,n){let r=e.find(\"div.lh-exp-gauge__wrapper\",t);r.className=\"\",r.classList.add(\"lh-exp-gauge__wrapper\",`lh-exp-gauge__wrapper--${d.calculateRating(n.score)}`),function(e,t,n){let r=Number(n.score),{radiusInner:i,radiusOuter:a,circumferenceInner:o,circumferenceOuter:l,getArcLength:s,getMetricArcLength:c,endDiffInner:h,endDiffOuter:p,strokeWidth:g,strokeGap:u}=function(e,t,n){n=n||e/32;let r=e/n,i=.5*n,a=r+i+n,o=2*Math.PI*r,l=Math.acos(1-.5*Math.pow(.5*n/r,2))*r,s=2*Math.PI*a,c=Math.acos(1-.5*Math.pow(.5*n/a,2))*a;return{radiusInner:r,radiusOuter:a,circumferenceInner:o,circumferenceOuter:s,getArcLength:()=>Math.max(0,Number(t*o)),getMetricArcLength:(e,t=!1)=>{let n=t?0:2*c;return Math.max(0,Number(e*s-i-n))},endDiffInner:l,endDiffOuter:c,strokeWidth:n,strokeGap:i}}(128,r),m=e.find(\"svg.lh-exp-gauge\",t);e.find(\".lh-exp-gauge__label\",m).textContent=n.title,m.setAttribute(\"viewBox\",[-64,-32,128,64].join(\" \")),m.style.setProperty(\"--stroke-width\",`${g}px`),m.style.setProperty(\"--circle-meas\",(2*Math.PI).toFixed(4));let f=e.find(\"g.lh-exp-gauge__outer\",t),v=e.find(\"g.lh-exp-gauge__inner\",t),b=e.find(\"circle.lh-cover\",f),_=e.find(\"circle.lh-exp-gauge__arc\",v),w=e.find(\"text.lh-exp-gauge__percentage\",v);f.style.setProperty(\"--scale-initial\",String(i/a)),f.style.setProperty(\"--radius\",`${a}px`),b.style.setProperty(\"--radius\",.5*(i+a)+\"px\"),b.setAttribute(\"stroke-width\",String(u)),m.style.setProperty(\"--radius\",`${i}px`),_.setAttribute(\"stroke-dasharray\",`${s()} ${(o-s()).toFixed(4)}`),_.setAttribute(\"stroke-dashoffset\",String(.25*o-h)),w.textContent=Math.round(100*r).toString();let y=a+g,x=a-g,k=n.auditRefs.filter((e=>\"metrics\"===e.group&&e.weight)),E=k.reduce(((e,t)=>e+t.weight),0),L=.25*l-p-.5*u,C=-.5*Math.PI;f.querySelectorAll(\".metric\").forEach((e=>{k.map((e=>`metric--${e.id}`)).find((t=>e.classList.contains(t)))||e.remove()})),k.forEach(((t,n)=>{let r=t.acronym??t.id,i=!f.querySelector(`.metric--${r}`),a=e.maybeFind(`g.metric--${r}`,f)||e.createSVGElement(\"g\"),o=e.maybeFind(`.metric--${r} circle.lh-exp-gauge--faded`,f)||e.createSVGElement(\"circle\"),s=e.maybeFind(`.metric--${r} circle.lh-exp-gauge--miniarc`,f)||e.createSVGElement(\"circle\"),h=e.maybeFind(`.metric--${r} circle.lh-exp-gauge-hovertarget`,f)||e.createSVGElement(\"circle\"),g=e.maybeFind(`.metric--${r} text.metric__label`,f)||e.createSVGElement(\"text\"),u=e.maybeFind(`.metric--${r} text.metric__value`,f)||e.createSVGElement(\"text\");a.classList.add(\"metric\",`metric--${r}`),o.classList.add(\"lh-exp-gauge__arc\",\"lh-exp-gauge__arc--metric\",\"lh-exp-gauge--faded\"),s.classList.add(\"lh-exp-gauge__arc\",\"lh-exp-gauge__arc--metric\",\"lh-exp-gauge--miniarc\"),h.classList.add(\"lh-exp-gauge__arc\",\"lh-exp-gauge__arc--metric\",\"lh-exp-gauge-hovertarget\");let m=t.weight/E,v=c(m),b=t.result.score?t.result.score*m:0,_=c(b),w=m*l,k=c(m,!0),A=d.calculateRating(t.result.score,t.result.scoreDisplayMode);a.style.setProperty(\"--metric-rating\",A),a.style.setProperty(\"--metric-color\",`var(--color-${A})`),a.style.setProperty(\"--metric-offset\",`${L}`),a.style.setProperty(\"--i\",n.toString()),o.setAttribute(\"stroke-dasharray\",`${v} ${l-v}`),s.style.setProperty(\"--metric-array\",`${_} ${l-_}`),h.setAttribute(\"stroke-dasharray\",`${k} ${l-k-p}`),g.classList.add(\"metric__label\"),u.classList.add(\"metric__value\"),g.textContent=r,u.textContent=`+${Math.round(100*b)}`;let S=C+m*Math.PI,z=Math.cos(S),M=Math.sin(S);switch(!0){case z>0:u.setAttribute(\"text-anchor\",\"end\");break;case z<0:g.setAttribute(\"text-anchor\",\"end\");break;case 0===z:g.setAttribute(\"text-anchor\",\"middle\"),u.setAttribute(\"text-anchor\",\"middle\")}switch(!0){case M>0:g.setAttribute(\"dominant-baseline\",\"hanging\");break;case M<0:u.setAttribute(\"dominant-baseline\",\"hanging\");break;case 0===M:g.setAttribute(\"dominant-baseline\",\"middle\"),u.setAttribute(\"dominant-baseline\",\"middle\")}g.setAttribute(\"x\",(y*z).toFixed(2)),g.setAttribute(\"y\",(y*M).toFixed(2)),u.setAttribute(\"x\",(x*z).toFixed(2)),u.setAttribute(\"y\",(x*M).toFixed(2)),i&&(a.appendChild(o),a.appendChild(s),a.appendChild(h),a.appendChild(g),a.appendChild(u),f.appendChild(a)),L-=w,C+=2*m*Math.PI}));let A=f.querySelector(\".lh-exp-gauge-underhovertarget\")||e.createSVGElement(\"circle\");A.classList.add(\"lh-exp-gauge__arc\",\"lh-exp-gauge__arc--metric\",\"lh-exp-gauge-hovertarget\",\"lh-exp-gauge-underhovertarget\");let S=c(1,!0);if(A.setAttribute(\"stroke-dasharray\",`${S} ${l-S-p}`),A.isConnected||f.prepend(A),m.dataset.listenersSetup)return;async function z(t){if(await new Promise((e=>setTimeout(e,1e3))),t.classList.contains(\"state--expanded\"))return;let n=e.find(\".lh-exp-gauge__inner\",t),r=`uniq-${Math.random()}`;n.setAttribute(\"id\",r);let i=e.createSVGElement(\"use\");i.setAttribute(\"href\",`#${r}`),t.appendChild(i);let a=2.5;t.style.setProperty(\"--peek-dur\",`${a}s`),t.classList.add(\"state--peek\",\"state--expanded\");let o=()=>{t.classList.remove(\"state--peek\",\"state--expanded\"),i.remove()},l=setTimeout((()=>{t.removeEventListener(\"mouseenter\",s),o()}),1e3*a*1.5);function s(){clearTimeout(l),o()}t.addEventListener(\"mouseenter\",s,{once:!0})}m.dataset.listenersSetup=!0,z(m),m.addEventListener(\"pointerover\",(n=>{if(n.target===m&&m.classList.contains(\"state--expanded\"))return m.classList.remove(\"state--expanded\"),void(m.classList.contains(\"state--highlight\")&&(m.classList.remove(\"state--highlight\"),e.find(\".metric--highlight\",m).classList.remove(\"metric--highlight\")));if(!(n.target instanceof Element))return;let r=n.target.parentNode;if(r instanceof SVGElement){if(r&&r===v)return void(m.classList.contains(\"state--expanded\")?m.classList.contains(\"state--highlight\")&&(m.classList.remove(\"state--highlight\"),e.find(\".metric--highlight\",m).classList.remove(\"metric--highlight\")):m.classList.add(\"state--expanded\"));if(r&&r.classList&&r.classList.contains(\"metric\")){let n=r.style.getPropertyValue(\"--metric-rating\");if(t.style.setProperty(\"--color-highlight\",`var(--color-${n}-secondary)`),m.classList.contains(\"state--highlight\")){let t=e.find(\".metric--highlight\",m);r!==t&&(t.classList.remove(\"metric--highlight\"),r.classList.add(\"metric--highlight\"))}else m.classList.add(\"state--highlight\"),r.classList.add(\"metric--highlight\")}}})),m.addEventListener(\"mouseleave\",(()=>{m.classList.remove(\"state--highlight\"),m.querySelector(\".metric--highlight\")?.classList.remove(\"metric--highlight\")}))}(e,r,n)}var y=class extends p{_renderMetric(e){let t=this.dom.createComponent(\"metric\"),n=this.dom.find(\".lh-metric\",t);n.id=e.result.id;let r=d.calculateRating(e.result.score,e.result.scoreDisplayMode);n.classList.add(`lh-metric--${r}`),this.dom.find(\".lh-metric__title\",t).textContent=e.result.title;let i=this.dom.find(\".lh-metric__value\",t);i.textContent=e.result.displayValue||\"\";let a=this.dom.find(\".lh-metric__description\",t);if(a.append(this.dom.convertMarkdownLinkSnippets(e.result.description)),\"error\"===e.result.scoreDisplayMode){a.textContent=\"\",i.textContent=\"Error!\",this.dom.createChildOf(a,\"span\").textContent=e.result.errorMessage||\"Report error: no metric information\"}else\"notApplicable\"===e.result.scoreDisplayMode&&(i.textContent=\"--\");return n}_getScoringCalculatorHref(e){let t=e.filter((e=>\"metrics\"===e.group)),n=e.find((e=>\"interactive\"===e.id)),r=e.find((e=>\"first-cpu-idle\"===e.id)),i=e.find((e=>\"first-meaningful-paint\"===e.id));n&&t.push(n),r&&t.push(r),i&&\"number\"==typeof i.result.score&&t.push(i);let a=[...t.map((e=>{let t;return\"number\"==typeof e.result.numericValue?(t=\"cumulative-layout-shift\"===e.id?(e=>Math.round(100*e)/100)(e.result.numericValue):Math.round(e.result.numericValue),t=t.toString()):t=\"null\",[e.acronym||e.id,t]}))];l.reportJson&&(a.push([\"device\",l.reportJson.configSettings.formFactor]),a.push([\"version\",l.reportJson.lighthouseVersion]));let o=new URLSearchParams(a),s=new URL(\"https://googlechrome.github.io/lighthouse/scorecalc/\");return s.hash=o.toString(),s.href}overallImpact(e,t){if(!e.result.metricSavings)return{overallImpact:0,overallLinearImpact:0};let n=0,r=0;for(let[a,o]of Object.entries(e.result.metricSavings)){if(void 0===o)continue;let e=t.find((e=>e.acronym===a));if(!e||null===e.result.score)continue;let l=e.result.numericValue;if(!l)continue;r+=o/l*e.weight;let s=e.result.scoringOptions;s&&(n+=(i.computeLogNormalScore(s,l-o)-e.result.score)*e.weight)}return{overallImpact:n,overallLinearImpact:r}}render(e,t,n){let r=l.strings,i=this.dom.createElement(\"div\",\"lh-category\");i.id=e.id,i.append(this.renderCategoryHeader(e,t,n));let a=e.auditRefs.filter((e=>\"metrics\"===e.group));if(a.length){let[n,o]=this.renderAuditGroup(t.metrics),s=this.dom.createElement(\"input\",\"lh-metrics-toggle__input\"),c=`lh-metrics-toggle${l.getUniqueSuffix()}`;s.setAttribute(\"aria-label\",\"Toggle the display of metric descriptions\"),s.type=\"checkbox\",s.id=c,n.prepend(s);let d=this.dom.find(\".lh-audit-group__header\",n),h=this.dom.createChildOf(d,\"label\",\"lh-metrics-toggle__label\");h.htmlFor=c;let p=this.dom.createChildOf(h,\"span\",\"lh-metrics-toggle__labeltext--show\"),g=this.dom.createChildOf(h,\"span\",\"lh-metrics-toggle__labeltext--hide\");p.textContent=l.strings.expandView,g.textContent=l.strings.collapseView;let u=this.dom.createElement(\"div\",\"lh-metrics-container\");if(n.insertBefore(u,o),a.forEach((e=>{u.append(this._renderMetric(e))})),i.querySelector(\".lh-gauge__wrapper\")){let t=this.dom.find(\".lh-category-header__description\",i),n=this.dom.createChildOf(t,\"div\",\"lh-metrics__disclaimer\"),a=this.dom.convertMarkdownLinkSnippets(r.varianceDisclaimer);n.append(a);let o=this.dom.createChildOf(n,\"a\",\"lh-calclink\");o.target=\"_blank\",o.textContent=r.calculatorLink,this.dom.safelySetHref(o,this._getScoringCalculatorHref(e.auditRefs))}n.classList.add(\"lh-audit-group--metrics\"),i.append(n)}let o=this.dom.createChildOf(i,\"div\",\"lh-filmstrip-container\"),s=e.auditRefs.find((e=>\"screenshot-thumbnails\"===e.id))?.result;if(s?.details){o.id=s.id;let e=this.detailsRenderer.render(s.details);e&&o.append(e)}let c=this.renderFilterableSection(e,t,[\"insights\",\"diagnostics\"],a);if(c&&(c.classList.add(\"lh-perf-audits\"),i.append(c)),(!n||\"navigation\"===n?.gatherMode)&&null!==e.score){let t=function(e){let t=e.createComponent(\"explodeyGauge\");return e.find(\".lh-exp-gauge-component\",t)}(this.dom);w(this.dom,t,e),this.dom.find(\".lh-score__gauge\",i).replaceWith(t)}return i}renderFilterableSection(e,t,n,r){if(n.some((e=>!t[e])))return null;let i=this.dom.createElement(\"div\"),a=e=>e.group??\"\",o=e.auditRefs.filter((e=>n.includes(a(e)))).map((e=>{let{overallImpact:t,overallLinearImpact:n}=this.overallImpact(e,r),i=e.result.guidanceLevel||1;return{auditRef:e,auditEl:this.renderAudit(e),overallImpact:t,overallLinearImpact:n,guidanceLevel:i}})),l=o.filter((e=>!d.showAsPassed(e.auditRef.result))),s=o.filter((e=>d.showAsPassed(e.auditRef.result))),c={};for(let e of n){let n=this.renderAuditGroup(t[e]);n[0].classList.add(`lh-audit-group--${e}`),c[e]=n}function h(e){for(let t of o)if(\"All\"===e)t.auditEl.hidden=!1;else{let n=void 0===t.auditRef.result.metricSavings?.[e];t.auditEl.hidden=n}l.sort(((t,n)=>{let r=t.auditRef.result.score||0,i=n.auditRef.result.score||0;if(r!==i)return r-i;if(\"All\"!==e){let r=t.auditRef.result.metricSavings?.[e]??-1,i=n.auditRef.result.metricSavings?.[e]??-1;if(r!==i)return i-r}return t.overallImpact!==n.overallImpact?n.overallImpact*n.guidanceLevel-t.overallImpact*t.guidanceLevel:0===t.overallImpact&&0===n.overallImpact&&t.overallLinearImpact!==n.overallLinearImpact?n.overallLinearImpact*n.guidanceLevel-t.overallLinearImpact*t.guidanceLevel:n.guidanceLevel-t.guidanceLevel}));for(let e of l){if(!e.auditRef.group)continue;let t=c[a(e.auditRef)];if(!t)continue;let[n,r]=t;n.insertBefore(e.auditEl,r)}}let p=new Set;for(let e of l){let t=e.auditRef.result.metricSavings||{};for(let[e,n]of Object.entries(t))\"number\"==typeof n&&p.add(e)}let g=r.filter((e=>e.acronym&&p.has(e.acronym)));g.length&&this.renderMetricAuditFilter(g,i,h),h(\"All\");for(let e of n)if(l.some((t=>a(t.auditRef)===e))){let t=c[e];if(!t)continue;i.append(t[0])}if(!s.length)return i;let u={auditRefsOrEls:s.map((e=>e.auditEl)),groupDefinitions:t},m=this.renderClump(\"passed\",u);return i.append(m),i}renderMetricAuditFilter(e,t,n){let r=this.dom.createElement(\"div\",\"lh-metricfilter\");this.dom.createChildOf(r,\"span\",\"lh-metricfilter__text\").textContent=l.strings.showRelevantAudits;let i=[{acronym:\"All\",id:\"All\"},...e],a=l.getUniqueSuffix();for(let e of i){let i=`metric-${e.acronym}-${a}`,o=this.dom.createChildOf(r,\"input\",\"lh-metricfilter__radio\");o.type=\"radio\",o.name=`metricsfilter-${a}`,o.id=i;let l=this.dom.createChildOf(r,\"label\",\"lh-metricfilter__label\");l.htmlFor=i,l.title=\"result\"in e?e.result.title:\"\",l.textContent=e.acronym||e.id,\"All\"===e.acronym&&(o.checked=!0,l.classList.add(\"lh-metricfilter__label--active\")),t.append(r),o.addEventListener(\"input\",(r=>{for(let e of t.querySelectorAll(\"label.lh-metricfilter__label\"))e.classList.toggle(\"lh-metricfilter__label--active\",e.htmlFor===i);t.classList.toggle(\"lh-category--filtered\",\"All\"!==e.acronym),n(e.acronym||\"All\");let a=t.querySelectorAll(\"div.lh-audit-group, details.lh-audit-group\");for(let e of a){e.hidden=!1;let t=Array.from(e.querySelectorAll(\"div.lh-audit\")),n=!!t.length&&t.every((e=>e.hidden));e.hidden=n}}))}}},x=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 e=t.closest(\".lh-root\");e?this._dom.rootEl=e:(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=d.prepareReportResult(e);return this._dom.rootEl.textContent=\"\",this._dom.rootEl.append(this._renderReport(r)),this._opts.occupyEntireViewport&&this._dom.rootEl.classList.add(\"lh-max-viewport\"),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=l.strings.footerIssue,this._dom.find(\".lh-footer__version\",t).textContent=e.lighthouseVersion,t}_renderMetaBlock(e,t){let n=d.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,o=e.environment.benchmarkIndex.toFixed(0),s=e.environment.credits?.[\"axe-core\"],c=[`${l.strings.runtimeSettingsBenchmark}: ${o}`,`${l.strings.runtimeSettingsCPUThrottling}: ${n.cpuThrottling}`];n.screenEmulation&&c.push(`${l.strings.runtimeSettingsScreenEmulation}: ${n.screenEmulation}`),s&&c.push(`${l.strings.runtimeSettingsAxeVersion}: ${s}`);let h=l.strings.runtimeAnalysisWindow;\"timespan\"===e.gatherMode?h=l.strings.runtimeAnalysisWindowTimespan:\"snapshot\"===e.gatherMode&&(h=l.strings.runtimeAnalysisWindowSnapshot);let p=[[\"date\",`Captured at ${l.i18n.formatDateTime(e.fetchTime)}`],[\"devices\",`${n.deviceEmulation} with Lighthouse ${e.lighthouseVersion}`,c.join(\"\\n\")],[\"samples-one\",l.strings.runtimeSingleLoad,l.strings.runtimeSingleLoadTooltip],[\"stopwatch\",h],[\"networkspeed\",`${n.summary}`,`${l.strings.runtimeSettingsNetworkThrottling}: ${n.networkThrottling}`],[\"chrome\",`Using ${i}`+(a?` with ${a}`:\"\"),`${l.strings.runtimeSettingsUANetwork}: \"${e.environment.networkUserAgent}\"`]],g=this._dom.find(\".lh-meta__items\",t);for(let[e,t,n]of p){let r=this._dom.createChildOf(g,\"li\",\"lh-meta__item\");if(r.textContent=t,n){r.classList.add(\"lh-tooltip-boundary\"),this._dom.createChildOf(r,\"div\",\"lh-tooltip\").textContent=n}r.classList.add(\"lh-report-icon\",`lh-report-icon--${e}`)}}_renderReportWarnings(e){if(!e.runWarnings||0===e.runWarnings.length)return this._dom.createElement(\"div\");let t=this._dom.createComponent(\"warningsToplevel\");this._dom.find(\".lh-warnings__msg\",t).textContent=l.strings.toplevelWarningsMessage;let n=[];for(let t of e.runWarnings){let e=this._dom.createElement(\"li\");e.append(this._dom.convertMarkdownLinkSnippets(t)),n.push(e)}return this._dom.find(\"ul\",t).append(...n),t}_renderScoreGauges(e,t,n){let r=[],i=[];for(let a of Object.values(e.categories)){let o=(n[a.id]||t).renderCategoryScore(a,e.categoryGroups||{},{gatherMode:e.gatherMode}),l=this._dom.find(\"a.lh-gauge__wrapper, a.lh-fraction__wrapper\",o);l&&(this._dom.safelySetHref(l,`#${a.id}`),l.addEventListener(\"click\",(e=>{if(!l.matches('[href^=\"#\"]'))return;let t=l.getAttribute(\"href\"),n=this._dom.rootEl;if(!t||!n)return;let r=this._dom.find(t,n);e.preventDefault(),r.scrollIntoView()})),this._opts.onPageAnchorRendered?.(l)),d.isPluginCategory(a.id)?i.push(o):r.push(o)}return[...r,...i]}_renderReport(e){l.apply({providedStrings:e.i18n.rendererFormattedStrings,i18n:new _(e.configSettings.locale),reportJson:e});let t=new 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\"checklist\":return this._renderChecklist(e);case\"table\":case\"opportunity\":return this._renderTable(e);case\"network-tree\":case\"criticalrequestchain\":return g.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=l.i18n.formatBytesToKiB(e.value,e.granularity||.1),n=this._renderText(t);return n.title=l.i18n.formatBytes(e.value),n}_renderMilliseconds(e){let t;return t=\"duration\"===e.displayUnit?l.i18n.formatDuration(e.value):l.i18n.formatMilliseconds(e.value,e.granularity||10),this._renderText(t)}renderTextURL(e){let t,n,r,a=e;try{let e=i.parseURL(a);t=\"/\"===e.file?e.origin:e.file,n=\"/\"===e.file||\"\"===e.hostname?\"\":`(${e.hostname})`,r=a}catch{t=a}let o=this._dom.createElement(\"div\",\"lh-text__url\");if(o.append(this._renderLink({text:t,url:a})),n){let e=this._renderText(n);e.classList.add(\"lh-text__url-host\"),o.append(e)}return r&&(o.title=a,o.dataset.url=a),o}_renderLink(e){let t=this._dom.createElement(\"a\");if(this._dom.safelySetHref(t,e.url),!t.href){let t=this._renderText(e.text);return t.classList.add(\"lh-link\"),t}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}_renderBaselineStatus(e){let t=this._dom.createElement(\"div\",\"lh-baseline-status\"),n=e.status;return t.classList.add(`lh-baseline-status--${n}`),t.textContent=String(e.displayString),t}_renderNumeric(e){let t=l.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(null==e)return null;if(\"object\"==typeof e)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\"text\":return this._renderText(e.value);case\"source-location\":return this.renderSourceLocation(e);case\"url\":return this.renderTextURL(e.value);case\"baseline-status\":return this._renderBaselineStatus(e);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 t=String(e);return this._renderCode(t)}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 t=String(e);return this._renderText(t)}case\"thumbnail\":{let t=String(e);return this._renderThumbnail(t)}case\"timespanMs\":{let t=Number(e);return this._renderMilliseconds({value:t})}case\"url\":{let t=String(e);return v.some((e=>t.startsWith(e)))?this.renderTextURL(t):this._renderCode(t)}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 t,i=e[r.key];if(null!=i&&(t=this._renderTableValue(i,r)),t){let e=`lh-table-column--${r.valueType}`;this._dom.createChildOf(n,\"td\",e).append(t)}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 t of e.subItems.items){let e=this._renderTableRow(t,r);e.classList.add(\"lh-sub-item-row\"),n.append(e)}return n}_adornEntityGroupRow(e){let t=e.dataset.entity;if(!t)return;let n=this._entities?.find((e=>e.name===t));if(!n)return;let r=this._dom.find(\"td\",e);if(n.category){let e=this._dom.createElement(\"span\");e.classList.add(\"lh-audit__adorn\"),e.textContent=n.category,r.append(\" \",e)}if(n.isFirstParty){let e=this._dom.createElement(\"span\");e.classList.add(\"lh-audit__adorn\",\"lh-audit__adorn1p\"),e.textContent=l.strings.firstPartyChipLabel,r.append(\" \",e)}if(n.homepage){let e=this._dom.createElement(\"a\");e.href=n.homepage,e.target=\"_blank\",e.title=l.strings.openInANewTabTooltip,e.classList.add(\"lh-report-icon--external\"),r.append(\" \",e)}}_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((e=>e.entity)))return[];let i=new Set(e.skipSumming||[]),a=[];for(let e of n)!e.key||i.has(e.key)||b.includes(e.valueType)&&a.push(e.key);let o=n[0].key;if(!o)return[];let s=new Map;for(let e of t){let t=\"string\"==typeof e.entity?e.entity:void 0,n=s.get(t)||{[o]:t||l.strings.unattributable,entity:t};for(let t of a)n[t]=Number(n[t]||0)+Number(e[t]||0);s.set(t,n)}let c=[...s.values()];return r&&c.sort(d.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 t of e.headings){let e=`lh-table-column--${t.valueType||\"text\"}`,n=this._dom.createElement(\"div\",\"lh-text\");n.textContent=t.label,this._dom.createChildOf(r,\"th\",e).append(n)}let i=this._getEntityGroupItems(e),a=this._dom.createChildOf(t,\"tbody\");if(i.length)for(let t of i){let n=\"string\"==typeof t.entity?t.entity:void 0,r=this._renderEntityGroupRow(t,e.headings);for(let t of e.items.filter((e=>e.entity===n)))r.append(this._renderTableRowsFromItem(t,e.headings));let i=this._dom.findAll(\"tr\",r);n&&i.length&&(i.forEach((e=>e.dataset.entity=n)),this._adornEntityGroupRow(i[0])),a.append(r)}else{let t=!0;for(let n of e.items){let r=this._renderTableRowsFromItem(n,e.headings),i=this._dom.findAll(\"tr\",r),o=i[0];if(\"string\"==typeof n.entity&&(o.dataset.entity=n.entity),e.isEntityGrouped&&n.entity)o.classList.add(\"lh-row--group\"),this._adornEntityGroupRow(o);else for(let e of i)e.classList.add(t?\"lh-row--even\":\"lh-row--odd\");t=!t,a.append(r)}}return t}_renderListValue(e){return\"node\"===e.type?this.renderNode(e):\"text\"===e.type?this._renderText(e.value):this.render(e)}_renderList(e){let t=this._dom.createElement(\"div\",\"lh-list\");return e.items.forEach((e=>{if(\"list-section\"===e.type){let n=this._dom.createElement(\"div\",\"lh-list-section\");e.title&&this._dom.createChildOf(n,\"div\",\"lh-list-section__title\").append(this._dom.convertMarkdownLinkSnippets(e.title)),e.description&&this._dom.createChildOf(n,\"div\",\"lh-list-section__description\").append(this._dom.convertMarkdownLinkSnippets(e.description));let r=this._renderListValue(e.value);return r&&n.append(r),void t.append(n)}let n=this._renderListValue(e);n&&t.append(n)})),t}_renderChecklist(e){let t=this._dom.createElement(\"ul\",\"lh-checklist\");return Object.values(e.items).forEach((e=>{let n=this._dom.createChildOf(t,\"li\",\"lh-checklist-item\"),r=e.value?\"lh-report-plain-icon--checklist-pass\":\"lh-report-plain-icon--checklist-fail\";this._dom.createChildOf(n,\"span\",`lh-report-plain-icon ${r}`).textContent=e.label})),t}renderNode(e){let t=this._dom.createElement(\"span\",\"lh-node\");if(e.nodeLabel){let n=this._dom.createElement(\"div\");n.textContent=e.nodeLabel,t.append(n)}if(e.snippet){let n=this._dom.createElement(\"div\");n.classList.add(\"lh-node__snippet\"),n.textContent=e.snippet,t.append(n)}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||0===n.width||0===n.height)return t;let r=f.render(this._dom,this._fullPageScreenshot.screenshot,n,{width:147,height:100});return r&&t.prepend(r),t}renderSourceLocation(e){if(!e.url)return null;let t,n,r=`${e.url}:${e.line+1}:${e.column}`;if(e.original&&(t=`${e.original.file||\"<unmapped>\"}:${e.original.line+1}:${e.original.column}`),\"network\"===e.urlProvider&&t)n=this._renderLink({url:e.url,text:t}),n.title=`maps to generated location ${r}`;else if(\"network\"!==e.urlProvider||t)if(\"comment\"===e.urlProvider&&t)n=this._renderText(`${t} (from source map)`),n.title=`${r} (from sourceURL)`;else{if(\"comment\"!==e.urlProvider||t)return null;n=this._renderText(`${r} (from sourceURL)`)}else n=this.renderTextURL(e.url),this._dom.find(\".lh-link\",n).textContent+=`:${e.line+1}:${e.column}`;return n.classList.add(\"lh-source-location\"),n.setAttribute(\"data-source-url\",e.url),n.setAttribute(\"data-source-line\",String(e.line)),n.setAttribute(\"data-source-column\",String(e.column)),n}_renderFilmstrip(e){let t=this._dom.createElement(\"div\",\"lh-filmstrip\");for(let n of e.items){let e=this._dom.createChildOf(t,\"div\",\"lh-filmstrip__frame\"),r=this._dom.createChildOf(e,\"img\",\"lh-filmstrip__thumbnail\");r.src=n.data,r.alt=\"Screenshot\"}return t}_renderCode(e){let t=this._dom.createElement(\"pre\",\"lh-code\");return t.textContent=e,t}}(this._dom,{fullPageScreenshot:e.fullPageScreenshot??void 0,entities:e.entities}),n=new p(this._dom,t),r={performance:new y(this._dom,t)},a=this._dom.createElement(\"div\");a.append(this._renderReportHeader());let o,s=this._dom.createElement(\"div\",\"lh-container\"),c=this._dom.createElement(\"div\",\"lh-report\");c.append(this._renderReportWarnings(e)),1===Object.keys(e.categories).length?a.classList.add(\"lh-header--solo-category\"):o=this._dom.createElement(\"div\",\"lh-scores-header\");let h=this._dom.createElement(\"div\");if(h.classList.add(\"lh-scorescale-wrap\"),h.append(this._dom.createComponent(\"scorescale\")),o){let t=this._dom.find(\".lh-scores-container\",a);o.append(...this._renderScoreGauges(e,n,r)),t.append(o,h);let i=this._dom.createElement(\"div\",\"lh-sticky-header\");i.append(...this._renderScoreGauges(e,n,r)),s.append(i)}let u=this._dom.createElement(\"div\",\"lh-categories\");c.append(u);let m={gatherMode:e.gatherMode};for(let t of Object.values(e.categories)){let i=r[t.id]||n;i.dom.createChildOf(u,\"div\",\"lh-category-wrapper\").append(i.render(t,e.categoryGroups,m))}n.injectFinalScreenshot(u,e.audits,h);let w=this._dom.createFragment();return this._opts.omitGlobalStyles||w.append(this._dom.createComponent(\"styles\")),this._opts.omitTopbar||w.append(this._renderReportTopbar(e)),w.append(s),c.append(this._renderReportFooter(e)),s.append(a,c),e.fullPageScreenshot&&f.installFullPageScreenshot(this._dom.rootEl,e.fullPageScreenshot.screenshot),w}};function k(e,t){let n=e.rootEl;typeof t>\"u\"?n.classList.toggle(\"lh-dark\"):n.classList.toggle(\"lh-dark\",t)}var E=typeof btoa<\"u\"?btoa:e=>Buffer.from(e).toString(\"base64\"),L=typeof atob<\"u\"?atob:e=>Buffer.from(e,\"base64\").toString();var C={toBase64:async function(e,t){let n=(new TextEncoder).encode(e);if(t.gzip)if(typeof CompressionStream<\"u\"){let e=new CompressionStream(\"gzip\"),t=e.writable.getWriter();t.write(n),t.close();let r=await new Response(e.readable).arrayBuffer();n=new Uint8Array(r)}else n=window.pako.gzip(e);let r=\"\";for(let e=0;e<n.length;e+=5e3)r+=String.fromCharCode(...n.subarray(e,e+5e3));return E(r)},fromBase64:function(e,t){let n=L(e),r=Uint8Array.from(n,(e=>e.charCodeAt(0)));return t.gzip?window.pako.ungzip(r,{to:\"string\"}):(new TextDecoder).decode(r)}};function A(){let e=window.location.host.endsWith(\".vercel.app\"),t=new URLSearchParams(window.location.search).has(\"dev\");return e?`https://${window.location.host}/gh-pages`:t?\"http://localhost:7333\":\"https://googlechrome.github.io/lighthouse\"}function S(e){let t=e.generatedTime,n=e.fetchTime||t;return`${e.lighthouseVersion}-${e.finalDisplayedUrl}-${n}`}async function z(e,t,n){let r=new URL(t),i=!!window.CompressionStream;r.hash=await C.toBase64(JSON.stringify(e),{gzip:i}),i&&r.searchParams.set(\"gzip\",\"1\"),window.open(r.toString(),n)}async function M(e){let t=\"viewer-\"+S(e);!function(e,t,n){let r=new URL(t).origin;window.addEventListener(\"message\",(function t(n){n.origin===r&&i&&n.data.opened&&(i.postMessage(e,r),window.removeEventListener(\"message\",t))}));let i=window.open(t,n)}({lhr:e},A()+\"/viewer/\",t)}function T(e){return function(e,t){let n=t?new Date(t):new Date,r=n.toLocaleTimeString(\"en-US\",{hour12:!1}),i=n.toLocaleDateString(\"en-US\",{year:\"numeric\",month:\"2-digit\",day:\"2-digit\"}).split(\"/\");return i.unshift(i.pop()),`${e}_${i.join(\"-\")}_${r}`.replace(/[/?<>\\\\:*|\"]/g,\"-\")}(new URL(e.finalDisplayedUrl).hostname,e.fetchTime)}var F=class{constructor(e,t={}){this.json,this._dom=e,this._opts=t,this._topbar=t.omitTopbar?null:new class{constructor(e,t){this.lhr,this._reportUIFeatures=e,this._dom=t,this._dropDownMenu=new 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())}}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()}}onDocumentKeyDown(e){27===e.keyCode&&this.close()}onMenuFocusOut(e){let t=e.relatedTarget;this._menuEl.contains(t)||this.close()}_getNextSelectableNode(e,t){let n=e.filter((e=>e instanceof HTMLElement)).filter((e=>!(e.hasAttribute(\"disabled\")||\"none\"===window.getComputedStyle(e).display))),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)}}(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 e=JSON.stringify(this.lhr,null,2);this._reportUIFeatures._saveFile(new Blob([e],{type:\"application/json\"}));break}case\"save-html\":{let e=this._reportUIFeatures.getReportHtml();try{this._reportUIFeatures._saveFile(new Blob([e],{type:\"text/html\"}))}catch(e){this._dom.fireEventOn(\"lh-log\",this._dom.document(),{cmd:\"error\",msg:\"Could not export as HTML. \"+e.message})}break}case\"open-viewer\":this._dom.isDevTools()?async function(e){let t=\"viewer-\"+S(e),n=A()+\"/viewer/\";await z({lhr:e},n,t)}(this.lhr):M(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(),{name:\"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)&&80===e.keyCode&&this._dropDownMenu.close()}expandAllDetails(){this._dom.findAll(\".lh-categories details\",this._dom.rootEl).map((e=>e.open=!0))}collapseAllDetails(){this._dom.findAll(\".lh-categories details\",this._dom.rootEl).map((e=>e.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\"visible\"!==t&&\"hidden\"!==t?e:e.parentElement?this._getScrollParent(e.parentElement):document}_setUpCollapseDetailsAfterPrinting(){\"onbeforeprint\"in self?self.addEventListener(\"afterprint\",this.collapseAllDetails):self.matchMedia(\"print\").addListener((e=>{e.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),requestAnimationFrame((()=>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>=this.categoriesEl.getBoundingClientRect().top,t=Array.from(this._dom.rootEl.querySelectorAll(\".lh-category\")).filter((e=>e.getBoundingClientRect().top-window.innerHeight/2<0)),n=t.length>0?t.length-1:0,r=this.stickyHeaderEl.querySelectorAll(\".lh-gauge__wrapper, .lh-fraction__wrapper\"),i=r[n],a=r[0].getBoundingClientRect().left,o=i.getBoundingClientRect().left-a;this.highlightEl.style.transform=`translate(${o}px)`,this.stickyHeaderEl.classList.toggle(\"lh-sticky-header--visible\",e)}}(this,e),this.onMediaQueryChange=this.onMediaQueryChange.bind(this)}initFeatures(e){this.json=e,this._fullPageScreenshot=i.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 n=[\"performance\",\"accessibility\",\"best-practices\",\"seo\"].every((t=>{let n=e.categories[t];return n&&1===n.score})),r=this._opts.disableFireworks||this._opts.disableAutoDarkModeAndFireworks;if(n&&!r&&(this._enableFireworks(),t||k(this._dom,!0)),e.categories.performance&&e.categories.performance.auditRefs.some((t=>!(\"metrics\"!==t.group||!e.audits[t.id].errorMessage)))){this._dom.find(\"input.lh-metrics-toggle__input\",this._dom.rootEl).checked=!0}this.json.audits[\"script-treemap-data\"]&&this.json.audits[\"script-treemap-data\"].details&&this.addButton({text:l.strings.viewTreemapLabel,icon:\"treemap\",onClick:()=>function(e){if(!e.audits[\"script-treemap-data\"].details)throw new Error(\"no script treemap data found\");z({lhr:{mainDocumentUrl:e.mainDocumentUrl,finalUrl:e.finalUrl,finalDisplayedUrl:e.finalDisplayedUrl,audits:{\"script-treemap-data\":e.audits[\"script-treemap-data\"]},configSettings:{locale:e.configSettings.locale}}},A()+\"/treemap/\",\"treemap-\"+S(e))}(this.json)}),this._opts.onViewTrace&&(\"simulate\"===e.configSettings.throttlingMethod?this._dom.find('a[data-action=\"view-unthrottled-trace\"]',this._dom.rootEl).classList.remove(\"lh-hidden\"):this.addButton({text:l.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 e of this._dom.findAll(\"[data-i18n]\",this._dom.rootEl)){let t=e.getAttribute(\"data-i18n\");e.textContent=l.strings[t]}}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\",\"network-dependency-tree-insight\"],t=[\"legacy-javascript\",\"legacy-javascript-insight\"];Array.from(this._dom.rootEl.querySelectorAll(\"table.lh-table\")).filter((e=>e.querySelector(\"td.lh-table-column--url, td.lh-table-column--source-location\"))).filter((t=>{let n=t.closest(\".lh-audit\");if(!n)throw new Error(\".lh-table not within audit\");return!e.includes(n.id)})).forEach((e=>{let n=(d=e,Array.from(d.tBodies[0].rows)),r=n.filter((e=>!e.classList.contains(\"lh-sub-item-row\"))),a=this._getThirdPartyRows(r,i.getFinalDisplayedUrl(this.json)),o=n.some((e=>e.classList.contains(\"lh-row--even\"))),s=this._dom.createComponent(\"3pFilter\"),c=this._dom.find(\"input\",s);var d;c.addEventListener(\"change\",(e=>{let t=e.target instanceof HTMLInputElement&&!e.target.checked,n=!0,i=r[0];for(;i;){let e=t&&a.includes(i);do{i.classList.toggle(\"lh-row--hidden\",e),o&&(i.classList.toggle(\"lh-row--even\",!e&&n),i.classList.toggle(\"lh-row--odd\",!e&&!n)),i=i.nextElementSibling}while(i&&i.classList.contains(\"lh-sub-item-row\"));e||(n=!n)}}));let h=a.filter((e=>!e.classList.contains(\"lh-row--group\"))).length;this._dom.find(\".lh-3p-filter-count\",s).textContent=`${h}`,this._dom.find(\".lh-3p-ui-string\",s).textContent=l.strings.thirdPartyResourcesLabel;let p=a.length===r.length,g=!a.length;if((p||g)&&(this._dom.find(\"div.lh-3p-filter\",s).hidden=!0),!e.parentNode)return;e.parentNode.insertBefore(s,e);let u=e.closest(\".lh-audit\");if(!u)throw new Error(\".lh-table not within audit\");t.includes(u.id)&&!p&&c.click()}))}_setupElementScreenshotOverlay(e){this._fullPageScreenshot&&f.installOverlayFeature({dom:this._dom,rootEl:e,overlayContainerEl:e,fullPageScreenshot:this._fullPageScreenshot})}_getThirdPartyRows(e,t){let n=i.getEntityFromUrl(t,this.json.entities),r=this.json.entities?.find((e=>!0===e.isFirstParty))?.name,a=[];for(let t of e){if(r){if(!t.dataset.entity||t.dataset.entity===r)continue}else{let e=t.querySelector(\"div.lh-text__url\");if(!e)continue;let r=e.dataset.url;if(!r||i.getEntityFromUrl(r,this.json.entities)===n)continue}a.push(t)}return a}_saveFile(e){let t=e.type.match(\"json\")?\".json\":\".html\",n=T({finalDisplayedUrl:i.getFinalDisplayedUrl(this.json),fetchTime:this.json.fetchTime})+t;this._opts.onSaveFileOverride?this._opts.onSaveFileOverride(e,n):this._dom.saveFile(e,n)}};window.__initLighthouseReport__=function(){let e=function(e,t={}){let n=document.createElement(\"article\");n.classList.add(\"lh-root\",\"lh-vars\");let r=new a(n.ownerDocument,n);return new x(r).renderReport(e,n,t),new F(r,t).initFeatures(e),n}(window.__LIGHTHOUSE_JSON__,{occupyEntireViewport:!0,getStandaloneReportHTML:()=>document.documentElement.outerHTML});document.body.append(e),document.addEventListener(\"lh-analytics\",(e=>{let t=e;\"gtag\"in window&&window.gtag(\"event\",t.detail.name,t.detail.data??{})})),document.addEventListener(\"lh-log\",(e=>{let t=document.querySelector(\"div#lh-log\");if(!t)return;let n=new class{constructor(e){this.el=e;let t=document.createElement(\"style\");if(t.textContent=\"\\n #lh-log {\\n position: fixed;\\n background-color: #323232;\\n color: #fff;\\n min-height: 48px;\\n min-width: 288px;\\n padding: 16px 24px;\\n box-shadow: 0 2px 5px 0 rgba(0, 0, 0, 0.26);\\n border-radius: 2px;\\n margin: 12px;\\n font-size: 14px;\\n cursor: default;\\n transition: transform 0.3s, opacity 0.3s;\\n transform: translateY(100px);\\n opacity: 0;\\n bottom: 0;\\n left: 0;\\n z-index: 3;\\n display: flex;\\n flex-direction: row;\\n justify-content: center;\\n align-items: center;\\n }\\n \\n #lh-log.lh-show {\\n opacity: 1;\\n transform: translateY(0);\\n }\\n \",!this.el.parentNode)throw new Error(\"element needs to be in the DOM\");this.el.parentNode.insertBefore(t,this.el),this._id=void 0}log(e,t=!0){this._id&&clearTimeout(this._id),this.el.textContent=e,this.el.classList.add(\"lh-show\"),t&&(this._id=setTimeout((()=>{this.el.classList.remove(\"lh-show\")}),7e3))}warn(e){this.log(\"Warning: \"+e)}error(e){this.log(e),setTimeout((()=>{throw new Error(e)}),0)}hide(){this._id&&clearTimeout(this._id),this.el.classList.remove(\"lh-show\")}}(t),r=e.detail;switch(r.cmd){case\"log\":n.log(r.msg);break;case\"warn\":n.warn(r.msg);break;case\"error\":n.error(r.msg);break;case\"hide\":n.hide()}}))}})();\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n/**\n * @license\n * Copyright 2023 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n/**\n * @license\n * Copyright 2020 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n/**\n * @license Copyright 2023 The Lighthouse Authors. All Rights Reserved.\n * 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\n * 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.\n*/\n/**\n * @license\n * Copyright 2018 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n *\n * Dummy text for ensuring report robustness: <\\/script> pre$`post %%LIGHTHOUSE_JSON%%\n * (this is handled by terser)\n */\n/**\n * @license\n * Copyright 2021 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */"
32
+ }, l = class e {
33
+ static replaceStrings(t, n) {
34
+ if (n.length === 0) return t;
35
+ let r = n[0], i = n.slice(1);
36
+ return t.split(r.search).map((t) => e.replaceStrings(t, i)).join(r.replacement);
37
+ }
38
+ static sanitizeJson(e) {
39
+ return JSON.stringify(e).replace(/</g, "\\u003c").replace(/\u2028/g, "\\u2028").replace(/\u2029/g, "\\u2029");
40
+ }
41
+ static generateReportHtml(t) {
42
+ let n = e.sanitizeJson(t), r = c.REPORT_JAVASCRIPT.replace(/<\//g, "\\u003c/");
43
+ return e.replaceStrings(c.REPORT_TEMPLATE, [{
44
+ search: "%%LIGHTHOUSE_JSON%%",
45
+ replacement: n
46
+ }, {
47
+ search: "%%LIGHTHOUSE_JAVASCRIPT%%",
48
+ replacement: r
49
+ }]);
50
+ }
51
+ static generateFlowReportHtml(t) {
52
+ let n = e.sanitizeJson(t), r = c.FLOW_REPORT_JAVASCRIPT.replace(/<\//g, "\\u003c/");
53
+ return e.replaceStrings(c.FLOW_REPORT_TEMPLATE, [
54
+ {
55
+ search: "%%LIGHTHOUSE_FLOW_JSON%%",
56
+ replacement: n
57
+ },
58
+ {
59
+ search: "%%LIGHTHOUSE_FLOW_JAVASCRIPT%%",
60
+ replacement: r
61
+ },
62
+ {
63
+ search: "/*%%LIGHTHOUSE_FLOW_CSS%%*/",
64
+ replacement: c.FLOW_REPORT_CSS
65
+ }
66
+ ]);
67
+ }
68
+ static generateReportCSV(e) {
69
+ let t = (e) => `"${e.replace(/"/g, "\"\"")}"`, n = (e) => e.map((e) => e === null ? "null" : e.toString()).map(t), r = [], i = [
70
+ "requestedUrl",
71
+ "finalDisplayedUrl",
72
+ "fetchTime",
73
+ "gatherMode"
74
+ ];
75
+ r.push(n(i)), r.push(n(i.map((t) => e[t] ?? null))), r.push([]), r.push(["category", "score"]);
76
+ for (let t of Object.values(e.categories)) r.push(n([t.id, t.score]));
77
+ r.push([]), r.push([
78
+ "category",
79
+ "audit",
80
+ "score",
81
+ "displayValue",
82
+ "description"
83
+ ]);
84
+ for (let t of Object.values(e.categories)) for (let i of t.auditRefs) {
85
+ let a = e.audits[i.id];
86
+ a && r.push(n([
87
+ t.id,
88
+ i.id,
89
+ a.score,
90
+ a.displayValue || "",
91
+ a.description
92
+ ]));
93
+ }
94
+ return r.map((e) => e.join(",")).join("\r\n");
95
+ }
96
+ static isFlowResult(e) {
97
+ return "steps" in e;
98
+ }
99
+ static generateReport(t, n) {
100
+ let r = Array.isArray(n);
101
+ typeof n == "string" && (n = [n]);
102
+ let i = n.map((n) => {
103
+ if (n === "html") return e.isFlowResult(t) ? e.generateFlowReportHtml(t) : e.generateReportHtml(t);
104
+ if (n === "csv") {
105
+ if (e.isFlowResult(t)) throw Error("CSV output is not support for user flows");
106
+ return e.generateReportCSV(t);
107
+ }
108
+ if (n === "json") return JSON.stringify(t, null, 2);
109
+ throw Error("Invalid output mode: " + n);
110
+ });
111
+ return r ? i : i[0];
112
+ }
113
+ };
114
+ return o(s);
115
+ })();
116
+ return e.ReportGenerator ?? e;
117
+ });
118
+ })))();
119
+ var Be = /* @__PURE__ */ e({
120
+ Events: () => R,
121
+ LighthouseController: () => Ue,
122
+ getPresets: () => I,
123
+ getRuntimeSettings: () => L
124
+ }), N = {
125
+ canOnlyAuditHttphttpsPages: "Can only audit pages on HTTP or HTTPS. Navigate to a different page.",
126
+ thereMayBeStoredDataAffectingSingular: "There may be stored data affecting loading performance in this location: {PH1}. Audit this page in an incognito window to prevent those resources from affecting your scores.",
127
+ thereMayBeStoredDataAffectingLoadingPlural: "There may be stored data affecting loading performance in these locations: {PH1}. Audit this page in an incognito window to prevent those resources from affecting your scores.",
128
+ multipleTabsAreBeingControlledBy: "Multiple tabs are being controlled by the same `service worker`. Close your other tabs on the same origin to audit this page.",
129
+ atLeastOneCategoryMustBeSelected: "At least one category must be selected.",
130
+ localStorage: "Local storage",
131
+ indexeddb: "IndexedDB",
132
+ webSql: "Web SQL",
133
+ performance: "Performance",
134
+ howLongDoesThisAppTakeToShow: "How long does this app take to show content and become usable",
135
+ bestPractices: "Best practices",
136
+ doesThisPageFollowBestPractices: "Does this page follow best practices for modern web development",
137
+ accessibility: "Accessibility",
138
+ isThisPageUsableByPeopleWith: "Is this page usable by people with disabilities or impairments",
139
+ seo: "SEO",
140
+ isThisPageOptimizedForSearch: "Is this page optimized for search engine results ranking",
141
+ agenticBrowsing: "Agentic browsing",
142
+ agenticBrowsingDescription: "These checks ensure high-quality, browsable websites for AI agents and validate the correctness of WebMCP integrations. This category is still under development and subject to change.",
143
+ applyMobileEmulation: "Apply mobile emulation",
144
+ applyMobileEmulationDuring: "Apply mobile emulation during auditing",
145
+ applyDesktopEmulationDuring: "Apply desktop emulation during auditing",
146
+ lighthouseMode: "Lighthouse mode",
147
+ runLighthouseInMode: "Run Lighthouse in navigation, timespan, or snapshot mode",
148
+ navigation: "Navigation (Default)",
149
+ navigationTooltip: "Navigation mode analyzes a page load, exactly like the original Lighthouse reports.",
150
+ timespan: "Timespan",
151
+ timespanTooltip: "Timespan mode analyzes an arbitrary period of time, typically containing user interactions.",
152
+ snapshot: "Snapshot",
153
+ snapshotTooltip: "Snapshot mode analyzes the page in a particular state, typically after user interactions.",
154
+ mobile: "Mobile",
155
+ desktop: "Desktop",
156
+ throttlingMethod: "Throttling method",
157
+ simulatedThrottling: "Simulated throttling (default)",
158
+ devtoolsThrottling: "DevTools throttling (advanced)",
159
+ simulateASlowerPageLoadBasedOn: "Simulated throttling simulates a slower page load based on data from an initial unthrottled load. DevTools throttling actually slows down the page.",
160
+ clearStorage: "Clear storage",
161
+ resetStorageLocalstorage: "Reset storage (`cache`, `service workers`, etc) before auditing. (Good for performance & `PWA` testing)",
162
+ enableSampling: "Enable JS sampling",
163
+ enableJavaScriptSampling: "Enable JavaScript sampling during the Lighthouse run. This will provide more execution details in the performance panel when you view the trace, but has higher CPU overhead and may impact the performance of the page.",
164
+ javaScriptDisabled: "JavaScript is disabled. You need to enable JavaScript to audit this page. Open the Command Menu and run the Enable JavaScript command to enable JavaScript."
165
+ }, Ve = p("panels/lighthouse/LighthouseController.ts", N), P = l.bind(void 0, Ve), F = f.bind(void 0, Ve), He = class {
166
+ controller;
167
+ inspectedURL;
168
+ categoryIDs;
169
+ flags;
170
+ isAIControlled;
171
+ emulationStateBefore;
172
+ protocolService;
173
+ #e;
174
+ #t = null;
175
+ constructor(e, t, n, r, i, a) {
176
+ this.controller = e, this.protocolService = t, this.inspectedURL = n, this.categoryIDs = r, this.flags = i, this.isAIControlled = a, this.#e = !1;
177
+ }
178
+ isRunning() {
179
+ return this.#e;
180
+ }
181
+ async start() {
182
+ this.#e = !0;
183
+ try {
184
+ await this.setupEmulationAndProtocolConnection(), this.flags.mode === "timespan" && await this.protocolService.startTimespan({
185
+ inspectedURL: this.inspectedURL,
186
+ categoryIDs: this.categoryIDs,
187
+ flags: this.flags
188
+ });
189
+ } catch (e) {
190
+ throw await this.cancel(), e;
191
+ }
192
+ }
193
+ async collect() {
194
+ try {
195
+ let e = await this.protocolService.collectLighthouseResults({
196
+ inspectedURL: this.inspectedURL,
197
+ categoryIDs: this.categoryIDs,
198
+ flags: this.flags
199
+ });
200
+ if (!e) throw Error("No Lighthouse response");
201
+ if (e.fatal) {
202
+ let t = Error(e.message);
203
+ throw t.stack = e.stack, t;
204
+ }
205
+ return e;
206
+ } finally {
207
+ await this.cancel();
208
+ }
209
+ }
210
+ async cancel() {
211
+ return this.#t ||= (this.#e = !1, this.restoreEmulationAndProtocolConnection()), await this.#t;
212
+ }
213
+ async setupEmulationAndProtocolConnection() {
214
+ let e = Ie.instance();
215
+ if (this.emulationStateBefore = {
216
+ emulation: {
217
+ type: e.type(),
218
+ enabled: e.enabledSetting().get(),
219
+ outlineEnabled: e.deviceOutlineSetting().get(),
220
+ toolbarControlsEnabled: e.toolbarControlsEnabledSetting().get(),
221
+ scale: e.scaleSetting().get(),
222
+ device: e.device(),
223
+ mode: e.mode()
224
+ },
225
+ network: { conditions: pe.instance().networkConditions() }
226
+ }, e.toolbarControlsEnabledSetting().set(!1), "formFactor" in this.flags && this.flags.formFactor === "desktop") e.enabledSetting().set(!1), e.emulate(Pe.None, null, null);
227
+ else if (this.flags.formFactor === "mobile") {
228
+ e.enabledSetting().set(!0), e.deviceOutlineSetting().set(!0);
229
+ for (let t of Fe.instance().standard()) t.title === "Moto G Power" && e.emulate(Pe.Device, t, t.modes[0], 1);
230
+ }
231
+ await this.protocolService.attach();
232
+ }
233
+ async restoreEmulationAndProtocolConnection() {
234
+ if (await this.protocolService.detach(), this.emulationStateBefore) {
235
+ let e = Ie.instance();
236
+ e.emulate(Pe.None, null, null);
237
+ let { type: t, enabled: n, outlineEnabled: r, toolbarControlsEnabled: i, scale: a, device: o, mode: s } = this.emulationStateBefore.emulation;
238
+ e.enabledSetting().set(n), e.deviceOutlineSetting().set(r), e.toolbarControlsEnabledSetting().set(i), t === Pe.Responsive && e.scaleSetting().set(a), e.emulate(t, o, s, a), pe.instance().setNetworkConditions(this.emulationStateBefore.network.conditions), delete this.emulationStateBefore;
239
+ }
240
+ ze.instance().update(!0);
241
+ let e = w.instance().primaryPageTarget();
242
+ if (!e) return;
243
+ let t = e.model(ie);
244
+ if (t && this.flags.mode === "navigation") {
245
+ let e = await this.controller.getInspectedURL();
246
+ await t.navigate(e);
247
+ }
248
+ }
249
+ }, Ue = class extends r {
250
+ protocolService;
251
+ manager;
252
+ serviceWorkerListeners;
253
+ inspectedURL;
254
+ currentLighthouseRun;
255
+ lastAction = null;
256
+ constructor(e) {
257
+ super(), this.protocolService = e, e.registerStatusCallback((e) => this.dispatchEventToListeners("AuditProgressChanged", { message: e }));
258
+ for (let e of I()) e.setting.addChangeListener(this.recomputePageAuditability.bind(this));
259
+ for (let e of L()) e.setting.addChangeListener(this.recomputePageAuditability.bind(this));
260
+ u.instance().moduleSetting("java-script-disabled").addChangeListener(this.recomputePageAuditability.bind(this)), w.instance().observeModels(xe, this), w.instance().addEventListener(g.INSPECTED_URL_CHANGED, this.recomputePageAuditability, this);
261
+ }
262
+ modelAdded(e) {
263
+ e.target() === w.instance().primaryPageTarget() && (this.manager = e, this.serviceWorkerListeners = [this.manager.addEventListener(Te.REGISTRATION_UPDATED, this.recomputePageAuditability, this), this.manager.addEventListener(Te.REGISTRATION_DELETED, this.recomputePageAuditability, this)], this.recomputePageAuditability());
264
+ }
265
+ modelRemoved(e) {
266
+ this.manager === e && (this.serviceWorkerListeners && o(this.serviceWorkerListeners), this.manager = null, this.recomputePageAuditability());
267
+ }
268
+ hasActiveServiceWorker() {
269
+ if (!this.manager) return !1;
270
+ let e = this.manager.target();
271
+ if (!e) return !1;
272
+ let t = i.fromString(e.inspectedURL())?.securityOrigin();
273
+ for (let e of this.manager.registrations().values()) if (e.securityOrigin === t) {
274
+ for (let t of e.versions.values()) if (t.controlledClients.length > 1) return !0;
275
+ }
276
+ return !1;
277
+ }
278
+ hasAtLeastOneCategory() {
279
+ return I().some((e) => e.setting.get());
280
+ }
281
+ unauditablePageMessage() {
282
+ if (!this.manager || this.getFlags().mode !== "navigation") return null;
283
+ let e = this.manager.target()?.inspectedURL();
284
+ if (!e?.startsWith("http")) return P(N.canOnlyAuditHttphttpsPages);
285
+ try {
286
+ if (new URL(e).pathname.endsWith(".pdf")) return P(N.canOnlyAuditHttphttpsPages);
287
+ } catch {
288
+ return P(N.canOnlyAuditHttphttpsPages);
289
+ }
290
+ return null;
291
+ }
292
+ javaScriptDisabled() {
293
+ return u.instance().moduleSetting("java-script-disabled").get();
294
+ }
295
+ async hasImportantResourcesNotCleared() {
296
+ let e = L().find((e) => e.setting.name === "lighthouse.clear-storage");
297
+ if (e && !e.setting.get() || !this.manager) return "";
298
+ let t = this.manager.target(), n = t.inspectedURL();
299
+ if (!n) return "";
300
+ let r = await t.storageAgent().invoke_getUsageAndQuota({ origin: n });
301
+ if (r.getError()) return "";
302
+ let i = r.usageBreakdown.filter((e) => e.usage).map((e) => We.get(e.storageType)).map((e) => e ? e() : void 0).filter(Boolean);
303
+ return i.length === 1 ? P(N.thereMayBeStoredDataAffectingSingular, { PH1: String(i[0]) }) : i.length > 1 ? P(N.thereMayBeStoredDataAffectingLoadingPlural, { PH1: i.join(", ") }) : "";
304
+ }
305
+ async evaluateInspectedURL() {
306
+ let e = w.instance().primaryPageTarget();
307
+ if (!e) throw Error("Unable to find main target required for Lighthouse");
308
+ let t = e.inspectedURL(), n = e.model(ie), r = n && await n.navigationHistory();
309
+ if (!n || !r) return t;
310
+ let { currentIndex: i, entries: a } = r;
311
+ return a[i].url;
312
+ }
313
+ getCurrentRun() {
314
+ if (this.currentLighthouseRun?.isRunning()) return {
315
+ inspectedURL: this.currentLighthouseRun.inspectedURL,
316
+ categoryIDs: this.currentLighthouseRun.categoryIDs,
317
+ flags: this.currentLighthouseRun.flags,
318
+ isAIControlled: this.currentLighthouseRun.isAIControlled
319
+ };
320
+ }
321
+ getFlags() {
322
+ let e = {};
323
+ for (let t of L()) t.setFlags(e, t.setting.get());
324
+ return e;
325
+ }
326
+ getCategoryIDs() {
327
+ let { mode: e } = this.getFlags(), t = [];
328
+ for (let n of I()) e && !n.supportedModes.includes(e) || n.setting.get() && t.push(n.configID);
329
+ return t;
330
+ }
331
+ async getInspectedURL(e) {
332
+ return (e?.force || !this.inspectedURL) && (this.inspectedURL = await this.evaluateInspectedURL()), this.inspectedURL;
333
+ }
334
+ recomputePageAuditability() {
335
+ let e = this.hasActiveServiceWorker(), t = this.hasAtLeastOneCategory(), n = this.unauditablePageMessage(), r = this.javaScriptDisabled(), i = "";
336
+ e ? i = P(N.multipleTabsAreBeingControlledBy) : t ? n ? i = n : r && (i = P(N.javaScriptDisabled)) : i = P(N.atLeastOneCategoryMustBeSelected), this.dispatchEventToListeners("PageAuditabilityChanged", { helpText: i }), this.hasImportantResourcesNotCleared().then((e) => {
337
+ this.getFlags().mode !== "navigation" && (e = ""), this.dispatchEventToListeners("PageWarningsChanged", { warning: e });
338
+ });
339
+ }
340
+ recordMetrics(e, t) {
341
+ j.actionTaken(ve.LighthouseStarted);
342
+ for (let e of I()) t.includes(e.configID) && j.lighthouseCategoryUsed(e.userMetric);
343
+ switch (e.mode) {
344
+ case "navigation":
345
+ j.lighthouseModeRun(ke.NAVIGATION);
346
+ break;
347
+ case "timespan":
348
+ j.lighthouseModeRun(ke.TIMESPAN);
349
+ break;
350
+ case "snapshot":
351
+ j.lighthouseModeRun(ke.SNAPSHOT);
352
+ break;
353
+ }
354
+ }
355
+ async startLighthouse(e) {
356
+ return this.lastAction && await this.lastAction, this.lastAction = new Promise(async (t) => {
357
+ this.currentLighthouseRun &&= (await this.currentLighthouseRun.cancel(), void 0);
358
+ let n = await this.getInspectedURL({ force: !0 }), r = e?.categoryIds ?? this.getCategoryIDs(), i = this.getFlags();
359
+ e?.mode && (i.mode = e.mode), this.recordMetrics(i, r), this.currentLighthouseRun = new He(this, this.protocolService, n, r, i, !!e?.isAIControlled), await this.currentLighthouseRun.start(), t();
360
+ }), await this.lastAction;
361
+ }
362
+ async collectLighthouseResults() {
363
+ if (!this.currentLighthouseRun) throw Error("Lighthouse is not started");
364
+ let e = await this.currentLighthouseRun.collect();
365
+ return j.actionTaken(ve.LighthouseFinished), this.currentLighthouseRun = void 0, e;
366
+ }
367
+ async cancelLighthouse() {
368
+ return this.lastAction && await this.lastAction, this.lastAction = new Promise(async (e) => {
369
+ this.currentLighthouseRun &&= (await this.currentLighthouseRun.cancel(), void 0), e();
370
+ }), await this.lastAction;
371
+ }
372
+ }, We = new Map([
373
+ [le.StorageType.Local_storage, F(N.localStorage)],
374
+ [le.StorageType.Indexeddb, F(N.indexeddb)],
375
+ [le.StorageType.Websql, F(N.webSql)]
376
+ ]), Ge = null;
377
+ function I() {
378
+ return Ge ||= [
379
+ {
380
+ setting: u.instance().createSetting("lighthouse.cat-perf", !0, d.SYNCED),
381
+ configID: "performance",
382
+ title: F(N.performance),
383
+ description: F(N.howLongDoesThisAppTakeToShow),
384
+ supportedModes: [
385
+ "navigation",
386
+ "timespan",
387
+ "snapshot"
388
+ ],
389
+ userMetric: M.PERFORMANCE
390
+ },
391
+ {
392
+ setting: u.instance().createSetting("lighthouse.cat-a11y", !0, d.SYNCED),
393
+ configID: "accessibility",
394
+ title: F(N.accessibility),
395
+ description: F(N.isThisPageUsableByPeopleWith),
396
+ supportedModes: ["navigation", "snapshot"],
397
+ userMetric: M.ACCESSIBILITY
398
+ },
399
+ {
400
+ setting: u.instance().createSetting("lighthouse.cat-best-practices", !0, d.SYNCED),
401
+ configID: "best-practices",
402
+ title: F(N.bestPractices),
403
+ description: F(N.doesThisPageFollowBestPractices),
404
+ supportedModes: [
405
+ "navigation",
406
+ "timespan",
407
+ "snapshot"
408
+ ],
409
+ userMetric: M.BEST_PRACTICES
410
+ },
411
+ {
412
+ setting: u.instance().createSetting("lighthouse.cat-seo", !0, d.SYNCED),
413
+ configID: "seo",
414
+ title: F(N.seo),
415
+ description: F(N.isThisPageOptimizedForSearch),
416
+ supportedModes: ["navigation", "snapshot"],
417
+ userMetric: M.SEO
418
+ },
419
+ {
420
+ setting: u.instance().createSetting("lighthouse.cat-agentic-browsing", !1, d.SYNCED),
421
+ configID: "agentic-browsing",
422
+ title: F(N.agenticBrowsing),
423
+ description: F(N.agenticBrowsingDescription),
424
+ supportedModes: ["navigation", "snapshot"],
425
+ userMetric: M.AGENTIC_BROWSING
426
+ }
427
+ ], Ge;
428
+ }
429
+ var Ke = null;
430
+ function L() {
431
+ return Ke ||= [
432
+ {
433
+ setting: u.instance().createSetting("lighthouse.device-type", "mobile", d.SYNCED),
434
+ title: F(N.applyMobileEmulation),
435
+ description: F(N.applyMobileEmulationDuring),
436
+ setFlags: (e, t) => {
437
+ e.formFactor = t;
438
+ },
439
+ options: [{
440
+ label: F(N.mobile),
441
+ tooltip: F(N.applyMobileEmulationDuring),
442
+ value: "mobile"
443
+ }, {
444
+ label: F(N.desktop),
445
+ tooltip: F(N.applyDesktopEmulationDuring),
446
+ value: "desktop"
447
+ }]
448
+ },
449
+ {
450
+ setting: u.instance().createSetting("lighthouse.mode", "navigation", d.SYNCED),
451
+ title: F(N.lighthouseMode),
452
+ description: F(N.runLighthouseInMode),
453
+ setFlags: (e, t) => {
454
+ e.mode = t;
455
+ },
456
+ options: [
457
+ {
458
+ label: F(N.navigation),
459
+ tooltip: F(N.navigationTooltip),
460
+ value: "navigation"
461
+ },
462
+ {
463
+ label: F(N.timespan),
464
+ tooltip: F(N.timespanTooltip),
465
+ value: "timespan"
466
+ },
467
+ {
468
+ label: F(N.snapshot),
469
+ tooltip: F(N.snapshotTooltip),
470
+ value: "snapshot"
471
+ }
472
+ ],
473
+ learnMore: "https://github.com/GoogleChrome/lighthouse/blob/HEAD/docs/user-flows.md"
474
+ },
475
+ {
476
+ setting: u.instance().createSetting("lighthouse.throttling", "simulate", d.SYNCED),
477
+ title: F(N.throttlingMethod),
478
+ learnMore: "https://github.com/GoogleChrome/lighthouse/blob/master/docs/throttling.md#devtools-lighthouse-panel-throttling",
479
+ description: F(N.simulateASlowerPageLoadBasedOn),
480
+ setFlags: (e, t) => {
481
+ typeof t == "string" ? e.throttlingMethod = t : e.throttlingMethod = t ? "simulate" : "devtools";
482
+ },
483
+ options: [{
484
+ label: F(N.simulatedThrottling),
485
+ value: "simulate"
486
+ }, {
487
+ label: F(N.devtoolsThrottling),
488
+ value: "devtools"
489
+ }]
490
+ },
491
+ {
492
+ setting: u.instance().createSetting("lighthouse.clear-storage", !0, d.SYNCED),
493
+ title: F(N.clearStorage),
494
+ description: F(N.resetStorageLocalstorage),
495
+ setFlags: (e, t) => {
496
+ e.disableStorageReset = !t;
497
+ }
498
+ },
499
+ {
500
+ setting: u.instance().createSetting("lighthouse.enable-sampling", !1, d.SYNCED),
501
+ title: F(N.enableSampling),
502
+ description: F(N.enableJavaScriptSampling),
503
+ setFlags: (e, t) => {
504
+ t ? e.additionalTraceCategories = "disabled-by-default-v8.cpu_profiler" : e.additionalTraceCategories = "";
505
+ }
506
+ }
507
+ ], Ke;
508
+ }
509
+ var R = /* @__PURE__ */ function(e) {
510
+ return e.PageAuditabilityChanged = "PageAuditabilityChanged", e.PageWarningsChanged = "PageWarningsChanged", e.AuditProgressChanged = "AuditProgressChanged", e;
511
+ }({}), qe = "/*\n * Copyright 2017 The Chromium Authors\n * Use of this source code is governed by a BSD-style license that can be\n * found in the LICENSE file.\n */\n\n.lh-root {\n --report-menu-width: 0;\n\n user-select: text;\n}\n/* for View Trace button */\n\n.lh-audit-group {\n position: relative;\n}\n\nbutton.view-trace {\n margin: 10px;\n}\n\n/** `window.opener` is null for windows opened from DevTools. This breaks\n the LH viewer app, so disable this feature. */\n\n.lh-tools--viewer {\n display: none !important; /* stylelint-disable-line declaration-no-important */\n}\n\n.lighthouse-settings-pane {\n flex: none;\n background-color: var(--sys-color-cdt-base-container);\n border-bottom: 1px solid var(--sys-color-divider);\n}\n\n.lighthouse-settings-pane devtools-toolbar {\n flex: 1 1;\n flex-wrap: wrap;\n}\n\nselect.lighthouse-report {\n min-width: 140px;\n /* Up to 180px wide, but if window is very small ensure dropdown arrow is visible */\n max-width: min(180px, calc(100% - 30px));\n}\n\n.lighthouse-toolbar-container {\n display: flex;\n flex: none;\n}\n\n.lighthouse-toolbar-container > devtools-toolbar {\n background-color: var(--sys-color-cdt-base-container);\n border-bottom: 1px solid var(--sys-color-divider);\n}\n\n.lighthouse-toolbar-container > :first-child {\n flex: 1 1 auto;\n}\n\n.lh-devtools .lh-element-screenshot__overlay {\n position: absolute;\n}\n\n.lighthouse-results-container {\n position: relative;\n\n :focus-visible {\n outline: -webkit-focus-ring-color auto 1px;\n }\n\n .lh-tools__button {\n height: var(--sys-size-9);\n width: var(--sys-size-9);\n min-width: var(--sys-size-9);\n\n &:focus-visible {\n border-radius: var(--sys-shape-corner-full);\n outline: var(--sys-size-2) solid var(--sys-color-state-focus-ring);\n }\n\n &.lh-active + .lh-tools__dropdown {\n clip: rect(-8px, 204px, 270px, -10px); /* stylelint-disable-line property-no-deprecated */\n }\n }\n\n .lh-tools__dropdown {\n padding: var(--sys-size-5) 0;\n border-radius: var(--sys-shape-corner-small);\n box-shadow: var(--sys-elevation-level3);\n top: 24px;\n\n &:hover a:focus {\n background-color: transparent;\n }\n\n a {\n height: var(--sys-size-11);\n padding: 0 var(--sys-size-8);\n white-space: nowrap;\n align-items: center;\n\n &::before {\n content: none;\n }\n }\n }\n\n}\n", Je = /* @__PURE__ */ e({
512
+ CancelledError: () => Xe,
513
+ ProtocolService: () => Ze
514
+ }), Ye = 1, Xe = class extends Error {
515
+ constructor() {
516
+ super("Lighthouse run cancelled");
517
+ }
518
+ }, Ze = class {
519
+ mainSessionId;
520
+ rootTargetId;
521
+ rootTarget;
522
+ lighthouseWorkerPromise;
523
+ lighthouseMessageUpdateCallback;
524
+ removeDialogHandler;
525
+ configForTesting;
526
+ connection;
527
+ #e = /* @__PURE__ */ new Map();
528
+ async attach() {
529
+ await w.instance().suspendAllTargets();
530
+ let e = w.instance().primaryPageTarget();
531
+ if (!e) throw Error("Unable to find main target required for Lighthouse");
532
+ let t = w.instance().rootTarget();
533
+ if (!t) throw Error("Could not find the root target");
534
+ if (!e.model(fe)) throw Error("Unable to find child target manager required for Lighthouse");
535
+ let n = e.model(ie);
536
+ if (!n) throw Error("Unable to find resource tree model required for Lighthouse");
537
+ let r = t.model(fe);
538
+ if (!r) throw Error("Could not find the child target manager class for the root target");
539
+ let a = t.router()?.connection;
540
+ if (!a) throw Error("Expected root target to have a session router");
541
+ let o = await r.getParentTargetId(), { sessionId: s } = await t.targetAgent().invoke_attachToTarget({
542
+ targetId: o,
543
+ flatten: !0
544
+ });
545
+ this.connection = a, this.connection.observe(this);
546
+ let c = e.inspectedURL(), l = i.extractOrigin(c), u = (t) => {
547
+ let n = i.extractOrigin(t.data.url);
548
+ if (!l || n !== l) {
549
+ console.warn(`Lighthouse auto-accept for dialog on ${t.data.url} blocked as it was not from the original audit origin ${c}.`);
550
+ return;
551
+ }
552
+ e.pageAgent().invoke_handleJavaScriptDialog({ accept: !0 });
553
+ };
554
+ n.addEventListener(re.JavaScriptDialogOpening, u), this.removeDialogHandler = () => n.removeEventListener(re.JavaScriptDialogOpening, u), this.rootTargetId = o, this.rootTarget = t, this.mainSessionId = s;
555
+ }
556
+ getLocales() {
557
+ return [a.instance().locale];
558
+ }
559
+ async startTimespan(e) {
560
+ let { inspectedURL: t, categoryIDs: n, flags: r } = e;
561
+ if (!this.mainSessionId || !this.rootTargetId) throw Error("Unable to get target info required for Lighthouse");
562
+ await this.sendWithResponse("startTimespan", {
563
+ url: t,
564
+ categoryIDs: n,
565
+ flags: r,
566
+ config: this.configForTesting,
567
+ locales: this.getLocales(),
568
+ mainSessionId: this.mainSessionId,
569
+ rootTargetId: this.rootTargetId
570
+ });
571
+ }
572
+ async collectLighthouseResults(e) {
573
+ let { inspectedURL: t, categoryIDs: n, flags: r } = e;
574
+ if (!this.mainSessionId || !this.rootTargetId) throw Error("Unable to get target info required for Lighthouse");
575
+ let i = r.mode;
576
+ return i === "timespan" && (i = "endTimespan"), await this.sendWithResponse(i, {
577
+ url: t,
578
+ categoryIDs: n,
579
+ flags: r,
580
+ config: this.configForTesting,
581
+ locales: this.getLocales(),
582
+ mainSessionId: this.mainSessionId,
583
+ rootTargetId: this.rootTargetId
584
+ });
585
+ }
586
+ async detach() {
587
+ for (let e of this.#e.values()) e(new Xe());
588
+ this.#e.clear();
589
+ let e = this.lighthouseWorkerPromise, t = this.rootTarget;
590
+ this.lighthouseWorkerPromise = void 0, this.rootTarget = void 0, this.connection?.unobserve(this), this.connection = void 0, e && (await e).terminate(), t && this.mainSessionId && await t.targetAgent().invoke_detachFromTarget({ sessionId: this.mainSessionId }), await w.instance().resumeAllTargets(), this.removeDialogHandler?.();
591
+ }
592
+ registerStatusCallback(e) {
593
+ this.lighthouseMessageUpdateCallback = e;
594
+ }
595
+ onEvent(e) {
596
+ this.dispatchProtocolMessage(e);
597
+ }
598
+ dispatchProtocolMessage(e) {
599
+ (e.sessionId || "method" in e && e.method?.startsWith("Target")) && this.send("dispatchProtocolMessage", { message: e });
600
+ }
601
+ onDisconnect() {}
602
+ initWorker() {
603
+ return this.lighthouseWorkerPromise = new Promise((e) => {
604
+ let t = new URL("../../entrypoints/lighthouse_worker/lighthouse_worker.js", new URL("panels/lighthouse/LighthouseProtocolService.js", typeof document < "u" ? document.baseURI : new URL("../../", self.location.href).href).href), n = new URL(self.location.href).searchParams.get("remoteBase");
605
+ n && t.searchParams.set("remoteBase", n);
606
+ let r = new Worker(t, { type: "module" });
607
+ r.addEventListener("message", (t) => {
608
+ if (t.data === "workerReady") {
609
+ e(r);
610
+ return;
611
+ }
612
+ this.onWorkerMessage(t);
613
+ });
614
+ }), this.lighthouseWorkerPromise;
615
+ }
616
+ async ensureWorkerExists() {
617
+ let e;
618
+ return e = this.lighthouseWorkerPromise ? await this.lighthouseWorkerPromise : await this.initWorker(), e;
619
+ }
620
+ onWorkerMessage(e) {
621
+ let t = e.data;
622
+ t.action === "statusUpdate" ? this.lighthouseMessageUpdateCallback && t.args && "message" in t.args && this.lighthouseMessageUpdateCallback(t.args.message) : t.action === "sendProtocolMessage" && t.args && "message" in t.args && this.sendProtocolMessage(t.args.message);
623
+ }
624
+ sendProtocolMessage(e) {
625
+ let { id: t, method: n, params: r, sessionId: i } = JSON.parse(e);
626
+ this.connection?.send(n, r, i).then((e) => {
627
+ let n = "result" in e ? {
628
+ id: t,
629
+ sessionId: i,
630
+ result: e.result
631
+ } : {
632
+ id: t,
633
+ sessionId: i,
634
+ error: e.error
635
+ };
636
+ this.dispatchProtocolMessage(n);
637
+ });
638
+ }
639
+ async send(e, t = {}) {
640
+ let n = await this.ensureWorkerExists(), r = Ye++;
641
+ n.postMessage({
642
+ id: r,
643
+ action: e,
644
+ args: {
645
+ ...t,
646
+ id: r
647
+ }
648
+ });
649
+ }
650
+ async sendWithResponse(e, t = {}) {
651
+ let n = await this.ensureWorkerExists(), r = Ye++, i = new Promise((e, t) => {
652
+ let i = (t) => {
653
+ let a = t.data;
654
+ a.id === r && (n.removeEventListener("message", i), this.#e.delete(r), e(a.result));
655
+ };
656
+ n.addEventListener("message", i), this.#e.set(r, (e) => {
657
+ n.removeEventListener("message", i), t(e);
658
+ });
659
+ });
660
+ return n.postMessage({
661
+ id: r,
662
+ action: e,
663
+ args: {
664
+ ...t,
665
+ id: r
666
+ }
667
+ }), await i;
668
+ }
669
+ }, Qe = .8999999999999999, $e = .5, et = .49999999999999994;
670
+ function tt(e) {
671
+ let t = Math.sign(e);
672
+ e = Math.abs(e);
673
+ let n = 1 / (1 + .3275911 * e);
674
+ return t * (1 - n * (.254829592 + n * (-.284496736 + n * (1.421413741 + n * (-1.453152027 + n * 1.061405429)))) * Math.exp(-e * e));
675
+ }
676
+ function nt({ median: e, p10: t }, n) {
677
+ if (e <= 0) throw Error("median must be greater than zero");
678
+ if (t <= 0) throw Error("p10 must be greater than zero");
679
+ if (t >= e) throw Error("p10 must be less than the median");
680
+ if (n <= 0) return 1;
681
+ let r = Math.max(Number.MIN_VALUE, n / e), i = Math.log(r), a = Math.max(Number.MIN_VALUE, t / e), o = -Math.log(a), s = (1 - tt(i * .9061938024368232 / o)) / 2, c;
682
+ return c = n <= t ? Math.max(.9, Math.min(1, s)) : n <= e ? Math.max($e, Math.min(Qe, s)) : Math.max(0, Math.min(et, s)), c;
683
+ }
684
+ var z = "…", rt = "\xA0", it = .9, at = {
685
+ PASS: {
686
+ label: "pass",
687
+ minScore: it
688
+ },
689
+ AVERAGE: {
690
+ label: "average",
691
+ minScore: .5
692
+ },
693
+ FAIL: { label: "fail" },
694
+ ERROR: { label: "error" }
695
+ }, ot = [
696
+ "com",
697
+ "co",
698
+ "gov",
699
+ "edu",
700
+ "ac",
701
+ "org",
702
+ "go",
703
+ "gob",
704
+ "or",
705
+ "net",
706
+ "in",
707
+ "ne",
708
+ "nic",
709
+ "gouv",
710
+ "web",
711
+ "spb",
712
+ "blog",
713
+ "jus",
714
+ "kiev",
715
+ "mil",
716
+ "wi",
717
+ "qc",
718
+ "ca",
719
+ "bel",
720
+ "on"
721
+ ], B = class e {
722
+ static get RATINGS() {
723
+ return at;
724
+ }
725
+ static get PASS_THRESHOLD() {
726
+ return it;
727
+ }
728
+ static get MS_DISPLAY_VALUE() {
729
+ return `%10d${rt}ms`;
730
+ }
731
+ static getFinalDisplayedUrl(e) {
732
+ if (e.finalDisplayedUrl) return e.finalDisplayedUrl;
733
+ if (e.finalUrl) return e.finalUrl;
734
+ throw Error("Could not determine final displayed URL");
735
+ }
736
+ static getMainDocumentUrl(e) {
737
+ return e.mainDocumentUrl || e.finalUrl;
738
+ }
739
+ static getFullPageScreenshot(e) {
740
+ return e.fullPageScreenshot ? e.fullPageScreenshot : e.audits["full-page-screenshot"]?.details;
741
+ }
742
+ static getEntityFromUrl(t, n) {
743
+ return n && n.find((e) => e.origins.find((e) => t.startsWith(e))) || e.getPseudoRootDomain(t);
744
+ }
745
+ static splitMarkdownCodeSpans(e) {
746
+ let t = [], n = e.split(/`(.*?)`/g);
747
+ for (let e = 0; e < n.length; e++) {
748
+ let r = n[e];
749
+ if (!r) continue;
750
+ let i = e % 2 != 0;
751
+ t.push({
752
+ isCode: i,
753
+ text: r
754
+ });
755
+ }
756
+ return t;
757
+ }
758
+ static splitMarkdownLink(e) {
759
+ let t = [], n = e.split(/\[([^\]]+?)\]\((https?:\/\/.*?)\)/g);
760
+ for (; n.length;) {
761
+ let [e, r, i] = n.splice(0, 3);
762
+ e && t.push({
763
+ isLink: !1,
764
+ text: e
765
+ }), r && i && t.push({
766
+ isLink: !0,
767
+ text: r,
768
+ linkHref: i
769
+ });
770
+ }
771
+ return t;
772
+ }
773
+ static truncate(e, t, n = "…") {
774
+ if (e.length <= t) return e;
775
+ let r = new Intl.Segmenter(void 0, { granularity: "grapheme" }).segment(e)[Symbol.iterator](), i = 0;
776
+ for (let a = 0; a <= t - n.length; a++) {
777
+ let t = r.next();
778
+ if (t.done) return e;
779
+ i = t.value.index;
780
+ }
781
+ for (let t = 0; t < n.length; t++) if (r.next().done) return e;
782
+ return e.slice(0, i) + n;
783
+ }
784
+ static getURLDisplayName(e, t) {
785
+ t ||= {
786
+ numPathParts: void 0,
787
+ preserveQuery: void 0,
788
+ preserveHost: void 0
789
+ };
790
+ let n = t.numPathParts === void 0 ? 2 : t.numPathParts, r = t.preserveQuery === void 0 ? !0 : t.preserveQuery, i = t.preserveHost || !1, a;
791
+ if (e.protocol === "about:" || e.protocol === "data:") a = e.href;
792
+ else {
793
+ a = e.pathname;
794
+ let t = a.split("/").filter((e) => e.length);
795
+ n && t.length > n && (a = z + t.slice(-1 * n).join("/")), i && (a = `${e.host}/${a.replace(/^\//, "")}`), r && (a = `${a}${e.search}`);
796
+ }
797
+ 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${z}`), a = a.replace(/([a-zA-Z0-9-_]{9})(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])[a-zA-Z0-9-_]{10,}/g, `$1${z}`), a = a.replace(/(\d{3})\d{6,}/g, `$1${z}`), a = a.replace(/\u2026+/g, z), a.length > 64 && a.includes("?") && (a = a.replace(/\?([^=]*)(=)?.*/, `?$1$2${z}`), a.length > 64 && (a = a.replace(/\?.*/, `?${z}`)))), a.length > 64) {
798
+ let e = a.lastIndexOf(".");
799
+ a = e >= 0 ? a.slice(0, 63 - (a.length - e)) + `${z}${a.slice(e)}` : a.slice(0, 63) + z;
800
+ }
801
+ return a;
802
+ }
803
+ static getChromeExtensionOrigin(e) {
804
+ let t = new URL(e);
805
+ return t.protocol + "//" + t.host;
806
+ }
807
+ static parseURL(t) {
808
+ let n = new URL(t);
809
+ return {
810
+ file: e.getURLDisplayName(n),
811
+ hostname: n.hostname,
812
+ origin: n.protocol === "chrome-extension:" ? e.getChromeExtensionOrigin(t) : n.origin
813
+ };
814
+ }
815
+ static createOrReturnURL(e) {
816
+ return e instanceof URL ? e : new URL(e);
817
+ }
818
+ static getPseudoTld(e) {
819
+ let t = e.split(".").slice(-2);
820
+ return ot.includes(t[0]) ? `.${t.join(".")}` : `.${t[t.length - 1]}`;
821
+ }
822
+ static getPseudoRootDomain(t) {
823
+ let n = e.createOrReturnURL(t).hostname, r = e.getPseudoTld(n).split(".");
824
+ return n.split(".").slice(-r.length).join(".");
825
+ }
826
+ static filterRelevantLines(e, t, n) {
827
+ if (t.length === 0) return e.slice(0, n * 2 + 1);
828
+ let r = /* @__PURE__ */ new Set();
829
+ return t = t.sort((e, t) => (e.lineNumber || 0) - (t.lineNumber || 0)), t.forEach(({ lineNumber: e }) => {
830
+ let t = e - n, i = e + n;
831
+ for (; t < 1;) t++, i++;
832
+ r.has(t - 3 - 1) && (t -= 3);
833
+ for (let e = t; e <= i; e++) {
834
+ let t = e;
835
+ r.add(t);
836
+ }
837
+ }), e.filter((e) => r.has(e.lineNumber));
838
+ }
839
+ static computeLogNormalScore(e, t) {
840
+ let n = nt(e, t);
841
+ return n > .9 && (n += .05 * (n - .9)), Math.floor(n * 100) / 100;
842
+ }
843
+ };
844
+ function st(e) {
845
+ let t = e.createFragment(), n = e.createElement("style");
846
+ n.append("\n .lh-3p-filter {\n color: var(--color-gray-600);\n float: right;\n padding: 6px var(--stackpack-padding-horizontal);\n }\n .lh-3p-filter-label, .lh-3p-filter-input {\n vertical-align: middle;\n user-select: none;\n }\n .lh-3p-filter-input:disabled + .lh-3p-ui-string {\n text-decoration: line-through;\n }\n "), t.append(n);
847
+ let r = e.createElement("div", "lh-3p-filter"), i = e.createElement("label", "lh-3p-filter-label"), a = e.createElement("input", "lh-3p-filter-input");
848
+ a.setAttribute("type", "checkbox"), a.setAttribute("checked", "");
849
+ let o = e.createElement("span", "lh-3p-ui-string");
850
+ o.append("Show 3rd party resources");
851
+ let s = e.createElement("span", "lh-3p-filter-count");
852
+ return i.append(" ", a, " ", o, " (", s, ") "), r.append(" ", i, " "), t.append(r), t;
853
+ }
854
+ function ct(e) {
855
+ let t = e.createFragment(), n = e.createElement("div", "lh-audit"), r = e.createElement("details", "lh-expandable-details"), i = e.createElement("summary"), a = e.createElement("div", "lh-audit__header lh-expandable-details__summary"), o = e.createElement("span", "lh-audit__score-icon"), s = e.createElement("span", "lh-audit__title-and-text"), c = e.createElement("span", "lh-audit__title"), l = e.createElement("span", "lh-audit__display-text");
856
+ s.append(" ", c, " ", l, " ");
857
+ let u = e.createElement("div", "lh-chevron-container");
858
+ a.append(" ", o, " ", s, " ", u, " "), i.append(" ", a, " ");
859
+ let d = e.createElement("div", "lh-audit__description"), f = e.createElement("div", "lh-audit__stackpacks");
860
+ return r.append(" ", i, " ", d, " ", f, " "), n.append(" ", r, " "), t.append(n), t;
861
+ }
862
+ function lt(e) {
863
+ let t = e.createFragment(), n = e.createElement("div", "lh-category-header"), r = e.createElement("div", "lh-score__gauge");
864
+ r.setAttribute("role", "heading"), r.setAttribute("aria-level", "2");
865
+ let i = e.createElement("div", "lh-category-header__description");
866
+ return n.append(" ", r, " ", i, " "), t.append(n), t;
867
+ }
868
+ function ut(e) {
869
+ let t = e.createFragment(), n = e.createElementNS("http://www.w3.org/2000/svg", "svg", "lh-chevron");
870
+ n.setAttribute("viewBox", "0 0 100 100");
871
+ let r = e.createElementNS("http://www.w3.org/2000/svg", "g", "lh-chevron__lines"), i = e.createElementNS("http://www.w3.org/2000/svg", "path", "lh-chevron__line lh-chevron__line-left");
872
+ i.setAttribute("d", "M10 50h40");
873
+ let a = e.createElementNS("http://www.w3.org/2000/svg", "path", "lh-chevron__line lh-chevron__line-right");
874
+ return a.setAttribute("d", "M90 50H50"), r.append(" ", i, " ", a, " "), n.append(" ", r, " "), t.append(n), t;
875
+ }
876
+ function dt(e) {
877
+ let t = e.createFragment(), n = e.createElement("div", "lh-audit-group"), r = e.createElement("details", "lh-clump"), i = e.createElement("summary"), a = e.createElement("div", "lh-audit-group__summary"), o = e.createElement("div", "lh-audit-group__header"), s = e.createElement("span", "lh-audit-group__title"), c = e.createElement("span", "lh-audit-group__itemcount");
878
+ o.append(" ", s, " ", c, " ", " ", " ");
879
+ let l = e.createElement("div", "lh-clump-toggle"), u = e.createElement("span", "lh-clump-toggletext--show"), d = e.createElement("span", "lh-clump-toggletext--hide");
880
+ return l.append(" ", u, " ", d, " "), a.append(" ", o, " ", l, " "), i.append(" ", a, " "), r.append(" ", i, " "), n.append(" ", " ", r, " "), t.append(n), t;
881
+ }
882
+ function ft(e) {
883
+ let t = e.createFragment(), n = e.createElement("div", "lh-crc-container"), r = e.createElement("style");
884
+ r.append("\n .lh-crc .lh-tree-marker {\n width: 12px;\n height: 26px;\n display: block;\n float: left;\n background-position: top left;\n }\n .lh-crc .lh-horiz-down {\n background: url('data:image/svg+xml;utf8,<svg width=\"16\" height=\"26\" viewBox=\"0 0 16 26\" xmlns=\"http://www.w3.org/2000/svg\"><g fill=\"%23D8D8D8\" fill-rule=\"evenodd\"><path d=\"M16 12v2H-2v-2z\"/><path d=\"M9 12v14H7V12z\"/></g></svg>');\n }\n .lh-crc .lh-right {\n background: url('data:image/svg+xml;utf8,<svg width=\"16\" height=\"26\" viewBox=\"0 0 16 26\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M16 12v2H0v-2z\" fill=\"%23D8D8D8\" fill-rule=\"evenodd\"/></svg>');\n }\n .lh-crc .lh-up-right {\n background: url('data:image/svg+xml;utf8,<svg width=\"16\" height=\"26\" viewBox=\"0 0 16 26\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M7 0h2v14H7zm2 12h7v2H9z\" fill=\"%23D8D8D8\" fill-rule=\"evenodd\"/></svg>');\n }\n .lh-crc .lh-vert-right {\n background: url('data:image/svg+xml;utf8,<svg width=\"16\" height=\"26\" viewBox=\"0 0 16 26\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M7 0h2v27H7zm2 12h7v2H9z\" fill=\"%23D8D8D8\" fill-rule=\"evenodd\"/></svg>');\n }\n .lh-crc .lh-vert {\n background: url('data:image/svg+xml;utf8,<svg width=\"16\" height=\"26\" viewBox=\"0 0 16 26\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M7 0h2v26H7z\" fill=\"%23D8D8D8\" fill-rule=\"evenodd\"/></svg>');\n }\n .lh-crc .lh-crc-tree {\n font-size: 14px;\n width: 100%;\n overflow-x: auto;\n }\n .lh-crc .lh-crc-node {\n height: 26px;\n line-height: 26px;\n white-space: nowrap;\n }\n .lh-crc .lh-crc-node__longest {\n color: var(--color-average-secondary);\n }\n .lh-crc .lh-crc-node__tree-value {\n margin-left: 10px;\n }\n .lh-crc .lh-crc-node__tree-value div {\n display: inline;\n }\n .lh-crc .lh-crc-node__chain-duration {\n font-weight: 700;\n }\n .lh-crc .lh-crc-initial-nav {\n color: #595959;\n font-style: italic;\n }\n .lh-crc__summary-value {\n margin-bottom: 10px;\n }\n ");
885
+ let i = e.createElement("div"), a = e.createElement("div", "lh-crc__summary-value"), o = e.createElement("span", "lh-crc__longest_duration_label"), s = e.createElement("b", "lh-crc__longest_duration");
886
+ a.append(" ", o, " ", s, " "), i.append(" ", a, " ");
887
+ let c = e.createElement("div", "lh-crc"), l = e.createElement("div", "lh-crc-initial-nav");
888
+ return c.append(" ", l, " ", " "), n.append(" ", r, " ", i, " ", c, " "), t.append(n), t;
889
+ }
890
+ function pt(e) {
891
+ let t = e.createFragment(), n = e.createElement("div", "lh-crc-node"), r = e.createElement("span", "lh-crc-node__tree-marker"), i = e.createElement("span", "lh-crc-node__tree-value");
892
+ return n.append(" ", r, " ", i, " "), t.append(n), t;
893
+ }
894
+ function mt(e) {
895
+ let t = e.createFragment(), n = e.createElement("div", "lh-element-screenshot"), r = e.createElement("div", "lh-element-screenshot__content"), i = e.createElement("div", "lh-element-screenshot__image"), a = e.createElement("div", "lh-element-screenshot__mask"), o = e.createElementNS("http://www.w3.org/2000/svg", "svg");
896
+ o.setAttribute("height", "0"), o.setAttribute("width", "0");
897
+ let s = e.createElementNS("http://www.w3.org/2000/svg", "defs"), c = e.createElementNS("http://www.w3.org/2000/svg", "clipPath");
898
+ c.setAttribute("clipPathUnits", "objectBoundingBox"), s.append(" ", c, " ", " "), o.append(" ", s, " "), a.append(" ", o, " ");
899
+ let l = e.createElement("div", "lh-element-screenshot__element-marker");
900
+ return i.append(" ", a, " ", l, " "), r.append(" ", i, " "), n.append(" ", r, " "), t.append(n), t;
901
+ }
902
+ function ht(e) {
903
+ let t = e.createFragment(), n = e.createElement("div", "lh-exp-gauge-component"), r = e.createElement("div", "lh-exp-gauge__wrapper");
904
+ r.setAttribute("target", "_blank");
905
+ let i = e.createElement("div", "lh-exp-gauge__svg-wrapper"), a = e.createElementNS("http://www.w3.org/2000/svg", "svg", "lh-exp-gauge"), o = e.createElementNS("http://www.w3.org/2000/svg", "g", "lh-exp-gauge__inner"), s = e.createElementNS("http://www.w3.org/2000/svg", "circle", "lh-exp-gauge__bg"), c = e.createElementNS("http://www.w3.org/2000/svg", "circle", "lh-exp-gauge__base lh-exp-gauge--faded"), l = e.createElementNS("http://www.w3.org/2000/svg", "circle", "lh-exp-gauge__arc"), u = e.createElementNS("http://www.w3.org/2000/svg", "text", "lh-exp-gauge__percentage");
906
+ o.append(" ", s, " ", c, " ", l, " ", u, " ");
907
+ let d = e.createElementNS("http://www.w3.org/2000/svg", "g", "lh-exp-gauge__outer"), f = e.createElementNS("http://www.w3.org/2000/svg", "circle", "lh-cover");
908
+ d.append(" ", f, " ");
909
+ let p = e.createElementNS("http://www.w3.org/2000/svg", "text", "lh-exp-gauge__label");
910
+ return p.setAttribute("text-anchor", "middle"), p.setAttribute("x", "0"), p.setAttribute("y", "60"), a.append(" ", o, " ", d, " ", p, " "), i.append(" ", a, " "), r.append(" ", i, " "), n.append(" ", r, " "), t.append(n), t;
911
+ }
912
+ function gt(e) {
913
+ let t = e.createFragment(), n = e.createElement("style");
914
+ n.append("\n .lh-footer {\n padding: var(--footer-padding-vertical) calc(var(--default-padding) * 2);\n max-width: var(--report-content-max-width);\n margin: 0 auto;\n }\n .lh-footer .lh-generated {\n text-align: center;\n }\n "), t.append(n);
915
+ let r = e.createElement("footer", "lh-footer"), i = e.createElement("ul", "lh-meta__items");
916
+ i.append(" ");
917
+ let a = e.createElement("div", "lh-generated"), o = e.createElement("b");
918
+ o.append("Lighthouse");
919
+ let s = e.createElement("span", "lh-footer__version"), c = e.createElement("a", "lh-footer__version_issue");
920
+ return c.setAttribute("href", "https://github.com/GoogleChrome/Lighthouse/issues"), c.setAttribute("target", "_blank"), c.setAttribute("rel", "noopener"), c.append("File an issue"), a.append(" ", " Generated by ", o, " ", s, " | ", c, " "), r.append(" ", i, " ", a, " "), t.append(r), t;
921
+ }
922
+ function _t(e) {
923
+ let t = e.createFragment(), n = e.createElement("a", "lh-fraction__wrapper"), r = e.createElement("div", "lh-fraction__content-wrapper"), i = e.createElement("div", "lh-fraction__content"), a = e.createElement("div", "lh-fraction__background");
924
+ i.append(" ", a, " "), r.append(" ", i, " ");
925
+ let o = e.createElement("div", "lh-fraction__label");
926
+ return n.append(" ", r, " ", o, " "), t.append(n), t;
927
+ }
928
+ function vt(e) {
929
+ let t = e.createFragment(), n = e.createElement("a", "lh-gauge__wrapper"), r = e.createElement("div", "lh-gauge__svg-wrapper"), i = e.createElementNS("http://www.w3.org/2000/svg", "svg", "lh-gauge");
930
+ i.setAttribute("viewBox", "0 0 120 120");
931
+ let a = e.createElementNS("http://www.w3.org/2000/svg", "circle", "lh-gauge-base");
932
+ a.setAttribute("r", "56"), a.setAttribute("cx", "60"), a.setAttribute("cy", "60"), a.setAttribute("stroke-width", "8");
933
+ let o = e.createElementNS("http://www.w3.org/2000/svg", "circle", "lh-gauge-arc");
934
+ o.setAttribute("r", "56"), o.setAttribute("cx", "60"), o.setAttribute("cy", "60"), o.setAttribute("stroke-width", "8"), i.append(" ", a, " ", o, " "), r.append(" ", i, " ");
935
+ let s = e.createElement("div", "lh-gauge__percentage"), c = e.createElement("div", "lh-gauge__label");
936
+ return n.append(" ", " ", r, " ", s, " ", " ", c, " "), t.append(n), t;
937
+ }
938
+ function yt(e) {
939
+ let t = e.createFragment(), n = e.createElement("style");
940
+ n.append("\n /* CSS Fireworks. Originally by Eddie Lin\n https://codepen.io/paulirish/pen/yEVMbP\n */\n .lh-pyro {\n display: none;\n z-index: 1;\n pointer-events: none;\n }\n .lh-score100 .lh-pyro {\n display: block;\n }\n .lh-score100 .lh-lighthouse stop:first-child {\n stop-color: hsla(200, 12%, 95%, 0);\n }\n .lh-score100 .lh-lighthouse stop:last-child {\n stop-color: hsla(65, 81%, 76%, 1);\n }\n\n .lh-pyro > .lh-pyro-before, .lh-pyro > .lh-pyro-after {\n position: absolute;\n width: 5px;\n height: 5px;\n border-radius: 2.5px;\n box-shadow: 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff;\n animation: 1s bang ease-out infinite backwards, 1s gravity ease-in infinite backwards, 5s position linear infinite backwards;\n animation-delay: 1s, 1s, 1s;\n }\n\n .lh-pyro > .lh-pyro-after {\n animation-delay: 2.25s, 2.25s, 2.25s;\n animation-duration: 1.25s, 1.25s, 6.25s;\n }\n\n @keyframes bang {\n to {\n opacity: 1;\n box-shadow: -70px -115.67px #47ebbc, -28px -99.67px #eb47a4, 58px -31.67px #7eeb47, 13px -141.67px #eb47c5, -19px 6.33px #7347eb, -2px -74.67px #ebd247, 24px -151.67px #eb47e0, 57px -138.67px #b4eb47, -51px -104.67px #479eeb, 62px 8.33px #ebcf47, -93px 0.33px #d547eb, -16px -118.67px #47bfeb, 53px -84.67px #47eb83, 66px -57.67px #eb47bf, -93px -65.67px #91eb47, 30px -13.67px #86eb47, -2px -59.67px #83eb47, -44px 1.33px #eb47eb, 61px -58.67px #47eb73, 5px -22.67px #47e8eb, -66px -28.67px #ebe247, 42px -123.67px #eb5547, -75px 26.33px #7beb47, 15px -52.67px #a147eb, 36px -51.67px #eb8347, -38px -12.67px #eb5547, -46px -59.67px #47eb81, 78px -114.67px #eb47ba, 15px -156.67px #eb47bf, -36px 1.33px #eb4783, -72px -86.67px #eba147, 31px -46.67px #ebe247, -68px 29.33px #47e2eb, -55px 19.33px #ebe047, -56px 27.33px #4776eb, -13px -91.67px #eb5547, -47px -138.67px #47ebc7, -18px -96.67px #eb47ac, 11px -88.67px #4783eb, -67px -28.67px #47baeb, 53px 10.33px #ba47eb, 11px 19.33px #5247eb, -5px -11.67px #eb4791, -68px -4.67px #47eba7, 95px -37.67px #eb478b, -67px -162.67px #eb5d47, -54px -120.67px #eb6847, 49px -12.67px #ebe047, 88px 8.33px #47ebda, 97px 33.33px #eb8147, 6px -71.67px #ebbc47;\n }\n }\n @keyframes gravity {\n from {\n opacity: 1;\n }\n to {\n transform: translateY(80px);\n opacity: 0;\n }\n }\n @keyframes position {\n 0%, 19.9% {\n margin-top: 4%;\n margin-left: 47%;\n }\n 20%, 39.9% {\n margin-top: 7%;\n margin-left: 30%;\n }\n 40%, 59.9% {\n margin-top: 6%;\n margin-left: 70%;\n }\n 60%, 79.9% {\n margin-top: 3%;\n margin-left: 20%;\n }\n 80%, 99.9% {\n margin-top: 3%;\n margin-left: 80%;\n }\n }\n "), t.append(n);
941
+ let r = e.createElement("div", "lh-header-container"), i = e.createElement("div", "lh-scores-wrapper-placeholder");
942
+ return r.append(" ", i, " "), t.append(r), t;
943
+ }
944
+ function bt(e) {
945
+ let t = e.createFragment(), n = e.createElement("div", "lh-metric"), r = e.createElement("div", "lh-metric__innerwrap"), i = e.createElement("div", "lh-metric__icon"), a = e.createElement("span", "lh-metric__title"), o = e.createElement("div", "lh-metric__value"), s = e.createElement("div", "lh-metric__description");
946
+ return r.append(" ", i, " ", a, " ", o, " ", s, " "), n.append(" ", r, " "), t.append(n), t;
947
+ }
948
+ function xt(e) {
949
+ let t = e.createFragment(), n = e.createElement("div", "lh-scorescale"), r = e.createElement("span", "lh-scorescale-range lh-scorescale-range--fail");
950
+ r.append("0–49");
951
+ let i = e.createElement("span", "lh-scorescale-range lh-scorescale-range--average");
952
+ i.append("50–89");
953
+ let a = e.createElement("span", "lh-scorescale-range lh-scorescale-range--pass");
954
+ return a.append("90–100"), n.append(" ", r, " ", i, " ", a, " "), t.append(n), t;
955
+ }
956
+ function St(e) {
957
+ let t = e.createFragment(), n = e.createElement("style");
958
+ n.append("\n .lh-scores-container {\n display: flex;\n flex-direction: column;\n padding: var(--default-padding) 0;\n position: relative;\n width: 100%;\n }\n\n .lh-sticky-header {\n --gauge-circle-size: var(--gauge-circle-size-sm);\n --plugin-badge-size: 16px;\n --plugin-icon-size: 75%;\n --gauge-wrapper-width: 60px;\n --gauge-percentage-font-size: 13px;\n position: fixed;\n left: 0;\n right: 0;\n top: var(--topbar-height);\n font-weight: 500;\n display: none;\n justify-content: center;\n background-color: var(--sticky-header-background-color);\n border-bottom: 1px solid var(--color-gray-200);\n padding-top: var(--score-container-padding);\n padding-bottom: 4px;\n z-index: 2;\n pointer-events: none;\n }\n\n .lh-devtools .lh-sticky-header {\n /* The report within DevTools is placed in a container with overflow, which changes the placement of this header unless we change `position` to `sticky.` */\n position: sticky;\n }\n\n .lh-sticky-header--visible {\n display: grid;\n grid-auto-flow: column;\n pointer-events: auto;\n }\n\n /* Disable the gauge arc animation for the sticky header, so toggling display: none\n does not play the animation. */\n .lh-sticky-header .lh-gauge-arc {\n animation: none;\n }\n\n .lh-sticky-header .lh-gauge__label,\n .lh-sticky-header .lh-fraction__label {\n display: none;\n }\n\n .lh-highlighter {\n width: var(--gauge-wrapper-width);\n height: 1px;\n background-color: var(--highlighter-background-color);\n /* Position at bottom of first gauge in sticky header. */\n position: absolute;\n grid-column: 1;\n bottom: -1px;\n left: 0px;\n right: 0px;\n }\n "), t.append(n);
959
+ let r = e.createElement("div", "lh-scores-wrapper"), i = e.createElement("div", "lh-scores-container"), a = e.createElement("div", "lh-pyro"), o = e.createElement("div", "lh-pyro-before"), s = e.createElement("div", "lh-pyro-after");
960
+ return a.append(" ", o, " ", s, " "), i.append(" ", a, " "), r.append(" ", i, " "), t.append(r), t;
961
+ }
962
+ function Ct(e) {
963
+ let t = e.createFragment(), n = e.createElement("div", "lh-snippet"), r = e.createElement("style");
964
+ return r.append("\n :root {\n --snippet-highlight-light: #fbf1f2;\n --snippet-highlight-dark: #ffd6d8;\n }\n\n .lh-snippet__header {\n position: relative;\n overflow: hidden;\n padding: 10px;\n border-bottom: none;\n color: var(--snippet-color);\n background-color: var(--snippet-background-color);\n border: 1px solid var(--report-border-color-secondary);\n }\n .lh-snippet__title {\n font-weight: bold;\n float: left;\n }\n .lh-snippet__node {\n float: left;\n margin-left: 4px;\n }\n .lh-snippet__toggle-expand {\n padding: 1px 7px;\n margin-top: -1px;\n margin-right: -7px;\n float: right;\n background: transparent;\n border: none;\n cursor: pointer;\n font-size: 14px;\n color: #0c50c7;\n }\n\n .lh-snippet__snippet {\n overflow: auto;\n border: 1px solid var(--report-border-color-secondary);\n }\n /* Container needed so that all children grow to the width of the scroll container */\n .lh-snippet__snippet-inner {\n display: inline-block;\n min-width: 100%;\n }\n\n .lh-snippet:not(.lh-snippet--expanded) .lh-snippet__show-if-expanded {\n display: none;\n }\n .lh-snippet.lh-snippet--expanded .lh-snippet__show-if-collapsed {\n display: none;\n }\n\n .lh-snippet__line {\n background: white;\n white-space: pre;\n display: flex;\n }\n .lh-snippet__line:not(.lh-snippet__line--message):first-child {\n padding-top: 4px;\n }\n .lh-snippet__line:not(.lh-snippet__line--message):last-child {\n padding-bottom: 4px;\n }\n .lh-snippet__line--content-highlighted {\n background: var(--snippet-highlight-dark);\n }\n .lh-snippet__line--message {\n background: var(--snippet-highlight-light);\n }\n .lh-snippet__line--message .lh-snippet__line-number {\n padding-top: 10px;\n padding-bottom: 10px;\n }\n .lh-snippet__line--message code {\n padding: 10px;\n padding-left: 5px;\n color: var(--color-fail);\n font-family: var(--report-font-family);\n }\n .lh-snippet__line--message code {\n white-space: normal;\n }\n .lh-snippet__line-icon {\n padding-top: 10px;\n display: none;\n }\n .lh-snippet__line--message .lh-snippet__line-icon {\n display: block;\n }\n .lh-snippet__line-icon:before {\n content: \"\";\n display: inline-block;\n vertical-align: middle;\n margin-right: 4px;\n width: var(--score-icon-size);\n height: var(--score-icon-size);\n background-image: var(--fail-icon-url);\n }\n .lh-snippet__line-number {\n flex-shrink: 0;\n width: 40px;\n text-align: right;\n font-family: monospace;\n padding-right: 5px;\n margin-right: 5px;\n color: var(--color-gray-600);\n user-select: none;\n }\n "), n.append(" ", r, " "), t.append(n), t;
965
+ }
966
+ function wt(e) {
967
+ let t = e.createFragment(), n = e.createElement("div", "lh-snippet__snippet"), r = e.createElement("div", "lh-snippet__snippet-inner");
968
+ return n.append(" ", r, " "), t.append(n), t;
969
+ }
970
+ function Tt(e) {
971
+ let t = e.createFragment(), n = e.createElement("div", "lh-snippet__header"), r = e.createElement("div", "lh-snippet__title"), i = e.createElement("div", "lh-snippet__node"), a = e.createElement("button", "lh-snippet__toggle-expand"), o = e.createElement("span", "lh-snippet__btn-label-collapse lh-snippet__show-if-expanded"), s = e.createElement("span", "lh-snippet__btn-label-expand lh-snippet__show-if-collapsed");
972
+ return a.append(" ", o, " ", s, " "), n.append(" ", r, " ", i, " ", a, " "), t.append(n), t;
973
+ }
974
+ function Et(e) {
975
+ let t = e.createFragment(), n = e.createElement("div", "lh-snippet__line"), r = e.createElement("div", "lh-snippet__line-number"), i = e.createElement("div", "lh-snippet__line-icon"), a = e.createElement("code");
976
+ return n.append(" ", r, " ", i, " ", a, " "), t.append(n), t;
977
+ }
978
+ function Dt(e) {
979
+ let t = e.createFragment(), n = e.createElement("style");
980
+ return n.append("/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/*\n Naming convention:\n\n If a variable is used for a specific component: --{component}-{property name}-{modifier}\n\n Both {component} and {property name} should be kebab-case. If the target is the entire page,\n use 'report' for the component. The property name should not be abbreviated. Use the\n property name the variable is intended for - if it's used for multiple, a common descriptor\n is fine (ex: 'size' for a variable applied to 'width' and 'height'). If a variable is shared\n across multiple components, either create more variables or just drop the \"{component}-\"\n part of the name. Append any modifiers at the end (ex: 'big', 'dark').\n\n For colors: --color-{hue}-{intensity}\n\n {intensity} is the Material Design tag - 700, A700, etc.\n*/\n.lh-vars {\n /* Palette using Material Design Colors\n * https://www.materialui.co/colors */\n --color-amber-50: #FFF8E1;\n --color-blue-200: #90CAF9;\n --color-blue-900: #0D47A1;\n --color-blue-A700: #2962FF;\n --color-blue-primary: #06f;\n --color-cyan-500: #00BCD4;\n --color-gray-100: #F5F5F5;\n --color-gray-300: #CFCFCF;\n --color-gray-200: #E0E0E0;\n --color-gray-400: #BDBDBD;\n --color-gray-50: #FAFAFA;\n --color-gray-500: #9E9E9E;\n --color-gray-600: #757575;\n --color-gray-700: #616161;\n --color-gray-800: #424242;\n --color-gray-900: #212121;\n --color-gray: #000000;\n --color-green-700: #080;\n --color-green: #0c6;\n --color-lime-400: #D3E156;\n --color-orange-50: #FFF3E0;\n --color-orange-700: #C33300;\n --color-orange: #fa3;\n --color-red-700: #c00;\n --color-red: #f33;\n --color-teal-600: #00897B;\n --color-white: #FFFFFF;\n\n /* Context-specific colors */\n --color-average-secondary: var(--color-orange-700);\n --color-average: var(--color-orange);\n --color-fail-secondary: var(--color-red-700);\n --color-fail: var(--color-red);\n --color-hover: var(--color-gray-50);\n --color-informative: var(--color-blue-900);\n --color-pass-secondary: var(--color-green-700);\n --color-pass: var(--color-green);\n --color-not-applicable: var(--color-gray-600);\n\n /* Component variables */\n --audit-description-padding-left: calc(var(--score-icon-size) + var(--score-icon-margin-left) + var(--score-icon-margin-right));\n --audit-explanation-line-height: 16px;\n --audit-group-margin-bottom: calc(var(--default-padding) * 6);\n --audit-group-padding-vertical: 8px;\n --audit-margin-horizontal: 5px;\n --audit-padding-vertical: 8px;\n --category-padding: calc(var(--default-padding) * 6) var(--edge-gap-padding) calc(var(--default-padding) * 4);\n --chevron-line-stroke: var(--color-gray-600);\n --chevron-size: 12px;\n --default-padding: 8px;\n --edge-gap-padding: calc(var(--default-padding) * 4);\n --env-item-background-color: var(--color-gray-100);\n --env-item-font-size: 28px;\n --env-item-line-height: 36px;\n --env-item-padding: 10px 0px;\n --env-name-min-width: 220px;\n --footer-padding-vertical: 16px;\n --gauge-circle-size-big: 96px;\n --gauge-circle-size: 48px;\n --gauge-circle-size-sm: 32px;\n --gauge-label-font-size-big: 18px;\n --gauge-label-font-size: var(--report-font-size-secondary);\n --gauge-label-line-height-big: 24px;\n --gauge-label-line-height: var(--report-line-height-secondary);\n --gauge-percentage-font-size-big: 38px;\n --gauge-percentage-font-size: var(--report-font-size-secondary);\n --gauge-wrapper-width: 120px;\n --header-line-height: 24px;\n --highlighter-background-color: var(--report-text-color);\n --icon-square-size: calc(var(--score-icon-size) * 0.88);\n --image-preview-size: 48px;\n --link-color: var(--color-blue-primary);\n --locale-selector-background-color: var(--color-white);\n --metric-toggle-lines-fill: #7F7F7F;\n --metric-value-font-size: calc(var(--report-font-size) * 1.8);\n --metrics-toggle-background-color: var(--color-gray-200);\n --plugin-badge-background-color: var(--color-white);\n --plugin-badge-size-big: calc(var(--gauge-circle-size-big) / 2.7);\n --plugin-badge-size: calc(var(--gauge-circle-size) / 2.7);\n --plugin-icon-size: 65%;\n --report-background-color: #fff;\n --report-border-color-secondary: #ebebeb;\n --report-font-family-monospace: monospace, 'Roboto Mono', 'Menlo', 'dejavu sans mono', 'Consolas', 'Lucida Console';\n --report-font-family: system-ui, Roboto, Helvetica, Arial, sans-serif;\n --report-font-size: 14px;\n --report-font-size-secondary: 12px;\n --report-icon-size: var(--score-icon-background-size);\n --report-line-height: 24px;\n --report-line-height-secondary: 20px;\n --report-monospace-font-size: calc(var(--report-font-size) * 0.85);\n --report-text-color-secondary: var(--color-gray-800);\n --report-text-color: var(--color-gray-900);\n --report-content-max-width: calc(60 * var(--report-font-size)); /* defaults to 840px */\n --report-content-min-width: 360px;\n --report-content-max-width-minus-edge-gap: calc(var(--report-content-max-width) - var(--edge-gap-padding) * 2);\n --score-container-padding: 8px;\n --score-icon-background-size: 24px;\n --score-icon-margin-left: 6px;\n --score-icon-margin-right: 14px;\n --score-icon-margin: 0 var(--score-icon-margin-right) 0 var(--score-icon-margin-left);\n --score-icon-size: 12px;\n --score-icon-size-big: 16px;\n --screenshot-overlay-background: rgba(0, 0, 0, 0.3);\n --section-padding-vertical: calc(var(--default-padding) * 6);\n --snippet-background-color: var(--color-gray-50);\n --snippet-color: #0938C2;\n --stackpack-padding-horizontal: 10px;\n --sticky-header-background-color: var(--report-background-color);\n --sticky-header-buffer: var(--topbar-height);\n --sticky-header-height: calc(var(--gauge-circle-size-sm) + var(--score-container-padding) * 2 + 1em);\n --table-group-header-background-color: #EEF1F4;\n --table-group-header-text-color: var(--color-gray-700);\n --table-higlight-background-color: #F5F7FA;\n --tools-icon-color: var(--color-gray-600);\n --topbar-background-color: var(--color-white);\n --topbar-height: 32px;\n --topbar-logo-size: 24px;\n --topbar-padding: 0 8px;\n --toplevel-warning-background-color: hsla(30, 100%, 75%, 10%);\n --toplevel-warning-message-text-color: var(--color-average-secondary);\n --toplevel-warning-padding: 18px;\n --toplevel-warning-text-color: var(--report-text-color);\n\n /* SVGs */\n --plugin-icon-url-dark: url('data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" fill=\"%23FFFFFF\"><path d=\"M0 0h24v24H0z\" fill=\"none\"/><path d=\"M20.5 11H19V7c0-1.1-.9-2-2-2h-4V3.5C13 2.12 11.88 1 10.5 1S8 2.12 8 3.5V5H4c-1.1 0-1.99.9-1.99 2v3.8H3.5c1.49 0 2.7 1.21 2.7 2.7s-1.21 2.7-2.7 2.7H2V20c0 1.1.9 2 2 2h3.8v-1.5c0-1.49 1.21-2.7 2.7-2.7 1.49 0 2.7 1.21 2.7 2.7V22H17c1.1 0 2-.9 2-2v-4h1.5c1.38 0 2.5-1.12 2.5-2.5S21.88 11 20.5 11z\"/></svg>');\n --plugin-icon-url: url('data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" fill=\"%23757575\"><path d=\"M0 0h24v24H0z\" fill=\"none\"/><path d=\"M20.5 11H19V7c0-1.1-.9-2-2-2h-4V3.5C13 2.12 11.88 1 10.5 1S8 2.12 8 3.5V5H4c-1.1 0-1.99.9-1.99 2v3.8H3.5c1.49 0 2.7 1.21 2.7 2.7s-1.21 2.7-2.7 2.7H2V20c0 1.1.9 2 2 2h3.8v-1.5c0-1.49 1.21-2.7 2.7-2.7 1.49 0 2.7 1.21 2.7 2.7V22H17c1.1 0 2-.9 2-2v-4h1.5c1.38 0 2.5-1.12 2.5-2.5S21.88 11 20.5 11z\"/></svg>');\n\n --pass-icon-url: url('data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 48 48\"><title>check</title><path fill=\"%23178239\" d=\"M24 4C12.95 4 4 12.95 4 24c0 11.04 8.95 20 20 20 11.04 0 20-8.96 20-20 0-11.05-8.96-20-20-20zm-4 30L10 24l2.83-2.83L20 28.34l15.17-15.17L38 16 20 34z\"/></svg>');\n --average-icon-url: url('data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 48 48\"><title>info</title><path fill=\"%23E67700\" d=\"M24 4C12.95 4 4 12.95 4 24s8.95 20 20 20 20-8.95 20-20S35.05 4 24 4zm2 30h-4V22h4v12zm0-16h-4v-4h4v4z\"/></svg>');\n --fail-icon-url: url('data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 48 48\"><title>warn</title><path fill=\"%23C7221F\" d=\"M2 42h44L24 4 2 42zm24-6h-4v-4h4v4zm0-8h-4v-8h4v8z\"/></svg>');\n --error-icon-url: url('data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 3 15\"><title>error</title><path d=\"M0 15H 3V 12H 0V\" fill=\"%23FF4E42\"/><path d=\"M0 9H 3V 0H 0V\" fill=\"%23FF4E42\"/></svg>');\n\n --swap-locale-icon-url: url('data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 0 24 24\" width=\"24px\" fill=\"%23000000\"><path d=\"M0 0h24v24H0V0z\" fill=\"none\"/><path 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\"/></svg>');\n \n --baseline-high-icon-url: url(\"data:image/svg+xml;utf8,<svg width='18' height='10' viewBox='0 0 540 300' fill='none' xmlns='http://www.w3.org/2000/svg'> <path d='M420 30L390 60L480 150L390 240L330 180L300 210L390 300L540 150L420 30Z' fill='%23C4EED0'/> <path d='M150 0L30 120L60 150L150 60L210 120L240 90L150 0Z' fill='%23C4EED0'/> <path d='M390 0L420 30L150 300L0 150L30 120L150 240L390 0Z' fill='%231EA446'/> </svg>\");\n --baseline-low-icon-url: url(\"data:image/svg+xml;utf8,<svg width='18' height='10' viewBox='0 0 540 300' fill='none' xmlns='http://www.w3.org/2000/svg'> <path d='M150 0L180 30L150 60L120 30L150 0Z' fill='%23A8C7FA'/> <path d='M210 60L240 90L210 120L180 90L210 60Z' fill='%23A8C7FA'/> <path d='M450 60L480 90L450 120L420 90L450 60Z' fill='%23A8C7FA'/> <path d='M510 120L540 150L510 180L480 150L510 120Z' fill='%23A8C7FA'/> <path d='M450 180L480 210L450 240L420 210L450 180Z' fill='%23A8C7FA'/> <path d='M390 240L420 270L390 300L360 270L390 240Z' fill='%23A8C7FA'/> <path d='M330 180L360 210L330 240L300 210L330 180Z' fill='%23A8C7FA'/> <path d='M90 60L120 90L90 120L60 90L90 60Z' fill='%23A8C7FA'/> <path d='M390 0L420 30L150 300L0 150L30 120L150 240L390 0Z' fill='%231B6EF3'/> </svg>\");\n --baseline-limited-icon-url: url(\"data:image/svg+xml;utf8,<svg width='18' height='10' viewBox='0 0 540 300' fill='none' xmlns='http://www.w3.org/2000/svg'> <path d='M150 0L240 90L210 120L120 30L150 0Z' fill='%23F09409'/> <path d='M420 30L540 150L420 270L390 240L480 150L390 60L420 30Z' fill='%23C6C6C6'/> <path d='M330 180L300 210L390 300L420 270L330 180Z' fill='%23F09409'/> <path d='M120 30L150 60L60 150L150 240L120 270L0 150L120 30Z' fill='%23C6C6C6'/> <path d='M390 0L420 30L150 300L120 270L390 0Z' fill='%23F09409'/> </svg>\");\n}\n\n@media not print {\n .lh-dark {\n /* Pallete */\n --color-gray-200: var(--color-gray-800);\n --color-gray-300: #616161;\n --color-gray-400: var(--color-gray-600);\n --color-gray-700: var(--color-gray-400);\n --color-gray-50: #757575;\n --color-gray-600: var(--color-gray-500);\n --color-green-700: var(--color-green);\n --color-orange-700: var(--color-orange);\n --color-red-700: var(--color-red);\n --color-teal-600: var(--color-cyan-500);\n\n /* Context-specific colors */\n --color-hover: rgba(0, 0, 0, 0.2);\n --color-informative: var(--color-blue-200);\n\n /* Component variables */\n --env-item-background-color: #393535;\n --link-color: var(--color-blue-200);\n --locale-selector-background-color: var(--color-gray-200);\n --plugin-badge-background-color: var(--color-gray-800);\n --report-background-color: var(--color-gray-900);\n --report-border-color-secondary: var(--color-gray-200);\n --report-text-color-secondary: var(--color-gray-400);\n --report-text-color: var(--color-gray-100);\n --snippet-color: var(--color-cyan-500);\n --topbar-background-color: var(--color-gray);\n --toplevel-warning-background-color: hsl(33deg 14% 18%);\n --toplevel-warning-message-text-color: var(--color-orange-700);\n --toplevel-warning-text-color: var(--color-gray-100);\n --table-group-header-background-color: rgba(186, 196, 206, 0.15);\n --table-group-header-text-color: var(--color-gray-100);\n --table-higlight-background-color: rgba(186, 196, 206, 0.09);\n\n /* SVGs */\n --plugin-icon-url: var(--plugin-icon-url-dark);\n }\n}\n\n/**\n* This media query is a temporary fallback for browsers that do not support `@container query`.\n* TODO: remove this media query when `@container query` is fully supported by browsers\n* See https://github.com/GoogleChrome/lighthouse/pull/16332\n*/\n@media only screen and (max-width: 480px) {\n .lh-vars {\n --audit-group-margin-bottom: 20px;\n --edge-gap-padding: var(--default-padding);\n --env-name-min-width: 120px;\n --gauge-circle-size-big: 96px;\n --gauge-circle-size: 72px;\n --gauge-label-font-size-big: 22px;\n --gauge-label-font-size: 14px;\n --gauge-label-line-height-big: 26px;\n --gauge-label-line-height: 20px;\n --gauge-percentage-font-size-big: 34px;\n --gauge-percentage-font-size: 26px;\n --gauge-wrapper-width: 112px;\n --header-padding: 16px 0 16px 0;\n --image-preview-size: 24px;\n --plugin-icon-size: 75%;\n --report-font-size: 14px;\n --report-line-height: 20px;\n --score-icon-margin-left: 2px;\n --score-icon-size: 10px;\n --topbar-height: 28px;\n --topbar-logo-size: 20px;\n }\n}\n\n@container lh-container (max-width: 480px) {\n .lh-vars {\n --audit-group-margin-bottom: 20px;\n --edge-gap-padding: var(--default-padding);\n --env-name-min-width: 120px;\n --gauge-circle-size-big: 96px;\n --gauge-circle-size: 72px;\n --gauge-label-font-size-big: 22px;\n --gauge-label-font-size: 14px;\n --gauge-label-line-height-big: 26px;\n --gauge-label-line-height: 20px;\n --gauge-percentage-font-size-big: 34px;\n --gauge-percentage-font-size: 26px;\n --gauge-wrapper-width: 112px;\n --header-padding: 16px 0 16px 0;\n --image-preview-size: 24px;\n --plugin-icon-size: 75%;\n --report-font-size: 14px;\n --report-line-height: 20px;\n --score-icon-margin-left: 2px;\n --score-icon-size: 10px;\n --topbar-height: 28px;\n --topbar-logo-size: 20px;\n }\n}\n\n.lh-vars.lh-devtools {\n --audit-explanation-line-height: 14px;\n --audit-group-margin-bottom: 20px;\n --audit-group-padding-vertical: 12px;\n --audit-padding-vertical: 4px;\n --category-padding: 12px;\n --default-padding: 12px;\n --env-name-min-width: 120px;\n --footer-padding-vertical: 8px;\n --gauge-circle-size-big: 72px;\n --gauge-circle-size: 64px;\n --gauge-label-font-size-big: 22px;\n --gauge-label-font-size: 14px;\n --gauge-label-line-height-big: 26px;\n --gauge-label-line-height: 20px;\n --gauge-percentage-font-size-big: 34px;\n --gauge-percentage-font-size: 26px;\n --gauge-wrapper-width: 97px;\n --header-line-height: 20px;\n --header-padding: 16px 0 16px 0;\n --screenshot-overlay-background: transparent;\n --plugin-icon-size: 75%;\n --report-font-size: 12px;\n --report-line-height: 20px;\n --score-icon-margin-left: 2px;\n --score-icon-size: 10px;\n --section-padding-vertical: 8px;\n}\n\n.lh-devtools :focus-visible {\n outline: -webkit-focus-ring-color auto 1px;\n}\n\n.lh-container:has(.lh-sticky-header) {\n --sticky-header-buffer: calc(var(--topbar-height) + var(--sticky-header-height));\n}\n\n.lh-container:not(.lh-topbar + .lh-container) {\n --topbar-height: 0;\n --sticky-header-height: 0;\n --sticky-header-buffer: 0;\n}\n\n.lh-max-viewport {\n display: flex;\n flex-direction: column;\n min-height: 100vh;\n width: 100%;\n}\n\n.lh-devtools.lh-root {\n height: 100%;\n}\n.lh-devtools.lh-root img {\n /* Override devtools default 'min-width: 0' so svg without size in a flexbox isn't collapsed. */\n min-width: auto;\n}\n.lh-devtools .lh-container {\n overflow-y: scroll;\n height: calc(100% - var(--topbar-height));\n /** The .lh-container is the scroll parent in DevTools so we exclude the topbar from the sticky header buffer. */\n --sticky-header-buffer: 0;\n}\n.lh-devtools .lh-container:has(.lh-sticky-header) {\n /** The .lh-container is the scroll parent in DevTools so we exclude the topbar from the sticky header buffer. */\n --sticky-header-buffer: var(--sticky-header-height);\n}\n@media print {\n .lh-devtools .lh-container {\n overflow: unset;\n }\n}\n.lh-devtools .lh-sticky-header {\n /* This is normally the height of the topbar, but we want it to stick to the top of our scroll container .lh-container` */\n top: 0;\n}\n.lh-devtools .lh-element-screenshot__overlay {\n position: absolute;\n}\n\n@keyframes fadeIn {\n 0% { opacity: 0;}\n 100% { opacity: 0.6;}\n}\n\n.lh-root *, .lh-root *::before, .lh-root *::after {\n box-sizing: border-box;\n}\n\n.lh-root {\n font-family: var(--report-font-family);\n font-size: var(--report-font-size);\n margin: 0;\n line-height: var(--report-line-height);\n background: var(--report-background-color);\n color: var(--report-text-color);\n}\n\n.lh-root [hidden] {\n display: none !important;\n}\n\n.lh-root pre {\n margin: 0;\n}\n\n.lh-root pre,\n.lh-root code {\n font-family: var(--report-font-family-monospace);\n}\n\n.lh-root details > summary {\n cursor: pointer;\n}\n\n.lh-hidden {\n display: none !important;\n}\n\n.lh-container {\n /*\n Text wrapping in the report is so much FUN!\n We have a `word-break: break-word;` globally here to prevent a few common scenarios, namely\n long non-breakable text (usually URLs) found in:\n 1. The footer\n 2. .lh-node (outerHTML)\n 3. .lh-code\n\n With that sorted, the next challenge is appropriate column sizing and text wrapping inside our\n .lh-details tables. Even more fun.\n * We don't want table headers (\"Est Savings (ms)\") to wrap or their column values, but\n we'd be happy for the URL column to wrap if the URLs are particularly long.\n * We want the narrow columns to remain narrow, providing the most column width for URL\n * We don't want the table to extend past 100% width.\n * Long URLs in the URL column can wrap. Util.getURLDisplayName maxes them out at 64 characters,\n but they do not get any overflow:ellipsis treatment.\n */\n word-break: break-word;\n\n container-name: lh-container;\n container-type: inline-size;\n}\n\n.lh-audit-group a,\n.lh-category-header__description a,\n.lh-audit__description a,\n.lh-warnings a,\n.lh-footer a,\n.lh-table-column--link a {\n color: var(--link-color);\n}\n\n.lh-audit__description, .lh-audit__stackpack, .lh-list-section__description {\n --inner-audit-padding-right: var(--stackpack-padding-horizontal);\n padding-left: var(--audit-description-padding-left);\n padding-right: var(--inner-audit-padding-right);\n padding-top: 8px;\n padding-bottom: 8px;\n}\n\n.lh-details {\n margin-top: var(--default-padding);\n margin-bottom: var(--default-padding);\n margin-left: var(--audit-description-padding-left);\n}\n\n.lh-audit__stackpack {\n display: flex;\n align-items: center;\n}\n\n.lh-audit__stackpack__img {\n max-width: 30px;\n margin-right: var(--default-padding)\n}\n\n/* Report header */\n\n.lh-report-icon {\n display: flex;\n align-items: center;\n padding: 10px 12px;\n cursor: pointer;\n}\n.lh-report-icon[disabled] {\n opacity: 0.3;\n pointer-events: none;\n}\n\n.lh-report-icon::before {\n content: \"\";\n margin: 4px;\n background-repeat: no-repeat;\n width: var(--report-icon-size);\n height: var(--report-icon-size);\n opacity: 0.7;\n display: inline-block;\n vertical-align: middle;\n}\n.lh-report-icon:hover::before {\n opacity: 1;\n}\n.lh-dark .lh-report-icon::before {\n filter: invert(1);\n}\n.lh-report-icon--print::before {\n background-image: url('data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\"><path d=\"M19 8H5c-1.66 0-3 1.34-3 3v6h4v4h12v-4h4v-6c0-1.66-1.34-3-3-3zm-3 11H8v-5h8v5zm3-7c-.55 0-1-.45-1-1s.45-1 1-1 1 .45 1 1-.45 1-1 1zm-1-9H6v4h12V3z\"/><path fill=\"none\" d=\"M0 0h24v24H0z\"/></svg>');\n}\n.lh-report-icon--copy::before {\n background-image: url('data:image/svg+xml;utf8,<svg height=\"24\" viewBox=\"0 0 24 24\" width=\"24\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M0 0h24v24H0z\" fill=\"none\"/><path d=\"M16 1H4c-1.1 0-2 .9-2 2v14h2V3h12V1zm3 4H8c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h11c1.1 0 2-.9 2-2V7c0-1.1-.9-2-2-2zm0 16H8V7h11v14z\"/></svg>');\n}\n.lh-report-icon--open::before {\n background-image: url('data:image/svg+xml;utf8,<svg height=\"24\" viewBox=\"0 0 24 24\" width=\"24\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M0 0h24v24H0z\" fill=\"none\"/><path d=\"M19 4H5c-1.11 0-2 .9-2 2v12c0 1.1.89 2 2 2h4v-2H5V8h14v10h-4v2h4c1.1 0 2-.9 2-2V6c0-1.1-.89-2-2-2zm-7 6l-4 4h3v6h2v-6h3l-4-4z\"/></svg>');\n}\n.lh-report-icon--download::before {\n background-image: url('data:image/svg+xml;utf8,<svg height=\"24\" viewBox=\"0 0 24 24\" width=\"24\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M19 9h-4V3H9v6H5l7 7 7-7zM5 18v2h14v-2H5z\"/><path d=\"M0 0h24v24H0z\" fill=\"none\"/></svg>');\n}\n.lh-report-icon--dark::before {\n background-image:url('data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24\" viewBox=\"0 0 100 125\"><path d=\"M50 23.587c-16.27 0-22.799 12.574-22.799 21.417 0 12.917 10.117 22.451 12.436 32.471h20.726c2.32-10.02 12.436-19.554 12.436-32.471 0-8.843-6.528-21.417-22.799-21.417zM39.637 87.161c0 3.001 1.18 4.181 4.181 4.181h.426l.41 1.231C45.278 94.449 46.042 95 48.019 95h3.963c1.978 0 2.74-.551 3.365-2.427l.409-1.231h.427c3.002 0 4.18-1.18 4.18-4.181V80.91H39.637v6.251zM50 18.265c1.26 0 2.072-.814 2.072-2.073v-9.12C52.072 5.813 51.26 5 50 5c-1.259 0-2.072.813-2.072 2.073v9.12c0 1.259.813 2.072 2.072 2.072zM68.313 23.727c.994.774 2.135.634 2.91-.357l5.614-7.187c.776-.992.636-2.135-.356-2.909-.992-.776-2.135-.636-2.91.357l-5.613 7.186c-.778.993-.636 2.135.355 2.91zM91.157 36.373c-.306-1.222-1.291-1.815-2.513-1.51l-8.85 2.207c-1.222.305-1.814 1.29-1.51 2.512.305 1.223 1.291 1.814 2.513 1.51l8.849-2.206c1.223-.305 1.816-1.291 1.511-2.513zM86.757 60.48l-8.331-3.709c-1.15-.512-2.225-.099-2.736 1.052-.512 1.151-.1 2.224 1.051 2.737l8.33 3.707c1.15.514 2.225.101 2.736-1.05.513-1.149.1-2.223-1.05-2.737zM28.779 23.37c.775.992 1.917 1.131 2.909.357.992-.776 1.132-1.917.357-2.91l-5.615-7.186c-.775-.992-1.917-1.132-2.909-.357s-1.131 1.917-.356 2.909l5.614 7.187zM21.715 39.583c.305-1.223-.288-2.208-1.51-2.513l-8.849-2.207c-1.222-.303-2.208.289-2.513 1.511-.303 1.222.288 2.207 1.511 2.512l8.848 2.206c1.222.304 2.208-.287 2.513-1.509zM21.575 56.771l-8.331 3.711c-1.151.511-1.563 1.586-1.05 2.735.511 1.151 1.586 1.563 2.736 1.052l8.331-3.711c1.151-.511 1.563-1.586 1.05-2.735-.512-1.15-1.585-1.562-2.736-1.052z\"/></svg>');\n}\n.lh-report-icon--treemap::before {\n background-image: url('data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 0 24 24\" width=\"24px\" fill=\"black\"><path d=\"M3 5v14h19V5H3zm2 2h15v4H5V7zm0 10v-4h4v4H5zm6 0v-4h9v4h-9z\"/></svg>');\n}\n\n.lh-report-icon--date::before {\n background-image: url('data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"><path d=\"M7 11h2v2H7v-2zm14-5v14a2 2 0 01-2 2H5a2 2 0 01-2-2V6c0-1.1.9-2 2-2h1V2h2v2h8V2h2v2h1a2 2 0 012 2zM5 8h14V6H5v2zm14 12V10H5v10h14zm-4-7h2v-2h-2v2zm-4 0h2v-2h-2v2z\"/></svg>');\n}\n.lh-report-icon--devices::before {\n background-image: url('data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"><path d=\"M4 6h18V4H4a2 2 0 00-2 2v11H0v3h14v-3H4V6zm19 2h-6a1 1 0 00-1 1v10c0 .6.5 1 1 1h6c.6 0 1-.5 1-1V9c0-.6-.5-1-1-1zm-1 9h-4v-7h4v7z\"/></svg>');\n}\n.lh-report-icon--world::before {\n background-image: url('data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"><path d=\"M12 2a10 10 0 1 0 0 20 10 10 0 0 0 0-20zm7 6h-3c-.3-1.3-.8-2.5-1.4-3.6A8 8 0 0 1 18.9 8zm-7-4a14 14 0 0 1 2 4h-4a14 14 0 0 1 2-4zM4.3 14a8.2 8.2 0 0 1 0-4h3.3a16.5 16.5 0 0 0 0 4H4.3zm.8 2h3a14 14 0 0 0 1.3 3.6A8 8 0 0 1 5.1 16zm3-8H5a8 8 0 0 1 4.3-3.6L8 8zM12 20a14 14 0 0 1-2-4h4a14 14 0 0 1-2 4zm2.3-6H9.7a14.7 14.7 0 0 1 0-4h4.6a14.6 14.6 0 0 1 0 4zm.3 5.6c.6-1.2 1-2.4 1.4-3.6h3a8 8 0 0 1-4.4 3.6zm1.8-5.6a16.5 16.5 0 0 0 0-4h3.3a8.2 8.2 0 0 1 0 4h-3.3z\"/></svg>');\n}\n.lh-report-icon--stopwatch::before {\n background-image: url('data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"><path d=\"M15 1H9v2h6V1zm-4 13h2V8h-2v6zm8.1-6.6L20.5 6l-1.4-1.4L17.7 6A9 9 0 0 0 3 13a9 9 0 1 0 16-5.6zm-7 12.6a7 7 0 1 1 0-14 7 7 0 0 1 0 14z\"/></svg>');\n}\n.lh-report-icon--networkspeed::before {\n background-image: url('data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"><path d=\"M15.9 5c-.2 0-.3 0-.4.2v.2L10.1 17a2 2 0 0 0-.2 1 2 2 0 0 0 4 .4l2.4-12.9c0-.3-.2-.5-.5-.5zM1 9l2 2c2.9-2.9 6.8-4 10.5-3.6l1.2-2.7C10 3.8 4.7 5.3 1 9zm20 2 2-2a15.4 15.4 0 0 0-5.6-3.6L17 8.2c1.5.7 2.9 1.6 4.1 2.8zm-4 4 2-2a9.9 9.9 0 0 0-2.7-1.9l-.5 3 1.2.9zM5 13l2 2a7.1 7.1 0 0 1 4-2l1.3-2.9C9.7 10.1 7 11 5 13z\"/></svg>');\n}\n.lh-report-icon--samples-one::before {\n background-image: url('data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"><circle cx=\"7\" cy=\"14\" r=\"3\"/><path d=\"M7 18a4 4 0 1 1 0-8 4 4 0 0 1 0 8zm0-6c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm4-2a4 4 0 1 1 0-8 4 4 0 0 1 0 8zm0-6c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm5.6 17.6a4 4 0 1 1 0-8 4 4 0 0 1 0 8zm0-6c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2z\"/></svg>');\n}\n.lh-report-icon--samples-many::before {\n background-image: url('data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"><path d=\"M7 18a4 4 0 1 1 0-8 4 4 0 0 1 0 8zm0-6c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm4-2a4 4 0 1 1 0-8 4 4 0 0 1 0 8zm0-6c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm5.6 17.6a4 4 0 1 1 0-8 4 4 0 0 1 0 8zm0-6c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2z\"/><circle cx=\"7\" cy=\"14\" r=\"3\"/><circle cx=\"11\" cy=\"6\" r=\"3\"/></svg>');\n}\n.lh-report-icon--chrome::before {\n background-image: url('data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"-50 -50 562 562\"><path d=\"M256 25.6v25.6a204 204 0 0 1 144.8 60 204 204 0 0 1 60 144.8 204 204 0 0 1-60 144.8 204 204 0 0 1-144.8 60 204 204 0 0 1-144.8-60 204 204 0 0 1-60-144.8 204 204 0 0 1 60-144.8 204 204 0 0 1 144.8-60V0a256 256 0 1 0 0 512 256 256 0 0 0 0-512v25.6z\"/><path d=\"M256 179.2v25.6a51.3 51.3 0 0 1 0 102.4 51.3 51.3 0 0 1 0-102.4v-51.2a102.3 102.3 0 1 0-.1 204.7 102.3 102.3 0 0 0 .1-204.7v25.6z\"/><path d=\"M256 204.8h217.6a25.6 25.6 0 0 0 0-51.2H256a25.6 25.6 0 0 0 0 51.2m44.3 76.8L191.5 470.1a25.6 25.6 0 1 0 44.4 25.6l108.8-188.5a25.6 25.6 0 1 0-44.4-25.6m-88.6 0L102.9 93.2a25.7 25.7 0 0 0-35-9.4 25.7 25.7 0 0 0-9.4 35l108.8 188.5a25.7 25.7 0 0 0 35 9.4 25.9 25.9 0 0 0 9.4-35.1\"/></svg>');\n}\n.lh-report-icon--external::before {\n background-image: url('data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M3.15 11.9a1.01 1.01 0 0 1-.743-.307 1.01 1.01 0 0 1-.306-.743v-7.7c0-.292.102-.54.306-.744a1.01 1.01 0 0 1 .744-.306H7v1.05H3.15v7.7h7.7V7h1.05v3.85c0 .291-.103.54-.307.743a1.01 1.01 0 0 1-.743.307h-7.7Zm2.494-2.8-.743-.744 5.206-5.206H8.401V2.1h3.5v3.5h-1.05V3.893L5.644 9.1Z\"/></svg>');\n}\n.lh-report-icon--experiment::before {\n background-image: url('data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 20 20\" fill=\"none\"><path d=\"M4.50002 17C3.86136 17 3.40302 16.7187 3.12502 16.156C2.84702 15.5933 2.90936 15.069 3.31202 14.583L7.50002 9.5V4.5H6.75002C6.54202 4.5 6.36502 4.427 6.21902 4.281C6.07302 4.135 6.00002 3.958 6.00002 3.75C6.00002 3.542 6.07302 3.365 6.21902 3.219C6.36502 3.073 6.54202 3 6.75002 3H13.25C13.458 3 13.635 3.073 13.781 3.219C13.927 3.365 14 3.542 14 3.75C14 3.958 13.927 4.135 13.781 4.281C13.635 4.427 13.458 4.5 13.25 4.5H12.5V9.5L16.688 14.583C17.0767 15.069 17.132 15.5933 16.854 16.156C16.5767 16.7187 16.1254 17 15.5 17H4.50002ZM4.50002 15.5H15.5L11 10V4.5H9.00002V10L4.50002 15.5Z\" fill=\"black\"/></svg>');\n}\n\n/** These are still icons, but w/o the auto-color invert / opacity / etc. that come with .lh-report-icon */\n\n.lh-report-plain-icon {\n display: flex;\n align-items: center;\n}\n.lh-report-plain-icon::before {\n content: \"\";\n background-repeat: no-repeat;\n width: var(--report-icon-size);\n height: var(--report-icon-size);\n display: inline-block;\n margin-right: 5px;\n}\n\n.lh-report-plain-icon--checklist-pass::before {\n --icon-url: url('data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 20 20\"><path d=\"M8.938 13L13.896 8.062L12.833 7L8.938 10.875L7.167 9.125L6.104 10.188L8.938 13ZM10 18C8.90267 18 7.868 17.7917 6.896 17.375C5.924 16.9583 5.07333 16.3853 4.344 15.656C3.61467 14.9267 3.04167 14.076 2.625 13.104C2.20833 12.132 2 11.0973 2 10C2 8.88867 2.20833 7.85033 2.625 6.885C3.04167 5.92033 3.61467 5.07333 4.344 4.344C5.07333 3.61467 5.924 3.04167 6.896 2.625C7.868 2.20833 8.90267 2 10 2C11.1113 2 12.1497 2.20833 13.115 2.625C14.0797 3.04167 14.9267 3.61467 15.656 4.344C16.3853 5.07333 16.9583 5.92033 17.375 6.885C17.7917 7.85033 18 8.88867 18 10C18 11.0973 17.7917 12.132 17.375 13.104C16.9583 14.076 16.3853 14.9267 15.656 15.656C14.9267 16.3853 14.0797 16.9583 13.115 17.375C12.1497 17.7917 11.1113 18 10 18ZM10 16.5C11.8053 16.5 13.34 15.868 14.604 14.604C15.868 13.34 16.5 11.8053 16.5 10C16.5 8.19467 15.868 6.66 14.604 5.396C13.34 4.132 11.8053 3.5 10 3.5C8.19467 3.5 6.66 4.132 5.396 5.396C4.132 6.66 3.5 8.19467 3.5 10C3.5 11.8053 4.132 13.34 5.396 14.604C6.66 15.868 8.19467 16.5 10 16.5Z\" fill=\"black\"/></svg>');\n background-color: var(--color-pass);\n mask: var(--icon-url) center / contain no-repeat;\n}\n.lh-report-plain-icon--checklist-fail::before {\n --icon-url: url('data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 20 20\"><path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M17.5 10C17.5 14.1421 14.1421 17.5 10 17.5C5.85786 17.5 2.5 14.1421 2.5 10C2.5 5.85786 5.85786 2.5 10 2.5C14.1421 2.5 17.5 5.85786 17.5 10ZM16 10C16 13.3137 13.3137 16 10 16C8.6135 16 7.33683 15.5297 6.32083 14.7399L14.7399 6.32083C15.5297 7.33683 16 8.6135 16 10ZM5.26016 13.6793L13.6793 5.26016C12.6633 4.47033 11.3866 4 10 4C6.68629 4 4 6.68629 4 10C4 11.3866 4.47033 12.6633 5.26016 13.6793Z\" fill=\"black\"/></svg>');\n background-color: var(--color-fail);\n mask: var(--icon-url) center / contain no-repeat;\n}\n\n.lh-buttons {\n display: flex;\n flex-wrap: wrap;\n margin: var(--default-padding) 0;\n}\n.lh-button {\n height: 32px;\n border: 1px solid var(--report-border-color-secondary);\n border-radius: 3px;\n color: var(--link-color);\n background-color: var(--report-background-color);\n margin: 5px;\n}\n\n.lh-button:first-of-type {\n margin-left: 0;\n}\n\n/* Node */\n.lh-node {\n display: flow-root;\n}\n\n.lh-node__snippet {\n font-family: var(--report-font-family-monospace);\n color: var(--snippet-color);\n font-size: var(--report-monospace-font-size);\n line-height: 20px;\n}\n\n.lh-checklist {\n list-style: none;\n padding: 0;\n}\n\n.lh-checklist-item {\n margin: 10px 0 10px 0;\n}\n\n/* Baseline Status */\n.lh-baseline-status {\n display: flex;\n align-items: center;\n}\n.lh-baseline-status::before {\n content: \"\";\n display: inline-block;\n width: 18px;\n height: 10px;\n margin-right: 6px;\n background-repeat: no-repeat;\n background-size: contain;\n}\n.lh-baseline-status--high::before {\n background-image: var(--baseline-high-icon-url);\n}\n.lh-baseline-status--low::before {\n background-image: var(--baseline-low-icon-url);\n}\n.lh-baseline-status--limited::before {\n background-image: var(--baseline-limited-icon-url);\n}\n\n/* Score */\n\n.lh-audit__score-icon {\n width: var(--score-icon-size);\n height: var(--score-icon-size);\n margin: var(--score-icon-margin);\n}\n\n.lh-audit--pass .lh-audit__display-text {\n color: var(--color-pass-secondary);\n}\n.lh-audit--pass .lh-audit__score-icon,\n.lh-scorescale-range--pass::before {\n border-radius: 100%;\n background: var(--color-pass);\n}\n\n.lh-audit--average .lh-audit__display-text {\n color: var(--color-average-secondary);\n}\n.lh-audit--average .lh-audit__score-icon,\n.lh-scorescale-range--average::before {\n background: var(--color-average);\n width: var(--icon-square-size);\n height: var(--icon-square-size);\n}\n\n.lh-audit--fail .lh-audit__display-text {\n color: var(--color-fail-secondary);\n}\n.lh-audit--fail .lh-audit__score-icon,\n.lh-audit--error .lh-audit__score-icon,\n.lh-scorescale-range--fail::before {\n border-left: calc(var(--score-icon-size) / 2) solid transparent;\n border-right: calc(var(--score-icon-size) / 2) solid transparent;\n border-bottom: var(--score-icon-size) solid var(--color-fail);\n}\n\n.lh-audit--error .lh-audit__score-icon,\n.lh-metric--error .lh-metric__icon {\n background-image: var(--error-icon-url);\n background-repeat: no-repeat;\n background-position: center;\n border: none;\n}\n\n.lh-gauge__wrapper--fail .lh-gauge--error {\n background-image: var(--error-icon-url);\n background-repeat: no-repeat;\n background-position: center;\n transform: scale(0.5);\n top: var(--score-container-padding);\n}\n\n.lh-audit--manual .lh-audit__display-text,\n.lh-audit--notapplicable .lh-audit__display-text {\n color: var(--color-gray-600);\n}\n.lh-audit--manual .lh-audit__score-icon,\n.lh-audit--notapplicable .lh-audit__score-icon {\n border: calc(0.2 * var(--score-icon-size)) solid var(--color-gray-400);\n border-radius: 100%;\n background: none;\n}\n\n.lh-audit--informative .lh-audit__display-text {\n color: var(--color-gray-600);\n}\n\n.lh-audit--informative .lh-audit__score-icon {\n border: calc(0.2 * var(--score-icon-size)) solid var(--color-gray-400);\n border-radius: 100%;\n}\n\n.lh-audit__description,\n.lh-audit__stackpack {\n color: var(--report-text-color-secondary);\n}\n.lh-audit__adorn {\n border: 1px solid var(--color-gray-500);\n border-radius: 3px;\n margin: 0 3px;\n padding: 0 2px;\n line-height: 1.1;\n display: inline-block;\n font-size: 90%;\n color: var(--report-text-color-secondary);\n}\n\n.lh-category-header__description {\n text-align: center;\n color: var(--color-gray-700);\n margin: 0px auto;\n max-width: 400px;\n}\n\n\n.lh-audit__display-text,\n.lh-chevron-container {\n margin: 0 var(--audit-margin-horizontal);\n}\n.lh-chevron-container {\n margin-right: 0;\n}\n\n.lh-audit__title-and-text {\n flex: 1;\n}\n\n.lh-audit__title-and-text code {\n color: var(--snippet-color);\n font-size: var(--report-monospace-font-size);\n}\n\n/* Prepend display text with em dash separator. */\n.lh-audit__display-text:not(:empty):before {\n content: '—';\n margin-right: var(--audit-margin-horizontal);\n}\n\n/* Expandable Details (Audit Groups, Audits) */\n.lh-audit__header {\n display: flex;\n align-items: center;\n padding: var(--default-padding);\n}\n\n\n.lh-metricfilter {\n display: grid;\n justify-content: end;\n align-items: center;\n grid-auto-flow: column;\n gap: 4px;\n color: var(--color-gray-700);\n}\n\n.lh-metricfilter__radio {\n /*\n * Instead of hiding, position offscreen so it's still accessible to screen readers\n * https://bugs.chromium.org/p/chromium/issues/detail?id=1439785\n */\n position: fixed;\n left: -9999px;\n}\n.lh-metricfilter input[type='radio']:focus-visible + label {\n outline: -webkit-focus-ring-color auto 1px;\n}\n\n.lh-metricfilter__label {\n display: inline-flex;\n padding: 0 4px;\n height: 16px;\n text-decoration: underline;\n align-items: center;\n cursor: pointer;\n font-size: 90%;\n}\n\n.lh-metricfilter__label--active {\n background: var(--color-blue-primary);\n color: var(--color-white);\n border-radius: 3px;\n text-decoration: none;\n}\n/* Give the 'All' choice a more muted display */\n.lh-metricfilter__label--active[for=\"metric-All\"] {\n background-color: var(--color-blue-200) !important;\n color: black !important;\n}\n\n.lh-metricfilter__text {\n margin-right: 8px;\n}\n\n/* If audits are filtered, hide the itemcount for Passed Audits… */\n.lh-category--filtered .lh-audit-group .lh-audit-group__itemcount {\n display: none;\n}\n\n\n.lh-audit__header:hover {\n background-color: var(--color-hover);\n}\n\n/* We want to hide the browser's default arrow marker on summary elements. Admittedly, it's complicated. */\n.lh-root details > summary {\n /* Blink 89+ and Firefox will hide the arrow when display is changed from (new) default of `list-item` to block. https://chromestatus.com/feature/6730096436051968*/\n display: block;\n}\n/* Safari and Blink <=88 require using the -webkit-details-marker selector */\n.lh-root details > summary::-webkit-details-marker {\n display: none;\n}\n\n/* Perf Metric */\n\n.lh-metrics-container {\n display: grid;\n grid-auto-rows: 1fr;\n grid-template-columns: 1fr 1fr;\n grid-column-gap: var(--report-line-height);\n margin-bottom: var(--default-padding);\n}\n\n.lh-metric {\n border-top: 1px solid var(--report-border-color-secondary);\n}\n\n.lh-category:not(.lh--hoisted-meta) .lh-metric:nth-last-child(-n+2) {\n border-bottom: 1px solid var(--report-border-color-secondary);\n}\n\n.lh-metric__innerwrap {\n display: grid;\n /**\n * Icon -- Metric Name\n * -- Metric Value\n */\n grid-template-columns: calc(var(--score-icon-size) + var(--score-icon-margin-left) + var(--score-icon-margin-right)) 1fr;\n align-items: center;\n padding: var(--default-padding);\n}\n\n.lh-metric__details {\n order: -1;\n}\n\n.lh-metric__title {\n flex: 1;\n}\n\n.lh-calclink {\n padding-left: calc(1ex / 3);\n}\n\n.lh-metric__description {\n display: none;\n grid-column-start: 2;\n grid-column-end: 4;\n color: var(--report-text-color-secondary);\n}\n\n.lh-metric__value {\n font-size: var(--metric-value-font-size);\n margin: calc(var(--default-padding) / 2) 0;\n white-space: nowrap; /* No wrapping between metric value and the icon */\n grid-column-start: 2;\n}\n\n/**\n* This media query is a temporary fallback for browsers that do not support `@container query`.\n* TODO: remove this media query when `@container query` is fully supported by browsers\n* See https://github.com/GoogleChrome/lighthouse/pull/16332\n*/\n@media screen and (max-width: 535px) {\n .lh-metrics-container {\n display: block;\n }\n\n .lh-metric {\n border-bottom: none !important;\n }\n .lh-category:not(.lh--hoisted-meta) .lh-metric:nth-last-child(1) {\n border-bottom: 1px solid var(--report-border-color-secondary) !important;\n }\n\n /* Change the grid to 3 columns for narrow viewport. */\n .lh-metric__innerwrap {\n /**\n * Icon -- Metric Name -- Metric Value\n */\n grid-template-columns: calc(var(--score-icon-size) + var(--score-icon-margin-left) + var(--score-icon-margin-right)) 2fr 1fr;\n }\n .lh-metric__value {\n justify-self: end;\n grid-column-start: unset;\n }\n}\n\n@container lh-container (max-width: 535px) {\n .lh-metrics-container {\n display: block;\n }\n\n .lh-metric {\n border-bottom: none !important;\n }\n .lh-category:not(.lh--hoisted-meta) .lh-metric:nth-last-child(1) {\n border-bottom: 1px solid var(--report-border-color-secondary) !important;\n }\n\n /* Change the grid to 3 columns for narrow viewport. */\n .lh-metric__innerwrap {\n /**\n * Icon -- Metric Name -- Metric Value\n */\n grid-template-columns: calc(var(--score-icon-size) + var(--score-icon-margin-left) + var(--score-icon-margin-right)) 2fr 1fr;\n }\n .lh-metric__value {\n justify-self: end;\n grid-column-start: unset;\n }\n}\n\n/* No-JS toggle switch */\n/* Keep this selector sync'd w/ `magicSelector` in report-ui-features-test.js */\n .lh-metrics-toggle__input:checked ~ .lh-metrics-container .lh-metric__description {\n display: block;\n}\n\n/* TODO get rid of the SVGS and clean up these some more */\n.lh-metrics-toggle__input {\n opacity: 0;\n position: absolute;\n right: 0;\n top: 0px;\n}\n\n.lh-metrics-toggle__input + div > label > .lh-metrics-toggle__labeltext--hide,\n.lh-metrics-toggle__input:checked + div > label > .lh-metrics-toggle__labeltext--show {\n display: none;\n}\n.lh-metrics-toggle__input:checked + div > label > .lh-metrics-toggle__labeltext--hide {\n display: inline;\n}\n.lh-metrics-toggle__input:focus + div > label {\n outline: -webkit-focus-ring-color auto 3px;\n}\n\n.lh-metrics-toggle__label {\n cursor: pointer;\n font-size: var(--report-font-size-secondary);\n line-height: var(--report-line-height-secondary);\n color: var(--color-gray-700);\n}\n\n/* Pushes the metric description toggle button to the right. */\n.lh-audit-group--metrics .lh-audit-group__header {\n display: flex;\n justify-content: space-between;\n}\n\n.lh-metric__icon,\n.lh-scorescale-range::before {\n content: '';\n width: var(--score-icon-size);\n height: var(--score-icon-size);\n display: inline-block;\n margin: var(--score-icon-margin);\n}\n\n.lh-metric--pass .lh-metric__value {\n color: var(--color-pass-secondary);\n}\n.lh-metric--pass .lh-metric__icon {\n border-radius: 100%;\n background: var(--color-pass);\n}\n\n.lh-metric--average .lh-metric__value {\n color: var(--color-average-secondary);\n}\n.lh-metric--average .lh-metric__icon {\n background: var(--color-average);\n width: var(--icon-square-size);\n height: var(--icon-square-size);\n}\n\n.lh-metric--fail .lh-metric__value {\n color: var(--color-fail-secondary);\n}\n.lh-metric--fail .lh-metric__icon {\n border-left: calc(var(--score-icon-size) / 2) solid transparent;\n border-right: calc(var(--score-icon-size) / 2) solid transparent;\n border-bottom: var(--score-icon-size) solid var(--color-fail);\n}\n\n.lh-metric--error .lh-metric__value,\n.lh-metric--error .lh-metric__description {\n color: var(--color-fail-secondary);\n}\n\n/* Filmstrip */\n\n.lh-filmstrip-container {\n /* smaller gap between metrics and filmstrip */\n margin: -8px auto 0 auto;\n}\n\n.lh-filmstrip {\n display: flex;\n justify-content: space-between;\n justify-items: center;\n margin-bottom: var(--default-padding);\n width: 100%;\n}\n\n.lh-filmstrip__frame {\n overflow: hidden;\n line-height: 0;\n}\n\n.lh-filmstrip__thumbnail {\n border: 1px solid var(--report-border-color-secondary);\n max-height: 150px;\n max-width: 120px;\n}\n\n.lh-dark .lh-perf-toggle-text {\n color: rgba(30, 164, 70, 1);\n}\n\n.lh-perf-toggle-text a {\n color: var(--link-color);\n}\n\n/* Audit */\n\n.lh-audit {\n border-bottom: 1px solid var(--report-border-color-secondary);\n}\n\n/* Apply border-top to just the first audit. */\n.lh-audit {\n border-top: 1px solid var(--report-border-color-secondary);\n}\n.lh-audit ~ .lh-audit {\n border-top: none;\n}\n\n\n.lh-audit--error .lh-audit__display-text {\n color: var(--color-fail-secondary);\n}\n\n/* Audit Group */\n\n.lh-audit-group {\n margin-bottom: var(--audit-group-margin-bottom);\n position: relative;\n}\n.lh-audit-group--metrics {\n margin-bottom: calc(var(--audit-group-margin-bottom) / 2);\n}\n\n.lh-audit-group--metrics .lh-audit-group__summary {\n margin-top: 0;\n margin-bottom: 0;\n}\n\n.lh-audit-group__summary {\n display: flex;\n justify-content: space-between;\n align-items: center;\n}\n\n.lh-audit-group__header .lh-chevron {\n margin-top: calc((var(--report-line-height) - 5px) / 2);\n}\n\n.lh-audit-group__header {\n letter-spacing: 0.8px;\n padding: var(--default-padding);\n padding-left: 0;\n}\n\n.lh-audit-group__header, .lh-audit-group__summary {\n font-size: var(--report-font-size-secondary);\n line-height: var(--report-line-height-secondary);\n color: var(--color-gray-700);\n}\n\n.lh-audit-group__title {\n text-transform: uppercase;\n font-weight: 500;\n}\n\n.lh-audit-group__itemcount {\n color: var(--color-gray-600);\n}\n\n.lh-audit-group__footer {\n color: var(--color-gray-600);\n display: block;\n margin-top: var(--default-padding);\n}\n\n.lh-details,\n.lh-category-header__description,\n.lh-audit-group__footer {\n font-size: var(--report-font-size-secondary);\n line-height: var(--report-line-height-secondary);\n}\n\n.lh-audit-explanation {\n margin: var(--audit-padding-vertical) 0 calc(var(--audit-padding-vertical) / 2) var(--audit-margin-horizontal);\n line-height: var(--audit-explanation-line-height);\n display: inline-block;\n}\n\n.lh-audit--fail .lh-audit-explanation {\n color: var(--color-fail-secondary);\n}\n\n/* Report */\n.lh-list {\n margin-right: calc(var(--default-padding) * 2);\n}\n.lh-list > :not(:last-child) {\n margin-bottom: calc(var(--default-padding) * 2);\n border-bottom: 1px solid #A8C7FA;\n}\n.lh-list-section {\n padding: calc(var(--default-padding) * 2) 0;\n}\n.lh-list-section__title {\n text-decoration: underline;\n}\n\n.lh-header-container {\n display: block;\n margin: 0 auto;\n position: relative;\n word-wrap: break-word;\n}\n\n.lh-header-container .lh-scores-wrapper {\n border-bottom: 1px solid var(--color-gray-200);\n}\n\n\n.lh-report {\n min-width: var(--report-content-min-width);\n}\n\n.lh-exception {\n font-size: large;\n}\n\n.lh-code {\n white-space: normal;\n margin-top: 0;\n font-size: var(--report-monospace-font-size);\n}\n\n.lh-warnings {\n --item-margin: calc(var(--report-line-height) / 6);\n color: var(--color-average-secondary);\n margin: var(--audit-padding-vertical) 0;\n padding: var(--default-padding)\n var(--default-padding)\n var(--default-padding)\n calc(var(--audit-description-padding-left));\n background-color: var(--toplevel-warning-background-color);\n}\n.lh-warnings span {\n font-weight: bold;\n}\n\n.lh-warnings--toplevel {\n --item-margin: calc(var(--header-line-height) / 4);\n color: var(--toplevel-warning-text-color);\n margin-left: auto;\n margin-right: auto;\n max-width: var(--report-content-max-width-minus-edge-gap);\n padding: var(--toplevel-warning-padding);\n border-radius: 8px;\n}\n\n.lh-warnings__msg {\n color: var(--toplevel-warning-message-text-color);\n margin: 0;\n}\n\n.lh-warnings ul {\n margin: 0;\n}\n.lh-warnings li {\n margin: var(--item-margin) 0;\n}\n.lh-warnings li:last-of-type {\n margin-bottom: 0;\n}\n\n.lh-scores-header {\n display: flex;\n flex-wrap: wrap;\n justify-content: center;\n}\n.lh-scores-header__solo {\n padding: 0;\n border: 0;\n}\n\n/* Gauge */\n\n.lh-gauge__wrapper--pass {\n color: var(--color-pass-secondary);\n fill: var(--color-pass);\n stroke: var(--color-pass);\n}\n\n.lh-gauge__wrapper--average {\n color: var(--color-average-secondary);\n fill: var(--color-average);\n stroke: var(--color-average);\n}\n\n.lh-gauge__wrapper--fail {\n color: var(--color-fail-secondary);\n fill: var(--color-fail);\n stroke: var(--color-fail);\n}\n\n.lh-gauge__wrapper--not-applicable {\n color: var(--color-not-applicable);\n fill: var(--color-not-applicable);\n stroke: var(--color-not-applicable);\n}\n\n.lh-fraction__wrapper .lh-fraction__content::before {\n content: '';\n height: var(--score-icon-size);\n width: var(--score-icon-size);\n margin: var(--score-icon-margin);\n display: inline-block;\n}\n.lh-fraction__wrapper--pass .lh-fraction__content {\n color: var(--color-pass-secondary);\n}\n.lh-fraction__wrapper--pass .lh-fraction__background {\n background-color: var(--color-pass);\n}\n.lh-fraction__wrapper--pass .lh-fraction__content::before {\n background-color: var(--color-pass);\n border-radius: 50%;\n}\n.lh-fraction__wrapper--average .lh-fraction__content {\n color: var(--color-average-secondary);\n}\n.lh-fraction__wrapper--average .lh-fraction__background,\n.lh-fraction__wrapper--average .lh-fraction__content::before {\n background-color: var(--color-average);\n}\n.lh-fraction__wrapper--fail .lh-fraction__content {\n color: var(--color-fail);\n}\n.lh-fraction__wrapper--fail .lh-fraction__background {\n background-color: var(--color-fail);\n}\n.lh-fraction__wrapper--fail .lh-fraction__content::before {\n border-left: calc(var(--score-icon-size) / 2) solid transparent;\n border-right: calc(var(--score-icon-size) / 2) solid transparent;\n border-bottom: var(--score-icon-size) solid var(--color-fail);\n}\n.lh-fraction__wrapper--null .lh-fraction__content {\n color: var(--color-gray-700);\n}\n.lh-fraction__wrapper--null .lh-fraction__background {\n background-color: var(--color-gray-700);\n}\n.lh-fraction__wrapper--null .lh-fraction__content::before {\n border-radius: 50%;\n border: calc(0.2 * var(--score-icon-size)) solid var(--color-gray-700);\n}\n\n.lh-fraction__background {\n position: absolute;\n height: 100%;\n width: 100%;\n border-radius: calc(var(--gauge-circle-size) / 2);\n opacity: 0.1;\n z-index: -1;\n}\n\n.lh-fraction__content-wrapper {\n height: var(--gauge-circle-size);\n display: flex;\n align-items: center;\n}\n\n.lh-fraction__content {\n display: flex;\n position: relative;\n align-items: center;\n justify-content: center;\n font-size: calc(0.3 * var(--gauge-circle-size));\n line-height: calc(0.4 * var(--gauge-circle-size));\n width: max-content;\n min-width: calc(1.5 * var(--gauge-circle-size));\n padding: calc(0.1 * var(--gauge-circle-size)) calc(0.2 * var(--gauge-circle-size));\n --score-icon-size: calc(0.21 * var(--gauge-circle-size));\n --score-icon-margin: 0 calc(0.15 * var(--gauge-circle-size)) 0 0;\n}\n\n.lh-gauge {\n stroke-linecap: round;\n width: var(--gauge-circle-size);\n height: var(--gauge-circle-size);\n}\n\n.lh-category .lh-gauge {\n --gauge-circle-size: var(--gauge-circle-size-big);\n}\n\n.lh-gauge-base {\n opacity: 0.1;\n}\n\n.lh-gauge-arc {\n fill: none;\n transform-origin: 50% 50%;\n animation: load-gauge var(--transition-length) ease both;\n animation-delay: 250ms;\n}\n\n.lh-gauge__svg-wrapper {\n position: relative;\n height: var(--gauge-circle-size);\n}\n.lh-category .lh-gauge__svg-wrapper,\n.lh-category .lh-fraction__wrapper {\n --gauge-circle-size: var(--gauge-circle-size-big);\n}\n\n/* The plugin badge overlay */\n.lh-gauge__wrapper--plugin .lh-gauge__svg-wrapper::before {\n width: var(--plugin-badge-size);\n height: var(--plugin-badge-size);\n background-color: var(--plugin-badge-background-color);\n background-image: var(--plugin-icon-url);\n background-repeat: no-repeat;\n background-size: var(--plugin-icon-size);\n background-position: 58% 50%;\n content: \"\";\n position: absolute;\n right: -6px;\n bottom: 0px;\n display: block;\n z-index: 100;\n box-shadow: 0 0 4px rgba(0,0,0,.2);\n border-radius: 25%;\n}\n.lh-category .lh-gauge__wrapper--plugin .lh-gauge__svg-wrapper::before {\n width: var(--plugin-badge-size-big);\n height: var(--plugin-badge-size-big);\n}\n\n@keyframes load-gauge {\n from { stroke-dasharray: 0 352; }\n}\n\n.lh-gauge__percentage {\n width: 100%;\n height: var(--gauge-circle-size);\n line-height: var(--gauge-circle-size);\n position: absolute;\n font-family: var(--report-font-family-monospace);\n font-size: calc(var(--gauge-circle-size) * 0.34 + 1.3px);\n text-align: center;\n top: var(--score-container-padding);\n}\n\n.lh-category .lh-gauge__percentage {\n --gauge-circle-size: var(--gauge-circle-size-big);\n --gauge-percentage-font-size: var(--gauge-percentage-font-size-big);\n}\n\n.lh-gauge__wrapper,\n.lh-fraction__wrapper {\n position: relative;\n display: flex;\n align-items: center;\n flex-direction: column;\n text-decoration: none;\n padding: var(--score-container-padding);\n\n --transition-length: 1s;\n\n /* Contain the layout style paint & layers during animation*/\n contain: content;\n will-change: opacity; /* Only using for layer promotion */\n}\n\n.lh-gauge__label,\n.lh-fraction__label {\n font-size: var(--gauge-label-font-size);\n font-weight: 500;\n line-height: var(--gauge-label-line-height);\n margin-top: 10px;\n text-align: center;\n color: var(--report-text-color);\n word-break: keep-all;\n}\n\n/* TODO(#8185) use more BEM (.lh-gauge__label--big) instead of relying on descendant selector */\n.lh-category .lh-gauge__label,\n.lh-category .lh-fraction__label {\n --gauge-label-font-size: var(--gauge-label-font-size-big);\n --gauge-label-line-height: var(--gauge-label-line-height-big);\n margin-top: 14px;\n}\n\n.lh-scores-header .lh-gauge__wrapper,\n.lh-scores-header .lh-fraction__wrapper,\n.lh-sticky-header .lh-gauge__wrapper,\n.lh-sticky-header .lh-fraction__wrapper {\n width: var(--gauge-wrapper-width);\n}\n\n.lh-scorescale {\n display: inline-flex;\n\n gap: calc(var(--default-padding) * 4);\n margin: 16px auto 0 auto;\n font-size: var(--report-font-size-secondary);\n color: var(--color-gray-700);\n\n}\n\n.lh-scorescale-range {\n display: flex;\n align-items: center;\n font-family: var(--report-font-family-monospace);\n white-space: nowrap;\n}\n\n.lh-category-header__finalscreenshot .lh-scorescale {\n border: 0;\n display: flex;\n justify-content: center;\n}\n\n.lh-category-header__finalscreenshot .lh-scorescale-range {\n font-family: unset;\n font-size: 12px;\n}\n\n.lh-scorescale-wrap {\n display: contents;\n}\n\n/* Hide category score gauages if it's a single category report */\n.lh-header--solo-category .lh-scores-wrapper {\n display: none;\n}\n\n\n.lh-categories {\n width: 100%;\n}\n\n.lh-category {\n padding: var(--category-padding);\n max-width: var(--report-content-max-width);\n margin: 0 auto;\n\n scroll-margin-top: calc(var(--sticky-header-buffer) - 1em);\n}\n\n.lh-category-wrapper {\n border-bottom: 1px solid var(--color-gray-200);\n}\n.lh-category-wrapper:last-of-type {\n border-bottom: 0;\n}\n\n.lh-category-header {\n margin-bottom: var(--section-padding-vertical);\n}\n\n.lh-category-header .lh-score__gauge {\n max-width: 400px;\n width: auto;\n margin: 0px auto;\n}\n\n.lh-category-header__finalscreenshot {\n display: grid;\n grid-template: none / 1fr 1px 1fr;\n justify-items: center;\n align-items: center;\n gap: var(--report-line-height);\n min-height: 288px;\n margin-bottom: var(--default-padding);\n}\n\n.lh-final-ss-image {\n /* constrain the size of the image to not be too large */\n max-height: calc(var(--gauge-circle-size-big) * 2.8);\n max-width: calc(var(--gauge-circle-size-big) * 3.5);\n border: 1px solid var(--color-gray-200);\n padding: 4px;\n border-radius: 3px;\n display: block;\n}\n\n.lh-category-headercol--separator {\n background: var(--color-gray-200);\n width: 1px;\n height: var(--gauge-circle-size-big);\n}\n\n/**\n* This media query is a temporary fallback for browsers that do not support `@container query`.\n* TODO: remove this media query when `@container query` is fully supported by browsers\n* See https://github.com/GoogleChrome/lighthouse/pull/16332\n*/\n@media screen and (max-width: 780px) {\n .lh-category-header__finalscreenshot {\n grid-template: 1fr 1fr / none\n }\n .lh-category-headercol--separator {\n display: none;\n }\n}\n\n@container lh-container (max-width: 780px) {\n .lh-category-header__finalscreenshot {\n grid-template: 1fr 1fr / none\n }\n .lh-category-headercol--separator {\n display: none;\n }\n}\n\n/**\n* This media query is a temporary fallback for browsers that do not support `@container query`.\n* TODO: remove this media query when `@container query` is fully supported by browsers\n* See https://github.com/GoogleChrome/lighthouse/pull/16332\n*/\n@media screen and (max-width: 964px) {\n .lh-report {\n margin-left: 0;\n width: 100%;\n }\n}\n\n/* 964 fits the min-width of the filmstrip */\n@container lh-container (max-width: 964px) {\n .lh-report {\n margin-left: 0;\n width: 100%;\n }\n}\n\n@media print {\n body {\n -webkit-print-color-adjust: exact; /* print background colors */\n }\n .lh-container {\n display: block;\n }\n .lh-report {\n margin-left: 0;\n padding-top: 0;\n }\n .lh-categories {\n margin-top: 0;\n }\n .lh-buttons, .lh-highlighter {\n /* hide stickyheader marker when printing. crbug.com/41486992 */\n display: none;\n }\n}\n\n.lh-table {\n position: relative;\n border-collapse: separate;\n border-spacing: 0;\n /* Can't assign padding to table, so shorten the width instead. */\n width: calc(100% - var(--audit-description-padding-left) - var(--stackpack-padding-horizontal));\n border: 1px solid var(--report-border-color-secondary);\n}\n\n.lh-table thead th {\n position: sticky;\n top: var(--sticky-header-buffer);\n z-index: 1;\n background-color: var(--report-background-color);\n border-bottom: 1px solid var(--report-border-color-secondary);\n font-weight: normal;\n color: var(--color-gray-600);\n /* See text-wrapping comment on .lh-container. */\n word-break: normal;\n}\n\n.lh-row--group {\n background-color: var(--table-group-header-background-color);\n}\n\n.lh-row--group td {\n font-weight: bold;\n font-size: 1.05em;\n color: var(--table-group-header-text-color);\n}\n\n.lh-row--group td:first-child {\n display: block;\n min-width: max-content;\n font-weight: normal;\n}\n\n.lh-row--group .lh-text {\n color: inherit;\n text-decoration: none;\n display: inline-block;\n}\n\n.lh-row--group a.lh-link:hover {\n text-decoration: underline;\n}\n\n.lh-row--group .lh-audit__adorn {\n text-transform: capitalize;\n font-weight: normal;\n padding: 2px 3px 1px 3px;\n}\n\n.lh-row--group .lh-audit__adorn1p {\n color: var(--link-color);\n border-color: var(--link-color);\n}\n\n.lh-row--group .lh-report-icon--external::before {\n content: \"\";\n background-repeat: no-repeat;\n width: 14px;\n height: 16px;\n opacity: 0.7;\n display: inline-block;\n vertical-align: middle;\n}\n\n.lh-row--group .lh-report-icon--external {\n visibility: hidden;\n}\n\n.lh-row--group:hover .lh-report-icon--external {\n visibility: visible;\n}\n\n.lh-dark .lh-report-icon--external::before {\n filter: invert(1);\n}\n\n/** Manages indentation of two-level and three-level nested adjacent rows */\n\n.lh-row--group ~ [data-entity]:not(.lh-row--group) td:first-child {\n padding-left: 20px;\n}\n\n.lh-row--group ~ [data-entity]:not(.lh-row--group) ~ .lh-sub-item-row td:first-child {\n margin-left: 20px;\n padding-left: 10px;\n border-left: 1px solid #A8C7FA;\n display: block;\n}\n\n.lh-row--even {\n background-color: var(--table-group-header-background-color);\n}\n.lh-row--hidden {\n display: none;\n}\n\n.lh-table th,\n.lh-table td {\n padding: var(--default-padding);\n}\n\n.lh-table tr {\n vertical-align: middle;\n}\n\n.lh-table tr:hover {\n background-color: var(--table-higlight-background-color);\n}\n\n/* Looks unnecessary, but mostly for keeping the <th>s left-aligned */\n.lh-table-column--text,\n.lh-table-column--source-location,\n.lh-table-column--url,\n/* .lh-table-column--thumbnail, */\n/* .lh-table-column--empty,*/\n.lh-table-column--code,\n.lh-table-column--node {\n text-align: left;\n}\n\n.lh-table-column--code {\n min-width: 100px;\n}\n\n.lh-table-column--bytes,\n.lh-table-column--timespanMs,\n.lh-table-column--ms,\n.lh-table-column--numeric {\n text-align: right;\n word-break: normal;\n}\n\n\n\n.lh-table .lh-table-column--thumbnail {\n width: var(--image-preview-size);\n}\n\n.lh-table-column--url {\n min-width: 250px;\n}\n\n.lh-table-column--text {\n min-width: 80px;\n}\n\n/* Keep columns narrow if they follow the URL column */\n/* 12% was determined to be a decent narrow width, but wide enough for column headings */\n.lh-table-column--url + th.lh-table-column--bytes,\n.lh-table-column--url + .lh-table-column--bytes + th.lh-table-column--bytes,\n.lh-table-column--url + .lh-table-column--ms,\n.lh-table-column--url + .lh-table-column--ms + th.lh-table-column--bytes,\n.lh-table-column--url + .lh-table-column--bytes + th.lh-table-column--timespanMs {\n width: 12%;\n}\n\n/** Tweak styling for tables in insight audits. */\n.lh-audit[id$=\"-insight\"] .lh-table {\n border: none;\n}\n\n.lh-audit[id$=\"-insight\"] .lh-table thead th {\n font-weight: bold;\n color: unset;\n}\n\n.lh-audit[id$=\"-insight\"] .lh-table th,\n.lh-audit[id$=\"-insight\"] .lh-table td {\n padding: calc(var(--default-padding) / 2);\n}\n\n.lh-audit[id$=\"-insight\"] .lh-table .lh-row--even,\n.lh-audit[id$=\"-insight\"] .lh-table tr:not(.lh-row--group):hover {\n background-color: unset;\n}\n\n.lh-text__url-host {\n display: inline;\n}\n\n.lh-text__url-host {\n margin-left: calc(var(--report-font-size) / 2);\n opacity: 0.6;\n font-size: 90%\n}\n\n.lh-thumbnail {\n object-fit: cover;\n width: var(--image-preview-size);\n height: var(--image-preview-size);\n display: block;\n}\n\n.lh-unknown pre {\n overflow: scroll;\n border: solid 1px var(--color-gray-200);\n}\n\n.lh-text__url > a {\n color: inherit;\n text-decoration: none;\n}\n\n.lh-text__url > a:hover {\n text-decoration: underline dotted #999;\n}\n\n.lh-sub-item-row {\n margin-left: 20px;\n margin-bottom: 0;\n color: var(--color-gray-700);\n}\n\n.lh-sub-item-row td {\n padding-top: 4px;\n padding-bottom: 4px;\n padding-left: 20px;\n}\n\n.lh-sub-item-row .lh-element-screenshot {\n zoom: 0.6;\n}\n\n/* Chevron\n https://codepen.io/paulirish/pen/LmzEmK\n */\n.lh-chevron {\n --chevron-angle: 42deg;\n /* Edge doesn't support transform: rotate(calc(...)), so we define it here */\n --chevron-angle-right: -42deg;\n width: var(--chevron-size);\n height: var(--chevron-size);\n margin-top: calc((var(--report-line-height) - 12px) / 2);\n}\n\n.lh-chevron__lines {\n transition: transform 0.4s;\n transform: translateY(var(--report-line-height));\n}\n.lh-chevron__line {\n stroke: var(--chevron-line-stroke);\n stroke-width: var(--chevron-size);\n stroke-linecap: square;\n transform-origin: 50%;\n transform: rotate(var(--chevron-angle));\n transition: transform 300ms, stroke 300ms;\n}\n\n.lh-expandable-details .lh-chevron__line-right,\n.lh-expandable-details[open] .lh-chevron__line-left {\n transform: rotate(var(--chevron-angle-right));\n}\n\n.lh-expandable-details[open] .lh-chevron__line-right {\n transform: rotate(var(--chevron-angle));\n}\n\n\n.lh-expandable-details[open] .lh-chevron__lines {\n transform: translateY(calc(var(--chevron-size) * -1));\n}\n\n.lh-expandable-details[open] {\n animation: 300ms openDetails forwards;\n padding-bottom: var(--default-padding);\n}\n\n@keyframes openDetails {\n from {\n outline: 1px solid var(--report-background-color);\n }\n to {\n outline: 1px solid;\n box-shadow: 0 2px 4px rgba(0, 0, 0, .24);\n }\n}\n\n/**\n* This media query is a temporary fallback for browsers that do not support `@container query`.\n* TODO: remove this media query when `@container query` is fully supported by browsers\n* See https://github.com/GoogleChrome/lighthouse/pull/16332\n*/\n@media screen and (max-width: 780px) {\n /* no black outline if we're not confident the entire table can be displayed within bounds */\n .lh-expandable-details[open] {\n animation: none;\n }\n}\n\n@container lh-container (max-width: 780px) {\n /* no black outline if we're not confident the entire table can be displayed within bounds */\n .lh-expandable-details[open] {\n animation: none;\n }\n}\n\n.lh-expandable-details[open] summary, details.lh-clump > summary {\n border-bottom: 1px solid var(--report-border-color-secondary);\n}\ndetails.lh-clump[open] > summary {\n border-bottom-width: 0;\n}\n\n\n\ndetails .lh-clump-toggletext--hide,\ndetails[open] .lh-clump-toggletext--show { display: none; }\ndetails[open] .lh-clump-toggletext--hide { display: block;}\n\n\n/* Tooltip */\n.lh-tooltip-boundary {\n position: relative;\n}\n\n.lh-tooltip {\n position: absolute;\n display: none; /* Don't retain these layers when not needed */\n opacity: 0;\n background: #ffffff;\n white-space: pre-line; /* Render newlines in the text */\n min-width: 246px;\n max-width: 275px;\n padding: 15px;\n border-radius: 5px;\n text-align: initial;\n line-height: 1.4;\n}\n\n/**\n* This media query is a temporary fallback for browsers that do not support `@container query`.\n* TODO: remove this media query when `@container query` is fully supported by browsers\n* See https://github.com/GoogleChrome/lighthouse/pull/16332\n*/\n@media screen and (max-width: 535px) {\n .lh-tooltip {\n min-width: 45cqi;\n padding: 3cqi;\n }\n}\n\n/* shrink tooltips to not be cutoff on left edge of narrow container\n 45vw is chosen to be ~= width of the left column of metrics\n*/\n@container lh-container (max-width: 535px) {\n .lh-tooltip {\n min-width: 45cqi;\n padding: 3cqi;\n }\n}\n\n.lh-tooltip-boundary:hover .lh-tooltip {\n display: block;\n animation: fadeInTooltip 250ms;\n animation-fill-mode: forwards;\n animation-delay: 850ms;\n bottom: 100%;\n z-index: 1;\n will-change: opacity;\n right: 0;\n pointer-events: none;\n}\n\n.lh-tooltip::before {\n content: \"\";\n border: solid transparent;\n border-bottom-color: #fff;\n border-width: 10px;\n position: absolute;\n bottom: -20px;\n right: 6px;\n transform: rotate(180deg);\n pointer-events: none;\n}\n\n@keyframes fadeInTooltip {\n 0% { opacity: 0; }\n 75% { opacity: 1; }\n 100% { opacity: 1; filter: drop-shadow(1px 0px 1px #aaa) drop-shadow(0px 2px 4px hsla(206, 6%, 25%, 0.15)); pointer-events: auto; }\n}\n\n/* Element screenshot */\n.lh-element-screenshot {\n float: left;\n margin-right: 20px;\n}\n.lh-element-screenshot__content {\n overflow: hidden;\n min-width: 110px;\n display: flex;\n justify-content: center;\n background-color: var(--report-background-color);\n}\n.lh-element-screenshot__image {\n position: relative;\n /* Set by ElementScreenshotRenderer.installFullPageScreenshotCssVariable */\n background-image: var(--element-screenshot-url);\n outline: 2px solid #777;\n background-color: white;\n background-repeat: no-repeat;\n}\n.lh-element-screenshot__mask {\n position: absolute;\n background: #555;\n opacity: 0.8;\n}\n.lh-element-screenshot__element-marker {\n position: absolute;\n outline: 2px solid var(--color-lime-400);\n}\n.lh-element-screenshot__overlay {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n z-index: 2000; /* .lh-topbar is 1000 */\n background: var(--screenshot-overlay-background);\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: zoom-out;\n}\n\n.lh-element-screenshot__overlay .lh-element-screenshot {\n margin-right: 0; /* clearing margin used in thumbnail case */\n outline: 1px solid var(--color-gray-700);\n}\n\n.lh-screenshot-overlay--enabled .lh-element-screenshot {\n cursor: zoom-out;\n}\n.lh-screenshot-overlay--enabled .lh-node .lh-element-screenshot {\n cursor: zoom-in;\n}\n\n\n.lh-meta__items {\n --meta-icon-size: calc(var(--report-icon-size) * 0.667);\n padding: var(--default-padding);\n display: grid;\n grid-template-columns: 1fr 1fr 1fr;\n background-color: var(--env-item-background-color);\n border-radius: 3px;\n margin: 0 0 var(--default-padding) 0;\n font-size: 12px;\n column-gap: var(--default-padding);\n color: var(--color-gray-700);\n}\n\n.lh-meta__item {\n display: block;\n list-style-type: none;\n position: relative;\n padding: 0 0 0 calc(var(--meta-icon-size) + var(--default-padding) * 2);\n cursor: unset; /* disable pointer cursor from report-icon */\n}\n\n.lh-meta__item.lh-tooltip-boundary {\n text-decoration: dotted underline var(--color-gray-500);\n cursor: help;\n}\n\n.lh-meta__item.lh-report-icon::before {\n position: absolute;\n left: var(--default-padding);\n width: var(--meta-icon-size);\n height: var(--meta-icon-size);\n}\n\n.lh-meta__item.lh-report-icon:hover::before {\n opacity: 0.7;\n}\n\n.lh-meta__item .lh-tooltip {\n color: var(--color-gray-800);\n}\n\n.lh-meta__item .lh-tooltip::before {\n right: auto; /* Set the tooltip arrow to the leftside */\n left: 6px;\n}\n\n.lh-meta__item:hover .lh-tooltip {\n right: auto;\n left: 6px;\n}\n/**\n* This media query is a temporary fallback for browsers that do not support `@container query`.\n* TODO: remove this media query when `@container query` is fully supported by browsers\n* See https://github.com/GoogleChrome/lighthouse/pull/16332\n*/\n@media screen and (max-width: 640px) {\n .lh-meta__items {\n grid-template-columns: 1fr 1fr;\n }\n}\n\n/* Change the grid for narrow container */\n@container lh-container (max-width: 640px) {\n .lh-meta__items {\n grid-template-columns: 1fr 1fr;\n }\n}\n\n/**\n* This media query is a temporary fallback for browsers that do not support `@container query`.\n* TODO: remove this media query when `@container query` is fully supported by browsers\n* See https://github.com/GoogleChrome/lighthouse/pull/16332\n*/\n@media screen and (max-width: 535px) {\n .lh-meta__items {\n display: block;\n }\n}\n\n@container lh-container (max-width: 535px) {\n .lh-meta__items {\n display: block;\n }\n}\n\n/* Explodey gauge */\n\n.lh-exp-gauge-component {\n margin-bottom: 10px;\n}\n\n.lh-exp-gauge-component circle {\n stroke: currentcolor;\n r: var(--radius);\n}\n\n.lh-exp-gauge-component text {\n font-size: calc(var(--radius) * 0.2);\n}\n\n.lh-exp-gauge-component .lh-exp-gauge {\n margin: 0 auto;\n width: 225px;\n stroke-width: var(--stroke-width);\n stroke-linecap: round;\n\n /* for better rendering perf */\n contain: strict;\n height: 225px;\n will-change: transform;\n}\n.lh-exp-gauge-component .lh-exp-gauge--faded {\n opacity: 0.1;\n}\n.lh-exp-gauge-component .lh-exp-gauge__wrapper {\n font-family: var(--report-font-family-monospace);\n text-align: center;\n text-decoration: none;\n transition: .3s;\n}\n.lh-exp-gauge-component .lh-exp-gauge__wrapper--pass {\n color: var(--color-pass);\n}\n.lh-exp-gauge-component .lh-exp-gauge__wrapper--average {\n color: var(--color-average);\n}\n.lh-exp-gauge-component .lh-exp-gauge__wrapper--fail {\n color: var(--color-fail);\n}\n.lh-exp-gauge-component .state--expanded {\n transition: color .3s;\n}\n.lh-exp-gauge-component .state--highlight {\n color: var(--color-highlight);\n}\n.lh-exp-gauge-component .lh-exp-gauge__svg-wrapper {\n display: flex;\n flex-direction: column-reverse;\n}\n\n.lh-exp-gauge-component .lh-exp-gauge__label {\n fill: var(--report-text-color);\n font-family: var(--report-font-family);\n font-size: 12px;\n}\n\n.lh-exp-gauge-component .lh-exp-gauge__cutout {\n opacity: .999;\n transition: opacity .3s;\n}\n.lh-exp-gauge-component .state--highlight .lh-exp-gauge__cutout {\n opacity: 0;\n}\n\n.lh-exp-gauge-component .lh-exp-gauge__inner {\n color: inherit;\n}\n.lh-exp-gauge-component .lh-exp-gauge__base {\n fill: currentcolor;\n}\n\n\n.lh-exp-gauge-component .lh-exp-gauge__arc {\n fill: none;\n transition: opacity .3s;\n}\n.lh-exp-gauge-component .lh-exp-gauge__arc--metric {\n color: var(--metric-color);\n stroke-dashoffset: var(--metric-offset);\n opacity: 0.3;\n}\n.lh-exp-gauge-component .lh-exp-gauge-hovertarget {\n color: currentcolor;\n opacity: 0.001;\n stroke-linecap: butt;\n stroke-width: 24;\n /* hack. move the hover target out of the center. ideally i tweak the r instead but that rquires considerably more math. */\n transform: scale(1.15);\n}\n.lh-exp-gauge-component .lh-exp-gauge__arc--metric.lh-exp-gauge--miniarc {\n opacity: 0;\n stroke-dasharray: 0 calc(var(--circle-meas) * var(--radius));\n transition: 0s .005s;\n}\n.lh-exp-gauge-component .state--expanded .lh-exp-gauge__arc--metric.lh-exp-gauge--miniarc {\n opacity: .999;\n stroke-dasharray: var(--metric-array);\n transition: 0.3s; /* calc(.005s + var(--i)*.05s); entrace animation */\n}\n.lh-exp-gauge-component .state--expanded .lh-exp-gauge__inner .lh-exp-gauge__arc {\n opacity: 0;\n}\n\n\n.lh-exp-gauge-component .lh-exp-gauge__percentage {\n text-anchor: middle;\n dominant-baseline: middle;\n opacity: .999;\n font-size: calc(var(--radius) * 0.625);\n transition: opacity .3s ease-in;\n}\n.lh-exp-gauge-component .state--highlight .lh-exp-gauge__percentage {\n opacity: 0;\n}\n\n.lh-exp-gauge-component .lh-exp-gauge__wrapper--fail .lh-exp-gauge__percentage {\n fill: var(--color-fail);\n}\n.lh-exp-gauge-component .lh-exp-gauge__wrapper--average .lh-exp-gauge__percentage {\n fill: var(--color-average);\n}\n.lh-exp-gauge-component .lh-exp-gauge__wrapper--pass .lh-exp-gauge__percentage {\n fill: var(--color-pass);\n}\n\n.lh-exp-gauge-component .lh-cover {\n fill: none;\n opacity: .001;\n pointer-events: none;\n}\n.lh-exp-gauge-component .state--expanded .lh-cover {\n pointer-events: auto;\n}\n\n.lh-exp-gauge-component .metric {\n transform: scale(var(--scale-initial));\n opacity: 0;\n transition: transform .1s .2s ease-out, opacity .3s ease-out;\n pointer-events: none;\n}\n.lh-exp-gauge-component .metric text {\n pointer-events: none;\n}\n.lh-exp-gauge-component .metric__value {\n fill: currentcolor;\n opacity: 0;\n transition: opacity 0.2s;\n}\n.lh-exp-gauge-component .state--expanded .metric {\n transform: scale(1);\n opacity: .999;\n transition: transform .3s ease-out, opacity .3s ease-in, stroke-width .1s ease-out;\n transition-delay: calc(var(--i)*.05s);\n pointer-events: auto;\n}\n.lh-exp-gauge-component .state--highlight .metric {\n opacity: .3;\n}\n.lh-exp-gauge-component .state--highlight .metric--highlight {\n opacity: .999;\n stroke-width: calc(1.5*var(--stroke-width));\n}\n.lh-exp-gauge-component .state--highlight .metric--highlight .metric__value {\n opacity: 0.999;\n}\n\n\n/*\n the initial first load peek\n*/\n.lh-exp-gauge-component .lh-exp-gauge__bg { /* needed for the use zindex stacking w/ transparency */\n fill: var(--report-background-color);\n stroke: var(--report-background-color);\n}\n.lh-exp-gauge-component .state--peek .metric {\n transition-delay: 0ms;\n animation: peek var(--peek-dur) cubic-bezier(0.46, 0.03, 0.52, 0.96);\n animation-fill-mode: forwards;\n}\n.lh-exp-gauge-component .state--peek .lh-exp-gauge__inner .lh-exp-gauge__arc {\n opacity: 1;\n}\n.lh-exp-gauge-component .state--peek .lh-exp-gauge__arc.lh-exp-gauge--faded {\n opacity: 0.3; /* just a tad stronger cuz its fighting with a big solid arg */\n}\n/* do i need to set expanded and override this? */\n.lh-exp-gauge-component .state--peek .lh-exp-gauge__arc--metric.lh-exp-gauge--miniarc {\n transition: opacity 0.3s;\n}\n.lh-exp-gauge-component .state--peek {\n color: unset;\n}\n.lh-exp-gauge-component .state--peek .metric__label {\n display: none;\n}\n\n.lh-exp-gauge-component .metric__label {\n fill: var(--report-text-color);\n}\n\n@keyframes peek {\n /* biggest it should go is 0.92. smallest is 0.8 */\n 0% {\n transform: scale(0.8);\n opacity: 0.8;\n }\n\n 50% {\n transform: scale(0.92);\n opacity: 1;\n }\n\n 100% {\n transform: scale(0.8);\n opacity: 0.8;\n }\n}\n\n.lh-exp-gauge-component .wrapper {\n width: 620px;\n}\n\n/*# sourceURL=report-styles.css */\n"), t.append(n), t;
981
+ }
982
+ function Ot(e) {
983
+ let t = e.createFragment(), n = e.createElement("style");
984
+ n.append("\n .lh-topbar {\n position: sticky;\n top: 0;\n left: 0;\n right: 0;\n z-index: 1000;\n display: flex;\n align-items: center;\n height: var(--topbar-height);\n padding: var(--topbar-padding);\n font-size: var(--report-font-size-secondary);\n background-color: var(--topbar-background-color);\n border-bottom: 1px solid var(--color-gray-200);\n }\n\n .lh-topbar__logo {\n width: var(--topbar-logo-size);\n height: var(--topbar-logo-size);\n user-select: none;\n flex: none;\n }\n\n .lh-topbar__url {\n margin: var(--topbar-padding);\n text-decoration: none;\n color: var(--report-text-color);\n text-overflow: ellipsis;\n overflow: hidden;\n white-space: nowrap;\n }\n\n .lh-tools {\n display: flex;\n align-items: center;\n margin-left: auto;\n will-change: transform;\n min-width: var(--report-icon-size);\n }\n .lh-tools__button {\n width: var(--report-icon-size);\n min-width: 24px;\n height: var(--report-icon-size);\n cursor: pointer;\n margin-right: 5px;\n /* This is actually a button element, but we want to style it like a transparent div. */\n display: flex;\n background: none;\n color: inherit;\n border: none;\n padding: 0;\n font: inherit;\n }\n .lh-tools__button svg {\n fill: var(--tools-icon-color);\n }\n .lh-dark .lh-tools__button svg {\n filter: invert(1);\n }\n .lh-tools__button.lh-active + .lh-tools__dropdown {\n opacity: 1;\n clip: rect(-1px, 194px, 270px, -3px);\n visibility: visible;\n }\n .lh-tools__dropdown {\n position: absolute;\n background-color: var(--report-background-color);\n border: 1px solid var(--report-border-color);\n border-radius: 3px;\n padding: calc(var(--default-padding) / 2) 0;\n cursor: pointer;\n top: 36px;\n right: 0;\n box-shadow: 1px 1px 3px #ccc;\n min-width: 125px;\n clip: rect(0, 164px, 0, 0);\n visibility: hidden;\n opacity: 0;\n transition: all 200ms cubic-bezier(0,0,0.2,1);\n }\n .lh-tools__dropdown a {\n color: currentColor;\n text-decoration: none;\n white-space: nowrap;\n padding: 0 6px;\n line-height: 2;\n }\n .lh-tools__dropdown a:hover,\n .lh-tools__dropdown a:focus {\n background-color: var(--color-gray-200);\n outline: none;\n }\n /* save-gist option hidden in report. */\n .lh-tools__dropdown a[data-action='save-gist'] {\n display: none;\n }\n\n .lh-locale-selector {\n width: 100%;\n color: var(--report-text-color);\n background-color: var(--locale-selector-background-color);\n padding: 2px;\n }\n .lh-tools-locale {\n display: flex;\n align-items: center;\n flex-direction: row-reverse;\n }\n .lh-tools-locale__selector-wrapper {\n transition: opacity 0.15s;\n opacity: 0;\n max-width: 200px;\n }\n .lh-button.lh-tool-locale__button {\n height: var(--topbar-height);\n color: var(--tools-icon-color);\n padding: calc(var(--default-padding) / 2);\n }\n .lh-tool-locale__button.lh-active + .lh-tools-locale__selector-wrapper {\n opacity: 1;\n clip: rect(-1px, 255px, 242px, -3px);\n visibility: visible;\n margin: 0 4px;\n }\n\n /**\n * This media query is a temporary fallback for browsers that do not support `@container query`.\n * TODO: remove this media query when `@container query` is fully supported by browsers\n * See https://github.com/GoogleChrome/lighthouse/pull/16332\n */\n @media screen and (max-width: 964px) {\n .lh-tools__dropdown {\n right: 0;\n left: initial;\n }\n }\n\n @container lh-container (max-width: 964px) {\n .lh-tools__dropdown {\n right: 0;\n left: initial;\n }\n }\n\n @media print {\n .lh-topbar {\n position: static;\n margin-left: 0;\n }\n\n .lh-tools__dropdown {\n display: none;\n }\n }\n "), t.append(n);
985
+ let r = e.createElement("div", "lh-topbar"), i = e.createElementNS("http://www.w3.org/2000/svg", "svg", "lh-topbar__logo");
986
+ i.setAttribute("role", "img"), i.setAttribute("title", "Lighthouse logo"), i.setAttribute("fill", "none"), i.setAttribute("xmlns", "http://www.w3.org/2000/svg"), i.setAttribute("viewBox", "0 0 48 48");
987
+ let a = e.createElementNS("http://www.w3.org/2000/svg", "path");
988
+ a.setAttribute("d", "m14 7 10-7 10 7v10h5v7h-5l5 24H9l5-24H9v-7h5V7Z"), a.setAttribute("fill", "#F63");
989
+ let o = e.createElementNS("http://www.w3.org/2000/svg", "path");
990
+ o.setAttribute("d", "M31.561 24H14l-1.689 8.105L31.561 24ZM18.983 48H9l1.022-4.907L35.723 32.27l1.663 7.98L18.983 48Z"), o.setAttribute("fill", "#FFA385");
991
+ let s = e.createElementNS("http://www.w3.org/2000/svg", "path");
992
+ s.setAttribute("fill", "#FF3"), s.setAttribute("d", "M20.5 10h7v7h-7z"), i.append(" ", a, " ", o, " ", s, " ");
993
+ let c = e.createElement("a", "lh-topbar__url");
994
+ c.setAttribute("href", ""), c.setAttribute("target", "_blank"), c.setAttribute("rel", "noopener");
995
+ let l = e.createElement("div", "lh-tools"), u = e.createElement("div", "lh-tools-locale lh-hidden"), d = e.createElement("button", "lh-button lh-tool-locale__button");
996
+ d.setAttribute("id", "lh-button__swap-locales"), d.setAttribute("title", "Show Language Picker"), d.setAttribute("aria-label", "Toggle language picker"), d.setAttribute("aria-haspopup", "menu"), d.setAttribute("aria-expanded", "false"), d.setAttribute("aria-controls", "lh-tools-locale__selector-wrapper");
997
+ let f = e.createElementNS("http://www.w3.org/2000/svg", "svg");
998
+ f.setAttribute("width", "20px"), f.setAttribute("height", "20px"), f.setAttribute("viewBox", "0 0 24 24"), f.setAttribute("fill", "currentColor");
999
+ let p = e.createElementNS("http://www.w3.org/2000/svg", "path");
1000
+ p.setAttribute("d", "M0 0h24v24H0V0z"), p.setAttribute("fill", "none");
1001
+ let m = e.createElementNS("http://www.w3.org/2000/svg", "path");
1002
+ m.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"), f.append(p, m), d.append(" ", f, " ");
1003
+ let h = e.createElement("div", "lh-tools-locale__selector-wrapper");
1004
+ h.setAttribute("id", "lh-tools-locale__selector-wrapper"), h.setAttribute("role", "menu"), h.setAttribute("aria-labelledby", "lh-button__swap-locales"), h.setAttribute("aria-hidden", "true"), h.append(" ", " "), u.append(" ", d, " ", h, " ");
1005
+ let g = e.createElement("button", "lh-tools__button");
1006
+ g.setAttribute("id", "lh-tools-button"), g.setAttribute("title", "Tools menu"), g.setAttribute("aria-label", "Toggle report tools menu"), g.setAttribute("aria-haspopup", "menu"), g.setAttribute("aria-expanded", "false"), g.setAttribute("aria-controls", "lh-tools-dropdown");
1007
+ let _ = e.createElementNS("http://www.w3.org/2000/svg", "svg");
1008
+ _.setAttribute("width", "100%"), _.setAttribute("height", "100%"), _.setAttribute("viewBox", "0 0 24 24");
1009
+ let v = e.createElementNS("http://www.w3.org/2000/svg", "path");
1010
+ v.setAttribute("d", "M0 0h24v24H0z"), v.setAttribute("fill", "none");
1011
+ let y = e.createElementNS("http://www.w3.org/2000/svg", "path");
1012
+ y.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"), _.append(" ", v, " ", y, " "), g.append(" ", _, " ");
1013
+ let b = e.createElement("div", "lh-tools__dropdown");
1014
+ b.setAttribute("id", "lh-tools-dropdown"), b.setAttribute("role", "menu"), b.setAttribute("aria-labelledby", "lh-tools-button");
1015
+ let x = e.createElement("a", "lh-report-icon lh-report-icon--print");
1016
+ x.setAttribute("role", "menuitem"), x.setAttribute("tabindex", "-1"), x.setAttribute("href", "#"), x.setAttribute("data-i18n", "dropdownPrintSummary"), x.setAttribute("data-action", "print-summary");
1017
+ let S = e.createElement("a", "lh-report-icon lh-report-icon--print");
1018
+ S.setAttribute("role", "menuitem"), S.setAttribute("tabindex", "-1"), S.setAttribute("href", "#"), S.setAttribute("data-i18n", "dropdownPrintExpanded"), S.setAttribute("data-action", "print-expanded");
1019
+ let C = e.createElement("a", "lh-report-icon lh-report-icon--copy");
1020
+ C.setAttribute("role", "menuitem"), C.setAttribute("tabindex", "-1"), C.setAttribute("href", "#"), C.setAttribute("data-i18n", "dropdownCopyJSON"), C.setAttribute("data-action", "copy");
1021
+ let w = e.createElement("a", "lh-report-icon lh-report-icon--download lh-hidden");
1022
+ w.setAttribute("role", "menuitem"), w.setAttribute("tabindex", "-1"), w.setAttribute("href", "#"), w.setAttribute("data-i18n", "dropdownSaveHTML"), w.setAttribute("data-action", "save-html");
1023
+ let T = e.createElement("a", "lh-report-icon lh-report-icon--download");
1024
+ T.setAttribute("role", "menuitem"), T.setAttribute("tabindex", "-1"), T.setAttribute("href", "#"), T.setAttribute("data-i18n", "dropdownSaveJSON"), T.setAttribute("data-action", "save-json");
1025
+ let E = e.createElement("a", "lh-report-icon lh-report-icon--open");
1026
+ E.setAttribute("role", "menuitem"), E.setAttribute("tabindex", "-1"), E.setAttribute("href", "#"), E.setAttribute("data-i18n", "dropdownViewer"), E.setAttribute("data-action", "open-viewer");
1027
+ let D = e.createElement("a", "lh-report-icon lh-report-icon--open");
1028
+ D.setAttribute("role", "menuitem"), D.setAttribute("tabindex", "-1"), D.setAttribute("href", "#"), D.setAttribute("data-i18n", "dropdownSaveGist"), D.setAttribute("data-action", "save-gist");
1029
+ let O = e.createElement("a", "lh-report-icon lh-report-icon--open lh-hidden");
1030
+ O.setAttribute("role", "menuitem"), O.setAttribute("tabindex", "-1"), O.setAttribute("href", "#"), O.setAttribute("data-i18n", "dropdownViewUnthrottledTrace"), O.setAttribute("data-action", "view-unthrottled-trace");
1031
+ let k = e.createElement("a", "lh-report-icon lh-report-icon--dark");
1032
+ return k.setAttribute("role", "menuitem"), k.setAttribute("tabindex", "-1"), k.setAttribute("href", "#"), k.setAttribute("data-i18n", "dropdownDarkTheme"), k.setAttribute("data-action", "toggle-dark"), b.append(" ", x, " ", S, " ", C, " ", " ", w, " ", T, " ", E, " ", D, " ", " ", O, " ", k, " "), l.append(" ", u, " ", g, " ", b, " "), r.append(" ", " ", i, " ", c, " ", l, " "), t.append(r), t;
1033
+ }
1034
+ function kt(e) {
1035
+ let t = e.createFragment(), n = e.createElement("div", "lh-warnings lh-warnings--toplevel"), r = e.createElement("p", "lh-warnings__msg"), i = e.createElement("ul");
1036
+ return n.append(" ", r, " ", i, " "), t.append(n), t;
1037
+ }
1038
+ function At(e, t) {
1039
+ switch (t) {
1040
+ case "3pFilter": return st(e);
1041
+ case "audit": return ct(e);
1042
+ case "categoryHeader": return lt(e);
1043
+ case "chevron": return ut(e);
1044
+ case "clump": return dt(e);
1045
+ case "crc": return ft(e);
1046
+ case "crcChain": return pt(e);
1047
+ case "elementScreenshot": return mt(e);
1048
+ case "explodeyGauge": return ht(e);
1049
+ case "footer": return gt(e);
1050
+ case "fraction": return _t(e);
1051
+ case "gauge": return vt(e);
1052
+ case "heading": return yt(e);
1053
+ case "metric": return bt(e);
1054
+ case "scorescale": return xt(e);
1055
+ case "scoresWrapper": return St(e);
1056
+ case "snippet": return Ct(e);
1057
+ case "snippetContent": return wt(e);
1058
+ case "snippetHeader": return Tt(e);
1059
+ case "snippetLine": return Et(e);
1060
+ case "styles": return Dt(e);
1061
+ case "topbar": return Ot(e);
1062
+ case "warningsToplevel": return kt(e);
1063
+ }
1064
+ throw Error("unexpected component: " + t);
1065
+ }
1066
+ var jt = class {
1067
+ constructor(e, t) {
1068
+ this._document = e, this._lighthouseChannel = "unknown", this._componentCache = /* @__PURE__ */ new Map(), this.rootEl = t;
1069
+ }
1070
+ createElement(e, t) {
1071
+ let n = this._document.createElement(e);
1072
+ if (t) for (let e of t.split(/\s+/)) e && n.classList.add(e);
1073
+ return n;
1074
+ }
1075
+ createElementNS(e, t, n) {
1076
+ let r = this._document.createElementNS(e, t);
1077
+ if (n) for (let e of n.split(/\s+/)) e && r.classList.add(e);
1078
+ return r;
1079
+ }
1080
+ createSVGElement(e, t) {
1081
+ return this._document.createElementNS("http://www.w3.org/2000/svg", e, t);
1082
+ }
1083
+ createFragment() {
1084
+ return this._document.createDocumentFragment();
1085
+ }
1086
+ createTextNode(e) {
1087
+ return this._document.createTextNode(e);
1088
+ }
1089
+ createChildOf(e, t, n) {
1090
+ let r = this.createElement(t, n);
1091
+ return e.append(r), r;
1092
+ }
1093
+ createComponent(e) {
1094
+ let t = this._componentCache.get(e);
1095
+ if (t) {
1096
+ let e = t.cloneNode(!0);
1097
+ return this.findAll("style", e).forEach((e) => e.remove()), e;
1098
+ }
1099
+ return t = At(this, e), this._componentCache.set(e, t), t.cloneNode(!0);
1100
+ }
1101
+ clearComponentCache() {
1102
+ this._componentCache.clear();
1103
+ }
1104
+ convertMarkdownLinkSnippets(e, t = {}) {
1105
+ let n = this.createElement("span");
1106
+ for (let r of B.splitMarkdownLink(e)) {
1107
+ let e = r.text.includes("`") ? this.convertMarkdownCodeSnippets(r.text) : r.text;
1108
+ if (!r.isLink) {
1109
+ n.append(e);
1110
+ continue;
1111
+ }
1112
+ let i = new URL(r.linkHref);
1113
+ ([
1114
+ "https://developers.google.com",
1115
+ "https://web.dev",
1116
+ "https://developer.chrome.com"
1117
+ ].includes(i.origin) || t.alwaysAppendUtmSource) && (i.searchParams.set("utm_source", "lighthouse"), i.searchParams.set("utm_medium", this._lighthouseChannel));
1118
+ let a = this.createElement("a");
1119
+ a.rel = "noopener", a.target = "_blank", a.append(e), this.safelySetHref(a, i.href), n.append(a);
1120
+ }
1121
+ return n;
1122
+ }
1123
+ safelySetHref(e, t) {
1124
+ if (t ||= "", t.startsWith("#")) {
1125
+ e.href = t;
1126
+ return;
1127
+ }
1128
+ let n = ["https:", "http:"], r;
1129
+ try {
1130
+ r = new URL(t);
1131
+ } catch {}
1132
+ r && n.includes(r.protocol) && (e.href = r.href);
1133
+ }
1134
+ safelySetBlobHref(e, t) {
1135
+ if (t.type !== "text/html" && t.type !== "application/json") throw Error("Unsupported blob type");
1136
+ e.href = URL.createObjectURL(t);
1137
+ }
1138
+ convertMarkdownCodeSnippets(e) {
1139
+ let t = this.createElement("span");
1140
+ for (let n of B.splitMarkdownCodeSpans(e)) if (n.isCode) {
1141
+ let e = this.createElement("code");
1142
+ e.textContent = n.text, t.append(e);
1143
+ } else t.append(this._document.createTextNode(n.text));
1144
+ return t;
1145
+ }
1146
+ setLighthouseChannel(e) {
1147
+ this._lighthouseChannel = e;
1148
+ }
1149
+ document() {
1150
+ return this._document;
1151
+ }
1152
+ isDevTools() {
1153
+ return !!this._document.querySelector(".lh-devtools");
1154
+ }
1155
+ find(e, t = this.rootEl ?? this._document) {
1156
+ let n = this.maybeFind(e, t);
1157
+ if (n === null) throw Error(`query ${e} not found`);
1158
+ return n;
1159
+ }
1160
+ maybeFind(e, t = this.rootEl ?? this._document) {
1161
+ return t.querySelector(e);
1162
+ }
1163
+ findAll(e, t) {
1164
+ return Array.from(t.querySelectorAll(e));
1165
+ }
1166
+ fireEventOn(e, t = this._document, n) {
1167
+ let r = new CustomEvent(e, n ? { detail: n } : void 0);
1168
+ t.dispatchEvent(r);
1169
+ }
1170
+ saveFile(e, t) {
1171
+ let n = this.createElement("a");
1172
+ 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);
1173
+ }
1174
+ }, Mt = 0, V = class e {
1175
+ static i18n = null;
1176
+ static strings = {};
1177
+ static reportJson = null;
1178
+ static apply(t) {
1179
+ e.strings = {
1180
+ ...Ft,
1181
+ ...t.providedStrings
1182
+ }, e.i18n = t.i18n, e.reportJson = t.reportJson;
1183
+ }
1184
+ static getUniqueSuffix() {
1185
+ return Mt++;
1186
+ }
1187
+ static resetUniqueSuffix() {
1188
+ Mt = 0;
1189
+ }
1190
+ }, Nt = "data:image/jpeg;base64,";
1191
+ function Pt(e) {
1192
+ e.configSettings.locale || (e.configSettings.locale = "en"), e.configSettings.formFactor || (e.configSettings.formFactor = e.configSettings.emulatedFormFactor), e.finalDisplayedUrl = B.getFinalDisplayedUrl(e), e.mainDocumentUrl = B.getMainDocumentUrl(e);
1193
+ for (let t of Object.values(e.audits)) if ((t.scoreDisplayMode === "not_applicable" || t.scoreDisplayMode === "not-applicable") && (t.scoreDisplayMode = "notApplicable"), t.scoreDisplayMode === "informative" && (t.score = 1), t.details) {
1194
+ if ((t.details.type === void 0 || t.details.type === "diagnostic") && (t.details.type = "debugdata"), t.details.type === "filmstrip") for (let e of t.details.items) e.data.startsWith(Nt) || (e.data = Nt + e.data);
1195
+ if (t.details.type === "table") for (let e of t.details.headings) {
1196
+ let { itemType: t, text: n } = e;
1197
+ t !== void 0 && (e.valueType = t, delete e.itemType), n !== void 0 && (e.label = n, delete e.text);
1198
+ let r = e.subItemsHeading?.itemType;
1199
+ e.subItemsHeading && r !== void 0 && (e.subItemsHeading.valueType = r, delete e.subItemsHeading.itemType);
1200
+ }
1201
+ if (t.id === "third-party-summary" && (t.details.type === "opportunity" || t.details.type === "table")) {
1202
+ let { headings: e, items: n } = t.details;
1203
+ if (e[0].valueType === "link") {
1204
+ e[0].valueType = "text";
1205
+ for (let e of n) typeof e.entity == "object" && e.entity.type === "link" && (e.entity = e.entity.text);
1206
+ t.details.isEntityGrouped = !0;
1207
+ }
1208
+ }
1209
+ }
1210
+ let [t] = e.lighthouseVersion.split(".").map(Number), n = e.categories.performance;
1211
+ if (n) {
1212
+ if (t < 9) {
1213
+ e.categoryGroups ||= {}, e.categoryGroups.hidden = { title: "" };
1214
+ for (let e of n.auditRefs) e.group ? e.group === "load-opportunities" && (e.group = "diagnostics") : e.group = "hidden";
1215
+ } else if (t < 12) for (let e of n.auditRefs) e.group ||= "diagnostics";
1216
+ }
1217
+ if (t < 12 && n) {
1218
+ let t = /* @__PURE__ */ new Map();
1219
+ for (let e of n.auditRefs) {
1220
+ let n = e.relevantAudits;
1221
+ if (!(!n || !e.acronym)) for (let r of n) {
1222
+ let n = t.get(r) || [];
1223
+ n.push(e.acronym), t.set(r, n);
1224
+ }
1225
+ }
1226
+ for (let [n, r] of t) {
1227
+ if (!r.length) continue;
1228
+ let t = e.audits[n];
1229
+ if (t && !t.metricSavings) {
1230
+ t.metricSavings = {};
1231
+ for (let e of r) t.metricSavings[e] = 0;
1232
+ }
1233
+ }
1234
+ }
1235
+ if (e.environment ||= {
1236
+ benchmarkIndex: 0,
1237
+ networkUserAgent: e.userAgent,
1238
+ hostUserAgent: e.userAgent
1239
+ }, e.configSettings.screenEmulation || (e.configSettings.screenEmulation = {
1240
+ width: -1,
1241
+ height: -1,
1242
+ deviceScaleFactor: -1,
1243
+ mobile: /mobile/i.test(e.environment.hostUserAgent),
1244
+ disabled: !1
1245
+ }), e.i18n ||= {}, e.audits["full-page-screenshot"]) {
1246
+ let t = e.audits["full-page-screenshot"].details;
1247
+ t ? e.fullPageScreenshot = {
1248
+ screenshot: t.screenshot,
1249
+ nodes: t.nodes
1250
+ } : e.fullPageScreenshot = null, delete e.audits["full-page-screenshot"];
1251
+ }
1252
+ }
1253
+ var H = B.RATINGS, U = class e {
1254
+ static prepareReportResult(t) {
1255
+ let n = JSON.parse(JSON.stringify(t));
1256
+ Pt(n);
1257
+ for (let t of Object.values(n.audits)) t.details && (t.details.type === "opportunity" || t.details.type === "table") && !t.details.isEntityGrouped && n.entities && e.classifyEntities(n.entities, t.details);
1258
+ if (typeof n.categories != "object") throw Error("No categories provided.");
1259
+ let r = /* @__PURE__ */ new Map();
1260
+ for (let e of Object.values(n.categories)) e.auditRefs.forEach((e) => {
1261
+ e.acronym && r.set(e.acronym, e);
1262
+ }), e.auditRefs.forEach((e) => {
1263
+ e.result = n.audits[e.id];
1264
+ let t = Object.keys(e.result.metricSavings || {});
1265
+ if (t.length) {
1266
+ e.relevantMetrics = [];
1267
+ for (let n of t) {
1268
+ let t = r.get(n);
1269
+ t && e.relevantMetrics.push(t);
1270
+ }
1271
+ }
1272
+ if (n.stackPacks) {
1273
+ let t = [e.id, ...e.result.replacesAudits ?? []];
1274
+ n.stackPacks.forEach((n) => {
1275
+ let r = t.find((e) => n.descriptions[e]);
1276
+ r && n.descriptions[r] && (e.stackPacks = e.stackPacks || [], e.stackPacks.push({
1277
+ title: n.title,
1278
+ iconDataURL: n.iconDataURL,
1279
+ description: n.descriptions[r]
1280
+ }));
1281
+ });
1282
+ }
1283
+ });
1284
+ return n;
1285
+ }
1286
+ static getUrlLocatorFn(e) {
1287
+ let t = e.find((e) => e.valueType === "url")?.key;
1288
+ if (t && typeof t == "string") return (e) => {
1289
+ let n = e[t];
1290
+ if (typeof n == "string") return n;
1291
+ };
1292
+ let n = e.find((e) => e.valueType === "source-location")?.key;
1293
+ if (n) return (e) => {
1294
+ let t = e[n];
1295
+ if (typeof t == "object" && t.type === "source-location") return t.url;
1296
+ };
1297
+ }
1298
+ static classifyEntities(t, n) {
1299
+ let { items: r, headings: i } = n;
1300
+ if (!r.length || r.some((e) => e.entity)) return;
1301
+ let a = e.getUrlLocatorFn(i);
1302
+ if (a) for (let e of r) {
1303
+ let n = a(e);
1304
+ if (!n) continue;
1305
+ let r = "";
1306
+ try {
1307
+ r = B.parseURL(n).origin;
1308
+ } catch {}
1309
+ if (!r) continue;
1310
+ let i = t.find((e) => e.origins.includes(r));
1311
+ i && (e.entity = i.name);
1312
+ }
1313
+ }
1314
+ static getTableItemSortComparator(e) {
1315
+ return (t, n) => {
1316
+ for (let r of e) {
1317
+ let e = t[r], i = n[r];
1318
+ if ((typeof e != typeof i || !["number", "string"].includes(typeof e)) && console.warn(`Warning: Attempting to sort unsupported value type: ${r}.`), typeof e == "number" && typeof i == "number" && e !== i) return i - e;
1319
+ if (typeof e == "string" && typeof i == "string" && e !== i) return e.localeCompare(i);
1320
+ }
1321
+ return 0;
1322
+ };
1323
+ }
1324
+ static getEmulationDescriptions(e) {
1325
+ let t, n, r, i = e.throttling, a = V.i18n, o = V.strings;
1326
+ switch (e.throttlingMethod) {
1327
+ case "provided":
1328
+ r = n = t = o.throttlingProvided;
1329
+ break;
1330
+ case "devtools": {
1331
+ let { cpuSlowdownMultiplier: e, requestLatencyMs: s } = i;
1332
+ t = `${a.formatNumber(e)}x slowdown (DevTools)`, n = `${a.formatMilliseconds(s)} HTTP RTT, ${a.formatKbps(i.downloadThroughputKbps)} down, ${a.formatKbps(i.uploadThroughputKbps)} up (DevTools)`, r = s === 150 * 3.75 && i.downloadThroughputKbps === 1.6 * 1024 * .9 && i.uploadThroughputKbps === 750 * .9 ? o.runtimeSlow4g : o.runtimeCustom;
1333
+ break;
1334
+ }
1335
+ case "simulate": {
1336
+ let { cpuSlowdownMultiplier: e, rttMs: s, throughputKbps: c } = i;
1337
+ t = `${a.formatNumber(e)}x slowdown (Simulated)`, n = `${a.formatMilliseconds(s)} TCP RTT, ${a.formatKbps(c)} throughput (Simulated)`, r = s === 150 && c === 1.6 * 1024 ? o.runtimeSlow4g : o.runtimeCustom;
1338
+ break;
1339
+ }
1340
+ default: r = t = n = o.runtimeUnknown;
1341
+ }
1342
+ let s = e.channel === "devtools" ? !1 : e.screenEmulation.disabled, c = e.channel === "devtools" ? e.formFactor === "mobile" : e.screenEmulation.mobile, l = o.runtimeMobileEmulation;
1343
+ s ? l = o.runtimeNoEmulation : c || (l = o.runtimeDesktopEmulation);
1344
+ let u = s ? void 0 : `${e.screenEmulation.width}x${e.screenEmulation.height}, DPR ${e.screenEmulation.deviceScaleFactor}`;
1345
+ return {
1346
+ deviceEmulation: l,
1347
+ screenEmulation: u,
1348
+ cpuThrottling: t,
1349
+ networkThrottling: n,
1350
+ summary: r
1351
+ };
1352
+ }
1353
+ static showAsPassed(e) {
1354
+ switch (e.scoreDisplayMode) {
1355
+ case "manual":
1356
+ case "notApplicable": return !0;
1357
+ case "error":
1358
+ case "informative": return !1;
1359
+ default: return Number(e.score) >= H.PASS.minScore;
1360
+ }
1361
+ }
1362
+ static calculateRating(e, t) {
1363
+ if (t === "manual" || t === "notApplicable") return H.PASS.label;
1364
+ if (t === "error") return H.ERROR.label;
1365
+ if (e === null) return H.FAIL.label;
1366
+ let n = H.FAIL.label;
1367
+ return e >= H.PASS.minScore ? n = H.PASS.label : e >= H.AVERAGE.minScore && (n = H.AVERAGE.label), n;
1368
+ }
1369
+ static calculateCategoryFraction(t) {
1370
+ let n = 0, r = 0, i = 0, a = 0;
1371
+ for (let o of t.auditRefs) {
1372
+ let t = e.showAsPassed(o.result);
1373
+ if (!(o.group === "hidden" || o.result.scoreDisplayMode === "manual" || o.result.scoreDisplayMode === "notApplicable")) {
1374
+ if (o.result.scoreDisplayMode === "informative") {
1375
+ t || ++i;
1376
+ continue;
1377
+ }
1378
+ ++n, a += o.weight, t && r++;
1379
+ }
1380
+ }
1381
+ return {
1382
+ numPassed: r,
1383
+ numPassableAudits: n,
1384
+ numInformative: i,
1385
+ totalWeight: a
1386
+ };
1387
+ }
1388
+ static isPluginCategory(e) {
1389
+ return e.startsWith("lighthouse-plugin-");
1390
+ }
1391
+ static shouldDisplayAsFraction(e, t) {
1392
+ return e === "timespan" || e === "snapshot" || t?.categoryScoreDisplayMode === "fraction";
1393
+ }
1394
+ }, Ft = {
1395
+ 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.",
1396
+ calculatorLink: "See calculator.",
1397
+ showRelevantAudits: "Show audits relevant to:",
1398
+ opportunityResourceColumnLabel: "Opportunity",
1399
+ opportunitySavingsColumnLabel: "Estimated Savings",
1400
+ errorMissingAuditInfo: "Report error: no audit information",
1401
+ errorLabel: "Error!",
1402
+ warningHeader: "Warnings: ",
1403
+ warningAuditsGroupTitle: "Passed audits but with warnings",
1404
+ passedAuditsGroupTitle: "Passed audits",
1405
+ notApplicableAuditsGroupTitle: "Not applicable",
1406
+ manualAuditsGroupTitle: "Additional items to manually check",
1407
+ toplevelWarningsMessage: "There were issues affecting this run of Lighthouse:",
1408
+ crcInitialNavigation: "Initial Navigation",
1409
+ crcLongestDurationLabel: "Maximum critical path latency:",
1410
+ snippetExpandButtonLabel: "Expand snippet",
1411
+ snippetCollapseButtonLabel: "Collapse snippet",
1412
+ 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.",
1413
+ labDataTitle: "Lab Data",
1414
+ thirdPartyResourcesLabel: "Show 3rd-party resources",
1415
+ viewTreemapLabel: "View Treemap",
1416
+ viewTraceLabel: "View Trace",
1417
+ dropdownPrintSummary: "Print Summary",
1418
+ dropdownPrintExpanded: "Print Expanded",
1419
+ dropdownCopyJSON: "Copy JSON",
1420
+ dropdownSaveHTML: "Save as HTML",
1421
+ dropdownSaveJSON: "Save as JSON",
1422
+ dropdownViewer: "Open in Viewer",
1423
+ dropdownSaveGist: "Save as Gist",
1424
+ dropdownDarkTheme: "Toggle Dark Theme",
1425
+ dropdownViewUnthrottledTrace: "View Unthrottled Trace",
1426
+ runtimeSettingsDevice: "Device",
1427
+ runtimeSettingsNetworkThrottling: "Network throttling",
1428
+ runtimeSettingsCPUThrottling: "CPU throttling",
1429
+ runtimeSettingsUANetwork: "User agent (network)",
1430
+ runtimeSettingsBenchmark: "Unthrottled CPU/Memory Power",
1431
+ runtimeSettingsAxeVersion: "Axe version",
1432
+ runtimeSettingsScreenEmulation: "Screen emulation",
1433
+ footerIssue: "File an issue",
1434
+ runtimeNoEmulation: "No emulation",
1435
+ runtimeMobileEmulation: "Emulated Moto G Power",
1436
+ runtimeDesktopEmulation: "Emulated Desktop",
1437
+ runtimeUnknown: "Unknown",
1438
+ runtimeSingleLoad: "Single page session",
1439
+ runtimeAnalysisWindow: "Initial page load",
1440
+ runtimeAnalysisWindowTimespan: "User interactions timespan",
1441
+ runtimeAnalysisWindowSnapshot: "Point-in-time snapshot",
1442
+ runtimeSingleLoadTooltip: "This data is taken from a single page session, as opposed to field data summarizing many sessions.",
1443
+ throttlingProvided: "Provided by environment",
1444
+ show: "Show",
1445
+ hide: "Hide",
1446
+ expandView: "Expand view",
1447
+ collapseView: "Collapse view",
1448
+ runtimeSlow4g: "Slow 4G throttling",
1449
+ runtimeCustom: "Custom throttling",
1450
+ firstPartyChipLabel: "1st party",
1451
+ openInANewTabTooltip: "Open in a new tab",
1452
+ unattributable: "Unattributable",
1453
+ unscoredLabel: "Unscored",
1454
+ unscoredTitle: "This audit does not contribute to the overall category score."
1455
+ }, It = class {
1456
+ constructor(e, t) {
1457
+ this.dom = e, this.detailsRenderer = t;
1458
+ }
1459
+ get _clumpTitles() {
1460
+ return {
1461
+ warning: V.strings.warningAuditsGroupTitle,
1462
+ manual: V.strings.manualAuditsGroupTitle,
1463
+ passed: V.strings.passedAuditsGroupTitle,
1464
+ notApplicable: V.strings.notApplicableAuditsGroupTitle
1465
+ };
1466
+ }
1467
+ renderAudit(e) {
1468
+ let t = V.strings, n = this.dom.createComponent("audit"), r = this.dom.find("div.lh-audit", n);
1469
+ r.id = e.result.id;
1470
+ let i = e.result.scoreDisplayMode;
1471
+ e.result.displayValue && (this.dom.find(".lh-audit__display-text", r).textContent = e.result.displayValue);
1472
+ let a = this.dom.find(".lh-audit__title", r);
1473
+ a.append(this.dom.convertMarkdownCodeSnippets(e.result.title));
1474
+ let o = this.dom.find(".lh-audit__description", r);
1475
+ o.append(this.dom.convertMarkdownLinkSnippets(e.result.description));
1476
+ for (let t of e.relevantMetrics || []) {
1477
+ let e = this.dom.createChildOf(o, "span", "lh-audit__adorn");
1478
+ e.title = `Relevant to ${t.result.title}`, e.textContent = t.acronym || t.id;
1479
+ }
1480
+ if (e.weight === 0) {
1481
+ let e = this.dom.createChildOf(o, "span", "lh-audit__adorn");
1482
+ e.title = V.strings.unscoredTitle, e.textContent = V.strings.unscoredLabel;
1483
+ }
1484
+ e.stackPacks && e.stackPacks.forEach((e) => {
1485
+ let t = this.dom.createElement("img", "lh-audit__stackpack__img");
1486
+ t.src = e.iconDataURL, t.alt = e.title;
1487
+ let n = this.dom.convertMarkdownLinkSnippets(e.description, { alwaysAppendUtmSource: !0 }), i = this.dom.createElement("div", "lh-audit__stackpack");
1488
+ i.append(t, n), this.dom.find(".lh-audit__stackpacks", r).append(i);
1489
+ });
1490
+ let s = this.dom.find("details", r);
1491
+ if (e.result.details) {
1492
+ let t = this.detailsRenderer.render(e.result.details);
1493
+ t && (t.classList.add("lh-details"), s.append(t));
1494
+ }
1495
+ if (this.dom.find(".lh-chevron-container", r).append(this._createChevron()), this._setRatingClass(r, e.result.score, i), e.result.scoreDisplayMode === "error") {
1496
+ r.classList.add("lh-audit--error");
1497
+ let n = this.dom.find(".lh-audit__display-text", r);
1498
+ n.textContent = t.errorLabel, n.classList.add("lh-tooltip-boundary");
1499
+ let i = this.dom.createChildOf(n, "div", "lh-tooltip lh-tooltip--error");
1500
+ i.textContent = e.result.errorMessage || t.errorMissingAuditInfo;
1501
+ } else if (e.result.explanation) {
1502
+ let t = this.dom.createChildOf(a, "div", "lh-audit-explanation");
1503
+ t.textContent = e.result.explanation;
1504
+ }
1505
+ let c = e.result.warnings;
1506
+ if (!c || c.length === 0) return r;
1507
+ let l = this.dom.find("summary", s), u = this.dom.createChildOf(l, "div", "lh-warnings");
1508
+ if (this.dom.createChildOf(u, "span").textContent = t.warningHeader, c.length === 1) u.append(this.dom.createTextNode(c.join("")));
1509
+ else {
1510
+ let e = this.dom.createChildOf(u, "ul");
1511
+ for (let t of c) {
1512
+ let n = this.dom.createChildOf(e, "li");
1513
+ n.textContent = t;
1514
+ }
1515
+ }
1516
+ return r;
1517
+ }
1518
+ injectFinalScreenshot(e, t, n) {
1519
+ let r = t["final-screenshot"];
1520
+ if (!r || r.scoreDisplayMode === "error" || !r.details || r.details.type !== "screenshot") return null;
1521
+ let i = this.dom.createElement("img", "lh-final-ss-image");
1522
+ i.src = r.details.data, i.alt = r.title;
1523
+ let a = this.dom.find(".lh-category .lh-category-header", e), o = this.dom.createElement("div", "lh-category-headercol"), s = this.dom.createElement("div", "lh-category-headercol lh-category-headercol--separator"), c = this.dom.createElement("div", "lh-category-headercol");
1524
+ o.append(...a.childNodes), o.append(n), c.append(i), a.append(o, s, c), a.classList.add("lh-category-header__finalscreenshot");
1525
+ }
1526
+ _createChevron() {
1527
+ let e = this.dom.createComponent("chevron");
1528
+ return this.dom.find("svg.lh-chevron", e);
1529
+ }
1530
+ _setRatingClass(e, t, n) {
1531
+ let r = U.calculateRating(t, n);
1532
+ return e.classList.add(`lh-audit--${n.toLowerCase()}`), n !== "informative" && e.classList.add(`lh-audit--${r}`), e;
1533
+ }
1534
+ renderCategoryHeader(e, t, n) {
1535
+ let r = this.dom.createComponent("categoryHeader"), i = this.dom.find(".lh-score__gauge", r), a = this.renderCategoryScore(e, t, n);
1536
+ if (i.append(a), e.description) {
1537
+ let t = this.dom.convertMarkdownLinkSnippets(e.description);
1538
+ this.dom.find(".lh-category-header__description", r).append(t);
1539
+ }
1540
+ return r;
1541
+ }
1542
+ renderAuditGroup(e) {
1543
+ let t = this.dom.createElement("div", "lh-audit-group"), n = this.dom.createElement("div", "lh-audit-group__header");
1544
+ this.dom.createChildOf(n, "span", "lh-audit-group__title").textContent = e.title, t.append(n);
1545
+ let r = null;
1546
+ 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];
1547
+ }
1548
+ _renderGroupedAudits(e, t) {
1549
+ let n = /* @__PURE__ */ new Map(), r = "NotAGroup";
1550
+ n.set(r, []);
1551
+ for (let t of e) {
1552
+ let e = t.group || r, i = n.get(e) || [];
1553
+ i.push(t), n.set(e, i);
1554
+ }
1555
+ let i = [];
1556
+ for (let [e, a] of n) {
1557
+ if (e === r) {
1558
+ for (let e of a) i.push(this.renderAudit(e));
1559
+ continue;
1560
+ }
1561
+ let n = t[e], [o, s] = this.renderAuditGroup(n);
1562
+ for (let e of a) o.insertBefore(this.renderAudit(e), s);
1563
+ o.classList.add(`lh-audit-group--${e}`), i.push(o);
1564
+ }
1565
+ return i;
1566
+ }
1567
+ renderUnexpandableClump(e, t) {
1568
+ let n = this.dom.createElement("div");
1569
+ return this._renderGroupedAudits(e, t).forEach((e) => n.append(e)), n;
1570
+ }
1571
+ renderClump(e, { auditRefsOrEls: t, description: n, openByDefault: r }) {
1572
+ let i = this.dom.createComponent("clump"), a = this.dom.find(".lh-clump", i);
1573
+ r && a.setAttribute("open", "");
1574
+ let o = this.dom.find(".lh-audit-group__header", a), s = this._clumpTitles[e];
1575
+ this.dom.find(".lh-audit-group__title", o).textContent = s;
1576
+ let c = this.dom.find(".lh-audit-group__itemcount", a);
1577
+ c.textContent = `(${t.length})`;
1578
+ let l = t.map((e) => e instanceof HTMLElement ? e : this.renderAudit(e));
1579
+ a.append(...l);
1580
+ let u = this.dom.find(".lh-audit-group", i);
1581
+ if (n) {
1582
+ let e = this.dom.convertMarkdownLinkSnippets(n);
1583
+ e.classList.add("lh-audit-group__description", "lh-audit-group__footer"), u.append(e);
1584
+ }
1585
+ return this.dom.find(".lh-clump-toggletext--show", u).textContent = V.strings.show, this.dom.find(".lh-clump-toggletext--hide", u).textContent = V.strings.hide, a.classList.add(`lh-clump--${e.toLowerCase()}`), u;
1586
+ }
1587
+ renderCategoryScore(e, t, n) {
1588
+ let r;
1589
+ if (r = n && U.shouldDisplayAsFraction(n.gatherMode, e) ? this.renderCategoryFraction(e) : this.renderScoreGauge(e, t), n?.omitLabel && this.dom.find(".lh-gauge__label,.lh-fraction__label", r).remove(), n?.onPageAnchorRendered) {
1590
+ let e = this.dom.find("a", r);
1591
+ n.onPageAnchorRendered(e);
1592
+ }
1593
+ return r;
1594
+ }
1595
+ renderScoreGauge(e, t) {
1596
+ let n = this.dom.createComponent("gauge"), r = this.dom.find("a.lh-gauge__wrapper", n);
1597
+ U.isPluginCategory(e.id) && r.classList.add("lh-gauge__wrapper--plugin");
1598
+ let i = Number(e.score), a = this.dom.find(".lh-gauge", n), o = this.dom.find("circle.lh-gauge-arc", a);
1599
+ o && this._setGaugeArc(o, i);
1600
+ let s = Math.round(i * 100), c = this.dom.find("div.lh-gauge__percentage", n);
1601
+ return c.textContent = s.toString(), e.score === null && (c.classList.add("lh-gauge--error"), c.textContent = "", c.title = V.strings.errorLabel), e.auditRefs.length === 0 || this.hasApplicableAudits(e) ? r.classList.add(`lh-gauge__wrapper--${U.calculateRating(e.score)}`) : (r.classList.add("lh-gauge__wrapper--not-applicable"), c.textContent = "-", c.title = V.strings.notApplicableAuditsGroupTitle), this.dom.find(".lh-gauge__label", n).textContent = e.title, n;
1602
+ }
1603
+ renderCategoryFraction(e) {
1604
+ let t = this.dom.createComponent("fraction"), n = this.dom.find("a.lh-fraction__wrapper", t), { numPassed: r, numPassableAudits: i, totalWeight: a } = U.calculateCategoryFraction(e), o = r / i, s = this.dom.find(".lh-fraction__content", t), c = this.dom.createElement("span");
1605
+ c.textContent = `${r}/${i}`, s.append(c);
1606
+ let l = U.calculateRating(o);
1607
+ return a === 0 && (l = "null"), n.classList.add(`lh-fraction__wrapper--${l}`), this.dom.find(".lh-fraction__label", t).textContent = e.title, t;
1608
+ }
1609
+ hasApplicableAudits(e) {
1610
+ return e.auditRefs.some((e) => e.result.scoreDisplayMode !== "notApplicable");
1611
+ }
1612
+ _setGaugeArc(e, t) {
1613
+ let n = 2 * Math.PI * Number(e.getAttribute("r")), r = Number(e.getAttribute("stroke-width")), i = .25 * r / n;
1614
+ e.style.transform = `rotate(${-90 + i * 360}deg)`;
1615
+ let a = t * n - r / 2;
1616
+ t === 0 && (e.style.opacity = "0"), t === 1 && (a = n), e.style.strokeDasharray = `${Math.max(a, 0)} ${n}`;
1617
+ }
1618
+ _auditHasWarning(e) {
1619
+ return !!e.result.warnings?.length;
1620
+ }
1621
+ _getClumpIdForAuditRef(e) {
1622
+ let t = e.result.scoreDisplayMode;
1623
+ return t === "manual" || t === "notApplicable" ? t : U.showAsPassed(e.result) ? this._auditHasWarning(e) ? "warning" : "passed" : "failed";
1624
+ }
1625
+ render(e, t = {}, n) {
1626
+ let r = this.dom.createElement("div", "lh-category");
1627
+ r.id = e.id, r.append(this.renderCategoryHeader(e, t, n));
1628
+ let i = /* @__PURE__ */ new Map();
1629
+ i.set("failed", []), i.set("warning", []), i.set("manual", []), i.set("passed", []), i.set("notApplicable", []);
1630
+ for (let t of e.auditRefs) {
1631
+ if (t.group === "hidden") continue;
1632
+ let e = this._getClumpIdForAuditRef(t), n = i.get(e);
1633
+ n.push(t), i.set(e, n);
1634
+ }
1635
+ for (let e of i.values()) e.sort((e, t) => t.weight - e.weight);
1636
+ let a = i.get("failed")?.length;
1637
+ for (let [n, o] of i) {
1638
+ if (o.length === 0) continue;
1639
+ if (n === "failed") {
1640
+ let e = this.renderUnexpandableClump(o, t);
1641
+ e.classList.add("lh-clump--failed"), r.append(e);
1642
+ continue;
1643
+ }
1644
+ let i = n === "manual" ? e.manualDescription : void 0, s = n === "warning" || n === "manual" && a === 0, c = this.renderClump(n, {
1645
+ auditRefsOrEls: o,
1646
+ description: i,
1647
+ openByDefault: s
1648
+ });
1649
+ r.append(c);
1650
+ }
1651
+ return r;
1652
+ }
1653
+ }, Lt = class {
1654
+ static createSegment(e, t, n, r) {
1655
+ let i = e[t], a = Object.keys(e), o = a.indexOf(t) === a.length - 1, s = !!i.children && Object.keys(i.children).length > 0, c = Array.isArray(n) ? n.slice(0) : [];
1656
+ return typeof r < "u" && c.push(!r), {
1657
+ node: i,
1658
+ isLastChild: o,
1659
+ hasChildren: s,
1660
+ treeMarkers: c
1661
+ };
1662
+ }
1663
+ static createChainNode(e, t, n) {
1664
+ let r = e.createComponent("crcChain"), i, a, o, s, c;
1665
+ "request" in t.node ? (a = t.node.request.transferSize, o = t.node.request.url, i = (t.node.request.endTime - t.node.request.startTime) * 1e3, s = !1) : (a = t.node.transferSize, o = t.node.url, i = t.node.navStartToEndTime, s = !0, c = t.node.isLongest);
1666
+ let l = e.find(".lh-crc-node", r);
1667
+ l.setAttribute("title", o), c && l.classList.add("lh-crc-node__longest");
1668
+ let u = e.find(".lh-crc-node__tree-marker", r);
1669
+ t.treeMarkers.forEach((t) => {
1670
+ let n = t ? "lh-tree-marker lh-vert" : "lh-tree-marker";
1671
+ u.append(e.createElement("span", n), e.createElement("span", "lh-tree-marker"));
1672
+ });
1673
+ let d = t.isLastChild ? "lh-tree-marker lh-up-right" : "lh-tree-marker lh-vert-right", f = t.hasChildren ? "lh-tree-marker lh-horiz-down" : "lh-tree-marker lh-right";
1674
+ u.append(e.createElement("span", d), e.createElement("span", "lh-tree-marker lh-right"), e.createElement("span", f));
1675
+ let p = n.renderTextURL(o), m = e.find(".lh-crc-node__tree-value", r);
1676
+ if (m.append(p), !t.hasChildren || s) {
1677
+ let t = e.createElement("span", "lh-crc-node__chain-duration");
1678
+ t.textContent = " - " + V.i18n.formatMilliseconds(i) + ", ";
1679
+ let n = e.createElement("span", "lh-crc-node__chain-size");
1680
+ n.textContent = V.i18n.formatBytesToKiB(a, .01), m.append(t, n);
1681
+ }
1682
+ return r;
1683
+ }
1684
+ static buildTree(e, t, n, r) {
1685
+ if (n.append(W.createChainNode(e, t, r)), t.node.children) for (let i of Object.keys(t.node.children)) {
1686
+ let a = W.createSegment(t.node.children, i, t.treeMarkers, t.isLastChild);
1687
+ W.buildTree(e, a, n, r);
1688
+ }
1689
+ }
1690
+ static render(e, t, n) {
1691
+ let r = e.createComponent("crc"), i = e.find(".lh-crc", r);
1692
+ e.find(".lh-crc-initial-nav", r).textContent = V.strings.crcInitialNavigation, e.find(".lh-crc__longest_duration_label", r).textContent = V.strings.crcLongestDurationLabel, e.find(".lh-crc__longest_duration", r).textContent = V.i18n.formatMilliseconds(t.longestChain.duration);
1693
+ let a = t.chains;
1694
+ for (let t of Object.keys(a)) {
1695
+ let r = W.createSegment(a, t);
1696
+ W.buildTree(e, r, i, n);
1697
+ }
1698
+ return e.find(".lh-crc-container", r);
1699
+ }
1700
+ }, W = Lt;
1701
+ function Rt(e, t) {
1702
+ return t.left <= e.width && 0 <= t.right && t.top <= e.height && 0 <= t.bottom;
1703
+ }
1704
+ function zt(e, t, n) {
1705
+ return e < t ? t : e > n ? n : e;
1706
+ }
1707
+ function Bt(e) {
1708
+ return {
1709
+ x: e.left + e.width / 2,
1710
+ y: e.top + e.height / 2
1711
+ };
1712
+ }
1713
+ var Vt = class e {
1714
+ static getScreenshotPositions(e, t, n) {
1715
+ let r = Bt(e), i = zt(r.x - t.width / 2, 0, n.width - t.width), a = zt(r.y - t.height / 2, 0, n.height - t.height);
1716
+ return {
1717
+ screenshot: {
1718
+ left: i,
1719
+ top: a
1720
+ },
1721
+ clip: {
1722
+ left: e.left - i,
1723
+ top: e.top - a
1724
+ }
1725
+ };
1726
+ }
1727
+ static renderClipPathInScreenshot(e, t, n, r, i) {
1728
+ let a = e.find("clipPath", t), o = `clip-${V.getUniqueSuffix()}`;
1729
+ a.id = o, t.style.clipPath = `url(#${o})`;
1730
+ let s = n.top / i.height, c = s + r.height / i.height, l = n.left / i.width, u = l + r.width / i.width, d = [
1731
+ `0,0 1,0 1,${s} 0,${s}`,
1732
+ `0,${c} 1,${c} 1,1 0,1`,
1733
+ `0,${s} ${l},${s} ${l},${c} 0,${c}`,
1734
+ `${u},${s} 1,${s} 1,${c} ${u},${c}`
1735
+ ];
1736
+ for (let t of d) {
1737
+ let n = e.createElementNS("http://www.w3.org/2000/svg", "polygon");
1738
+ n.setAttribute("points", t), a.append(n);
1739
+ }
1740
+ }
1741
+ static installFullPageScreenshot(e, t) {
1742
+ e.style.setProperty("--element-screenshot-url", `url('${t.data}')`);
1743
+ }
1744
+ static installOverlayFeature(t) {
1745
+ let { dom: n, rootEl: r, overlayContainerEl: i, fullPageScreenshot: a } = t, o = "lh-screenshot-overlay--enabled";
1746
+ r.classList.contains(o) || (r.classList.add(o), r.addEventListener("click", (t) => {
1747
+ let r = t.target;
1748
+ if (!r) return;
1749
+ let o = r.closest(".lh-node > .lh-element-screenshot");
1750
+ if (!o) return;
1751
+ let s = n.createElement("div", "lh-element-screenshot__overlay");
1752
+ i.append(s);
1753
+ let c = {
1754
+ width: s.clientWidth * .95,
1755
+ height: s.clientHeight * .8
1756
+ }, l = {
1757
+ width: Number(o.dataset.rectWidth),
1758
+ height: Number(o.dataset.rectHeight),
1759
+ left: Number(o.dataset.rectLeft),
1760
+ right: Number(o.dataset.rectLeft) + Number(o.dataset.rectWidth),
1761
+ top: Number(o.dataset.rectTop),
1762
+ bottom: Number(o.dataset.rectTop) + Number(o.dataset.rectHeight)
1763
+ }, u = e.render(n, a.screenshot, l, c);
1764
+ if (!u) {
1765
+ s.remove();
1766
+ return;
1767
+ }
1768
+ s.append(u), s.addEventListener("click", () => s.remove());
1769
+ }));
1770
+ }
1771
+ static _computeZoomFactor(e, t) {
1772
+ let n = {
1773
+ x: t.width / e.width,
1774
+ y: t.height / e.height
1775
+ }, r = .75 * Math.min(n.x, n.y);
1776
+ return Math.min(1, r);
1777
+ }
1778
+ static render(t, n, r, i) {
1779
+ if (!Rt(n, r)) return null;
1780
+ let a = t.createComponent("elementScreenshot"), o = t.find("div.lh-element-screenshot", a);
1781
+ o.dataset.rectWidth = r.width.toString(), o.dataset.rectHeight = r.height.toString(), o.dataset.rectLeft = r.left.toString(), o.dataset.rectTop = r.top.toString();
1782
+ let s = this._computeZoomFactor(r, i), c = {
1783
+ width: i.width / s,
1784
+ height: i.height / s
1785
+ };
1786
+ c.width = Math.min(n.width, c.width), c.height = Math.min(n.height, c.height);
1787
+ let l = {
1788
+ width: c.width * s,
1789
+ height: c.height * s
1790
+ }, u = e.getScreenshotPositions(r, c, {
1791
+ width: n.width,
1792
+ height: n.height
1793
+ }), d = t.find("div.lh-element-screenshot__image", o);
1794
+ d.style.width = l.width + "px", d.style.height = l.height + "px", d.style.backgroundPositionY = -(u.screenshot.top * s) + "px", d.style.backgroundPositionX = -(u.screenshot.left * s) + "px", d.style.backgroundSize = `${n.width * s}px ${n.height * s}px`;
1795
+ let f = t.find("div.lh-element-screenshot__element-marker", o);
1796
+ f.style.width = r.width * s + "px", f.style.height = r.height * s + "px", f.style.left = u.clip.left * s + "px", f.style.top = u.clip.top * s + "px";
1797
+ let p = t.find("div.lh-element-screenshot__mask", o);
1798
+ return p.style.width = l.width + "px", p.style.height = l.height + "px", e.renderClipPathInScreenshot(t, p, u.clip, r, c), o;
1799
+ }
1800
+ }, Ht = [
1801
+ "http://",
1802
+ "https://",
1803
+ "data:"
1804
+ ], Ut = [
1805
+ "bytes",
1806
+ "numeric",
1807
+ "ms",
1808
+ "timespanMs"
1809
+ ], Wt = class {
1810
+ constructor(e, t = {}) {
1811
+ this._dom = e, this._fullPageScreenshot = t.fullPageScreenshot, this._entities = t.entities;
1812
+ }
1813
+ render(e) {
1814
+ switch (e.type) {
1815
+ case "filmstrip": return this._renderFilmstrip(e);
1816
+ case "list": return this._renderList(e);
1817
+ case "checklist": return this._renderChecklist(e);
1818
+ case "table":
1819
+ case "opportunity": return this._renderTable(e);
1820
+ case "network-tree":
1821
+ case "criticalrequestchain": return Lt.render(this._dom, e, this);
1822
+ case "screenshot":
1823
+ case "debugdata":
1824
+ case "treemap-data": return null;
1825
+ default: return this._renderUnknown(e.type, e);
1826
+ }
1827
+ }
1828
+ _renderBytes(e) {
1829
+ let t = V.i18n.formatBytesToKiB(e.value, e.granularity || .1), n = this._renderText(t);
1830
+ return n.title = V.i18n.formatBytes(e.value), n;
1831
+ }
1832
+ _renderMilliseconds(e) {
1833
+ let t;
1834
+ return t = e.displayUnit === "duration" ? V.i18n.formatDuration(e.value) : V.i18n.formatMilliseconds(e.value, e.granularity || 10), this._renderText(t);
1835
+ }
1836
+ renderTextURL(e) {
1837
+ let t = e, n, r, i;
1838
+ try {
1839
+ let e = B.parseURL(t);
1840
+ n = e.file === "/" ? e.origin : e.file, r = e.file === "/" || e.hostname === "" ? "" : `(${e.hostname})`, i = t;
1841
+ } catch {
1842
+ n = t;
1843
+ }
1844
+ let a = this._dom.createElement("div", "lh-text__url");
1845
+ if (a.append(this._renderLink({
1846
+ text: n,
1847
+ url: t
1848
+ })), r) {
1849
+ let e = this._renderText(r);
1850
+ e.classList.add("lh-text__url-host"), a.append(e);
1851
+ }
1852
+ return i && (a.title = t, a.dataset.url = t), a;
1853
+ }
1854
+ _renderLink(e) {
1855
+ let t = this._dom.createElement("a");
1856
+ if (this._dom.safelySetHref(t, e.url), !t.href) {
1857
+ let t = this._renderText(e.text);
1858
+ return t.classList.add("lh-link"), t;
1859
+ }
1860
+ return t.rel = "noopener", t.target = "_blank", t.textContent = e.text, t.classList.add("lh-link"), t;
1861
+ }
1862
+ _renderText(e) {
1863
+ let t = this._dom.createElement("div", "lh-text");
1864
+ return t.textContent = e, t;
1865
+ }
1866
+ _renderBaselineStatus(e) {
1867
+ let t = this._dom.createElement("div", "lh-baseline-status"), n = e.status;
1868
+ return t.classList.add(`lh-baseline-status--${n}`), t.textContent = String(e.displayString), t;
1869
+ }
1870
+ _renderNumeric(e) {
1871
+ let t = V.i18n.formatNumber(e.value, e.granularity || .1), n = this._dom.createElement("div", "lh-numeric");
1872
+ return n.textContent = t, n;
1873
+ }
1874
+ _renderThumbnail(e) {
1875
+ let t = this._dom.createElement("img", "lh-thumbnail"), n = e;
1876
+ return t.src = n, t.title = n, t.alt = "", t;
1877
+ }
1878
+ _renderUnknown(e, t) {
1879
+ console.error(`Unknown details type: ${e}`, t);
1880
+ let n = this._dom.createElement("details", "lh-unknown");
1881
+ 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;
1882
+ }
1883
+ _renderTableValue(e, t) {
1884
+ if (e == null) return null;
1885
+ if (typeof e == "object") switch (e.type) {
1886
+ case "code": return this._renderCode(e.value);
1887
+ case "link": return this._renderLink(e);
1888
+ case "node": return this.renderNode(e);
1889
+ case "numeric": return this._renderNumeric(e);
1890
+ case "text": return this._renderText(e.value);
1891
+ case "source-location": return this.renderSourceLocation(e);
1892
+ case "url": return this.renderTextURL(e.value);
1893
+ case "baseline-status": return this._renderBaselineStatus(e);
1894
+ default: return this._renderUnknown(e.type, e);
1895
+ }
1896
+ switch (t.valueType) {
1897
+ case "bytes": {
1898
+ let n = Number(e);
1899
+ return this._renderBytes({
1900
+ value: n,
1901
+ granularity: t.granularity
1902
+ });
1903
+ }
1904
+ case "code": {
1905
+ let t = String(e);
1906
+ return this._renderCode(t);
1907
+ }
1908
+ case "ms": {
1909
+ let n = {
1910
+ value: Number(e),
1911
+ granularity: t.granularity,
1912
+ displayUnit: t.displayUnit
1913
+ };
1914
+ return this._renderMilliseconds(n);
1915
+ }
1916
+ case "numeric": {
1917
+ let n = Number(e);
1918
+ return this._renderNumeric({
1919
+ value: n,
1920
+ granularity: t.granularity
1921
+ });
1922
+ }
1923
+ case "text": {
1924
+ let t = String(e);
1925
+ return this._renderText(t);
1926
+ }
1927
+ case "thumbnail": {
1928
+ let t = String(e);
1929
+ return this._renderThumbnail(t);
1930
+ }
1931
+ case "timespanMs": {
1932
+ let t = Number(e);
1933
+ return this._renderMilliseconds({ value: t });
1934
+ }
1935
+ case "url": {
1936
+ let t = String(e);
1937
+ return Ht.some((e) => t.startsWith(e)) ? this.renderTextURL(t) : this._renderCode(t);
1938
+ }
1939
+ default: return this._renderUnknown(t.valueType, e);
1940
+ }
1941
+ }
1942
+ _getDerivedSubItemsHeading(e) {
1943
+ return e.subItemsHeading ? {
1944
+ key: e.subItemsHeading.key || "",
1945
+ valueType: e.subItemsHeading.valueType || e.valueType,
1946
+ granularity: e.subItemsHeading.granularity || e.granularity,
1947
+ displayUnit: e.subItemsHeading.displayUnit || e.displayUnit,
1948
+ label: ""
1949
+ } : null;
1950
+ }
1951
+ _renderTableRow(e, t) {
1952
+ let n = this._dom.createElement("tr");
1953
+ for (let r of t) {
1954
+ if (!r || !r.key) {
1955
+ this._dom.createChildOf(n, "td", "lh-table-column--empty");
1956
+ continue;
1957
+ }
1958
+ let t = e[r.key], i;
1959
+ if (t != null && (i = this._renderTableValue(t, r)), i) {
1960
+ let e = `lh-table-column--${r.valueType}`;
1961
+ this._dom.createChildOf(n, "td", e).append(i);
1962
+ } else this._dom.createChildOf(n, "td", "lh-table-column--empty");
1963
+ }
1964
+ return n;
1965
+ }
1966
+ _renderTableRowsFromItem(e, t) {
1967
+ let n = this._dom.createFragment();
1968
+ if (n.append(this._renderTableRow(e, t)), !e.subItems) return n;
1969
+ let r = t.map(this._getDerivedSubItemsHeading);
1970
+ if (!r.some(Boolean)) return n;
1971
+ for (let t of e.subItems.items) {
1972
+ let e = this._renderTableRow(t, r);
1973
+ e.classList.add("lh-sub-item-row"), n.append(e);
1974
+ }
1975
+ return n;
1976
+ }
1977
+ _adornEntityGroupRow(e) {
1978
+ let t = e.dataset.entity;
1979
+ if (!t) return;
1980
+ let n = this._entities?.find((e) => e.name === t);
1981
+ if (!n) return;
1982
+ let r = this._dom.find("td", e);
1983
+ if (n.category) {
1984
+ let e = this._dom.createElement("span");
1985
+ e.classList.add("lh-audit__adorn"), e.textContent = n.category, r.append(" ", e);
1986
+ }
1987
+ if (n.isFirstParty) {
1988
+ let e = this._dom.createElement("span");
1989
+ e.classList.add("lh-audit__adorn", "lh-audit__adorn1p"), e.textContent = V.strings.firstPartyChipLabel, r.append(" ", e);
1990
+ }
1991
+ if (n.homepage) {
1992
+ let e = this._dom.createElement("a");
1993
+ e.href = n.homepage, e.target = "_blank", e.title = V.strings.openInANewTabTooltip, e.classList.add("lh-report-icon--external"), r.append(" ", e);
1994
+ }
1995
+ }
1996
+ _renderEntityGroupRow(e, t) {
1997
+ let n = { ...t[0] };
1998
+ n.valueType = "text";
1999
+ let r = [n, ...t.slice(1)], i = this._dom.createFragment();
2000
+ return i.append(this._renderTableRow(e, r)), this._dom.find("tr", i).classList.add("lh-row--group"), i;
2001
+ }
2002
+ _getEntityGroupItems(e) {
2003
+ let { items: t, headings: n, sortedBy: r } = e;
2004
+ if (!t.length || e.isEntityGrouped || !t.some((e) => e.entity)) return [];
2005
+ let i = new Set(e.skipSumming || []), a = [];
2006
+ for (let e of n) !e.key || i.has(e.key) || Ut.includes(e.valueType) && a.push(e.key);
2007
+ let o = n[0].key;
2008
+ if (!o) return [];
2009
+ let s = /* @__PURE__ */ new Map();
2010
+ for (let e of t) {
2011
+ let t = typeof e.entity == "string" ? e.entity : void 0, n = s.get(t) || {
2012
+ [o]: t || V.strings.unattributable,
2013
+ entity: t
2014
+ };
2015
+ for (let t of a) n[t] = Number(n[t] || 0) + Number(e[t] || 0);
2016
+ s.set(t, n);
2017
+ }
2018
+ let c = [...s.values()];
2019
+ return r && c.sort(U.getTableItemSortComparator(r)), c;
2020
+ }
2021
+ _renderTable(e) {
2022
+ if (!e.items.length) return this._dom.createElement("span");
2023
+ let t = this._dom.createElement("table", "lh-table"), n = this._dom.createChildOf(t, "thead"), r = this._dom.createChildOf(n, "tr");
2024
+ for (let t of e.headings) {
2025
+ let e = `lh-table-column--${t.valueType || "text"}`, n = this._dom.createElement("div", "lh-text");
2026
+ n.textContent = t.label, this._dom.createChildOf(r, "th", e).append(n);
2027
+ }
2028
+ let i = this._getEntityGroupItems(e), a = this._dom.createChildOf(t, "tbody");
2029
+ if (i.length) for (let t of i) {
2030
+ let n = typeof t.entity == "string" ? t.entity : void 0, r = this._renderEntityGroupRow(t, e.headings);
2031
+ for (let t of e.items.filter((e) => e.entity === n)) r.append(this._renderTableRowsFromItem(t, e.headings));
2032
+ let i = this._dom.findAll("tr", r);
2033
+ n && i.length && (i.forEach((e) => e.dataset.entity = n), this._adornEntityGroupRow(i[0])), a.append(r);
2034
+ }
2035
+ else {
2036
+ let t = !0;
2037
+ for (let n of e.items) {
2038
+ let r = this._renderTableRowsFromItem(n, e.headings), i = this._dom.findAll("tr", r), o = i[0];
2039
+ if (typeof n.entity == "string" && (o.dataset.entity = n.entity), e.isEntityGrouped && n.entity) o.classList.add("lh-row--group"), this._adornEntityGroupRow(o);
2040
+ else for (let e of i) e.classList.add(t ? "lh-row--even" : "lh-row--odd");
2041
+ t = !t, a.append(r);
2042
+ }
2043
+ }
2044
+ return t;
2045
+ }
2046
+ _renderListValue(e) {
2047
+ return e.type === "node" ? this.renderNode(e) : e.type === "text" ? this._renderText(e.value) : this.render(e);
2048
+ }
2049
+ _renderList(e) {
2050
+ let t = this._dom.createElement("div", "lh-list");
2051
+ return e.items.forEach((e) => {
2052
+ if (e.type === "list-section") {
2053
+ let n = this._dom.createElement("div", "lh-list-section");
2054
+ e.title && this._dom.createChildOf(n, "div", "lh-list-section__title").append(this._dom.convertMarkdownLinkSnippets(e.title)), e.description && this._dom.createChildOf(n, "div", "lh-list-section__description").append(this._dom.convertMarkdownLinkSnippets(e.description));
2055
+ let r = this._renderListValue(e.value);
2056
+ r && n.append(r), t.append(n);
2057
+ return;
2058
+ }
2059
+ let n = this._renderListValue(e);
2060
+ n && t.append(n);
2061
+ }), t;
2062
+ }
2063
+ _renderChecklist(e) {
2064
+ let t = this._dom.createElement("ul", "lh-checklist");
2065
+ return Object.values(e.items).forEach((e) => {
2066
+ let n = this._dom.createChildOf(t, "li", "lh-checklist-item"), r = e.value ? "lh-report-plain-icon--checklist-pass" : "lh-report-plain-icon--checklist-fail";
2067
+ this._dom.createChildOf(n, "span", `lh-report-plain-icon ${r}`).textContent = e.label;
2068
+ }), t;
2069
+ }
2070
+ renderNode(e) {
2071
+ let t = this._dom.createElement("span", "lh-node");
2072
+ if (e.nodeLabel) {
2073
+ let n = this._dom.createElement("div");
2074
+ n.textContent = e.nodeLabel, t.append(n);
2075
+ }
2076
+ if (e.snippet) {
2077
+ let n = this._dom.createElement("div");
2078
+ n.classList.add("lh-node__snippet"), n.textContent = e.snippet, t.append(n);
2079
+ }
2080
+ 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;
2081
+ let n = e.lhId && this._fullPageScreenshot.nodes[e.lhId];
2082
+ if (!n || n.width === 0 || n.height === 0) return t;
2083
+ let r = Vt.render(this._dom, this._fullPageScreenshot.screenshot, n, {
2084
+ width: 147,
2085
+ height: 100
2086
+ });
2087
+ return r && t.prepend(r), t;
2088
+ }
2089
+ renderSourceLocation(e) {
2090
+ if (!e.url) return null;
2091
+ let t = `${e.url}:${e.line + 1}:${e.column}`, n;
2092
+ e.original && (n = `${e.original.file || "<unmapped>"}:${e.original.line + 1}:${e.original.column}`);
2093
+ let r;
2094
+ if (e.urlProvider === "network" && n) r = this._renderLink({
2095
+ url: e.url,
2096
+ text: n
2097
+ }), r.title = `maps to generated location ${t}`;
2098
+ else if (e.urlProvider === "network" && !n) r = this.renderTextURL(e.url), this._dom.find(".lh-link", r).textContent += `:${e.line + 1}:${e.column}`;
2099
+ else if (e.urlProvider === "comment" && n) r = this._renderText(`${n} (from source map)`), r.title = `${t} (from sourceURL)`;
2100
+ else if (e.urlProvider === "comment" && !n) r = this._renderText(`${t} (from sourceURL)`);
2101
+ else return null;
2102
+ 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;
2103
+ }
2104
+ _renderFilmstrip(e) {
2105
+ let t = this._dom.createElement("div", "lh-filmstrip");
2106
+ for (let n of e.items) {
2107
+ let e = this._dom.createChildOf(t, "div", "lh-filmstrip__frame"), r = this._dom.createChildOf(e, "img", "lh-filmstrip__thumbnail");
2108
+ r.src = n.data, r.alt = "Screenshot";
2109
+ }
2110
+ return t;
2111
+ }
2112
+ _renderCode(e) {
2113
+ let t = this._dom.createElement("pre", "lh-code");
2114
+ return t.textContent = e, t;
2115
+ }
2116
+ }, Gt = class {
2117
+ constructor(e) {
2118
+ e === "en-XA" && (e = "de"), this._locale = e, this._cachedNumberFormatters = /* @__PURE__ */ new Map();
2119
+ }
2120
+ _formatNumberWithGranularity(e, t, n = {}) {
2121
+ if (t !== void 0) {
2122
+ let r = -Math.log10(t);
2123
+ Number.isInteger(r) || (console.warn(`granularity of ${t} is invalid. Using 1 instead`), t = 1), t < 1 && (n = { ...n }, n.minimumFractionDigits = n.maximumFractionDigits = Math.ceil(r)), e = Math.round(e / t) * t, Object.is(e, -0) && (e = 0);
2124
+ } else Math.abs(e) < 5e-4 && (e = 0);
2125
+ let r, i = [
2126
+ n.minimumFractionDigits,
2127
+ n.maximumFractionDigits,
2128
+ n.style,
2129
+ n.unit,
2130
+ n.unitDisplay,
2131
+ this._locale
2132
+ ].join("");
2133
+ return r = this._cachedNumberFormatters.get(i), r || (r = new Intl.NumberFormat(this._locale, n), this._cachedNumberFormatters.set(i, r)), r.format(e).replace(" ", "\xA0");
2134
+ }
2135
+ formatNumber(e, t) {
2136
+ return this._formatNumberWithGranularity(e, t);
2137
+ }
2138
+ formatInteger(e) {
2139
+ return this._formatNumberWithGranularity(e, 1);
2140
+ }
2141
+ formatPercent(e) {
2142
+ return new Intl.NumberFormat(this._locale, { style: "percent" }).format(e);
2143
+ }
2144
+ formatBytesToKiB(e, t = void 0) {
2145
+ return this._formatNumberWithGranularity(e / 1024, t) + "\xA0KiB";
2146
+ }
2147
+ formatBytesToMiB(e, t = void 0) {
2148
+ return this._formatNumberWithGranularity(e / 1048576, t) + "\xA0MiB";
2149
+ }
2150
+ formatBytes(e, t = 1) {
2151
+ return this._formatNumberWithGranularity(e, t, {
2152
+ style: "unit",
2153
+ unit: "byte",
2154
+ unitDisplay: "long"
2155
+ });
2156
+ }
2157
+ formatBytesWithBestUnit(e, t = .1) {
2158
+ return e >= 1048576 ? this.formatBytesToMiB(e, t) : e >= 1024 ? this.formatBytesToKiB(e, t) : this._formatNumberWithGranularity(e, t, {
2159
+ style: "unit",
2160
+ unit: "byte",
2161
+ unitDisplay: "narrow"
2162
+ });
2163
+ }
2164
+ formatKbps(e, t = void 0) {
2165
+ return this._formatNumberWithGranularity(e, t, {
2166
+ style: "unit",
2167
+ unit: "kilobit-per-second",
2168
+ unitDisplay: "short"
2169
+ });
2170
+ }
2171
+ formatMilliseconds(e, t = void 0) {
2172
+ return this._formatNumberWithGranularity(e, t, {
2173
+ style: "unit",
2174
+ unit: "millisecond",
2175
+ unitDisplay: "short"
2176
+ });
2177
+ }
2178
+ formatSeconds(e, t = void 0) {
2179
+ return this._formatNumberWithGranularity(e / 1e3, t, {
2180
+ style: "unit",
2181
+ unit: "second",
2182
+ unitDisplay: "narrow"
2183
+ });
2184
+ }
2185
+ formatDateTime(e) {
2186
+ let t = {
2187
+ month: "short",
2188
+ day: "numeric",
2189
+ year: "numeric",
2190
+ hour: "numeric",
2191
+ minute: "numeric",
2192
+ timeZoneName: "short"
2193
+ }, n;
2194
+ try {
2195
+ n = new Intl.DateTimeFormat(this._locale, t);
2196
+ } catch {
2197
+ t.timeZone = "UTC", n = new Intl.DateTimeFormat(this._locale, t);
2198
+ }
2199
+ return n.format(new Date(e));
2200
+ }
2201
+ formatDuration(e) {
2202
+ let t = e / 1e3;
2203
+ if (Math.round(t) === 0) return "None";
2204
+ let n = [], r = {
2205
+ day: 3600 * 24,
2206
+ hour: 3600,
2207
+ minute: 60,
2208
+ second: 1
2209
+ };
2210
+ return Object.keys(r).forEach((e) => {
2211
+ let i = r[e], a = Math.floor(t / i);
2212
+ if (a > 0) {
2213
+ t -= a * i;
2214
+ let r = this._formatNumberWithGranularity(a, 1, {
2215
+ style: "unit",
2216
+ unit: e,
2217
+ unitDisplay: "narrow"
2218
+ });
2219
+ n.push(r);
2220
+ }
2221
+ }), n.join(" ");
2222
+ }
2223
+ };
2224
+ function Kt(e) {
2225
+ let t = e.createComponent("explodeyGauge");
2226
+ return e.find(".lh-exp-gauge-component", t);
2227
+ }
2228
+ function qt(e, t, n) {
2229
+ let r = e.find("div.lh-exp-gauge__wrapper", t);
2230
+ r.className = "", r.classList.add("lh-exp-gauge__wrapper", `lh-exp-gauge__wrapper--${U.calculateRating(n.score)}`), Yt(e, r, n);
2231
+ }
2232
+ function Jt(e, t, n) {
2233
+ n ||= e / 32;
2234
+ let r = e / n, i = .5 * n, a = r + i + n, o = 2 * Math.PI * r, s = Math.acos(1 - .5 * (.5 * n / r) ** 2) * r, c = 2 * Math.PI * a, l = Math.acos(1 - .5 * (.5 * n / a) ** 2) * a;
2235
+ return {
2236
+ radiusInner: r,
2237
+ radiusOuter: a,
2238
+ circumferenceInner: o,
2239
+ circumferenceOuter: c,
2240
+ getArcLength: () => Math.max(0, Number(t * o)),
2241
+ getMetricArcLength: (e, t = !1) => {
2242
+ let n = t ? 0 : 2 * l;
2243
+ return Math.max(0, Number(e * c - i - n));
2244
+ },
2245
+ endDiffInner: s,
2246
+ endDiffOuter: l,
2247
+ strokeWidth: n,
2248
+ strokeGap: i
2249
+ };
2250
+ }
2251
+ function Yt(e, t, n) {
2252
+ let r = Number(n.score), { radiusInner: i, radiusOuter: a, circumferenceInner: o, circumferenceOuter: s, getArcLength: c, getMetricArcLength: l, endDiffInner: u, endDiffOuter: d, strokeWidth: f, strokeGap: p } = Jt(128, r), m = e.find("svg.lh-exp-gauge", t);
2253
+ e.find(".lh-exp-gauge__label", m).textContent = n.title, m.setAttribute("viewBox", [
2254
+ -64,
2255
+ -64 / 2,
2256
+ 128,
2257
+ 128 / 2
2258
+ ].join(" ")), m.style.setProperty("--stroke-width", `${f}px`), m.style.setProperty("--circle-meas", (2 * Math.PI).toFixed(4));
2259
+ let h = e.find("g.lh-exp-gauge__outer", t), g = e.find("g.lh-exp-gauge__inner", t), _ = e.find("circle.lh-cover", h), v = e.find("circle.lh-exp-gauge__arc", g), y = e.find("text.lh-exp-gauge__percentage", g);
2260
+ h.style.setProperty("--scale-initial", String(i / a)), h.style.setProperty("--radius", `${a}px`), _.style.setProperty("--radius", `${.5 * (i + a)}px`), _.setAttribute("stroke-width", String(p)), m.style.setProperty("--radius", `${i}px`), v.setAttribute("stroke-dasharray", `${c()} ${(o - c()).toFixed(4)}`), v.setAttribute("stroke-dashoffset", String(.25 * o - u)), y.textContent = Math.round(r * 100).toString();
2261
+ let b = a + f, x = a - f, S = n.auditRefs.filter((e) => e.group === "metrics" && e.weight), C = S.reduce((e, t) => e += t.weight, 0), w = .25 * s - d - .5 * p, T = -.5 * Math.PI;
2262
+ h.querySelectorAll(".metric").forEach((e) => {
2263
+ S.map((e) => `metric--${e.id}`).find((t) => e.classList.contains(t)) || e.remove();
2264
+ }), S.forEach((t, n) => {
2265
+ let r = t.acronym ?? t.id, i = !h.querySelector(`.metric--${r}`), a = e.maybeFind(`g.metric--${r}`, h) || e.createSVGElement("g"), o = e.maybeFind(`.metric--${r} circle.lh-exp-gauge--faded`, h) || e.createSVGElement("circle"), c = e.maybeFind(`.metric--${r} circle.lh-exp-gauge--miniarc`, h) || e.createSVGElement("circle"), u = e.maybeFind(`.metric--${r} circle.lh-exp-gauge-hovertarget`, h) || e.createSVGElement("circle"), f = e.maybeFind(`.metric--${r} text.metric__label`, h) || e.createSVGElement("text"), p = e.maybeFind(`.metric--${r} text.metric__value`, h) || e.createSVGElement("text");
2266
+ a.classList.add("metric", `metric--${r}`), o.classList.add("lh-exp-gauge__arc", "lh-exp-gauge__arc--metric", "lh-exp-gauge--faded"), c.classList.add("lh-exp-gauge__arc", "lh-exp-gauge__arc--metric", "lh-exp-gauge--miniarc"), u.classList.add("lh-exp-gauge__arc", "lh-exp-gauge__arc--metric", "lh-exp-gauge-hovertarget");
2267
+ let m = t.weight / C, g = l(m), _ = t.result.score ? t.result.score * m : 0, v = l(_), y = m * s, S = l(m, !0), E = U.calculateRating(t.result.score, t.result.scoreDisplayMode);
2268
+ a.style.setProperty("--metric-rating", E), a.style.setProperty("--metric-color", `var(--color-${E})`), a.style.setProperty("--metric-offset", `${w}`), a.style.setProperty("--i", n.toString()), o.setAttribute("stroke-dasharray", `${g} ${s - g}`), c.style.setProperty("--metric-array", `${v} ${s - v}`), u.setAttribute("stroke-dasharray", `${S} ${s - S - d}`), f.classList.add("metric__label"), p.classList.add("metric__value"), f.textContent = r, p.textContent = `+${Math.round(_ * 100)}`;
2269
+ let D = T + m * Math.PI, O = Math.cos(D), k = Math.sin(D);
2270
+ switch (!0) {
2271
+ case O > 0:
2272
+ p.setAttribute("text-anchor", "end");
2273
+ break;
2274
+ case O < 0:
2275
+ f.setAttribute("text-anchor", "end");
2276
+ break;
2277
+ case O === 0:
2278
+ f.setAttribute("text-anchor", "middle"), p.setAttribute("text-anchor", "middle");
2279
+ break;
2280
+ }
2281
+ switch (!0) {
2282
+ case k > 0:
2283
+ f.setAttribute("dominant-baseline", "hanging");
2284
+ break;
2285
+ case k < 0:
2286
+ p.setAttribute("dominant-baseline", "hanging");
2287
+ break;
2288
+ case k === 0:
2289
+ f.setAttribute("dominant-baseline", "middle"), p.setAttribute("dominant-baseline", "middle");
2290
+ break;
2291
+ }
2292
+ f.setAttribute("x", (b * O).toFixed(2)), f.setAttribute("y", (b * k).toFixed(2)), p.setAttribute("x", (x * O).toFixed(2)), p.setAttribute("y", (x * k).toFixed(2)), i && (a.appendChild(o), a.appendChild(c), a.appendChild(u), a.appendChild(f), a.appendChild(p), h.appendChild(a)), w -= y, T += m * 2 * Math.PI;
2293
+ });
2294
+ let E = h.querySelector(".lh-exp-gauge-underhovertarget") || e.createSVGElement("circle");
2295
+ E.classList.add("lh-exp-gauge__arc", "lh-exp-gauge__arc--metric", "lh-exp-gauge-hovertarget", "lh-exp-gauge-underhovertarget");
2296
+ let D = l(1, !0);
2297
+ if (E.setAttribute("stroke-dasharray", `${D} ${s - D - d}`), E.isConnected || h.prepend(E), m.dataset.listenersSetup) return;
2298
+ m.dataset.listenersSetup = !0, O(m), m.addEventListener("pointerover", (n) => {
2299
+ if (n.target === m && m.classList.contains("state--expanded")) {
2300
+ m.classList.remove("state--expanded"), m.classList.contains("state--highlight") && (m.classList.remove("state--highlight"), e.find(".metric--highlight", m).classList.remove("metric--highlight"));
2301
+ return;
2302
+ }
2303
+ if (!(n.target instanceof Element)) return;
2304
+ let r = n.target.parentNode;
2305
+ if (r instanceof SVGElement) {
2306
+ if (r && r === g) {
2307
+ m.classList.contains("state--expanded") ? m.classList.contains("state--highlight") && (m.classList.remove("state--highlight"), e.find(".metric--highlight", m).classList.remove("metric--highlight")) : m.classList.add("state--expanded");
2308
+ return;
2309
+ }
2310
+ if (r && r.classList && r.classList.contains("metric")) {
2311
+ let n = r.style.getPropertyValue("--metric-rating");
2312
+ if (t.style.setProperty("--color-highlight", `var(--color-${n}-secondary)`), !m.classList.contains("state--highlight")) m.classList.add("state--highlight"), r.classList.add("metric--highlight");
2313
+ else {
2314
+ let t = e.find(".metric--highlight", m);
2315
+ r !== t && (t.classList.remove("metric--highlight"), r.classList.add("metric--highlight"));
2316
+ }
2317
+ }
2318
+ }
2319
+ }), m.addEventListener("mouseleave", () => {
2320
+ m.classList.remove("state--highlight"), m.querySelector(".metric--highlight")?.classList.remove("metric--highlight");
2321
+ });
2322
+ async function O(t) {
2323
+ if (await new Promise((e) => setTimeout(e, 1e3)), t.classList.contains("state--expanded")) return;
2324
+ let n = e.find(".lh-exp-gauge__inner", t), r = `uniq-${Math.random()}`;
2325
+ n.setAttribute("id", r);
2326
+ let i = e.createSVGElement("use");
2327
+ i.setAttribute("href", `#${r}`), t.appendChild(i);
2328
+ let a = 2.5;
2329
+ t.style.setProperty("--peek-dur", `${a}s`), t.classList.add("state--peek", "state--expanded");
2330
+ let o = () => {
2331
+ t.classList.remove("state--peek", "state--expanded"), i.remove();
2332
+ }, s = setTimeout(() => {
2333
+ t.removeEventListener("mouseenter", c), o();
2334
+ }, a * 1e3 * 1.5);
2335
+ function c() {
2336
+ clearTimeout(s), o();
2337
+ }
2338
+ t.addEventListener("mouseenter", c, { once: !0 });
2339
+ }
2340
+ }
2341
+ var Xt = class extends It {
2342
+ _renderMetric(e) {
2343
+ let t = this.dom.createComponent("metric"), n = this.dom.find(".lh-metric", t);
2344
+ n.id = e.result.id;
2345
+ let r = U.calculateRating(e.result.score, e.result.scoreDisplayMode);
2346
+ n.classList.add(`lh-metric--${r}`);
2347
+ let i = this.dom.find(".lh-metric__title", t);
2348
+ i.textContent = e.result.title;
2349
+ let a = this.dom.find(".lh-metric__value", t);
2350
+ a.textContent = e.result.displayValue || "";
2351
+ let o = this.dom.find(".lh-metric__description", t);
2352
+ if (o.append(this.dom.convertMarkdownLinkSnippets(e.result.description)), e.result.scoreDisplayMode === "error") {
2353
+ o.textContent = "", a.textContent = "Error!";
2354
+ let t = this.dom.createChildOf(o, "span");
2355
+ t.textContent = e.result.errorMessage || "Report error: no metric information";
2356
+ } else e.result.scoreDisplayMode === "notApplicable" && (a.textContent = "--");
2357
+ return n;
2358
+ }
2359
+ _getScoringCalculatorHref(e) {
2360
+ let t = e.filter((e) => e.group === "metrics"), n = e.find((e) => e.id === "interactive"), r = e.find((e) => e.id === "first-cpu-idle"), i = e.find((e) => e.id === "first-meaningful-paint");
2361
+ n && t.push(n), r && t.push(r), i && typeof i.result.score == "number" && t.push(i);
2362
+ let a = (e) => Math.round(e * 100) / 100, o = [...t.map((e) => {
2363
+ let t;
2364
+ return typeof e.result.numericValue == "number" ? (t = e.id === "cumulative-layout-shift" ? a(e.result.numericValue) : Math.round(e.result.numericValue), t = t.toString()) : t = "null", [e.acronym || e.id, t];
2365
+ })];
2366
+ V.reportJson && (o.push(["device", V.reportJson.configSettings.formFactor]), o.push(["version", V.reportJson.lighthouseVersion]));
2367
+ let s = new URLSearchParams(o), c = new URL("https://googlechrome.github.io/lighthouse/scorecalc/");
2368
+ return c.hash = s.toString(), c.href;
2369
+ }
2370
+ overallImpact(e, t) {
2371
+ if (!e.result.metricSavings) return {
2372
+ overallImpact: 0,
2373
+ overallLinearImpact: 0
2374
+ };
2375
+ let n = 0, r = 0;
2376
+ for (let [i, a] of Object.entries(e.result.metricSavings)) {
2377
+ if (a === void 0) continue;
2378
+ let e = t.find((e) => e.acronym === i);
2379
+ if (!e || e.result.score === null) continue;
2380
+ let o = e.result.numericValue;
2381
+ if (!o) continue;
2382
+ let s = a / o * e.weight;
2383
+ r += s;
2384
+ let c = e.result.scoringOptions;
2385
+ if (!c) continue;
2386
+ let l = (B.computeLogNormalScore(c, o - a) - e.result.score) * e.weight;
2387
+ n += l;
2388
+ }
2389
+ return {
2390
+ overallImpact: n,
2391
+ overallLinearImpact: r
2392
+ };
2393
+ }
2394
+ render(e, t, n) {
2395
+ let r = V.strings, i = this.dom.createElement("div", "lh-category");
2396
+ i.id = e.id, i.append(this.renderCategoryHeader(e, t, n));
2397
+ let a = e.auditRefs.filter((e) => e.group === "metrics");
2398
+ if (a.length) {
2399
+ let [n, o] = this.renderAuditGroup(t.metrics), s = this.dom.createElement("input", "lh-metrics-toggle__input"), c = `lh-metrics-toggle${V.getUniqueSuffix()}`;
2400
+ s.setAttribute("aria-label", "Toggle the display of metric descriptions"), s.type = "checkbox", s.id = c, n.prepend(s);
2401
+ let l = this.dom.find(".lh-audit-group__header", n), u = this.dom.createChildOf(l, "label", "lh-metrics-toggle__label");
2402
+ u.htmlFor = c;
2403
+ let d = this.dom.createChildOf(u, "span", "lh-metrics-toggle__labeltext--show"), f = this.dom.createChildOf(u, "span", "lh-metrics-toggle__labeltext--hide");
2404
+ d.textContent = V.strings.expandView, f.textContent = V.strings.collapseView;
2405
+ let p = this.dom.createElement("div", "lh-metrics-container");
2406
+ if (n.insertBefore(p, o), a.forEach((e) => {
2407
+ p.append(this._renderMetric(e));
2408
+ }), i.querySelector(".lh-gauge__wrapper")) {
2409
+ let t = this.dom.find(".lh-category-header__description", i), n = this.dom.createChildOf(t, "div", "lh-metrics__disclaimer"), a = this.dom.convertMarkdownLinkSnippets(r.varianceDisclaimer);
2410
+ n.append(a);
2411
+ let o = this.dom.createChildOf(n, "a", "lh-calclink");
2412
+ o.target = "_blank", o.textContent = r.calculatorLink, this.dom.safelySetHref(o, this._getScoringCalculatorHref(e.auditRefs));
2413
+ }
2414
+ n.classList.add("lh-audit-group--metrics"), i.append(n);
2415
+ }
2416
+ let o = this.dom.createChildOf(i, "div", "lh-filmstrip-container"), s = e.auditRefs.find((e) => e.id === "screenshot-thumbnails")?.result;
2417
+ if (s?.details) {
2418
+ o.id = s.id;
2419
+ let e = this.detailsRenderer.render(s.details);
2420
+ e && o.append(e);
2421
+ }
2422
+ let c = this.renderFilterableSection(e, t, ["insights", "diagnostics"], a);
2423
+ if (c && (c.classList.add("lh-perf-audits"), i.append(c)), (!n || n?.gatherMode === "navigation") && e.score !== null) {
2424
+ let t = Kt(this.dom);
2425
+ qt(this.dom, t, e), this.dom.find(".lh-score__gauge", i).replaceWith(t);
2426
+ }
2427
+ return i;
2428
+ }
2429
+ renderFilterableSection(e, t, n, r) {
2430
+ if (n.some((e) => !t[e])) return null;
2431
+ let i = this.dom.createElement("div"), a = (e) => e.group ?? "", o = e.auditRefs.filter((e) => n.includes(a(e))).map((e) => {
2432
+ let { overallImpact: t, overallLinearImpact: n } = this.overallImpact(e, r), i = e.result.guidanceLevel || 1;
2433
+ return {
2434
+ auditRef: e,
2435
+ auditEl: this.renderAudit(e),
2436
+ overallImpact: t,
2437
+ overallLinearImpact: n,
2438
+ guidanceLevel: i
2439
+ };
2440
+ }), s = o.filter((e) => !U.showAsPassed(e.auditRef.result)), c = o.filter((e) => U.showAsPassed(e.auditRef.result)), l = {};
2441
+ for (let e of n) {
2442
+ let n = this.renderAuditGroup(t[e]);
2443
+ n[0].classList.add(`lh-audit-group--${e}`), l[e] = n;
2444
+ }
2445
+ function u(e) {
2446
+ for (let t of o) if (e === "All") t.auditEl.hidden = !1;
2447
+ else {
2448
+ let n = t.auditRef.result.metricSavings?.[e] === void 0;
2449
+ t.auditEl.hidden = n;
2450
+ }
2451
+ s.sort((t, n) => {
2452
+ let r = t.auditRef.result.score || 0, i = n.auditRef.result.score || 0;
2453
+ if (r !== i) return r - i;
2454
+ if (e !== "All") {
2455
+ let r = t.auditRef.result.metricSavings?.[e] ?? -1, i = n.auditRef.result.metricSavings?.[e] ?? -1;
2456
+ if (r !== i) return i - r;
2457
+ }
2458
+ return t.overallImpact === n.overallImpact ? t.overallImpact === 0 && n.overallImpact === 0 && t.overallLinearImpact !== n.overallLinearImpact ? n.overallLinearImpact * n.guidanceLevel - t.overallLinearImpact * t.guidanceLevel : n.guidanceLevel - t.guidanceLevel : n.overallImpact * n.guidanceLevel - t.overallImpact * t.guidanceLevel;
2459
+ });
2460
+ for (let e of s) {
2461
+ if (!e.auditRef.group) continue;
2462
+ let t = l[a(e.auditRef)];
2463
+ if (!t) continue;
2464
+ let [n, r] = t;
2465
+ n.insertBefore(e.auditEl, r);
2466
+ }
2467
+ }
2468
+ let d = /* @__PURE__ */ new Set();
2469
+ for (let e of s) {
2470
+ let t = e.auditRef.result.metricSavings || {};
2471
+ for (let [e, n] of Object.entries(t)) typeof n == "number" && d.add(e);
2472
+ }
2473
+ let f = r.filter((e) => e.acronym && d.has(e.acronym));
2474
+ f.length && this.renderMetricAuditFilter(f, i, u), u("All");
2475
+ for (let e of n) if (s.some((t) => a(t.auditRef) === e)) {
2476
+ let t = l[e];
2477
+ if (!t) continue;
2478
+ i.append(t[0]);
2479
+ }
2480
+ if (!c.length) return i;
2481
+ let p = {
2482
+ auditRefsOrEls: c.map((e) => e.auditEl),
2483
+ groupDefinitions: t
2484
+ }, m = this.renderClump("passed", p);
2485
+ return i.append(m), i;
2486
+ }
2487
+ renderMetricAuditFilter(e, t, n) {
2488
+ let r = this.dom.createElement("div", "lh-metricfilter"), i = this.dom.createChildOf(r, "span", "lh-metricfilter__text");
2489
+ i.textContent = V.strings.showRelevantAudits;
2490
+ let a = [{
2491
+ acronym: "All",
2492
+ id: "All"
2493
+ }, ...e], o = V.getUniqueSuffix();
2494
+ for (let e of a) {
2495
+ let i = `metric-${e.acronym}-${o}`, a = this.dom.createChildOf(r, "input", "lh-metricfilter__radio");
2496
+ a.type = "radio", a.name = `metricsfilter-${o}`, a.id = i;
2497
+ let s = this.dom.createChildOf(r, "label", "lh-metricfilter__label");
2498
+ s.htmlFor = i, s.title = "result" in e ? e.result.title : "", s.textContent = e.acronym || e.id, e.acronym === "All" && (a.checked = !0, s.classList.add("lh-metricfilter__label--active")), t.append(r), a.addEventListener("input", (r) => {
2499
+ for (let e of t.querySelectorAll("label.lh-metricfilter__label")) e.classList.toggle("lh-metricfilter__label--active", e.htmlFor === i);
2500
+ t.classList.toggle("lh-category--filtered", e.acronym !== "All"), n(e.acronym || "All");
2501
+ let a = t.querySelectorAll("div.lh-audit-group, details.lh-audit-group");
2502
+ for (let e of a) {
2503
+ e.hidden = !1;
2504
+ let t = Array.from(e.querySelectorAll("div.lh-audit"));
2505
+ e.hidden = !!t.length && t.every((e) => e.hidden);
2506
+ }
2507
+ });
2508
+ }
2509
+ }
2510
+ }, Zt = class {
2511
+ constructor(e) {
2512
+ this._dom = e, this._opts = {};
2513
+ }
2514
+ renderReport(e, t, n) {
2515
+ if (!this._dom.rootEl && t) {
2516
+ console.warn("Please adopt the new report API in renderer/api.js.");
2517
+ let e = t.closest(".lh-root");
2518
+ e ? this._dom.rootEl = e : (t.classList.add("lh-root", "lh-vars"), this._dom.rootEl = t);
2519
+ } else this._dom.rootEl && t && (this._dom.rootEl = t);
2520
+ n && (this._opts = n), this._dom.setLighthouseChannel(e.configSettings.channel || "unknown");
2521
+ let r = U.prepareReportResult(e);
2522
+ return this._dom.rootEl.textContent = "", this._dom.rootEl.append(this._renderReport(r)), this._opts.occupyEntireViewport && this._dom.rootEl.classList.add("lh-max-viewport"), this._dom.rootEl;
2523
+ }
2524
+ _renderReportTopbar(e) {
2525
+ let t = this._dom.createComponent("topbar"), n = this._dom.find("a.lh-topbar__url", t);
2526
+ return n.textContent = e.finalDisplayedUrl, n.title = e.finalDisplayedUrl, this._dom.safelySetHref(n, e.finalDisplayedUrl), t;
2527
+ }
2528
+ _renderReportHeader() {
2529
+ let e = this._dom.createComponent("heading"), t = this._dom.createComponent("scoresWrapper");
2530
+ return this._dom.find(".lh-scores-wrapper-placeholder", e).replaceWith(t), e;
2531
+ }
2532
+ _renderReportFooter(e) {
2533
+ let t = this._dom.createComponent("footer");
2534
+ return this._renderMetaBlock(e, t), this._dom.find(".lh-footer__version_issue", t).textContent = V.strings.footerIssue, this._dom.find(".lh-footer__version", t).textContent = e.lighthouseVersion, t;
2535
+ }
2536
+ _renderMetaBlock(e, t) {
2537
+ let n = U.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, o = e.environment.benchmarkIndex.toFixed(0), s = e.environment.credits?.["axe-core"], c = [`${V.strings.runtimeSettingsBenchmark}: ${o}`, `${V.strings.runtimeSettingsCPUThrottling}: ${n.cpuThrottling}`];
2538
+ n.screenEmulation && c.push(`${V.strings.runtimeSettingsScreenEmulation}: ${n.screenEmulation}`), s && c.push(`${V.strings.runtimeSettingsAxeVersion}: ${s}`);
2539
+ let l = V.strings.runtimeAnalysisWindow;
2540
+ e.gatherMode === "timespan" ? l = V.strings.runtimeAnalysisWindowTimespan : e.gatherMode === "snapshot" && (l = V.strings.runtimeAnalysisWindowSnapshot);
2541
+ let u = [
2542
+ ["date", `Captured at ${V.i18n.formatDateTime(e.fetchTime)}`],
2543
+ [
2544
+ "devices",
2545
+ `${n.deviceEmulation} with Lighthouse ${e.lighthouseVersion}`,
2546
+ c.join("\n")
2547
+ ],
2548
+ [
2549
+ "samples-one",
2550
+ V.strings.runtimeSingleLoad,
2551
+ V.strings.runtimeSingleLoadTooltip
2552
+ ],
2553
+ ["stopwatch", l],
2554
+ [
2555
+ "networkspeed",
2556
+ `${n.summary}`,
2557
+ `${V.strings.runtimeSettingsNetworkThrottling}: ${n.networkThrottling}`
2558
+ ],
2559
+ [
2560
+ "chrome",
2561
+ `Using ${i}` + (a ? ` with ${a}` : ""),
2562
+ `${V.strings.runtimeSettingsUANetwork}: "${e.environment.networkUserAgent}"`
2563
+ ]
2564
+ ], d = this._dom.find(".lh-meta__items", t);
2565
+ for (let [e, t, n] of u) {
2566
+ let r = this._dom.createChildOf(d, "li", "lh-meta__item");
2567
+ if (r.textContent = t, n) {
2568
+ r.classList.add("lh-tooltip-boundary");
2569
+ let e = this._dom.createChildOf(r, "div", "lh-tooltip");
2570
+ e.textContent = n;
2571
+ }
2572
+ r.classList.add("lh-report-icon", `lh-report-icon--${e}`);
2573
+ }
2574
+ }
2575
+ _renderReportWarnings(e) {
2576
+ if (!e.runWarnings || e.runWarnings.length === 0) return this._dom.createElement("div");
2577
+ let t = this._dom.createComponent("warningsToplevel"), n = this._dom.find(".lh-warnings__msg", t);
2578
+ n.textContent = V.strings.toplevelWarningsMessage;
2579
+ let r = [];
2580
+ for (let t of e.runWarnings) {
2581
+ let e = this._dom.createElement("li");
2582
+ e.append(this._dom.convertMarkdownLinkSnippets(t)), r.push(e);
2583
+ }
2584
+ return this._dom.find("ul", t).append(...r), t;
2585
+ }
2586
+ _renderScoreGauges(e, t, n) {
2587
+ let r = [], i = [];
2588
+ for (let a of Object.values(e.categories)) {
2589
+ let o = (n[a.id] || t).renderCategoryScore(a, e.categoryGroups || {}, { gatherMode: e.gatherMode }), s = this._dom.find("a.lh-gauge__wrapper, a.lh-fraction__wrapper", o);
2590
+ s && (this._dom.safelySetHref(s, `#${a.id}`), s.addEventListener("click", (e) => {
2591
+ if (!s.matches("[href^=\"#\"]")) return;
2592
+ let t = s.getAttribute("href"), n = this._dom.rootEl;
2593
+ if (!t || !n) return;
2594
+ let r = this._dom.find(t, n);
2595
+ e.preventDefault(), r.scrollIntoView();
2596
+ }), this._opts.onPageAnchorRendered?.(s)), U.isPluginCategory(a.id) ? i.push(o) : r.push(o);
2597
+ }
2598
+ return [...r, ...i];
2599
+ }
2600
+ _renderReport(e) {
2601
+ V.apply({
2602
+ providedStrings: e.i18n.rendererFormattedStrings,
2603
+ i18n: new Gt(e.configSettings.locale),
2604
+ reportJson: e
2605
+ });
2606
+ let t = new Wt(this._dom, {
2607
+ fullPageScreenshot: e.fullPageScreenshot ?? void 0,
2608
+ entities: e.entities
2609
+ }), n = new It(this._dom, t), r = { performance: new Xt(this._dom, t) }, i = this._dom.createElement("div");
2610
+ i.append(this._renderReportHeader());
2611
+ let a = this._dom.createElement("div", "lh-container"), o = this._dom.createElement("div", "lh-report");
2612
+ o.append(this._renderReportWarnings(e));
2613
+ let s;
2614
+ Object.keys(e.categories).length === 1 ? i.classList.add("lh-header--solo-category") : s = this._dom.createElement("div", "lh-scores-header");
2615
+ let c = this._dom.createElement("div");
2616
+ if (c.classList.add("lh-scorescale-wrap"), c.append(this._dom.createComponent("scorescale")), s) {
2617
+ let t = this._dom.find(".lh-scores-container", i);
2618
+ s.append(...this._renderScoreGauges(e, n, r)), t.append(s, c);
2619
+ let o = this._dom.createElement("div", "lh-sticky-header");
2620
+ o.append(...this._renderScoreGauges(e, n, r)), a.append(o);
2621
+ }
2622
+ let l = this._dom.createElement("div", "lh-categories");
2623
+ o.append(l);
2624
+ let u = { gatherMode: e.gatherMode };
2625
+ for (let t of Object.values(e.categories)) {
2626
+ let i = r[t.id] || n;
2627
+ i.dom.createChildOf(l, "div", "lh-category-wrapper").append(i.render(t, e.categoryGroups, u));
2628
+ }
2629
+ n.injectFinalScreenshot(l, e.audits, c);
2630
+ let d = this._dom.createFragment();
2631
+ return this._opts.omitGlobalStyles || d.append(this._dom.createComponent("styles")), this._opts.omitTopbar || d.append(this._renderReportTopbar(e)), d.append(a), o.append(this._renderReportFooter(e)), a.append(i, o), e.fullPageScreenshot && Vt.installFullPageScreenshot(this._dom.rootEl, e.fullPageScreenshot.screenshot), d;
2632
+ }
2633
+ };
2634
+ function Qt(e, t) {
2635
+ let n = e.rootEl;
2636
+ typeof t > "u" ? n.classList.toggle("lh-dark") : n.classList.toggle("lh-dark", t);
2637
+ }
2638
+ var $t = typeof btoa < "u" ? btoa : (e) => Buffer.from(e).toString("base64"), en = typeof atob < "u" ? atob : (e) => Buffer.from(e, "base64").toString();
2639
+ async function tn(e, t) {
2640
+ let n = new TextEncoder().encode(e);
2641
+ if (t.gzip) if (typeof CompressionStream < "u") {
2642
+ let e = new CompressionStream("gzip"), t = e.writable.getWriter();
2643
+ t.write(n), t.close();
2644
+ let r = await new Response(e.readable).arrayBuffer();
2645
+ n = new Uint8Array(r);
2646
+ } else n = window.pako.gzip(e);
2647
+ let r = "", i = 5e3;
2648
+ for (let e = 0; e < n.length; e += i) r += String.fromCharCode(...n.subarray(e, e + i));
2649
+ return $t(r);
2650
+ }
2651
+ function nn(e, t) {
2652
+ let n = en(e), r = Uint8Array.from(n, (e) => e.charCodeAt(0));
2653
+ return t.gzip ? window.pako.ungzip(r, { to: "string" }) : new TextDecoder().decode(r);
2654
+ }
2655
+ var rn = {
2656
+ toBase64: tn,
2657
+ fromBase64: nn
2658
+ };
2659
+ function an() {
2660
+ let e = window.location.host.endsWith(".vercel.app"), t = new URLSearchParams(window.location.search).has("dev");
2661
+ return e ? `https://${window.location.host}/gh-pages` : t ? "http://localhost:7333" : "https://googlechrome.github.io/lighthouse";
2662
+ }
2663
+ function on(e) {
2664
+ let t = e.generatedTime, n = e.fetchTime || t;
2665
+ return `${e.lighthouseVersion}-${e.finalDisplayedUrl}-${n}`;
2666
+ }
2667
+ function sn(e, t, n) {
2668
+ let r = new URL(t).origin;
2669
+ window.addEventListener("message", function t(n) {
2670
+ n.origin === r && i && n.data.opened && (i.postMessage(e, r), window.removeEventListener("message", t));
2671
+ });
2672
+ let i = window.open(t, n);
2673
+ }
2674
+ async function cn(e, t, n) {
2675
+ let r = new URL(t), i = !!window.CompressionStream;
2676
+ r.hash = await rn.toBase64(JSON.stringify(e), { gzip: i }), i && r.searchParams.set("gzip", "1"), window.open(r.toString(), n);
2677
+ }
2678
+ async function ln(e) {
2679
+ let t = "viewer-" + on(e), n = an() + "/viewer/";
2680
+ await cn({ lhr: e }, n, t);
2681
+ }
2682
+ async function un(e) {
2683
+ let t = "viewer-" + on(e), n = an() + "/viewer/";
2684
+ sn({ lhr: e }, n, t);
2685
+ }
2686
+ function dn(e) {
2687
+ if (!e.audits["script-treemap-data"].details) throw Error("no script treemap data found");
2688
+ cn({ lhr: {
2689
+ mainDocumentUrl: e.mainDocumentUrl,
2690
+ finalUrl: e.finalUrl,
2691
+ finalDisplayedUrl: e.finalDisplayedUrl,
2692
+ audits: { "script-treemap-data": e.audits["script-treemap-data"] },
2693
+ configSettings: { locale: e.configSettings.locale }
2694
+ } }, an() + "/treemap/", "treemap-" + on(e));
2695
+ }
2696
+ var fn = class {
2697
+ constructor(e) {
2698
+ 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);
2699
+ }
2700
+ setup(e) {
2701
+ 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);
2702
+ }
2703
+ close() {
2704
+ 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);
2705
+ }
2706
+ open(e) {
2707
+ this._toggleEl.classList.contains("lh-active") ? e.focus() : this._menuEl.addEventListener("transitionend", () => {
2708
+ e.focus();
2709
+ }, { 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);
2710
+ }
2711
+ onToggleClick(e) {
2712
+ e.preventDefault(), e.stopImmediatePropagation(), this._toggleEl.classList.contains("lh-active") ? this.close() : this.open(this._getNextMenuItem());
2713
+ }
2714
+ onToggleKeydown(e) {
2715
+ switch (e.code) {
2716
+ case "ArrowUp":
2717
+ e.preventDefault(), this.open(this._getPreviousMenuItem());
2718
+ break;
2719
+ case "ArrowDown":
2720
+ case "Enter":
2721
+ case " ":
2722
+ e.preventDefault(), this.open(this._getNextMenuItem());
2723
+ break;
2724
+ default:
2725
+ }
2726
+ }
2727
+ onMenuKeydown(e) {
2728
+ let t = e.target;
2729
+ switch (e.code) {
2730
+ case "ArrowUp":
2731
+ e.preventDefault(), this._getPreviousMenuItem(t).focus();
2732
+ break;
2733
+ case "ArrowDown":
2734
+ e.preventDefault(), this._getNextMenuItem(t).focus();
2735
+ break;
2736
+ case "Home":
2737
+ e.preventDefault(), this._getNextMenuItem().focus();
2738
+ break;
2739
+ case "End":
2740
+ e.preventDefault(), this._getPreviousMenuItem().focus();
2741
+ break;
2742
+ default:
2743
+ }
2744
+ }
2745
+ onDocumentKeyDown(e) {
2746
+ e.keyCode === 27 && this.close();
2747
+ }
2748
+ onMenuFocusOut(e) {
2749
+ let t = e.relatedTarget;
2750
+ this._menuEl.contains(t) || this.close();
2751
+ }
2752
+ _getNextSelectableNode(e, t) {
2753
+ let n = e.filter((e) => e instanceof HTMLElement).filter((e) => !(e.hasAttribute("disabled") || window.getComputedStyle(e).display === "none")), r = t ? n.indexOf(t) + 1 : 0;
2754
+ return r >= n.length && (r = 0), n[r];
2755
+ }
2756
+ _getNextMenuItem(e) {
2757
+ let t = Array.from(this._menuEl.childNodes);
2758
+ return this._getNextSelectableNode(t, e);
2759
+ }
2760
+ _getPreviousMenuItem(e) {
2761
+ let t = Array.from(this._menuEl.childNodes).reverse();
2762
+ return this._getNextSelectableNode(t, e);
2763
+ }
2764
+ }, pn = class {
2765
+ constructor(e, t) {
2766
+ this.lhr, this._reportUIFeatures = e, this._dom = t, this._dropDownMenu = new fn(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);
2767
+ }
2768
+ enable(e) {
2769
+ 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", () => Qt(this._dom)), this._setupStickyHeader();
2770
+ }
2771
+ onDropDownMenuClick(e) {
2772
+ e.preventDefault();
2773
+ let t = e.target;
2774
+ if (!(!t || !t.hasAttribute("data-action"))) {
2775
+ switch (t.getAttribute("data-action")) {
2776
+ case "copy":
2777
+ this.onCopyButtonClick();
2778
+ break;
2779
+ case "print-summary":
2780
+ this.collapseAllDetails(), this._print();
2781
+ break;
2782
+ case "print-expanded":
2783
+ this.expandAllDetails(), this._print();
2784
+ break;
2785
+ case "save-json": {
2786
+ let e = JSON.stringify(this.lhr, null, 2);
2787
+ this._reportUIFeatures._saveFile(new Blob([e], { type: "application/json" }));
2788
+ break;
2789
+ }
2790
+ case "save-html": {
2791
+ let e = this._reportUIFeatures.getReportHtml();
2792
+ try {
2793
+ this._reportUIFeatures._saveFile(new Blob([e], { type: "text/html" }));
2794
+ } catch (e) {
2795
+ this._dom.fireEventOn("lh-log", this._dom.document(), {
2796
+ cmd: "error",
2797
+ msg: "Could not export as HTML. " + e.message
2798
+ });
2799
+ }
2800
+ break;
2801
+ }
2802
+ case "open-viewer":
2803
+ this._dom.isDevTools() ? ln(this.lhr) : un(this.lhr);
2804
+ break;
2805
+ case "save-gist":
2806
+ this._reportUIFeatures.saveAsGist();
2807
+ break;
2808
+ case "toggle-dark":
2809
+ Qt(this._dom);
2810
+ break;
2811
+ case "view-unthrottled-trace": this._reportUIFeatures._opts.onViewTrace?.();
2812
+ }
2813
+ this._dropDownMenu.close();
2814
+ }
2815
+ }
2816
+ onCopy(e) {
2817
+ 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(), {
2818
+ cmd: "log",
2819
+ msg: "Report JSON copied to clipboard"
2820
+ })), this._copyAttempt = !1;
2821
+ }
2822
+ onCopyButtonClick() {
2823
+ this._dom.fireEventOn("lh-analytics", this._dom.document(), { name: "copy" });
2824
+ try {
2825
+ this._dom.document().queryCommandSupported("copy") && (this._copyAttempt = !0, this._dom.document().execCommand("copy") || (this._copyAttempt = !1, this._dom.fireEventOn("lh-log", this._dom.document(), {
2826
+ cmd: "warn",
2827
+ msg: "Your browser does not support copy to clipboard."
2828
+ })));
2829
+ } catch (e) {
2830
+ this._copyAttempt = !1, this._dom.fireEventOn("lh-log", this._dom.document(), {
2831
+ cmd: "log",
2832
+ msg: e.message
2833
+ });
2834
+ }
2835
+ }
2836
+ onKeyUp(e) {
2837
+ (e.ctrlKey || e.metaKey) && e.keyCode === 80 && this._dropDownMenu.close();
2838
+ }
2839
+ expandAllDetails() {
2840
+ this._dom.findAll(".lh-categories details", this._dom.rootEl).map((e) => e.open = !0);
2841
+ }
2842
+ collapseAllDetails() {
2843
+ this._dom.findAll(".lh-categories details", this._dom.rootEl).map((e) => e.open = !1);
2844
+ }
2845
+ _print() {
2846
+ this._reportUIFeatures._opts.onPrintOverride ? this._reportUIFeatures._opts.onPrintOverride(this._dom.rootEl) : self.print();
2847
+ }
2848
+ resetUIState() {
2849
+ this._dropDownMenu.close();
2850
+ }
2851
+ _getScrollParent(e) {
2852
+ let { overflowY: t } = window.getComputedStyle(e);
2853
+ return t !== "visible" && t !== "hidden" ? e : e.parentElement ? this._getScrollParent(e.parentElement) : document;
2854
+ }
2855
+ _setUpCollapseDetailsAfterPrinting() {
2856
+ "onbeforeprint" in self ? self.addEventListener("afterprint", this.collapseAllDetails) : self.matchMedia("print").addListener((e) => {
2857
+ e.matches ? this.expandAllDetails() : this.collapseAllDetails();
2858
+ });
2859
+ }
2860
+ _setupStickyHeader() {
2861
+ this.topbarEl = this._dom.find("div.lh-topbar", this._dom.rootEl), this.categoriesEl = this._dom.find("div.lh-categories", this._dom.rootEl), requestAnimationFrame(() => requestAnimationFrame(() => {
2862
+ try {
2863
+ this.stickyHeaderEl = this._dom.find("div.lh-sticky-header", this._dom.rootEl);
2864
+ } catch {
2865
+ return;
2866
+ }
2867
+ this.highlightEl = this._dom.createChildOf(this.stickyHeaderEl, "div", "lh-highlighter");
2868
+ let e = this._getScrollParent(this._dom.find(".lh-container", this._dom.rootEl));
2869
+ e.addEventListener("scroll", () => this._updateStickyHeader());
2870
+ let t = e instanceof window.Document ? document.documentElement : e;
2871
+ new window.ResizeObserver(() => this._updateStickyHeader()).observe(t);
2872
+ }));
2873
+ }
2874
+ _updateStickyHeader() {
2875
+ if (!this.stickyHeaderEl) return;
2876
+ let e = this.topbarEl.getBoundingClientRect().bottom >= this.categoriesEl.getBoundingClientRect().top, t = Array.from(this._dom.rootEl.querySelectorAll(".lh-category")).filter((e) => e.getBoundingClientRect().top - window.innerHeight / 2 < 0), n = t.length > 0 ? t.length - 1 : 0, r = this.stickyHeaderEl.querySelectorAll(".lh-gauge__wrapper, .lh-fraction__wrapper"), i = r[n], a = r[0].getBoundingClientRect().left, o = i.getBoundingClientRect().left - a;
2877
+ this.highlightEl.style.transform = `translate(${o}px)`, this.stickyHeaderEl.classList.toggle("lh-sticky-header--visible", e);
2878
+ }
2879
+ };
2880
+ function mn(e, t) {
2881
+ let n = t ? new Date(t) : /* @__PURE__ */ new Date(), r = n.toLocaleTimeString("en-US", { hour12: !1 }), i = n.toLocaleDateString("en-US", {
2882
+ year: "numeric",
2883
+ month: "2-digit",
2884
+ day: "2-digit"
2885
+ }).split("/");
2886
+ return i.unshift(i.pop()), `${e}_${i.join("-")}_${r}`.replace(/[/?<>\\:*|"]/g, "-");
2887
+ }
2888
+ function hn(e) {
2889
+ let t = new URL(e.finalDisplayedUrl).hostname;
2890
+ return mn(t, e.fetchTime);
2891
+ }
2892
+ function gn(e) {
2893
+ return Array.from(e.tBodies[0].rows);
2894
+ }
2895
+ var _n = class {
2896
+ constructor(e, t = {}) {
2897
+ this.json, this._dom = e, this._opts = t, this._topbar = t.omitTopbar ? null : new pn(this, e), this.onMediaQueryChange = this.onMediaQueryChange.bind(this);
2898
+ }
2899
+ initFeatures(e) {
2900
+ this.json = e, this._fullPageScreenshot = B.getFullPageScreenshot(e), this._topbar && (this._topbar.enable(e), this._topbar.resetUIState()), this._setupMediaQueryListeners(), this._setupThirdPartyFilter(), this._setupElementScreenshotOverlay(this._dom.rootEl);
2901
+ let t = this._dom.isDevTools() || this._opts.disableDarkMode || this._opts.disableAutoDarkModeAndFireworks;
2902
+ !t && window.matchMedia("(prefers-color-scheme: dark)").matches && Qt(this._dom, !0);
2903
+ let n = [
2904
+ "performance",
2905
+ "accessibility",
2906
+ "best-practices",
2907
+ "seo"
2908
+ ].every((t) => {
2909
+ let n = e.categories[t];
2910
+ return n && n.score === 1;
2911
+ }), r = this._opts.disableFireworks || this._opts.disableAutoDarkModeAndFireworks;
2912
+ if (n && !r && (this._enableFireworks(), t || Qt(this._dom, !0)), e.categories.performance && e.categories.performance.auditRefs.some((t) => !!(t.group === "metrics" && e.audits[t.id].errorMessage))) {
2913
+ let e = this._dom.find("input.lh-metrics-toggle__input", this._dom.rootEl);
2914
+ e.checked = !0;
2915
+ }
2916
+ this.json.audits["script-treemap-data"] && this.json.audits["script-treemap-data"].details && this.addButton({
2917
+ text: V.strings.viewTreemapLabel,
2918
+ icon: "treemap",
2919
+ onClick: () => dn(this.json)
2920
+ }), 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({
2921
+ text: V.strings.viewTraceLabel,
2922
+ onClick: () => this._opts.onViewTrace?.()
2923
+ })), this._opts.getStandaloneReportHTML && this._dom.find("a[data-action=\"save-html\"]", this._dom.rootEl).classList.remove("lh-hidden");
2924
+ for (let e of this._dom.findAll("[data-i18n]", this._dom.rootEl)) {
2925
+ let t = e.getAttribute("data-i18n");
2926
+ e.textContent = V.strings[t];
2927
+ }
2928
+ }
2929
+ addButton(e) {
2930
+ let t = this._dom.rootEl.querySelector(".lh-audit-group--metrics");
2931
+ if (!t) return;
2932
+ let n = t.querySelector(".lh-buttons");
2933
+ n ||= this._dom.createChildOf(t, "div", "lh-buttons");
2934
+ let r = ["lh-button"];
2935
+ e.icon && (r.push("lh-report-icon"), r.push(`lh-report-icon--${e.icon}`));
2936
+ let i = this._dom.createChildOf(n, "button", r.join(" "));
2937
+ return i.textContent = e.text, i.addEventListener("click", e.onClick), i;
2938
+ }
2939
+ resetUIState() {
2940
+ this._topbar && this._topbar.resetUIState();
2941
+ }
2942
+ getReportHtml() {
2943
+ if (!this._opts.getStandaloneReportHTML) throw Error("`getStandaloneReportHTML` is not set");
2944
+ return this.resetUIState(), this._opts.getStandaloneReportHTML();
2945
+ }
2946
+ saveAsGist() {
2947
+ throw Error("Cannot save as gist from base report");
2948
+ }
2949
+ _enableFireworks() {
2950
+ this._dom.find(".lh-scores-container", this._dom.rootEl).classList.add("lh-score100");
2951
+ }
2952
+ _setupMediaQueryListeners() {
2953
+ let e = self.matchMedia("(max-width: 500px)");
2954
+ e.addListener(this.onMediaQueryChange), this.onMediaQueryChange(e);
2955
+ }
2956
+ _resetUIState() {
2957
+ this._topbar && this._topbar.resetUIState();
2958
+ }
2959
+ onMediaQueryChange(e) {
2960
+ this._dom.rootEl.classList.toggle("lh-narrow", e.matches);
2961
+ }
2962
+ _setupThirdPartyFilter() {
2963
+ let e = [
2964
+ "uses-rel-preconnect",
2965
+ "third-party-facades",
2966
+ "network-dependency-tree-insight"
2967
+ ], t = ["legacy-javascript", "legacy-javascript-insight"];
2968
+ Array.from(this._dom.rootEl.querySelectorAll("table.lh-table")).filter((e) => e.querySelector("td.lh-table-column--url, td.lh-table-column--source-location")).filter((t) => {
2969
+ let n = t.closest(".lh-audit");
2970
+ if (!n) throw Error(".lh-table not within audit");
2971
+ return !e.includes(n.id);
2972
+ }).forEach((e) => {
2973
+ let n = gn(e), r = n.filter((e) => !e.classList.contains("lh-sub-item-row")), i = this._getThirdPartyRows(r, B.getFinalDisplayedUrl(this.json)), a = n.some((e) => e.classList.contains("lh-row--even")), o = this._dom.createComponent("3pFilter"), s = this._dom.find("input", o);
2974
+ s.addEventListener("change", (e) => {
2975
+ let t = e.target instanceof HTMLInputElement && !e.target.checked, n = !0, o = r[0];
2976
+ for (; o;) {
2977
+ let e = t && i.includes(o);
2978
+ do
2979
+ o.classList.toggle("lh-row--hidden", e), a && (o.classList.toggle("lh-row--even", !e && n), o.classList.toggle("lh-row--odd", !e && !n)), o = o.nextElementSibling;
2980
+ while (o && o.classList.contains("lh-sub-item-row"));
2981
+ e || (n = !n);
2982
+ }
2983
+ });
2984
+ let c = i.filter((e) => !e.classList.contains("lh-row--group")).length;
2985
+ this._dom.find(".lh-3p-filter-count", o).textContent = `${c}`, this._dom.find(".lh-3p-ui-string", o).textContent = V.strings.thirdPartyResourcesLabel;
2986
+ let l = i.length === r.length, u = !i.length;
2987
+ if ((l || u) && (this._dom.find("div.lh-3p-filter", o).hidden = !0), !e.parentNode) return;
2988
+ e.parentNode.insertBefore(o, e);
2989
+ let d = e.closest(".lh-audit");
2990
+ if (!d) throw Error(".lh-table not within audit");
2991
+ t.includes(d.id) && !l && s.click();
2992
+ });
2993
+ }
2994
+ _setupElementScreenshotOverlay(e) {
2995
+ this._fullPageScreenshot && Vt.installOverlayFeature({
2996
+ dom: this._dom,
2997
+ rootEl: e,
2998
+ overlayContainerEl: e,
2999
+ fullPageScreenshot: this._fullPageScreenshot
3000
+ });
3001
+ }
3002
+ _getThirdPartyRows(e, t) {
3003
+ let n = B.getEntityFromUrl(t, this.json.entities), r = this.json.entities?.find((e) => e.isFirstParty === !0)?.name, i = [];
3004
+ for (let t of e) {
3005
+ if (r) {
3006
+ if (!t.dataset.entity || t.dataset.entity === r) continue;
3007
+ } else {
3008
+ let e = t.querySelector("div.lh-text__url");
3009
+ if (!e) continue;
3010
+ let r = e.dataset.url;
3011
+ if (!r || B.getEntityFromUrl(r, this.json.entities) === n) continue;
3012
+ }
3013
+ i.push(t);
3014
+ }
3015
+ return i;
3016
+ }
3017
+ _saveFile(e) {
3018
+ let t = e.type.match("json") ? ".json" : ".html", n = hn({
3019
+ finalDisplayedUrl: B.getFinalDisplayedUrl(this.json),
3020
+ fetchTime: this.json.fetchTime
3021
+ }) + t;
3022
+ this._opts.onSaveFileOverride ? this._opts.onSaveFileOverride(e, n) : this._dom.saveFile(e, n);
3023
+ }
3024
+ };
3025
+ function vn(e, t = {}) {
3026
+ let n = document.createElement("article");
3027
+ n.classList.add("lh-root", "lh-vars");
3028
+ let r = new jt(n.ownerDocument, n);
3029
+ return new Zt(r).renderReport(e, n, t), new _n(r, t).initFeatures(e), n;
3030
+ }
3031
+ //#endregion
3032
+ //#region node_modules/.pnpm/chrome-devtools-frontend@1.0.1638082/node_modules/chrome-devtools-frontend/front_end/panels/lighthouse/LighthouseReportRenderer.ts
3033
+ var yn = /* @__PURE__ */ e({ LighthouseReportRenderer: () => xn }), bn = 40, xn = class e {
3034
+ static renderLighthouseReport(t, r, a) {
3035
+ let o;
3036
+ r && (o = async () => {
3037
+ j.actionTaken(ve.LighthouseViewTrace), c(new he(r.Trace.traceEvents));
3038
+ });
3039
+ async function l(e) {
3040
+ let r = `${new i(t.finalUrl || t.finalDisplayedUrl).domain().replace(/[^a-z0-9.-]+/gi, "_")}-${n(new Date(t.fetchTime))}${e.type.match("json") ? ".json" : ".html"}`, a = await e.arrayBuffer().then(s);
3041
+ await je.instance().save(r, new Ae(a, !0, e.type), !0), je.instance().close(r);
3042
+ }
3043
+ async function u(t) {
3044
+ let n = t.cloneNode(!0), r = window.open("", "_blank", "channelmode=1,status=1,resizable=1");
3045
+ r && (r.document.body.replaceWith(n), await e.linkifyNodeDetails(n), a?.beforePrint?.(), r.focus(), r.print(), r.close(), a?.afterPrint?.());
3046
+ }
3047
+ function d() {
3048
+ return Lighthouse.ReportGenerator.ReportGenerator.generateReportHtml(t);
3049
+ }
3050
+ let f = vn(t, {
3051
+ disableDarkMode: !0,
3052
+ onViewTrace: o,
3053
+ onSaveFileOverride: l,
3054
+ onPrintOverride: u,
3055
+ getStandaloneReportHTML: d
3056
+ });
3057
+ f.classList.add("lh-devtools");
3058
+ let p = () => {
3059
+ f.classList.toggle("lh-dark", Le.instance().themeName() === "dark");
3060
+ };
3061
+ return Le.instance().addEventListener(Re.eventName, p), p(), f._lighthouseResultForTesting = t, f._lighthouseArtifactsForTesting = r, e.installVisualLogging(f), e.waitForMainTargetLoad().then(() => {
3062
+ e.linkifyNodeDetails(f), e.linkifySourceLocationDetails(f);
3063
+ }), f;
3064
+ }
3065
+ static renderLighthouseScores(t) {
3066
+ let n = e.renderLighthouseReport(t), r = n.querySelector(".lh-container"), i = n.querySelector(".lh-scores-header");
3067
+ return !i || !r ? null : (r.replaceChildren(i), n.querySelector(".lh-topbar")?.remove(), n);
3068
+ }
3069
+ static async waitForMainTargetLoad() {
3070
+ let e = w.instance().primaryPageTarget();
3071
+ if (!e) return;
3072
+ let t = e.model(ie);
3073
+ t && await t.once(re.Load);
3074
+ }
3075
+ static async linkifyNodeDetails(e) {
3076
+ let t = w.instance().primaryPageTarget();
3077
+ if (!t) return;
3078
+ let n = t.model(Ce);
3079
+ if (n) for (let t of e.getElementsByClassName("lh-node")) {
3080
+ let e = t, r = e.dataset;
3081
+ if (!r.path) continue;
3082
+ let i = await n.pushNodeByPathToFrontend(r.path);
3083
+ if (!i) continue;
3084
+ let a = n.nodeForId(i);
3085
+ if (!a) continue;
3086
+ let o = Ne.instance().linkify(a, {
3087
+ tooltip: r.snippet,
3088
+ preventKeyboardFocus: void 0
3089
+ });
3090
+ te.install(e, "");
3091
+ let s = e.querySelector(".lh-element-screenshot");
3092
+ e.textContent = "", y(D`${s ?? se}${o}`, e);
3093
+ }
3094
+ }
3095
+ static async linkifySourceLocationDetails(e) {
3096
+ for (let t of e.getElementsByClassName("lh-source-location")) {
3097
+ let e = t, n = e.dataset;
3098
+ if (!n.sourceUrl || !n.sourceLine || !n.sourceColumn) continue;
3099
+ let r = n.sourceUrl, i = Number(n.sourceLine), a = Number(n.sourceColumn), o = Me.linkifyURL(r, {
3100
+ lineNumber: i,
3101
+ columnNumber: a,
3102
+ showColumnNumber: !1,
3103
+ inlineFrameIndex: 0,
3104
+ maxLength: bn
3105
+ });
3106
+ te.install(e, ""), e.textContent = "", e.appendChild(o);
3107
+ }
3108
+ }
3109
+ static installVisualLogging(e) {
3110
+ for (let t of e.getElementsByClassName("lh-audit")) {
3111
+ let e = t.querySelector("summary");
3112
+ if (!e) continue;
3113
+ let n = t.id;
3114
+ if (!n) continue;
3115
+ t.setAttribute("jslog", `${C(`lighthouse.audit.${n}`).track({ resize: !0 })}`);
3116
+ let r;
3117
+ for (let e of t.classList) switch (e) {
3118
+ case "lh-audit--pass":
3119
+ r = "pass";
3120
+ break;
3121
+ case "lh-audit--average":
3122
+ r = "average";
3123
+ break;
3124
+ case "lh-audit--fail":
3125
+ r = "fail";
3126
+ break;
3127
+ case "lh-audit--informative":
3128
+ r = "informative";
3129
+ break;
3130
+ }
3131
+ r && e.setAttribute("jslog", `${T(`lighthouse.audit-summary.${r}`).track({ click: !0 })}`);
3132
+ }
3133
+ }
3134
+ }, Sn = /* @__PURE__ */ e({
3135
+ Item: () => Dn,
3136
+ ReportSelector: () => En
3137
+ }), Cn = {
3138
+ reports: "Reports",
3139
+ newReport: "(new report)"
3140
+ }, wn = p("panels/lighthouse/LighthouseReportSelector.ts", Cn), Tn = l.bind(void 0, wn), En = class {
3141
+ renderNewLighthouseView;
3142
+ newLighthouseItem;
3143
+ #e;
3144
+ itemByOptionElement;
3145
+ constructor(e) {
3146
+ this.renderNewLighthouseView = e, this.newLighthouseItem = document.createElement("option"), this.#e = new O(this.handleChange.bind(this), Tn(Cn.reports), "lighthouse-report"), this.itemByOptionElement = /* @__PURE__ */ new Map(), this.setEmptyState();
3147
+ }
3148
+ setEmptyState() {
3149
+ this.#e.removeOptions(), this.#e.setEnabled(!1), this.newLighthouseItem = document.createElement("option"), this.newLighthouseItem.label = Tn(Cn.newReport), this.#e.addOption(this.newLighthouseItem), this.#e.select(this.newLighthouseItem);
3150
+ }
3151
+ handleChange(e) {
3152
+ let t = this.selectedItem();
3153
+ t ? t.select() : this.renderNewLighthouseView();
3154
+ }
3155
+ selectedItem() {
3156
+ let e = this.#e.selectedOption();
3157
+ return this.itemByOptionElement.get(e);
3158
+ }
3159
+ hasItems() {
3160
+ return this.itemByOptionElement.size > 0;
3161
+ }
3162
+ comboBox() {
3163
+ return this.#e;
3164
+ }
3165
+ prepend(e) {
3166
+ let t = e.optionElement(), n = this.#e.element;
3167
+ this.itemByOptionElement.set(t, e), n.insertBefore(t, n.firstElementChild), this.#e.setEnabled(!0), this.#e.select(t), e.select();
3168
+ }
3169
+ clearAll() {
3170
+ for (let e of this.#e.options()) e !== this.newLighthouseItem && (this.itemByOptionElement.get(e)?.delete(), this.itemByOptionElement.delete(e));
3171
+ this.setEmptyState();
3172
+ }
3173
+ selectNewReport() {
3174
+ this.#e.select(this.newLighthouseItem);
3175
+ }
3176
+ selectReport(e) {
3177
+ for (let [t, n] of this.itemByOptionElement) if (n.report === e) {
3178
+ this.#e.select(t), n.select();
3179
+ return;
3180
+ }
3181
+ }
3182
+ }, Dn = class {
3183
+ renderReport;
3184
+ showLandingCallback;
3185
+ element;
3186
+ report;
3187
+ constructor(e, t, n) {
3188
+ this.report = e, this.renderReport = t, this.showLandingCallback = n;
3189
+ let r = new i(e.finalDisplayedUrl || e.finalUrl || ""), a = e.fetchTime;
3190
+ this.element = document.createElement("option"), this.element.label = `${new Date(a).toLocaleTimeString()} - ${r.domain()}`;
3191
+ }
3192
+ select() {
3193
+ this.renderReport();
3194
+ }
3195
+ optionElement() {
3196
+ return this.element;
3197
+ }
3198
+ delete() {
3199
+ this.element && this.element.remove(), this.showLandingCallback();
3200
+ }
3201
+ }, On = "/*\n * Copyright 2018 The Chromium Authors\n * Use of this source code is governed by a BSD-style license that can be\n * found in the LICENSE file.\n */\n/* <3 */\n\n.lighthouse-start-view {\n line-height: 18px;\n padding: 24px;\n overflow: auto;\n height: 100%;\n /* for buttons */\n --legacy-accent-color: #0535c1;\n --legacy-accent-color-hover: #17b;\n --font-size: 14px;\n --report-font-family: roboto, helvetica, arial, sans-serif;\n}\n\n.lighthouse-start-view header {\n display: flex;\n font-size: 18px;\n flex-direction: row;\n align-items: center;\n column-gap: 16px;\n margin-bottom: 16px;\n}\n\n.lighthouse-start-view .lighthouse-title {\n margin: 0;\n font-size: inherit;\n font-weight: normal;\n}\n\n.lighthouse-logo {\n width: 75px;\n height: 75px;\n flex-shrink: 0;\n background-repeat: no-repeat;\n background-size: contain;\n /* stylelint-disable-next-line custom-property-pattern */\n background-image: var(--image-file-lighthouse_logo);\n}\n\n.lighthouse-start-view .lighthouse-logo {\n width: 45px;\n height: 45px;\n}\n\n.lighthouse-form-section {\n padding: 8px;\n flex: 1 1;\n}\n\n.lighthouse-form-categories-fieldset {\n border: none;\n margin: 0;\n padding: 8px;\n}\n\n.lighthouse-form-section-label {\n margin: 7px 0;\n font-weight: 500;\n}\n\n.lighthouse-form-section-label i span {\n position: relative;\n top: -2px;\n}\n\n.lighthouse-form-section-label span.largeicon-checkmark {\n top: -4px;\n}\n\n.lighthouse-form-section-label .lighthouse-learn-more {\n margin: 20px;\n}\n\n.lighthouse-radio {\n display: flex;\n align-items: center;\n}\n\n.lighthouse-radio-text {\n margin-left: 3px;\n}\n\n.lighthouse-start-button-container {\n align-items: center;\n}\n\n.lighthouse-start-view header.hbox .lighthouse-start-button-container {\n margin-left: auto;\n}\n\n.lighthouse-start-view header.vbox .lighthouse-title {\n text-align: center;\n}\n\n.lighthouse-start-button-container button {\n margin: 16px auto;\n font-family: var(--report-font-family);\n font-weight: 500;\n font-size: var(--font-size);\n}\n\n.lighthouse-start-button-container button:disabled {\n cursor: not-allowed;\n}\n\n.lighthouse-launcher-row,\n.lighthouse-radio {\n &:last-of-type {\n margin-bottom: 0;\n }\n\n &:not(:has(devtools-checkbox)) {\n margin-bottom: 6px;\n }\n}\n\n.lighthouse-launcher-row .dimmed {\n padding-left: 22px;\n}\n\n.lighthouse-help-text {\n text-align: center;\n color: #f00; /* stylelint-disable-line plugin/use_theme_colors */\n /* See: crbug.com/1152736 for color variable migration. */\n font-weight: bold;\n padding-left: 10px;\n}\n\n.lighthouse-warning-text {\n text-align: left;\n color: #ff8c00; /* stylelint-disable-line plugin/use_theme_colors */\n /* See: crbug.com/1152736 for color variable migration. */\n font-weight: bold;\n padding-left: 10px;\n padding-top: 10px;\n}\n\n.lighthouse-warning-text::before {\n content: \"⚠\";\n margin-right: 10px;\n}\n\n.lighthouse-options {\n display: grid;\n grid-template-columns: 1fr 1fr;\n grid-template-rows: auto auto;\n}\n\n.lighthouse-options.narrow {\n grid-template-columns: 1fr;\n grid-template-rows: auto auto auto;\n}\n\n.lighthouse-options.wide {\n grid-template-columns: 1fr 1fr 1fr;\n grid-template-rows: auto;\n}\n", kn = /* @__PURE__ */ e({ RadioSetting: () => jn }), { ifDefined: An } = ae, jn = class {
3202
+ setting;
3203
+ options;
3204
+ element;
3205
+ radioElements;
3206
+ ignoreChangeEvents;
3207
+ selectedIndex;
3208
+ constructor(e, t, n) {
3209
+ this.setting = t, this.options = e, this.element = document.createElement("div"), ee(this.element, n), Ee(this.element), this.radioElements = [], y(D`
3210
+ ${this.options.map((e) => {
3211
+ let r = e.tooltip?.() || n;
3212
+ return D`
3213
+ <label class="lighthouse-radio">
3214
+ <input
3215
+ type="radio"
3216
+ value=${e.value}
3217
+ name=${t.name}
3218
+ @change=${this.valueChanged.bind(this)}
3219
+ title=${An(n ? r : void 0)}
3220
+ ${A((e) => {
3221
+ this.radioElements.push(e);
3222
+ })}
3223
+ />
3224
+ <span
3225
+ class="lighthouse-radio-text"
3226
+ title=${An(n ? r : void 0)}
3227
+ >${e.label()}</span
3228
+ >
3229
+ </label>
3230
+ `;
3231
+ })}
3232
+ `, this.element), this.ignoreChangeEvents = !1, this.selectedIndex = -1, t.addChangeListener(this.settingChanged, this), this.settingChanged();
3233
+ }
3234
+ updateUI() {
3235
+ this.ignoreChangeEvents = !0, this.radioElements[this.selectedIndex] && (this.radioElements[this.selectedIndex].checked = !0), this.ignoreChangeEvents = !1;
3236
+ }
3237
+ settingChanged() {
3238
+ let e = this.setting.get();
3239
+ this.selectedIndex = this.options.findIndex((t) => t.value === e), this.updateUI();
3240
+ }
3241
+ valueChanged(e) {
3242
+ if (this.ignoreChangeEvents) return;
3243
+ let t = this.radioElements.find((e) => e.checked);
3244
+ t && this.setting.set(t.value);
3245
+ }
3246
+ }, Mn = /* @__PURE__ */ e({ StartView: () => Fn }), G = {
3247
+ generateLighthouseReport: "Generate a Lighthouse report",
3248
+ mode: "Mode",
3249
+ categories: "Categories",
3250
+ analyzeNavigation: "Analyze page load",
3251
+ analyzeSnapshot: "Analyze page state",
3252
+ startTimespan: "Start timespan",
3253
+ learnMore: "Learn more",
3254
+ device: "Device"
3255
+ }, Nn = p("panels/lighthouse/LighthouseStartView.ts", G), K = l.bind(void 0, Nn), Pn = (e, t, n) => {
3256
+ y(D`
3257
+ <form class="lighthouse-start-view">
3258
+ <header class="hbox">
3259
+ <div class="lighthouse-logo"></div>
3260
+ <h1 class="lighthouse-title">
3261
+ ${K(G.generateLighthouseReport)}
3262
+ </h1>
3263
+ <div class="lighthouse-start-button-container"></div>
3264
+ </header>
3265
+ <div
3266
+ ${A((e) => {
3267
+ t.helpText = e;
3268
+ })}
3269
+ class="lighthouse-help-text hidden"
3270
+ ></div>
3271
+ <div class="lighthouse-options hbox">
3272
+ <div class="lighthouse-form-section">
3273
+ <div
3274
+ class="lighthouse-form-elements"
3275
+ ${A((e) => {
3276
+ t.modeFormElements = e;
3277
+ })}
3278
+ ></div>
3279
+ </div>
3280
+ <div class="lighthouse-form-section">
3281
+ <div
3282
+ class="lighthouse-form-elements"
3283
+ ${A((e) => {
3284
+ t.deviceTypeFormElements = e;
3285
+ })}
3286
+ ></div>
3287
+ </div>
3288
+ <div class="lighthouse-form-categories">
3289
+ <fieldset class="lighthouse-form-section lighthouse-form-categories-fieldset">
3290
+ <legend class="lighthouse-form-section-label">
3291
+ ${K(G.categories)}
3292
+ </legend>
3293
+ <div
3294
+ class="lighthouse-form-elements"
3295
+ ${A((e) => {
3296
+ t.categoriesFormElements = e;
3297
+ })}
3298
+ ></div>
3299
+ </fieldset>
3300
+ </div>
3301
+ </div>
3302
+ <div
3303
+ ${A((e) => {
3304
+ t.warningText = e;
3305
+ })}
3306
+ class="lighthouse-warning-text hidden"
3307
+ ></div>
3308
+ </form>
3309
+ `, n);
3310
+ }, Fn = class extends be {
3311
+ controller;
3312
+ panel;
3313
+ #e;
3314
+ startButton;
3315
+ helpText;
3316
+ warningText;
3317
+ checkboxes = [];
3318
+ changeFormMode;
3319
+ constructor(e, t) {
3320
+ super({ useShadowDom: !0 }), this.registerRequiredCSS(On), this.controller = e, this.panel = t, this.#e = document.createElement("devtools-toolbar"), this.#e.classList.add("lighthouse-settings-toolbar"), this.render();
3321
+ }
3322
+ populateRuntimeSettingAsRadio(e, t, n) {
3323
+ let r = L().find((t) => t.setting.name === e);
3324
+ if (!r?.options) throw Error(`${e} is not a setting with options`);
3325
+ let i = document.createElement("div");
3326
+ if (i.classList.add("lighthouse-form-section-label"), i.textContent = t, r.learnMore) {
3327
+ let e = _e.create(r.learnMore, K(G.learnMore), "lighthouse-learn-more", "learn-more");
3328
+ i.append(e);
3329
+ }
3330
+ n.appendChild(i);
3331
+ let a = new jn(r.options, r.setting, r.description());
3332
+ n.appendChild(a.element), v(a.element, t);
3333
+ }
3334
+ populateRuntimeSettingAsToolbarCheckbox(e, t) {
3335
+ let n = L().find((t) => t.setting.name === e);
3336
+ if (!n?.title) throw Error(`${e} is not a setting with a title`);
3337
+ n.setting.setTitle(n.title());
3338
+ let r = new Se(n.setting, n.description());
3339
+ if (t.appendToolbarItem(r), n.learnMore) {
3340
+ let e = _e.create(n.learnMore, K(G.learnMore), "lighthouse-learn-more", "learn-more");
3341
+ e.style.margin = "5px", r.element.appendChild(e);
3342
+ }
3343
+ }
3344
+ populateRuntimeSettingAsToolbarDropdown(e, t) {
3345
+ let n = L().find((t) => t.setting.name === e);
3346
+ if (!n?.title) throw Error(`${e} is not a setting with a title`);
3347
+ let r = n.options?.map((e) => ({
3348
+ label: e.label(),
3349
+ value: e.value
3350
+ })) || [];
3351
+ n.setting.setTitle(n.title());
3352
+ let i = new ue(r, n.setting, n.title());
3353
+ if (i.setTitle(n.description()), t.appendToolbarItem(i), n.learnMore) {
3354
+ let e = _e.create(n.learnMore, K(G.learnMore), "lighthouse-learn-more", "learn-more");
3355
+ e.style.marginLeft = "5px", e.style.display = "inline-flex", e.style.height = "revert", t.appendToolbarItem(new we(e));
3356
+ }
3357
+ }
3358
+ populateFormControls(e, t, n) {
3359
+ this.populateRuntimeSettingAsRadio("lighthouse.device-type", K(G.device), e), this.checkboxes = [];
3360
+ for (let e of I()) {
3361
+ e.setting.setTitle(e.title());
3362
+ let r = new Se(e.setting, e.description());
3363
+ t.createChild("div", "vbox lighthouse-launcher-row").appendChild(r.element), r.element.setAttribute("data-lh-category", e.configID), this.checkboxes.push({
3364
+ preset: e,
3365
+ checkbox: r
3366
+ }), n && !e.supportedModes.includes(n) && (r.setEnabled(!1), r.setIndeterminate(!0));
3367
+ }
3368
+ }
3369
+ render() {
3370
+ this.populateRuntimeSettingAsToolbarCheckbox("lighthouse.clear-storage", this.#e), this.populateRuntimeSettingAsToolbarCheckbox("lighthouse.enable-sampling", this.#e), this.populateRuntimeSettingAsToolbarDropdown("lighthouse.throttling", this.#e);
3371
+ let { mode: e } = this.controller.getFlags(), t = {
3372
+ helpText: void 0,
3373
+ warningText: void 0,
3374
+ modeFormElements: void 0,
3375
+ deviceTypeFormElements: void 0,
3376
+ categoriesFormElements: void 0
3377
+ };
3378
+ Pn({}, t, this.contentElement), this.helpText = t.helpText, this.warningText = t.warningText;
3379
+ let n = t.modeFormElements, r = t.deviceTypeFormElements, i = t.categoriesFormElements;
3380
+ if (!n || !r || !i) throw Error("Required elements not found in template");
3381
+ this.populateRuntimeSettingAsRadio("lighthouse.mode", K(G.mode), n), this.populateFormControls(r, i, e), this.refresh();
3382
+ }
3383
+ populateStartButton(e) {
3384
+ let t, n;
3385
+ e === "timespan" ? (t = K(G.startTimespan), n = () => {
3386
+ this.panel.handleTimespanStart();
3387
+ }) : e === "snapshot" ? (t = K(G.analyzeSnapshot), n = () => {
3388
+ this.panel.handleCompleteRun();
3389
+ }) : (t = K(G.analyzeNavigation), n = () => {
3390
+ this.panel.handleCompleteRun();
3391
+ });
3392
+ let r = this.contentElement.querySelector(".lighthouse-start-button-container");
3393
+ r && (r.textContent = "", this.startButton = ce(t, n, {
3394
+ variant: m.PRIMARY,
3395
+ jslogContext: "lighthouse.start"
3396
+ }), r.append(this.startButton));
3397
+ }
3398
+ refresh() {
3399
+ let { mode: e } = this.controller.getFlags();
3400
+ this.populateStartButton(e);
3401
+ for (let { checkbox: t, preset: n } of this.checkboxes) n.supportedModes.includes(e) ? (t.setEnabled(!0), t.setIndeterminate(!1)) : (t.setEnabled(!1), t.setIndeterminate(!0));
3402
+ this.onResize();
3403
+ }
3404
+ onResize() {
3405
+ let e = this.contentElement.offsetWidth < 500, t = this.contentElement.offsetWidth > 800, n = this.contentElement.querySelector(".lighthouse-start-view header"), r = this.contentElement.querySelector(".lighthouse-options");
3406
+ n && (n.classList.toggle("hbox", !e), n.classList.toggle("vbox", e)), r && (r.classList.toggle("wide", t), r.classList.toggle("narrow", e));
3407
+ }
3408
+ focusStartButton() {
3409
+ this.startButton.focus();
3410
+ }
3411
+ setStartButtonEnabled(e) {
3412
+ this.helpText && this.helpText.classList.toggle("hidden", e), this.startButton && (this.startButton.disabled = !e);
3413
+ }
3414
+ setUnauditableExplanation(e) {
3415
+ this.helpText && (this.helpText.textContent = e);
3416
+ }
3417
+ setWarningText(e) {
3418
+ this.warningText && (this.warningText.textContent = e, this.warningText.classList.toggle("hidden", !e));
3419
+ }
3420
+ wasShown() {
3421
+ super.wasShown(), this.controller.recomputePageAuditability();
3422
+ }
3423
+ settingsToolbar() {
3424
+ return this.#e;
3425
+ }
3426
+ }, In = "/*\n * Copyright 2017 The Chromium Authors\n * Use of this source code is governed by a BSD-style license that can be\n * found in the LICENSE file.\n */\n\n.lighthouse-view {\n flex: auto;\n align-items: start;\n width: 100%;\n max-width: var(--sys-size-34);\n\n .header {\n font: var(--sys-typescale-body2-medium);\n padding-top: var(--sys-size-3);\n margin: var(--sys-size-5) var(--sys-size-5) var(--sys-size-5) var(--sys-size-8);\n flex: none;\n }\n\n .lighthouse-dialog-text {\n margin: 0 var(--sys-size-8);\n }\n}\n\n.lighthouse-view button {\n z-index: 10;\n margin-left: auto;\n margin-right: 0;\n}\n\n.lighthouse-status {\n width: calc(100% - 2*var(--sys-size-8));\n flex: auto;\n color: var(\n --sys-color-on-surface);\n margin: 0 var(\n --sys-size-8);\n}\n\n.lighthouse-status-text {\n text-align: center;\n min-height: var(--sys-size-16);\n display: flex;\n justify-content: center;\n flex-direction: column;\n}\n\n.lighthouse-status-text code {\n user-select: text;\n text-align: left;\n white-space: pre-wrap;\n overflow: auto;\n}\n\n.lighthouse-progress-wrapper {\n height: var(--sys-size-2);\n background-color: var(--sys-color-neutral-outline);\n position: relative;\n margin: var(--sys-size-5) 0;\n}\n\n.lighthouse-progress-bar {\n width: 0%;\n height: 100%;\n background: var(--sys-color-primary-bright);\n position: absolute;\n transform-origin: left;\n animation-fill-mode: forwards;\n animation-timing-function: ease-out;\n\n --progress-bar-loading-duration: 45s;\n --progress-bar-gathering-duration: 12s;\n --progress-bar-gathering-percent: 70%;\n --progress-bar-auditing-duration: 5s;\n --progress-bar-auditing-percent: 95%;\n}\n\n.lighthouse-progress-bar.errored {\n width: 100%;\n background: var(--sys-color-error);\n}\n\n.lighthouse-progress-bar.loading {\n animation-duration: var(--progress-bar-loading-duration);\n animation-name: progressBarLoading;\n}\n\n@keyframes progressBarLoading {\n 0% { width: 0%; }\n 100% { width: var(--progress-bar-gathering-percent); }\n}\n\n.lighthouse-progress-bar.gathering {\n animation-duration: var(--progress-bar-gathering-duration);\n animation-name: progressBarGathering;\n}\n\n@keyframes progressBarGathering {\n 0% { width: var(--progress-bar-gathering-percent); }\n 100% { width: var(--progress-bar-auditing-percent); }\n}\n\n.lighthouse-progress-bar.auditing {\n animation-duration: var(--progress-bar-auditing-duration);\n animation-name: progressBarAuditing;\n}\n\n@keyframes progressBarAuditing {\n 0% { width: var(--progress-bar-auditing-percent); }\n 100% { width: 99%; }\n}\n\n.lighthouse-report-error {\n display: block;\n margin-top: 5px;\n}\n\n.lighthouse-action-buttons {\n justify-content: space-between;\n align-self: end;\n width: calc(100% - 2*var(--sys-size-8));\n margin: var(--sys-size-6) var(--sys-size-8) var(--sys-size-8) var(--sys-size-8);\n}\n", Ln = /* @__PURE__ */ e({
3427
+ DEFAULT_VIEW: () => Bn,
3428
+ StatusPhases: () => Gn,
3429
+ StatusView: () => Vn,
3430
+ fastFactRotationInterval: () => Hn,
3431
+ minimumTextVisibilityDuration: () => Un
3432
+ }), { html: Rn } = E, q = {
3433
+ cancel: "Cancel",
3434
+ loading: "Loading…",
3435
+ auditingS: "Auditing {PH1}",
3436
+ auditingYourWebPage: "Auditing your web page",
3437
+ aiAuditingS: "AI assistance is auditing {PH1}",
3438
+ aiAuditingYourWebPage: "AI assistance is auditing your web page",
3439
+ cancelling: "Cancelling…",
3440
+ lighthouseIsWarmingUp: "`Lighthouse` is warming up…",
3441
+ lighthouseIsLoadingYourPage: "`Lighthouse` is loading your page",
3442
+ fastFactMessageWithPlaceholder: "💡 {PH1}",
3443
+ ahSorryWeRanIntoAnError: "Ah, sorry! We ran into an error.",
3444
+ tryToNavigateToTheUrlInAFresh: "Try to navigate to the URL in a fresh `Chrome` profile without any other tabs or extensions open and try again.",
3445
+ ifThisIssueIsReproduciblePlease: "If this issue is reproducible, please report it at the `Lighthouse` `GitHub` repo.",
3446
+ lighthouseIsLoadingThePage: "Lighthouse is loading the page.",
3447
+ lighthouseIsGatheringInformation: "`Lighthouse` is gathering information about the page to compute your score.",
3448
+ almostThereLighthouseIsNow: "Almost there! `Lighthouse` is now generating your report.",
3449
+ lighthouseIsLoadingYourPageWith: "`Lighthouse` is loading your page with throttling to measure performance on a mobile device on 3G.",
3450
+ lighthouseIsLoadingYourPageWithThrottling: "`Lighthouse` is loading your page with throttling to measure performance on a slow desktop on 3G.",
3451
+ lighthouseIsLoadingYourPageWithMobile: "`Lighthouse` is loading your page with mobile emulation.",
3452
+ mbTakesAMinimumOfSecondsTo: "1MB takes a minimum of 5 seconds to download on a typical 3G connection [Source: `WebPageTest` and `DevTools` 3G definition].",
3453
+ rebuildingPinterestPagesFor: "Rebuilding Pinterest pages for performance increased conversion rates by 15% [Source: `WPO Stats`]",
3454
+ byReducingTheResponseSizeOfJson: "By reducing the response size of JSON needed for displaying comments, Instagram saw increased impressions [Source: `WPO Stats`]",
3455
+ walmartSawAIncreaseInRevenueFor: "Walmart saw a 1% increase in revenue for every 100ms improvement in page load [Source: `WPO Stats`]",
3456
+ ifASiteTakesSecondToBecome: "If a site takes >1 second to become interactive, users lose attention, and their perception of completing the page task is broken [Source: `Google Developers Blog`]",
3457
+ OfGlobalMobileUsersInWereOnGOrG: "75% of global mobile users in 2016 were on 2G or 3G [Source: `GSMA Mobile`]",
3458
+ theAverageUserDeviceCostsLess: "The average user device costs less than 200 USD. [Source: `International Data Corporation`]",
3459
+ SecondsIsTheAverageTimeAMobile: "19 seconds is the average time a mobile web page takes to load on a 3G connection [Source: `Google DoubleClick blog`]",
3460
+ OfMobilePagesTakeNearlySeconds: "70% of mobile pages take nearly 7 seconds for the visual content above the fold to display on the screen. [Source: `Think with Google`]",
3461
+ asPageLoadTimeIncreasesFromOne: "As page load time increases from one second to seven seconds, the probability of a mobile site visitor bouncing increases 113%. [Source: `Think with Google`]",
3462
+ asTheNumberOfElementsOnAPage: "As the number of elements on a page increases from 400 to 6,000, the probability of conversion drops 95%. [Source: `Think with Google`]",
3463
+ lighthouseOnlySimulatesMobile: "`Lighthouse` only simulates mobile performance; to measure performance on a real device, try WebPageTest.org [Source: `Lighthouse` team]"
3464
+ }, zn = p("panels/lighthouse/LighthouseStatusView.ts", q), J = l.bind(void 0, zn), Y = f.bind(void 0, zn), Bn = (e, t, n) => {
3465
+ let { statusHeader: r, statusText: i, progressBarClass: a, progressBarValue: o, progressBarTotal: s, cancelButtonVisible: c, onCancel: l, bugReport: u } = e;
3466
+ y(Rn`
3467
+ <div class="lighthouse-view vbox">
3468
+ <span class="header">${r}</span>
3469
+ <div class="lighthouse-status vbox">
3470
+ <div class="lighthouse-progress-wrapper">
3471
+ <div
3472
+ class="lighthouse-progress-bar ${a}"
3473
+ role="progressbar"
3474
+ aria-valuemin="0"
3475
+ aria-valuemax=${s}
3476
+ aria-valuenow=${o}
3477
+ aria-valuetext=${i}
3478
+ ></div>
3479
+ </div>
3480
+ <div class="lighthouse-status-text" role="status">
3481
+ ${u ? Rn`
3482
+ <p>${J(q.ahSorryWeRanIntoAnError)}</p>
3483
+ ${u.knownBugPattern ? Rn`
3484
+ <p>${J(q.tryToNavigateToTheUrlInAFresh)}</p>
3485
+ ` : ((e, t) => {
3486
+ let n = navigator.userAgent.match(/Chrome\/(\S+)/) || ["", "Unknown"], r = `
3487
+ ${e.friendlyMessage || e.message}
3488
+ \`\`\`
3489
+ Channel: DevTools
3490
+ Initial URL: ${t}
3491
+ Chrome Version: ${n[1]}
3492
+ Stack Trace: ${e.stack}
3493
+ \`\`\`
3494
+ `;
3495
+ return Rn`
3496
+ <p>${J(q.ifThisIssueIsReproduciblePlease)}</p>
3497
+ <code class="monospace">${r.trim()}</code>
3498
+ `;
3499
+ })(u.error, u.auditURL)}
3500
+ ` : i}
3501
+ </div>
3502
+ </div>
3503
+ <div class="lighthouse-action-buttons">
3504
+ <devtools-button
3505
+ .variant=${m.TONAL}
3506
+ .jslogContext=${"lighthouse.cancel"}
3507
+ @click=${l}
3508
+ style=${S({ visibility: c ? "visible" : "hidden" })}
3509
+ >${J(q.cancel)}</devtools-button>
3510
+ </div>
3511
+ </div>
3512
+ `, n);
3513
+ }, Vn = class {
3514
+ panel;
3515
+ inspectedURL;
3516
+ textChangedAt;
3517
+ fastFactsQueued;
3518
+ currentPhase;
3519
+ scheduledFastFactTimeout;
3520
+ dialogRoot = null;
3521
+ dialog;
3522
+ statusHeader;
3523
+ statusText;
3524
+ progressBarClass;
3525
+ progressBarValue;
3526
+ cancelButtonVisible;
3527
+ isAIControlled;
3528
+ bugReport;
3529
+ constructor(e) {
3530
+ this.panel = e, this.inspectedURL = "", this.textChangedAt = 0, this.fastFactsQueued = qn.map((e) => e()), this.currentPhase = null, this.scheduledFastFactTimeout = null, this.dialog = new b(), this.dialog.setDimmed(!0), this.dialog.setCloseOnEscape(!1), this.dialog.setOutsideClickCallback((e) => e.consume(!0)), this.statusHeader = "", this.statusText = "", this.progressBarClass = "", this.progressBarValue = 0, this.cancelButtonVisible = !0, this.isAIControlled = !1, this.bugReport = null, this.render();
3531
+ }
3532
+ render() {
3533
+ this.dialogRoot || (this.dialogRoot = Oe(this.dialog.contentElement, { cssFile: In }), this.dialog.setSizeBehavior(x.SET_EXACT_WIDTH_MAX_HEIGHT), this.dialog.setMaxContentSize(new De(500, 400))), Bn({
3534
+ statusHeader: this.statusHeader,
3535
+ statusText: this.statusText,
3536
+ progressBarClass: this.progressBarClass,
3537
+ progressBarValue: this.progressBarValue,
3538
+ progressBarTotal: Gn.length - 1,
3539
+ cancelButtonVisible: this.cancelButtonVisible,
3540
+ onCancel: this.cancel.bind(this),
3541
+ bugReport: this.bugReport || void 0
3542
+ }, {}, this.dialogRoot);
3543
+ }
3544
+ reset() {
3545
+ this.resetProgressBarClasses(), clearTimeout(this.scheduledFastFactTimeout), this.textChangedAt = 0, this.fastFactsQueued = qn.map((e) => e()), this.currentPhase = null, this.scheduledFastFactTimeout = null, this.bugReport = null, this.statusText = "", this.progressBarValue = 0, this.cancelButtonVisible = !0;
3546
+ }
3547
+ show(e) {
3548
+ this.reset(), this.updateStatus(J(q.loading));
3549
+ let t = this.getStatusHeader();
3550
+ this.renderStatusHeader(t), this.dialog.show(e), this.render();
3551
+ }
3552
+ getStatusHeader() {
3553
+ let e = i.fromString(this.inspectedURL)?.host;
3554
+ return this.isAIControlled ? e ? J(q.aiAuditingS, { PH1: e }) : J(q.aiAuditingYourWebPage) : e ? J(q.auditingS, { PH1: e }) : J(q.auditingYourWebPage);
3555
+ }
3556
+ renderStatusHeader(e) {
3557
+ this.statusHeader = `${e}…`, this.render();
3558
+ }
3559
+ hide() {
3560
+ this.dialog.isShowing() && this.dialog.hide();
3561
+ }
3562
+ setAIControlled(e) {
3563
+ this.isAIControlled = e;
3564
+ }
3565
+ setInspectedURL(e = "") {
3566
+ this.inspectedURL = e;
3567
+ }
3568
+ updateStatus(e) {
3569
+ if (!e) return;
3570
+ if (e.startsWith("Cancel")) {
3571
+ this.commitTextChange(J(q.cancelling)), clearTimeout(this.scheduledFastFactTimeout);
3572
+ return;
3573
+ }
3574
+ let t = this.getPhaseForMessage(e);
3575
+ if (!t && !this.currentPhase) this.commitTextChange(J(q.lighthouseIsWarmingUp)), clearTimeout(this.scheduledFastFactTimeout);
3576
+ else if (t) {
3577
+ this.currentPhase = t;
3578
+ let e = this.getMessageForPhase(t);
3579
+ this.commitTextChange(e), this.scheduleFastFactCheck(), this.resetProgressBarClasses(), this.progressBarClass = t.progressBarClass, this.progressBarValue = Gn.indexOf(t), this.render();
3580
+ }
3581
+ }
3582
+ cancel() {
3583
+ this.panel.handleRunCancel();
3584
+ }
3585
+ getMessageForPhase(e) {
3586
+ if (e.message()) return e.message();
3587
+ let t = L().find((e) => e.setting.name === "lighthouse.device-type"), n = L().find((e) => e.setting.name === "lighthouse.throttling"), r = t ? t.setting.get() : "", i = n ? n.setting.get() : "", a = Kn.find((e) => e.deviceType === r && e.throttling === i);
3588
+ return a ? a.message() : J(q.lighthouseIsLoadingYourPage);
3589
+ }
3590
+ getPhaseForMessage(e) {
3591
+ return Gn.find((t) => t.statusMessageRegex.test(e)) || null;
3592
+ }
3593
+ resetProgressBarClasses() {
3594
+ this.progressBarClass = "", this.render();
3595
+ }
3596
+ scheduleFastFactCheck() {
3597
+ !this.currentPhase || this.scheduledFastFactTimeout || (this.scheduledFastFactTimeout = window.setTimeout(() => {
3598
+ this.updateFastFactIfNecessary(), this.scheduledFastFactTimeout = null, this.scheduleFastFactCheck();
3599
+ }, 100));
3600
+ }
3601
+ updateFastFactIfNecessary() {
3602
+ if (performance.now() - this.textChangedAt < 6e3 || !this.fastFactsQueued.length) return;
3603
+ let e = Math.floor(Math.random() * this.fastFactsQueued.length);
3604
+ this.commitTextChange(J(q.fastFactMessageWithPlaceholder, { PH1: this.fastFactsQueued[e] })), this.fastFactsQueued.splice(e, 1);
3605
+ }
3606
+ commitTextChange(e) {
3607
+ this.textChangedAt = performance.now(), this.statusText = e, this.render();
3608
+ }
3609
+ renderBugReport(e) {
3610
+ console.error(e), this.scheduledFastFactTimeout && window.clearTimeout(this.scheduledFastFactTimeout), this.resetProgressBarClasses(), this.progressBarClass = "errored", this.statusText = "", this.bugReport = {
3611
+ error: e,
3612
+ auditURL: this.inspectedURL,
3613
+ knownBugPattern: Wn.some((t) => t.test(e.message))
3614
+ }, this.render();
3615
+ }
3616
+ renderText(e, t) {
3617
+ this.statusHeader = `${e}…`, this.commitTextChange(t);
3618
+ }
3619
+ toggleCancelButton(e) {
3620
+ this.cancelButtonVisible = e, this.render();
3621
+ }
3622
+ }, Hn = 6e3, Un = 3e3, Wn = [
3623
+ /PARSING_PROBLEM/,
3624
+ /DOCUMENT_REQUEST/,
3625
+ /READ_FAILED/,
3626
+ /TRACING_ALREADY_STARTED/,
3627
+ /^You must provide a url to the runner/,
3628
+ /^You probably have multiple tabs open/
3629
+ ], Gn = [
3630
+ {
3631
+ id: "loading",
3632
+ progressBarClass: "loading",
3633
+ message: Y(q.lighthouseIsLoadingThePage),
3634
+ statusMessageRegex: /^(Navigating to)/
3635
+ },
3636
+ {
3637
+ id: "gathering",
3638
+ progressBarClass: "gathering",
3639
+ message: Y(q.lighthouseIsGatheringInformation),
3640
+ statusMessageRegex: /(Gather|artifact)/i
3641
+ },
3642
+ {
3643
+ id: "auditing",
3644
+ progressBarClass: "auditing",
3645
+ message: Y(q.almostThereLighthouseIsNow),
3646
+ statusMessageRegex: /^Audit/
3647
+ }
3648
+ ], Kn = [
3649
+ {
3650
+ deviceType: "mobile",
3651
+ throttling: "on",
3652
+ message: Y(q.lighthouseIsLoadingYourPageWith)
3653
+ },
3654
+ {
3655
+ deviceType: "desktop",
3656
+ throttling: "on",
3657
+ message: Y(q.lighthouseIsLoadingYourPageWithThrottling)
3658
+ },
3659
+ {
3660
+ deviceType: "mobile",
3661
+ throttling: "off",
3662
+ message: Y(q.lighthouseIsLoadingYourPageWithMobile)
3663
+ },
3664
+ {
3665
+ deviceType: "desktop",
3666
+ throttling: "off",
3667
+ message: Y(q.lighthouseIsLoadingThePage)
3668
+ }
3669
+ ], qn = [
3670
+ Y(q.mbTakesAMinimumOfSecondsTo),
3671
+ Y(q.rebuildingPinterestPagesFor),
3672
+ Y(q.byReducingTheResponseSizeOfJson),
3673
+ Y(q.walmartSawAIncreaseInRevenueFor),
3674
+ Y(q.ifASiteTakesSecondToBecome),
3675
+ Y(q.OfGlobalMobileUsersInWereOnGOrG),
3676
+ Y(q.theAverageUserDeviceCostsLess),
3677
+ Y(q.SecondsIsTheAverageTimeAMobile),
3678
+ Y(q.OfMobilePagesTakeNearlySeconds),
3679
+ Y(q.asPageLoadTimeIncreasesFromOne),
3680
+ Y(q.asTheNumberOfElementsOnAPage),
3681
+ Y(q.OfMobilePagesTakeNearlySeconds),
3682
+ Y(q.lighthouseOnlySimulatesMobile)
3683
+ ], Jn = /* @__PURE__ */ e({ TimespanView: () => Qn }), X = {
3684
+ timespanStarting: "Timespan starting…",
3685
+ timespanStarted: "Timespan started",
3686
+ interactWithPage: "Interact with the page.",
3687
+ endTimespan: "End timespan",
3688
+ cancel: "Cancel"
3689
+ }, Yn = p("panels/lighthouse/LighthouseTimespanView.ts", X), Xn = l.bind(void 0, Yn), Zn = (e, t, n) => {
3690
+ y(D`
3691
+ <div class="lighthouse-view vbox">
3692
+ <span
3693
+ ${A((e) => {
3694
+ t.statusHeader = e;
3695
+ })}
3696
+ class="header"
3697
+ ></span>
3698
+ <span
3699
+ ${A((e) => {
3700
+ t.contentContainer = e;
3701
+ })}
3702
+ class="lighthouse-dialog-text"
3703
+ ></span>
3704
+ <div class="lighthouse-action-buttons hbox">
3705
+ ${e.cancelButton} ${e.endButton}
3706
+ </div>
3707
+ </div>
3708
+ `, n);
3709
+ }, Qn = class extends b {
3710
+ panel;
3711
+ statusHeader;
3712
+ contentContainer;
3713
+ endButton;
3714
+ constructor(e) {
3715
+ super(), this.panel = e, this.statusHeader = null, this.contentContainer = null, this.endButton = null, this.setDimmed(!0), this.setCloseOnEscape(!1), this.setOutsideClickCallback((e) => e.consume(!0)), this.render();
3716
+ }
3717
+ show(e) {
3718
+ this.reset(), super.show(e);
3719
+ }
3720
+ reset() {
3721
+ this.statusHeader && this.contentContainer && this.endButton && (this.statusHeader.textContent = Xn(X.timespanStarting), this.contentContainer.textContent = "", this.endButton.disabled = !0);
3722
+ }
3723
+ ready() {
3724
+ this.statusHeader && this.contentContainer && this.endButton && (this.statusHeader.textContent = Xn(X.timespanStarted), this.contentContainer.textContent = Xn(X.interactWithPage), this.endButton.disabled = !1, this.endButton.focus());
3725
+ }
3726
+ render() {
3727
+ let e = Oe(this.contentElement, { cssFile: In });
3728
+ this.endButton = ce(Xn(X.endTimespan), this.endTimespan.bind(this), {
3729
+ variant: m.PRIMARY,
3730
+ jslogContext: "lighthouse.end-time-span",
3731
+ className: "end-timespan"
3732
+ });
3733
+ let t = ce(Xn(X.cancel), this.cancel.bind(this), {
3734
+ className: "cancel",
3735
+ jslogContext: "lighthouse.cancel"
3736
+ }), n = {
3737
+ statusHeader: void 0,
3738
+ contentContainer: void 0
3739
+ };
3740
+ Zn({
3741
+ cancelButton: t,
3742
+ endButton: this.endButton
3743
+ }, n, e), this.statusHeader = n.statusHeader ?? null, this.contentContainer = n.contentContainer ?? null, this.setSizeBehavior(x.SET_EXACT_WIDTH_MAX_HEIGHT), this.setMaxContentSize(new De(500, 400)), this.reset();
3744
+ }
3745
+ async endTimespan() {
3746
+ await this.panel.handleTimespanEnd();
3747
+ }
3748
+ async cancel() {
3749
+ await this.panel.handleRunCancel();
3750
+ }
3751
+ }, $n = /* @__PURE__ */ e({
3752
+ ActiveLighthouseReport: () => $,
3753
+ LighthousePanel: () => nr,
3754
+ ReportRevealer: () => rr
3755
+ }), Z = {
3756
+ dropLighthouseJsonHere: "Drop `Lighthouse` JSON here",
3757
+ performAnAudit: "Perform an audit…",
3758
+ clearAll: "Clear all",
3759
+ lighthouseSettings: "`Lighthouse` settings",
3760
+ printing: "Printing",
3761
+ thePrintPopupWindowIsOpenPlease: "The print popup window is open. Please close it to continue.",
3762
+ cancelling: "Cancelling"
3763
+ }, er = p("panels/lighthouse/LighthousePanel.ts", Z), Q = l.bind(void 0, er), tr, $ = class {
3764
+ report;
3765
+ constructor(e) {
3766
+ this.report = e;
3767
+ }
3768
+ }, nr = class e extends k {
3769
+ controller;
3770
+ startView;
3771
+ statusView;
3772
+ timespanView;
3773
+ warningText;
3774
+ unauditableExplanation;
3775
+ cachedRenderedReports;
3776
+ auditResultsElement;
3777
+ clearButton;
3778
+ newButton;
3779
+ reportSelector;
3780
+ settingsPane;
3781
+ rightToolbar;
3782
+ showSettingsPaneSetting;
3783
+ constructor(e) {
3784
+ super("lighthouse"), this.registerRequiredCSS(qe), this.controller = e, this.startView = new Fn(this.controller, this), this.timespanView = new Qn(this), this.statusView = new Vn(this), this.warningText = null, this.unauditableExplanation = null, this.cachedRenderedReports = /* @__PURE__ */ new Map(), new _(this.contentElement, [ne.File], Q(Z.dropLighthouseJsonHere), this.handleDrop.bind(this)), this.controller.addEventListener(R.PageAuditabilityChanged, this.refreshStartAuditUI.bind(this)), this.controller.addEventListener(R.PageWarningsChanged, this.refreshWarningsUI.bind(this)), this.controller.addEventListener(R.AuditProgressChanged, this.refreshStatusUI.bind(this)), this.renderToolbar(), this.auditResultsElement = this.contentElement.createChild("div", "lighthouse-results-container"), this.auditResultsElement.addEventListener("keydown", this.onKeyDown.bind(this)), this.renderStartView(), this.controller.recomputePageAuditability(), de.instance().setFlavor($, null);
3785
+ }
3786
+ static instance(t) {
3787
+ if (!tr || t?.forceNew) {
3788
+ let n = t?.protocolService ?? new Ze();
3789
+ tr = new e(t?.controller ?? new Ue(n));
3790
+ }
3791
+ return tr;
3792
+ }
3793
+ static getEvents() {
3794
+ return R;
3795
+ }
3796
+ async handleTimespanStart() {
3797
+ try {
3798
+ this.timespanView.show(this.contentElement), await this.controller.startLighthouse(), this.timespanView.ready();
3799
+ } catch (e) {
3800
+ this.handleError(e);
3801
+ }
3802
+ }
3803
+ async handleTimespanEnd() {
3804
+ try {
3805
+ this.timespanView.hide(), this.renderStatusView();
3806
+ let { lhr: e, artifacts: t } = await this.controller.collectLighthouseResults();
3807
+ this.buildReportUI(e, t);
3808
+ } catch (e) {
3809
+ this.handleError(e);
3810
+ }
3811
+ }
3812
+ async handleCompleteRun(e) {
3813
+ try {
3814
+ await this.controller.startLighthouse(e), this.renderStatusView();
3815
+ let { lhr: t, artifacts: n } = await this.controller.collectLighthouseResults();
3816
+ return this.buildReportUI(t, n), { report: t };
3817
+ } catch (e) {
3818
+ return this.handleError(e), de.instance().setFlavor($, null), { report: null };
3819
+ }
3820
+ }
3821
+ async handleRunCancel() {
3822
+ this.statusView.updateStatus(Q(Z.cancelling)), this.timespanView.hide(), await this.controller.cancelLighthouse(), this.renderStartView();
3823
+ }
3824
+ handleError(e) {
3825
+ e instanceof Xe || e instanceof Error && this.statusView.renderBugReport(e);
3826
+ }
3827
+ refreshWarningsUI(e) {
3828
+ this.controller.getCurrentRun() || (this.warningText = e.data.warning, this.startView.setWarningText(e.data.warning));
3829
+ }
3830
+ refreshStartAuditUI(e) {
3831
+ this.controller.getCurrentRun() || (this.startView.refresh(), this.unauditableExplanation = e.data.helpText, this.startView.setUnauditableExplanation(e.data.helpText), this.startView.setStartButtonEnabled(!e.data.helpText));
3832
+ }
3833
+ refreshStatusUI(e) {
3834
+ this.statusView.updateStatus(e.data.message);
3835
+ }
3836
+ refreshToolbarUI() {
3837
+ this.clearButton.setEnabled(this.reportSelector.hasItems());
3838
+ }
3839
+ clearAll() {
3840
+ this.reportSelector.clearAll(), this.renderStartView(), this.refreshToolbarUI();
3841
+ }
3842
+ renderToolbar() {
3843
+ let e = this.element.createChild("div", "lighthouse-toolbar-container");
3844
+ e.setAttribute("jslog", `${ye()}`), e.role = "toolbar";
3845
+ let t = e.createChild("devtools-toolbar");
3846
+ t.role = "presentation", this.newButton = new oe(Q(Z.performAnAudit), "plus"), t.appendToolbarItem(this.newButton), this.newButton.addEventListener(oe.Events.CLICK, this.renderStartView.bind(this)), t.appendSeparator(), this.reportSelector = new En(() => this.renderStartView()), t.appendToolbarItem(this.reportSelector.comboBox()), this.clearButton = new oe(Q(Z.clearAll), "clear"), t.appendToolbarItem(this.clearButton), this.clearButton.addEventListener(oe.Events.CLICK, this.clearAll.bind(this)), this.settingsPane = new h(), this.settingsPane.show(this.contentElement), this.settingsPane.element.classList.add("lighthouse-settings-pane"), this.settingsPane.element.appendChild(this.startView.settingsToolbar()), this.showSettingsPaneSetting = u.instance().createSetting("lighthouse-show-settings-toolbar", !1, d.SYNCED), this.rightToolbar = e.createChild("devtools-toolbar"), this.rightToolbar.role = "presentation", this.rightToolbar.appendSeparator(), this.rightToolbar.appendToolbarItem(new ge(this.showSettingsPaneSetting, "gear", Q(Z.lighthouseSettings), "gear-filled")), this.showSettingsPaneSetting.addChangeListener(this.updateSettingsPaneVisibility.bind(this)), this.updateSettingsPaneVisibility(), this.refreshToolbarUI();
3847
+ }
3848
+ updateSettingsPaneVisibility() {
3849
+ this.settingsPane.element.classList.toggle("hidden", !this.showSettingsPaneSetting.get());
3850
+ }
3851
+ toggleSettingsDisplay(e) {
3852
+ this.rightToolbar.classList.toggle("hidden", !e), this.settingsPane.element.classList.toggle("hidden", !e), this.updateSettingsPaneVisibility();
3853
+ }
3854
+ renderStartView() {
3855
+ this.auditResultsElement.removeChildren(), this.statusView.hide(), this.reportSelector.selectNewReport(), de.instance().setFlavor($, null), this.contentElement.classList.toggle("in-progress", !1), this.startView.show(this.contentElement), this.toggleSettingsDisplay(!0), this.startView.setUnauditableExplanation(this.unauditableExplanation), this.startView.setStartButtonEnabled(!this.unauditableExplanation), this.unauditableExplanation || this.startView.focusStartButton(), this.startView.setWarningText(this.warningText), this.newButton.setEnabled(!1), this.refreshToolbarUI(), this.setDefaultFocusedChild(this.startView);
3856
+ }
3857
+ renderStatusView() {
3858
+ let e = this.controller.getCurrentRun();
3859
+ this.contentElement.classList.toggle("in-progress", !0), this.statusView.setInspectedURL(e?.inspectedURL), this.statusView.setAIControlled(!!e?.isAIControlled), this.statusView.show(this.contentElement);
3860
+ }
3861
+ beforePrint() {
3862
+ this.statusView.show(this.contentElement), this.statusView.toggleCancelButton(!1), this.statusView.renderText(Q(Z.printing), Q(Z.thePrintPopupWindowIsOpenPlease));
3863
+ }
3864
+ afterPrint() {
3865
+ this.statusView.hide(), this.statusView.toggleCancelButton(!0);
3866
+ }
3867
+ renderReport(e, t) {
3868
+ this.toggleSettingsDisplay(!1), this.contentElement.classList.toggle("in-progress", !1), this.startView.hideWidget(), this.statusView.hide(), this.auditResultsElement.removeChildren(), this.newButton.setEnabled(!0), this.refreshToolbarUI(), de.instance().setFlavor($, new $(e));
3869
+ let n = this.cachedRenderedReports.get(e);
3870
+ if (n) {
3871
+ this.auditResultsElement.appendChild(n);
3872
+ return;
3873
+ }
3874
+ let r = xn.renderLighthouseReport(e, t, {
3875
+ beforePrint: this.beforePrint.bind(this),
3876
+ afterPrint: this.afterPrint.bind(this)
3877
+ });
3878
+ this.cachedRenderedReports.set(e, r);
3879
+ }
3880
+ buildReportUI(e, t) {
3881
+ if (e === null) return;
3882
+ let n = new Dn(e, () => this.renderReport(e, t), this.renderStartView.bind(this));
3883
+ this.reportSelector.prepend(n), this.refreshToolbarUI(), this.renderReport(e), this.auditResultsElement.querySelector(".lh-topbar__url")?.focus();
3884
+ }
3885
+ handleDrop(e) {
3886
+ let t = e.items;
3887
+ if (t.length && t[0].kind === "file") {
3888
+ let e = t[0].getAsFile();
3889
+ if (!e) return;
3890
+ let n = new FileReader();
3891
+ n.onload = () => this.loadedFromFile(n.result), n.readAsText(e);
3892
+ }
3893
+ }
3894
+ loadedFromFile(e) {
3895
+ let t = JSON.parse(e);
3896
+ t.lighthouseVersion && this.buildReportUI(t);
3897
+ }
3898
+ elementsToRestoreScrollPositionsFor() {
3899
+ let e = super.elementsToRestoreScrollPositionsFor(), t = this.auditResultsElement.querySelector(".lh-container");
3900
+ return t && e.push(t), e;
3901
+ }
3902
+ onKeyDown(e) {
3903
+ e.key === "Escape" && this.auditResultsElement.querySelector(".lh-tools__button.lh-active") && (e.handled = !0);
3904
+ }
3905
+ selectReport(e) {
3906
+ this.reportSelector.selectReport(e);
3907
+ }
3908
+ static async executeLighthouseRecording(t) {
3909
+ let n = e.instance();
3910
+ await me.instance().showView("lighthouse");
3911
+ let { report: r } = await n.handleCompleteRun(t);
3912
+ return r;
3913
+ }
3914
+ }, rr = class {
3915
+ async reveal(e) {
3916
+ await me.instance().showView("lighthouse"), nr.instance().selectReport(e.report);
3917
+ }
3918
+ };
3919
+ //#endregion
3920
+ export { Ln as a, Sn as c, Je as d, Be as f, Jn as i, xn as l, nr as n, Mn as o, $n as r, kn as s, $ as t, yn as u };