mirror of https://github.com/escalate/hugo-split-theme.git

Felix Boerner
05.40.2025 175fd81d19cfb8b05c4e9ba388b6308b8c865bf1
style: update default linter config
1 files added
15 files modified
390 ■■■■ changed files
.editorconfig 16 ●●●●● patch | view | raw | blame | history
.prettierignore 5 ●●●●● patch | view | raw | blame | history
.yamllint 40 ●●●●● patch | view | raw | blame | history
LICENSE.md 26 ●●●● patch | view | raw | blame | history
README.md 22 ●●●●● patch | view | raw | blame | history
assets/scss/_animation.scss 8 ●●●● patch | view | raw | blame | history
assets/scss/_content.scss 41 ●●●●● patch | view | raw | blame | history
assets/scss/_fonts.scss 30 ●●●● patch | view | raw | blame | history
assets/scss/_normalize.scss 22 ●●●● patch | view | raw | blame | history
assets/scss/_webflow.scss 56 ●●●●● patch | view | raw | blame | history
tests/exampleSiteWithImage/budget.desktop.json 30 ●●●● patch | view | raw | blame | history
tests/exampleSiteWithImage/budget.mobile.json 30 ●●●● patch | view | raw | blame | history
tests/exampleSiteWithImage/static/css/style.css 2 ●●● patch | view | raw | blame | history
tests/exampleSiteWithVideo/budget.desktop.json 30 ●●●● patch | view | raw | blame | history
tests/exampleSiteWithVideo/budget.mobile.json 30 ●●●● patch | view | raw | blame | history
tests/exampleSiteWithVideo/static/css/style.css 2 ●●● patch | view | raw | blame | history
.editorconfig
@@ -3,16 +3,12 @@
[*]
end_of_line = lf
insert_final_newline = true
indent_size = 2
indent_style = space
trim_trailing_whitespace = true
[*.md]
indent_style = space
indent_size = 2
[Makefile*]
indent_style = tab
[*.toml]
indent_size = 2
indent_style = space
[*.{yml,yaml}]
indent_style = space
indent_size = 2
[*.py]
indent_size = 4
.prettierignore
New file
@@ -0,0 +1,5 @@
*.yml
*.yaml
split.scss
commonmark.md
layouts/
.yamllint
@@ -1,9 +1,45 @@
yaml-files:
  - "*.yaml"
  - "*.yml"
  - .yamllint
ignore-from-file:
  - .gitignore
  - .yamlignore
extends: default
rules:
  anchors: enable
  braces: enable
  brackets: enable
  colons: enable
  commas: enable
  comments:
    min-spaces-from-content: 1
  comments-indentation: false
  comments-indentation: disable
  document-end:
    present: false
  document-start:
    present: false
  line-length: false
  empty-lines: enable
  empty-values: disable
  float-values:
    require-numeral-before-decimal: true
  hyphens: enable
  indentation:
    indent-sequences: consistent
    spaces: 2
  key-duplicates: enable
  key-ordering: disable
  line-length: disable
  new-line-at-end-of-file: enable
  new-lines: enable
  octal-values:
    forbid-explicit-octal: true
    forbid-implicit-octal: true
  quoted-strings:
    quote-type: any
    required: false
  trailing-spaces: enable
  truthy: enable
LICENSE.md
@@ -4,7 +4,7 @@
CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE LEGAL SERVICES. DISTRIBUTION OF THIS LICENSE DOES NOT CREATE AN ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES REGARDING THE INFORMATION PROVIDED, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM ITS USE.
*License*
_License_
THE WORK (AS DEFINED BELOW) IS PROVIDED UNDER THE TERMS OF THIS CREATIVE COMMONS PUBLIC LICENSE ("CCPL" OR "LICENSE"). THE WORK IS PROTECTED BY COPYRIGHT AND/OR OTHER APPLICABLE LAW. ANY USE OF THE WORK OTHER THAN AS AUTHORIZED UNDER THIS LICENSE OR COPYRIGHT LAW IS PROHIBITED.
@@ -12,23 +12,23 @@
### 1. Definitions
a. __"Adaptation"__ means a work based upon the Work, or upon the Work and other pre-existing works, such as a translation, adaptation, derivative work, arrangement of music or other alterations of a literary or artistic work, or phonogram or performance and includes cinematographic adaptations or any other form in which the Work may be recast, transformed, or adapted including in any form recognizably derived from the original, except that a work that constitutes a Collection will not be considered an Adaptation for the purpose of this License. For the avoidance of doubt, where the Work is a musical work, performance or phonogram, the synchronization of the Work in timed-relation with a moving image ("synching") will be considered an Adaptation for the purpose of this License.
a. **"Adaptation"** means a work based upon the Work, or upon the Work and other pre-existing works, such as a translation, adaptation, derivative work, arrangement of music or other alterations of a literary or artistic work, or phonogram or performance and includes cinematographic adaptations or any other form in which the Work may be recast, transformed, or adapted including in any form recognizably derived from the original, except that a work that constitutes a Collection will not be considered an Adaptation for the purpose of this License. For the avoidance of doubt, where the Work is a musical work, performance or phonogram, the synchronization of the Work in timed-relation with a moving image ("synching") will be considered an Adaptation for the purpose of this License.
b. __"Collection"__ means a collection of literary or artistic works, such as encyclopedias and anthologies, or performances, phonograms or broadcasts, or other works or subject matter other than works listed in Section 1(f) below, which, by reason of the selection and arrangement of their contents, constitute intellectual creations, in which the Work is included in its entirety in unmodified form along with one or more other contributions, each constituting separate and independent works in themselves, which together are assembled into a collective whole. A work that constitutes a Collection will not be considered an Adaptation (as defined above) for the purposes of this License.
b. **"Collection"** means a collection of literary or artistic works, such as encyclopedias and anthologies, or performances, phonograms or broadcasts, or other works or subject matter other than works listed in Section 1(f) below, which, by reason of the selection and arrangement of their contents, constitute intellectual creations, in which the Work is included in its entirety in unmodified form along with one or more other contributions, each constituting separate and independent works in themselves, which together are assembled into a collective whole. A work that constitutes a Collection will not be considered an Adaptation (as defined above) for the purposes of this License.
c. __"Distribute"__ means to make available to the public the original and copies of the Work or Adaptation, as appropriate, through sale or other transfer of ownership.
c. **"Distribute"** means to make available to the public the original and copies of the Work or Adaptation, as appropriate, through sale or other transfer of ownership.
d. __"Licensor"__ means the individual, individuals, entity or entities that offer(s) the Work under the terms of this License.
d. **"Licensor"** means the individual, individuals, entity or entities that offer(s) the Work under the terms of this License.
e. __"Original Author""__ means, in the case of a literary or artistic work, the individual, individuals, entity or entities who created the Work or if no individual or entity can be identified, the publisher; and in addition (i) in the case of a performance the actors, singers, musicians, dancers, and other persons who act, sing, deliver, declaim, play in, interpret or otherwise perform literary or artistic works or expressions of folklore; (ii) in the case of a phonogram the producer being the person or legal entity who first fixes the sounds of a performance or other sounds; and, (iii) in the case of broadcasts, the organization that transmits the broadcast.
e. **"Original Author""** means, in the case of a literary or artistic work, the individual, individuals, entity or entities who created the Work or if no individual or entity can be identified, the publisher; and in addition (i) in the case of a performance the actors, singers, musicians, dancers, and other persons who act, sing, deliver, declaim, play in, interpret or otherwise perform literary or artistic works or expressions of folklore; (ii) in the case of a phonogram the producer being the person or legal entity who first fixes the sounds of a performance or other sounds; and, (iii) in the case of broadcasts, the organization that transmits the broadcast.
f. __"Work"__ means the literary and/or artistic work offered under the terms of this License including without limitation any production in the literary, scientific and artistic domain, whatever may be the mode or form of its expression including digital form, such as a book, pamphlet and other writing; a lecture, address, sermon or other work of the same nature; a dramatic or dramatico-musical work; a choreographic work or entertainment in dumb show; a musical composition with or without words; a cinematographic work to which are assimilated works expressed by a process analogous to cinematography; a work of drawing, painting, architecture, sculpture, engraving or lithography; a photographic work to which are assimilated works expressed by a process analogous to photography; a work of applied art; an illustration, map, plan, sketch or three-dimensional work relative to geography, topography, architecture or science; a performance; a broadcast; a phonogram; a compilation of data to the extent it is protected as a copyrightable work; or a work performed by a variety or circus performer to the extent it is not otherwise considered a literary or artistic work.
f. **"Work"** means the literary and/or artistic work offered under the terms of this License including without limitation any production in the literary, scientific and artistic domain, whatever may be the mode or form of its expression including digital form, such as a book, pamphlet and other writing; a lecture, address, sermon or other work of the same nature; a dramatic or dramatico-musical work; a choreographic work or entertainment in dumb show; a musical composition with or without words; a cinematographic work to which are assimilated works expressed by a process analogous to cinematography; a work of drawing, painting, architecture, sculpture, engraving or lithography; a photographic work to which are assimilated works expressed by a process analogous to photography; a work of applied art; an illustration, map, plan, sketch or three-dimensional work relative to geography, topography, architecture or science; a performance; a broadcast; a phonogram; a compilation of data to the extent it is protected as a copyrightable work; or a work performed by a variety or circus performer to the extent it is not otherwise considered a literary or artistic work.
g. __"You"__ means an individual or entity exercising rights under this License who has not previously violated the terms of this License with respect to the Work, or who has received express permission from the Licensor to exercise rights under this License despite a previous violation.
g. **"You"** means an individual or entity exercising rights under this License who has not previously violated the terms of this License with respect to the Work, or who has received express permission from the Licensor to exercise rights under this License despite a previous violation.
h. __"Publicly Perform"__ means to perform public recitations of the Work and to communicate to the public those public recitations, by any means or process, including by wire or wireless means or public digital performances; to make available to the public Works in such a way that members of the public may access these Works from a place and at a place individually chosen by them; to perform the Work to the public by any means or process and the communication to the public of the performances of the Work, including by public digital performance; to broadcast and rebroadcast the Work by any means including signs, sounds or images.
h. **"Publicly Perform"** means to perform public recitations of the Work and to communicate to the public those public recitations, by any means or process, including by wire or wireless means or public digital performances; to make available to the public Works in such a way that members of the public may access these Works from a place and at a place individually chosen by them; to perform the Work to the public by any means or process and the communication to the public of the performances of the Work, including by public digital performance; to broadcast and rebroadcast the Work by any means including signs, sounds or images.
i. __"Reproduce"__ means to make copies of the Work by any means including without limitation by sound or visual recordings and the right of fixation and reproducing fixations of the Work, including storage of a protected performance or phonogram in digital form or other electronic medium.
i. **"Reproduce"** means to make copies of the Work by any means including without limitation by sound or visual recordings and the right of fixation and reproducing fixations of the Work, including storage of a protected performance or phonogram in digital form or other electronic medium.
### 2. Fair Dealing Rights
@@ -48,11 +48,11 @@
e. For the avoidance of doubt:
  1. __Non-waivable Compulsory License Schemes.__ In those jurisdictions in which the right to collect royalties through any statutory or compulsory licensing scheme cannot be waived, the Licensor reserves the exclusive right to collect such royalties for any exercise by You of the rights granted under this License;
1. **Non-waivable Compulsory License Schemes.** In those jurisdictions in which the right to collect royalties through any statutory or compulsory licensing scheme cannot be waived, the Licensor reserves the exclusive right to collect such royalties for any exercise by You of the rights granted under this License;
  2. __Waivable Compulsory License Schemes.__ In those jurisdictions in which the right to collect royalties through any statutory or compulsory licensing scheme can be waived, the Licensor waives the exclusive right to collect such royalties for any exercise by You of the rights granted under this License; and,
2. **Waivable Compulsory License Schemes.** In those jurisdictions in which the right to collect royalties through any statutory or compulsory licensing scheme can be waived, the Licensor waives the exclusive right to collect such royalties for any exercise by You of the rights granted under this License; and,
  3. __Voluntary License Schemes.__ The Licensor waives the right to collect royalties, whether individually or, in the event that the Licensor is a member of a collecting society that administers voluntary licensing schemes, via that society, from any exercise by You of the rights granted under this License.
3. **Voluntary License Schemes.** The Licensor waives the right to collect royalties, whether individually or, in the event that the Licensor is a member of a collecting society that administers voluntary licensing schemes, via that society, from any exercise by You of the rights granted under this License.
The above rights may be exercised in all media and formats whether now known or hereafter devised. The above rights include the right to make such modifications as are technically necessary to exercise the rights in other media and formats. Subject to Section 8(f), all rights not expressly granted by Licensor are hereby reserved.
README.md
@@ -6,7 +6,6 @@
![Hugo Split Theme screenshot](https://raw.githubusercontent.com/escalate/hugo-split-theme/master/images/screenshot.png)
## Installation
Inside the folder of your Hugo site run:
@@ -18,17 +17,14 @@
For more information read the official [setup guide](https://gohugo.io/getting-started/quick-start/) of Hugo.
## Getting started
After installing the Split theme successfully it requires a just a few more steps to get your site finally running.
### The config file
Take a look inside the [`tests`](https://github.com/escalate/hugo-split-theme/tree/master/tests) folder of this theme. You'll find some example configurations. To use one of them, copy the `hugo.toml` in the root folder of your Hugo site. Feel free to customize this theme as you like.
### Add content
#### Homepage
@@ -48,7 +44,6 @@
Donec at libero id lectus porta dapibus eu in nibh. Cras id mauris sapien. Fusce viverra [luctus urna]({{< ref "long-text.md" >}}) ac rutrum. Duis semper elit eu mi facilisis eleifend. Donec semper, [ipsum in]({{< ref "commonmark.md" >}}) malesuada congue, purus sem ullamcorper massa, sit amet lacinia nibh enim sed massa.
```
#### Additional pages
You can create additional pages as usual inside content directory.
@@ -65,7 +60,6 @@
Aenean posuere, tortor sed cursus feugiat, nunc augue blandit nunc, eu sollicitudin urna dolor sagittis lacus. Donec elit libero, sodales nec, volutpat a, suscipit non, turpis. Nullam sagittis. Suspendisse pulvinar, augue ac venenatis condimentum, sem libero volutpat nibh, nec pellentesque velit pede quis nunc.
```
### Use an image
Set `enable` to `true`. Add your image to the `static` folder and change `file` to the location of your image accordingly. By default the image position is centered, however you can specify your own by supplying `position` with a valid CSS position.
@@ -87,7 +81,6 @@
# Privacy statement
```
### Use a video
First, disable the image by setting `enable` to `false` in `[params.visual.image]`.
@@ -98,7 +91,6 @@
Just like with [an image](#use-an-image) you can not display a video altogether on particular pages by setting `visual.video.enable = false` in the page's FrontMatter.
##### Use your own video
Add your video to the `static` folder and change `file` to the location of your video accordingly. Make sure you delete `youtubeId` or comment it out.
@@ -114,7 +106,6 @@
  # youtubeId = "dk9uNWPP7EA"
```
##### Use a YouTube video
Get the ID of the YouTube video and add it to `youtubeId`. Make sure you delete `file` or comment it out.
@@ -130,7 +121,6 @@
  youtubeId = "dk9uNWPP7EA"
```
##### Add Custom CSS
Put custom css styles in static/css/style.css and enable this css in the config:
@@ -140,12 +130,10 @@
  enable = true
```
##### Additional settings
Set `mute` to `true` if you want the video to play muted and `false` if you want the sound. The video is coded to autoplay and loop. If you want to change that the code can be found in [`layouts/partials/video.html`](https://github.com/escalate/hugo-split-theme/tree/master/layouts/partials/video.html).
### Add links
You can have up to 3 column lists in the links section. `heading` is the list heading text. For the text links `text` is the link text and `url` is the link url. Follow the same snippet structure to add more links to a list. If you only want 1 or 2 lists, just remove the link list snippet you don't want.
@@ -173,7 +161,6 @@
      url = "#"
```
### Add metadata
`author` and `description` metadata helps search engines with how to display your site in search results. `shareImage` and `twitterHandle` help improves how your content is displayed when your site is shared across social media sites.
@@ -186,23 +173,22 @@
  twitterHandle = "onepagelove"
```
### Add favicon
Replace [`static/favicon.ico`](https://github.com/escalate/hugo-split-theme/tree/master/static/favicon.ico) with your favicon. If you don't want just delete `favicon.ico` and the line below.
```toml
favicon = "favicon.ico"
```
### Add copyright
Set `copyright` with the text you want for your copyright.
```toml
copyright = "&copy;2024 Your Name"
```
### Add Google Analytics
Enable Google Analytics by adding your tracking id to `services.googleAnalytics`. Leave empty or remove if you don't want.
@@ -213,7 +199,6 @@
    ID = "UA-XXXXXXXX-1"
```
### Nearly finished
In order to see your site in action, run Hugo's built-in local server.
@@ -224,12 +209,10 @@
Now enter [`localhost:1313`](http://localhost:1313) in the address bar of your browser.
## Contributing
Did you found a bug or got an idea for a new feature? Feel free to use the [issue tracker](https://github.com/escalate/hugo-split-theme/issues) to let me know. Or make directly a [pull request](https://github.com/escalate/hugo-split-theme/pulls). See also the [Contributing](./CONTRIBUTING.md) notes.
## License
The original template is released under the [Creative Commons Attribution 3.0 License](https://github.com/escalate/hugo-split-theme/blob/master/LICENSE.md). Please keep the original attribution link when using for your own project. If you'd like to use the template without the attribution, you can check out the license option via the template [author's website](https://onepagelove.com/split).
@@ -241,7 +224,6 @@
  licensed = true
```
## Annotations
- Original [Split](https://onepagelove.com/split) Template by [One Page Love](https://onepagelove.com)
assets/scss/_animation.scss
@@ -3,6 +3,10 @@
//-------------------------------------------------------------------------------
@keyframes fadein {
    from { opacity: 0;}
    to   { opacity: 1;}
  from {
    opacity: 0;
  }
  to {
    opacity: 1;
  }
}
assets/scss/_content.scss
@@ -83,12 +83,19 @@
  border-bottom: 1px solid $color-link-hover;
}
.bio h1, .bio h2, .bio h3, .bio h4, .bio h5, .bio h6 {
.bio h1,
.bio h2,
.bio h3,
.bio h4,
.bio h5,
.bio h6 {
  font-family: Lora, sans-serif;
  color: $color-text;
}
.bio ul, .bio ol, .bio pre {
.bio ul,
.bio ol,
.bio pre {
  color: $color-text;
}
@@ -280,24 +287,24 @@
// YouTube
.split-video {
  overflow:hidden;
  position:relative;
  line-height:0;
  overflow: hidden;
  position: relative;
  line-height: 0;
}
.video-wrap{
  position:absolute;
  top:50%;
  left:50%;
  transform:translate(-50%,-50%);
.video-wrap {
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
}
.video-container {
  position:relative;
  overflow:hidden;
  position: relative;
  overflow: hidden;
  height: 56.25vw;
  width: 100vw;
  @media (max-aspect-ratio:16/9) {
  @media (max-aspect-ratio: 16/9) {
    height: 100vh;
    width: 177.7777777778vh; // this is for the ration 16:9
  }
@@ -316,10 +323,10 @@
// Self-Hosted
video.video {
  object-fit      : cover;
  object-position : 50% 50%;
  width           : 100%;
  height          : 100%;
  object-fit: cover;
  object-position: 50% 50%;
  width: 100%;
  height: 100%;
}
@media (min-width: $bp-smallish) {
assets/scss/_fonts.scss
@@ -4,27 +4,27 @@
/* inter-regular - latin */
@font-face {
    font-display: swap;
    font-family: 'Inter';
    font-style: normal;
    font-weight: 400;
    src: url('../fonts/inter-v18-latin-regular.woff2') format('woff2');
  font-display: swap;
  font-family: "Inter";
  font-style: normal;
  font-weight: 400;
  src: url("../fonts/inter-v18-latin-regular.woff2") format("woff2");
}
/* inter-600 - latin */
@font-face {
    font-display: swap;
    font-family: 'Inter';
    font-style: normal;
    font-weight: 600;
    src: url('../fonts/inter-v18-latin-600.woff2') format('woff2');
  font-display: swap;
  font-family: "Inter";
  font-style: normal;
  font-weight: 600;
  src: url("../fonts/inter-v18-latin-600.woff2") format("woff2");
}
/* lora-regular - latin */
@font-face {
    font-display: swap;
    font-family: 'Lora';
    font-style: normal;
    font-weight: 400;
    src: url('../fonts/lora-v35-latin-regular.woff2') format('woff2');
  font-display: swap;
  font-family: "Lora";
  font-style: normal;
  font-weight: 400;
  src: url("../fonts/lora-v35-latin-regular.woff2") format("woff2");
}
assets/scss/_normalize.scss
@@ -1,7 +1,7 @@
/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */
/* Document
   ========================================================================== */
  ========================================================================== */
/**
 * 1. Correct the line height in all browsers.
@@ -14,7 +14,7 @@
}
/* Sections
   ========================================================================== */
  ========================================================================== */
/**
 * Remove the margin in all browsers.
@@ -43,7 +43,7 @@
}
/* Grouping content
   ========================================================================== */
  ========================================================================== */
/**
 * 1. Add the correct box sizing in Firefox.
@@ -67,7 +67,7 @@
}
/* Text-level semantics
   ========================================================================== */
  ========================================================================== */
/**
 * Remove the gray background on active links in IE 10.
@@ -139,7 +139,7 @@
}
/* Embedded content
   ========================================================================== */
  ========================================================================== */
/**
 * Remove the border on images inside links in IE 10.
@@ -150,7 +150,7 @@
}
/* Forms
   ========================================================================== */
  ========================================================================== */
/**
 * 1. Change the font styles in all browsers.
@@ -174,7 +174,8 @@
 */
button,
input { /* 1 */
input {
  /* 1 */
  overflow: visible;
}
@@ -184,7 +185,8 @@
 */
button,
select { /* 1 */
select {
  /* 1 */
  text-transform: none;
}
@@ -311,7 +313,7 @@
}
/* Interactive
   ========================================================================== */
  ========================================================================== */
/*
 * Add the correct display in Edge, IE 10+, and Firefox.
@@ -330,7 +332,7 @@
}
/* Misc
   ========================================================================== */
  ========================================================================== */
/**
 * Add the correct display in IE 10+.
assets/scss/_webflow.scss
@@ -1,13 +1,14 @@
@font-face {
  font-family: 'webflow-icons';
  src: url("data:application/x-font-ttf;charset=utf-8;base64,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") format('truetype');
  font-family: "webflow-icons";
  src: url("data:application/x-font-ttf;charset=utf-8;base64,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")
    format("truetype");
  font-weight: normal;
  font-style: normal;
}
[class^="w-icon-"],
[class*=" w-icon-"] {
  /* use !important to prevent issues with browser extensions that change fonts */
  font-family: 'webflow-icons' !important;
  font-family: "webflow-icons" !important;
  speak: none;
  font-style: normal;
  font-weight: normal;
@@ -87,7 +88,7 @@
.w-button {
  display: inline-block;
  padding: 9px 15px;
  background-color: #3898EC;
  background-color: #3898ec;
  color: white;
  border: 0;
  line-height: inherit;
@@ -137,7 +138,7 @@
  background-attachment: scroll;
  background-color: transparent;
  box-shadow: none;
  opacity: 1.0;
  opacity: 1;
  transform: none;
  transition: none;
  direction: ltr;
@@ -173,12 +174,12 @@
  right: 12px !important;
  bottom: 12px !important;
  left: auto !important;
  color: #AAADB0 !important;
  color: #aaadb0 !important;
  background-color: #fff !important;
  border-radius: 3px !important;
  padding: 6px 8px 6px 6px !important;
  font-size: 12px !important;
  opacity: 1.0 !important;
  opacity: 1 !important;
  line-height: 14px !important;
  text-decoration: none !important;
  transform: none !important;
@@ -187,7 +188,9 @@
  height: auto !important;
  overflow: visible !important;
  white-space: nowrap;
  box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.1), 0px 1px 3px rgba(0, 0, 0, 0.1);
  box-shadow:
    0 0 0 1px rgba(0, 0, 0, 0.1),
    0px 1px 3px rgba(0, 0, 0, 0.1);
  cursor: pointer;
}
.w-webflow-badge > img {
@@ -242,7 +245,7 @@
blockquote {
  margin: 0 0 10px 0;
  padding: 10px 20px;
  border-left: 5px solid #E2E2E2;
  border-left: 5px solid #e2e2e2;
  font-size: 18px;
  line-height: 22px;
}
@@ -355,7 +358,7 @@
}
.w-input:focus,
.w-select:focus {
  border-color: #3898EC;
  border-color: #3898ec;
  outline: 0;
}
.w-input[disabled],
@@ -994,7 +997,9 @@
  background-color: rgba(255, 255, 255, 0.4);
  cursor: pointer;
  margin: 0 3px 0.5em;
  transition: background-color 100ms, color 100ms;
  transition:
    background-color 100ms,
    color 100ms;
}
.w-slider-dot.w-active {
  background-color: #fff;
@@ -1172,7 +1177,8 @@
  bottom: 0;
  left: 0;
  color: #fff;
  font-family: "Helvetica Neue", Helvetica, Ubuntu, "Segoe UI", Verdana, sans-serif;
  font-family:
    "Helvetica Neue", Helvetica, Ubuntu, "Segoe UI", Verdana, sans-serif;
  font-size: 17px;
  line-height: 1.2;
  font-weight: 300;
@@ -1263,7 +1269,7 @@
  right: 0;
  bottom: 0;
  left: 0;
  padding: .5em 1em;
  padding: 0.5em 1em;
  background: rgba(0, 0, 0, 0.4);
  text-align: left;
  text-overflow: ellipsis;
@@ -1287,8 +1293,8 @@
  background-repeat: no-repeat;
  background-position: center;
  cursor: pointer;
  -webkit-transition: all .3s;
  transition: all .3s;
  -webkit-transition: all 0.3s;
  transition: all 0.3s;
}
.w-lightbox-left {
  display: none;
@@ -1349,7 +1355,7 @@
  /* 2 */
}
.w-lightbox-active {
  opacity: .3;
  opacity: 0.3;
}
.w-lightbox-thumbnail {
  position: relative;
@@ -1393,8 +1399,8 @@
  margin-left: -20px;
  border: 5px solid rgba(0, 0, 0, 0.4);
  border-radius: 50%;
  -webkit-animation: spin .8s infinite linear;
  animation: spin .8s infinite linear;
  -webkit-animation: spin 0.8s infinite linear;
  animation: spin 0.8s infinite linear;
}
.w-lightbox-spinner:after {
  content: "";
@@ -1442,10 +1448,10 @@
  .w-lightbox-left,
  .w-lightbox-right {
    display: block;
    opacity: .5;
    opacity: 0.5;
  }
  .w-lightbox-close {
    opacity: .8;
    opacity: 0.8;
  }
  .w-lightbox-control:hover {
    opacity: 1;
@@ -1485,7 +1491,7 @@
}
.w-richtext figure.w-richtext-figure-type-video > div:after,
.w-richtext figure[data-rt-type="video"] > div:after {
  content: '';
  content: "";
  position: absolute;
  display: none;
  left: 0;
@@ -1498,7 +1504,7 @@
  max-width: 60%;
}
.w-richtext figure > div:before {
  cursor: default!important;
  cursor: default !important;
}
.w-richtext figure img {
  width: 100%;
@@ -1629,7 +1635,7 @@
  top: 100%;
  left: 0;
  right: 0;
  background: #C8C8C8;
  background: #c8c8c8;
  text-align: center;
  overflow: visible;
  min-width: 200px;
@@ -1686,7 +1692,7 @@
  outline: 0;
}
.w-nav-button.w--open {
  background-color: #C8C8C8;
  background-color: #c8c8c8;
  color: white;
}
.w-nav[data-collapse="all"] .w-nav-menu {
@@ -1761,7 +1767,7 @@
  background-color: #dddddd;
}
.w-tab-link.w--current {
  background-color: #C8C8C8;
  background-color: #c8c8c8;
}
.w-tab-link:focus {
  outline: 0;
tests/exampleSiteWithImage/budget.desktop.json
@@ -1,18 +1,18 @@
{
    "budget": {
        "requests": {
            "total": 8
        },
        "transferSize": {
            "total": 365568
        },
        "thirdParty": {
            "requests": 1
        },
        "score": {
            "bestpractice": 93,
            "privacy": 89,
            "performance": 81
        }
  "budget": {
    "requests": {
      "total": 8
    },
    "transferSize": {
      "total": 365568
    },
    "thirdParty": {
      "requests": 1
    },
    "score": {
      "bestpractice": 93,
      "privacy": 89,
      "performance": 81
    }
  }
}
tests/exampleSiteWithImage/budget.mobile.json
@@ -1,18 +1,18 @@
{
    "budget": {
        "requests": {
            "total": 8
        },
        "transferSize": {
            "total": 365568
        },
        "thirdParty": {
            "requests": 1
        },
        "score": {
            "bestpractice": 93,
            "privacy": 89,
            "performance": 81
        }
  "budget": {
    "requests": {
      "total": 8
    },
    "transferSize": {
      "total": 365568
    },
    "thirdParty": {
      "requests": 1
    },
    "score": {
      "bestpractice": 93,
      "privacy": 89,
      "performance": 81
    }
  }
}
tests/exampleSiteWithImage/static/css/style.css
@@ -1 +1 @@
# Custom CSS
/* Custom CSS */
tests/exampleSiteWithVideo/budget.desktop.json
@@ -1,18 +1,18 @@
{
    "budget": {
        "requests": {
            "total": 8
        },
        "transferSize": {
            "total": 2048000
        },
        "thirdParty": {
            "requests": 1
        },
        "score": {
            "bestpractice": 93,
            "privacy": 89,
            "performance": 77
        }
  "budget": {
    "requests": {
      "total": 8
    },
    "transferSize": {
      "total": 2048000
    },
    "thirdParty": {
      "requests": 1
    },
    "score": {
      "bestpractice": 93,
      "privacy": 89,
      "performance": 77
    }
  }
}
tests/exampleSiteWithVideo/budget.mobile.json
@@ -1,18 +1,18 @@
{
    "budget": {
        "requests": {
            "total": 8
        },
        "transferSize": {
            "total": 2048000
        },
        "thirdParty": {
            "requests": 1
        },
        "score": {
            "bestpractice": 93,
            "privacy": 89,
            "performance": 77
        }
  "budget": {
    "requests": {
      "total": 8
    },
    "transferSize": {
      "total": 2048000
    },
    "thirdParty": {
      "requests": 1
    },
    "score": {
      "bestpractice": 93,
      "privacy": 89,
      "performance": 77
    }
  }
}
tests/exampleSiteWithVideo/static/css/style.css
@@ -1 +1 @@
# Custom CSS
/* Custom CSS */