| /** |
| * @license |
| * Copyright 2017 Google Inc. All Rights Reserved. |
| * |
| * 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 |
| * |
| * 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. |
| */ |
| |
| /* |
| Naming convention: |
| |
| If a variable is used for a specific component: --{component}-{property name}-{modifier} |
| |
| Both {component} and {property name} should be kebab-case. If the target is the entire page, |
| use 'report' for the component. The property name should not be abbreviated. Use the |
| property name the variable is intended for - if it's used for multiple, a common descriptor |
| is fine (ex: 'size' for a variable applied to 'width' and 'height'). If a variable is shared |
| across multiple components, either create more variables or just drop the "{component}-" |
| part of the name. Append any modifiers at the end (ex: 'big', 'dark'). |
| |
| For colors: --color-{hue}-{intensity} |
| |
| {intensity} is the Material Design tag - 700, A700, etc. |
| */ |
| .lh-vars { |
| /* Palette using Material Design Colors |
| * https://www.materialui.co/colors */ |
| --color-amber-50: #FFF8E1; |
| --color-blue-200: #90CAF9; |
| --color-blue-900: #0D47A1; |
| --color-blue-A700: #2962FF; |
| --color-cyan-500: #00BCD4; |
| --color-gray-100: #F5F5F5; |
| --color-gray-200: #E0E0E0; |
| --color-gray-400: #BDBDBD; |
| --color-gray-50: #FAFAFA; |
| --color-gray-500: #9E9E9E; |
| --color-gray-600: #757575; |
| --color-gray-700: #616161; |
| --color-gray-800: #424242; |
| --color-gray-900: #212121; |
| --color-gray: #000000; |
| --color-green-700: #018642; |
| --color-green: #0CCE6B; |
| --color-orange-700: #D04900; |
| --color-orange: #FFA400; |
| --color-red-700: #EB0F00; |
| --color-red: #FF4E42; |
| --color-teal-600: #00897B; |
| --color-white: #FFFFFF; |
| |
| /* Context-specific colors */ |
| --color-average-secondary: var(--color-orange-700); |
| --color-average: var(--color-orange); |
| --color-fail-secondary: var(--color-red-700); |
| --color-fail: var(--color-red); |
| --color-informative: var(--color-blue-900); |
| --color-pass-secondary: var(--color-green-700); |
| --color-pass: var(--color-green); |
| --color-hover: var(--color-gray-50); |
| |
| /* Component variables */ |
| --audit-description-padding-left: calc(var(--score-icon-size) + var(--score-icon-margin-left) + var(--score-icon-margin-right)); |
| --audit-explanation-line-height: 16px; |
| --audit-group-margin-bottom: 40px; |
| --audit-group-padding-vertical: 8px; |
| --audit-margin-horizontal: 5px; |
| --audit-padding-vertical: 8px; |
| --category-header-font-size: 20px; |
| --category-padding: 40px; |
| --chevron-line-stroke: var(--color-gray-600); |
| --chevron-size: 12px; |
| --default-padding: 12px; |
| --env-item-background-color: var(--color-gray-100); |
| --env-item-font-size: 28px; |
| --env-item-line-height: 36px; |
| --env-item-padding: 10px 0px; |
| --env-name-min-width: 220px; |
| --footer-padding-vertical: 16px; |
| --gauge-circle-size-big: 112px; |
| --gauge-circle-size: 80px; |
| --gauge-label-font-size-big: 28px; |
| --gauge-label-font-size: 20px; |
| --gauge-label-line-height-big: 36px; |
| --gauge-label-line-height: 26px; |
| --gauge-percentage-font-size-big: 38px; |
| --gauge-percentage-font-size: 28px; |
| --gauge-wrapper-width: 148px; |
| --header-line-height: 24px; |
| --highlighter-background-color: var(--report-text-color); |
| --icon-square-size: calc(var(--score-icon-size) * 0.88); |
| --image-preview-size: 48px; |
| --metric-toggle-lines-fill: #7F7F7F; |
| --metrics-toggle-background-color: var(--color-gray-200); |
| --plugin-badge-background-color: var(--color-white); |
| --plugin-badge-size-big: calc(var(--gauge-circle-size-big) / 2.7); |
| --plugin-badge-size: calc(var(--gauge-circle-size) / 2.7); |
| --plugin-icon-size: 65%; |
| --pwa-icon-margin: 0 6px 0 -2px; |
| --pwa-icon-size: var(--topbar-logo-size); |
| --report-background-color: #fff; |
| --report-border-color-secondary: #ebebeb; |
| --report-font-family-monospace: 'Roboto Mono', 'Menlo', 'dejavu sans mono', 'Consolas', 'Lucida Console', monospace; |
| --report-font-family: Roboto, Helvetica, Arial, sans-serif; |
| --report-font-size: 16px; |
| --report-line-height: 24px; |
| --report-min-width: 400px; |
| --report-text-color-secondary: var(--color-gray-800); |
| --report-text-color: var(--color-gray-900); |
| --report-width: calc(60 * var(--report-font-size)); |
| --score-container-padding: 8px; |
| --score-icon-background-size: 24px; |
| --score-icon-margin-left: 4px; |
| --score-icon-margin-right: 12px; |
| --score-icon-margin: 0 var(--score-icon-margin-right) 0 var(--score-icon-margin-left); |
| --score-icon-size: 12px; |
| --scores-container-padding: 20px 0 20px 0; |
| --scorescale-height: 6px; |
| --scorescale-width: 18px; |
| --section-padding-vertical: 12px; |
| --snippet-background-color: var(--color-gray-50); |
| --snippet-color: var(--color-gray-800); |
| --sparkline-height: 5px; |
| --stackpack-padding-horizontal: 10px; |
| --sticky-header-background-color: var(--report-background-color); |
| --table-higlight-background-color: hsla(0, 0%, 75%, 0.1); |
| --tools-icon-color: var(--color-gray-600); |
| --tools-icon-size: var(--score-icon-background-size); |
| --topbar-background-color: var(--color-gray-100); |
| --topbar-height: 32px; |
| --topbar-logo-size: 24px; |
| --topbar-padding: 0 8px; |
| --toplevel-warning-padding: 22px; |
| |
| /* SVGs */ |
| --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>'); |
| --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>'); |
| |
| --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>'); |
| --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>'); |
| --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>'); |
| |
| --pwa-fast-reliable-gray-url: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg"><g fill="none" fill-rule="nonzero"><circle fill="%23DAE0E3" cx="12" cy="12" r="12"/><path d="M12.3 4l6.3 2.8V11c0 3.88-2.69 7.52-6.3 8.4C8.69 18.52 6 14.89 6 11V6.8L12.3 4zm-.56 12.88l3.3-5.79.04-.08c.05-.1.01-.29-.26-.29h-1.96l.56-3.92h-.56L9.6 12.52c0 .03.07-.12-.03.07-.11.2-.12.37.2.37h1.97l-.56 3.92h.56z" fill="%23FFF"/></g></svg>'); |
| --pwa-installable-gray-url: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg"><g fill="none" fill-rule="nonzero"><circle fill="%23DAE0E3" cx="12" cy="12" r="12"/><path d="M12 5a7 7 0 1 0 0 14 7 7 0 0 0 0-14zm3.5 7.7h-2.8v2.8h-1.4v-2.8H8.5v-1.4h2.8V8.5h1.4v2.8h2.8v1.4z" fill="%23FFF"/></g></svg>'); |
| --pwa-optimized-gray-url: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg"><g fill="none" fill-rule="evenodd"><rect fill="%23DAE0E3" width="24" height="24" rx="12"/><path fill="%23FFF" d="M12 15.07l3.6 2.18-.95-4.1 3.18-2.76-4.2-.36L12 6.17l-1.64 3.86-4.2.36 3.2 2.76-.96 4.1z"/><path d="M5 5h14v14H5z"/></g></svg>'); |
| |
| --pwa-fast-reliable-gray-url-dark: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg"><g fill="none" fill-rule="nonzero"><circle fill="%23424242" cx="12" cy="12" r="12"/><path d="M12.3 4l6.3 2.8V11c0 3.88-2.69 7.52-6.3 8.4C8.69 18.52 6 14.89 6 11V6.8L12.3 4zm-.56 12.88l3.3-5.79.04-.08c.05-.1.01-.29-.26-.29h-1.96l.56-3.92h-.56L9.6 12.52c0 .03.07-.12-.03.07-.11.2-.12.37.2.37h1.97l-.56 3.92h.56z" fill="%23FFF"/></g></svg>'); |
| --pwa-installable-gray-url-dark: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg"><g fill="none" fill-rule="nonzero"><circle fill="%23424242" cx="12" cy="12" r="12"/><path d="M12 5a7 7 0 1 0 0 14 7 7 0 0 0 0-14zm3.5 7.7h-2.8v2.8h-1.4v-2.8H8.5v-1.4h2.8V8.5h1.4v2.8h2.8v1.4z" fill="%23FFF"/></g></svg>'); |
| --pwa-optimized-gray-url-dark: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg"><g fill="none" fill-rule="evenodd"><rect fill="%23424242" width="24" height="24" rx="12"/><path fill="%23FFF" d="M12 15.07l3.6 2.18-.95-4.1 3.18-2.76-4.2-.36L12 6.17l-1.64 3.86-4.2.36 3.2 2.76-.96 4.1z"/><path d="M5 5h14v14H5z"/></g></svg>'); |
| |
| --pwa-fast-reliable-color-url: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg"><g fill-rule="nonzero" fill="none"><circle fill="%230CCE6B" cx="12" cy="12" r="12"/><path d="M12 4.3l6.3 2.8v4.2c0 3.88-2.69 7.52-6.3 8.4-3.61-.88-6.3-4.51-6.3-8.4V7.1L12 4.3zm-.56 12.88l3.3-5.79.04-.08c.05-.1.01-.29-.26-.29h-1.96l.56-3.92h-.56L9.3 12.82c0 .03.07-.12-.03.07-.11.2-.12.37.2.37h1.97l-.56 3.92h.56z" fill="%23FFF"/></g></svg>'); |
| --pwa-installable-color-url: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg"><g fill-rule="nonzero" fill="none"><circle fill="%230CCE6B" cx="12" cy="12" r="12"/><path d="M12 5a7 7 0 1 0 0 14 7 7 0 0 0 0-14zm3.5 7.7h-2.8v2.8h-1.4v-2.8H8.5v-1.4h2.8V8.5h1.4v2.8h2.8v1.4z" fill="%23FFF"/></g></svg>'); |
| --pwa-optimized-color-url: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg"><g fill="none" fill-rule="evenodd"><rect fill="%230CCE6B" width="24" height="24" rx="12"/><path d="M5 5h14v14H5z"/><path fill="%23FFF" d="M12 15.07l3.6 2.18-.95-4.1 3.18-2.76-4.2-.36L12 6.17l-1.64 3.86-4.2.36 3.2 2.76-.96 4.1z"/></g></svg>'); |
| } |
| |
| @media not print { |
| .lh-vars.dark { |
| /* Pallete */ |
| --color-gray-200: var(--color-gray-800); |
| --color-gray-400: var(--color-gray-600); |
| --color-gray-50: #757575; |
| --color-gray-600: var(--color-gray-500); |
| --color-green-700: var(--color-green); |
| --color-orange-700: var(--color-orange); |
| --color-red-700: var(--color-red); |
| --color-teal-600: var(--color-cyan-500); |
| |
| /* Context-specific colors */ |
| --color-hover: rgba(0, 0, 0, 0.2); |
| --color-informative: var(--color-blue-200); |
| |
| /* Component variables */ |
| --env-item-background-color: var(--color-gray); |
| --plugin-badge-background-color: var(--color-gray-800); |
| --report-background-color: var(--color-gray-900); |
| --report-border-color-secondary: var(--color-gray-200); |
| --report-text-color-secondary: var(--color-gray-400); |
| --report-text-color: var(--color-gray-100); |
| --topbar-background-color: var(--color-gray); |
| |
| /* SVGs */ |
| --plugin-icon-url: var(--plugin-icon-url-dark); |
| --pwa-fast-reliable-gray-url: var(--pwa-fast-reliable-gray-url-dark); |
| --pwa-installable-gray-url: var(--pwa-installable-gray-url-dark); |
| --pwa-optimized-gray-url: var(--pwa-optimized-gray-url-dark); |
| } |
| } |
| |
| @media only screen and (max-width: 480px) { |
| .lh-vars { |
| --audit-group-margin-bottom: 20px; |
| --category-padding: 24px; |
| --env-name-min-width: 120px; |
| --gauge-circle-size-big: 96px; |
| --gauge-circle-size: 72px; |
| --gauge-label-font-size-big: 22px; |
| --gauge-label-font-size: 14px; |
| --gauge-label-line-height-big: 26px; |
| --gauge-label-line-height: 20px; |
| --gauge-percentage-font-size-big: 34px; |
| --gauge-percentage-font-size: 26px; |
| --gauge-wrapper-width: 112px; |
| --header-padding: 16px 0 16px 0; |
| --image-preview-size: 24px; |
| --plugin-icon-size: 75%; |
| --pwa-icon-margin: 0 7px 0 -3px; |
| --report-font-size: 14px; |
| --report-line-height: 20px; |
| --score-icon-margin-left: 2px; |
| --score-icon-size: 10px; |
| --topbar-height: 28px; |
| --topbar-logo-size: 20px; |
| } |
| |
| /* Not enough space to adequately show the relative savings bars. */ |
| .lh-sparkline { |
| display: none; |
| } |
| } |
| |
| .lh-vars.lh-devtools { |
| --audit-explanation-line-height: 14px; |
| --audit-group-margin-bottom: 20px; |
| --audit-group-padding-vertical: 12px; |
| --audit-padding-vertical: 4px; |
| --category-header-font-size: 16px; |
| --category-padding: 12px; |
| --default-padding: 12px; |
| --env-name-min-width: 120px; |
| --footer-padding-vertical: 8px; |
| --gauge-circle-size-big: 72px; |
| --gauge-circle-size: 64px; |
| --gauge-label-font-size-big: 22px; |
| --gauge-label-font-size: 14px; |
| --gauge-label-line-height-big: 26px; |
| --gauge-label-line-height: 20px; |
| --gauge-percentage-font-size-big: 34px; |
| --gauge-percentage-font-size: 26px; |
| --gauge-wrapper-width: 97px; |
| --header-line-height: 20px; |
| --header-padding: 16px 0 16px 0; |
| --plugin-icon-size: 75%; |
| --pwa-icon-margin: 0 7px 0 -3px; |
| --report-font-family-monospace: 'Menlo', 'dejavu sans mono', 'Consolas', 'Lucida Console', monospace; |
| --report-font-family: '.SFNSDisplay-Regular', 'Helvetica Neue', 'Lucida Grande', sans-serif; |
| --report-font-size: 12px; |
| --report-line-height: 20px; |
| --score-icon-margin-left: 2px; |
| --score-icon-size: 10px; |
| --section-padding-vertical: 8px; |
| } |
| |
| .lh-devtools.lh-root { |
| height: 100%; |
| } |
| .lh-devtools.lh-root img { |
| /* Override devtools default 'min-width: 0' so svg without size in a flexbox isn't collapsed. */ |
| min-width: auto; |
| } |
| .lh-devtools .lh-container { |
| overflow-y: scroll; |
| height: calc(100% - var(--topbar-height)); |
| } |
| @media print { |
| .lh-devtools .lh-container { |
| overflow: unset; |
| } |
| } |
| .lh-devtools .lh-sticky-header { |
| /* This is normally the height of the topbar, but we want it to stick to the top of our scroll container .lh-container` */ |
| top: 0; |
| } |
| |
| @keyframes fadeIn { |
| 0% { opacity: 0;} |
| 100% { opacity: 0.6;} |
| } |
| |
| .lh-root *, .lh-root *::before, .lh-root *::after { |
| box-sizing: border-box; |
| -webkit-font-smoothing: antialiased; |
| } |
| |
| .lh-root { |
| font-family: var(--report-font-family); |
| font-size: var(--report-font-size); |
| margin: 0; |
| line-height: var(--report-line-height); |
| background: var(--report-background-color); |
| scroll-behavior: smooth; |
| color: var(--report-text-color); |
| } |
| |
| .lh-root :focus { |
| outline: -webkit-focus-ring-color auto 3px; |
| } |
| .lh-root summary:focus { |
| outline: none; |
| box-shadow: 0 0 0 1px hsl(217, 89%, 61%); |
| } |
| |
| .lh-root [hidden] { |
| display: none !important; |
| } |
| |
| .lh-root details > summary { |
| cursor: pointer; |
| } |
| |
| .lh-container { |
| /* |
| Text wrapping in the report is so much FUN! |
| We have a `word-break: break-word;` globally here to prevent a few common scenarios, namely |
| long non-breakable text (usually URLs) found in: |
| 1. The footer |
| 2. .lh-node (outerHTML) |
| 3. .lh-code |
| |
| With that sorted, the next challenge is appropriate column sizing and text wrapping inside our |
| .lh-details tables. Even more fun. |
| * We don't want table headers ("Potential Savings (ms)") to wrap or their column values, but |
| we'd be happy for the URL column to wrap if the URLs are particularly long. |
| * We want the narrow columns to remain narrow, providing the most column width for URL |
| * We don't want the table to extend past 100% width. |
| * Long URLs in the URL column can wrap. Util.getURLDisplayName maxes them out at 64 characters, |
| but they do not get any overflow:ellipsis treatment. |
| */ |
| word-break: break-word; |
| } |
| |
| .lh-audit-group a, |
| .lh-category-header__description a, |
| .lh-audit__description a, |
| .lh-footer a { |
| color: var(--color-informative); |
| } |
| |
| .lh-audit__description, .lh-audit__stackpack { |
| --inner-audit-padding-right: var(--stackpack-padding-horizontal); |
| padding-left: var(--audit-description-padding-left); |
| padding-right: var(--inner-audit-padding-right); |
| padding-top: 8px; |
| padding-bottom: 8px; |
| } |
| |
| .lh-details { |
| font-size: var(--report-font-size); |
| margin-top: var(--default-padding); |
| margin-bottom: var(--default-padding); |
| margin-left: var(--audit-description-padding-left); |
| /* whatever the .lh-details side margins are */ |
| width: 100%; |
| } |
| |
| .lh-details.flex .lh-code { |
| max-width: 70%; |
| } |
| |
| .lh-audit__stackpack { |
| display: flex; |
| align-items: center; |
| } |
| |
| .lh-audit__stackpack__img { |
| max-width: 50px; |
| margin-right: var(--default-padding) |
| } |
| |
| /* Report header */ |
| |
| .report-icon { |
| opacity: 0.7; |
| } |
| .report-icon:hover { |
| opacity: 1; |
| } |
| .report-icon[disabled] { |
| opacity: 0.3; |
| pointer-events: none; |
| } |
| |
| .report-icon--print { |
| 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>'); |
| } |
| .report-icon--copy { |
| 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>'); |
| } |
| .report-icon--open { |
| 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>'); |
| } |
| .report-icon--download { |
| 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>'); |
| } |
| .report-icon--dark { |
| 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>'); |
| } |
| |
| /* Node */ |
| .lh-node__snippet { |
| font-family: var(--report-font-family-monospace); |
| color: var(--color-teal-600); |
| font-size: 12px; |
| line-height: 1.5em; |
| } |
| |
| /* Score */ |
| |
| .lh-audit__score-icon { |
| width: var(--score-icon-size); |
| height: var(--score-icon-size); |
| margin: var(--score-icon-margin); |
| } |
| |
| .lh-audit--pass .lh-audit__display-text { |
| color: var(--color-pass-secondary); |
| } |
| .lh-audit--pass .lh-audit__score-icon { |
| border-radius: 100%; |
| background: var(--color-pass); |
| } |
| |
| .lh-audit--average .lh-audit__display-text { |
| color: var(--color-average-secondary); |
| } |
| .lh-audit--average .lh-audit__score-icon { |
| background: var(--color-average); |
| width: var(--icon-square-size); |
| height: var(--icon-square-size); |
| } |
| |
| .lh-audit--fail .lh-audit__display-text { |
| color: var(--color-fail-secondary); |
| } |
| .lh-audit--fail .lh-audit__score-icon, |
| .lh-audit--error .lh-audit__score-icon { |
| border-left: calc(var(--score-icon-size) / 2) solid transparent; |
| border-right: calc(var(--score-icon-size) / 2) solid transparent; |
| border-bottom: var(--score-icon-size) solid var(--color-fail); |
| } |
| |
| .lh-audit--manual .lh-audit__display-text, |
| .lh-audit--notapplicable .lh-audit__display-text { |
| color: var(--color-gray-600); |
| } |
| .lh-audit--manual .lh-audit__score-icon, |
| .lh-audit--notapplicable .lh-audit__score-icon { |
| border-radius: 100%; |
| background: var(--color-gray-400); |
| } |
| |
| .lh-audit--informative .lh-audit__display-text { |
| color: var(--color-gray-600); |
| } |
| |
| .lh-audit--informative .lh-audit__score-icon { |
| border: none; |
| border-radius: 100%; |
| background: var(--color-gray-400); |
| } |
| |
| .lh-audit__description, |
| .lh-audit__stackpack { |
| color: var(--report-text-color-secondary); |
| } |
| .lh-category-header__description { |
| font-size: var(--report-font-size); |
| text-align: center; |
| margin: 0px auto; |
| max-width: 400px; |
| } |
| |
| |
| .lh-audit__display-text, |
| .lh-load-opportunity__sparkline, |
| .lh-chevron-container { |
| margin: 0 var(--audit-margin-horizontal); |
| } |
| .lh-chevron-container { |
| margin-right: 0; |
| } |
| |
| .lh-audit__title-and-text { |
| flex: 1; |
| } |
| |
| /* Prepend display text with em dash separator. But not in Opportunities. */ |
| .lh-audit__display-text:not(:empty):before { |
| content: '—'; |
| margin-right: var(--audit-margin-horizontal); |
| } |
| .lh-audit-group.lh-audit-group--load-opportunities .lh-audit__display-text:not(:empty):before { |
| display: none; |
| } |
| |
| /* Expandable Details (Audit Groups, Audits) */ |
| .lh-audit__header { |
| display: flex; |
| align-items: center; |
| font-weight: 500; |
| padding: var(--audit-padding-vertical) 0; |
| } |
| |
| .lh-audit--load-opportunity .lh-audit__header { |
| display: block; |
| } |
| |
| .lh-audit__header:hover { |
| background-color: var(--color-hover); |
| } |
| |
| /* Hide the expandable arrow icon, three ways: via the CSS Counter Styles spec, for webkit/blink browsers, hiding the polyfilled icon */ |
| /* https://github.com/javan/details-element-polyfill/blob/master/src/details-element-polyfill/polyfill.sass */ |
| .lh-audit-group > summary, |
| .lh-expandable-details > summary { |
| list-style-type: none; |
| } |
| .lh-audit-group > summary::-webkit-details-marker, |
| .lh-expandable-details > summary::-webkit-details-marker { |
| display: none; |
| } |
| .lh-audit-group > summary:before, |
| .lh-expandable-details > summary:before { |
| display: none; |
| } |
| |
| |
| /* Perf Metric */ |
| |
| .lh-columns { |
| display: flex; |
| width: 100%; |
| } |
| @media screen and (max-width: 640px) { |
| .lh-columns { |
| flex-wrap: wrap; |
| |
| } |
| } |
| |
| .lh-column { |
| flex: 1; |
| } |
| .lh-column:first-of-type { |
| margin-right: 24px; |
| } |
| |
| @media screen and (max-width: 800px) { |
| .lh-column:first-of-type { |
| margin-right: 8px; |
| } |
| } |
| @media screen and (max-width: 640px) { |
| .lh-column { |
| flex-basis: 100%; |
| } |
| .lh-column:first-of-type { |
| margin-right: 0px; |
| } |
| .lh-column:first-of-type .lh-metric:last-of-type { |
| border-bottom: 0; |
| } |
| } |
| |
| |
| .lh-metric { |
| border-bottom: 1px solid var(--report-border-color-secondary); |
| } |
| .lh-metric:first-of-type { |
| border-top: 1px solid var(--report-border-color-secondary); |
| } |
| |
| .lh-metric__innerwrap { |
| display: grid; |
| grid-template-columns: var(--audit-description-padding-left) 10fr 3fr; |
| align-items: center; |
| padding: 10px 0; |
| } |
| |
| .lh-metric__details { |
| order: -1; |
| } |
| |
| .lh-metric__title { |
| flex: 1; |
| font-weight: 500; |
| } |
| |
| .lh-metrics__disclaimer { |
| color: var(--color-gray-600); |
| margin: var(--section-padding-vertical) 0; |
| } |
| .lh-metrics__disclaimer a { |
| color: var(--color-gray-700); |
| } |
| |
| .lh-metric__description { |
| display: none; |
| grid-column-start: 2; |
| grid-column-end: 3; |
| color: var(--report-text-color-secondary); |
| } |
| |
| .lh-metric__value { |
| white-space: nowrap; /* No wrapping between metric value and the icon */ |
| font-weight: 500; |
| justify-self: end; |
| } |
| |
| /* No-JS toggle switch */ |
| /* Keep this selector sync'd w/ `magicSelector` in report-ui-features-test.js */ |
| .lh-metrics-toggle__input:checked ~ .lh-columns .lh-metric__description { |
| display: block; |
| } |
| |
| .lh-metrics-toggle__input { |
| cursor: pointer; |
| opacity: 0; |
| position: absolute; |
| right: 0; |
| width: 74px; |
| height: 28px; |
| top: -3px; |
| } |
| .lh-metrics-toggle__label { |
| display: flex; |
| background-color: #eee; |
| border-radius: 20px; |
| overflow: hidden; |
| position: absolute; |
| right: 0; |
| top: -3px; |
| pointer-events: none; |
| } |
| .lh-metrics-toggle__input:focus + label { |
| outline: -webkit-focus-ring-color auto 3px; |
| } |
| .lh-metrics-toggle__icon { |
| display: flex; |
| align-items: center; |
| justify-content: center; |
| padding: 2px 5px; |
| width: 50%; |
| height: 28px; |
| } |
| .lh-metrics-toggle__input:not(:checked) + label .lh-metrics-toggle__icon--less, |
| .lh-metrics-toggle__input:checked + label .lh-metrics-toggle__icon--more { |
| background-color: var(--color-blue-A700); |
| --metric-toggle-lines-fill: var(--color-white); |
| } |
| .lh-metrics-toggle__lines { |
| fill: var(--metric-toggle-lines-fill); |
| } |
| |
| .lh-metrics-toggle__label { |
| background-color: var(--metrics-toggle-background-color); |
| } |
| |
| .lh-metrics-toggle__label .lh-metrics-toggle__icon--less { |
| padding-left: 8px; |
| } |
| .lh-metrics-toggle__label .lh-metrics-toggle__icon--more { |
| padding-right: 8px; |
| } |
| |
| /* Pushes the metric description toggle button to the right. */ |
| .lh-audit-group--metrics .lh-audit-group__header { |
| display: flex; |
| } |
| .lh-audit-group--metrics .lh-audit-group__header span.lh-audit-group__title { |
| flex: 1; |
| } |
| |
| .lh-metric .lh-metric__innerwrap::before { |
| content: ''; |
| width: var(--score-icon-size); |
| height: var(--score-icon-size); |
| display: inline-block; |
| margin: var(--score-icon-margin); |
| } |
| |
| .lh-metric--pass .lh-metric__value { |
| color: var(--color-pass-secondary); |
| } |
| .lh-metric--pass .lh-metric__innerwrap::before { |
| border-radius: 100%; |
| background: var(--color-pass); |
| } |
| |
| .lh-metric--average .lh-metric__value { |
| color: var(--color-average-secondary); |
| } |
| .lh-metric--average .lh-metric__innerwrap::before { |
| background: var(--color-average); |
| width: var(--icon-square-size); |
| height: var(--icon-square-size); |
| } |
| |
| .lh-metric--fail .lh-metric__value { |
| color: var(--color-fail-secondary); |
| } |
| .lh-metric--fail .lh-metric__innerwrap::before, |
| .lh-metric--error .lh-metric__innerwrap::before { |
| border-left: calc(var(--score-icon-size) / 2) solid transparent; |
| border-right: calc(var(--score-icon-size) / 2) solid transparent; |
| border-bottom: var(--score-icon-size) solid var(--color-fail); |
| } |
| |
| .lh-metric--error .lh-metric__value, |
| .lh-metric--error .lh-metric__description { |
| color: var(--color-fail-secondary); |
| } |
| |
| /* Perf load opportunity */ |
| |
| .lh-load-opportunity__cols { |
| display: flex; |
| align-items: flex-start; |
| } |
| |
| .lh-load-opportunity__header .lh-load-opportunity__col { |
| color: var(--color-gray-600); |
| display: unset; |
| line-height: calc(2.3 * var(--report-font-size)); |
| } |
| |
| .lh-load-opportunity__col { |
| display: flex; |
| } |
| |
| .lh-load-opportunity__col--one { |
| flex: 5; |
| align-items: center; |
| margin-right: 2px; |
| } |
| .lh-load-opportunity__col--two { |
| flex: 4; |
| text-align: right; |
| } |
| |
| .lh-audit--load-opportunity .lh-audit__display-text { |
| text-align: right; |
| flex: 0 0 calc(3 * var(--report-font-size)); |
| } |
| |
| |
| /* Sparkline */ |
| |
| .lh-load-opportunity__sparkline { |
| flex: 1; |
| margin-top: calc((var(--report-line-height) - var(--sparkline-height)) / 2); |
| } |
| |
| .lh-sparkline { |
| height: var(--sparkline-height); |
| width: 100%; |
| } |
| |
| .lh-sparkline__bar { |
| height: 100%; |
| float: right; |
| } |
| |
| .lh-audit--pass .lh-sparkline__bar { |
| background: var(--color-pass); |
| } |
| |
| .lh-audit--average .lh-sparkline__bar { |
| background: var(--color-average); |
| } |
| |
| .lh-audit--fail .lh-sparkline__bar { |
| background: var(--color-fail); |
| } |
| |
| |
| |
| /* Filmstrip */ |
| |
| .lh-filmstrip-container { |
| /* smaller gap between metrics and filmstrip */ |
| margin: -8px auto 0 auto; |
| } |
| |
| .lh-filmstrip { |
| display: flex; |
| flex-direction: row; |
| justify-content: space-between; |
| padding-bottom: var(--default-padding); |
| } |
| |
| .lh-filmstrip__frame { |
| text-align: right; |
| position: relative; |
| } |
| |
| .lh-filmstrip__thumbnail { |
| border: 1px solid var(--report-border-color-secondary); |
| max-height: 100px; |
| max-width: 60px; |
| } |
| |
| @media screen and (max-width: 750px) { |
| .lh-filmstrip { |
| flex-wrap: wrap; |
| } |
| .lh-filmstrip__frame { |
| width: 20%; |
| margin-bottom: 5px; |
| } |
| .lh-filmstrip__thumbnail { |
| display: block; |
| margin: auto; |
| } |
| } |
| |
| /* Audit */ |
| |
| .lh-audit { |
| border-bottom: 1px solid var(--report-border-color-secondary); |
| } |
| |
| /* Apply border-top to just the first audit. */ |
| .lh-audit { |
| border-top: 1px solid var(--report-border-color-secondary); |
| } |
| .lh-audit ~ .lh-audit { |
| border-top: none; |
| } |
| |
| |
| .lh-audit--error .lh-audit__display-text { |
| color: var(--color-fail); |
| } |
| |
| /* Audit Group */ |
| |
| .lh-audit-group { |
| margin-bottom: var(--audit-group-margin-bottom); |
| position: relative; |
| } |
| |
| .lh-audit-group__header::before { |
| /* By default, groups don't get an icon */ |
| content: none; |
| width: var(--pwa-icon-size); |
| height: var(--pwa-icon-size); |
| margin: var(--pwa-icon-margin); |
| display: inline-block; |
| vertical-align: middle; |
| } |
| |
| /* Style the "over budget" columns red. */ |
| .lh-audit-group--budgets .lh-table tbody tr td:nth-child(4), |
| .lh-audit-group--budgets .lh-table tbody tr td:nth-child(5){ |
| color: var(--color-red-700); |
| } |
| |
| /* Align the "over budget request count" text to be close to the "over budget bytes" column. */ |
| .lh-audit-group--budgets .lh-table tbody tr td:nth-child(4){ |
| text-align: right; |
| } |
| |
| .lh-audit-group--budgets .lh-table { |
| width: 100%; |
| } |
| |
| .lh-audit-group--pwa-fast-reliable .lh-audit-group__header::before { |
| content: ''; |
| background-image: var(--pwa-fast-reliable-gray-url); |
| } |
| .lh-audit-group--pwa-installable .lh-audit-group__header::before { |
| content: ''; |
| background-image: var(--pwa-installable-gray-url); |
| } |
| .lh-audit-group--pwa-optimized .lh-audit-group__header::before { |
| content: ''; |
| background-image: var(--pwa-optimized-gray-url); |
| } |
| .lh-audit-group--pwa-fast-reliable.lh-badged .lh-audit-group__header::before { |
| background-image: var(--pwa-fast-reliable-color-url); |
| } |
| .lh-audit-group--pwa-installable.lh-badged .lh-audit-group__header::before { |
| background-image: var(--pwa-installable-color-url); |
| } |
| .lh-audit-group--pwa-optimized.lh-badged .lh-audit-group__header::before { |
| background-image: var(--pwa-optimized-color-url); |
| } |
| |
| .lh-audit-group--metrics .lh-audit-group__summary { |
| margin-top: 0; |
| margin-bottom: 0; |
| } |
| |
| .lh-audit-group__summary { |
| display: flex; |
| justify-content: space-between; |
| margin-top: calc(var(--category-padding) * 1.5); |
| margin-bottom: var(--category-padding); |
| } |
| |
| .lh-audit-group__itemcount { |
| color: var(--color-gray-600); |
| font-weight: bold; |
| } |
| .lh-audit-group__header .lh-chevron { |
| margin-top: calc((var(--report-line-height) - 5px) / 2); |
| } |
| |
| .lh-audit-group__header { |
| font-size: var(--report-font-size); |
| margin: 0 0 var(--audit-group-padding-vertical); |
| /* When the header takes 100% width, the chevron becomes small. */ |
| max-width: calc(100% - var(--chevron-size)); |
| } |
| /* max-width makes the metric toggle not flush. metrics doesn't have a chevron so unset. */ |
| .lh-audit-group--metrics .lh-audit-group__header { |
| max-width: unset; |
| } |
| |
| .lh-audit-group__header span.lh-audit-group__title { |
| font-weight: bold; |
| } |
| |
| .lh-audit-group__header span.lh-audit-group__itemcount { |
| font-weight: bold; |
| color: var(--color-gray-600); |
| } |
| |
| .lh-audit-group__header span.lh-audit-group__description { |
| font-weight: 500; |
| color: var(--color-gray-600); |
| } |
| .lh-audit-group__header span.lh-audit-group__description::before { |
| content: '—'; |
| margin: 0px var(--audit-margin-horizontal); |
| } |
| |
| .lh-clump > .lh-audit-group__header, |
| .lh-audit-group--diagnostics .lh-audit-group__header, |
| .lh-audit-group--load-opportunities .lh-audit-group__header, |
| .lh-audit-group--metrics .lh-audit-group__header, |
| .lh-audit-group--pwa-fast-reliable .lh-audit-group__header, |
| .lh-audit-group--pwa-installable .lh-audit-group__header, |
| .lh-audit-group--pwa-optimized .lh-audit-group__header { |
| margin-top: var(--audit-group-padding-vertical); |
| } |
| |
| .lh-audit-explanation { |
| margin: var(--audit-padding-vertical) 0 calc(var(--audit-padding-vertical) / 2) var(--audit-margin-horizontal); |
| line-height: var(--audit-explanation-line-height); |
| display: inline-block; |
| } |
| |
| .lh-audit--fail .lh-audit-explanation { |
| color: var(--color-fail); |
| } |
| |
| /* Report */ |
| .lh-list > div:not(:last-child) { |
| padding-bottom: 20px; |
| } |
| |
| .lh-header-container { |
| display: block; |
| margin: 0 auto; |
| position: relative; |
| word-wrap: break-word; |
| } |
| |
| .lh-report { |
| min-width: var(--report-min-width); |
| } |
| |
| .lh-exception { |
| font-size: large; |
| } |
| |
| .lh-code { |
| white-space: normal; |
| margin-top: 0; |
| font-size: 85%; |
| } |
| |
| .lh-warnings { |
| --item-margin: calc(var(--report-line-height) / 6); |
| color: var(--color-average); |
| margin: var(--audit-padding-vertical) 0; |
| padding: calc(var(--audit-padding-vertical) / 2) var(--audit-padding-vertical); |
| } |
| .lh-warnings span { |
| font-weight: bold; |
| } |
| |
| .lh-warnings--toplevel { |
| --item-margin: calc(var(--header-line-height) / 4); |
| color: var(--report-text-color-secondary); |
| margin-left: auto; |
| margin-right: auto; |
| max-width: calc(var(--report-width) - var(--category-padding) * 2); |
| background-color: var(--color-amber-50); |
| padding: var(--toplevel-warning-padding); |
| } |
| |
| .lh-warnings ul { |
| padding-left: calc(var(--category-padding) * 2); |
| margin: 0; |
| } |
| .lh-warnings li { |
| margin: var(--item-margin) 0; |
| } |
| .lh-warnings li:last-of-type { |
| margin-bottom: 0; |
| } |
| |
| .lh-scores-header { |
| display: flex; |
| flex-wrap: wrap; |
| justify-content: center; |
| } |
| .lh-scores-header__solo { |
| padding: 0; |
| border: 0; |
| } |
| |
| /* Gauge */ |
| |
| .lh-gauge__wrapper--pass { |
| color: var(--color-pass); |
| fill: var(--color-pass); |
| stroke: var(--color-pass); |
| } |
| |
| .lh-gauge__wrapper--average { |
| color: var(--color-average); |
| fill: var(--color-average); |
| stroke: var(--color-average); |
| } |
| |
| .lh-gauge__wrapper--fail { |
| color: var(--color-fail); |
| fill: var(--color-fail); |
| stroke: var(--color-fail); |
| } |
| |
| .lh-gauge { |
| stroke-linecap: round; |
| width: var(--gauge-circle-size); |
| height: var(--gauge-circle-size); |
| } |
| |
| .lh-category .lh-gauge { |
| --gauge-circle-size: var(--gauge-circle-size-big); |
| } |
| |
| .lh-gauge-base { |
| opacity: 0.1; |
| stroke: var(--circle-background); |
| stroke-width: var(--circle-border-width); |
| } |
| |
| .lh-gauge-arc { |
| fill: none; |
| stroke: var(--circle-color); |
| stroke-width: var(--circle-border-width); |
| animation: load-gauge var(--transition-length) ease forwards; |
| animation-delay: 250ms; |
| } |
| |
| .lh-gauge__svg-wrapper { |
| position: relative; |
| height: var(--gauge-circle-size); |
| } |
| .lh-category .lh-gauge__svg-wrapper { |
| --gauge-circle-size: var(--gauge-circle-size-big); |
| } |
| |
| /* The plugin badge overlay */ |
| .lh-gauge__wrapper--plugin .lh-gauge__svg-wrapper::before { |
| width: var(--plugin-badge-size); |
| height: var(--plugin-badge-size); |
| background-color: var(--plugin-badge-background-color); |
| background-image: var(--plugin-icon-url); |
| background-repeat: no-repeat; |
| background-size: var(--plugin-icon-size); |
| background-position: 58% 50%; |
| content: ""; |
| position: absolute; |
| right: -6px; |
| bottom: 0px; |
| display: block; |
| z-index: 100; |
| box-shadow: 0 0 4px rgba(0,0,0,.2); |
| border-radius: 25%; |
| } |
| .lh-category .lh-gauge__wrapper--plugin .lh-gauge__svg-wrapper::before { |
| width: var(--plugin-badge-size-big); |
| height: var(--plugin-badge-size-big); |
| } |
| |
| @keyframes load-gauge { |
| from { stroke-dasharray: 0 352; } |
| } |
| |
| .lh-gauge__percentage { |
| width: 100%; |
| height: var(--gauge-circle-size); |
| position: absolute; |
| font-family: var(--report-font-family-monospace); |
| font-size: calc(var(--gauge-circle-size) * 0.34 + 1.3px); |
| line-height: 0; |
| text-align: center; |
| top: calc(var(--score-container-padding) + var(--gauge-circle-size) / 2); |
| } |
| |
| .lh-category .lh-gauge__percentage { |
| --gauge-circle-size: var(--gauge-circle-size-big); |
| --gauge-percentage-font-size: var(--gauge-percentage-font-size-big); |
| } |
| |
| .lh-gauge__wrapper { |
| position: relative; |
| display: flex; |
| align-items: center; |
| flex-direction: column; |
| text-decoration: none; |
| padding: var(--score-container-padding); |
| |
| --circle-border-width: 8; |
| --transition-length: 1s; |
| |
| /* Contain the layout style paint & layers during animation*/ |
| contain: content; |
| will-change: opacity; /* Only using for layer promotion */ |
| } |
| |
| .lh-gauge__label { |
| font-size: var(--gauge-label-font-size); |
| line-height: var(--gauge-label-line-height); |
| margin-top: 10px; |
| text-align: center; |
| color: var(--report-text-color); |
| } |
| |
| /* TODO(#8185) use more BEM (.lh-gauge__label--big) instead of relying on descendant selector */ |
| .lh-category .lh-gauge__label { |
| --gauge-label-font-size: var(--gauge-label-font-size-big); |
| --gauge-label-line-height: var(--gauge-label-line-height-big); |
| margin-top: 14px; |
| } |
| |
| |
| .lh-scores-header .lh-gauge__wrapper, |
| .lh-scores-header .lh-gauge--pwa__wrapper, |
| .lh-sticky-header .lh-gauge__wrapper, |
| .lh-sticky-header .lh-gauge--pwa__wrapper { |
| width: var(--gauge-wrapper-width); |
| } |
| |
| .lh-scorescale { |
| display: inline-flex; |
| margin: 12px auto 0 auto; |
| border: 1px solid var(--color-gray-200); |
| border-radius: 20px; |
| padding: 8px 8px; |
| } |
| |
| .lh-scorescale-range { |
| display: flex; |
| align-items: center; |
| margin: 0 12px; |
| font-family: var(--report-font-family-monospace); |
| white-space: nowrap; |
| } |
| |
| .lh-scorescale-range::before { |
| content: ''; |
| width: var(--scorescale-width); |
| height: var(--scorescale-height); |
| border-radius: 10px; |
| display: block; |
| margin-right: 10px; |
| } |
| |
| .lh-scorescale-range--pass::before { |
| background-color: var(--color-pass); |
| } |
| |
| .lh-scorescale-range--average::before { |
| background-color: var(--color-average); |
| } |
| |
| .lh-scorescale-range--fail::before { |
| background-color: var(--color-fail); |
| } |
| |
| /* Hide category score gauages if it's a single category report */ |
| .lh-header--solo-category .lh-scores-wrapper { |
| display: none; |
| } |
| |
| |
| .lh-categories { |
| width: 100%; |
| overflow: hidden; |
| } |
| |
| .lh-category { |
| padding: var(--category-padding); |
| max-width: var(--report-width); |
| margin: 0 auto; |
| } |
| |
| .lh-category-wrapper { |
| border-bottom: 1px solid var(--color-gray-200); |
| } |
| |
| .lh-category-wrapper:first-of-type { |
| border-top: 1px solid var(--color-gray-200); |
| } |
| |
| /* section hash link jump should preserve fixed header |
| https://css-tricks.com/hash-tag-links-padding/ |
| */ |
| .lh-category > .lh-permalink { |
| --sticky-header-height: calc(var(--gauge-circle-size) + var(--score-container-padding) * 2); |
| --topbar-plus-header: calc(var(--topbar-height) + var(--sticky-header-height)); |
| margin-top: calc(var(--topbar-plus-header) * -1); |
| padding-bottom: var(--topbar-plus-header); |
| display: block; |
| visibility: hidden; |
| } |
| |
| .lh-category-header { |
| font-size: var(--category-header-font-size); |
| min-height: var(--gauge-circle-size); |
| margin-bottom: var(--section-padding-vertical); |
| } |
| |
| .lh-category-header .lh-score__gauge { |
| max-width: 400px; |
| width: auto; |
| margin: 0px auto; |
| } |
| |
| .lh-category-header .lh-audit__title { |
| font-size: var(--category-header-font-size); |
| line-height: var(--header-line-height); |
| } |
| |
| #lh-log { |
| position: fixed; |
| background-color: #323232; |
| color: #fff; |
| min-height: 48px; |
| min-width: 288px; |
| padding: 16px 24px; |
| box-shadow: 0 2px 5px 0 rgba(0, 0, 0, 0.26); |
| border-radius: 2px; |
| margin: 12px; |
| font-size: 14px; |
| cursor: default; |
| transition: transform 0.3s, opacity 0.3s; |
| transform: translateY(100px); |
| opacity: 0; |
| bottom: 0; |
| left: 0; |
| z-index: 3; |
| } |
| |
| #lh-log.show { |
| opacity: 1; |
| transform: translateY(0); |
| } |
| |
| /* 964 fits the min-width of the filmstrip */ |
| @media screen and (max-width: 964px) { |
| .lh-report { |
| margin-left: 0; |
| width: 100%; |
| } |
| } |
| |
| @media print { |
| body { |
| -webkit-print-color-adjust: exact; /* print background colors */ |
| } |
| .lh-container { |
| display: block; |
| } |
| .lh-report { |
| margin-left: 0; |
| padding-top: 0; |
| } |
| .lh-categories { |
| margin-top: 0; |
| } |
| } |
| |
| .lh-table { |
| border-collapse: collapse; |
| /* Can't assign padding to table, so shorten the width instead. */ |
| width: calc(100% - var(--audit-description-padding-left)); |
| } |
| |
| .lh-table thead th { |
| font-weight: normal; |
| color: var(--color-gray-600); |
| /* See text-wrapping comment on .lh-container. */ |
| word-break: normal; |
| } |
| |
| .lh-table tbody tr:nth-child(odd) { |
| background-color: var(--table-higlight-background-color); |
| } |
| |
| .lh-table th, |
| .lh-table td { |
| padding: 8px 6px; |
| } |
| .lh-table th:first-child { |
| padding-left: 0; |
| } |
| .lh-table th:last-child { |
| padding-right: 0; |
| } |
| |
| /* Looks unnecessary, but mostly for keeping the <th>s left-aligned */ |
| .lh-table-column--text, |
| .lh-table-column--url, |
| /* .lh-table-column--thumbnail, */ |
| /* .lh-table-column--empty,*/ |
| .lh-table-column--code, |
| .lh-table-column--node { |
| text-align: left; |
| } |
| |
| .lh-table-column--bytes, |
| .lh-table-column--timespanMs, |
| .lh-table-column--ms, |
| .lh-table-column--numeric { |
| text-align: right; |
| word-break: normal; |
| } |
| |
| |
| |
| .lh-table .lh-table-column--thumbnail { |
| width: var(--image-preview-size); |
| padding: 0; |
| } |
| |
| .lh-table-column--url { |
| min-width: 250px; |
| } |
| |
| /* Keep columns narrow if they follow the URL column */ |
| /* 12% was determined to be a decent narrow width, but wide enough for column headings */ |
| .lh-table-column--url + th.lh-table-column--bytes, |
| .lh-table-column--url + .lh-table-column--bytes + th.lh-table-column--bytes, |
| .lh-table-column--url + .lh-table-column--ms, |
| .lh-table-column--url + .lh-table-column--ms + th.lh-table-column--bytes, |
| .lh-table-column--url + .lh-table-column--bytes + th.lh-table-column--timespanMs { |
| width: 12%; |
| } |
| |
| |
| .lh-text__url-host { |
| display: inline; |
| } |
| |
| .lh-text__url-host { |
| margin-left: calc(var(--report-font-size) / 2); |
| opacity: 0.6; |
| font-size: 90% |
| } |
| |
| .lh-thumbnail { |
| object-fit: cover; |
| width: var(--image-preview-size); |
| height: var(--image-preview-size); |
| display: block; |
| } |
| |
| .lh-unknown pre { |
| overflow: scroll; |
| border: solid 1px var(--color-gray-200); |
| } |
| |
| .lh-text__url > a { |
| color: inherit; |
| text-decoration: none; |
| } |
| |
| .lh-text__url > a:hover { |
| text-decoration: underline dotted #999; |
| } |
| |
| /* Chevron |
| https://codepen.io/paulirish/pen/LmzEmK |
| */ |
| .lh-chevron { |
| --chevron-angle: 42deg; |
| /* Edge doesn't support transform: rotate(calc(...)), so we define it here */ |
| --chevron-angle-right: -42deg; |
| width: var(--chevron-size); |
| height: var(--chevron-size); |
| margin-top: calc((var(--report-line-height) - 12px) / 2); |
| } |
| |
| .lh-chevron__lines { |
| transition: transform 0.4s; |
| transform: translateY(var(--report-line-height)); |
| } |
| .lh-chevron__line { |
| stroke: var(--chevron-line-stroke); |
| stroke-width: var(--chevron-size); |
| stroke-linecap: square; |
| transform-origin: 50%; |
| transform: rotate(var(--chevron-angle)); |
| transition: transform 300ms, stroke 300ms; |
| } |
| |
| .lh-audit-group > summary > .lh-audit-group__summary > .lh-chevron .lh-chevron__line-right, |
| .lh-audit-group[open] > summary > .lh-audit-group__summary > .lh-chevron .lh-chevron__line-left, |
| .lh-audit > .lh-expandable-details .lh-chevron__line-right, |
| .lh-audit > .lh-expandable-details[open] .lh-chevron__line-left { |
| transform: rotate(var(--chevron-angle-right)); |
| } |
| |
| .lh-audit-group[open] > summary > .lh-audit-group__summary > .lh-chevron .lh-chevron__line-right, |
| .lh-audit > .lh-expandable-details[open] .lh-chevron__line-right { |
| transform: rotate(var(--chevron-angle)); |
| } |
| |
| .lh-audit-group[open] > summary > .lh-audit-group__summary > .lh-chevron .lh-chevron__lines, |
| .lh-audit > .lh-expandable-details[open] .lh-chevron__lines { |
| transform: translateY(calc(var(--chevron-size) * -1)); |
| } |
| |
| |
| |
| /* Tooltip */ |
| .tooltip-boundary { |
| position: relative; |
| } |
| |
| .tooltip { |
| position: absolute; |
| display: none; /* Don't retain these layers when not needed */ |
| opacity: 0; |
| background: #ffffff; |
| min-width: 246px; |
| max-width: 275px; |
| padding: 15px; |
| border-radius: 5px; |
| text-align: initial; |
| } |
| /* shrink tooltips to not be cutoff on left edge of narrow viewports |
| 45vw is chosen to be ~= width of the left column of metrics |
| */ |
| @media screen and (max-width: 535px) { |
| .tooltip { |
| min-width: 45vw; |
| padding: 3vw; |
| } |
| } |
| |
| .tooltip-boundary:hover { |
| background-color: var(--color-hover); |
| } |
| |
| .tooltip-boundary:hover .tooltip { |
| display: block; |
| animation: fadeInTooltip 250ms; |
| animation-fill-mode: forwards; |
| animation-delay: 850ms; |
| bottom: 100%; |
| z-index: 1; |
| will-change: opacity; |
| right: 0; |
| pointer-events: none; |
| } |
| |
| .tooltip::before { |
| content: ""; |
| border: solid transparent; |
| border-bottom-color: #fff; |
| border-width: 10px; |
| position: absolute; |
| bottom: -20px; |
| right: 6px; |
| transform: rotate(180deg); |
| pointer-events: none; |
| } |
| |
| @keyframes fadeInTooltip { |
| 0% { opacity: 0; } |
| 75% { opacity: 1; } |
| 100% { opacity: 1; filter: drop-shadow(1px 0px 1px #aaa) drop-shadow(0px 2px 4px hsla(206, 6%, 25%, 0.15)); pointer-events: auto; } |
| } |