lighthouse 8.6.0 → 9.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (209) hide show
  1. package/dist/report/bundle.esm.js +5994 -0
  2. package/dist/report/flow.js +30 -13
  3. package/dist/report/standalone.js +41 -35
  4. package/flow-report/.eslintrc.cjs +2 -0
  5. package/flow-report/assets/standalone-flow-template.html +3 -2
  6. package/flow-report/assets/styles.css +108 -31
  7. package/flow-report/src/app.tsx +18 -18
  8. package/flow-report/src/common.tsx +28 -15
  9. package/flow-report/src/header.tsx +12 -13
  10. package/flow-report/src/help-dialog.tsx +3 -4
  11. package/flow-report/src/i18n/i18n.tsx +57 -16
  12. package/flow-report/src/i18n/ui-strings.js +50 -0
  13. package/flow-report/src/icons.tsx +36 -8
  14. package/flow-report/src/sidebar/flow.tsx +3 -3
  15. package/flow-report/src/sidebar/sidebar.tsx +35 -14
  16. package/flow-report/src/summary/category.tsx +97 -24
  17. package/flow-report/src/summary/summary.tsx +21 -14
  18. package/flow-report/src/topbar.tsx +9 -5
  19. package/flow-report/src/util.ts +33 -26
  20. package/flow-report/src/wrappers/category-score.tsx +0 -3
  21. package/flow-report/src/wrappers/markdown.tsx +27 -0
  22. package/flow-report/src/wrappers/report-renderer.tsx +10 -3
  23. package/flow-report/src/wrappers/report.tsx +27 -6
  24. package/flow-report/standalone-flow.tsx +4 -3
  25. package/flow-report/test/common-test.tsx +32 -17
  26. package/flow-report/test/flow-report-pptr-test.ts +46 -0
  27. package/flow-report/test/header-test.tsx +6 -6
  28. package/flow-report/test/setup/env-setup.ts +1 -1
  29. package/flow-report/test/sidebar/sidebar-test.tsx +43 -1
  30. package/flow-report/test/summary/category-test.tsx +120 -24
  31. package/flow-report/test/summary/summary-test.tsx +1 -1
  32. package/flow-report/test/topbar-test.tsx +1 -0
  33. package/flow-report/test/util-test.tsx +32 -11
  34. package/flow-report/test/wrappers/category-score-test.tsx +87 -0
  35. package/flow-report/test/wrappers/markdown-test.tsx +29 -0
  36. package/flow-report/tsconfig.json +1 -0
  37. package/jest.config.js +4 -2
  38. package/lighthouse-cli/.eslintrc.cjs +2 -0
  39. package/lighthouse-cli/cli-flags.js +1 -1
  40. package/lighthouse-cli/run.js +1 -1
  41. package/lighthouse-cli/test/smokehouse/frontends/smokehouse-bin.js +0 -0
  42. package/lighthouse-cli/test/smokehouse/lighthouse-runners/bundle.js +4 -2
  43. package/lighthouse-cli/test/smokehouse/lighthouse-runners/cli.js +1 -1
  44. package/lighthouse-cli/test/smokehouse/smokehouse.js +1 -1
  45. package/lighthouse-core/audits/accessibility/axe-audit.js +7 -1
  46. package/lighthouse-core/audits/audit.js +1 -1
  47. package/lighthouse-core/audits/byte-efficiency/byte-efficiency-audit.js +2 -0
  48. package/lighthouse-core/audits/byte-efficiency/modern-image-formats.js +4 -2
  49. package/lighthouse-core/audits/byte-efficiency/offscreen-images.js +11 -10
  50. package/lighthouse-core/audits/byte-efficiency/uses-optimized-images.js +5 -3
  51. package/lighthouse-core/audits/byte-efficiency/uses-responsive-images-snapshot.js +2 -1
  52. package/lighthouse-core/audits/byte-efficiency/uses-responsive-images.js +2 -1
  53. package/lighthouse-core/audits/deprecations.js +33 -11
  54. package/lighthouse-core/audits/dobetterweb/uses-http2.js +27 -11
  55. package/lighthouse-core/audits/errors-in-console.js +0 -2
  56. package/lighthouse-core/audits/image-aspect-ratio.js +5 -5
  57. package/lighthouse-core/audits/image-size-responsive.js +6 -6
  58. package/lighthouse-core/audits/installable-manifest.js +5 -3
  59. package/lighthouse-core/audits/preload-lcp-image.js +7 -5
  60. package/lighthouse-core/audits/script-treemap-data.js +1 -1
  61. package/lighthouse-core/audits/unsized-images.js +2 -3
  62. package/lighthouse-core/computed/image-records.js +4 -3
  63. package/lighthouse-core/computed/metrics/lantern-total-blocking-time.js +3 -4
  64. package/lighthouse-core/computed/metrics/tbt-utils.js +57 -0
  65. package/lighthouse-core/computed/metrics/total-blocking-time.js +3 -53
  66. package/lighthouse-core/computed/resource-summary.js +1 -1
  67. package/lighthouse-core/config/config-helpers.js +21 -10
  68. package/lighthouse-core/config/constants.js +3 -4
  69. package/lighthouse-core/config/default-config.js +61 -71
  70. package/lighthouse-core/fraggle-rock/config/config.js +1 -1
  71. package/lighthouse-core/fraggle-rock/config/default-config.js +4 -5
  72. package/lighthouse-core/fraggle-rock/gather/base-gatherer.js +6 -1
  73. package/lighthouse-core/fraggle-rock/gather/session.js +3 -4
  74. package/lighthouse-core/gather/connections/cri.js +1 -1
  75. package/lighthouse-core/gather/driver/storage.js +0 -1
  76. package/lighthouse-core/gather/driver.js +3 -7
  77. package/lighthouse-core/gather/fetcher.js +4 -7
  78. package/lighthouse-core/gather/gather-runner.js +29 -6
  79. package/lighthouse-core/gather/gatherers/accessibility.js +27 -0
  80. package/lighthouse-core/gather/gatherers/dobetterweb/response-compression.js +1 -0
  81. package/lighthouse-core/gather/gatherers/image-elements.js +0 -3
  82. package/lighthouse-core/gather/gatherers/inspector-issues.js +5 -0
  83. package/lighthouse-core/lib/asset-saver.js +7 -4
  84. package/lighthouse-core/lib/emulation.js +45 -1
  85. package/lighthouse-core/lib/i18n/i18n.js +19 -8
  86. package/lighthouse-core/lib/lh-env.js +2 -0
  87. package/lighthouse-core/lib/proto-preprocessor.js +14 -2
  88. package/lighthouse-core/lib/tappable-rects.js +8 -15
  89. package/lighthouse-core/lib/url-shim.js +1 -1
  90. package/lighthouse-core/runner.js +1 -1
  91. package/lighthouse-core/util-commonjs.js +65 -46
  92. package/package.json +27 -17
  93. package/readme.md +3 -3
  94. package/report/.eslintrc.cjs +2 -0
  95. package/report/README.md +1 -1
  96. package/report/assets/standalone-template.html +2 -3
  97. package/report/assets/styles.css +360 -254
  98. package/report/assets/templates.html +21 -76
  99. package/report/clients/bundle.js +1 -0
  100. package/report/clients/standalone.js +6 -15
  101. package/report/generator/README.md +1 -1
  102. package/report/renderer/api.js +32 -0
  103. package/report/renderer/category-renderer.js +59 -19
  104. package/report/renderer/components.js +59 -110
  105. package/report/renderer/crc-details-renderer.js +15 -12
  106. package/report/renderer/dom.js +16 -1
  107. package/report/renderer/drop-down-menu.js +2 -2
  108. package/report/renderer/element-screenshot-renderer.js +8 -8
  109. package/report/renderer/features-util.js +1 -1
  110. package/report/renderer/open-tab.js +9 -3
  111. package/report/renderer/performance-category-renderer.js +55 -34
  112. package/report/renderer/pwa-category-renderer.js +0 -10
  113. package/report/renderer/report-renderer.js +91 -44
  114. package/report/renderer/report-ui-features.js +36 -33
  115. package/report/renderer/swap-locale-feature.js +3 -3
  116. package/report/renderer/topbar-features.js +53 -48
  117. package/report/renderer/util.js +66 -46
  118. package/report/test/clients/bundle-test.js +70 -0
  119. package/report/test/renderer/category-renderer-test.js +48 -3
  120. package/report/test/renderer/i18n-test.js +0 -7
  121. package/report/test/renderer/performance-category-renderer-test.js +51 -14
  122. package/report/test/renderer/pwa-category-renderer-test.js +6 -6
  123. package/report/test/renderer/report-renderer-axe-test.js +10 -12
  124. package/report/test/renderer/report-renderer-test.js +23 -22
  125. package/report/test/renderer/report-ui-features-test.js +20 -10
  126. package/report/test/renderer/text-encoding-test.js +1 -1
  127. package/report/test/renderer/util-test.js +35 -31
  128. package/report/test-assets/faux-psi-template.html +3 -11
  129. package/report/test-assets/faux-psi.js +26 -22
  130. package/report/types/html-renderer.d.ts +2 -0
  131. package/report/types/report-renderer.d.ts +23 -0
  132. package/shared/localization/format.js +64 -30
  133. package/shared/localization/locales/ar-XB.json +72 -75
  134. package/shared/localization/locales/ar.json +72 -75
  135. package/shared/localization/locales/bg.json +72 -75
  136. package/shared/localization/locales/ca.json +72 -75
  137. package/shared/localization/locales/cs.json +89 -92
  138. package/shared/localization/locales/da.json +72 -75
  139. package/shared/localization/locales/de.json +89 -92
  140. package/shared/localization/locales/el.json +72 -75
  141. package/shared/localization/locales/en-GB.json +72 -75
  142. package/shared/localization/locales/en-US.json +75 -75
  143. package/shared/localization/locales/en-XA.json +72 -75
  144. package/shared/localization/locales/en-XL.json +75 -75
  145. package/shared/localization/locales/es-419.json +90 -93
  146. package/shared/localization/locales/es.json +90 -93
  147. package/shared/localization/locales/fi.json +72 -75
  148. package/shared/localization/locales/fil.json +72 -75
  149. package/shared/localization/locales/fr.json +89 -92
  150. package/shared/localization/locales/he.json +73 -76
  151. package/shared/localization/locales/hi.json +72 -75
  152. package/shared/localization/locales/hr.json +72 -75
  153. package/shared/localization/locales/hu.json +89 -92
  154. package/shared/localization/locales/id.json +89 -92
  155. package/shared/localization/locales/it.json +89 -92
  156. package/shared/localization/locales/ja.json +89 -92
  157. package/shared/localization/locales/ko.json +89 -92
  158. package/shared/localization/locales/lt.json +89 -92
  159. package/shared/localization/locales/lv.json +95 -98
  160. package/shared/localization/locales/nl.json +89 -92
  161. package/shared/localization/locales/no.json +72 -75
  162. package/shared/localization/locales/pl.json +72 -75
  163. package/shared/localization/locales/pt-PT.json +72 -75
  164. package/shared/localization/locales/pt.json +89 -92
  165. package/shared/localization/locales/ro.json +90 -93
  166. package/shared/localization/locales/ru.json +89 -92
  167. package/shared/localization/locales/sk.json +89 -92
  168. package/shared/localization/locales/sl.json +89 -92
  169. package/shared/localization/locales/sr-Latn.json +89 -92
  170. package/shared/localization/locales/sr.json +89 -92
  171. package/shared/localization/locales/sv.json +72 -75
  172. package/shared/localization/locales/ta.json +89 -92
  173. package/shared/localization/locales/te.json +89 -92
  174. package/shared/localization/locales/th.json +89 -92
  175. package/shared/localization/locales/tr.json +89 -92
  176. package/shared/localization/locales/uk.json +92 -95
  177. package/shared/localization/locales/vi.json +89 -92
  178. package/shared/localization/locales/zh-HK.json +89 -92
  179. package/shared/localization/locales/zh-TW.json +89 -92
  180. package/shared/localization/locales/zh.json +89 -92
  181. package/shared/localization/locales.js +6 -0
  182. package/shared/test/localization/format-test.js +45 -9
  183. package/shared/test/localization/swap-locale-test.js +0 -12
  184. package/third-party/chromium-synchronization/inspector-issueAdded-types-test.js +19 -11
  185. package/third-party/chromium-synchronization/installability-errors-test.js +2 -0
  186. package/third-party/download-content-shell/download-content-shell.js +2 -2
  187. package/third-party/download-content-shell/utils.js +0 -24
  188. package/tsconfig-all.json +2 -2
  189. package/tsconfig.json +0 -1
  190. package/types/artifacts.d.ts +7 -7
  191. package/types/enquirer.d.ts +3 -1
  192. package/types/lhr/audit-details.d.ts +6 -5
  193. package/types/lhr/flow.d.ts +3 -2
  194. package/types/lhr/lhr.d.ts +1 -1
  195. package/types/node.d.ts +5 -5
  196. package/types/rollup-plugin-postprocess.d.ts +10 -0
  197. package/changelog.md +0 -5490
  198. package/lighthouse-core/audits/dobetterweb/appcache-manifest.js +0 -67
  199. package/lighthouse-core/audits/dobetterweb/external-anchors-use-rel-noopener.js +0 -96
  200. package/lighthouse-core/audits/redirects-http.js +0 -59
  201. package/lighthouse-core/gather/gatherers/dobetterweb/appcache.js +0 -34
  202. package/lighthouse-core/gather/gatherers/http-redirect.js +0 -46
  203. package/lighthouse-core/lib/i18n/locales/en-US.ctc.json +0 -6699
  204. package/lighthouse-core/lib/i18n/locales/en-XL.ctc.json +0 -6672
  205. package/lighthouse-core/scripts/package.json +0 -4
  206. package/report/clients/psi.js +0 -158
  207. package/report/test/clients/psi-test.js +0 -143
  208. package/shared/localization/locales/en-US.ctc.json +0 -6877
  209. package/shared/localization/locales/en-XL.ctc.json +0 -6852
@@ -38,6 +38,7 @@
38
38
  --color-blue-200: #90CAF9;
39
39
  --color-blue-900: #0D47A1;
40
40
  --color-blue-A700: #2962FF;
41
+ --color-blue-primary: #06f;
41
42
  --color-cyan-500: #00BCD4;
42
43
  --color-gray-100: #F5F5F5;
43
44
  --color-gray-300: #CFCFCF;
@@ -50,14 +51,14 @@
50
51
  --color-gray-800: #424242;
51
52
  --color-gray-900: #212121;
52
53
  --color-gray: #000000;
53
- --color-green-700: #018642;
54
- --color-green: #0CCE6B;
54
+ --color-green-700: #080;
55
+ --color-green: #0c6;
55
56
  --color-lime-400: #D3E156;
56
57
  --color-orange-50: #FFF3E0;
57
- --color-orange-700: #D04900;
58
- --color-orange: #FFA400;
59
- --color-red-700: #EB0F00;
60
- --color-red: #FF4E42;
58
+ --color-orange-700: #C33300;
59
+ --color-orange: #fa3;
60
+ --color-red-700: #c00;
61
+ --color-red: #f33;
61
62
  --color-teal-600: #00897B;
62
63
  --color-white: #FFFFFF;
63
64
 
@@ -75,82 +76,81 @@
75
76
  /* Component variables */
76
77
  --audit-description-padding-left: calc(var(--score-icon-size) + var(--score-icon-margin-left) + var(--score-icon-margin-right));
77
78
  --audit-explanation-line-height: 16px;
78
- --audit-group-margin-bottom: 40px;
79
+ --audit-group-margin-bottom: calc(var(--default-padding) * 6);
79
80
  --audit-group-padding-vertical: 8px;
80
81
  --audit-margin-horizontal: 5px;
81
82
  --audit-padding-vertical: 8px;
82
- --category-header-font-size: 20px;
83
- --category-padding: 40px;
83
+ --category-padding: calc(var(--default-padding) * 6) calc(var(--default-padding) * 4) calc(var(--default-padding) * 4);
84
84
  --chevron-line-stroke: var(--color-gray-600);
85
85
  --chevron-size: 12px;
86
- --default-padding: 12px;
86
+ --default-padding: 8px;
87
87
  --env-item-background-color: var(--color-gray-100);
88
88
  --env-item-font-size: 28px;
89
89
  --env-item-line-height: 36px;
90
90
  --env-item-padding: 10px 0px;
91
91
  --env-name-min-width: 220px;
92
92
  --footer-padding-vertical: 16px;
93
- --gauge-circle-size-big: 112px;
94
- --gauge-circle-size: 80px;
95
- --gauge-circle-size-sm: 36px;
96
- --gauge-label-font-size-big: 28px;
97
- --gauge-label-font-size: 20px;
98
- --gauge-label-line-height-big: 36px;
99
- --gauge-label-line-height: 26px;
93
+ --gauge-circle-size-big: 96px;
94
+ --gauge-circle-size: 48px;
95
+ --gauge-circle-size-sm: 32px;
96
+ --gauge-label-font-size-big: 18px;
97
+ --gauge-label-font-size: var(--report-font-size-secondary);
98
+ --gauge-label-line-height-big: 24px;
99
+ --gauge-label-line-height: var(--report-line-height-secondary);
100
100
  --gauge-percentage-font-size-big: 38px;
101
- --gauge-percentage-font-size: 28px;
102
- --gauge-wrapper-width: 148px;
101
+ --gauge-percentage-font-size: var(--report-font-size-secondary);
102
+ --gauge-wrapper-width: 120px;
103
103
  --header-line-height: 24px;
104
104
  --highlighter-background-color: var(--report-text-color);
105
105
  --icon-square-size: calc(var(--score-icon-size) * 0.88);
106
106
  --image-preview-size: 48px;
107
+ --link-color: var(--color-blue-primary);
107
108
  --locale-selector-background-color: var(--color-white);
108
109
  --metric-toggle-lines-fill: #7F7F7F;
109
- --metric-value-font-size: 28px;
110
+ --metric-value-font-size: calc(var(--report-font-size) * 1.8);
110
111
  --metrics-toggle-background-color: var(--color-gray-200);
111
112
  --plugin-badge-background-color: var(--color-white);
112
113
  --plugin-badge-size-big: calc(var(--gauge-circle-size-big) / 2.7);
113
114
  --plugin-badge-size: calc(var(--gauge-circle-size) / 2.7);
114
115
  --plugin-icon-size: 65%;
115
- --pwa-icon-margin: 0 6px 0 -2px;
116
+ --pwa-icon-margin: 0 var(--default-padding);
116
117
  --pwa-icon-size: var(--topbar-logo-size);
117
118
  --report-background-color: #fff;
118
119
  --report-border-color-secondary: #ebebeb;
119
120
  --report-font-family-monospace: 'Roboto Mono', 'Menlo', 'dejavu sans mono', 'Consolas', 'Lucida Console', monospace;
120
121
  --report-font-family: Roboto, Helvetica, Arial, sans-serif;
121
- --report-font-size: 16px;
122
+ --report-font-size: 14px;
123
+ --report-font-size-secondary: 12px;
122
124
  --report-icon-size: var(--score-icon-background-size);
123
125
  --report-line-height: 24px;
124
- --report-min-width: 400px;
126
+ --report-line-height-secondary: 20px;
127
+ --report-min-width: 360px;
125
128
  --report-monospace-font-size: calc(var(--report-font-size) * 0.85);
126
129
  --report-text-color-secondary: var(--color-gray-800);
127
130
  --report-text-color: var(--color-gray-900);
128
- --report-width: calc(60 * var(--report-font-size));
131
+ --report-content-width: calc(60 * var(--report-font-size)); /* defaults to 840px */
129
132
  --score-container-padding: 8px;
130
133
  --score-icon-background-size: 24px;
131
- --score-icon-margin-left: 4px;
132
- --score-icon-margin-right: 12px;
134
+ --score-icon-margin-left: 6px;
135
+ --score-icon-margin-right: 14px;
133
136
  --score-icon-margin: 0 var(--score-icon-margin-right) 0 var(--score-icon-margin-left);
134
137
  --score-icon-size: 12px;
135
138
  --score-icon-size-big: 16px;
136
- --scores-container-padding: 20px 0 20px 0;
137
- --scorescale-height: 6px;
138
- --scorescale-width: 18px;
139
139
  --screenshot-overlay-background: rgba(0, 0, 0, 0.3);
140
- --section-padding-vertical: 12px;
140
+ --section-padding-vertical: calc(var(--default-padding) * 6);
141
141
  --snippet-background-color: var(--color-gray-50);
142
142
  --snippet-color: #0938C2;
143
143
  --sparkline-height: 5px;
144
144
  --stackpack-padding-horizontal: 10px;
145
145
  --sticky-header-background-color: var(--report-background-color);
146
- --table-higlight-background-color: hsla(0, 0%, 75%, 0.1);
146
+ --table-higlight-background-color: hsla(210, 17%, 77%, 0.1);
147
147
  --tools-icon-color: var(--color-gray-600);
148
- --topbar-background-color: var(--color-gray-100);
148
+ --topbar-background-color: var(--color-white);
149
149
  --topbar-height: 32px;
150
150
  --topbar-logo-size: 24px;
151
151
  --topbar-padding: 0 8px;
152
- --toplevel-warning-background-color: var(--color-orange-50);
153
- --toplevel-warning-message-text-color: #BD4200;
152
+ --toplevel-warning-background-color: hsla(30, 100%, 75%, 10%);
153
+ --toplevel-warning-message-text-color: var(--color-average-secondary);
154
154
  --toplevel-warning-padding: 18px;
155
155
  --toplevel-warning-text-color: var(--report-text-color);
156
156
 
@@ -175,7 +175,7 @@
175
175
  }
176
176
 
177
177
  @media not print {
178
- .lh-vars.lh-dark {
178
+ .lh-dark {
179
179
  /* Pallete */
180
180
  --color-gray-200: var(--color-gray-800);
181
181
  --color-gray-300: #616161;
@@ -193,7 +193,8 @@
193
193
  --color-informative: var(--color-blue-200);
194
194
 
195
195
  /* Component variables */
196
- --env-item-background-color: var(--color-gray);
196
+ --env-item-background-color: #393535;
197
+ --link-color: var(--color-blue-200);
197
198
  --locale-selector-background-color: var(--color-gray-200);
198
199
  --plugin-badge-background-color: var(--color-gray-800);
199
200
  --report-background-color: var(--color-gray-900);
@@ -202,9 +203,9 @@
202
203
  --report-text-color: var(--color-gray-100);
203
204
  --snippet-color: var(--color-cyan-500);
204
205
  --topbar-background-color: var(--color-gray);
205
- --toplevel-warning-background-color: #544B40;
206
- --toplevel-warning-message-text-color: var(--color-orange-700);
207
- --toplevel-warning-text-color: var(--color-gray-100);
206
+ --toplevel-warning-background-color: hsl(33deg 14% 18%);
207
+ --toplevel-warning-message-text-color: var(--color-orange-700);
208
+ --toplevel-warning-text-color: var(--color-gray-100);
208
209
 
209
210
  /* SVGs */
210
211
  --plugin-icon-url: var(--plugin-icon-url-dark);
@@ -216,7 +217,7 @@
216
217
  @media only screen and (max-width: 480px) {
217
218
  .lh-vars {
218
219
  --audit-group-margin-bottom: 20px;
219
- --category-padding: 24px;
220
+ --category-padding: 12px;
220
221
  --env-name-min-width: 120px;
221
222
  --gauge-circle-size-big: 96px;
222
223
  --gauge-circle-size: 72px;
@@ -250,7 +251,6 @@
250
251
  --audit-group-margin-bottom: 20px;
251
252
  --audit-group-padding-vertical: 12px;
252
253
  --audit-padding-vertical: 4px;
253
- --category-header-font-size: 16px;
254
254
  --category-padding: 12px;
255
255
  --default-padding: 12px;
256
256
  --env-name-min-width: 120px;
@@ -306,7 +306,6 @@
306
306
 
307
307
  .lh-root *, .lh-root *::before, .lh-root *::after {
308
308
  box-sizing: border-box;
309
- -webkit-font-smoothing: antialiased;
310
309
  }
311
310
 
312
311
  .lh-root {
@@ -369,7 +368,7 @@
369
368
  .lh-warnings a,
370
369
  .lh-footer a,
371
370
  .lh-table-column--link a {
372
- color: var(--color-informative);
371
+ color: var(--link-color);
373
372
  }
374
373
 
375
374
  .lh-audit__description, .lh-audit__stackpack {
@@ -381,7 +380,6 @@
381
380
  }
382
381
 
383
382
  .lh-details {
384
- font-size: var(--report-font-size);
385
383
  margin-top: var(--default-padding);
386
384
  margin-bottom: var(--default-padding);
387
385
  margin-left: var(--audit-description-padding-left);
@@ -395,7 +393,7 @@
395
393
  }
396
394
 
397
395
  .lh-audit__stackpack__img {
398
- max-width: 50px;
396
+ max-width: 30px;
399
397
  margin-right: var(--default-padding)
400
398
  }
401
399
 
@@ -414,11 +412,13 @@
414
412
 
415
413
  .lh-report-icon::before {
416
414
  content: "";
417
- margin-right: 5px;
415
+ margin: 4px;
418
416
  background-repeat: no-repeat;
419
417
  width: var(--report-icon-size);
420
418
  height: var(--report-icon-size);
421
419
  opacity: 0.7;
420
+ display: inline-block;
421
+ vertical-align: middle;
422
422
  }
423
423
  .lh-report-icon:hover::before {
424
424
  opacity: 1;
@@ -442,24 +442,51 @@
442
442
  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>');
443
443
  }
444
444
  .lh-report-icon--treemap::before {
445
- 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="M0 0h24v24H0V0z" fill="none"/><path d="M3 5v14h19V5H3zm2 2h15v4H5V7zm0 10v-4h4v4H5zm6 0v-4h9v4h-9z"/></svg>');
445
+ 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>');
446
+ }
447
+ .lh-report-icon--date::before {
448
+ 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>');
449
+ }
450
+ .lh-report-icon--devices::before {
451
+ 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>');
452
+ }
453
+ .lh-report-icon--world::before {
454
+ 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>');
446
455
  }
456
+ .lh-report-icon--stopwatch::before {
457
+ 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>');
458
+ }
459
+ .lh-report-icon--networkspeed::before {
460
+ 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>');
461
+ }
462
+ .lh-report-icon--samples-one::before {
463
+ 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>');
464
+ }
465
+ .lh-report-icon--samples-many::before {
466
+ 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>');
467
+ }
468
+ .lh-report-icon--chrome::before {
469
+ 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>');
470
+ }
471
+
472
+
447
473
 
448
474
  .lh-buttons {
449
475
  display: flex;
450
476
  flex-wrap: wrap;
477
+ margin: var(--default-padding) 0;
451
478
  }
452
479
  .lh-button {
453
- margin: 10px;
454
- height: 30px;
455
- border: 1px solid var(--color-gray-600);
456
- border-radius: 4px;
457
- font-weight: bold;
458
- color: rgb(26, 115, 232);
480
+ height: 32px;
481
+ border: 1px solid var(--report-border-color-secondary);
482
+ border-radius: 3px;
483
+ color: var(--link-color);
459
484
  background-color: var(--report-background-color);
485
+ margin: 5px;
460
486
  }
461
- .lh-dark .lh-button {
462
- color: var(--color-blue-200);
487
+
488
+ .lh-button:first-of-type {
489
+ margin-left: 0;
463
490
  }
464
491
 
465
492
  /* Node */
@@ -514,7 +541,7 @@
514
541
  }
515
542
  .lh-audit--manual .lh-audit__score-icon,
516
543
  .lh-audit--notapplicable .lh-audit__score-icon {
517
- border: 2px solid var(--color-gray-400);
544
+ border: calc(0.2 * var(--score-icon-size)) solid var(--color-gray-400);
518
545
  border-radius: 100%;
519
546
  background: none;
520
547
  }
@@ -524,7 +551,7 @@
524
551
  }
525
552
 
526
553
  .lh-audit--informative .lh-audit__score-icon {
527
- border: 2px solid var(--color-gray-400);
554
+ border: calc(0.2 * var(--score-icon-size)) solid var(--color-gray-400);
528
555
  border-radius: 100%;
529
556
  }
530
557
 
@@ -543,8 +570,8 @@
543
570
  }
544
571
 
545
572
  .lh-category-header__description {
546
- font-size: var(--report-font-size);
547
573
  text-align: center;
574
+ color: var(--color-gray-700);
548
575
  margin: 0px auto;
549
576
  max-width: 400px;
550
577
  }
@@ -581,8 +608,7 @@
581
608
  .lh-audit__header {
582
609
  display: flex;
583
610
  align-items: center;
584
- font-weight: 500;
585
- padding: var(--audit-padding-vertical) 0;
611
+ padding: var(--default-padding);
586
612
  }
587
613
 
588
614
  .lh-audit--load-opportunity .lh-audit__header {
@@ -591,8 +617,12 @@
591
617
 
592
618
 
593
619
  .lh-metricfilter {
594
- text-align: right;
595
- margin-top: var(--default-padding);
620
+ display: grid;
621
+ justify-content: end;
622
+ align-items: center;
623
+ grid-auto-flow: column;
624
+ gap: 4px;
625
+ color: var(--color-gray-700);
596
626
  }
597
627
 
598
628
  .lh-metricfilter__radio {
@@ -604,29 +634,20 @@
604
634
  }
605
635
 
606
636
  .lh-metricfilter__label {
607
- border: solid 1px var(--color-gray-400);
637
+ display: inline-flex;
638
+ padding: 0 4px;
639
+ height: 16px;
640
+ text-decoration: underline;
608
641
  align-items: center;
609
- justify-content: center;
610
- padding: 2px 5px;
611
- width: 50%;
612
- height: 28px;
613
642
  cursor: pointer;
614
643
  font-size: 90%;
615
644
  }
616
645
 
617
- .lh-metricfilter__label:first-of-type {
618
- border-top-left-radius: 5px;
619
- border-bottom-left-radius: 5px;
620
- margin-left: 5px;
621
- }
622
- .lh-metricfilter__label:last-of-type {
623
- border-top-right-radius: 5px;
624
- border-bottom-right-radius: 5px;
625
- }
626
-
627
646
  .lh-metricfilter__label--active {
628
- background: var(--color-blue-A700);
647
+ background: var(--color-blue-primary);
629
648
  color: var(--color-white);
649
+ border-radius: 3px;
650
+ text-decoration: none;
630
651
  }
631
652
  /* Give the 'All' choice a more muted display */
632
653
  .lh-metricfilter__label--active[for="metric-All"] {
@@ -634,6 +655,10 @@
634
655
  color: black !important;
635
656
  }
636
657
 
658
+ .lh-metricfilter__text {
659
+ margin-right: 8px;
660
+ }
661
+
637
662
  /* If audits are filtered, hide the itemcount for Passed Audits… */
638
663
  .lh-category--filtered .lh-audit-group .lh-audit-group__itemcount {
639
664
  display: none;
@@ -645,14 +670,12 @@
645
670
  }
646
671
 
647
672
  /* We want to hide the browser's default arrow marker on summary elements. Admittedly, it's complicated. */
648
- .lh-audit-group > summary,
649
- .lh-expandable-details > summary {
673
+ .lh-root details > summary {
650
674
  /* 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*/
651
675
  display: block;
652
676
  }
653
677
  /* Safari and Blink <=88 require using the -webkit-details-marker selector */
654
- .lh-audit-group > summary::-webkit-details-marker,
655
- .lh-expandable-details > summary::-webkit-details-marker {
678
+ .lh-root details > summary::-webkit-details-marker {
656
679
  display: none;
657
680
  }
658
681
 
@@ -660,30 +683,19 @@
660
683
 
661
684
  .lh-metrics-container {
662
685
  display: grid;
663
- grid-template-rows: 1fr 1fr 1fr;
664
- grid-auto-flow: column;
665
- grid-column-gap: 24px;
686
+ grid-auto-rows: 1fr;
687
+ grid-template-columns: 1fr 1fr;
688
+ grid-column-gap: var(--report-line-height);
666
689
  }
667
690
 
668
691
  .lh-metric {
669
692
  border-top: 1px solid var(--report-border-color-secondary);
670
693
  }
671
694
 
672
- @media screen and (min-width: 640px) {
673
- .lh-metric:nth-child(3n+3) {
674
- border-bottom: 1px solid var(--report-border-color-secondary);
675
- }
695
+ .lh-metric:nth-last-child(-n+2) {
696
+ border-bottom: 1px solid var(--report-border-color-secondary);
676
697
  }
677
698
 
678
- @media screen and (max-width: 640px) {
679
- .lh-metrics-container {
680
- display: block;
681
- }
682
-
683
- .lh-metric:nth-last-child(-n+1) {
684
- border-bottom: 1px solid var(--report-border-color-secondary);
685
- }
686
- }
687
699
 
688
700
  .lh-metric__innerwrap {
689
701
  display: grid;
@@ -693,7 +705,7 @@
693
705
  */
694
706
  grid-template-columns: calc(var(--score-icon-size) + var(--score-icon-margin-left) + var(--score-icon-margin-right)) 1fr;
695
707
  align-items: center;
696
- padding: 10px 0;
708
+ padding: var(--default-padding);
697
709
  }
698
710
 
699
711
  .lh-metric__details {
@@ -702,12 +714,6 @@
702
714
 
703
715
  .lh-metric__title {
704
716
  flex: 1;
705
- font-weight: 500;
706
- }
707
-
708
- .lh-metrics__disclaimer {
709
- color: var(--color-gray-600);
710
- margin: var(--section-padding-vertical) 0;
711
717
  }
712
718
 
713
719
  .lh-calclink {
@@ -725,12 +731,23 @@
725
731
  font-size: var(--metric-value-font-size);
726
732
  margin: calc(var(--default-padding) / 2) 0;
727
733
  white-space: nowrap; /* No wrapping between metric value and the icon */
728
- font-weight: 500;
729
734
  grid-column-start: 2;
730
735
  }
731
736
 
732
- /* Change the grid to 3 columns for narrow viewport. */
737
+
733
738
  @media screen and (max-width: 535px) {
739
+ .lh-metrics-container {
740
+ display: block;
741
+ }
742
+
743
+ .lh-metric {
744
+ border-bottom: none !important;
745
+ }
746
+ .lh-metric:nth-last-child(1) {
747
+ border-bottom: 1px solid var(--report-border-color-secondary) !important;
748
+ }
749
+
750
+ /* Change the grid to 3 columns for narrow viewport. */
734
751
  .lh-metric__innerwrap {
735
752
  /**
736
753
  * Icon -- Metric Name -- Metric Value
@@ -749,62 +766,36 @@
749
766
  display: block;
750
767
  }
751
768
 
769
+ /* TODO get rid of the SVGS and clean up these some more */
752
770
  .lh-metrics-toggle__input {
753
- cursor: pointer;
754
771
  opacity: 0;
755
772
  position: absolute;
756
773
  right: 0;
757
- width: 74px;
758
- height: 28px;
759
- top: -3px;
760
- }
761
- .lh-metrics-toggle__label {
762
- display: flex;
763
- background-color: #eee;
764
- border-radius: 20px;
765
- overflow: hidden;
766
- position: absolute;
767
- right: 0;
768
- top: -3px;
769
- pointer-events: none;
770
- }
771
- .lh-metrics-toggle__input:focus + label {
772
- outline: -webkit-focus-ring-color auto 3px;
774
+ top: 0px;
773
775
  }
774
- .lh-metrics-toggle__icon {
775
- display: flex;
776
- align-items: center;
777
- justify-content: center;
778
- padding: 2px 5px;
779
- width: 50%;
780
- height: 28px;
781
- }
782
- .lh-metrics-toggle__input:not(:checked) + label .lh-metrics-toggle__icon--less,
783
- .lh-metrics-toggle__input:checked + label .lh-metrics-toggle__icon--more {
784
- background-color: var(--color-blue-A700);
785
- --metric-toggle-lines-fill: var(--color-white);
776
+
777
+ .lh-metrics-toggle__input + div > label > .lh-metrics-toggle__labeltext--hide,
778
+ .lh-metrics-toggle__input:checked + div > label > .lh-metrics-toggle__labeltext--show {
779
+ display: none;
786
780
  }
787
- .lh-metrics-toggle__lines {
788
- fill: var(--metric-toggle-lines-fill);
781
+ .lh-metrics-toggle__input:checked + div > label > .lh-metrics-toggle__labeltext--hide {
782
+ display: inline;
789
783
  }
790
-
791
- .lh-metrics-toggle__label {
792
- background-color: var(--metrics-toggle-background-color);
784
+ .lh-metrics-toggle__input:focus + div > label {
785
+ outline: -webkit-focus-ring-color auto 3px;
793
786
  }
794
787
 
795
- .lh-metrics-toggle__label .lh-metrics-toggle__icon--less {
796
- padding-left: 8px;
797
- }
798
- .lh-metrics-toggle__label .lh-metrics-toggle__icon--more {
799
- padding-right: 8px;
788
+ .lh-metrics-toggle__label {
789
+ cursor: pointer;
790
+ font-size: var(--report-font-size-secondary);
791
+ line-height: var(--report-line-height-secondary);
792
+ color: var(--color-gray-700);
800
793
  }
801
794
 
802
795
  /* Pushes the metric description toggle button to the right. */
803
796
  .lh-audit-group--metrics .lh-audit-group__header {
804
797
  display: flex;
805
- }
806
- .lh-audit-group--metrics .lh-audit-group__header span.lh-audit-group__title {
807
- flex: 1;
798
+ justify-content: space-between;
808
799
  }
809
800
 
810
801
  .lh-metric__icon,
@@ -918,10 +909,11 @@
918
909
  }
919
910
 
920
911
  .lh-filmstrip {
921
- display: flex;
922
- flex-direction: row;
912
+ display: grid;
923
913
  justify-content: space-between;
924
914
  padding-bottom: var(--default-padding);
915
+ width: 100%;
916
+ grid-template-columns: repeat(auto-fit, 60px);
925
917
  }
926
918
 
927
919
  .lh-filmstrip__frame {
@@ -935,20 +927,6 @@
935
927
  max-width: 60px;
936
928
  }
937
929
 
938
- @media screen and (max-width: 750px) {
939
- .lh-filmstrip {
940
- flex-wrap: wrap;
941
- }
942
- .lh-filmstrip__frame {
943
- width: 20%;
944
- margin-bottom: 5px;
945
- }
946
- .lh-filmstrip__thumbnail {
947
- display: block;
948
- margin: auto;
949
- }
950
- }
951
-
952
930
  /* Audit */
953
931
 
954
932
  .lh-audit {
@@ -974,6 +952,9 @@
974
952
  margin-bottom: var(--audit-group-margin-bottom);
975
953
  position: relative;
976
954
  }
955
+ .lh-audit-group--metrics {
956
+ margin-bottom: calc(var(--audit-group-margin-bottom) / 2);
957
+ }
977
958
 
978
959
  .lh-audit-group__header::before {
979
960
  /* By default, groups don't get an icon */
@@ -997,9 +978,9 @@
997
978
  text-align: right;
998
979
  }
999
980
 
1000
- .lh-audit-group--budgets .lh-table {
981
+ .lh-audit-group--budgets .lh-details--budget {
1001
982
  width: 100%;
1002
- margin: 16px 0px 16px 0px;
983
+ margin: 0 0 var(--default-padding);
1003
984
  }
1004
985
 
1005
986
  .lh-audit-group--pwa-installable .lh-audit-group__header::before {
@@ -1025,54 +1006,46 @@
1025
1006
  .lh-audit-group__summary {
1026
1007
  display: flex;
1027
1008
  justify-content: space-between;
1028
- margin-top: calc(var(--category-padding) * 1.5);
1029
- margin-bottom: var(--category-padding);
1009
+ align-items: center;
1030
1010
  }
1031
1011
 
1032
- .lh-audit-group__itemcount {
1033
- color: var(--color-gray-600);
1034
- font-weight: bold;
1035
- }
1036
1012
  .lh-audit-group__header .lh-chevron {
1037
1013
  margin-top: calc((var(--report-line-height) - 5px) / 2);
1038
1014
  }
1039
1015
 
1040
1016
  .lh-audit-group__header {
1041
- font-size: var(--report-font-size);
1042
- margin: 0 0 var(--audit-group-padding-vertical);
1043
- /* When the header takes 100% width, the chevron becomes small. */
1044
- max-width: calc(100% - var(--chevron-size));
1017
+ letter-spacing: 0.8px;
1018
+ padding: var(--default-padding);
1019
+ padding-left: 0;
1045
1020
  }
1046
- /* max-width makes the metric toggle not flush. metrics doesn't have a chevron so unset. */
1047
- .lh-audit-group--metrics .lh-audit-group__header {
1048
- max-width: unset;
1021
+
1022
+ .lh-audit-group__header, .lh-audit-group__summary {
1023
+ font-size: var(--report-font-size-secondary);
1024
+ line-height: var(--report-line-height-secondary);
1025
+ color: var(--color-gray-700);
1049
1026
  }
1050
1027
 
1051
- .lh-audit-group__header span.lh-audit-group__title {
1052
- font-weight: bold;
1028
+ .lh-audit-group__title {
1029
+ text-transform: uppercase;
1030
+ font-weight: 500;
1053
1031
  }
1054
1032
 
1055
- .lh-audit-group__header span.lh-audit-group__itemcount {
1056
- font-weight: bold;
1033
+ .lh-audit-group__itemcount {
1057
1034
  color: var(--color-gray-600);
1058
1035
  }
1059
1036
 
1060
- .lh-audit-group__header span.lh-audit-group__description {
1061
- font-weight: 500;
1037
+ .lh-audit-group__footer {
1062
1038
  color: var(--color-gray-600);
1063
- }
1064
- .lh-audit-group__header span.lh-audit-group__description::before {
1065
- content: '—';
1066
- margin: 0px var(--audit-margin-horizontal);
1039
+ display: block;
1040
+ margin-top: var(--default-padding);
1067
1041
  }
1068
1042
 
1069
- .lh-clump > .lh-audit-group__header,
1070
- .lh-audit-group--diagnostics .lh-audit-group__header,
1071
- .lh-audit-group--load-opportunities .lh-audit-group__header,
1072
- .lh-audit-group--metrics .lh-audit-group__header,
1073
- .lh-audit-group--pwa-installable .lh-audit-group__header,
1074
- .lh-audit-group--pwa-optimized .lh-audit-group__header {
1075
- margin-top: var(--audit-group-padding-vertical);
1043
+ .lh-details,
1044
+ .lh-category-header__description,
1045
+ .lh-load-opportunity__header,
1046
+ .lh-audit-group__footer {
1047
+ font-size: var(--report-font-size-secondary);
1048
+ line-height: var(--report-line-height-secondary);
1076
1049
  }
1077
1050
 
1078
1051
  .lh-audit-explanation {
@@ -1113,9 +1086,13 @@
1113
1086
 
1114
1087
  .lh-warnings {
1115
1088
  --item-margin: calc(var(--report-line-height) / 6);
1116
- color: var(--color-average);
1089
+ color: var(--color-average-secondary);
1117
1090
  margin: var(--audit-padding-vertical) 0;
1118
- padding: calc(var(--audit-padding-vertical) / 2) calc(var(--audit-description-padding-left));
1091
+ padding: var(--default-padding)
1092
+ var(--default-padding)
1093
+ var(--default-padding)
1094
+ calc(var(--audit-description-padding-left));
1095
+ background-color: var(--toplevel-warning-background-color);
1119
1096
  }
1120
1097
  .lh-warnings span {
1121
1098
  font-weight: bold;
@@ -1126,8 +1103,8 @@
1126
1103
  color: var(--toplevel-warning-text-color);
1127
1104
  margin-left: auto;
1128
1105
  margin-right: auto;
1129
- max-width: calc(var(--report-width) - var(--category-padding) * 2);
1130
- background-color: var(--toplevel-warning-background-color);
1106
+ --content-width-minus-category-padding-sides: calc(var(--report-content-width) - calc(var(--default-padding) * 4) * 2);
1107
+ max-width: var(--content-width-minus-category-padding-sides);
1131
1108
  padding: var(--toplevel-warning-padding);
1132
1109
  border-radius: 8px;
1133
1110
  }
@@ -1160,19 +1137,19 @@
1160
1137
  /* Gauge */
1161
1138
 
1162
1139
  .lh-gauge__wrapper--pass {
1163
- color: var(--color-pass);
1140
+ color: var(--color-pass-secondary);
1164
1141
  fill: var(--color-pass);
1165
1142
  stroke: var(--color-pass);
1166
1143
  }
1167
1144
 
1168
1145
  .lh-gauge__wrapper--average {
1169
- color: var(--color-average);
1146
+ color: var(--color-average-secondary);
1170
1147
  fill: var(--color-average);
1171
1148
  stroke: var(--color-average);
1172
1149
  }
1173
1150
 
1174
1151
  .lh-gauge__wrapper--fail {
1175
- color: var(--color-fail);
1152
+ color: var(--color-fail-secondary);
1176
1153
  fill: var(--color-fail);
1177
1154
  stroke: var(--color-fail);
1178
1155
  }
@@ -1191,7 +1168,7 @@
1191
1168
  display: inline-block;
1192
1169
  }
1193
1170
  .lh-fraction__wrapper--pass .lh-fraction__content {
1194
- color: var(--color-pass);
1171
+ color: var(--color-pass-secondary);
1195
1172
  }
1196
1173
  .lh-fraction__wrapper--pass .lh-fraction__background {
1197
1174
  background-color: var(--color-pass);
@@ -1201,11 +1178,9 @@
1201
1178
  border-radius: 50%;
1202
1179
  }
1203
1180
  .lh-fraction__wrapper--average .lh-fraction__content {
1204
- color: var(--color-average);
1205
- }
1206
- .lh-fraction__wrapper--average .lh-fraction__background {
1207
- background-color: var(--color-average);
1181
+ color: var(--color-average-secondary);
1208
1182
  }
1183
+ .lh-fraction__wrapper--average .lh-fraction__background,
1209
1184
  .lh-fraction__wrapper--average .lh-fraction__content::before {
1210
1185
  background-color: var(--color-average);
1211
1186
  }
@@ -1228,7 +1203,7 @@
1228
1203
  }
1229
1204
  .lh-fraction__wrapper--null .lh-fraction__content::before {
1230
1205
  border-radius: 50%;
1231
- border: 2px solid var(--color-gray-700);
1206
+ border: calc(0.2 * var(--score-icon-size)) solid var(--color-gray-700);
1232
1207
  }
1233
1208
 
1234
1209
  .lh-fraction__background {
@@ -1251,10 +1226,13 @@
1251
1226
  position: relative;
1252
1227
  align-items: center;
1253
1228
  justify-content: center;
1254
- font-size: var(--gauge-label-font-size);
1229
+ font-size: calc(0.3 * var(--gauge-circle-size));
1230
+ line-height: calc(0.4 * var(--gauge-circle-size));
1255
1231
  width: max-content;
1256
- padding: 1em;
1257
- min-width: 6em;
1232
+ min-width: calc(1.5 * var(--gauge-circle-size));
1233
+ padding: calc(0.1 * var(--gauge-circle-size)) calc(0.2 * var(--gauge-circle-size));
1234
+ --score-icon-size: calc(0.21 * var(--gauge-circle-size));
1235
+ --score-icon-margin: 0 calc(0.15 * var(--gauge-circle-size)) 0 0;
1258
1236
  }
1259
1237
 
1260
1238
  .lh-gauge {
@@ -1282,12 +1260,9 @@
1282
1260
  position: relative;
1283
1261
  height: var(--gauge-circle-size);
1284
1262
  }
1285
- .lh-category .lh-gauge__svg-wrapper {
1286
- --gauge-circle-size: var(--gauge-circle-size-big);
1287
- }
1263
+ .lh-category .lh-gauge__svg-wrapper,
1288
1264
  .lh-category .lh-fraction__wrapper {
1289
1265
  --gauge-circle-size: var(--gauge-circle-size-big);
1290
- --score-icon-size: var(--score-icon-size-big)
1291
1266
  }
1292
1267
 
1293
1268
  /* The plugin badge overlay */
@@ -1352,10 +1327,12 @@
1352
1327
  .lh-gauge__label,
1353
1328
  .lh-fraction__label {
1354
1329
  font-size: var(--gauge-label-font-size);
1330
+ font-weight: 500;
1355
1331
  line-height: var(--gauge-label-line-height);
1356
1332
  margin-top: 10px;
1357
1333
  text-align: center;
1358
1334
  color: var(--report-text-color);
1335
+ word-break: keep-all;
1359
1336
  }
1360
1337
 
1361
1338
  /* TODO(#8185) use more BEM (.lh-gauge__label--big) instead of relying on descendant selector */
@@ -1365,10 +1342,6 @@
1365
1342
  --gauge-label-line-height: var(--gauge-label-line-height-big);
1366
1343
  margin-top: 14px;
1367
1344
  }
1368
- .lh-category .lh-fraction__content {
1369
- --gauge-label-font-size: var(--gauge-label-font-size-big);
1370
- }
1371
-
1372
1345
 
1373
1346
  .lh-scores-header .lh-gauge__wrapper,
1374
1347
  .lh-scores-header .lh-fraction__wrapper,
@@ -1381,20 +1354,36 @@
1381
1354
 
1382
1355
  .lh-scorescale {
1383
1356
  display: inline-flex;
1384
- margin: 12px auto 0 auto;
1385
- border: 1px solid var(--color-gray-200);
1386
- border-radius: 20px;
1387
- padding: 8px 8px;
1357
+
1358
+ gap: calc(var(--default-padding) * 4);
1359
+ margin: 16px auto 0 auto;
1360
+ font-size: var(--report-font-size-secondary);
1361
+ color: var(--color-gray-700);
1362
+
1388
1363
  }
1389
1364
 
1390
1365
  .lh-scorescale-range {
1391
1366
  display: flex;
1392
1367
  align-items: center;
1393
- margin: 0 12px;
1394
1368
  font-family: var(--report-font-family-monospace);
1395
1369
  white-space: nowrap;
1396
1370
  }
1397
1371
 
1372
+ .lh-category-header__finalscreenshot .lh-scorescale {
1373
+ border: 0;
1374
+ display: flex;
1375
+ justify-content: center;
1376
+ }
1377
+
1378
+ .lh-category-header__finalscreenshot .lh-scorescale-range {
1379
+ font-family: unset;
1380
+ font-size: 12px;
1381
+ }
1382
+
1383
+ .lh-scorescale-wrap {
1384
+ display: contents;
1385
+ }
1386
+
1398
1387
  /* Hide category score gauages if it's a single category report */
1399
1388
  .lh-header--solo-category .lh-scores-wrapper {
1400
1389
  display: none;
@@ -1408,12 +1397,16 @@
1408
1397
 
1409
1398
  .lh-category {
1410
1399
  padding: var(--category-padding);
1411
- max-width: var(--report-width);
1400
+ max-width: var(--report-content-width);
1412
1401
  margin: 0 auto;
1413
1402
 
1414
1403
  --sticky-header-height: calc(var(--gauge-circle-size-sm) + var(--score-container-padding) * 2);
1415
1404
  --topbar-plus-sticky-header: calc(var(--topbar-height) + var(--sticky-header-height));
1416
1405
  scroll-margin-top: var(--topbar-plus-sticky-header);
1406
+
1407
+ /* Faster recalc style & layout of the report. https://web.dev/content-visibility/ */
1408
+ content-visibility: auto;
1409
+ contain-intrinsic-size: 1000px;
1417
1410
  }
1418
1411
 
1419
1412
  .lh-category-wrapper {
@@ -1425,8 +1418,6 @@
1425
1418
  }
1426
1419
 
1427
1420
  .lh-category-header {
1428
- font-size: var(--category-header-font-size);
1429
- min-height: var(--gauge-circle-size);
1430
1421
  margin-bottom: var(--section-padding-vertical);
1431
1422
  }
1432
1423
 
@@ -1436,11 +1427,42 @@
1436
1427
  margin: 0px auto;
1437
1428
  }
1438
1429
 
1439
- .lh-category-header .lh-audit__title {
1440
- font-size: var(--category-header-font-size);
1441
- line-height: var(--header-line-height);
1430
+ .lh-category-header__finalscreenshot {
1431
+ display: grid;
1432
+ grid-template: none / 1fr 1px 1fr;
1433
+ justify-items: center;
1434
+ align-items: center;
1435
+ gap: var(--report-line-height);
1436
+ min-height: 288px;
1437
+ margin-bottom: var(--default-padding);
1442
1438
  }
1443
1439
 
1440
+ .lh-final-ss-image {
1441
+ /* constrain the size of the image to not be too large */
1442
+ max-height: calc(var(--gauge-circle-size-big) * 2.8);
1443
+ max-width: calc(var(--gauge-circle-size-big) * 3.5);
1444
+ border: 1px solid var(--color-gray-200);
1445
+ padding: 4px;
1446
+ border-radius: 3px;
1447
+ display: block;
1448
+ }
1449
+
1450
+ .lh-category-headercol--separator {
1451
+ background: var(--color-gray-200);
1452
+ width: 1px;
1453
+ height: var(--gauge-circle-size-big);
1454
+ }
1455
+
1456
+ @media screen and (max-width: 780px) {
1457
+ .lh-category-header__finalscreenshot {
1458
+ grid-template: 1fr 1fr / none
1459
+ }
1460
+ .lh-category-headercol--separator {
1461
+ display: none;
1462
+ }
1463
+ }
1464
+
1465
+
1444
1466
  /* 964 fits the min-width of the filmstrip */
1445
1467
  @media screen and (max-width: 964px) {
1446
1468
  .lh-report {
@@ -1468,7 +1490,9 @@
1468
1490
  .lh-table {
1469
1491
  border-collapse: collapse;
1470
1492
  /* Can't assign padding to table, so shorten the width instead. */
1471
- width: calc(100% - var(--audit-description-padding-left));
1493
+ width: calc(100% - var(--audit-description-padding-left) - var(--stackpack-padding-horizontal));
1494
+ border: 1px solid var(--report-border-color-secondary);
1495
+
1472
1496
  }
1473
1497
 
1474
1498
  .lh-table thead th {
@@ -1478,7 +1502,7 @@
1478
1502
  word-break: normal;
1479
1503
  }
1480
1504
 
1481
- .lh-row--odd {
1505
+ .lh-row--even {
1482
1506
  background-color: var(--table-higlight-background-color);
1483
1507
  }
1484
1508
  .lh-row--hidden {
@@ -1487,13 +1511,7 @@
1487
1511
 
1488
1512
  .lh-table th,
1489
1513
  .lh-table td {
1490
- padding: 8px 6px;
1491
- }
1492
- .lh-table th:first-child {
1493
- padding-left: 0;
1494
- }
1495
- .lh-table th:last-child {
1496
- padding-right: 0;
1514
+ padding: var(--default-padding);
1497
1515
  }
1498
1516
 
1499
1517
  .lh-table tr {
@@ -1527,7 +1545,6 @@
1527
1545
 
1528
1546
  .lh-table .lh-table-column--thumbnail {
1529
1547
  width: var(--image-preview-size);
1530
- padding: 0;
1531
1548
  }
1532
1549
 
1533
1550
  .lh-table-column--url {
@@ -1615,23 +1632,54 @@
1615
1632
  transition: transform 300ms, stroke 300ms;
1616
1633
  }
1617
1634
 
1618
- .lh-audit-group > summary > .lh-audit-group__summary > .lh-chevron .lh-chevron__line-right,
1619
- .lh-audit-group[open] > summary > .lh-audit-group__summary > .lh-chevron .lh-chevron__line-left,
1620
- .lh-audit > .lh-expandable-details .lh-chevron__line-right,
1621
- .lh-audit > .lh-expandable-details[open] .lh-chevron__line-left {
1635
+ .lh-expandable-details .lh-chevron__line-right,
1636
+ .lh-expandable-details[open] .lh-chevron__line-left {
1622
1637
  transform: rotate(var(--chevron-angle-right));
1623
1638
  }
1624
1639
 
1625
- .lh-audit-group[open] > summary > .lh-audit-group__summary > .lh-chevron .lh-chevron__line-right,
1626
- .lh-audit > .lh-expandable-details[open] .lh-chevron__line-right {
1640
+ .lh-expandable-details[open] .lh-chevron__line-right {
1627
1641
  transform: rotate(var(--chevron-angle));
1628
1642
  }
1629
1643
 
1630
- .lh-audit-group[open] > summary > .lh-audit-group__summary > .lh-chevron .lh-chevron__lines,
1631
- .lh-audit > .lh-expandable-details[open] .lh-chevron__lines {
1644
+
1645
+ .lh-expandable-details[open] .lh-chevron__lines {
1632
1646
  transform: translateY(calc(var(--chevron-size) * -1));
1633
1647
  }
1634
1648
 
1649
+ .lh-expandable-details[open] {
1650
+ animation: 300ms openDetails forwards;
1651
+ padding-bottom: var(--default-padding);
1652
+ }
1653
+
1654
+ @keyframes openDetails {
1655
+ from {
1656
+ outline: 1px solid var(--report-background-color);
1657
+ }
1658
+ to {
1659
+ outline: 1px solid;
1660
+ box-shadow: 0 2px 4px rgba(0, 0, 0, .24);
1661
+ }
1662
+ }
1663
+
1664
+ @media screen and (max-width: 780px) {
1665
+ /* no black outline if we're not confident the entire table can be displayed within bounds */
1666
+ .lh-expandable-details[open] {
1667
+ animation: none;
1668
+ }
1669
+ }
1670
+
1671
+ .lh-expandable-details[open] summary, details.lh-clump > summary {
1672
+ border-bottom: 1px solid var(--report-border-color-secondary);
1673
+ }
1674
+ details.lh-clump[open] > summary {
1675
+ border-bottom-width: 0;
1676
+ }
1677
+
1678
+
1679
+
1680
+ details .lh-clump-toggletext--hide,
1681
+ details[open] .lh-clump-toggletext--show { display: none; }
1682
+ details[open] .lh-clump-toggletext--hide { display: block;}
1635
1683
 
1636
1684
 
1637
1685
  /* Tooltip */
@@ -1644,11 +1692,13 @@
1644
1692
  display: none; /* Don't retain these layers when not needed */
1645
1693
  opacity: 0;
1646
1694
  background: #ffffff;
1695
+ white-space: pre-line; /* Render newlines in the text */
1647
1696
  min-width: 246px;
1648
1697
  max-width: 275px;
1649
1698
  padding: 15px;
1650
1699
  border-radius: 5px;
1651
1700
  text-align: initial;
1701
+ line-height: 1.4;
1652
1702
  }
1653
1703
  /* shrink tooltips to not be cutoff on left edge of narrow viewports
1654
1704
  45vw is chosen to be ~= width of the left column of metrics
@@ -1660,10 +1710,6 @@
1660
1710
  }
1661
1711
  }
1662
1712
 
1663
- .lh-tooltip-boundary:hover {
1664
- background-color: var(--color-hover);
1665
- }
1666
-
1667
1713
  .lh-tooltip-boundary:hover .lh-tooltip {
1668
1714
  display: block;
1669
1715
  animation: fadeInTooltip 250ms;
@@ -1746,4 +1792,64 @@
1746
1792
  cursor: zoom-in;
1747
1793
  }
1748
1794
 
1795
+
1796
+ .lh-meta__items {
1797
+ --meta-icon-size: calc(var(--report-icon-size) * 0.667);
1798
+ padding: var(--default-padding);
1799
+ display: grid;
1800
+ grid-template-columns: 1fr 1fr 1fr;
1801
+ background-color: var(--env-item-background-color);
1802
+ border-radius: 3px;
1803
+ margin: 0 0 var(--default-padding) 0;
1804
+ font-size: 12px;
1805
+ column-gap: var(--default-padding);
1806
+ color: var(--color-gray-700);
1807
+ }
1808
+
1809
+ .lh-meta__item {
1810
+ display: block;
1811
+ list-style-type: none;
1812
+ position: relative;
1813
+ padding: 0 0 0 calc(var(--meta-icon-size) + var(--default-padding) * 2);
1814
+ cursor: unset; /* disable pointer cursor from report-icon */
1815
+ }
1816
+
1817
+ .lh-meta__item.lh-tooltip-boundary {
1818
+ text-decoration: dotted underline var(--color-gray-500);
1819
+ cursor: help;
1820
+ }
1821
+
1822
+ .lh-meta__item.lh-report-icon::before {
1823
+ position: absolute;
1824
+ left: var(--default-padding);
1825
+ width: var(--meta-icon-size);
1826
+ height: var(--meta-icon-size);
1827
+ }
1828
+
1829
+ .lh-meta__item.lh-report-icon:hover::before {
1830
+ opacity: 0.7;
1831
+ }
1832
+
1833
+ .lh-meta__item .lh-tooltip {
1834
+ color: var(--color-gray-800);
1835
+ }
1836
+
1837
+ .lh-meta__item .lh-tooltip::before {
1838
+ right: auto; /* Set the tooltip arrow to the leftside */
1839
+ left: 6px;
1840
+ }
1841
+
1842
+ /* Change the grid for narrow viewport. */
1843
+ @media screen and (max-width: 640px) {
1844
+ .lh-meta__items {
1845
+ grid-template-columns: 1fr 1fr;
1846
+ }
1847
+ }
1848
+ @media screen and (max-width: 535px) {
1849
+ .lh-meta__items {
1850
+ display: block;
1851
+ }
1852
+ }
1853
+
1854
+
1749
1855
  /*# sourceURL=report-styles.css */