diff --git a/.gitattributes b/.gitattributes
index a12b5fb4e512..4d536e4abe56 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -1,6 +1,10 @@
-assets/fonts/* linguist-vendored
-assets/js/main.min.js linguist-vendored
-assets/js/lunr/* linguist-vendored
-assets/js/plugins/* linguist-vendored
-assets/js/vendor/* linguist-vendored
+assets/fonts/*                  linguist-vendored
+assets/js/main.min.js           linguist-vendored
+assets/js/lunr/*                linguist-vendored
+assets/js/plugins/*             linguist-vendored
+assets/js/vendor/*              linguist-vendored
 _sass/minimal-mistakes/vendor/* linguist-vendored
+CHANGELOG.md                    text merge=union
+docs/_docs/18-history.md        text merge=union
+
+*.md                            text
diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md
index 5b9b83063bee..847b69e8c5a9 100644
--- a/.github/CONTRIBUTING.md
+++ b/.github/CONTRIBUTING.md
@@ -1,11 +1,8 @@
 # Contributing
 
-Having trouble working with the theme? Found a typo in the documentation? 
-Interested in adding a feature or [fixing a bug](https://github.com/mmistakes/minimal-mistakes/issues)? 
-Then by all means [submit an issue](https://github.com/mmistakes/minimal-mistakes/issues/new) 
-or [pull request](https://help.github.com/articles/using-pull-requests/). 
-If this is your first pull request, it may be helpful to read up on the 
-[GitHub Flow](https://guides.github.com/introduction/flow/) first.
+Found a typo in the documentation or interested in [fixing a bug](https://github.com/mmistakes/minimal-mistakes/issues)? Then by all means [submit an issue](https://github.com/mmistakes/minimal-mistakes/issues/new) or [pull request](https://help.github.com/articles/using-pull-requests/). If this is your first pull request, it may be helpful to read up on the [GitHub Flow](https://guides.github.com/introduction/flow/) first.
+
+For help with using the theme or general Jekyll support questions, please use the [Jekyll Talk forums](https://talk.jekyllrb.com/).
 
 Minimal Mistakes has been designed as a base for you to customize and fit your 
 site's unique needs. Please keep this in mind when requesting features and/or 
diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml
deleted file mode 100644
index 2a66d84376eb..000000000000
--- a/.github/FUNDING.yml
+++ /dev/null
@@ -1 +0,0 @@
-custom: https://www.paypal.me/mmistakes
diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md
deleted file mode 100644
index 63a44d864661..000000000000
--- a/.github/ISSUE_TEMPLATE/bug_report.md
+++ /dev/null
@@ -1,68 +0,0 @@
----
-name: "Bug Report"
-about: "Is something not working as expected?"
----
-
-<!--
-  Before opening a new issue please:
-  
-  - Verify you have the latest versions of Jekyll and Minimal Mistakes 
-    installed by running `bundle update`.
-  - Thoroughly read the theme's documentation at
-    https://mmistakes.github.io/minimal-mistakes/docs/quick-start-guide/
-  - Search all issues at https://github.com/mmistakes/minimal-mistakes/issues 
-    for solutions and to avoid duplication.
-  - Ask for help at http://talk.jekyllrb.com/
-  
-  After exhausting these suggestions use the format below.
--->
-
-## Environment
-
-<!--
-  Please include theme version, Jekyll version, public git repository, whether 
-  you are hosting with GitHub Pages, and the operating system you tested with.
-
-  Issues without a link to a public repository or ZIP file will likely go ignored.
-  Being able to see your actual files is necessary to troubleshoot, as most 
-  issues stem from invalid/missing YAML Front Matter, a mis-configured _config.sys 
-  file, or problematic site content. 
--->
-
-- Minimal Mistakes version:
-- Ruby gem or remote theme version:
-- Jekyll version:
-- Git repository URL:
-- GitHub Pages hosted (if yes provide URL to site):
-- Operating system:
-
-## Expected behavior
-
-<!--
-  What is it you expected to happen? This should be a description of how the
-  functionality you tried to use is supposed to work.
--->
-
-## Steps to reproduce the behavior
-
-<!--
-  Describe the steps you took for this problem to exist. Such as: you installed
-  the theme, customized _config.yml, added your own posts, and started up a 
-  Jekyll server locally.
-
-  If an error occurred on GitHub Pages when pushing, please test a local version
-  following these setup instructions: 
-  https://help.github.com/articles/setting-up-your-github-pages-site-locally-with-jekyll/
-
-  Then provide a complete log by running `bundle exec jekyll build --trace --verbose` 
-  and include this output in the filed issue.
-
-  Screenshots can also be included if they help illustrate a behavior.
--->
-
-## Other
-
-<!--
-  NOTE: Please provide a code repository, gist, code snippet, sample files, 
-  screenshots, or anything else you think will aid in reproducing the issue.
--->
diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml
new file mode 100644
index 000000000000..ac8b933ce42a
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/bug_report.yml
@@ -0,0 +1,94 @@
+name: Bug Report
+description: There is something wrong with the theme. 99% of the time you should select Support below.
+body:
+  - type: markdown
+    attributes:
+      value: |
+        Before opening a new issue please:
+
+        - Verify you have the latest versions of Jekyll and Minimal Mistakes
+          installed by running `bundle update`.
+        - Thoroughly read the theme's documentation at
+          https://mmistakes.github.io/minimal-mistakes/docs/quick-start-guide/
+        - Search all issues at https://github.com/mmistakes/minimal-mistakes/issues
+          for solutions and to avoid duplication.
+        - Ask for help at https://talk.jekyllrb.com/
+
+        If none of the above solved your problem, you can continue below.
+
+  - type: textarea
+    id: environment
+    attributes:
+      label: Theme version and system environment
+      description: |
+        Please include theme version, Jekyll version, public git repository, whether
+        you are hosting with GitHub Pages, and the operating system you tested with.
+
+        Issues without a link to a public repository or ZIP file will likely go ignored.
+        Being able to see your actual files is necessary to troubleshoot, as most
+        issues stem from invalid/missing YAML Front Matter, a mis-configured _config.yml
+        file, or problematic site content.
+      value: |-
+        - Minimal Mistakes version:
+        - Ruby gem or remote theme version:
+        - Jekyll version:
+        - Git repository URL:
+        - URL to the page with the problem:
+        - Operating system:
+        - Browser version:
+    validations:
+      required: true
+
+  - type: textarea
+    id: what-happened
+    attributes:
+      label: What happened?
+      description: |
+        Describe the problem **in detail**. For example:
+
+        - What is missing?
+        - What error do you see? Attach the error log if available.
+    validations:
+      required: true
+
+  - type: textarea
+    id: expected-behavior
+    attributes:
+      label: Expected behavior
+      description: |
+        Please describe the expected behavior and the actual result you got.
+      placeholder: >
+        What is it you expected to happen? This should be a description of how the
+        functionality you tried to use is supposed to work.
+    validations:
+      required: true
+
+  - type: textarea
+    id: steps-to-reproduce
+    attributes:
+      label: Steps to reproduce the behavior
+      description: |
+        Describe the steps you took for this problem to come up. Such as: you installed
+        the theme, customized _config.yml, added your own posts, and started up a
+        Jekyll server locally.
+
+        If an error occurred on GitHub Pages when pushing, please test a local version
+        following these setup instructions:
+        https://help.github.com/articles/setting-up-your-github-pages-site-locally-with-jekyll/
+
+        Then provide a complete log by running `bundle exec jekyll build --trace --verbose`
+        and include this output in the filed issue.
+
+        Screenshots can also be included if they help illustrate a behavior.
+    validations:
+      required: true
+
+  - type: textarea
+    id: other
+    attributes:
+      label: Other
+      description: |
+        Please provide a code repository, gist, code snippet, sample files,
+        screenshots, or anything else you think will aid in reproducing the issue.
+    validations:
+      required: false
diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml
new file mode 100644
index 000000000000..e02be34d82d0
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/config.yml
@@ -0,0 +1,5 @@
+blank_issues_enabled: false
+contact_links:
+  - name: Support
+    url: https://github.com/mmistakes/minimal-mistakes/discussions
+    about: Please post your support questions in the Discussions section.
\ No newline at end of file
diff --git a/.github/ISSUE_TEMPLATE/documentation.md b/.github/ISSUE_TEMPLATE/documentation.md
deleted file mode 100644
index 25f111fd7a23..000000000000
--- a/.github/ISSUE_TEMPLATE/documentation.md
+++ /dev/null
@@ -1,16 +0,0 @@
----
-name: "Documentation"
-about: "Found a typo or something that needs clarification?"
----
-
-<!-- Thanks for taking the time to open an issue and help make the docs better -->
-
-## Motivation
-
-<!-- Why should we update our docs? -->
-
-<!-- What should we do instead? -->
-
-## Suggestion
-
-<!-- What should we do instead? -->
\ No newline at end of file
diff --git a/.github/ISSUE_TEMPLATE/documentation.yml b/.github/ISSUE_TEMPLATE/documentation.yml
new file mode 100644
index 000000000000..65a03152deae
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/documentation.yml
@@ -0,0 +1,25 @@
+name: Documentation
+description: Found a typo or something that needs clarification?
+body:
+  - type: markdown
+    attributes:
+      value: |
+        Thanks for taking the time to open an issue and help make the docs better.
+
+  - type: textarea
+    id: motivation
+    attributes:
+      label: Motivation
+      description: |
+        Why should we update our docs?
+    validations:
+      required: true
+
+  - type: textarea
+    id: suggestion
+    attributes:
+      label: Suggestion
+      description: |
+        What should we do instead?
+    validations:
+      required: true
\ No newline at end of file
diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md
deleted file mode 100644
index 8477f6364487..000000000000
--- a/.github/ISSUE_TEMPLATE/feature_request.md
+++ /dev/null
@@ -1,32 +0,0 @@
----
-name: "Enhancement / Feature Request"
-about: "What would make this theme better?"
----
-
-<!--
-  Before opening a new issue please search all issues at 
-  https://github.com/mmistakes/minimal-mistakes/issues to avoid duplication.
--->
-
-## Summary
-
-<!--
-  A short explanation of the enhancement or feature.
--->
-
-## Motivation
-
-<!--
-  Why do you want to see this feature in the theme?
-  What use cases does it support?
-
-  NOTE: This theme has been designed as a base for you to customize and fit 
-  your site's unique needs. If a feature is not something most people will use, 
-  it likely won't be considered. When in doubt ask.
--->
-
-## Drawbacks
-
-<!--
-  Why should this enhancement or feature **not** be considered?
--->
\ No newline at end of file
diff --git a/.github/ISSUE_TEMPLATE/support.md b/.github/ISSUE_TEMPLATE/support.md
deleted file mode 100644
index c8f0d21a4676..000000000000
--- a/.github/ISSUE_TEMPLATE/support.md
+++ /dev/null
@@ -1,22 +0,0 @@
----
-name: "Question"
-about: "Having trouble working with the theme?"
----
-
-<!--
-  Before opening a new issue please:
-  
-  - Verify you have the latest versions of Jekyll and Minimal Mistakes 
-    installed by running `bundle update`.
-  - Thoroughly read the theme's documentation at
-    https://mmistakes.github.io/minimal-mistakes/docs/quick-start-guide/
-  - Search all issues at https://github.com/mmistakes/minimal-mistakes/issues 
-    for solutions and to avoid duplication.
-  - Ask for help at http://talk.jekyllrb.com/
-  
-  After exhausting these suggestions ask your question below.
-
-  NOTE: Please provide a code repository, gist, code snippet, sample files, or 
-  screenshots to triage your issue.
--->
-
diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md
index df3d98d9c034..3271858f6dae 100644
--- a/.github/PULL_REQUEST_TEMPLATE.md
+++ b/.github/PULL_REQUEST_TEMPLATE.md
@@ -23,4 +23,8 @@
 
 <!--
   Is this related to any GitHub issue(s)?
--->
\ No newline at end of file
+-->
+
+<!--
+  Please confirm that you want to submit this Pull Request to Minimal Mistakes, the free Jekyll theme by Michael Rose, by deleting this comment block.
+-->
diff --git a/.github/stale.yml b/.github/stale.yml
deleted file mode 100644
index 3aa2e79c6e77..000000000000
--- a/.github/stale.yml
+++ /dev/null
@@ -1,21 +0,0 @@
-# Number of days of inactivity before an issue becomes stale
-daysUntilStale: 30
-# Number of days of inactivity before a stale issue is closed
-daysUntilClose: 7
-# Issues with these labels will never be considered stale
-exemptLabels:
-  - "Status: Accepted"
-  - "Status: Under Consideration"
-# Label to use when marking an issue as stale
-staleLabel: "Status: Stale"
-# Comment to post when marking an issue as stale. Set to `false` to disable
-markComment: |
-  This issue has been automatically marked as stale because it has not had recent activity.
-
-  If this is a **bug** and you can still reproduce this error on the `master` branch, please reply with any additional information you have about it in order to keep the issue open.
-
-  If this is a feature request, please consider whether it can be accomplished in another way. If it cannot, please elaborate on why it is core to this project and why you feel more than 80% of users would find this beneficial.
-
-  This issue will automatically be closed in 7 days if no further activity occurs. Thank you for all your contributions.
-# Comment to post when closing a stale issue. Set to `false` to disable
-closeComment: false
diff --git a/.github/workflows/bad-pr.yml b/.github/workflows/bad-pr.yml
new file mode 100644
index 000000000000..9c9c3647ad08
--- /dev/null
+++ b/.github/workflows/bad-pr.yml
@@ -0,0 +1,35 @@
+name: Cleanup bad PR
+
+on:
+  pull_request_target:
+    types: [opened, reopened]
+
+permissions:
+  contents: read
+
+jobs:
+  close-pr:
+    permissions:
+      pull-requests: write
+    runs-on: ubuntu-latest
+    if: "contains(github.event.pull_request.body, 'by deleting this comment block') || github.event.pull_request.body == ''"
+    steps:
+      - uses: actions-ecosystem/action-add-labels@v1
+        with:
+          labels: 'Type: Invalid'
+      - uses: actions-ecosystem/action-add-labels@v1
+        with:
+          labels: 'Type: Spam'
+      - uses: superbrothers/close-pull-request@v3
+        with:
+          # Optional. Post an issue comment just before closing a pull request.
+          comment: |
+            **You have created a Pull Request to the wrong repository.** This is the repository for [Minimal Mistakes][1], the free Jekyll theme. See [GitHub Docs: About pull requests][2] if you need help.
+
+              [1]: https://mmistakes.github.io/minimal-mistakes/
+              [2]: https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/about-pull-requests
+      - uses: sudo-bot/action-pull-request-lock@v1.0.5
+        with:
+          github-token: ${{ secrets.GITHUB_TOKEN }}
+          number: ${{ github.event.pull_request.number }}
+          lock-reason: spam
diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
new file mode 100644
index 000000000000..733ad0d6668c
--- /dev/null
+++ b/.github/workflows/build.yml
@@ -0,0 +1,47 @@
+name: build
+
+on:
+  push:
+    branches:
+      - master
+  workflow_dispatch: {}
+  repository_dispatch: {}
+
+jobs:
+  build:
+    if: github.repository == 'mmistakes/minimal-mistakes'
+    runs-on: ubuntu-latest
+    steps:
+    - uses: actions/checkout@v4
+      with:
+        fetch-depth: 0
+
+    - uses: ruby/setup-ruby@v1
+      with:
+        ruby-version: '3.2'
+    - name: Setup cache for Bundler
+      id: cache
+      uses: actions/cache@v4
+      with:
+        path: |
+          docs/Gemfile.lock
+          docs/vendor/bundle
+        key: ${{ runner.os }}-bundler-${{ hashFiles('docs/Gemfile') }}
+        restore-keys: |
+          ${{ runner.os }}-bundler-
+
+    - name: Install - Bundler
+      env:
+        MAKE: make -j2
+      working-directory: docs/
+      run: |
+        bundle config set path vendor/bundle
+        bundle install --jobs=4 --retry=3
+        bundle clean
+
+    - name: Update Algolia index
+      working-directory: docs/
+      run: bundle exec jekyll algolia push
+      env:
+        ALGOLIA_API_KEY: ${{ secrets.ALGOLIA_API_KEY }}
+      continue-on-error: true
diff --git a/.gitignore b/.gitignore
index 5c5a91f8f726..406061feb7db 100644
--- a/.gitignore
+++ b/.gitignore
@@ -2,6 +2,9 @@
 *~
 *.sw[p_]
 
+# IntelliJ IDEA
+*.idea
+
 # Sublime Text
 *.sublime-project
 *.sublime-workspace
diff --git a/CHANGELOG.md b/CHANGELOG.md
index ce1e30eea15b..fff61828b3fa 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,262 @@
+# Changelog
+
+## Unreleased
+
+### Enhancements
+
+- Add RTL Support. [#4886](https://github.com/mmistakes/minimal-mistakes/pull/4886)
+- Add missing Polish translation. [#4890](https://github.com/mmistakes/minimal-mistakes/pull/4890)
+- Rewrite most directions with [CSS logical properties](https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_logical_properties_and_values).
+- Remove unnecessary "type" attribute (#4956)
+- The "if" means the default is never used (#4955)
+- For pages without a title, show the site title only once (#4959)
+- Use `documents-collection.html` partial in `home` layout.
+- Add Bulgarian translation. [#5003](https://github.com/mmistakes/minimal-mistakes/pull/5003)
+- Add provider and comments info to `single.html` layout for non-production. (#5068)
+- Tweak contrast skin $primary-color to adhere to WCAG guidelines. (#5126)
+
+### Bug Fixes
+
+- Replace a redirected link to MadeMistakes in footer. [#4882](https://github.com/mmistakes/minimal-mistakes/pull/4882)
+- Fix wrong float direction for `feature_row` with `type="right"`. [#4061](https://github.com/mmistakes/minimal-mistakes/issues/4061)
+- Fix reset stylesheet overruling `$doc-font-size`. [#4983](https://github.com/mmistakes/minimal-mistakes/issues/4983)
+- Fix JavaScript null error on home and splash layouts. [#4938](https://github.com/mmistakes/minimal-mistakes/issues/4938), [#4939](https://github.com/mmistakes/minimal-mistakes/pull/4939)
+- Fix bad &lt;figure&gt; HTML if "alt" contains quotes.
+- Fix extra newline generated in `_includes/post_pagination.html`.
+- Hide hidden links & remove the overlay when one is clicked. [#5042](https://github.com/mmistakes/minimal-mistakes/pull/5042)
+- Fix typo in "Configuration" (#5106)
+
+### Documentation & Maintenance
+
+- Automatically update Algolia search index with GitHub Actions.
+
+## [4.26.2](https://github.com/mmistakes/minimal-mistakes/releases/tag/4.26.2)
+
+### Enhancements
+
+- Add Czech localization. [#4866](https://github.com/mmistakes/minimal-mistakes/pull/4866)
+- Allow overriding HTML `lang` attribute on a per-page basis. [#4862](https://github.com/mmistakes/minimal-mistakes/pull/4862)
+
+### Bug Fixes
+
+- Figure helper breaks when using code markup in caption with `popup=true`. [#4841](https://github.com/mmistakes/minimal-mistakes/issues/4841)
+
+## [4.26.1](https://github.com/mmistakes/minimal-mistakes/releases/tag/4.26.1)
+
+### Bug Fixes
+
+- Disable copy button on invalid syntax highlighting blocks to avoid positioning issues.
+- Fix typo for `fa-dribbble` in `_utilities.scss`.
+- Restrict "auto scroll sticky ToC to content" feature to Chromium browsers for now. [#4826](https://github.com/mmistakes/minimal-mistakes/issues/4826)
+
+### Documentation & Maintenance
+
+- Rewrite social icons SCSS with a loop.
+
+### Enhancements
+
+- Change the icon of a copy button into a tick for 1.5 seconds on successful copy.
+
+## [4.26.0](https://github.com/mmistakes/minimal-mistakes/releases/tag/4.26.0)
+
+### Bug Fixes
+
+- Fix an unclosed `<p>` tag in `page__hero.html`, near `page.header.actions`.
+- Remove overlay and revert X to hamburger icon when popup disappears. [#3958](https://github.com/mmistakes/minimal-mistakes/pull/3958)
+- Fix SEO title when it contains a vertical bar. [#3094](https://github.com/mmistakes/minimal-mistakes/pull/3094) [#3113](https://github.com/mmistakes/minimal-mistakes/pull/3113)
+- Remove "sticky sidebar" JS as it's now completely based on CSS media queries. [#4245](https://github.com/mmistakes/minimal-mistakes/issues/4245) [#4645](https://github.com/mmistakes/minimal-mistakes/pull/4645)
+
+### Enhancements
+
+- Add support for [Jekyll Paginate V2](https://github.com/sverrirs/jekyll-paginate-v2) 🎉 [#2636](https://github.com/mmistakes/minimal-mistakes/pull/2636)
+- Add "copy to clipboard" button for code blocks 🎉 [#2812](https://github.com/mmistakes/minimal-mistakes/pull/2812)
+- Auto scroll sticky ToC with content. [#3115](https://github.com/mmistakes/minimal-mistakes/pull/3115)
+- Replace "hidden" check in Liquid templates with `where_exp: "item", "item.hidden != true"`.
+- Remove deprecated `page.header.cta_url` setting. [#4821](https://github.com/mmistakes/minimal-mistakes/pull/4821)
+- Allow multiple nav lists in sidebar. [#2843](https://github.com/mmistakes/minimal-mistakes/pull/2843)
+- Add popup parameter to `{% include figure %}` to enable Magnific Popup. [#3119](https://github.com/mmistakes/minimal-mistakes/pull/3119)
+- Add target attribute for navigation link. [#3056](https://github.com/mmistakes/minimal-mistakes/pull/3056)
+- Split schema to a separate include file. [#3085](https://github.com/mmistakes/minimal-mistakes/pull/3085)
+- Cleanup `_includes/seo.html`.
+
+### Documentation & Maintenance
+
+- Rewrite skin previews on `05-configuration.md` in Liquid template.
+- Remove unused classes from `_layouts/single.html`.
+- Migrate npm run scripts to Ruby Rake tasks.
+- Add Rake task `version` for updating all hard-coded version numbers from `package.json` all at once.
+- Merge `categories` and `tags` layout into `_includes/posts-taxonomy.html`.
+- Update Social Sharing links section. [#4066](https://github.com/mmistakes/minimal-mistakes/pull/4066)
+
+## [4.25.1](https://github.com/mmistakes/minimal-mistakes/releases/tag/4.25.1)
+
+### Bug Fixes
+
+- "You may also enjoy" no longer recommends hidden posts. [#4653](https://github.com/mmistakes/minimal-mistakes/issues/4653)
+- Replaced dead link to "Viewport and Media Queries" slides. [#4421](https://github.com/mmistakes/minimal-mistakes/discussions/4421)
+- Fix broken `where_exp` in `lunr-store.js` for Jekyll &lt; 4.0. [#4808](https://github.com/mmistakes/minimal-mistakes/issues/4808)
+
+### Enhancements
+
+- Add Ukrainian translations. [#4273](https://github.com/mmistakes/minimal-mistakes/pull/4273)
+- Add more configuration for Giscus. [#4274](https://github.com/mmistakes/minimal-mistakes/pull/4274)
+- Bump jekyll-toc to [v1.2.1](https://github.com/allejo/jekyll-toc/releases/tag/v1.2.1).
+
+### Documentation & Maintenance
+
+- Bump shell-quote from 1.7.1 to 1.7.3 [#3692](https://github.com/mmistakes/minimal-mistakes/issues/3692)
+- Add `after-content.html` and `before-related.html` includes to ease docs site overrides.
+- GitHub Workflows security hardening [#3884](https://github.com/mmistakes/minimal-mistakes/issues/3884)
+- Replace Font Awesome v5 search page with v6.
+- Try adding an FAQ page.
+- Update remote theme reference in Quick-Start Guide to point to 4.25.0. [#4809](https://github.com/mmistakes/minimal-mistakes/issues/4809)
+
+## [4.25.0](https://github.com/mmistakes/minimal-mistakes/releases/tag/4.25.0)
+
+### Bug Fixes
+
+- Fix Linkedin social share link [#4754](https://github.com/mmistakes/minimal-mistakes/issues/4754)
+- Fix non-English characters being url encoded in breadcrumb [#3819](https://github.com/mmistakes/minimal-mistakes/issues/3819)
+- Fix wrong `first_page_path` because of hard-coded `page:num` [#3778](https://github.com/mmistakes/minimal-mistakes/issues/3778)
+- Remove JS and other files from search index [#4000](https://github.com/mmistakes/minimal-mistakes/pull/4000)
+- Fix unlisted YouTube video embeds in documentation/test sites. [#3649](https://github.com/mmistakes/minimal-mistakes/issues/3649)
+- Fix error in Algolia search script when returning a hit that without `html` and `hightlight.html`. [#3101](https://github.com/mmistakes/minimal-mistakes/issues/3101) [#3102](https://github.com/mmistakes/minimal-mistakes/pull/3102)
+- Fix inline code style not applied to stylized text. [#3253](https://github.com/mmistakes/minimal-mistakes/pull/3253)
+- Fix Keybase icon in author sidebar. [#3221](https://github.com/mmistakes/minimal-mistakes/pull/3221)
+- Fix sort order of Staticman comments when data files aren't named alphabetically. [#3184](https://github.com/mmistakes/minimal-mistakes/pull/3184)
+- Fix `layout: compress` issue with HTML comment in video include. [#3117](https://github.com/mmistakes/minimal-mistakes/pull/3117)
+- Add Magnific Popup class to anchors that only contain an `img` element. [#3111](https://github.com/mmistakes/minimal-mistakes/issues/3111) [#3114](https://github.com/mmistakes/minimal-mistakes/pull/3114)
+- Fix heading level of related posts section from `h4` to `h2` to improve accessibility and SEO. [#3064](https://github.com/mmistakes/minimal-mistakes/pull/3064)
+- Fix grammar error in German localized UI text string. [#3063](https://github.com/mmistakes/minimal-mistakes/pull/3063)
+- Remove site.url from first breadcrumb link. [#3051](https://github.com/mmistakes/minimal-mistakes/pull/3051)
+
+### Enhancements
+
+- Add `site.copyright` and `site.copyright_url` config options [#4313](https://github.com/mmistakes/minimal-mistakes/pull/4313)
+- Lazy-load InstantSearch scripts and stylesheets [#3691](https://github.com/mmistakes/minimal-mistakes/pull/3691)
+- Improve Finnish translations [#4595](https://github.com/mmistakes/minimal-mistakes/pull/4595)
+- Remove redundant downcase from \_layouts/categories.html. [#4531](https://github.com/mmistakes/minimal-mistakes/pull/4531)
+- Load latest Font Awesome package. [#3765](https://github.com/mmistakes/minimal-mistakes/pull/3765)
+- Add missing Polish missing UI text strings. [#3969](https://github.com/mmistakes/minimal-mistakes/pull/3969)
+- Update breadcrumbs conditional to enable/disable them via Front Matter on pages using `layout: single`. [#3096](https://github.com/mmistakes/minimal-mistakes/pull/3096) [#3669](https://github.com/mmistakes/minimal-mistakes/pull/3669)
+- Remove Internet Explorer 9 upgrade notice. [#3666](https://github.com/mmistakes/minimal-mistakes/pull/3666)
+- Add Kiswahili localized UI text strings. [#3489](https://github.com/mmistakes/minimal-mistakes/pull/3489)
+- Exclude `main.scss` from Lunr search index.
+- Allow `site.pages` to be indexed and searched via Lunr. [#3352](https://github.com/mmistakes/minimal-mistakes/pull/3352)
+- Update jQuery to v3.6.0. [#3254](https://github.com/mmistakes/minimal-mistakes/pull/3254)
+- Use notice `<a>` colors for blockquotes that have `notice--` classes applied. [#3140](https://github.com/mmistakes/minimal-mistakes/pull/3140) [#3068](https://github.com/mmistakes/minimal-mistakes/issues/3068)
+- Add sameAs itemprop to author link. [#3087](https://github.com/mmistakes/minimal-mistakes/pull/3087)
+- Update and add missing Brazilian Portuguese translations. [#3204](https://github.com/mmistakes/minimal-mistakes/pull/3204)
+- Add optional label attribute for utterances comments. [#3128](https://github.com/mmistakes/minimal-mistakes/pull/3128)
+- Add missing Danish translations. [#3095](https://github.com/mmistakes/minimal-mistakes/pull/3095)
+- Add ARIA role to search forms. [#3086](https://github.com/mmistakes/minimal-mistakes/pull/3086)
+- Add overflow scroll bar to sticky table of contents that are taller than the viewport's height. [#2874](https://github.com/mmistakes/minimal-mistakes/pull/2874)
+- Add Microformats markup. [#3052](https://github.com/mmistakes/minimal-mistakes/pull/3052)
+
+### Documentation & Maintenance
+
+- Fix links to Font Awesome gallery. [#3599](https://github.com/mmistakes/minimal-mistakes/pull/3599)
+- Fix GreedyNav.js attribution link. [#3553](https://github.com/mmistakes/minimal-mistakes/pull/3553)
+- Fix typo about loading JavaScript in layout documentation. [#3350](https://github.com/mmistakes/minimal-mistakes/pull/3350)
+- Fix documentation typos. [#3232](https://github.com/mmistakes/minimal-mistakes/pull/3232) [#3318](https://github.com/mmistakes/minimal-mistakes/pull/3318)
+- Add link to documentation clarifying how to add plugins. [#3181](https://github.com/mmistakes/minimal-mistakes/pull/3181)
+- Fix broken documentation link and add Baidu site verification to `_config.yml` files. [#3139](https://github.com/mmistakes/minimal-mistakes/pull/3139)
+- Bump path-parse from 1.0.6 to 1.0.7. [#3116](https://github.com/mmistakes/minimal-mistakes/pull/3116)
+- Automatically close invalid PRs using GitHub Actions. [#3313](https://github.com/mmistakes/minimal-mistakes/pull/3313)
+- Add instructions on how to unminify `main.js` for easier browser debugging. [#3055](https://github.com/mmistakes/minimal-mistakes/pull/3055)
+- Consolidate hard-coded version numbers where possible.
+- Add Rakefile for automatically syncing CHANGELOG with history and synched them.
+
+## [4.24.0](https://github.com/mmistakes/minimal-mistakes/releases/tag/4.24.0)
+
+### Bug Fixes
+
+- Fix README text for Gumshoejs license. [#3024](https://github.com/mmistakes/minimal-mistakes/pull/3024)
+- Remove `tabindex="-1"` from `input` elements in `search.html` layout to allow them to be accessible by keyboard. [#2982](https://github.com/mmistakes/minimal-mistakes/issues/2982)
+- Fix broken sidebar image in sample post. [#3013](https://github.com/mmistakes/minimal-mistakes/issues/3013)
+- Fix broken links in Upgrading documentation. [#3004](https://github.com/mmistakes/minimal-mistakes/issues/3004)
+
+### Enhancements
+
+- Remove IE9 flexbox fallback. [#3042](https://github.com/mmistakes/minimal-mistakes/pull/3042)
+- Remove `h2` from skip links navigation as it is not important for site structure. [#3012](https://github.com/mmistakes/minimal-mistakes/pull/3012)
+- Loads Font Awesome asynchronously. [#2967](https://github.com/mmistakes/minimal-mistakes/pull/2967)
+- Replace custom search icon SVG with Font Awesome icon. [#2774](https://github.com/mmistakes/minimal-mistakes/pull/2774)
+- Adds support for giscus comments. [#3022](https://github.com/mmistakes/minimal-mistakes/pull/3022)
+
+## [4.23.0](https://github.com/mmistakes/minimal-mistakes/releases/tag/4.23.0)
+
+### Enhancements
+
+- Add Arabic (عربي) localized UI text strings. [#2936](https://github.com/mmistakes/minimal-mistakes/pull/2936)
+- Update onchange and uglify-js dependencies.
+- Document head and footer `custom.html` includes. [#2815](https://github.com/mmistakes/minimal-mistakes/pull/2815)
+- Color notices based on skin colors instead of fixed values. [#2887](https://github.com/mmistakes/minimal-mistakes/pull/2887)
+- Add configurable datetime format. [#2844](https://github.com/mmistakes/minimal-mistakes/pull/2844)
+- Add Baidu site verification [#2830](https://github.com/mmistakes/minimal-mistakes/pull/2830)
+- Add `alt` attribute to site logo. [#2529](https://github.com/mmistakes/minimal-mistakes/issues/2529) [#2824](https://github.com/mmistakes/minimal-mistakes/issues/2824)
+
+### Bug Fixes
+
+- Fix menu toggle to properly show close icon when open.
+- Fix Jekyll environment note in configuration documentation. [#2912](https://github.com/mmistakes/minimal-mistakes/issues/2912)
+- Fix typo in Helpers documentation. [#2940](https://github.com/mmistakes/minimal-mistakes/pull/2940)
+- Remove all references to official public Staticman API instance. [#2818](https://github.com/mmistakes/minimal-mistakes/issues/2818) [#2831](https://github.com/mmistakes/minimal-mistakes/pull/2831)
+- Remove Google Search CSS. [#2852](https://github.com/mmistakes/minimal-mistakes/issues/2852) [#2855](https://github.com/mmistakes/minimal-mistakes/pull/2855)
+
+## [4.22.0](https://github.com/mmistakes/minimal-mistakes/releases/tag/4.22.0)
+
+### Bug Fixes
+
+- Remove Google Search script from `404.md`. [#2597](https://github.com/mmistakes/minimal-mistakes/issues/2597) [#2737](https://github.com/mmistakes/minimal-mistakes/pull/2737) [#2789](https://github.com/mmistakes/minimal-mistakes/pull/2789)
+- Fix Font Awesome icon color in `contrast`, `dark`, `mint`, `neon`, `plum`, and `sunrise` skins. [#2724](https://github.com/mmistakes/minimal-mistakes/issues/2724)
+
+### Enhancements
+
+- Allow custom sorting for collections. [#2723](https://github.com/mmistakes/minimal-mistakes/pull/2723)
+- Use `sort_natural` instead of custom Liquid logic to sort tags and categories. [#2756](https://github.com/mmistakes/minimal-mistakes/pull/2756)
+- Add configuration option to toggle off RSS feed link in `<head>` and site footer. [#2787](https://github.com/mmistakes/minimal-mistakes/pull/2787)
+- Upgrade Lunrjs to 2.3.9 and switch to `relative_url`. [#2805](https://github.com/mmistakes/minimal-mistakes/pull/2805)
+- Adds `.webp` to list of supported image extensions for the image popup lightbox. [#2788](https://github.com/mmistakes/minimal-mistakes/pull/2788)
+- Add Hebrew localized UI text strings. [#2760](https://github.com/mmistakes/minimal-mistakes/pull/2760)
+- Update documentation to include `toc_sticky` parameter's description. [#2741](https://github.com/mmistakes/minimal-mistakes/pull/2741)
+- Update Indonesian localized UI text strings. [#2731](https://github.com/mmistakes/minimal-mistakes/pull/2731)
+- Update remote theme documentation. [#2734](https://github.com/mmistakes/minimal-mistakes/pull/2734)
+- Update allejo/jekyll-toc to v1.1.0, skip headings without an ID. [#2752](https://github.com/mmistakes/minimal-mistakes/pull/2752)
+- Allow custom gradient for page header overlay. [#2806](https://github.com/mmistakes/minimal-mistakes/pull/2806)
+
+## [4.21.0](https://github.com/mmistakes/minimal-mistakes/releases/tag/4.21.0)
+
+### Bug Fixes
+
+- Fix greedy navigation by improving reliability of remaining space for visible links. [#2664](https://github.com/mmistakes/minimal-mistakes/issues/2664)
+- Collapse white-space in `figure` helper to fix issues when used in Markdown ordered and unordered lists. [#2697](https://github.com/mmistakes/minimal-mistakes/pull/2697)
+- Fix dead link to CI services in documentation. [#2635](https://github.com/mmistakes/minimal-mistakes/issues/2635) [#2692](https://github.com/mmistakes/minimal-mistakes/pull/2692)
+- Fix a small typo in documentation. [#2718](https://github.com/mmistakes/minimal-mistakes/pull/2718)
+
+### Enhancements
+
+- Update jQuery to 3.5.1. [#2713](https://github.com/mmistakes/minimal-mistakes/pull/2713)
+- Add Indonesian localized UI text strings. [#2725](https://github.com/mmistakes/minimal-mistakes/pull/2725)
+- Update Vietnamese localized UI text strings. [#2722](https://github.com/mmistakes/minimal-mistakes/pull/2722)
+- Add Norwegian (Norsk) localized UI text strings. [#2702](https://github.com/mmistakes/minimal-mistakes/pull/2702)
+- Update allejo/jekyll-toc to v1.0.14 [#2700](https://github.com/mmistakes/minimal-mistakes/pull/2700)
+
+## [4.20.2](https://github.com/mmistakes/minimal-mistakes/releases/tag/4.20.2)
+
+### Bug Fixes
+
+- Fix broken link in documentation. [#2677](https://github.com/mmistakes/minimal-mistakes/issues/2677)
+- Fix typo in documentation. [#2678](https://github.com/mmistakes/minimal-mistakes/issues/2678)
+- Remove duplicate CSS definitions. [#2666](https://github.com/mmistakes/minimal-mistakes/pull/2666)
+- Fix `entries_layout: grid` in various layouts. [#2639](https://github.com/mmistakes/minimal-mistakes/issues/2639)
+- Change `fa` to `fas` for Font Awesome 5. [#2649](https://github.com/mmistakes/minimal-mistakes/pull/2649)
+
+### Enhancements
+
+- Refactor page meta include. [#2641](https://github.com/mmistakes/minimal-mistakes/pull/2641)
+- Add `article:author` Open Graph markup. [#2670](https://github.com/mmistakes/minimal-mistakes/pull/2670)
+
 ## [4.20.1](https://github.com/mmistakes/minimal-mistakes/releases/tag/4.20.1)
 
 ### Bug Fixes
@@ -35,7 +294,7 @@
 - Update GreedyNav.js to reduce masthead link overflow/shifting on mobile devices. [#2551](https://github.com/mmistakes/minimal-mistakes/issues/2551)
 - Replace `<section id="custom-comments"></section>` in `comments.html` include and add `custom_scripts.html` include for loading custom comment provider JavaScript in the footer. [#2549](https://github.com/mmistakes/minimal-mistakes/issues/2549)
 - Move page date Liquid to include. [#2544](https://github.com/mmistakes/minimal-mistakes/pull/2544)
-- Strip trailing whitespace in seo_description. [#2542](https://github.com/mmistakes/minimal-mistakes/pull/2542)
+- Strip trailing whitespace in `seo_description`. [#2542](https://github.com/mmistakes/minimal-mistakes/pull/2542)
 - Improve sticky sidebar's appearance with short content. [#2514](https://github.com/mmistakes/minimal-mistakes/pull/2514)
 
 ## [4.19.2](https://github.com/mmistakes/minimal-mistakes/releases/tag/4.19.2)
@@ -410,7 +669,7 @@
 - Add support for ["sticking" table of contents](https://mmistakes.github.io/minimal-mistakes/layout-table-of-contents-sticky/) to top of page via `toc_sticky: true` YAML Front Matter.
 - Add support for captioning images in feature row helper via `image_caption` YAML Front Matter. [#1440](https://github.com/mmistakes/minimal-mistakes/issues/1440)
 - Add [Google Custom Search Engine](https://cse.google.com/cse) support. [#1652](https://github.com/mmistakes/minimal-mistakes/issues/1652)
-- Update Font Awesome to version [`5.1.13`](https://github.com/FortAwesome/Font-Awesome/blob/master/CHANGELOG.md)
+- Update Font Awesome to version. [`5.1.13`](https://github.com/FortAwesome/Font-Awesome/blob/master/CHANGELOG.md)
 - Add "Pets" sample archive page to documentation site. [#1664](https://github.com/mmistakes/minimal-mistakes/pull/1664)
 - Add GitLab social icon brand color. [#1653](https://github.com/mmistakes/minimal-mistakes/issues/1653)
 - Prevent line breaks between FontAwesome icon and text in footer social links. [#1659](https://github.com/mmistakes/minimal-mistakes/issues/1659)
@@ -418,7 +677,7 @@
 ### Bug Fixes
 
 - Set default `title_separator`. [#1701](https://github.com/mmistakes/minimal-mistakes/pull/1701)
-- Fix `naver_site_verification` typo in /_includes/seo.html. [#1687](https://github.com/mmistakes/minimal-mistakes/pull/1687)
+- Fix `naver_site_verification` typo in /\_includes/seo.html. [#1687](https://github.com/mmistakes/minimal-mistakes/pull/1687)
 - Fix table of contents missing borders. [#1675](https://github.com/mmistakes/minimal-mistakes/issues/1675)
 - Fix link to "Recipes" sample archive on documentation site. [#1664](https://github.com/mmistakes/minimal-mistakes/pull/1664)
 - Update example Reddit social share interpolation syntax in documentation. [#1656](https://github.com/mmistakes/minimal-mistakes/issues/1656)
@@ -428,319 +687,319 @@
 
 ### Enhancements
 
-* Update Font Awesome to version [`5.0.12`](https://github.com/FortAwesome/Font-Awesome/blob/master/CHANGELOG.md).
-* Add Slovak localized UI text strings. [#1613](https://github.com/mmistakes/minimal-mistakes/pull/1613)
-* Add option to anonymize IP addresses of hits sent to Google Analytics. [#1636](https://github.com/mmistakes/minimal-mistakes/pull/1636)
+- Update Font Awesome to version `5.0.11`. [#1620](https://github.com/mmistakes/minimal-mistakes/pull/1620)
+- Add Slovak localized UI text strings. [#1613](https://github.com/mmistakes/minimal-mistakes/pull/1613)
+- Add option to anonymize IP addresses of hits sent to Google Analytics. [#1636](https://github.com/mmistakes/minimal-mistakes/pull/1636)
 
 ### Bug Fixes
 
-* Use correct text string for "Back to Top" link. [#1595](https://github.com/mmistakes/minimal-mistakes/issues/1595)
-* Add conditionals for showing `reCaptcha.siteKey` and `reCaptcha.secret` in Staticman comments form.
+- Use correct text string for "Back to Top" link. [#1595](https://github.com/mmistakes/minimal-mistakes/issues/1595)
+- Add conditionals for showing `reCaptcha.siteKey` and `reCaptcha.secret` in Staticman comments form.
 
 ## [4.11.1](https://github.com/mmistakes/minimal-mistakes/releases/tag/4.11.1)
 
 ### Enhancements
 
-* Add default `theme` and `remote_theme` values to `_config.yml`.
-* Add new layouts (`posts`, `categories`, `tags`, `collection`, `category`, and `tag`) for easier archive page creation.
+- Add default `theme` and `remote_theme` values to `_config.yml`.
+- Add new layouts (`posts`, `categories`, `tags`, `collection`, `category`, and `tag`) for easier archive page creation.
 
 ### Bug Fixes
 
-* Replace `absolute_url` filter with `relative_url` where it makes sense (asset/navigation related paths). [#1588](https://github.com/mmistakes/minimal-mistakes/issues/1588)
-* Fix search excerpts that run together because of implied spaces.
+- Replace `absolute_url` filter with `relative_url` where it makes sense (asset/navigation related paths). [#1588](https://github.com/mmistakes/minimal-mistakes/issues/1588)
+- Fix search excerpts that run together because of implied spaces.
 
 ## [4.10.1](https://github.com/mmistakes/minimal-mistakes/releases/tag/4.10.1)
 
 ### Enhancements
 
-* Update jQuery to version `3.3.1`. [#1491](https://github.com/mmistakes/minimal-mistakes/issues/1491)
-* Add link to jekyll-algolia's `files_to_exclude` documentation.
-* Update Font Awesome to version [`5.0.8`](https://github.com/FortAwesome/Font-Awesome/blob/master/CHANGELOG.md). [#1561](https://github.com/mmistakes/minimal-mistakes/pull/1561)
-* Activate Algolia search for documentation site. [#1570](https://github.com/mmistakes/minimal-mistakes/issues/1570)
-* Add missing German translations. [#1577](https://github.com/mmistakes/minimal-mistakes/pull/1577)
-* Add support for Google Analytics with global site tag (gtag.js) [#1563](https://github.com/mmistakes/minimal-mistakes/pull/1563)
+- Update jQuery to version `3.3.1`. [#1491](https://github.com/mmistakes/minimal-mistakes/issues/1491)
+- Add link to jekyll-algolia's `files_to_exclude` documentation.
+- Update Font Awesome to version [`5.0.8`](https://github.com/FortAwesome/Font-Awesome/blob/master/CHANGELOG.md). [#1561](https://github.com/mmistakes/minimal-mistakes/pull/1561)
+- Activate Algolia search for documentation site. [#1570](https://github.com/mmistakes/minimal-mistakes/issues/1570)
+- Add missing German translations. [#1577](https://github.com/mmistakes/minimal-mistakes/pull/1577)
+- Add support for Google Analytics with global site tag (gtag.js) [#1563](https://github.com/mmistakes/minimal-mistakes/pull/1563)
 
 ### Bug Fixes
 
-* Focus Algolia search input after clicking on search toggle.
+- Focus Algolia search input after clicking on search toggle.
 
 ## [4.10.0](https://github.com/mmistakes/minimal-mistakes/releases/tag/4.10.0)
 
 ### Enhancements
 
-* Add support for [Algolia](https://www.algolia.com/) search provider ([see demo](https://mmistakes.github.io/minimal-mistakes-algolia-search/)). [#1416](https://github.com/mmistakes/minimal-mistakes/issues/1416)
+- Add support for [Algolia](https://www.algolia.com/) search provider ([see demo](https://mmistakes.github.io/minimal-mistakes-algolia-search/)). [#1416](https://github.com/mmistakes/minimal-mistakes/issues/1416)
 
 ## [4.9.1](https://github.com/mmistakes/minimal-mistakes/releases/tag/4.9.1)
 
 ### Enhancements
 
-* Simplify year archive Liquid.
-* Add documentation on how to downgrade theme.
-* Improve greedy navigation's layout when JavaScript is disabled.
-* Improve SEO include by grouping similar tags, reducing white-space, and adding `article:modified_time`. [#1456](https://github.com/mmistakes/minimal-mistakes/pull/1456)
-* Minify `assets/js/lunr/lunr.js`.
-* Improve calculation of Greedy navigation's `availableSpace`.
-* Add Danish and Russian translations for new search strings. [#1472](https://github.com/mmistakes/minimal-mistakes/pull/1472) [#1477](https://github.com/mmistakes/minimal-mistakes/pull/1477)
-* Indicate that archive titles are links with an underline.
-* Remove `base_path` include from `/test` pages.
-* Reduce font-size of page meta in list/grid items.
-* Improve feature row styling when used with `archive` layout. [#1484](https://github.com/mmistakes/minimal-mistakes/issues/1484)
-* Improve German translations. [#1511](https://github.com/mmistakes/minimal-mistakes/pull/1511)
-* Update Font Awesome to `5.0.6`. [#1513](https://github.com/mmistakes/minimal-mistakes/pull/1513)
-* Add `wide` variant to single layout. [#1516](https://github.com/mmistakes/minimal-mistakes/pull/1516)
+- Simplify year archive Liquid.
+- Add documentation on how to downgrade theme.
+- Improve greedy navigation's layout when JavaScript is disabled.
+- Improve SEO include by grouping similar tags, reducing white-space, and adding `article:modified_time`. [#1456](https://github.com/mmistakes/minimal-mistakes/pull/1456)
+- Minify `assets/js/lunr/lunr.js`.
+- Improve calculation of Greedy navigation's `availableSpace`.
+- Add Danish and Russian translations for new search strings. [#1472](https://github.com/mmistakes/minimal-mistakes/pull/1472) [#1477](https://github.com/mmistakes/minimal-mistakes/pull/1477)
+- Indicate that archive titles are links with an underline.
+- Remove `base_path` include from `/test` pages.
+- Reduce font-size of page meta in list/grid items.
+- Improve feature row styling when used with `archive` layout. [#1484](https://github.com/mmistakes/minimal-mistakes/issues/1484)
+- Improve German translations. [#1511](https://github.com/mmistakes/minimal-mistakes/pull/1511)
+- Update Font Awesome to `5.0.6`. [#1513](https://github.com/mmistakes/minimal-mistakes/pull/1513)
+- Add `wide` variant to single layout. [#1516](https://github.com/mmistakes/minimal-mistakes/pull/1516)
 
 ### Bug Fixes
 
-* Allow `author` to accept an object or string. [#289](https://github.com/mmistakes/minimal-mistakes/issues/289)
-* Fix syntax highlighting line number styling inconsistency. [#1467](https://github.com/mmistakes/minimal-mistakes/issues/1467)
-* Fix author sidebar icon colors for dark skins. [#1482](https://github.com/mmistakes/minimal-mistakes/issues/1482)
-* Remove misleading underline hover state on feature row items.
-* Properly escape quotes in `site.social.name` and `site.name`. [#1485](https://github.com/mmistakes/minimal-mistakes/pull/1485)
-* Fix typo in upgrading documentation. [#1487](https://github.com/mmistakes/minimal-mistakes/pull/1487)
-* Fix `border-bottom` for Gist line numbers.
-* Replace `|` with HTML entity when used as title separator. [#760](https://github.com/mmistakes/minimal-mistakes/issues/760)
+- Allow `author` to accept an object or string. [#289](https://github.com/mmistakes/minimal-mistakes/issues/289)
+- Fix syntax highlighting line number styling inconsistency. [#1467](https://github.com/mmistakes/minimal-mistakes/issues/1467)
+- Fix author sidebar icon colors for dark skins. [#1482](https://github.com/mmistakes/minimal-mistakes/issues/1482)
+- Remove misleading underline hover state on feature row items.
+- Properly escape quotes in `site.social.name` and `site.name`. [#1485](https://github.com/mmistakes/minimal-mistakes/pull/1485)
+- Fix typo in upgrading documentation. [#1487](https://github.com/mmistakes/minimal-mistakes/pull/1487)
+- Fix `border-bottom` for Gist line numbers.
+- Replace `|` with HTML entity when used as title separator. [#760](https://github.com/mmistakes/minimal-mistakes/issues/760)
 
 ## [4.9.0](https://github.com/mmistakes/minimal-mistakes/releases/tag/4.9.0)
 
 ### Enhancements
 
-* Add `show_overlay_excerpt` for disabling overlay image excerpt text. [#1436](https://github.com/mmistakes/minimal-mistakes/pull/1436)
-* Update remote theme installation instructions in Quick Start Guide. [#1439](https://github.com/mmistakes/minimal-mistakes/pull/1439)
-* Reduce visual weight of code blocks.
-* Add Lunr.js Greek stemmer. [#1445](https://github.com/mmistakes/minimal-mistakes/pull/1445)
-* Update Font Awesome 5 [SVG with JavaScript version](https://fontawesome.com/how-to-use/svg-with-js). [#1446](https://github.com/mmistakes/minimal-mistakes/pull/1446)
-  * Note: if Font Awesome icons were used in the content of posts/pages or custom table of contents, find and replace any icons that have different names between version 4 and 5. Make sure to read the [complete list](https://fontawesome.com/how-to-use/upgrading-from-4#icon-name-changes-full) on Font Awesome's site.
-* Reduce size of Lunr.js search JSON data and introduce `site.search_full_content` flag for limiting size of JSON file. [#1449](https://github.com/mmistakes/minimal-mistakes/pull/1449)
-* Improve syntax highlighting styles. [#1450](https://github.com/mmistakes/minimal-mistakes/pull/1450)
+- Add `show_overlay_excerpt` for disabling overlay image excerpt text. [#1436](https://github.com/mmistakes/minimal-mistakes/pull/1436)
+- Update remote theme installation instructions in Quick Start Guide. [#1439](https://github.com/mmistakes/minimal-mistakes/pull/1439)
+- Reduce visual weight of code blocks.
+- Add Lunr.js Greek stemmer. [#1445](https://github.com/mmistakes/minimal-mistakes/pull/1445)
+- Update Font Awesome 5 [SVG with JavaScript version](https://fontawesome.com/how-to-use/svg-with-js). [#1446](https://github.com/mmistakes/minimal-mistakes/pull/1446)
+  - Note: if Font Awesome icons were used in the content of posts/pages or custom table of contents, find and replace any icons that have different names between version 4 and 5. Make sure to read the [complete list](https://fontawesome.com/how-to-use/upgrading-from-4#icon-name-changes-full) on Font Awesome's site.
+- Reduce size of Lunr.js search JSON data and introduce `site.search_full_content` flag for limiting size of JSON file. [#1449](https://github.com/mmistakes/minimal-mistakes/pull/1449)
+- Improve syntax highlighting styles. [#1450](https://github.com/mmistakes/minimal-mistakes/pull/1450)
 
 ### Bug Fixes
 
-* Fix code block extra white-space when using [Jekyll's highlight tag](https://jekyllrb.com/docs/templates/#code-snippet-highlighting) with `linenos`. [#1437](https://github.com/mmistakes/minimal-mistakes/issues/1437)
-* Round top-right corner of code block icon.
-* Remove Lunr.js trimmer and bring back colons. [#1445](https://github.com/mmistakes/minimal-mistakes/pull/1445)
-* Fix sticky `.sidebar` that overlaps main content when resizing viewport. [#1447](https://github.com/mmistakes/minimal-mistakes/issues/1447)
+- Fix code block extra white-space when using [Jekyll's highlight tag](https://jekyllrb.com/docs/templates/#code-snippet-highlighting) with `linenos`. [#1437](https://github.com/mmistakes/minimal-mistakes/issues/1437)
+- Round top-right corner of code block icon.
+- Remove Lunr.js trimmer and bring back colons. [#1445](https://github.com/mmistakes/minimal-mistakes/pull/1445)
+- Fix sticky `.sidebar` that overlaps main content when resizing viewport. [#1447](https://github.com/mmistakes/minimal-mistakes/issues/1447)
 
 ## [4.8.1](https://github.com/mmistakes/minimal-mistakes/releases/tag/4.8.1)
 
 ### Enhancements
 
-* Add linkback functionality to author avatar and name in sidebar via `author.home`. [#1386](https://github.com/mmistakes/minimal-mistakes/pull/1386)
-* Add Japanese localized UI text strings. [#1411](https://github.com/mmistakes/minimal-mistakes/pull/1411)
-* Update Lunr.js to 2.1.5 [#1419](https://github.com/mmistakes/minimal-mistakes/pull/1419)
+- Add linkback functionality to author avatar and name in sidebar via `author.home`. [#1386](https://github.com/mmistakes/minimal-mistakes/pull/1386)
+- Add Japanese localized UI text strings. [#1411](https://github.com/mmistakes/minimal-mistakes/pull/1411)
+- Update Lunr.js to 2.1.5 [#1419](https://github.com/mmistakes/minimal-mistakes/pull/1419)
 
 ### Bug Fixes
 
-* Fixed broken link to Staticman's page [#1422](https://github.com/mmistakes/minimal-mistakes/pull/1422)
-* Fix Lunr search to work with number tags. [#1409](https://github.com/mmistakes/minimal-mistakes/issues/1409) [#1419](https://github.com/mmistakes/minimal-mistakes/pull/1419)
+- Fixed broken link to Staticman's page [#1422](https://github.com/mmistakes/minimal-mistakes/pull/1422)
+- Fix Lunr search to work with number tags. [#1409](https://github.com/mmistakes/minimal-mistakes/issues/1409) [#1419](https://github.com/mmistakes/minimal-mistakes/pull/1419)
 
 ## [4.8.0](https://github.com/mmistakes/minimal-mistakes/releases/tag/4.8.0)
 
 ### Enhancements
 
-* Open social share links in a new window. [#1357](https://github.com/mmistakes/minimal-mistakes/pull/1357)
-* Remove Alexa.com verification due to retiring of "[Claim Your Site](https://support.alexa.com/hc/en-us/articles/219135887)" feature. [#1350](https://github.com/mmistakes/minimal-mistakes/issues/1350)
-* Disable analytics in `development` environment. [#1362](https://github.com/mmistakes/minimal-mistakes/pull/1362)
-* Disable comments in `development` environment. [#1363](https://github.com/mmistakes/minimal-mistakes/pull/1363)
-* Exclude specific pages/posts from search index by adding `search: false` to the YAML Front Matter. [#1369](https://github.com/mmistakes/minimal-mistakes/pull/1369)
-* Add optional `description` key to masthead links for clarifying their purpose with the `title` attribute. [#1380](https://github.com/mmistakes/minimal-mistakes/pull/1380)
-* Incorporate site search into masthead. [#1383](https://github.com/mmistakes/minimal-mistakes/pull/1383)
-* Update gem dependencies. [#1388](https://github.com/mmistakes/minimal-mistakes/pull/1388)
+- Open social share links in a new window. [#1357](https://github.com/mmistakes/minimal-mistakes/pull/1357)
+- Remove Alexa.com verification due to retiring of "[Claim Your Site](https://support.alexa.com/hc/en-us/articles/219135887)" feature. [#1350](https://github.com/mmistakes/minimal-mistakes/issues/1350)
+- Disable analytics in `development` environment. [#1362](https://github.com/mmistakes/minimal-mistakes/pull/1362)
+- Disable comments in `development` environment. [#1363](https://github.com/mmistakes/minimal-mistakes/pull/1363)
+- Exclude specific pages/posts from search index by adding `search: false` to the YAML Front Matter. [#1369](https://github.com/mmistakes/minimal-mistakes/pull/1369)
+- Add optional `description` key to masthead links for clarifying their purpose with the `title` attribute. [#1380](https://github.com/mmistakes/minimal-mistakes/pull/1380)
+- Incorporate site search into masthead. [#1383](https://github.com/mmistakes/minimal-mistakes/pull/1383)
+- Update gem dependencies. [#1388](https://github.com/mmistakes/minimal-mistakes/pull/1388)
 
 ### Bug Fixes
 
-* Fix `post.content` typo in `assets/js/lunr-en.js`. [#1354](https://github.com/mmistakes/minimal-mistakes/pull/1354)
-* Fix "lunr-en.js:1 Uncaught SyntaxError: Unexpected token <" in `assets/js/lunr-en.js`. [#1356](https://github.com/mmistakes/minimal-mistakes/pull/1356)
-* Rename Naver verification `naver_site_verification` to be consistent with other site variables.
-* Fix button class in "Post with Table Of Contents" demo content. [#1368](https://github.com/mmistakes/minimal-mistakes/pull/1368)
-* Fix capitalization of WordPress in documentation. [#1381](https://github.com/mmistakes/minimal-mistakes/pull/1381)
-* Fix zh-HK UI text to point to Traditional Chinese. [#1374](https://github.com/mmistakes/minimal-mistakes/issues/1374) [#1389](https://github.com/mmistakes/minimal-mistakes/pull/1389)
+- Fix `post.content` typo in `assets/js/lunr-en.js`. [#1354](https://github.com/mmistakes/minimal-mistakes/pull/1354)
+- Fix "lunr-en.js:1 Uncaught SyntaxError: Unexpected token <" in `assets/js/lunr-en.js`. [#1356](https://github.com/mmistakes/minimal-mistakes/pull/1356)
+- Rename Naver verification `naver_site_verification` to be consistent with other site variables.
+- Fix button class in "Post with Table Of Contents" demo content. [#1368](https://github.com/mmistakes/minimal-mistakes/pull/1368)
+- Fix capitalization of WordPress in documentation. [#1381](https://github.com/mmistakes/minimal-mistakes/pull/1381)
+- Fix zh-HK UI text to point to Traditional Chinese. [#1374](https://github.com/mmistakes/minimal-mistakes/issues/1374) [#1389](https://github.com/mmistakes/minimal-mistakes/pull/1389)
 
 ## [4.7.1](https://github.com/mmistakes/minimal-mistakes/releases/tag/4.7.1)
 
 ### Enhancements
 
-* Add search layout powered by [Lunr](https://lunrjs.com/). [#1353](https://github.com/mmistakes/minimal-mistakes/pull/1353)
-* Use [jekyll-remote-theme](https://github.com/benbalter/jekyll-remote-theme) for demo site. [#1339](https://github.com/mmistakes/minimal-mistakes/issues/1339)
-* Add note about WordPress to Staticman comment migration tool in documentation. [#1346](https://github.com/mmistakes/minimal-mistakes/issues/1346)
+- Add search layout powered by [Lunr](https://lunrjs.com/). [#1353](https://github.com/mmistakes/minimal-mistakes/pull/1353)
+- Use [jekyll-remote-theme](https://github.com/benbalter/jekyll-remote-theme) for demo site. [#1339](https://github.com/mmistakes/minimal-mistakes/issues/1339)
+- Add note about WordPress to Staticman comment migration tool in documentation. [#1346](https://github.com/mmistakes/minimal-mistakes/issues/1346)
 
 ### Bug Fixes
 
-* Change `http` to `https` for Jekyll and Browserhappy links. [#1342](https://github.com/mmistakes/minimal-mistakes/pull/1342) [#1343](https://github.com/mmistakes/minimal-mistakes/pull/1343)
-* Change `http` author profile links to `https` when supported. [#1349](https://github.com/mmistakes/minimal-mistakes/pull/1349)
-* Fix broken SCSS partial links in layouts documentation. [#1351](https://github.com/mmistakes/minimal-mistakes/issues/1351)
+- Change `http` to `https` for Jekyll and Browserhappy links. [#1342](https://github.com/mmistakes/minimal-mistakes/pull/1342) [#1343](https://github.com/mmistakes/minimal-mistakes/pull/1343)
+- Change `http` author profile links to `https` when supported. [#1349](https://github.com/mmistakes/minimal-mistakes/pull/1349)
+- Fix broken SCSS partial links in layouts documentation. [#1351](https://github.com/mmistakes/minimal-mistakes/issues/1351)
 
 ## [4.7.0](https://github.com/mmistakes/minimal-mistakes/releases/tag/4.7.0)
 
 ### Enhancements
 
-* Add `alt` description to avatar image. [#1226](https://github.com/mmistakes/minimal-mistakes/pull/1226)
-* Clarify documentation about which `assets` folders and files to remove when migrating to the gem version of the theme. [#1268](https://github.com/mmistakes/minimal-mistakes/issues/1268)
-* Add note about Staticman GitHub compatibility. [#1273](https://github.com/mmistakes/minimal-mistakes/issues/1273)
-* Add missing Brazilian Portuguese translations to `ui-text.yml`. [#1278](https://github.com/mmistakes/minimal-mistakes/pull/1278)
-* Update font stack documentation. [#1292](https://github.com/mmistakes/minimal-mistakes/pull/1292)
-* Improve accessibility of navigation menu button. [#1099](https://github.com/mmistakes/minimal-mistakes/issues/1099)
-* Add Naver Webmaster Tools verification. [#1286](https://github.com/mmistakes/minimal-mistakes/pull/1286)
-* Add support for Staticman v2 endpoint and reCAPTCHA.
-* Add Polish localized UI text strings. [#1304](https://github.com/mmistakes/minimal-mistakes/pull/1304)
-* Add toggleable table of contents via YAML Front Matter. Note: `toc` helper include will be deprecated in next major version. [#1222](https://github.com/mmistakes/minimal-mistakes/issues/1222)
-* Refactor seo.html include to DRY-up page image handling.
-* Add support for setting what image is used by OpenGraph and Twitter via `page.header.og_image`. [#1316](https://github.com/mmistakes/minimal-mistakes/issues/1316)
-* Fix the spelling of some product names in the author profile. [#1328](https://github.com/mmistakes/minimal-mistakes/pull/1328)
-* Add `aqua`, `neon`, and `plum` skins. [#1336](https://github.com/mmistakes/minimal-mistakes/pull/1336)
-* Update **jekyll-toc** with heading classes fix. [#1337](https://github.com/mmistakes/minimal-mistakes/pull/1337)
-* Remove `+` from Google+ author link to allow non-vanity URLs. [#1319](https://github.com/mmistakes/minimal-mistakes/pull/1319)
+- Add `alt` description to avatar image. [#1226](https://github.com/mmistakes/minimal-mistakes/pull/1226)
+- Clarify documentation about which `assets` folders and files to remove when migrating to the gem version of the theme. [#1268](https://github.com/mmistakes/minimal-mistakes/issues/1268)
+- Add note about Staticman GitHub compatibility. [#1273](https://github.com/mmistakes/minimal-mistakes/issues/1273)
+- Add missing Brazilian Portuguese translations to `ui-text.yml`. [#1278](https://github.com/mmistakes/minimal-mistakes/pull/1278)
+- Update font stack documentation. [#1292](https://github.com/mmistakes/minimal-mistakes/pull/1292)
+- Improve accessibility of navigation menu button. [#1099](https://github.com/mmistakes/minimal-mistakes/issues/1099)
+- Add Naver Webmaster Tools verification. [#1286](https://github.com/mmistakes/minimal-mistakes/pull/1286)
+- Add support for Staticman v2 endpoint and reCAPTCHA.
+- Add Polish localized UI text strings. [#1304](https://github.com/mmistakes/minimal-mistakes/pull/1304)
+- Add toggleable table of contents via YAML Front Matter. Note: `toc` helper include will be deprecated in next major version. [#1222](https://github.com/mmistakes/minimal-mistakes/issues/1222)
+- Refactor seo.html include to DRY-up page image handling.
+- Add support for setting what image is used by OpenGraph and Twitter via `page.header.og_image`. [#1316](https://github.com/mmistakes/minimal-mistakes/issues/1316)
+- Fix the spelling of some product names in the author profile. [#1328](https://github.com/mmistakes/minimal-mistakes/pull/1328)
+- Add `aqua`, `neon`, and `plum` skins. [#1336](https://github.com/mmistakes/minimal-mistakes/pull/1336)
+- Update **jekyll-toc** with heading classes fix. [#1337](https://github.com/mmistakes/minimal-mistakes/pull/1337)
+- Remove `+` from Google+ author link to allow non-vanity URLs. [#1319](https://github.com/mmistakes/minimal-mistakes/pull/1319)
 
 ### Bug Fixes
 
-* Fix system font rendering in Chrome on macOS/OS X. [#1290](https://github.com/mmistakes/minimal-mistakes/pull/1290)
-* Fix extra padding in syntax highlighted code blocks due to Rouge 2 adding `<div class="highlight"></div>` to markup.
+- Fix system font rendering in Chrome on macOS/OS X. [#1290](https://github.com/mmistakes/minimal-mistakes/pull/1290)
+- Fix extra padding in syntax highlighted code blocks due to Rouge 2 adding `<div class="highlight"></div>` to markup.
 
 ## [4.6.0](https://github.com/mmistakes/minimal-mistakes/releases/tag/4.6.0)
 
 ### Enhancements
 
-* Test strict Front Matter in `/test` site. [#1236](https://github.com/mmistakes/minimal-mistakes/pull/1236)
-* Rename `gems` key to `plugins`. [#1239](https://github.com/mmistakes/minimal-mistakes/pull/1239)
-* Add [YIQ Color Contrast](https://github.com/easy-designs/yiq-color-contrast) mixin for determining lightness of a color.
-* DRY up button CSS using Sass lists and YIQ Color Contrast mixin.
-* Add `btn--primary` button class. **Note:** elements that were previously using only a `.btn` class will now also need `.btn--primary` (eg. `<a class="btn btn--primary" href="#">my link</a>`).
-* Add `air`, `contrast`, `dark`, `dirt`, `mint`, and `sunrise` skin color options. [#1208](https://github.com/mmistakes/minimal-mistakes/issues/1208)
-* Allow scripts in `<head>` and before `</body>` to be added/overridden with `head_scripts` and `footer_scripts` arrays in `_config.yml`. [#1241](https://github.com/mmistakes/minimal-mistakes/pull/1241)
-* Update JavaScript dependencies: jQuery `v3.2.1`, jQuery Smooth Scroll `v2.2.0`, and Magnific Popup `v1.1.0`. [#328690652](https://github.com/mmistakes/minimal-mistakes/pull/1241#issuecomment-328690652)
+- Test strict Front Matter in `/test` site. [#1236](https://github.com/mmistakes/minimal-mistakes/pull/1236)
+- Rename `gems` key to `plugins`. [#1239](https://github.com/mmistakes/minimal-mistakes/pull/1239)
+- Add [YIQ Color Contrast](https://github.com/easy-designs/yiq-color-contrast) mixin for determining lightness of a color.
+- DRY up button CSS using Sass lists and YIQ Color Contrast mixin.
+- Add `btn--primary` button class. **Note:** elements that were previously using only a `.btn` class will now also need `.btn--primary` (eg. `<a class="btn btn--primary" href="#">my link</a>`).
+- Add `air`, `contrast`, `dark`, `dirt`, `mint`, and `sunrise` skin color options. [#1208](https://github.com/mmistakes/minimal-mistakes/issues/1208)
+- Allow scripts in `<head>` and before `</body>` to be added/overridden with `head_scripts` and `footer_scripts` arrays in `_config.yml`. [#1241](https://github.com/mmistakes/minimal-mistakes/pull/1241)
+- Update JavaScript dependencies: jQuery `v3.2.1`, jQuery Smooth Scroll `v2.2.0`, and Magnific Popup `v1.1.0`. [#328690652](https://github.com/mmistakes/minimal-mistakes/pull/1241#issuecomment-328690652)
 
 ## [4.5.2](https://github.com/mmistakes/minimal-mistakes/releases/tag/4.5.2)
 
 ### Enhancements
 
-* Add `.page__comments-form` to "non-printing" selectors in print styles. [#1195](https://github.com/mmistakes/minimal-mistakes/pull/1195)
-* Add LinkedIn and Steam author sidebar examples to `_config.yml`. [#1203](https://github.com/mmistakes/minimal-mistakes/pull/1203) [#1204](https://github.com/mmistakes/minimal-mistakes/pull/1204)
-* Remove the http-equiv="cleartype" meta tag. [#1087](https://github.com/mmistakes/minimal-mistakes/pull/1087)
-* Clarify documentation for `jekyll-archives` plugin and how to install. [#1206](https://github.com/mmistakes/minimal-mistakes/pull/1206)
-* Clarify documentation around taxonomy page and index generation. [#1207](https://github.com/mmistakes/minimal-mistakes/pull/1207)
-* Fix "Posts by tag" grammar in documentation. [#1209](https://github.com/mmistakes/minimal-mistakes/pull/1209)
-* Improve Chinese `date_label` and `minute_read` translations in `ui-text.yml`. [#1205](https://github.com/mmistakes/minimal-mistakes/pull/1205) [#1211](https://github.com/mmistakes/minimal-mistakes/pull/1211)
-* Add note to Quick-Start Guide about GitHub Pages hosting alternatives that allow 3rd party gem themes and Jekyll plugins.
-* Add note to configuration documentation about Cloudflare minification as an alternative to `layout: compress`. [#1217](https://github.com/mmistakes/minimal-mistakes/pull/1217)
-* Show 4 latest posts in "You May Also Enjoy" module when `related: true` and no related posts are found due to `lsi` ([latent semantic indexing](https://en.wikipedia.org/wiki/Latent_semantic_analysis#Latent_semantic_indexing)) being disabled on GitHub Pages. [#554](https://github.com/mmistakes/minimal-mistakes/issues/554)
-* Truncate archive item titles' that overflow with an ellipsis. [#1213](https://github.com/mmistakes/minimal-mistakes/issues/1213)
+- Add `.page__comments-form` to "non-printing" selectors in print styles. [#1195](https://github.com/mmistakes/minimal-mistakes/pull/1195)
+- Add LinkedIn and Steam author sidebar examples to `_config.yml`. [#1203](https://github.com/mmistakes/minimal-mistakes/pull/1203) [#1204](https://github.com/mmistakes/minimal-mistakes/pull/1204)
+- Remove the http-equiv="cleartype" meta tag. [#1087](https://github.com/mmistakes/minimal-mistakes/pull/1087)
+- Clarify documentation for `jekyll-archives` plugin and how to install. [#1206](https://github.com/mmistakes/minimal-mistakes/pull/1206)
+- Clarify documentation around taxonomy page and index generation. [#1207](https://github.com/mmistakes/minimal-mistakes/pull/1207)
+- Fix "Posts by tag" grammar in documentation. [#1209](https://github.com/mmistakes/minimal-mistakes/pull/1209)
+- Improve Chinese `date_label` and `minute_read` translations in `ui-text.yml`. [#1205](https://github.com/mmistakes/minimal-mistakes/pull/1205) [#1211](https://github.com/mmistakes/minimal-mistakes/pull/1211)
+- Add note to Quick-Start Guide about GitHub Pages hosting alternatives that allow 3rd party gem themes and Jekyll plugins.
+- Add note to configuration documentation about Cloudflare minification as an alternative to `layout: compress`. [#1217](https://github.com/mmistakes/minimal-mistakes/pull/1217)
+- Show 4 latest posts in "You May Also Enjoy" module when `related: true` and no related posts are found due to `lsi` ([latent semantic indexing](https://en.wikipedia.org/wiki/Latent_semantic_analysis#Latent_semantic_indexing)) being disabled on GitHub Pages. [#554](https://github.com/mmistakes/minimal-mistakes/issues/554)
+- Truncate archive item titles' that overflow with an ellipsis. [#1213](https://github.com/mmistakes/minimal-mistakes/issues/1213)
 
 ### Bug Fixes
 
-* Fix license URL in README file. [#1189](https://github.com/mmistakes/minimal-mistakes/pull/1189)
-* Reduce amount of blank pages when printing in Chrome. [#1196](https://github.com/mmistakes/minimal-mistakes/issues/1196)
-* Remove `#disqus_thread` duplicate from `comments-providers/disqus.html` as it is already in `comments.html` include. [#1199](https://github.com/mmistakes/minimal-mistakes/issues/1199)
-* Fix Liquid syntax errors in `tag-list.html` and `category-list.html` includes by removing parenthesis in `assign`s. [#1223](https://github.com/mmistakes/minimal-mistakes/issues/1223)
-* Fix Liquid syntax error: "Expected id but found open_square in `"{{ page.[include.id] }}"`" in `gallery` and `feature_row` includes.
-* Fix Liquid syntax error: "Expected end_of_string but found pipe in `"name in __names | sort"`" in `group-by-array` include.
+- Fix license URL in README file. [#1189](https://github.com/mmistakes/minimal-mistakes/pull/1189)
+- Reduce amount of blank pages when printing in Chrome. [#1196](https://github.com/mmistakes/minimal-mistakes/issues/1196)
+- Remove `#disqus_thread` duplicate from `comments-providers/disqus.html` as it is already in `comments.html` include. [#1199](https://github.com/mmistakes/minimal-mistakes/issues/1199)
+- Fix Liquid syntax errors in `tag-list.html` and `category-list.html` includes by removing parenthesis in `assign`s. [#1223](https://github.com/mmistakes/minimal-mistakes/issues/1223)
+- Fix Liquid syntax error: "Expected id but found open_square in `"{{ page.[include.id] }}"`" in `gallery` and `feature_row` includes.
+- Fix Liquid syntax error: "Expected end_of_string but found pipe in `"name in __names | sort"`" in `group-by-array` include.
 
 ## [4.5.1](https://github.com/mmistakes/minimal-mistakes/releases/tag/4.5.1)
 
 ### Enhancements
 
-* Add Greek and Danish localized UI text strings. [#1159](https://github.com/mmistakes/minimal-mistakes/pull/1159) [#1188](https://github.com/mmistakes/minimal-mistakes/pull/1188)
-* Remove blank YAML Front Matter from JavaScript banner. [#1158](https://github.com/mmistakes/minimal-mistakes/issues/1158)
-* Improve `page` and `archive` layouts to visually center main content and harmonize sidebar widths and placement. [#1166](https://github.com/mmistakes/minimal-mistakes/pull/1166)
-* Increase font-size of code blocks.
-* Reduce indent of nested "table of contents" links.
-* Extend [archive grid view](https://mmistakes.github.io/minimal-mistakes/docs/layouts/) to the right to better fill the page.
-* URL encode title and page URL in social share links. [#1177](https://github.com/mmistakes/minimal-mistakes/pull/1177)
-* Replace old Disqus script with new Universal Embed Code. [#1179](https://github.com/mmistakes/minimal-mistakes/pull/1179)
+- Add Greek and Danish localized UI text strings. [#1159](https://github.com/mmistakes/minimal-mistakes/pull/1159) [#1188](https://github.com/mmistakes/minimal-mistakes/pull/1188)
+- Remove blank YAML Front Matter from JavaScript banner. [#1158](https://github.com/mmistakes/minimal-mistakes/issues/1158)
+- Improve `page` and `archive` layouts to visually center main content and harmonize sidebar widths and placement. [#1166](https://github.com/mmistakes/minimal-mistakes/pull/1166)
+- Increase font-size of code blocks.
+- Reduce indent of nested "table of contents" links.
+- Extend [archive grid view](https://mmistakes.github.io/minimal-mistakes/docs/layouts/) to the right to better fill the page.
+- URL encode title and page URL in social share links. [#1177](https://github.com/mmistakes/minimal-mistakes/pull/1177)
+- Replace old Disqus script with new Universal Embed Code. [#1179](https://github.com/mmistakes/minimal-mistakes/pull/1179)
 
 ### Bug Fixes
 
-* Fix positioning of sidebar table of contents when using `layout: splash`. [#1169](https://github.com/mmistakes/minimal-mistakes/issues/1169)
-* Fix "follow" links `z-index` order to avoid overlapping issues. [#1167](https://github.com/mmistakes/minimal-mistakes/issues/1167)
+- Fix positioning of sidebar table of contents when using `layout: splash`. [#1169](https://github.com/mmistakes/minimal-mistakes/issues/1169)
+- Fix "follow" links `z-index` order to avoid overlapping issues. [#1167](https://github.com/mmistakes/minimal-mistakes/issues/1167)
 
 ### Maintenance
 
-* Fix typo `words_per_minute` typo in documentation. [#1164](https://github.com/mmistakes/minimal-mistakes/pull/1164)
-* Remove outside and right borders in `table`s.
-* Adjust width of `.sidebar` to match `.sidebar__right`.
-* Add sample documents to ["portfolio" collection](https://mmistakes.github.io/minimal-mistakes/portfolio/) for testing grid view.
-* Fix typo in stylesheets documentation. [#1170](https://github.com/mmistakes/minimal-mistakes/pull/1170)
-* Add note about setting Discourse `server` as a scheme-less URL (eg. `meta.discourse.com` and not `http://meta.discourse.com`) in `_config.yml`. [#1182](https://github.com/mmistakes/minimal-mistakes/issues/1182)
+- Fix typo `words_per_minute` typo in documentation. [#1164](https://github.com/mmistakes/minimal-mistakes/pull/1164)
+- Remove outside and right borders in `table`s.
+- Adjust width of `.sidebar` to match `.sidebar__right`.
+- Add sample documents to ["portfolio" collection](https://mmistakes.github.io/minimal-mistakes/portfolio/) for testing grid view.
+- Fix typo in stylesheets documentation. [#1170](https://github.com/mmistakes/minimal-mistakes/pull/1170)
+- Add note about setting Discourse `server` as a scheme-less URL (eg. `meta.discourse.com` and not `http://meta.discourse.com`) in `_config.yml`. [#1182](https://github.com/mmistakes/minimal-mistakes/issues/1182)
 
 ## [4.5.0](https://github.com/mmistakes/minimal-mistakes/releases/tag/4.5.0)
 
 ### Enhancements
 
-* Add scrollbar to sidebars with overflowing content that extends outside the viewport's height. [#706](https://github.com/mmistakes/minimal-mistakes/issues/706)
-* Add missing Spanish UI text strings. [#1118](https://github.com/mmistakes/minimal-mistakes/pull/1118)
-* Update Susy to version 3 and rewrite grid CSS to be more readable.
-* Refactor intro animations into a separate Sass variable `$intro-transition` to allow for customizing. [#1147](https://github.com/mmistakes/minimal-mistakes/pull/1147)
-* Add [**jekyll-data**](https://github.com/ashmaroli/jekyll-data) as a dependency to read data files from theme-gem. [#1131](https://github.com/mmistakes/minimal-mistakes/pull/1131)
-* Add support for customizing header image alternative text through YAML Front Matter. [#1138](https://github.com/mmistakes/minimal-mistakes/pull/1138)
+- Add scrollbar to sidebars with overflowing content that extends outside the viewport's height. [#706](https://github.com/mmistakes/minimal-mistakes/issues/706)
+- Add missing Spanish UI text strings. [#1118](https://github.com/mmistakes/minimal-mistakes/pull/1118)
+- Update Susy to version 3 and rewrite grid CSS to be more readable.
+- Refactor intro animations into a separate Sass variable `$intro-transition` to allow for customizing. [#1147](https://github.com/mmistakes/minimal-mistakes/pull/1147)
+- Add [**jekyll-data**](https://github.com/ashmaroli/jekyll-data) as a dependency to read data files from theme-gem. [#1131](https://github.com/mmistakes/minimal-mistakes/pull/1131)
+- Add support for customizing header image alternative text through YAML Front Matter. [#1138](https://github.com/mmistakes/minimal-mistakes/pull/1138)
 
 ### Bug Fixes
 
-* Fix Sass `DEPRECATION WARNING: Passing a string to call()` by [upgrading Susy to version 3](https://github.com/mmistakes/minimal-mistakes/commit/387f8149d6270b876f224a57a07062ffb0647938). [#1114](https://github.com/mmistakes/minimal-mistakes/issues/1114)
-* Fix disappearing author profile links due to tapping the "Follow" button and changing a browser's viewport width to > `$lg`. [#1136](https://github.com/mmistakes/minimal-mistakes/issues/1136)
+- Fix Sass `DEPRECATION WARNING: Passing a string to call()` by [upgrading Susy to version 3](https://github.com/mmistakes/minimal-mistakes/commit/387f8149d6270b876f224a57a07062ffb0647938). [#1114](https://github.com/mmistakes/minimal-mistakes/issues/1114)
+- Fix disappearing author profile links due to tapping the "Follow" button and changing a browser's viewport width to > `$lg`. [#1136](https://github.com/mmistakes/minimal-mistakes/issues/1136)
 
 ### Maintenance
 
-* Replace reference to "Basically Basic theme" with **Minimal Mistakes**. [#1149](https://github.com/mmistakes/minimal-mistakes/pull/1149)
-* Add documentation for disabling CSS3 animations. [#1150](https://github.com/mmistakes/minimal-mistakes/pull/1150)
-* Update quickstart, installation, and overriding defaults documentation. [#1151](https://github.com/mmistakes/minimal-mistakes/pull/1151)
+- Replace reference to "Basically Basic theme" with **Minimal Mistakes**. [#1149](https://github.com/mmistakes/minimal-mistakes/pull/1149)
+- Add documentation for disabling CSS3 animations. [#1150](https://github.com/mmistakes/minimal-mistakes/pull/1150)
+- Update quickstart, installation, and overriding defaults documentation. [#1151](https://github.com/mmistakes/minimal-mistakes/pull/1151)
 
 ## [4.4.2](https://github.com/mmistakes/minimal-mistakes/releases/tag/4.4.2)
 
 ### Enhancements
 
-* Add Swedish, Dutch, and Indonesian localized UI text strings. [#996](https://github.com/mmistakes/minimal-mistakes/pull/996) [#1081](https://github.com/mmistakes/minimal-mistakes/pull/1081) [#1101](https://github.com/mmistakes/minimal-mistakes/pull/1101)
-* Add Bitbucket social icon color. [#1009](https://github.com/mmistakes/minimal-mistakes/pull/1009)
-* Add GitLab to author sidebar. [#1050](https://github.com/mmistakes/minimal-mistakes/pull/1050)
-* Add Sass variable for navicon link hover color. [#1089](https://github.com/mmistakes/minimal-mistakes/pull/1089) [#1088](https://github.com/mmistakes/minimal-mistakes/pull/1088)
+- Add Swedish, Dutch, and Indonesian localized UI text strings. [#996](https://github.com/mmistakes/minimal-mistakes/pull/996) [#1081](https://github.com/mmistakes/minimal-mistakes/pull/1081) [#1101](https://github.com/mmistakes/minimal-mistakes/pull/1101)
+- Add Bitbucket social icon color. [#1009](https://github.com/mmistakes/minimal-mistakes/pull/1009)
+- Add GitLab to author sidebar. [#1050](https://github.com/mmistakes/minimal-mistakes/pull/1050)
+- Add Sass variable for navicon link hover color. [#1089](https://github.com/mmistakes/minimal-mistakes/pull/1089) [#1088](https://github.com/mmistakes/minimal-mistakes/pull/1088)
 
 ### Bug Fixes
 
-* Toggle close button on `mouseleave`. [#975](https://github.com/mmistakes/minimal-mistakes/issues/975)
-* Remove extraneous `</a>` and `</li>` tags from `paginator.html` include. [#1038](https://github.com/mmistakes/minimal-mistakes/pull/1038)
-* Fix Google+ comments provider includes. [#1092](https://github.com/mmistakes/minimal-mistakes/issues/1092)
-* Replace category variable used in `_includes/breadcrumbs.html` to `site.category_archive` to avoid conflicts with `site.categories`. [#1063](https://github.com/mmistakes/minimal-mistakes/pull/1063) [#329](https://github.com/mmistakes/minimal-mistakes/issues/329)
+- Toggle close button on `mouseleave`. [#975](https://github.com/mmistakes/minimal-mistakes/issues/975)
+- Remove extraneous `</a>` and `</li>` tags from `paginator.html` include. [#1038](https://github.com/mmistakes/minimal-mistakes/pull/1038)
+- Fix Google+ comments provider includes. [#1092](https://github.com/mmistakes/minimal-mistakes/issues/1092)
+- Replace category variable used in `_includes/breadcrumbs.html` to `site.category_archive` to avoid conflicts with `site.categories`. [#1063](https://github.com/mmistakes/minimal-mistakes/pull/1063) [#329](https://github.com/mmistakes/minimal-mistakes/issues/329)
 
 ### Maintenance
 
-* Add mention of Greek localized UI text strings to theme documentation. [#972](https://github.com/mmistakes/minimal-mistakes/pull/972)
-* Update Greek localized UI text strings. [#1054](https://github.com/mmistakes/minimal-mistakes/pull/1054)
-* Add documentation for adding teaser images in grid view using `header.teaser`.
+- Add mention of Greek localized UI text strings to theme documentation. [#972](https://github.com/mmistakes/minimal-mistakes/pull/972)
+- Update Greek localized UI text strings. [#1054](https://github.com/mmistakes/minimal-mistakes/pull/1054)
+- Add documentation for adding teaser images in grid view using `header.teaser`.
 
 ## [4.4.1](https://github.com/mmistakes/minimal-mistakes/releases/tag/4.4.1)
 
 ### Enhancements
 
-* Add Greek localized UI text strings. [#958](https://github.com/mmistakes/minimal-mistakes/pull/958)
+- Add Greek localized UI text strings. [#958](https://github.com/mmistakes/minimal-mistakes/pull/958)
 
 ### Bug Fixes
 
-* Fix `video` helper to load Vimeo videos over https. [#945](https://github.com/mmistakes/minimal-mistakes/pull/945)
-* Fix close menu button that was removed when updating Greedy navigation script. [#969](https://github.com/mmistakes/minimal-mistakes/issues/969)
+- Fix `video` helper to load Vimeo videos over https. [#945](https://github.com/mmistakes/minimal-mistakes/pull/945)
+- Fix close menu button that was removed when updating Greedy navigation script. [#969](https://github.com/mmistakes/minimal-mistakes/issues/969)
 
 ## [4.4.0](https://github.com/mmistakes/minimal-mistakes/releases/tag/4.4.0)
 
 ### Enhancements
 
-* Move SCSS partials to `/_sass/minimal-mistakes` for easier CSS customization.
-* Replace `modified` with `last_modified_at` to leverage various Jekyll plugins that utilize this variable. [#930](https://github.com/mmistakes/minimal-mistakes/pull/930)
-* Add Lithuanian localized UI text. [#924](https://github.com/mmistakes/minimal-mistakes/pull/924)
-* Improve print stylesheet by increasing text contrast, removing elements that don't need to be printed, expanding URLs, and reducing amount of blank pages. [#909](https://github.com/mmistakes/minimal-mistakes/issues/909)
+- Move SCSS partials to `/_sass/minimal-mistakes` for easier CSS customization.
+- Replace `modified` with `last_modified_at` to leverage various Jekyll plugins that utilize this variable. [#930](https://github.com/mmistakes/minimal-mistakes/pull/930)
+- Add Lithuanian localized UI text. [#924](https://github.com/mmistakes/minimal-mistakes/pull/924)
+- Improve print stylesheet by increasing text contrast, removing elements that don't need to be printed, expanding URLs, and reducing amount of blank pages. [#909](https://github.com/mmistakes/minimal-mistakes/issues/909)
 
 ### Maintenance
 
-* Remove extra word in comment. [#911](https://github.com/mmistakes/minimal-mistakes/pull/911)
-* Fix typo in Utility Class docs. [#915](https://github.com/mmistakes/minimal-mistakes/pull/915)
+- Remove extra word in comment. [#911](https://github.com/mmistakes/minimal-mistakes/pull/911)
+- Fix typo in Utility Class docs. [#915](https://github.com/mmistakes/minimal-mistakes/pull/915)
 
 ## [4.3.1](https://github.com/mmistakes/minimal-mistakes/releases/tag/4.3.1)
 
 ### Bug Fixes
 
-* Fix `.masthead` and `.page__footer` overlapping full screen video elements. [#933](https://github.com/mmistakes/minimal-mistakes/issues/933)
-* Correctly show Related Posts heading when UI Text data file is omitted and `related: true` in YAML Front Matter. [#901](https://github.com/mmistakes/minimal-mistakes/pull/901)
+- Fix `.masthead` and `.page__footer` overlapping full screen video elements. [#933](https://github.com/mmistakes/minimal-mistakes/issues/933)
+- Correctly show Related Posts heading when UI Text data file is omitted and `related: true` in YAML Front Matter. [#901](https://github.com/mmistakes/minimal-mistakes/pull/901)
 
 ## [4.3.0](https://github.com/mmistakes/minimal-mistakes/releases/tag/4.3.0)
 
 ### Enhancements
 
-* Add workaround to allow theme gem's `/assets/js/main.min.js` file to be overridden by a local version. Simply add the following YAML Front Matter to the file:
+- Add workaround to allow theme gem's `/assets/js/main.min.js` file to be overridden by a local version. Simply add the following YAML Front Matter to the file:
 
   ```
   ---
@@ -754,216 +1013,216 @@
 
 ### Enhancements
 
-* Update [Greedy Navigation](https://github.com/lukejacksonn/GreedyNav) to flexbox version to make it more flexible when dealing with long site titles (`site.title`). [#836](https://github.com/mmistakes/minimal-mistakes/issues/836)
-* Adjust `box-shadow` in navigation and author sidebar. [#576](https://github.com/mmistakes/minimal-mistakes/pull/576)
-* Add Russian, Korean, and zh-TW localized UI text. [#815](https://github.com/mmistakes/minimal-mistakes/issues/815) [#834](https://github.com/mmistakes/minimal-mistakes/pull/834) [#838](https://github.com/mmistakes/minimal-mistakes/pull/838)
+- Update [Greedy Navigation](https://github.com/lukejacksonn/GreedyNav) to flexbox version to make it more flexible when dealing with long site titles (`site.title`). [#836](https://github.com/mmistakes/minimal-mistakes/issues/836)
+- Adjust `box-shadow` in navigation and author sidebar. [#576](https://github.com/mmistakes/minimal-mistakes/pull/576)
+- Add Russian, Korean, and zh-TW localized UI text. [#815](https://github.com/mmistakes/minimal-mistakes/issues/815) [#834](https://github.com/mmistakes/minimal-mistakes/pull/834) [#838](https://github.com/mmistakes/minimal-mistakes/pull/838)
 
 ### Bug Fixes
 
-* Fix Discourse embedded comments bug. [#823](https://github.com/mmistakes/minimal-mistakes/issues/823)
-* Fix `seo_author` default value in `seo.html` and add `author` meta. [#858](https://github.com/mmistakes/minimal-mistakes/pull/858)
+- Fix Discourse embedded comments bug. [#823](https://github.com/mmistakes/minimal-mistakes/issues/823)
+- Fix `seo_author` default value in `seo.html` and add `author` meta. [#858](https://github.com/mmistakes/minimal-mistakes/pull/858)
 
 ### Maintenance
 
-* Add theme meta info to `_layouts/default.html` and `main.css`.
-* Update README.
-* Improve the pagination and taxonomy archive documentation. [#826](https://github.com/mmistakes/minimal-mistakes/pull/826)
-* Add comments to `/docs/_config.yml` to clarify use of YAML references. [#847](https://github.com/mmistakes/minimal-mistakes/pull/847)
+- Add theme meta info to `_layouts/default.html` and `main.css`.
+- Update README.
+- Improve the pagination and taxonomy archive documentation. [#826](https://github.com/mmistakes/minimal-mistakes/pull/826)
+- Add comments to `/docs/_config.yml` to clarify use of YAML references. [#847](https://github.com/mmistakes/minimal-mistakes/pull/847)
 
 ## [4.2.1](https://github.com/mmistakes/minimal-mistakes/releases/tag/4.2.1)
 
 ### Enhancements
 
-* Improve `paginator.html` to support paginated pages that live inside of a subfolder. See [documentation](https://mmistakes.github.io/minimal-mistakes/docs/layouts/#home-page) for more details. [#764](https://github.com/mmistakes/minimal-mistakes/pull/764/)
+- Improve `paginator.html` to support paginated pages that live inside of a subfolder. See [documentation](https://mmistakes.github.io/minimal-mistakes/docs/layouts/#home-page) for more details. [#764](https://github.com/mmistakes/minimal-mistakes/pull/764/)
 
 ### Maintenance
 
-* Add `https` protocol to Google Universal Analytics embed. [#772](https://github.com/mmistakes/minimal-mistakes/pull/772)
+- Add `https` protocol to Google Universal Analytics embed. [#772](https://github.com/mmistakes/minimal-mistakes/pull/772)
 
 ## [4.2.0](https://github.com/mmistakes/minimal-mistakes/releases/tag/4.2.0)
 
 ### Enhancements
 
-* Add `video` helper (for YouTube/Vimeo) and video headers to `single`, `archive`, and `splash` layouts. [#788](https://github.com/mmistakes/minimal-mistakes/pull/788)
-* Add missing simplified Chinese localized UI text strings. [#747](https://github.com/mmistakes/minimal-mistakes/pull/747)
-* Add Nepali (Nepalese) localized UI text strings. [#785](https://github.com/mmistakes/minimal-mistakes/pull/785)
-* Remove borders from table elements found in Google Custom Search Engine widget. [#759](https://github.com/mmistakes/minimal-mistakes/issues/759)
+- Add `video` helper (for YouTube/Vimeo) and video headers to `single`, `archive`, and `splash` layouts. [#788](https://github.com/mmistakes/minimal-mistakes/pull/788)
+- Add missing simplified Chinese localized UI text strings. [#747](https://github.com/mmistakes/minimal-mistakes/pull/747)
+- Add Nepali (Nepalese) localized UI text strings. [#785](https://github.com/mmistakes/minimal-mistakes/pull/785)
+- Remove borders from table elements found in Google Custom Search Engine widget. [#759](https://github.com/mmistakes/minimal-mistakes/issues/759)
 
 ### Bug Fixes
 
-* Remove `position: sticky` JavaScript polyfill and fallback to default positioning for browsers that don't support it. [#752](https://github.com/mmistakes/minimal-mistakes/issues/752)
+- Remove `position: sticky` JavaScript polyfill and fallback to default positioning for browsers that don't support it. [#752](https://github.com/mmistakes/minimal-mistakes/issues/752)
 
 ### Maintenance
 
-* Fix invalid Google Universal Analytics example in documentation. [#783](https://github.com/mmistakes/minimal-mistakes/pull/783)
-* Bump `jekyll-sitemap` gem dependency to (1.0).
+- Fix invalid Google Universal Analytics example in documentation. [#783](https://github.com/mmistakes/minimal-mistakes/pull/783)
+- Bump `jekyll-sitemap` gem dependency to (1.0).
 
 ## [4.1.1](https://github.com/mmistakes/minimal-mistakes/releases/tag/4.1.1)
 
 ### Enhancements
 
-* Remove hardcoded `words_per_minute` "less than" and "minute read" values and make dynamic. [#703](https://github.com/mmistakes/minimal-mistakes/issues/703)
-* Update Font Awesome to `v4.7.0`. [#723](https://github.com/mmistakes/minimal-mistakes/issues/723), [#722](https://github.com/mmistakes/minimal-mistakes/issues/722)
-* Add support for YouTube channel URLs in author profile. [#716](https://github.com/mmistakes/minimal-mistakes/issues/716)
+- Remove hardcoded `words_per_minute` "less than" and "minute read" values and make dynamic. [#703](https://github.com/mmistakes/minimal-mistakes/issues/703)
+- Update Font Awesome to `v4.7.0`. [#723](https://github.com/mmistakes/minimal-mistakes/issues/723), [#722](https://github.com/mmistakes/minimal-mistakes/issues/722)
+- Add support for YouTube channel URLs in author profile. [#716](https://github.com/mmistakes/minimal-mistakes/issues/716)
 
 ### Bug Fixes
 
-* Add Jekyll as `spec.add_runtime_dependency` in `.gemspec`.
+- Add Jekyll as `spec.add_runtime_dependency` in `.gemspec`.
 
 ## [4.1.0](https://github.com/mmistakes/minimal-mistakes/releases/tag/4.1.0)
 
 ### Enhancements
 
-* Add Jekyll include for adding [custom author profile links](https://github.com/mmistakes/minimal-mistakes/blob/master/_includes/author-profile-custom-links.html) to sidebar
+- Add Jekyll include for adding [custom author profile links](https://github.com/mmistakes/minimal-mistakes/blob/master/_includes/author-profile-custom-links.html) to sidebar
 
 ### Bug Fixes
 
-* Fix link to Discourse.org homepage in `noscript` section [#699](https://github.com/mmistakes/minimal-mistakes/pull/699)
-* Fix padding issue with pagination buttons [#694](https://github.com/mmistakes/minimal-mistakes/issues/694)
+- Fix link to Discourse.org homepage in `noscript` section [#699](https://github.com/mmistakes/minimal-mistakes/pull/699)
+- Fix padding issue with pagination buttons [#694](https://github.com/mmistakes/minimal-mistakes/issues/694)
 
 ## [4.0.10](https://github.com/mmistakes/minimal-mistakes/releases/tag/4.0.10)
 
 ### Bug Fixes
 
-* Add Staticman default `path`. [#683](https://github.com/mmistakes/minimal-mistakes/issues/683)
+- Add Staticman default `path`. [#683](https://github.com/mmistakes/minimal-mistakes/issues/683)
 
 ### Maintenance
 
-* Slight correction/improvements to French UI text. [#685](https://github.com/mmistakes/minimal-mistakes/pull/685)
+- Slight correction/improvements to French UI text. [#685](https://github.com/mmistakes/minimal-mistakes/pull/685)
 
 ## [4.0.9](https://github.com/mmistakes/minimal-mistakes/releases/tag/4.0.9)
 
 ### Bug Fixes
 
-* Fix overlapping sidebar navigation lists due to `max-height: 100vh`. [#668](https://github.com/mmistakes/minimal-mistakes/issues/668)
+- Fix overlapping sidebar navigation lists due to `max-height: 100vh`. [#668](https://github.com/mmistakes/minimal-mistakes/issues/668)
 
 ## [4.0.8](https://github.com/mmistakes/minimal-mistakes/releases/tag/4.0.8)
 
 ### Bug Fixes
 
-* Set default value for `words_per_minute`. [#657](https://github.com/mmistakes/minimal-mistakes/issues/657)
-* Adjust sidebar navigation list CSS so it collapses at the correct width.
+- Set default value for `words_per_minute`. [#657](https://github.com/mmistakes/minimal-mistakes/issues/657)
+- Adjust sidebar navigation list CSS so it collapses at the correct width.
 
 ### Maintenance
 
-* Add Google AdSense banner to `/docs/_layouts/default.html` for demo site.
+- Add Google AdSense banner to `/docs/_layouts/default.html` for demo site.
 
 ## [4.0.7](https://github.com/mmistakes/minimal-mistakes/releases/tag/4.0.7)
 
 ### Enhancements
 
-* Add `!default` values to **\_sass/\_variables.scss**.
-* Collapse sidebar navigation lists on smaller screens. [#607](https://github.com/mmistakes/minimal-mistakes/issues/607)
+- Add `!default` values to **\_sass/\_variables.scss**.
+- Collapse sidebar navigation lists on smaller screens. [#607](https://github.com/mmistakes/minimal-mistakes/issues/607)
 
 ### Bug Fixes
 
-* Rename `#comments` to something more unique to avoid clashes with Kramdown generated headline IDs. [#582](https://github.com/mmistakes/minimal-mistakes/issues/582)
+- Rename `#comments` to something more unique to avoid clashes with Kramdown generated headline IDs. [#582](https://github.com/mmistakes/minimal-mistakes/issues/582)
 
 ### Maintenance
 
-* Reorganize SCSS partials in **assets/css/main.scss**
+- Reorganize SCSS partials in **assets/css/main.scss**
 
 ## [4.0.6](https://github.com/mmistakes/minimal-mistakes/releases/tag/4.0.6)
 
 ### Enhancements
 
-* Add [`figure` helper](https://mmistakes.github.io/minimal-mistakes/docs/helpers/#figure) to make generating a `<figure>` element with a single image and caption easier. [#572](https://github.com/mmistakes/minimal-mistakes/pull/572)
-* Add structured data markup for `itemprop="person"` in author profile sidebar. [#647](https://github.com/mmistakes/minimal-mistakes/pull/647)
+- Add [`figure` helper](https://mmistakes.github.io/minimal-mistakes/docs/helpers/#figure) to make generating a `<figure>` element with a single image and caption easier. [#572](https://github.com/mmistakes/minimal-mistakes/pull/572)
+- Add structured data markup for `itemprop="person"` in author profile sidebar. [#647](https://github.com/mmistakes/minimal-mistakes/pull/647)
 
 ### Bug Fixes
 
-* Fix improper YAML formatting of some locales. [#651](https://github.com/mmistakes/minimal-mistakes/pull/651)
+- Fix improper YAML formatting of some locales. [#651](https://github.com/mmistakes/minimal-mistakes/pull/651)
 
 ### Maintenance
 
-* Clarify "migrating to gem-theme" instructions in **Quick Start Guide**.
-* Add `rake preview` task for testing `/test` during theme development.
+- Clarify "migrating to gem-theme" instructions in **Quick Start Guide**.
+- Add `rake preview` task for testing `/test` during theme development.
 
 ## [4.0.5](https://github.com/mmistakes/minimal-mistakes/releases/tag/4.0.5)
 
 ### Enhancements
 
-* Update gems: `jekyll-sitemap` (0.12), `jekyll-feed` (0.8).
-* Improve next/previous pager links visibility by changing gray color to blue (`$link-color`).
+- Update gems: `jekyll-sitemap` (0.12), `jekyll-feed` (0.8).
+- Improve next/previous pager links visibility by changing gray color to blue (`$link-color`).
 
 ### Bug Fixes
 
-* Fix `.sidebar` flicker/jump when hovered. [#583](https://github.com/mmistakes/minimal-mistakes/issues/583)
+- Fix `.sidebar` flicker/jump when hovered. [#583](https://github.com/mmistakes/minimal-mistakes/issues/583)
 
 ### Maintenance
 
-* Move contents of `gh-pages` branch to `master` inside of the `/docs` folder.
+- Move contents of `gh-pages` branch to `master` inside of the `/docs` folder.
 
 ## [4.0.4](https://github.com/mmistakes/minimal-mistakes/releases/tag/4.0.4)
 
 ### Enhancements
 
-* "Gemify" theme ~> `gem "minimal-mistakes-jekyll"`
-* Replace `base_path` include with `absolute_url` filter where possible.
-* Allow images to be placed in other folders. Remove `/images/` only restriction and encourage placement in `/assets/images/` instead. **Full paths are now required. If upgrading from MM 3.4 add `/images/` before filenames in Front Matter and `_config.yml` variables.**
-* Add [home `layout`](https://github.com/mmistakes/minimal-mistakes/blob/master/_layouts/home.html)
-* Added missing Turkish translations for UI text. [#621](https://github.com/mmistakes/minimal-mistakes/pull/621)
-* Make author avatar optional in sidebar.
-* Update **/\_includes/seo.html** for meta description. [#558](https://github.com/mmistakes/minimal-mistakes/pull/558)
+- "Gemify" theme ~> `gem "minimal-mistakes-jekyll"`
+- Replace `base_path` include with `relative_url` filter where possible.
+- Allow images to be placed in other folders. Remove `/images/` only restriction and encourage placement in `/assets/images/` instead. **Full paths are now required. If upgrading from MM 3.4 add `/images/` before filenames in Front Matter and `_config.yml` variables.**
+- Add [home `layout`](https://github.com/mmistakes/minimal-mistakes/blob/master/_layouts/home.html)
+- Added missing Turkish translations for UI text. [#621](https://github.com/mmistakes/minimal-mistakes/pull/621)
+- Make author avatar optional in sidebar.
+- Update **/\_includes/seo.html** for meta description. [#558](https://github.com/mmistakes/minimal-mistakes/pull/558)
 
 ### Bug Fixes
 
-* Fix navigation bar animation "flicker" in Safari [#568](https://github.com/mmistakes/minimal-mistakes/issues/568)
-* Fix `author.avatar` paths for externally hosted images.
+- Fix navigation bar animation "flicker" in Safari [#568](https://github.com/mmistakes/minimal-mistakes/issues/568)
+- Fix `author.avatar` paths for externally hosted images.
 
 ### Maintenance
 
-* Add documentation around `gem "minimal-mistakes-jekyll"` installation and use.
-* Add note about using full image paths for eg. `assets/images/filename.jpg` (header images, overlays, galleries, feature rows, etc.) instead of assuming they will always be in `/images/`.
-* Add "[Overriding Theme Defaults](https://mmistakes.github.io/minimal-mistakes/docs/overriding-theme-defaults/)" page to documentation.
+- Add documentation around `gem "minimal-mistakes-jekyll"` installation and use.
+- Add note about using full image paths for eg. `assets/images/filename.jpg` (header images, overlays, galleries, feature rows, etc.) instead of assuming they will always be in `/images/`.
+- Add "[Overriding Theme Defaults](https://mmistakes.github.io/minimal-mistakes/docs/overriding-theme-defaults/)" page to documentation.
 
 ## [3.4.8](https://github.com/mmistakes/minimal-mistakes/releases/tag/3.4.8)
 
 ### Enhancements
 
-* Improve type readability for larger viewports by bumping up base `font-size`. [#533](https://github.com/mmistakes/minimal-mistakes/issues/533)
-* Update Portuguese localized UI text. [#541](https://github.com/mmistakes/minimal-mistakes/pull/541)
-* Add `page.title` and via parameter to Twitter share link. [#538](https://github.com/mmistakes/minimal-mistakes/pull/538)
+- Improve type readability for larger viewports by bumping up base `font-size`. [#533](https://github.com/mmistakes/minimal-mistakes/issues/533)
+- Update Portuguese localized UI text. [#541](https://github.com/mmistakes/minimal-mistakes/pull/541)
+- Add `page.title` and via parameter to Twitter share link. [#538](https://github.com/mmistakes/minimal-mistakes/pull/538)
 
 ### Bug Fixes
 
-* Fix Last.fm author profile URL. [#540](https://github.com/mmistakes/minimal-mistakes/pull/540)
+- Fix Last.fm author profile URL. [#540](https://github.com/mmistakes/minimal-mistakes/pull/540)
 
 ### Maintenance
 
-* Move Brazilian Portuguese localized text under `pt-BR` key.
+- Move Brazilian Portuguese localized text under `pt-BR` key.
 
 ## [3.4.7](https://github.com/mmistakes/minimal-mistakes/releases/tag/3.4.7)
 
 ### Enhancements
 
-* Add `layout` based and user-defined class names to `<body>` element for added CSS hooks. [#526](https://github.com/mmistakes/minimal-mistakes/pull/526)
-* Add simplified Chinese localized UI text. [#532](https://github.com/mmistakes/minimal-mistakes/pull/532)
+- Add `layout` based and user-defined class names to `<body>` element for added CSS hooks. [#526](https://github.com/mmistakes/minimal-mistakes/pull/526)
+- Add simplified Chinese localized UI text. [#532](https://github.com/mmistakes/minimal-mistakes/pull/532)
 
 ### Bug Fixes
 
-* Remove duplicate include of `base_path` in category-list.html [#522](https://github.com/mmistakes/minimal-mistakes/pull/522)
+- Remove duplicate include of `base_path` in category-list.html [#522](https://github.com/mmistakes/minimal-mistakes/pull/522)
 
 ## [3.4.6](https://github.com/mmistakes/minimal-mistakes/releases/tag/3.4.6)
 
 ### Enhancements
 
-* Add Italian "comments" related localized UI text. [#514](https://github.com/mmistakes/minimal-mistakes/pull/514)
+- Add Italian "comments" related localized UI text. [#514](https://github.com/mmistakes/minimal-mistakes/pull/514)
 
 ### Bug Fixes
 
-* Disable `compress` HTML layout by default. To enable add `layout: compress` to `_layouts/default.html`.
+- Disable `compress` HTML layout by default. To enable add `layout: compress` to `_layouts/default.html`.
 
 ## [3.4.5](https://github.com/mmistakes/minimal-mistakes/releases/tag/3.4.5)
 
 ### Enhancements
 
-* Improve line numbered code block styling when using `{% highlight linenos %}` tag. [#513](https://github.com/mmistakes/minimal-mistakes/issues/513)
-* Add English fallback to "Follow" button label. [#496](https://github.com/mmistakes/minimal-mistakes/pull/496)
+- Improve line numbered code block styling when using `{% highlight linenos %}` tag. [#513](https://github.com/mmistakes/minimal-mistakes/issues/513)
+- Add English fallback to "Follow" button label. [#496](https://github.com/mmistakes/minimal-mistakes/pull/496)
 
 ### Bug Fixes
 
-* Fix Firefox alignment issues with code blocks generated with the `{% highlight %}` tag. [#512](https://github.com/mmistakes/minimal-mistakes/issues/512)
+- Fix Firefox alignment issues with code blocks generated with the `{% highlight %}` tag. [#512](https://github.com/mmistakes/minimal-mistakes/issues/512)
 
 ### Maintenance
 
@@ -1273,7 +1532,7 @@
 
 ### Enhancements
 
-- Add overlay_filter param to hero headers [#298](https://github.com/mmistakes/minimal-mistakes/pull/298)
+- Add `overlay_filter` param to hero headers [#298](https://github.com/mmistakes/minimal-mistakes/pull/298)
 
 ## [3.1.3](https://github.com/mmistakes/minimal-mistakes/releases/tag/3.1.3)
 
diff --git a/Gemfile b/Gemfile
index 1291498971d7..3be9c3cd812e 100644
--- a/Gemfile
+++ b/Gemfile
@@ -1,2 +1,2 @@
 source "https://rubygems.org"
-gemspec
\ No newline at end of file
+gemspec
diff --git a/LICENSE b/LICENSE
index 3e733ff32a69..67814e6c3f9e 100644
--- a/LICENSE
+++ b/LICENSE
@@ -1,6 +1,6 @@
 The MIT License (MIT)
 
-Copyright (c) 2013-2020 Michael Rose and contributors
+Copyright (c) 2013-2024 Michael Rose and contributors
 
 Permission is hereby granted, free of charge, to any person obtaining a copy
 of this software and associated documentation files (the "Software"), to deal
diff --git a/README.md b/README.md
index 2757638ce8bd..3b66aeab73fe 100644
--- a/README.md
+++ b/README.md
@@ -2,18 +2,12 @@
 
 [![LICENSE](https://img.shields.io/badge/license-MIT-lightgrey.svg)](https://raw.githubusercontent.com/mmistakes/minimal-mistakes/master/LICENSE)
 [![Jekyll](https://img.shields.io/badge/jekyll-%3E%3D%203.7-blue.svg)](https://jekyllrb.com/)
-[![Ruby gem](https://img.shields.io/gem/v/minimal-mistakes-jekyll.svg)](https://rubygems.org/gems/minimal-mistakes-jekyll)
-[![Tip Me via PayPal](https://img.shields.io/badge/PayPal-tip%20me-green.svg?logo=paypal)](https://www.paypal.me/mmistakes)
 
 Minimal Mistakes is a flexible two-column Jekyll theme, perfect for building personal sites, blogs, and portfolios. As the name implies, styling is purposely minimalistic to be enhanced and customized by you :smile:.
 
 :sparkles: See what's new in the [CHANGELOG](CHANGELOG.md).
 
-**If you enjoy this theme, please consider [supporting me](https://www.paypal.me/mmistakes) to continue developing and maintaining it.**
-
-[![Support via PayPal](https://cdn.jsdelivr.net/gh/twolfson/paypal-github-button@1.0.0/dist/button.svg)](https://www.paypal.me/mmistakes)
-
-**Note:** The theme uses the [jekyll-include-cache](https://github.com/benbalter/jekyll-include-cache) plugin which will need to be installed in your `Gemfile` and added to the `plugins` array of `_config.yml`. Otherwise you'll encounter `Unknown tag 'include_cached'` errors at build.
+**Note:** The theme uses the [jekyll-include-cache](https://github.com/benbalter/jekyll-include-cache) plugin which will need to be installed in your `Gemfile` and must be retained in the `plugins` array of `_config.yml`. Otherwise you'll encounter `Unknown tag 'include_cached'` errors at build.
 
 [![Minimal Mistakes live preview][2]][1]
 
@@ -31,9 +25,9 @@ Minimal Mistakes is a flexible two-column Jekyll theme, perfect for building per
 - Several responsive layout options (single, archive index, search, splash, and paginated home page).
 - Optimized for search engines with support for [Twitter Cards](https://dev.twitter.com/cards/overview) and [Open Graph](http://ogp.me/) data.
 - Optional [header images](https://mmistakes.github.io/minimal-mistakes/docs/layouts/#headers), [custom sidebars](https://mmistakes.github.io/minimal-mistakes/docs/layouts/#sidebars), [table of contents](https://mmistakes.github.io/minimal-mistakes/docs/helpers/#table-of-contents), [galleries](https://mmistakes.github.io/minimal-mistakes/docs/helpers/#gallery), related posts, [breadcrumb links](https://mmistakes.github.io/minimal-mistakes/docs/configuration/#breadcrumb-navigation-beta), [navigation lists](https://mmistakes.github.io/minimal-mistakes/docs/helpers/#navigation-list), and more.
-- Commenting support (powered by [Disqus](https://disqus.com/), [Facebook](https://developers.facebook.com/docs/plugins/comments), Google+, [Discourse](https://www.discourse.org/), static-based via [Staticman](https://staticman.net/), and [utterances](https://utteranc.es/)).
+- Commenting support (powered by [Disqus](https://disqus.com/), [Facebook](https://developers.facebook.com/docs/plugins/comments), Google+, [Discourse](https://www.discourse.org/), static-based via [Staticman](https://staticman.net/), [utterances](https://utteranc.es/), and [giscus](https://giscus.app/)).
 - [Google Analytics](https://www.google.com/analytics/) support.
-- UI localized text in English (default), Brazilian Portuguese (Português brasileiro), Catalan, Chinese, Danish, Dutch, Finnish, French (Français), German (Deutsch), Greek, Hindi (हिंदी), Hungarian, Indonesian, Irish (Gaeilge), Italian (Italiano), Japanese, Korean, Malayalam, Myanmar (Burmese), Nepali (Nepalese), Persian (فارسی), Polish, Punjabi (ਪੰਜਾਬੀ), Romanian, Russian, Slovak, Spanish (Español), Swedish, Thai, Turkish (Türkçe), and Vietnamese.
+- UI localized text in English (default), Arabic (عربي), Brazilian Portuguese (Português brasileiro), Bulgarian, Catalan, Chinese, Czech, Danish, Dutch, Finnish, French (Français), German (Deutsch), Greek, Hebrew, Hindi (हिंदी), Hungarian, Indonesian, Irish (Gaeilge), Italian (Italiano), Japanese, Kiswahili, Korean, Malayalam, Myanmar (Burmese), Nepali (Nepalese), Norwegian (Norsk), Persian (فارسی), Polish, Punjabi (ਪੰਜਾਬੀ), Romanian, Russian, Slovak, Spanish (Español), Swedish, Thai, Turkish (Türkçe), Ukrainian (Українська) and Vietnamese.
 
 ## Skins (color variations)
 
@@ -116,17 +110,42 @@ To install:
    source "https://rubygems.org"
 
    gem "github-pages", group: :jekyll_plugins
+   gem "jekyll-include-cache", group: :jekyll_plugins
    ```
 
 2. Add `jekyll-include-cache` to the `plugins` array of your `_config.yml`.
 
-3. Fetch and update bundled gems by running the following [Bundler](http://bundler.io/) command:
+3. Fetch and update bundled gems by running the following [Bundler](https://bundler.io/) command:
 
    ```bash
    bundle
    ```
 
-4. Add `remote_theme: "mmistakes/minimal-mistakes@4.20.1"` to your `_config.yml` file. Remove any other `theme:` or `remote_theme:` entry.
+4. Add `remote_theme: "mmistakes/minimal-mistakes@4.26.2"` to your `_config.yml` file. Remove any other `theme:` or `remote_theme:` entry.
+
+<!--
+  Dev note: The version number is currently hard-coded in these files:
+
+    - package.json
+    - README.md (this file)
+    - docs/_data/theme.yml
+    - docs/_pages/home.md (in Front Matter "excerpt")
+
+  `package.json` holds the authoritative version number, and the others can be updated with `bundle exec rake version`.
+
+  The following files should also be regenerated:
+
+    - _includes/copyright.html, _includes/copyright.js, _sass/minimal-mistakes/_copyright.scss
+      (Run `bundle exec rake clean` then `bundle exec rake copyright` - all three references `package.json`)
+    - assets/js/main.min.js (Run `bundle exec rake js`, references `_includes/copyright.js`)
+
+  *Tip*: The default Rake task will update all of the above files at once.
+
+  Additionally, the license year is hard-coded in these files and are NOT covered by a Rake task:
+
+    - README.md (this file, near the end)
+    - LICENSE
+-->
 
 **Looking for an example?** Use the [Minimal Mistakes remote theme starter](https://github.com/mmistakes/mm-github-pages-starter/generate) for the quickest method of getting a GitHub Pages hosted site up and running. Generate a new repository from the starter, replace sample content with your own, and configure as needed.
 
@@ -134,15 +153,11 @@ To install:
 
 For detailed instructions on how to configure, customize, add/migrate content, and more read the [theme's documentation](https://mmistakes.github.io/minimal-mistakes/docs/quick-start-guide/).
 
----
-
 ## Contributing
 
-Having trouble working with the theme? Found a typo in the documentation? Interested in adding a feature or [fixing a bug](https://github.com/mmistakes/minimal-mistakes/issues)? Then by all means [submit an issue](https://github.com/mmistakes/minimal-mistakes/issues/new) or [pull request](https://help.github.com/articles/using-pull-requests/). If this is your first pull request, it may be helpful to read up on the [GitHub Flow](https://guides.github.com/introduction/flow/) first.
-
-Minimal Mistakes has been designed as a base for you to customize and fit your site's unique needs. Please keep this in mind when requesting features and/or submitting pull requests. If it's not something that most people will use, I probably won't consider it. When in doubt ask. 
+Found a typo in the documentation or interested in [fixing a bug](https://github.com/mmistakes/minimal-mistakes/issues)? Then by all means [submit an issue](https://github.com/mmistakes/minimal-mistakes/issues/new) or [pull request](https://help.github.com/articles/using-pull-requests/). If this is your first pull request, it may be helpful to read up on the [GitHub Flow](https://guides.github.com/introduction/flow/) first.
 
-This goes for author sidebar links and "share button" additions -- I have no intention of merging in every possibly option, the essentials are there to get you started :smile:.
+For help with using the theme or general Jekyll support questions, please use the [Jekyll Talk forums](https://talk.jekyllrb.com/).
 
 ### Pull Requests
 
@@ -160,8 +175,6 @@ To set up your environment to develop this theme, run `bundle install`.
 
 To test the theme, run `bundle exec rake preview` and open your browser at `http://localhost:4000/test/`. This starts a Jekyll server using content in the `test/` directory. As modifications are made to the theme and test site, it will regenerate and you should see the changes in the browser after a refresh.
 
----
-
 ## Credits
 
 ### Creator
@@ -174,7 +187,7 @@ To test the theme, run `bundle exec rake preview` and open your browser at `http
 
 ### Icons + Demo Images:
 
-- [The Noun Project](https://thenounproject.com) -- Garrett Knoll, Arthur Shlain, and [tracy tam](https://thenounproject.com/tracytam)
+- [The Noun Project](https://thenounproject.com) - Garrett Knoll, Arthur Shlain, and [tracy tam](https://thenounproject.com/tracytam)
 - [Font Awesome](http://fontawesome.io/)
 - [Unsplash](https://unsplash.com/)
 
@@ -191,14 +204,13 @@ To test the theme, run `bundle exec rake preview` and open your browser at `http
 - [Gumshoe](https://github.com/cferdinandi/gumshoe)
 - [jQuery throttle / debounce](http://benalman.com/projects/jquery-throttle-debounce-plugin/)
 - [Lunr](http://lunrjs.com)
-
----
+- [Clipboard.js](https://clipboardjs.com)
 
 ## License
 
 The MIT License (MIT)
 
-Copyright (c) 2013-2020 Michael Rose and contributors
+Copyright (c) 2013-2024 Michael Rose and contributors
 
 Permission is hereby granted, free of charge, to any person obtaining a copy
 of this software and associated documentation files (the "Software"), to deal
@@ -250,7 +262,7 @@ Smooth Scroll is distributed under the terms of the [MIT License](http://opensou
 
 Minimal Mistakes incorporates [Gumshoejs](http://github.com/cferdinandi/gumshoe),
 Copyright (c) 2019 Chris Ferdinandi.
-Smooth Scroll is distributed under the terms of the [MIT License](http://opensource.org/licenses/MIT).
+Gumshoejs is distributed under the terms of the [MIT License](http://opensource.org/licenses/MIT).
 
 Minimal Mistakes incorporates [jQuery throttle / debounce](http://benalman.com/projects/jquery-throttle-debounce-plugin/),
 Copyright (c) 2010 "Cowboy" Ben Alman.
@@ -271,3 +283,7 @@ Pure Liquid Jekyll Table of Contents is distributed under the terms of the [MIT
 Minimal Mistakes incorporates [Lunr](http://lunrjs.com),
 Copyright (c) 2018 Oliver Nightingale.
 Lunr is distributed under the terms of the [MIT License](http://opensource.org/licenses/MIT).
+
+Minimal Mistakes incorporates [clipboard.js](https://clipboardjs.com/),
+Copyright (c) 2021 Zeno Rocha.
+Clipboard.js is distributed under the terms of the [MIT License](https://opensource.org/licenses/MIT).
diff --git a/Rakefile b/Rakefile
index 921330e6ab79..af25ad8a85c7 100644
--- a/Rakefile
+++ b/Rakefile
@@ -1,6 +1,15 @@
 require "bundler/gem_tasks"
 require "jekyll"
+require "json"
 require "listen"
+require "rake/clean"
+require "shellwords"
+require "time"
+require "yaml"
+
+task :default => %i[copyright changelog js version]
+
+package_json = JSON.parse(File.read("package.json"))
 
 def listen_ignore_paths(base, options)
   [
@@ -65,8 +74,7 @@ task :preview do
         puts "     Halting auto-regeneration."
         exit 0
       end
-
-      loop { sleep 1000 }
+      sleep
     end
   rescue ThreadError
     # You pressed Ctrl-C, oh my!
@@ -74,3 +82,126 @@ task :preview do
 
   Jekyll::Commands::Serve.process(options)
 end
+
+task :history => :changelog
+task :changelog => "docs/_docs/18-history.md"
+file "docs/_docs/18-history.md" => "CHANGELOG.md" do |t|
+  front_matter = {
+    title: "History",
+    classes: "wide",
+    permalink: "/docs/history/",
+    excerpt: "Change log of enhancements and bug fixes made to the theme.",
+    sidebar: {
+      nav: "docs",
+    },
+    last_modified_at: Time.now.iso8601,
+    toc: false,
+  }
+  # https://stackoverflow.com/a/49553523/5958455
+  front_matter = JSON.parse(JSON.dump(front_matter))
+  File.open(t.name, "w") do |f|
+    f.puts front_matter.to_yaml
+    f.puts "---"
+    f.puts ""
+    f.puts "<!--\n  Sourced from CHANGELOG.md\n  See Rakefile `task :changelog` for details\n-->"
+    f.puts ""
+    f.puts "{% raw %}"
+    # Remove H1
+    changelog = File.read(t.prerequisites.first)
+      .gsub(/^# [^\n]*$/m, "")
+      .gsub(/\(#(\d+)\)$/m, "[#\\1](https://github.com/mmistakes/minimal-mistakes/issues/\\1)")
+      .strip
+    f.write changelog
+    f.puts ""
+    f.puts "{% endraw %}"
+  end
+end
+
+COPYRIGHT_LINES = [
+  "Minimal Mistakes Jekyll Theme #{package_json["version"]} by Michael Rose",
+  "Copyright 2013-#{Time.now.year} Michael Rose - mademistakes.com | @mmistakes",
+  "Free for personal and commercial use under the MIT license",
+  "https://github.com/mmistakes/minimal-mistakes/blob/master/LICENSE",
+]
+
+COPYRIGHT_FILES = [
+  "_includes/copyright.html",
+  "_includes/copyright.js",
+  "_sass/minimal-mistakes/_copyright.scss",
+]
+
+def genenerate_copyright_file(filename, header, prefix, footer)
+  File.open(filename, "w") do |f|
+    f.puts header
+    COPYRIGHT_LINES.each do |line|
+      f.puts "#{prefix}#{line}"
+    end
+    f.puts footer
+  end
+end
+
+file "_includes/copyright.html" => "package.json" do |t|
+  genenerate_copyright_file(t.name, "<!--", "  ", "-->")
+end
+
+file "_includes/copyright.js" => "package.json" do |t|
+  genenerate_copyright_file(t.name, "/*!", " * ", " */")
+end
+
+file "_sass/minimal-mistakes/_copyright.scss" => "package.json" do |t|
+  genenerate_copyright_file(t.name, "/*!", " * ", " */")
+end
+
+task :copyright => COPYRIGHT_FILES
+
+CLEAN.include(*COPYRIGHT_FILES)
+
+JS_FILES = ["assets/js/vendor/jquery/jquery-3.6.0.js"] + Dir.glob("assets/js/plugins/*.js") + ["assets/js/_main.js"]
+JS_TARGET = "assets/js/main.min.js"
+task :js => JS_TARGET
+file JS_TARGET => ["_includes/copyright.js"] + JS_FILES do |t|
+  sh Shellwords.join(%w[npx uglifyjs -c --comments /@mmistakes/ --source-map -m -o] +
+    [t.name] + t.prerequisites)
+end
+
+task :watch_js do
+  listener = Listen.to(
+    "assets/js",
+    ignore: /main\.min\.js$/,
+  ) do |modified, added, removed|
+    Rake::Task[:js].invoke
+  end
+
+  trap("INT") do
+    listener.stop
+    exit 0
+  end
+
+  begin
+    listener.start
+    sleep
+  rescue ThreadError
+  end
+end
+
+task :version => ["docs/_data/theme.yml", "README.md", "docs/_pages/home.md"]
+
+file "docs/_data/theme.yml" => "package.json" do |t|
+  theme = { "version" => package_json["version"] }
+  File.open(t.name, "w") do |f|
+    f.puts "# for use with in-page templates"
+    f.puts theme.to_yaml
+  end
+end
+
+file "README.md" => "package.json" do |t|
+  content = File.read(t.name)
+  content = content.gsub(/(mmistakes\/minimal-mistakes@)[\d.]+/, '\1' + package_json["version"])
+  File.write(t.name, content)
+end
+
+file "docs/_pages/home.md" => "package.json" do |t|
+  content = File.read(t.name)
+  content = content.gsub(/(\breleases\/tag\/|Latest release v)[\d.]+/, '\1' + package_json["version"])
+  File.write(t.name, content)
+end
diff --git a/_config.yml b/_config.yml
index 92e645cc2546..af7d57221b02 100644
--- a/_config.yml
+++ b/_config.yml
@@ -16,6 +16,7 @@ minimal_mistakes_skin    : "default" # "air", "aqua", "contrast", "dark", "dirt"
 
 # Site Settings
 locale                   : "en-US"
+rtl                      : # true, false (default) # turns direction of the page into right to left for RTL languages
 title                    : "Site Title"
 title_separator          : "-"
 subtitle                 : # site tagline that appears below site title in masthead
@@ -27,10 +28,13 @@ repository               : # GitHub username/repo-name e.g. "mmistakes/minimal-m
 teaser                   : # path of fallback teaser image, e.g. "/assets/images/500x300.png"
 logo                     : # path of logo image to display in the masthead, e.g. "/assets/images/88x88.png"
 masthead_title           : # overrides the website title displayed in the masthead, use " " for no title
-# breadcrumbs            : false # true, false (default)
+breadcrumbs              : # true, false (default)
 words_per_minute         : 200
+enable_copy_code_button  : # true, false (default)
+copyright                : # "copyright" name, defaults to site.title
+copyright_url            : # "copyright" URL, defaults to site.url
 comments:
-  provider               : # false (default), "disqus", "discourse", "facebook", "staticman", "staticman_v2", "utterances", "custom"
+  provider               : # false (default), "disqus", "discourse", "facebook", "staticman", "staticman_v2", "utterances", "giscus", "custom"
   disqus:
     shortname            : # https://help.disqus.com/customer/portal/articles/466208-what-s-a-shortname-
   discourse:
@@ -43,6 +47,18 @@ comments:
   utterances:
     theme                : # "github-light" (default), "github-dark"
     issue_term           : # "pathname" (default)
+  giscus:
+    repo_id              : # Shown during giscus setup at https://giscus.app
+    category_name        : # Full text name of the category
+    category_id          : # Shown during giscus setup at https://giscus.app
+    discussion_term      : # "pathname" (default), "url", "title", "og:title"
+    reactions_enabled    : # '1' for enabled (default), '0' for disabled
+    theme                : # "light" (default), "dark", "dark_dimmed", "transparent_dark", "preferred_color_scheme"
+    strict               : # 1 for enabled, 0 for disabled (default)
+    input_position       : # "top", "bottom" # The comment input box will be placed above or below the comments
+    emit_metadata        : # 1 for enabled, 0 for disabled (default) # https://github.com/giscus/giscus/blob/main/ADVANCED-USAGE.md#imetadatamessage
+    lang                 : # "en" (default)
+    lazy                 : # true, false # Loading of the comments will be deferred until the user scrolls near the comments container.
   staticman:
     branch               : # "master"
     endpoint             : # "https://{your Staticman v3 API}/v3/entry/github/"
@@ -51,9 +67,12 @@ reCaptcha:
   secret                 :
 atom_feed:
   path                   : # blank (default) uses feed.xml
+  hide                   : # true, false (default)
 search                   : # true, false (default)
 search_full_content      : # true, false (default)
 search_provider          : # lunr (default), algolia, google
+lunr:
+  search_within_pages    : # true, false (default)
 algolia:
   application_id         : # YOUR_APPLICATION_ID
   index_name             : # YOUR_INDEX_NAME
@@ -65,8 +84,9 @@ google:
 # SEO Related
 google_site_verification :
 bing_site_verification   :
-yandex_site_verification :
 naver_site_verification  :
+yandex_site_verification :
+baidu_site_verification  :
 
 # Social Sharing
 twitter:
@@ -85,7 +105,7 @@ social:
 
 # Analytics
 analytics:
-  provider               : false # false (default), "google", "google-universal", "google-gtag", "custom"
+  provider               : # false (default), "google", "google-universal", "google-gtag", "custom"
   google:
     tracking_id          :
     anonymize_ip         : # true, false (default)
@@ -207,9 +227,33 @@ sass:
 
 # Outputting
 permalink: /:categories/:title/
+timezone: # https://en.wikipedia.org/wiki/List_of_tz_database_time_zones
+
+
+# Pagination with jekyll-paginate
 paginate: 5 # amount of posts to show
 paginate_path: /page:num/
-timezone: # https://en.wikipedia.org/wiki/List_of_tz_database_time_zones
+
+# Pagination with jekyll-paginate-v2
+# See https://github.com/sverrirs/jekyll-paginate-v2/blob/master/README-GENERATOR.md#site-configuration
+#   for configuration details
+pagination:
+  # Set enabled to true to use paginate v2
+  # enabled: true
+  debug: false
+  collection: 'posts'
+  per_page: 10
+  permalink: '/page/:num/'
+  title: ':title - page :num'
+  limit: 0
+  sort_field: 'date'
+  sort_reverse: true
+  category: 'posts'
+  tag: ''
+  locale: ''
+  trail:
+    before: 2
+    after: 2
 
 
 # Plugins (previously gems:)
diff --git a/_data/ui-text.yml b/_data/ui-text.yml
index f9853e27427b..c1d3a12a9a9a 100644
--- a/_data/ui-text.yml
+++ b/_data/ui-text.yml
@@ -272,20 +272,20 @@ pt-PT:
   <<: *DEFAULT_PT
 # Brazilian Portuguese
 pt-BR:
-  skip_links                 :
-  skip_primary_nav           :
-  skip_content               :
-  skip_footer                :
+  skip_links                 : "Pular links"
+  skip_primary_nav           : "Pular para navegação primária"
+  skip_content               : "Pular para conteúdo"
+  skip_footer                : "Pular para rodapé"
   page                       : "Página"
   pagination_previous        : "Anterior"
   pagination_next            : "Próxima"
-  breadcrumb_home_label      : "Home"
+  breadcrumb_home_label      : "Início"
   breadcrumb_separator       : "/"
-  menu_label                 :
-  search_label               : "Buscar"
+  menu_label                 : "Chavear menu"
+  search_label               : "Chavear busca"
   toc_label                  : "Nesta página"
   ext_link_label             : "Link direto"
-  less_than                  : "menos que"
+  less_than                  : "menos de"
   minute_read                : "minuto(s) de leitura"
   share_on_label             : "Compartilhe"
   meta_label                 :
@@ -296,13 +296,13 @@ pt-BR:
   comments_title             : "Comentários"
   more_label                 : "Saiba mais"
   related_label              : "Talvez você também goste"
-  follow_label               : "Acompanhe no"
+  follow_label               : "Siga:"
   feed_label                 : "Feed"
   powered_by                 : "Desenvolvido com"
   website_label              : "Site"
   email_label                : "E-mail"
   recent_posts               : "Publicações recentes"
-  undefined_wpm              : "Parâmetro words_per_minute indefinido no _config.yml"
+  undefined_wpm              : "Parâmetro words_per_minute não definido em _config.yml"
   comment_form_info          : "Seu e-mail não será publicado. Os campos obrigatórios estão marcados"
   comment_form_comment_label : "Comentário"
   comment_form_md_info       : "Você pode usar Markdown."
@@ -314,9 +314,9 @@ pt-BR:
   comment_success_msg        : "Obrigado pelo seu comentário! Ele aparecerá no site assim que for aprovado."
   comment_error_msg          : "Desculpe, ocorreu um erro no envio. Verifique se todos os campos obrigatórios foram preenchidos e tente novamente."
   loading_label              : "Carregando..."
-  search_label_text          :
-  search_placeholder_text    : "Pesquisar..."
-  search_algolia_no_results  :
+  search_label_text          : "Digite seu termo de busca..."
+  search_placeholder_text    : "Digite seu termo de busca..."
+  search_algolia_no_results  : "Nenhum resultado"
   results_found              : "Resultado(s) encontrado(s)"
   back_to_top                : "Voltar para o topo"
 
@@ -496,7 +496,7 @@ de: &DEFAULT_DE
   toc_label                  : "Auf dieser Seite"
   ext_link_label             : "Direkter Link"
   less_than                  : "weniger als"
-  minute_read                : "Minuten zum lesen"
+  minute_read                : "Minuten zum Lesen"
   share_on_label             : "Teilen auf"
   meta_label                 :
   tags_label                 : "Tags:"
@@ -912,49 +912,52 @@ nl-NL:
 # ----------
 id: &DEFAULT_ID
   skip_links                 :
-  skip_primary_nav           :
-  skip_content               :
-  skip_footer                :
+  skip_primary_nav           : "Loncat ke navigasi"
+  skip_content               : "Loncat ke konten"
+  skip_footer                : "Loncat ke footer"
   page                       : "Halaman"
-  pagination_previous        : "Kembali"
-  pagination_next            : "Maju"
-  breadcrumb_home_label      : "Home"
+  pagination_previous        : "Sebelumnya"
+  pagination_next            : "Selanjutnya"
+  breadcrumb_home_label      : "Beranda"
   breadcrumb_separator       : "/"
-  menu_label                 : "Menu Toggle"
-  search_label               :
+  menu_label                 : "Menu"
+  search_label               : "Pencarian"
   toc_label                  : "Pada Halaman Ini"
   ext_link_label             : "Link langsung"
   less_than                  : "Kurang dari"
-  minute_read                : "Waktu baca"
-  share_on_label             : "Berbagi di"
+  minute_read                : "menit baca"
+  share_on_label             : "Bagikan di"
   meta_label                 :
-  tags_label                 : "Golongan:"
+  tags_label                 : "Label:"
   categories_label           : "Kategori:"
   date_label                 : "Diupdate:"
   comments_label             : "Tinggalkan komentar"
   comments_title             : "Komentar"
   more_label                 : "Pelajari lagi"
-  related_label              : "Anda juga akan suka"
+  related_label              : "Anda mungkin suka"
   follow_label               : "Ikuti:"
   feed_label                 : "Feed"
   powered_by                 : "Didukung oleh"
   website_label              : "Website"
   email_label                : "Email"
-  recent_posts               : "Posting terbaru"
+  recent_posts               : "Post terbaru"
   undefined_wpm              : "Parameter terdeskripsi words_per_minute di _config.yml"
-  comment_form_info          : "Email Anda tidak akan dipublish. Kolom yang diperlukan ditandai"
+  comment_form_info          : "Email Anda tidak akan dipublish. Kolom yang diperlukan ditandai dengan tanda "
   comment_form_comment_label : "Komentar"
-  comment_form_md_info       : "Markdown disupport."
+  comment_form_md_info       : "Markdown didukung."
   comment_form_name_label    : "Nama"
   comment_form_email_label   : "Alamat email"
   comment_form_website_label : "Website (opsional)"
-  comment_btn_submit         : "Submit Komentar"
-  comment_btn_submitted      : "Telah disubmit"
-  comment_success_msg        : "Terimakasih atas komentar Anda! Komentar ini akan tampil setelah disetujui."
-  comment_error_msg          : "Maaf, ada kesalahan pada submisi Anda. Pastikan seluruh kolom sudah dilengkapi dan coba kembali."
-  loading_label              : "Sedang meload..."
-  search_label_text          :
-  search_algolia_no_results  :
+  comment_btn_submit         : "Kirim Komentar"
+  comment_btn_submitted      : "Telah dikirim"
+  comment_success_msg        : "Terimakasih atas komentar Anda! Komentar akan tampil setelah disetujui."
+  comment_error_msg          : "Maaf, ada kesalahan pada komentar Anda. Pastikan seluruh kolom sudah dilengkapi dan coba kembali."
+  loading_label              : "Sedang memuat..."
+  search_label_text          : "Masukkan kata kunci pencarian..."
+  search_placeholder_text    : "Masukkan kata kunci pencarian..."
+  search_algolia_no_results  : "Tidak ada hasil"
+  results_found              : "Hasil pencarian ditemukan"
+  back_to_top                : "Kembali ke awal"
 id-ID:
   <<: *DEFAULT_ID
 
@@ -972,7 +975,7 @@ vi: &DEFAULT_VI
   breadcrumb_separator       : "/"
   menu_label                 : "Menu"
   search_label               : "Tìm kiếm"
-  toc_label                  : "Tại trang này"
+  toc_label                  : "Mục lục"
   ext_link_label             : "Đường dẫn trực tiếp"
   less_than                  : "chỉ cần"
   minute_read                : "phút để đọc"
@@ -1005,7 +1008,7 @@ vi: &DEFAULT_VI
   loading_label              : "Đang tải..."
   search_label_text          : "Nhập từ khóa cần tìm..."
   search_placeholder_text    : "Nhập từ khóa cần tìm..."
-  search_algolia_no_results  :
+  search_algolia_no_results  : "Không tìm thấy kết quả nào"
   results_found              : "Kết quả tìm được"
   back_to_top                : "Lên đầu trang"
 vi-VN:
@@ -1015,16 +1018,16 @@ vi-VN:
 # ------
 da: &DEFAULT_DA
   skip_links                 :
-  skip_primary_nav           :
-  skip_content               :
-  skip_footer                :
+  skip_primary_nav           : "Gå til hovedmenuen"
+  skip_content               : "Gå til indholdet"
+  skip_footer                : "Gå til sidefoden"
   page                       : "Side"
   pagination_previous        : "Forrige"
   pagination_next            : "Næste"
-  breadcrumb_home_label      : "Home"
+  breadcrumb_home_label      : "Forside"
   breadcrumb_separator       : "/"
   menu_label                 : "Vis/skjul menu"
-  search_label               :
+  search_label               : "Søgning til/fra"
   toc_label                  : "På denne side"
   ext_link_label             : "Direkte link"
   less_than                  : "mindre end"
@@ -1056,9 +1059,9 @@ da: &DEFAULT_DA
   comment_success_msg        : "Tak for din kommentar! Den bliver vist på siden, så snart den er godkendt."
   comment_error_msg          : "Desværre skete der en fejl. Prøv igen, mens du sørger for at alle obligatoriske felter er udfyldt."
   loading_label              : "Indlæser..."
-  search_label_text          :
+  search_label_text          : "Hvad leder du efter..."
   search_placeholder_text    : "Hvad leder du efter..."
-  search_algolia_no_results  :
+  search_algolia_no_results  : "Ingen resultater"
   results_found              : "Resultat(er) fundet"
   back_to_top                : "Tilbage til toppen"
 da-DK:
@@ -1067,17 +1070,17 @@ da-DK:
 # Polish
 # ------
 pl: &DEFAULT_PL
-  skip_links                 :
-  skip_primary_nav           :
-  skip_content               :
-  skip_footer                :
+  skip_links                 : "Pomiń linki"
+  skip_primary_nav           : "Przejdź do nawigacji"
+  skip_content               : "Przejdź do treści"
+  skip_footer                : "Przejdź do stopki"
   page                       : "Strona"
   pagination_previous        : "Poprzednia"
   pagination_next            : "Następna"
   breadcrumb_home_label      : "Strona główna"
   breadcrumb_separator       : "/"
   menu_label                 : "Przełącz menu"
-  search_label               :
+  search_label               : "Przełącz wyszukiwanie"
   toc_label                  : "Spis treści"
   ext_link_label             : "Link bezpośredni"
   less_than                  : "mniej niż"
@@ -1098,7 +1101,7 @@ pl: &DEFAULT_PL
   email_label                : "Email"
   recent_posts               : "Najnowsze wpisy"
   undefined_wpm              : "Parametr words_per_minute nie został zdefiniowany w _config.yml."
-  comment_form_info          : "Twój adres email nie będzie udostępiony. Wymagane pola są oznaczone"
+  comment_form_info          : "Twój adres email nie będzie udostępiony. Wymagane pola są oznaczone."
   comment_form_comment_label : "Skomentuj"
   comment_form_md_info       : "Markdown jest wspierany"
   comment_form_name_label    : "Imię"
@@ -1109,8 +1112,11 @@ pl: &DEFAULT_PL
   comment_success_msg        : "Dziękuję za Twój komentarz! Zostanie dodany po akceptacji."
   comment_error_msg          : "Niestety wystąpił błąd. Proszę upewnij się, że wszystkie wymagane pola zostały wypełnione i spróbuj ponownie."
   loading_label              : "Trwa ładowanie strony..."
-  search_label_text          :
+  search_label_text          : "Wprowadź kryteria wyszukiwania..."
+  search_placeholder_text    : "Wprowadź kryteria wyszukiwania..."
   search_algolia_no_results  : "Brak wyników"
+  results_found              : "Znalezione wyniki"
+  back_to_top                : "Wróć na górę"
 pl-PL:
   <<: *DEFAULT_PL
 
@@ -1394,7 +1400,7 @@ fa: &DEFAULT_FA
   toc_label                  : "در این صفحه"
   ext_link_label             : "لینک مستقیم"
   less_than                  : " "
-  minute_read                : "(طول مطالعه (دقیقه"
+  minute_read                : "دقیقه، طول مطالعه"
   share_on_label             : "اشتراک گذاری در"
   meta_label                 :
   tags_label                 : "تگ ها: "
@@ -1421,9 +1427,9 @@ fa: &DEFAULT_FA
   comment_btn_submitted      : "ارسال شد"
   comment_success_msg        : ".باتشکر از ارسال دیدگاه! پس از تأیید، این دیدگاه در سایت نشان داده خواهد شد"
   comment_error_msg          : ".متاسفانه در ارسال شما خطایی بود. لطفا مطمئن شوید تمام فیلدهای مورد نیاز تکمیل شده و دوباره امتحان کنید"
-  loading_label              : "...بارگذاری"
+  loading_label              : "بارگذاری..."
   search_label_text          :
-  search_placeholder_text    : "...عبارت جستجوی خود را وارد کنید"
+  search_placeholder_text    : "عبارت جستجوی خود را وارد کنید..."
   search_algolia_no_results  :
   results_found              : "نتایج"
   back_to_top                : "بازگشت به بالا"
@@ -1694,9 +1700,9 @@ ga-IE:
 # -----------------
 fi: &DEFAULT_FI
   skip_links                 : "Ohita linkit"
-  skip_primary_nav           : "Hyppää pää navigaatioon"
-  skip_content               : "Hyppää sisältöön"
-  skip_footer                : "Hyppää alareunaan"
+  skip_primary_nav           : "Siirry päävalikkoon"
+  skip_content               : "Siirry sisältöön"
+  skip_footer                : "Siirry alareunaan"
   page                       : "Sivu"
   pagination_previous        : "Edellinen"
   pagination_next            : "Seuraava"
@@ -1707,39 +1713,39 @@ fi: &DEFAULT_FI
   toc_label                  : "Tällä sivulla"
   ext_link_label             : "Suora linkki"
   less_than                  : "vähemmän kuin"
-  minute_read                : "lukuaika"
+  minute_read                : "minuuttia luettavaa"
   share_on_label             : "Jaa"
   meta_label                 :
-  tags_label                 : "Tagit:"
+  tags_label                 : "Tunnisteet:"
   categories_label           : "Kategoriat:"
   date_label                 : "Päivitetty:"
   comments_label             : "Jätä kommentti"
   comments_title             : "Kommentit"
   more_label                 : "Lisää"
-  related_label              : "Voit olla kiinnostunut myös"
+  related_label              : "Saatat olla kiinnostunut myös"
   follow_label               : "Seuraa:"
   feed_label                 : "Syöte"
-  powered_by                 : "Voimanlähteenä"
-  website_label              : "Websivu"
-  email_label                : "Email"
-  recent_posts               : "Viimeisimmät postaukset"
+  powered_by                 : "Käyttäen"
+  website_label              : "Kotisivu"
+  email_label                : "Sähköposti"
+  recent_posts               : "Viimeisimmät kirjoitukset"
   undefined_wpm              : "words_per_minute asetusta ei ole määritelty _config.yml tiedostossa"
-  comment_form_info          : "Your email address will not be published. Required fields are marked"
+  comment_form_info          : "Sinun sähköpostiosoitetta ei julkaista. Vaaditut kentät ovat merkittyjä"
   comment_form_comment_label : "Kommentti"
   comment_form_md_info       : "Tukee markdown muotoilua."
   comment_form_name_label    : "Nimi"
-  comment_form_email_label   : "Email osoite"
-  comment_form_website_label : "Webbisivu (vapaaehtoinen)"
+  comment_form_email_label   : "Sähköpostiosoite"
+  comment_form_website_label : "Nettisivu (vapaaehtoinen)"
   comment_btn_submit         : "Lähetä"
   comment_btn_submitted      : "Lähetetty"
-  comment_success_msg        : "Kiitos kommentista, se julkaistaan tällä sivulla moderoinnin jälkeen."
-  comment_error_msg          : "Tarkista että olet täyttänyt kaikki kentät ja yritä uudelleen."
+  comment_success_msg        : "Kiitos kommentista, se julkaistaan tällä sivulla tarkastelun jälkeen."
+  comment_error_msg          : "Tapahtui virhe. Tarkista, että olet täyttänyt kaikki kentät ja yritä uudelleen."
   loading_label              : "Ladataan..."
   search_label_text          : "Hakusana..."
   search_placeholder_text    : "Hakusana..."
-  search_algolia_no_results  :
+  search_algolia_no_results  : "Ei hakutuloksia"
   results_found              : "Tulosta"
-  back_to_top                : "Ylös"
+  back_to_top                : "Siirry ylös"
 
 # Myanmar (Burmese)
 # -----------------
@@ -1794,6 +1800,386 @@ my: &DEFAULT_MY
 my-MM:
   <<: *DEFAULT_MY
 
+# Norwegian
+# -------
+no: &DEFAULT_NO
+  skip_links                 : "Hopp over lenker"
+  skip_primary_nav           : "Gå til primærnavigasjon"
+  skip_content               : "Gå til innhold"
+  skip_footer                : "Gå til fotnote"
+  page                       : "Side"
+  pagination_previous        : "Forrige"
+  pagination_next            : "Neste"
+  breadcrumb_home_label      : "Hjem"
+  breadcrumb_separator       : "/"
+  menu_label                 : "Vis/skjul meny"
+  search_label               : "Vis/skjul søk"
+  toc_label                  : "På denne siden"
+  ext_link_label             : "Direkte lenke"
+  less_than                  : "mindre enn"
+  minute_read                : "minutters lesing"
+  share_on_label             : "Del på"
+  meta_label                 :
+  tags_label                 : "Nøkkelord:"
+  categories_label           : "Kategorier:"
+  date_label                 : "Oppdatert:"
+  comments_label             : "Skriv en kommentar"
+  comments_title             : "Kommentarer"
+  more_label                 : "Lær mer"
+  related_label              : "Du vil kanskje også lese:"
+  follow_label               : "Følg:"
+  feed_label                 : "Feed"
+  powered_by                 : "Lagd med"
+  website_label              : "Nettside"
+  email_label                : "E-post"
+  recent_posts               : "Nyeste innlegg"
+  undefined_wpm              : "Parameteret words_per_minute er ikke definert i _config.yml"
+  comment_form_info          : "Din e-postadresse vil ikke bli publisert. Obligatoriske felt er markert"
+  comment_form_comment_label : "Kommentar"
+  comment_form_md_info       : "Markdown er støttet"
+  comment_form_name_label    : "Navn"
+  comment_form_email_label   : "E-postadresse"
+  comment_form_website_label : "Nettside (frivillig)"
+  comment_btn_submit         : "Send kommentar"
+  comment_btn_submitted      : "Sendt"
+  comment_success_msg        : "Takk for din kommentar! Den blir vist på siden så fort den er godkjent"
+  comment_error_msg          : "Beklager, noe gikk galt. Sjekk at alle obligatoriska felt er utfylt og prøv igjen"
+  loading_label              : "Laster..."
+  search_label_text          : "Skriv inn søkeord"
+  search_placeholder_text    : "Skriv inn søkeord"
+  search_algolia_no_results  : "Ingen treff"
+  results_found              : "Treff funnet"
+  back_to_top                : "Tillbake til toppen"
+no-NB:
+  <<: *DEFAULT_NO
+no-NN:
+  <<: *DEFAULT_NO
+
+# Hebrew
+# -------
+he: &DEFAULT_HE
+  skip_links                 : "דלגו על קישור"
+  skip_primary_nav           : "דלגו לראשי"
+  skip_content               : "דלגו לתוכן"
+  skip_footer                : "דלגו לתחתית"
+  page                       : "דף"
+  pagination_previous        : "קודם"
+  pagination_next            : "הבא"
+  breadcrumb_home_label      : "בית"
+  breadcrumb_separator       : "/"
+  menu_label                 : "סגירה/פתיחה של תפריט"
+  search_label               : "סגירה/פתיחה של חיפוש"
+  toc_label                  : "בדף זה"
+  ext_link_label             : "קישור ישיר"
+  less_than                  : "פחות מ"
+  minute_read                : "דקת קריאה"
+  share_on_label             : "שתפו ב"
+  meta_label                 :
+  tags_label                 : "תגיות:"
+  categories_label           : "קטגוריות:"
+  date_label                 : "מעודכן:"
+  comments_label             : "השאירו הערה"
+  comments_title             : "הערות"
+  more_label                 : "קראו עוד"
+  related_label              : "אולי יעניין אותך גם"
+  follow_label               : "עקבו אחרי"
+  feed_label                 : "פיד"
+  powered_by                 : "Powered by"
+  website_label              : "אתר"
+  email_label                : "אימייל"
+  recent_posts               : "פוסטים אחרונים"
+  undefined_wpm              : "Undefined parameter words_per_minute at _config.yml"
+  comment_form_info          : "האימייל שלך נשמר חסוי. שדות חובה מסומנים"
+  comment_form_comment_label : "הערה"
+  comment_form_md_info       : "Markdown is supported."
+  comment_form_name_label    : "שם"
+  comment_form_email_label   : "כתובת אימייל"
+  comment_form_website_label : "אתר (אפשרות)"
+  comment_btn_submit         : "שלחו הערה"
+  comment_btn_submitted      : "נשלח"
+  comment_success_msg        : "תודה על ההערה שלך! היא תופיע באתר ברגע שתאושר."
+  comment_error_msg          : "סליחה, קרתה תקלה בשליחה. אנא וודאו שכל השדות מלאים ונסו שנית."
+  loading_label              : "טוען..."
+  search_label_text          : "מילות חיפוש..."
+  search_placeholder_text    : "מילות חיפוש..."
+  search_algolia_no_results  : "אין תוצאות"
+  results_found              : "תוצאות נמצאו"
+  back_to_top                : "חזרה להתחלה"
+he-IL:
+  <<: *DEFAULT_HE
+
+# Arabic (عربي)
+# --------------
+ar: &DEFAULT_AR
+  skip_links                 : "تخطي الروابط"
+  skip_primary_nav           : "تخطى الى شريط التنقل"
+  skip_content               : "الانتقال الى المحتوى"
+  skip_footer                : "الانتقال الى ذيل الصفحة"
+  page                       : "صفحه"
+  pagination_previous        : "قبل"
+  pagination_next            : "بعد"
+  breadcrumb_home_label      : "الرئيس"
+  breadcrumb_separator       : "/"
+  menu_label                 : "الخيارات"
+  search_label               : "البحث"
+  toc_label                  : "على هذه الصفحة"
+  ext_link_label             : "رابط مباشر"
+  less_than                  : "اقل من"
+  minute_read                : "دقيقة قرائية"
+  share_on_label             : "مشاركة"
+  meta_label                 :
+  tags_label                 : "العلامات الوصفية:"
+  categories_label           : "الفئات:"
+  date_label                 : "تم التحديث:"
+  comments_label             : "اترك تعليق"
+  comments_title             : "التعليقات"
+  more_label                 : "اقرأ المزيد"
+  related_label              : "قد يعجبك أيضا"
+  follow_label               : "تابع:"
+  feed_label                 : "الاخبار - RSS"
+  powered_by                 : "تم تطوير بواسطة"
+  website_label              : "موقع"
+  email_label                : "ايميل"
+  recent_posts               : "المشاركات الأخيرة"
+  undefined_wpm              : "معامل غير معرف في words_per_minute (كلمة في الدقيقة) في ملف _config.yml"
+  comment_form_info          : "لن يتم نشر عنوان بريدك الإلكتروني. الحقول المطلوبة إلزامية"
+  comment_form_comment_label : "تعليق"
+  comment_form_md_info       : "لغة ال Markdown مدعومة."
+  comment_form_name_label    : "الاسم"
+  comment_form_email_label   : "البريد الالكتروني"
+  comment_form_website_label : "الموقع (اختياري)"
+  comment_btn_submit         : "أضف تعليق"
+  comment_btn_submitted      : "تم الإرسال"
+  comment_success_msg        : "شكراً على التعليق! سيتم اظهاره عندما يتم موافقة عليه."
+  comment_error_msg          : "للأسف, هناك خطأ في المحاولة. الرجاء الحرص على تعبئة جميع الخانات و محاولة مجدداً."
+  loading_label              : "جاري التحميل..."
+  search_label_text          : "اكتب مصطلح للبحث..."
+  search_placeholder_text    : "اكتب مصطلح للبحث..."
+  search_algolia_no_results  : "لا توجد نتائج"
+  results_found              : "تم إيجاد نتيجة"
+  back_to_top                : "الانتقال الى الأعلى"
+ar-SD:
+  <<: *DEFAULT_AR
+ar-SA:
+  <<: *DEFAULT_AR
+ar-AE:
+  <<: *DEFAULT_AR
+ar-EG:
+  <<: *DEFAULT_AR
+
+# Kiswahili
+# -----------------
+sw: &DEFAULT_SW
+  skip_links                 : "Ruka viungo"
+  skip_primary_nav           : "Ruka orodha kuu"
+  skip_content               : "Ruka maandiko maakuu"
+  skip_footer                : "Ruka chini"
+  page                       : "Ukurasa"
+  pagination_previous        : "Rudi"
+  pagination_next            : "Endelea"
+  breadcrumb_home_label      : "Ukurasa wa kwanza"
+  breadcrumb_separator       : "/"
+  menu_label                 : "Wezesha/Zima orodha"
+  search_label               : "Wezesha/Zima kutafuta"
+  toc_label                  : "Kwa ukurasa huu"
+  ext_link_label             : "Kiungo mbio"
+  less_than                  : "Soma kwa dakikia ndogo kuliko"
+  minute_read                : "Soma kwa dakika"
+  share_on_label             : "Tangaza"
+  meta_label                 :
+  tags_label                 : "Alama:"
+  categories_label           : "Aina:"
+  date_label                 : "Geuzi ya mwisho:"
+  comments_label             : "Wacha maoni"
+  comments_title             : "Maoni"
+  more_label                 : "Jifunze zaidi"
+  related_label              : "Pia, utapenda"
+  follow_label               : "Fuata:"
+  feed_label                 : "Feed"
+  powered_by                 : "Inatumia"
+  website_label              : "Tovuti"
+  email_label                : "Barua pepe"
+  recent_posts               : "Makala juzi"
+  undefined_wpm              : "Ingizo words_per_minute kwa _config.yml haijawekwa"
+  comment_form_info          : "Barua pepe yako haitaonekana. Kuna alama kwa ingizo tunahitaji."
+  comment_form_comment_label : "Maoni"
+  comment_form_md_info       : "Unaweza kutumia `Markdown`."
+  comment_form_name_label    : "Jina"
+  comment_form_email_label   : "Barua pepe"
+  comment_form_website_label : "Tovuti (hiari)"
+  comment_btn_submit         : "Tuma maoni"
+  comment_btn_submitted      : "Umetuma"
+  comment_success_msg        : "Asante kwa maoni yako! Itaonekana ikiridhiwa."
+  comment_error_msg          : "Pole, kuna makosa kwa ingizo yako. Tafadhali angalia umeandika kwa ingizo zote zinahitaji, na jaribu tena."
+  loading_label              : "Inapakiwa..."
+  search_label_text          : "Ingiza neno unatafuta..."
+  search_placeholder_text    : "Ingiza neno unatafuta..."
+  search_algolia_no_results  : "Hakuna matokeo"
+  results_found              : "Tumepata"
+  back_to_top                : "Rudi juu"
+sw-KE:
+  <<: *DEFAULT_SW
+sw-TZ:
+  <<: *DEFAULT_SW
+
+# Ukrainian / Українська
+# -----------------
+uk: &DEFAULT_UK
+  skip_links                 : "Посилання для переходу"
+  skip_primary_nav           : "Перейти до основної навігації"
+  skip_content               : "Перейти до змісту"
+  skip_footer                : "Перейти до нижнього колонтитула"
+  page                       : "Сторінка"
+  pagination_previous        : "Попередня"
+  pagination_next            : "Наступна"
+  breadcrumb_home_label      : "Головна"
+  breadcrumb_separator       : "/"
+  menu_label                 : "Випадаюче меню"
+  search_label               : "Пошук"
+  toc_label                  : "Зміст"
+  ext_link_label             : "Пряме посилання"
+  less_than                  : "менше ніж"
+  minute_read                : "хв. на чітання"
+  share_on_label             : "Поділитися"
+  meta_label                 :
+  tags_label                 : "Мітки:"
+  categories_label           : "Розділи:"
+  date_label                 : "Дата зміни:"
+  comments_label             : "Залишити коментар"
+  comments_title             : "Коментарі"
+  more_label                 : "Читати далі"
+  related_label              : "Вам також може сподобатись"
+  follow_label               : "Зв'язатися зі мною:"
+  feed_label                 : "RSS-стрічка"
+  powered_by                 : "Сайт працює на"
+  website_label              : "Сайт"
+  email_label                : "Электронна пошта"
+  recent_posts               : "Останні записи"
+  undefined_wpm              : "Не визначено параметр words_per_minute в _config.yml"
+  comment_form_info          : "Вашу адресу електронної пошти не буде опубліковано. Обов'язкові поля позначені"
+  comment_form_comment_label : "Коментар"
+  comment_form_md_info       : "Підтримується синтаксис Markdown."
+  comment_form_name_label    : "Ім'я"
+  comment_form_email_label   : "Електронна пошта"
+  comment_form_website_label : "Посилання на сайт (необов'язково)"
+  comment_btn_submit         : "Залишити коментар"
+  comment_btn_submitted      : "Відправлено"
+  comment_success_msg        : "Дякую за Ваш коментар! Його буде опубліковано на сайті після перевірки."
+  comment_error_msg          : "На жаль, сталася помилка з надсиланням коментаря. Будь ласка, переконайтеся, що всі обов'язкові поля заповнені та спробуйте знову."
+  loading_label              : "Відправка..."
+  search_label_text          : "Введіть пошуковий запит..."
+  search_placeholder_text    : "Введіть пошуковий запит..."
+  search_algolia_no_results  :
+  results_found              : "Знайдено"
+uk-UA:
+  <<: *DEFAULT_UK
+
+# Czech / čeština
+# -----------------
+cs: &DEFAULT_CS
+  skip_links                 : "Rychlé odkazy"
+  skip_primary_nav           : "Přejít na hlavní navigace"
+  skip_content               : "Přejít na obsah"
+  skip_footer                : "Přejít na zápatí"
+  page                       : "Stránka"
+  pagination_previous        : "Předchozí"
+  pagination_next            : "Další"
+  breadcrumb_home_label      : "Domů"
+  breadcrumb_separator       : "/"
+  menu_label                 : "Přepnout zobrazení menu"
+  search_label               : "Přepnout zobrazení vyhledávání"
+  toc_label                  : "Na této stránce"
+  ext_link_label             : "Přímý odkaz"
+  less_than                  : "méně než"
+  minute_read                : "minut"
+  share_on_label             : "Sdílet"
+  meta_label                 :
+  tags_label                 : "Štítky:"
+  categories_label           : "Rubriky:"
+  date_label                 : "Aktualizováno:"
+  comments_label             : "Okomentovat"
+  comments_title             : "Komentáře"
+  more_label                 : "Zjistit více"
+  related_label              : "Může se vám také líbit"
+  follow_label               : "Sledovat:"
+  feed_label                 : "Zdroj"
+  powered_by                 : "Používáme"
+  website_label              : "Web"
+  email_label                : "E-mail"
+  recent_posts               : "Nejnovější příspěvky"
+  undefined_wpm              : "V souboru _config.yml chybí parametr words_per_minute"
+  comment_form_info          : "Vaše e-mailová adresa nebude zveřejněna. Povinná pole jsou označena"
+  comment_form_comment_label : "Komentář"
+  comment_form_md_info       : "Podporuje markdown."
+  comment_form_name_label    : "Jméno"
+  comment_form_email_label   : "E-mailová adresa"
+  comment_form_website_label : "Web (volitelné)"
+  comment_btn_submit         : "Odeslat komentář"
+  comment_btn_submitted      : "Odesláno"
+  comment_success_msg        : "Děkujeme za komentář. Na stránce se objeví jakmile projde schválením."
+  comment_error_msg          : "Odeslání se nezdařilo. Zkontrolujte, že jste vyplnili všechna povinná pole a zkuste to znovu."
+  loading_label              : "Načítání..."
+  search_label_text          : "Zadejte vyhledávání..."
+  search_placeholder_text    : "Zadejte vyhledávání..."
+  search_algolia_no_results  : "Žádné výsledky"
+  results_found              : "Nalezené výsledky"
+  back_to_top                : "Na začátek stránky"
+cs-CZ:
+  <<: *DEFAULT_CS
+
+# Bulgarian
+# -----------------
+bg: &DEFAULT_BG
+  skip_links                 : "Пропуснете връзките"
+  skip_primary_nav           : "Преминете към основната навигация"
+  skip_content               : "Преминете към съдържанието"
+  skip_footer                : "Преминете към долния колонтитул"
+  page                       : "Страница"
+  pagination_previous        : "Предишна"
+  pagination_next            : "Следваща"
+  breadcrumb_home_label      : "Начало"
+  breadcrumb_separator       : "/"
+  menu_label                 : "Превключване на меню"
+  search_label               : "Превключване на търсене"
+  toc_label                  : "На тази страница"
+  ext_link_label             : "Пряка връзка"
+  less_than                  : "по-малко от"
+  minute_read                : "минута четене"
+  share_on_label             : "Споделете"
+  meta_label                 :
+  tags_label                 : "Етикети:"
+  categories_label           : "Категории:"
+  date_label                 : "Обновено:"
+  comments_label             : "Оставете коментар"
+  comments_title             : "Коментари"
+  more_label                 : "Научете повече"
+  related_label              : "Може да са ви интересни"
+  follow_label               : "Последвайте:"
+  feed_label                 : "Емисия"
+  powered_by                 : "Осъществено чрез"
+  website_label              : "Уебсайт"
+  email_label                : "Е-поща"
+  recent_posts               : "Последни публикации"
+  undefined_wpm              : "Недефиниран параметър words_per_minute в _config.yml"
+  comment_form_info          : "Вашият адрес за е-поща няма да бъде публикуван. Задължителните полета са обозначени"
+  comment_form_comment_label : "Коментар"
+  comment_form_md_info       : "Поддържа се Маркдаун."
+  comment_form_name_label    : "Име"
+  comment_form_email_label   : "Адрес за е-поща"
+  comment_form_website_label : "Уебсайт (по желание)"
+  comment_btn_submit         : "Изпращане на коментар"
+  comment_btn_submitted      : "Изпратено"
+  comment_success_msg        : "Благодарности за коментара! Ще се покаже на сайта, след като бъде одобрен."
+  comment_error_msg          : "Съжаляваме, възникна грешка с изпращането. Моля, уверете се, че всички задължителни полета са попълнени и опитайте отново."
+  loading_label              : "Зареждане..."
+  search_label_text          : "Въведете термин за търсене..."
+  search_placeholder_text    : "Въведете термин за търсене..."
+  search_algolia_no_results  : "Няма резултати"
+  results_found              : "Намерени резултати"
+  back_to_top                : "Обратно към началото"
+bg-BG:
+  <<: *DEFAULT_BG
+
 # Another locale
 # --------------
 #
diff --git a/_includes/after-content.html b/_includes/after-content.html
new file mode 100644
index 000000000000..e69de29bb2d1
diff --git a/_includes/archive-single.html b/_includes/archive-single.html
index ef4609987625..7854c961bd43 100644
--- a/_includes/archive-single.html
+++ b/_includes/archive-single.html
@@ -10,8 +10,8 @@
   {% assign title = post.title %}
 {% endif %}
 
-<div class="{{ include.type | default: "list" }}__item">
-  <article class="archive__item" itemscope itemtype="https://schema.org/CreativeWork">
+<div class="{{ include.type | default: 'list' }}__item">
+  <article class="archive__item" itemscope itemtype="https://schema.org/CreativeWork"{% if post.locale %} lang="{{ post.locale }}"{% endif %}>
     {% if include.type == "grid" and teaser %}
       <div class="archive__item-teaser">
         <img src="{{ teaser | relative_url }}" alt="">
@@ -24,7 +24,7 @@ <h2 class="archive__item-title no_toc" itemprop="headline">
         <a href="{{ post.url | relative_url }}" rel="permalink">{{ title }}</a>
       {% endif %}
     </h2>
-    {% include post__meta.html type=include.type %}
+    {% include page__meta.html type=include.type %}
     {% if post.excerpt %}<p class="archive__item-excerpt" itemprop="description">{{ post.excerpt | markdownify | strip_html | truncate: 160 }}</p>{% endif %}
   </article>
 </div>
diff --git a/_includes/author-profile-custom-links.html b/_includes/author-profile-custom-links.html
index b89ffcb7df6c..1a3d4caefc55 100644
--- a/_includes/author-profile-custom-links.html
+++ b/_includes/author-profile-custom-links.html
@@ -1,6 +1,6 @@
 <!--
   <li>
-    <a href="http://link-to-whatever-social-network.com/user/" itemprop="sameAs" rel="nofollow noopener noreferrer">
+    <a href="http://link-to-whatever-social-network.com/user/" itemprop="sameAs" rel="nofollow noopener noreferrer me">
       <i class="fas fa-fw" aria-hidden="true"></i> Custom Social Profile Link
     </a>
   </li>
diff --git a/_includes/author-profile.html b/_includes/author-profile.html
index d384ee734376..e256ec7dd18f 100644
--- a/_includes/author-profile.html
+++ b/_includes/author-profile.html
@@ -1,28 +1,22 @@
 {% assign author = page.author | default: page.authors[0] | default: site.author %}
 {% assign author = site.data.authors[author] | default: author %}
 
-<div itemscope itemtype="https://schema.org/Person">
+<div itemscope itemtype="https://schema.org/Person" class="h-card">
 
   {% if author.avatar %}
     <div class="author__avatar">
-      {% if author.home %}
-        <a href="{{ author.home | relative_url }}">
-          <img src="{{ author.avatar | relative_url }}" alt="{{ author.name }}" itemprop="image">
-        </a>
-      {% else %}
-        <img src="{{ author.avatar | relative_url }}" alt="{{ author.name }}" itemprop="image">
-      {% endif %}
+      <a href="{{ author.home | default: '/' | absolute_url }}">
+        <img src="{{ author.avatar | relative_url }}" alt="{{ author.name }}" itemprop="image" class="u-photo">
+      </a>
     </div>
   {% endif %}
 
   <div class="author__content">
-    {% if author.home %}
-      <a href="{{ author.home | relative_url }}"><h3 class="author__name" itemprop="name">{{ author.name }}</h3></a>
-    {% else %}
-      <h3 class="author__name" itemprop="name">{{ author.name }}</h3>
-    {% endif %}
+    <h3 class="author__name p-name" itemprop="name">
+      <a class="u-url" rel="me" href="{{ author.home | default: '/' | absolute_url }}" itemprop="url">{{ author.name }}</a>
+    </h3>
     {% if author.bio %}
-      <div class="author__bio" itemprop="description">
+      <div class="author__bio p-note" itemprop="description">
         {{ author.bio | markdownify }}
       </div>
     {% endif %}
@@ -33,21 +27,21 @@ <h3 class="author__name" itemprop="name">{{ author.name }}</h3>
     <ul class="author__urls social-icons">
       {% if author.location %}
         <li itemprop="homeLocation" itemscope itemtype="https://schema.org/Place">
-          <i class="fas fa-fw fa-map-marker-alt" aria-hidden="true"></i> <span itemprop="name">{{ author.location }}</span>
+          <i class="fas fa-fw fa-map-marker-alt" aria-hidden="true"></i> <span itemprop="name" class="p-locality">{{ author.location }}</span>
         </li>
       {% endif %}
 
       {% if author.links %}
         {% for link in author.links %}
           {% if link.label and link.url %}
-            <li><a href="{{ link.url }}" rel="nofollow noopener noreferrer"><i class="{{ link.icon | default: 'fas fa-link' }}" aria-hidden="true"></i><span class="label">{{ link.label }}</span></a></li>
+            <li><a href="{{ link.url }}" rel="nofollow noopener noreferrer me"{% if link.url contains 'http' %} itemprop="sameAs"{% endif %}><i class="{{ link.icon | default: 'fas fa-link' }}" aria-hidden="true"></i><span class="label">{{ link.label }}</span></a></li>
           {% endif %}
         {% endfor %}
       {% endif %}
 
       {% if author.uri %}
         <li>
-          <a href="{{ author.uri }}" itemprop="url">
+          <a href="{{ author.uri }}" itemprop="url" rel="me">
             <i class="fas fa-fw fa-link" aria-hidden="true"></i><span class="label">{{ site.data.ui-text[site.locale].website_label | default: "Website" }}</span>
           </a>
         </li>
@@ -55,7 +49,7 @@ <h3 class="author__name" itemprop="name">{{ author.name }}</h3>
 
       {% if author.email %}
         <li>
-          <a href="mailto:{{ author.email }}">
+          <a href="mailto:{{ author.email }}" rel="me" class="u-email">
             <meta itemprop="email" content="{{ author.email }}" />
             <i class="fas fa-fw fa-envelope-square" aria-hidden="true"></i><span class="label">{{ site.data.ui-text[site.locale].email_label | default: "Email" }}</span>
           </a>
@@ -64,15 +58,15 @@ <h3 class="author__name" itemprop="name">{{ author.name }}</h3>
 
       {% if author.keybase %}
         <li>
-          <a href="https://keybase.io/{{ author.keybase }}" itemprop="sameAs" rel="nofollow noopener noreferrer">
-            <i class="fas fa-fw fa-key" aria-hidden="true"></i><span class="label">Keybase</span>
+          <a href="https://keybase.io/{{ author.keybase }}" itemprop="sameAs" rel="nofollow noopener noreferrer me">
+            <i class="fab fa-fw fa-keybase" aria-hidden="true"></i><span class="label">Keybase</span>
           </a>
         </li>
       {% endif %}
 
       {% if author.twitter %}
         <li>
-          <a href="https://twitter.com/{{ author.twitter }}" itemprop="sameAs" rel="nofollow noopener noreferrer">
+          <a href="https://twitter.com/{{ author.twitter }}" itemprop="sameAs" rel="nofollow noopener noreferrer me">
             <i class="fab fa-fw fa-twitter-square" aria-hidden="true"></i><span class="label">Twitter</span>
           </a>
         </li>
@@ -80,7 +74,7 @@ <h3 class="author__name" itemprop="name">{{ author.name }}</h3>
 
       {% if author.facebook %}
         <li>
-          <a href="https://www.facebook.com/{{ author.facebook }}" itemprop="sameAs" rel="nofollow noopener noreferrer">
+          <a href="https://www.facebook.com/{{ author.facebook }}" itemprop="sameAs" rel="nofollow noopener noreferrer me">
             <i class="fab fa-fw fa-facebook-square" aria-hidden="true"></i><span class="label">Facebook</span>
           </a>
         </li>
@@ -88,7 +82,7 @@ <h3 class="author__name" itemprop="name">{{ author.name }}</h3>
 
       {% if author.linkedin %}
         <li>
-          <a href="https://www.linkedin.com/in/{{ author.linkedin }}" itemprop="sameAs" rel="nofollow noopener noreferrer">
+          <a href="https://www.linkedin.com/in/{{ author.linkedin }}" itemprop="sameAs" rel="nofollow noopener noreferrer me">
             <i class="fab fa-fw fa-linkedin" aria-hidden="true"></i><span class="label">LinkedIn</span>
           </a>
         </li>
@@ -96,7 +90,7 @@ <h3 class="author__name" itemprop="name">{{ author.name }}</h3>
 
       {% if author.xing %}
         <li>
-          <a href="https://www.xing.com/profile/{{ author.xing }}" itemprop="sameAs" rel="nofollow noopener noreferrer">
+          <a href="https://www.xing.com/profile/{{ author.xing }}" itemprop="sameAs" rel="nofollow noopener noreferrer me">
             <i class="fab fa-fw fa-xing-square" aria-hidden="true"></i><span class="label">XING</span>
           </a>
         </li>
@@ -104,7 +98,7 @@ <h3 class="author__name" itemprop="name">{{ author.name }}</h3>
 
       {% if author.instagram %}
         <li>
-          <a href="https://instagram.com/{{ author.instagram }}" itemprop="sameAs" rel="nofollow noopener noreferrer">
+          <a href="https://instagram.com/{{ author.instagram }}" itemprop="sameAs" rel="nofollow noopener noreferrer me">
             <i class="fab fa-fw fa-instagram" aria-hidden="true"></i><span class="label">Instagram</span>
           </a>
         </li>
@@ -112,7 +106,7 @@ <h3 class="author__name" itemprop="name">{{ author.name }}</h3>
 
       {% if author.tumblr %}
         <li>
-          <a href="https://{{ author.tumblr }}.tumblr.com" itemprop="sameAs" rel="nofollow noopener noreferrer">
+          <a href="https://{{ author.tumblr }}.tumblr.com" itemprop="sameAs" rel="nofollow noopener noreferrer me">
             <i class="fab fa-fw fa-tumblr-square" aria-hidden="true"></i><span class="label">Tumblr</span>
           </a>
         </li>
@@ -120,7 +114,7 @@ <h3 class="author__name" itemprop="name">{{ author.name }}</h3>
 
       {% if author.bitbucket %}
         <li>
-          <a href="https://bitbucket.org/{{ author.bitbucket }}" itemprop="sameAs" rel="nofollow noopener noreferrer">
+          <a href="https://bitbucket.org/{{ author.bitbucket }}" itemprop="sameAs" rel="nofollow noopener noreferrer me">
             <i class="fab fa-fw fa-bitbucket" aria-hidden="true"></i><span class="label">Bitbucket</span>
           </a>
         </li>
@@ -128,7 +122,7 @@ <h3 class="author__name" itemprop="name">{{ author.name }}</h3>
 
       {% if author.github %}
         <li>
-          <a href="https://github.com/{{ author.github }}" itemprop="sameAs" rel="nofollow noopener noreferrer">
+          <a href="https://github.com/{{ author.github }}" itemprop="sameAs" rel="nofollow noopener noreferrer me">
             <i class="fab fa-fw fa-github" aria-hidden="true"></i><span class="label">GitHub</span>
           </a>
         </li>
@@ -136,7 +130,7 @@ <h3 class="author__name" itemprop="name">{{ author.name }}</h3>
 
       {% if author.gitlab %}
         <li>
-          <a href="https://gitlab.com/{{ author.gitlab }}" itemprop="sameAs" rel="nofollow noopener noreferrer">
+          <a href="https://gitlab.com/{{ author.gitlab }}" itemprop="sameAs" rel="nofollow noopener noreferrer me">
             <i class="fab fa-fw fa-gitlab" aria-hidden="true"></i><span class="label">GitLab</span>
           </a>
         </li>
@@ -144,7 +138,7 @@ <h3 class="author__name" itemprop="name">{{ author.name }}</h3>
 
       {% if author.stackoverflow %}
         <li>
-          <a href="https://stackoverflow.com/users/{{ author.stackoverflow }}" itemprop="sameAs" rel="nofollow noopener noreferrer">
+          <a href="https://stackoverflow.com/users/{{ author.stackoverflow }}" itemprop="sameAs" rel="nofollow noopener noreferrer me">
             <i class="fab fa-fw fa-stack-overflow" aria-hidden="true"></i><span class="label">Stack Overflow</span>
           </a>
         </li>
@@ -152,7 +146,7 @@ <h3 class="author__name" itemprop="name">{{ author.name }}</h3>
 
       {% if author.lastfm %}
         <li>
-          <a href="https://last.fm/user/{{ author.lastfm }}" itemprop="sameAs" rel="nofollow noopener noreferrer">
+          <a href="https://last.fm/user/{{ author.lastfm }}" itemprop="sameAs" rel="nofollow noopener noreferrer me">
             <i class="fab fa-fw fa-lastfm-square" aria-hidden="true"></i><span class="label">Last.fm</span>
           </a>
         </li>
@@ -160,7 +154,7 @@ <h3 class="author__name" itemprop="name">{{ author.name }}</h3>
 
       {% if author.dribbble %}
         <li>
-          <a href="https://dribbble.com/{{ author.dribbble }}" itemprop="sameAs" rel="nofollow noopener noreferrer">
+          <a href="https://dribbble.com/{{ author.dribbble }}" itemprop="sameAs" rel="nofollow noopener noreferrer me">
             <i class="fab fa-fw fa-dribbble" aria-hidden="true"></i><span class="label">Dribbble</span>
           </a>
         </li>
@@ -168,7 +162,7 @@ <h3 class="author__name" itemprop="name">{{ author.name }}</h3>
 
       {% if author.pinterest %}
         <li>
-          <a href="https://www.pinterest.com/{{ author.pinterest }}" itemprop="sameAs" rel="nofollow noopener noreferrer">
+          <a href="https://www.pinterest.com/{{ author.pinterest }}" itemprop="sameAs" rel="nofollow noopener noreferrer me">
             <i class="fab fa-fw fa-pinterest" aria-hidden="true"></i><span class="label">Pinterest</span>
           </a>
         </li>
@@ -176,7 +170,7 @@ <h3 class="author__name" itemprop="name">{{ author.name }}</h3>
 
       {% if author.foursquare %}
         <li>
-          <a href="https://foursquare.com/{{ author.foursquare }}" itemprop="sameAs" rel="nofollow noopener noreferrer">
+          <a href="https://foursquare.com/{{ author.foursquare }}" itemprop="sameAs" rel="nofollow noopener noreferrer me">
             <i class="fab fa-fw fa-foursquare" aria-hidden="true"></i><span class="label">Foursquare</span>
           </a>
         </li>
@@ -184,7 +178,7 @@ <h3 class="author__name" itemprop="name">{{ author.name }}</h3>
 
       {% if author.steam %}
         <li>
-          <a href="https://steamcommunity.com/id/{{ author.steam }}" itemprop="sameAs" rel="nofollow noopener noreferrer">
+          <a href="https://steamcommunity.com/id/{{ author.steam }}" itemprop="sameAs" rel="nofollow noopener noreferrer me">
             <i class="fab fa-fw fa-steam" aria-hidden="true"></i><span class="label">Steam</span>
           </a>
         </li>
@@ -193,13 +187,13 @@ <h3 class="author__name" itemprop="name">{{ author.name }}</h3>
       {% if author.youtube %}
         {% if author.youtube contains "://" %}
           <li>
-            <a href="{{ author.youtube }}" itemprop="sameAs" rel="nofollow noopener noreferrer">
+            <a href="{{ author.youtube }}" itemprop="sameAs" rel="nofollow noopener noreferrer me">
               <i class="fab fa-fw fa-youtube" aria-hidden="true"></i><span class="label">YouTube</span>
             </a>
           </li>
         {% elsif author.youtube %}
           <li>
-            <a href="https://www.youtube.com/user/{{ author.youtube }}" itemprop="sameAs" rel="nofollow noopener noreferrer">
+            <a href="https://www.youtube.com/user/{{ author.youtube }}" itemprop="sameAs" rel="nofollow noopener noreferrer me">
               <i class="fab fa-fw fa-youtube" aria-hidden="true"></i><span class="label">YouTube</span>
             </a>
           </li>
@@ -208,7 +202,7 @@ <h3 class="author__name" itemprop="name">{{ author.name }}</h3>
 
       {% if author.soundcloud %}
         <li>
-          <a href="https://soundcloud.com/{{ author.soundcloud }}" itemprop="sameAs" rel="nofollow noopener noreferrer">
+          <a href="https://soundcloud.com/{{ author.soundcloud }}" itemprop="sameAs" rel="nofollow noopener noreferrer me">
             <i class="fab fa-fw fa-soundcloud" aria-hidden="true"></i><span class="label">SoundCloud</span>
           </a>
         </li>
@@ -216,7 +210,7 @@ <h3 class="author__name" itemprop="name">{{ author.name }}</h3>
 
       {% if author.weibo %}
         <li>
-          <a href="https://www.weibo.com/{{ author.weibo }}" itemprop="sameAs" rel="nofollow noopener noreferrer">
+          <a href="https://www.weibo.com/{{ author.weibo }}" itemprop="sameAs" rel="nofollow noopener noreferrer me">
             <i class="fab fa-fw fa-weibo" aria-hidden="true"></i><span class="label">Weibo</span>
           </a>
         </li>
@@ -224,7 +218,7 @@ <h3 class="author__name" itemprop="name">{{ author.name }}</h3>
 
       {% if author.flickr %}
         <li>
-          <a href="https://www.flickr.com/{{ author.flickr }}" itemprop="sameAs" rel="nofollow noopener noreferrer">
+          <a href="https://www.flickr.com/{{ author.flickr }}" itemprop="sameAs" rel="nofollow noopener noreferrer me">
             <i class="fab fa-fw fa-flickr" aria-hidden="true"></i><span class="label">Flickr</span>
           </a>
         </li>
@@ -232,7 +226,7 @@ <h3 class="author__name" itemprop="name">{{ author.name }}</h3>
 
       {% if author.codepen %}
         <li>
-          <a href="https://codepen.io/{{ author.codepen }}" itemprop="sameAs" rel="nofollow noopener noreferrer">
+          <a href="https://codepen.io/{{ author.codepen }}" itemprop="sameAs" rel="nofollow noopener noreferrer me">
             <i class="fab fa-fw fa-codepen" aria-hidden="true"></i><span class="label">CodePen</span>
           </a>
         </li>
@@ -240,7 +234,7 @@ <h3 class="author__name" itemprop="name">{{ author.name }}</h3>
 
       {% if author.vine %}
         <li>
-          <a href="https://vine.co/u/{{ author.vine }}" itemprop="sameAs" rel="nofollow noopener noreferrer">
+          <a href="https://vine.co/u/{{ author.vine }}" itemprop="sameAs" rel="nofollow noopener noreferrer me">
             <i class="fab fa-fw fa-vine" aria-hidden="true"></i><span class="label">{{ site.data.ui-text[site.locale].email_label | default: "Email" }}</span>
           </a>
         </li>
diff --git a/_includes/before-related.html b/_includes/before-related.html
new file mode 100644
index 000000000000..e69de29bb2d1
diff --git a/_includes/breadcrumbs.html b/_includes/breadcrumbs.html
index cba3d415fa4f..929725ef830c 100644
--- a/_includes/breadcrumbs.html
+++ b/_includes/breadcrumbs.html
@@ -19,17 +19,18 @@
     {% for crumb in crumbs offset: 1 %}
       {% if forloop.first %}
         <li itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem">
-          <a href="{{ site.url }}{{ site.baseurl }}/" itemprop="item"><span itemprop="name">{{ site.data.ui-text[site.locale].breadcrumb_home_label | default: "Home" }}</span></a>
+          <a href="{{ '/' | relative_url }}" itemprop="item"><span itemprop="name">{{ site.data.ui-text[site.locale].breadcrumb_home_label | default: "Home" }}</span></a>
+
           <meta itemprop="position" content="{{ i }}" />
         </li>
         <span class="sep">{{ site.data.ui-text[site.locale].breadcrumb_separator | default: "/" }}</span>
       {% endif %}
       {% if forloop.last %}
-        <li class="current">{{ page.title }}</li>
+        <li class="current"{% if page.locale %} lang="{{ page.locale }}"{% endif %}>{{ page.title }}</li>
       {% else %}
         {% assign i = i | plus: 1 %}
         <li itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem">
-          <a href="{{ crumb | downcase | replace: '%20', '-' | prepend: path_type | prepend: crumb_path | relative_url }}" itemprop="item"><span itemprop="name">{{ crumb | replace: '-', ' ' | replace: '%20', ' ' | capitalize }}</span></a>
+          <a href="{{ crumb | downcase | replace: '%20', '-' | prepend: path_type | prepend: crumb_path | relative_url }}" itemprop="item"><span itemprop="name">{{ crumb | url_decode | replace: '-', ' ' | capitalize }}</span></a>
           <meta itemprop="position" content="{{ i }}" />
         </li>
         <span class="sep">{{ site.data.ui-text[site.locale].breadcrumb_separator | default: "/" }}</span>
diff --git a/_includes/browser-upgrade.html b/_includes/browser-upgrade.html
deleted file mode 100644
index ec6ad0acc566..000000000000
--- a/_includes/browser-upgrade.html
+++ /dev/null
@@ -1,3 +0,0 @@
-<!--[if lt IE 9]>
-<div class="notice--danger align-center" style="margin: 0;">You are using an <strong>outdated</strong> browser. Please <a href="https://browsehappy.com/">upgrade your browser</a> to improve your experience.</div>
-<![endif]-->
diff --git a/_includes/category-list.html b/_includes/category-list.html
index d684a2829f3b..ad9a3fc71423 100644
--- a/_includes/category-list.html
+++ b/_includes/category-list.html
@@ -6,20 +6,13 @@
 {% endcase %}
 
 {% if site.category_archive.path %}
-  {% comment %}
-    <!-- Sort alphabetically regardless of case e.g. a B c d E -->
-    <!-- modified from http://www.codeofclimber.ru/2015/sorting-site-tags-in-jekyll/ -->
-  {% endcomment %}
-  {% capture page_categories %}{% for category in page.categories %}{{ category | downcase }}|{{ category }}{% unless forloop.last %},{% endunless %}{% endfor %}{% endcapture %}
-  {% assign category_hashes = page_categories | split: ',' | sort %}
+  {% assign categories_sorted = page.categories | sort_natural %}
 
   <p class="page__taxonomy">
     <strong><i class="fas fa-fw fa-folder-open" aria-hidden="true"></i> {{ site.data.ui-text[site.locale].categories_label | default: "Categories:" }} </strong>
     <span itemprop="keywords">
-    {% for hash in category_hashes %}
-      {% assign keyValue = hash | split: '|' %}
-      {% capture category_word %}{{ keyValue[1] | strip_newlines }}{% endcapture %}
-      <a href="{{ category_word | slugify | prepend: path_type | prepend: site.category_archive.path | relative_url }}" class="page__taxonomy-item" rel="tag">{{ category_word }}</a>{% unless forloop.last %}<span class="sep">, </span>{% endunless %}
+    {% for category_word in categories_sorted %}
+      <a href="{{ category_word | slugify | prepend: path_type | prepend: site.category_archive.path | relative_url }}" class="page__taxonomy-item p-category" rel="tag">{{ category_word }}</a>{% unless forloop.last %}<span class="sep">, </span>{% endunless %}
     {% endfor %}
     </span>
   </p>
diff --git a/_includes/comments-providers/giscus.html b/_includes/comments-providers/giscus.html
new file mode 100644
index 000000000000..a4f6365aecef
--- /dev/null
+++ b/_includes/comments-providers/giscus.html
@@ -0,0 +1,34 @@
+<script>
+  'use strict';
+
+  (function () {
+    var commentContainer = document.querySelector('#giscus-comments');
+
+    if (!commentContainer) {
+      return;
+    }
+
+    var script = document.createElement('script');
+
+    script.setAttribute('src', 'https://giscus.app/client.js');
+    script.setAttribute('data-repo', '{{ site.repository | downcase }}');
+    script.setAttribute('data-repo-id', '{{ site.comments.giscus.repo_id }}');
+    script.setAttribute('data-category', '{{ site.comments.giscus.category_name }}');
+    script.setAttribute('data-category-id', '{{ site.comments.giscus.category_id }}');
+    script.setAttribute('data-mapping', '{{ site.comments.giscus.discussion_term | default: "pathname" }}');
+    script.setAttribute('data-strict', '{{ site.comments.giscus.strict | default: 0 }}');
+    script.setAttribute('data-reactions-enabled', '{{ site.comments.giscus.reactions_enabled | default: 1 }}');
+    script.setAttribute('data-emit-metadata', '{{ site.comments.giscus.emit_metadata | default: 0 }}');
+    script.setAttribute('data-input-position', '{{ site.comments.giscus.input_position | default: "top" }}');
+    script.setAttribute('data-theme', '{{ site.comments.giscus.theme | default: "light" }}');
+    script.setAttribute('data-lang',  '{{ site.comments.giscus.lang | default: "en" }}');
+    {% if site.comments.giscus.lazy %}
+    script.setAttribute('data-loading', 'lazy');
+    {% endif %}
+    script.setAttribute('crossorigin', 'anonymous');
+
+    script.setAttribute('async', '');
+
+    commentContainer.appendChild(script);
+  })();
+</script>
diff --git a/_includes/comments-providers/scripts.html b/_includes/comments-providers/scripts.html
index c550618fe552..e87badabd365 100644
--- a/_includes/comments-providers/scripts.html
+++ b/_includes/comments-providers/scripts.html
@@ -12,6 +12,8 @@
     {% include /comments-providers/staticman_v2.html %}
   {% when "utterances" %}
     {% include /comments-providers/utterances.html %}
+  {% when "giscus" %}
+    {% include /comments-providers/giscus.html %}
   {% when "custom" %}
     {% include /comments-providers/custom_scripts.html %}
 {% endcase %}
diff --git a/_includes/comments-providers/utterances.html b/_includes/comments-providers/utterances.html
index 129ab7791da9..5cf6c5ccbb88 100644
--- a/_includes/comments-providers/utterances.html
+++ b/_includes/comments-providers/utterances.html
@@ -12,6 +12,7 @@
     script.setAttribute('src', 'https://utteranc.es/client.js');
     script.setAttribute('repo', '{{ site.repository }}');
     script.setAttribute('issue-term', '{{ site.comments.utterances.issue_term | default: "pathname" }}');
+    {% if site.comments.utterances.label %}script.setAttribute('label', '{{ site.comments.utterances.label }}');{% endif %}
     script.setAttribute('theme', '{{ site.comments.utterances.theme | default: "github-light" }}');
     script.setAttribute('crossorigin', 'anonymous');
 
diff --git a/_includes/comments.html b/_includes/comments.html
index dbb90d1e3a0f..b27c893bbaf1 100644
--- a/_includes/comments.html
+++ b/_includes/comments.html
@@ -17,14 +17,23 @@ <h4 class="page__comments-title">{{ comments_label }}</h4>
           <div class="js-comments">
             {% if site.data.comments[page.slug] %}
               <h4 class="page__comments-title">{{ site.data.ui-text[site.locale].comments_title | default: "Comments" }}</h4>
-              {% assign comments = site.data.comments[page.slug] | sort %}
+              {% assign comments = site.data.comments[page.slug] %}
 
+              <!-- In order to sort by date we must have an array of objects, not an array of arrays, so
+                    create a new array of plain comment objects and then sort by the comment date. -->
+              {% assign commentObjects = '' | split: '' %}
               {% for comment in comments %}
-                {% assign email = comment[1].email %}
-                {% assign name = comment[1].name %}
-                {% assign url = comment[1].url %}
-                {% assign date = comment[1].date %}
-                {% assign message = comment[1].message %}
+                {% assign commentObject = comment[1] %}
+                {% assign commentObjects = commentObjects | push: commentObject %}
+              {% endfor %}
+              {% assign comments = commentObjects | sort: "date" %}
+
+              {% for comment in comments %}
+                {% assign email = comment.email %}
+                {% assign name = comment.name %}
+                {% assign url = comment.url %}
+                {% assign date = comment.date %}
+                {% assign message = comment.message %}
                 {% include comment.html index=forloop.index email=email name=name url=url date=date message=message %}
               {% endfor %}
             {% endif %}
@@ -35,7 +44,7 @@ <h4 class="page__comments-title">{{ site.data.ui-text[site.locale].comments_titl
           <div class="page__comments-form">
             <h4 class="page__comments-title">{{ site.data.ui-text[site.locale].comments_label | default: "Leave a Comment" }}</h4>
             <p class="small">{{ site.data.ui-text[site.locale].comment_form_info | default: "Your email address will not be published. Required fields are marked" }} <span class="required">*</span></p>
-            <form id="new_comment" class="page__comments-form js-form form" method="post" action="{{ site.comments.staticman.endpoint | default: 'https://api.staticman.net/v2/entry/' }}{{ site.repository }}/{{ site.comments.staticman.branch }}/comments">
+            <form id="new_comment" class="page__comments-form js-form form" method="post" action="{{ site.comments.staticman.endpoint }}{{ site.repository }}/{{ site.comments.staticman.branch }}/comments">
               <div class="form__spinner">
                 <i class="fas fa-spinner fa-spin fa-3x fa-fw"></i>
                 <span class="sr-only">{{ site.data.ui-text[site.locale].loading_label | default: "Loading..." }}</span>
@@ -91,14 +100,23 @@ <h4 class="page__comments-title">{{ site.data.ui-text[site.locale].comments_labe
           <div class="js-comments">
             {% if site.data.comments[page.slug] %}
               <h4 class="page__comments-title">{{ site.data.ui-text[site.locale].comments_title | default: "Comments" }}</h4>
-              {% assign comments = site.data.comments[page.slug] | sort %}
+              {% assign comments = site.data.comments[page.slug] %}
 
+              <!-- In order to sort by date we must have an array of objects, not an array of arrays, so
+                    create a new array of plain comment objects and then sort by the comment date. -->
+              {% assign commentObjects = '' | split: '' %}
               {% for comment in comments %}
-                {% assign email = comment[1].email %}
-                {% assign name = comment[1].name %}
-                {% assign url = comment[1].url %}
-                {% assign date = comment[1].date %}
-                {% assign message = comment[1].message %}
+                {% assign commentObject = comment[1] %}
+                {% assign commentObjects = commentObjects | push: commentObject %}
+              {% endfor %}
+              {% assign comments = commentObjects | sort: "date" %}
+
+              {% for comment in comments %}
+                {% assign email = comment.email %}
+                {% assign name = comment.name %}
+                {% assign url = comment.url %}
+                {% assign date = comment.date %}
+                {% assign message = comment.message %}
                 {% include comment.html index=forloop.index email=email name=name url=url date=date message=message %}
               {% endfor %}
             {% endif %}
@@ -153,6 +171,9 @@ <h4 class="page__comments-title">{{ site.data.ui-text[site.locale].comments_labe
     {% when "utterances" %}
       <h4 class="page__comments-title">{{ comments_label }}</h4>
       <section id="utterances-comments"></section>
+    {% when "giscus" %}
+      <h4 class="page__comments-title">{{ comments_label }}</h4>
+      <section id="giscus-comments"></section>
     {% when "custom" %}
       {% include /comments-providers/custom.html %}
   {% endcase %}
diff --git a/_includes/copyright.html b/_includes/copyright.html
new file mode 100644
index 000000000000..36de639afc3e
--- /dev/null
+++ b/_includes/copyright.html
@@ -0,0 +1,6 @@
+<!--
+  Minimal Mistakes Jekyll Theme 4.26.2 by Michael Rose
+  Copyright 2013-2024 Michael Rose - mademistakes.com | @mmistakes
+  Free for personal and commercial use under the MIT license
+  https://github.com/mmistakes/minimal-mistakes/blob/master/LICENSE
+-->
diff --git a/_includes/copyright.js b/_includes/copyright.js
new file mode 100644
index 000000000000..b70c0374f557
--- /dev/null
+++ b/_includes/copyright.js
@@ -0,0 +1,6 @@
+/*!
+ * Minimal Mistakes Jekyll Theme 4.26.2 by Michael Rose
+ * Copyright 2013-2024 Michael Rose - mademistakes.com | @mmistakes
+ * Free for personal and commercial use under the MIT license
+ * https://github.com/mmistakes/minimal-mistakes/blob/master/LICENSE
+ */
diff --git a/_includes/documents-collection.html b/_includes/documents-collection.html
index 376a509e3e49..8c1d1279cb1d 100644
--- a/_includes/documents-collection.html
+++ b/_includes/documents-collection.html
@@ -1,21 +1,13 @@
-{% assign entries = site[include.collection] %}
+{% assign entries = include.entries | default: site[include.collection] | where_exp: "post", "post.hidden != true" %}
 
-{% if include.sort_by == 'title' %}
-  {% if include.sort_order == 'reverse' %}
-    {% assign entries = entries | sort: 'title' | reverse %}
-  {% else %}
-    {% assign entries = entries | sort: 'title' %}
-  {% endif %}
-{% elsif include.sort_by == 'date' %}
-  {% if include.sort_order == 'reverse' %}
-    {% assign entries = entries | sort: 'date' | reverse %}
-  {% else %}
-    {% assign entries = entries | sort: 'date' %}
-  {% endif %}
+{% if include.sort_by %}
+  {% assign entries = entries | sort: include.sort_by %}
+{% endif %}
+
+{% if include.sort_order == 'reverse' %}
+  {% assign entries = entries | reverse %}
 {% endif %}
 
 {%- for post in entries -%}
-  {%- unless post.hidden -%}
-    {% include archive-single.html %}
-  {%- endunless -%}
+  {% include archive-single.html type=include.type %}
 {%- endfor -%}
diff --git a/_includes/figure b/_includes/figure
index f1ce1ebcc110..62a07b113ca7 100644
--- a/_includes/figure
+++ b/_includes/figure
@@ -1,9 +1,11 @@
 <figure class="{{ include.class }}">
+  {%- if include.popup -%}<a href="{{ include.image_path | relative_url }}" class="image-popup"{% if include.caption %} title="{{ include.caption | markdownify | strip_html }}"{% endif %}>{%- endif -%}
   <img src="{{ include.image_path | relative_url }}"
-       alt="{% if include.alt %}{{ include.alt }}{% endif %}">
-  {% if include.caption %}
+       alt="{% if include.alt %}{{ include.alt | escape_once }}{% endif %}">
+  {%- if include.popup -%}</a>{%- endif -%}
+  {%- if include.caption -%}
     <figcaption>
       {{ include.caption | markdownify | remove: "<p>" | remove: "</p>" }}
     </figcaption>
-  {% endif %}
+  {%- endif -%}
 </figure>
diff --git a/_includes/footer.html b/_includes/footer.html
index 2bc78963ce39..2b2b7ee1e479 100644
--- a/_includes/footer.html
+++ b/_includes/footer.html
@@ -12,8 +12,10 @@
       {% endfor %}
     {% endif %}
 
-    <li><a href="{% if site.atom_feed.path %}{{ site.atom_feed.path }}{% else %}{{ '/feed.xml' | relative_url }}{% endif %}"><i class="fas fa-fw fa-rss-square" aria-hidden="true"></i> {{ site.data.ui-text[site.locale].feed_label | default: "Feed" }}</a></li>
+    {% unless site.atom_feed.hide %}
+      <li><a href="{% if site.atom_feed.path %}{{ site.atom_feed.path }}{% else %}{{ '/feed.xml' | relative_url }}{% endif %}"><i class="fas fa-fw fa-rss-square" aria-hidden="true"></i> {{ site.data.ui-text[site.locale].feed_label | default: "Feed" }}</a></li>
+    {% endunless %}
   </ul>
 </div>
 
-<div class="page__footer-copyright">&copy; {{ site.time | date: '%Y' }} {{ site.name | default: site.title }}. {{ site.data.ui-text[site.locale].powered_by | default: "Powered by" }} <a href="https://jekyllrb.com" rel="nofollow">Jekyll</a> &amp; <a href="https://mademistakes.com/work/minimal-mistakes-jekyll-theme/" rel="nofollow">Minimal Mistakes</a>.</div>
+<div class="page__footer-copyright">&copy; {{ site.time | date: '%Y' }} <a href="{{ site.copyright_url | default: site.url }}">{{ site.copyright | default: site.title }}</a>. {{ site.data.ui-text[site.locale].powered_by | default: "Powered by" }} <a href="https://jekyllrb.com" rel="nofollow">Jekyll</a> &amp; <a href="https://mademistakes.com/work/jekyll-themes/minimal-mistakes/" rel="nofollow">Minimal Mistakes</a>.</div>
diff --git a/_includes/head.html b/_includes/head.html
index 3b99471f5ec5..c214bea57cc9 100644
--- a/_includes/head.html
+++ b/_includes/head.html
@@ -2,33 +2,24 @@
 
 {% include seo.html %}
 
-<link href="{% if site.atom_feed.path %}{{ site.atom_feed.path }}{% else %}{{ '/feed.xml' | relative_url }}{% endif %}" type="application/atom+xml" rel="alternate" title="{{ site.title }} Feed">
+{% unless site.atom_feed.hide %}
+  <link href="{% if site.atom_feed.path %}{{ site.atom_feed.path }}{% else %}{{ '/feed.xml' | relative_url }}{% endif %}" type="application/atom+xml" rel="alternate" title="{{ site.title }} Feed">
+{% endunless %}
 
-<!-- https://t.co/dKP3o1e -->
+{%- comment %} https://docs.google.com/presentation/d/1rmxwWa9P6_xHqonmh5ONXRS-jPc5XKbnv99Rjkhe04s/present {% endcomment -%}
 <meta name="viewport" content="width=device-width, initial-scale=1.0">
 
 <script>
   document.documentElement.className = document.documentElement.className.replace(/\bno-js\b/g, '') + ' js ';
+  {% if site.enable_copy_code_button -%}
+    window.enable_copy_code_button = true;
+  {%- endif %}
 </script>
 
 <!-- For all browsers -->
 <link rel="stylesheet" href="{{ '/assets/css/main.css' | relative_url }}">
-<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@fortawesome/fontawesome-free@5/css/all.min.css">
-
-<!--[if IE]>
-  <style>
-    /* old IE unsupported flexbox fixes */
-    .greedy-nav .site-title {
-      padding-right: 3em;
-    }
-    .greedy-nav button {
-      position: absolute;
-      top: 0;
-      right: 0;
-      height: 100%;
-    }
-  </style>
-<![endif]-->
+<link rel="preload" href="https://cdn.jsdelivr.net/npm/@fortawesome/fontawesome-free@latest/css/all.min.css" as="style" onload="this.onload=null;this.rel='stylesheet'">
+<noscript><link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@fortawesome/fontawesome-free@latest/css/all.min.css"></noscript>
 
 {% if site.head_scripts %}
   {% for script in site.head_scripts %}
diff --git a/_includes/masthead.html b/_includes/masthead.html
index 47cce0a3545e..f919fb77937c 100644
--- a/_includes/masthead.html
+++ b/_includes/masthead.html
@@ -5,7 +5,7 @@
     <div class="masthead__menu">
       <nav id="site-nav" class="greedy-nav">
         {% unless logo_path == empty %}
-          <a class="site-logo" href="{{ '/' | relative_url }}"><img src="{{ logo_path | relative_url }}" alt=""></a>
+          <a class="site-logo" href="{{ '/' | relative_url }}"><img src="{{ logo_path | relative_url }}" alt="{{ site.masthead_title | default: site.title }}"></a>
         {% endunless %}
         <a class="site-title" href="{{ '/' | relative_url }}">
           {{ site.masthead_title | default: site.title }}
@@ -14,16 +14,18 @@
         <ul class="visible-links">
           {%- for link in site.data.navigation.main -%}
             <li class="masthead__menu-item">
-              <a href="{{ link.url | relative_url }}"{% if link.description %} title="{{ link.description }}"{% endif %}>{{ link.title }}</a>
+              <a
+                href="{{ link.url | relative_url }}"
+                {% if link.description %} title="{{ link.description }}"{% endif %}
+                {% if link.target %} target="{{ link.target }}"{% endif %}
+              >{{ link.title }}</a>
             </li>
           {%- endfor -%}
         </ul>
         {% if site.search == true %}
         <button class="search__toggle" type="button">
           <span class="visually-hidden">{{ site.data.ui-text[site.locale].search_label | default: "Toggle search" }}</span>
-          <svg class="icon" width="16" height="16" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 15.99 16">
-            <path d="M15.5,13.12L13.19,10.8a1.69,1.69,0,0,0-1.28-.55l-0.06-.06A6.5,6.5,0,0,0,5.77,0,6.5,6.5,0,0,0,2.46,11.59a6.47,6.47,0,0,0,7.74.26l0.05,0.05a1.65,1.65,0,0,0,.5,1.24l2.38,2.38A1.68,1.68,0,0,0,15.5,13.12ZM6.4,2A4.41,4.41,0,1,1,2,6.4,4.43,4.43,0,0,1,6.4,2Z" transform="translate(-.01)"></path>
-          </svg>
+          <i class="fas fa-search"></i>
         </button>
         {% endif %}
         <button class="greedy-nav__toggle hidden" type="button">
diff --git a/_includes/nav_list b/_includes/nav_list
index a035a5bd7b15..d25f9e9480bc 100644
--- a/_includes/nav_list
+++ b/_includes/nav_list
@@ -1,26 +1,27 @@
-{% assign navigation = site.data.navigation[include.nav] %}
-
 <nav class="nav__list">
   {% if page.sidebar.title %}<h3 class="nav__title" style="padding-left: 0;">{{ page.sidebar.title }}</h3>{% endif %}
   <input id="ac-toc" name="accordion-toc" type="checkbox" />
   <label for="ac-toc">{{ site.data.ui-text[site.locale].menu_label | default: "Toggle Menu" }}</label>
   <ul class="nav__items">
-    {% for nav in navigation %}
-      <li>
-        {% if nav.url %}
-          <a href="{{ nav.url | relative_url }}"><span class="nav__sub-title">{{ nav.title }}</span></a>
-        {% else %}
-          <span class="nav__sub-title">{{ nav.title }}</span>
-        {% endif %}
+    {% for navname in include.nav %}
+      {% assign navigation = site.data.navigation[navname] %}
+      {% for nav in navigation %}
+        <li>
+          {% if nav.url %}
+            <a href="{{ nav.url | relative_url }}"><span class="nav__sub-title">{{ nav.title }}</span></a>
+          {% else %}
+            <span class="nav__sub-title">{{ nav.title }}</span>
+          {% endif %}
 
-        {% if nav.children != null %}
-        <ul>
-          {% for child in nav.children %}
-            <li><a href="{{ child.url | relative_url }}"{% if child.url == page.url %} class="active"{% endif %}>{{ child.title }}</a></li>
-          {% endfor %}
-        </ul>
-        {% endif %}
-      </li>
+          {% if nav.children != null %}
+          <ul>
+            {% for child in nav.children %}
+              <li><a href="{{ child.url | relative_url }}"{% if child.url == page.url %} class="active"{% endif %}>{{ child.title }}</a></li>
+            {% endfor %}
+          </ul>
+          {% endif %}
+        </li>
+      {% endfor %}
     {% endfor %}
   </ul>
 </nav>
diff --git a/_includes/page__date.html b/_includes/page__date.html
index e663f9b9c7f0..ec02005f1307 100644
--- a/_includes/page__date.html
+++ b/_includes/page__date.html
@@ -1,5 +1,6 @@
+{% assign date_format = site.date_format | default: "%B %-d, %Y" %}
 {% if page.last_modified_at %}
-  <p class="page__date"><strong><i class="fas fa-fw fa-calendar-alt" aria-hidden="true"></i> {{ site.data.ui-text[site.locale].date_label | default: "Updated:" }}</strong> <time datetime="{{ page.last_modified_at | date: "%Y-%m-%d" }}">{{ page.last_modified_at | date: "%B %-d, %Y" }}</time></p>
+  <p class="page__date"><strong><i class="fas fa-fw fa-calendar-alt" aria-hidden="true"></i> {{ site.data.ui-text[site.locale].date_label | default: "Updated:" }}</strong> <time class="dt-published" datetime="{{ page.last_modified_at | date: "%Y-%m-%d" }}">{{ page.last_modified_at | date: date_format }}</time></p>
 {% elsif page.date %}
-  <p class="page__date"><strong><i class="fas fa-fw fa-calendar-alt" aria-hidden="true"></i> {{ site.data.ui-text[site.locale].date_label | default: "Updated:" }}</strong> <time datetime="{{ page.date | date_to_xmlschema }}">{{ page.date | date: "%B %-d, %Y" }}</time></p>
-{% endif %}
+  <p class="page__date"><strong><i class="fas fa-fw fa-calendar-alt" aria-hidden="true"></i> {{ site.data.ui-text[site.locale].date_label | default: "Updated:" }}</strong> <time class="dt-published" datetime="{{ page.date | date_to_xmlschema }}">{{ page.date | date: date_format }}</time></p>
+{% endif %}
\ No newline at end of file
diff --git a/_includes/page__hero.html b/_includes/page__hero.html
index 8e477535c9ef..ebc0b6b43068 100644
--- a/_includes/page__hero.html
+++ b/_includes/page__hero.html
@@ -1,9 +1,13 @@
 {% capture overlay_img_path %}{{ page.header.overlay_image | relative_url }}{% endcapture %}
 
-{% if page.header.overlay_filter contains "rgba" %}
+{% if page.header.overlay_filter contains "gradient" %}
   {% capture overlay_filter %}{{ page.header.overlay_filter }}{% endcapture %}
+{% elsif page.header.overlay_filter contains "rgba" %}
+  {% capture overlay_filter %}{{ page.header.overlay_filter }}{% endcapture %}
+  {% capture overlay_filter %}linear-gradient({{ overlay_filter }}, {{ overlay_filter }}){% endcapture %}
 {% elsif page.header.overlay_filter %}
   {% capture overlay_filter %}rgba(0, 0, 0, {{ page.header.overlay_filter }}){% endcapture %}
+  {% capture overlay_filter %}linear-gradient({{ overlay_filter }}, {{ overlay_filter }}){% endcapture %}
 {% endif %}
 
 {% if page.header.image_description %}
@@ -15,7 +19,7 @@
 {% assign image_description = image_description | markdownify | strip_html | strip_newlines | escape_once %}
 
 <div class="page__hero{% if page.header.overlay_color or page.header.overlay_image %}--overlay{% endif %}"
-  style="{% if page.header.overlay_color %}background-color: {{ page.header.overlay_color | default: 'transparent' }};{% endif %} {% if overlay_img_path %}background-image: {% if overlay_filter %}linear-gradient({{ overlay_filter }}, {{ overlay_filter }}), {% endif %}url('{{ overlay_img_path }}');{% endif %}"
+  style="{% if page.header.overlay_color %}background-color: {{ page.header.overlay_color | default: 'transparent' }};{% endif %} {% if overlay_img_path %}background-image: {% if overlay_filter %}{{ overlay_filter }}, {% endif %}url('{{ overlay_img_path }}');{% endif %}"
 >
   {% if page.header.overlay_color or page.header.overlay_image %}
     <div class="wrapper">
@@ -31,15 +35,13 @@ <h1 id="page-title" class="page__title" itemprop="headline">
       {% elsif page.header.show_overlay_excerpt != false and page.excerpt %}
         <p class="page__lead">{{ page.excerpt | markdownify | remove: "<p>" | remove: "</p>" }}</p>
       {% endif %}
-      {% include post__meta.html %}
-      {% if page.header.cta_url %}
-        <p><a href="{{ page.header.cta_url | relative_url }}" class="btn btn--light-outline btn--large">{{ page.header.cta_label | default: site.data.ui-text[site.locale].more_label | default: "Learn More" }}</a></p>
-      {% endif %}
+      {% include page__meta.html %}
       {% if page.header.actions %}
         <p>
         {% for action in page.header.actions %}
           <a href="{{ action.url | relative_url }}" class="btn btn--light-outline btn--large">{{ action.label | default: site.data.ui-text[site.locale].more_label | default: "Learn More" }}</a>
         {% endfor %}
+        </p>
       {% endif %}
     </div>
   {% else %}
diff --git a/_includes/page__meta.html b/_includes/page__meta.html
new file mode 100644
index 000000000000..3d228c921205
--- /dev/null
+++ b/_includes/page__meta.html
@@ -0,0 +1,31 @@
+{% assign document = post | default: page %}
+{% if document.read_time or document.show_date %}
+  <p class="page__meta">
+    {% if document.show_date and document.date %}
+      {% assign date = document.date %}
+      <span class="page__meta-date">
+        <i class="far {% if include.type == 'grid' and document.read_time and document.show_date %}fa-fw {% endif %}fa-calendar-alt" aria-hidden="true"></i>
+        {% assign date_format = site.date_format | default: "%B %-d, %Y" %}
+        <time datetime="{{ date | date_to_xmlschema }}">{{ date | date: date_format }}</time>
+      </span>
+    {% endif %}
+
+    {% if document.read_time and document.show_date %}<span class="page__meta-sep"></span>{% endif %}
+
+    {% if document.read_time %}
+      {% assign words_per_minute = document.words_per_minute | default: site.words_per_minute | default: 200 %}
+      {% assign words = document.content | strip_html | number_of_words %}
+
+      <span class="page__meta-readtime">
+        <i class="far {% if include.type == 'grid' and document.read_time and document.show_date %}fa-fw {% endif %}fa-clock" aria-hidden="true"></i>
+        {% if words < words_per_minute %}
+          {{ site.data.ui-text[site.locale].less_than | default: "less than" }} 1 {{ site.data.ui-text[site.locale].minute_read | default: "minute read" }}
+        {% elsif words == words_per_minute %}
+          1 {{ site.data.ui-text[site.locale].minute_read | default: "minute read" }}
+        {% else %}
+          {{ words | divided_by: words_per_minute }} {{ site.data.ui-text[site.locale].minute_read | default: "minute read" }}
+        {% endif %}
+      </span>
+    {% endif %}
+  </p>
+{% endif %}
diff --git a/_includes/page__related.html b/_includes/page__related.html
new file mode 100644
index 000000000000..9777865eeefd
--- /dev/null
+++ b/_includes/page__related.html
@@ -0,0 +1,11 @@
+{% assign posts = include.posts | where_exp: "post", "post.hidden != true" %}
+<div class="page__related">
+  {% include before-related.html %}
+  <h2 class="page__related-title">{{ site.data.ui-text[site.locale].related_label | default: "You May Also Enjoy" }}</h2>
+  <div class="grid__wrapper">
+    {% for post in posts limit:4 %}
+      {% if post.id == page.id %}{% continue %}{% endif %}
+      {% include archive-single.html type="grid" %}
+    {% endfor %}
+  </div>
+</div>
diff --git a/_includes/paginator-v1.html b/_includes/paginator-v1.html
new file mode 100644
index 000000000000..c24d4909f488
--- /dev/null
+++ b/_includes/paginator-v1.html
@@ -0,0 +1,70 @@
+{% if paginator.total_pages > 1 %}
+<nav class="pagination">
+  {% assign paginate_path_last = site.paginate_path | split: '/' | last %}
+  {% assign first_page_path = paginator.first_page_path | default: site.paginate_path | replace: paginate_path_last, '' | replace: '//', '/' | relative_url %}
+  <ul>
+    {% comment %} Link for previous page {% endcomment %}
+    {% if paginator.previous_page %}
+      {% if paginator.previous_page == 1 %}
+        <li><a href="{{ first_page_path }}">{{ site.data.ui-text[site.locale].pagination_previous | default: "Previous" }}</a></li>
+      {% else %}
+        <li><a href="{{ site.paginate_path | replace: ':num', paginator.previous_page | replace: '//', '/' | relative_url }}">{{ site.data.ui-text[site.locale].pagination_previous | default: "Previous" }}</a></li>
+      {% endif %}
+    {% else %}
+    <li><a href="#" class="disabled"><span aria-hidden="true">{{ site.data.ui-text[site.locale].pagination_previous | default: "Previous" }}</span></a></li>
+    {% endif %}
+
+    {% comment %} First page {% endcomment %}
+    {% if paginator.page == 1 %}
+      <li><a href="#" class="disabled current">1</a></li>
+    {% else %}
+      <li><a href="{{ first_page_path }}">1</a></li>
+    {% endif %}
+
+    {% assign page_start = 2 %}
+    {% if paginator.page > 4 %}
+      {% assign page_start = paginator.page | minus: 2 %}
+      {% comment %} Ellipsis for truncated links {% endcomment %}
+      <li><a href="#" class="disabled">&hellip;</a></li>
+    {% endif %}
+
+    {% assign page_end = paginator.total_pages | minus: 1 %}
+    {% assign pages_to_end = paginator.total_pages | minus: paginator.page %}
+    {% if pages_to_end > 4 %}
+      {% assign page_end = paginator.page | plus: 2 %}
+    {% endif %}
+
+    {% for index in (page_start..page_end) %}
+      {% if index == paginator.page %}
+        <li><a href="{{ site.paginate_path | replace: ':num', index | replace: '//', '/' | relative_url }}" class="disabled current">{{ index }}</a></li>
+      {% else %}
+        {% comment %} Distance from current page and this link {% endcomment %}
+        {% assign dist = paginator.page | minus: index %}
+        {% if dist < 0 %}
+          {% comment %} Distance must be a positive value {% endcomment %}
+          {% assign dist = 0 | minus: dist %}
+        {% endif %}
+        <li><a href="{{ site.paginate_path | replace: ':num', index | relative_url }}">{{ index }}</a></li>
+      {% endif %}
+    {% endfor %}
+
+    {% comment %} Ellipsis for truncated links {% endcomment %}
+    {% if pages_to_end > 3 %}
+      <li><a href="#" class="disabled">&hellip;</a></li>
+    {% endif %}
+
+    {% if paginator.page == paginator.total_pages %}
+      <li><a href="#" class="disabled current">{{ paginator.page }}</a></li>
+    {% else %}
+      <li><a href="{{ site.paginate_path | replace: ':num', paginator.total_pages | replace: '//', '/' | relative_url }}">{{ paginator.total_pages }}</a></li>
+    {% endif %}
+
+    {% comment %} Link next page {% endcomment %}
+    {% if paginator.next_page %}
+      <li><a href="{{ site.paginate_path | replace: ':num', paginator.next_page | replace: '//', '/' | relative_url }}">{{ site.data.ui-text[site.locale].pagination_next | default: "Next" }}</a></li>
+    {% else %}
+      <li><a href="#" class="disabled"><span aria-hidden="true">{{ site.data.ui-text[site.locale].pagination_next | default: "Next" }}</span></a></li>
+    {% endif %}
+  </ul>
+</nav>
+{% endif %}
diff --git a/_includes/paginator-v2.html b/_includes/paginator-v2.html
new file mode 100644
index 000000000000..ea5707d56965
--- /dev/null
+++ b/_includes/paginator-v2.html
@@ -0,0 +1,68 @@
+<nav class="pagination">
+  <ul>
+    {% comment %} Link for previous page {% endcomment %}
+    {% if paginator.previous_page %}
+      {% if paginator.previous_page == 1 %}
+        <li><a href="{{ paginator.first_page_path | relative_url }}">{{ site.data.ui-text[site.locale].pagination_previous | default: "Previous" }}</a></li>
+      {% else %}
+        <li><a href="{{ paginator.previous_page_path | relative_url }}">{{ site.data.ui-text[site.locale].pagination_previous | default: "Previous" }}</a></li>
+      {% endif %}
+    {% else %}
+      <li><a href="#" class="disabled"><span aria-hidden="true">{{ site.data.ui-text[site.locale].pagination_previous | default: "Previous" }}</span></a></li>
+    {% endif %}
+
+    {% comment %} Determine whether the first page and the last page are already included in trail {% endcomment %}
+    {% for trail in paginator.page_trail %}
+      {% if trail.num == paginator.first_page %}
+        {% assign has_first_page = true %}
+      {% elsif trail.num == paginator.last_page %}
+        {% assign has_last_page = true %}
+      {% endif %}
+    {% endfor %}
+
+    {% comment %} First page {% endcomment %}
+    {% unless has_first_page %}
+      {% if paginator.page == 1 %}
+        <li><a href="#" class="disabled current">1</a></li>
+      {% else %}
+        <li><a href="{{ paginator.first_page_path | relative_url }}">1</a></li>
+      {% endif %}
+    {% endunless %}
+
+    {% comment %} Ellipsis for truncated links {% endcomment %}
+    {% assign ellipsis_start = paginator.first_page | plus: 1 %}
+    {% if paginator.page_trail.first.num > ellipsis_start %}
+      <li><a href="#" class="disabled">&hellip;</a></li>
+    {% endif %}
+
+    {% comment %} Main pagination trail {% endcomment %}
+    {% for trail in paginator.page_trail %}
+      {% if paginator.page == trail.num %}
+        <li><a href="{{ trail.path | remove: 'index.html' | relative_url }}" class="disabled current">{{ trail.num }}</a></li>
+      {% else %}
+        <li><a href="{{ trail.path | remove: 'index.html' | relative_url }}">{{ trail.num }}</a></li>
+      {% endif %}
+    {% endfor %}
+
+    {% comment %} Ellipsis for truncated links {% endcomment %}
+    {% assign ellipsis_end = paginator.last_page | minus: 1 %}
+    {% if paginator.page_trail.last.num < ellipsis_end %}
+      <li><a href="#" class="disabled">&hellip;</a></li>
+    {% endif %}
+
+    {% unless has_last_page %}
+      {% if paginator.page == paginator.total_pages %}
+        <li><a href="#" class="disabled current">{{ paginator.page }}</a></li>
+      {% else %}
+        <li><a href="{{ paginator.last_page_path | remove: 'index.html' | relative_url }}">{{ paginator.total_pages }}</a></li>
+      {% endif %}
+    {% endunless %}
+
+    {% comment %} Link next page {% endcomment %}
+    {% if paginator.next_page %}
+      <li><a href="{{ paginator.next_page_path | remove: 'index.html' | relative_url }}">{{ site.data.ui-text[site.locale].pagination_next | default: "Next" }}</a></li>
+    {% else %}
+      <li><a href="#" class="disabled"><span aria-hidden="true">{{ site.data.ui-text[site.locale].pagination_next | default: "Next" }}</span></a></li>
+    {% endif %}
+  </ul>
+</nav>
diff --git a/_includes/paginator.html b/_includes/paginator.html
index bffa0794678e..c4ab29edf29b 100644
--- a/_includes/paginator.html
+++ b/_includes/paginator.html
@@ -1,69 +1,7 @@
 {% if paginator.total_pages > 1 %}
-<nav class="pagination">
-  {% assign first_page_path = paginator.first_page_path | default: site.paginate_path | replace: 'page:num', '' | replace: '//', '/' | relative_url %}
-  <ul>
-    {% comment %} Link for previous page {% endcomment %}
-    {% if paginator.previous_page %}
-      {% if paginator.previous_page == 1 %}
-        <li><a href="{{ first_page_path }}">{{ site.data.ui-text[site.locale].pagination_previous | default: "Previous" }}</a></li>
-      {% else %}
-        <li><a href="{{ site.paginate_path | replace: ':num', paginator.previous_page | replace: '//', '/' | relative_url }}">{{ site.data.ui-text[site.locale].pagination_previous | default: "Previous" }}</a></li>
-      {% endif %}
-    {% else %}
-    <li><a href="#" class="disabled"><span aria-hidden="true">{{ site.data.ui-text[site.locale].pagination_previous | default: "Previous" }}</span></a></li>
-    {% endif %}
-
-    {% comment %} First page {% endcomment %}
-    {% if paginator.page == 1 %}
-      <li><a href="#" class="disabled current">1</a></li>
-    {% else %}
-      <li><a href="{{ first_page_path }}">1</a></li>
-    {% endif %}
-
-    {% assign page_start = 2 %}
-    {% if paginator.page > 4 %}
-      {% assign page_start = paginator.page | minus: 2 %}
-      {% comment %} Ellipsis for truncated links {% endcomment %}
-      <li><a href="#" class="disabled">&hellip;</a></li>
-    {% endif %}
-
-    {% assign page_end = paginator.total_pages | minus: 1 %}
-    {% assign pages_to_end = paginator.total_pages | minus: paginator.page %}
-    {% if pages_to_end > 4 %}
-      {% assign page_end = paginator.page | plus: 2 %}
-    {% endif %}
-
-    {% for index in (page_start..page_end) %}
-      {% if index == paginator.page %}
-        <li><a href="{{ site.paginate_path | replace: ':num', index | replace: '//', '/' | relative_url }}" class="disabled current">{{ index }}</a></li>
-      {% else %}
-        {% comment %} Distance from current page and this link {% endcomment %}
-        {% assign dist = paginator.page | minus: index %}
-        {% if dist < 0 %}
-          {% comment %} Distance must be a positive value {% endcomment %}
-          {% assign dist = 0 | minus: dist %}
-        {% endif %}
-        <li><a href="{{ site.paginate_path | replace: ':num', index | relative_url }}">{{ index }}</a></li>
-      {% endif %}
-    {% endfor %}
-
-    {% comment %} Ellipsis for truncated links {% endcomment %}
-    {% if pages_to_end > 3 %}
-      <li><a href="#" class="disabled">&hellip;</a></li>
-    {% endif %}
-
-    {% if paginator.page == paginator.total_pages %}
-      <li><a href="#" class="disabled current">{{ paginator.page }}</a></li>
-    {% else %}
-      <li><a href="{{ site.paginate_path | replace: ':num', paginator.total_pages | replace: '//', '/' | relative_url }}">{{ paginator.total_pages }}</a></li>
-    {% endif %}
-
-    {% comment %} Link next page {% endcomment %}
-    {% if paginator.next_page %}
-      <li><a href="{{ site.paginate_path | replace: ':num', paginator.next_page | replace: '//', '/' | relative_url }}">{{ site.data.ui-text[site.locale].pagination_next | default: "Next" }}</a></li>
-    {% else %}
-      <li><a href="#" class="disabled"><span aria-hidden="true">{{ site.data.ui-text[site.locale].pagination_next | default: "Next" }}</span></a></li>
-    {% endif %}
-  </ul>
-</nav>
+  {% if site.paginate %}
+    {% include paginator-v1.html %}
+  {% elsif site.pagination.enabled %}
+    {% include paginator-v2.html %}
+  {% endif %}
 {% endif %}
diff --git a/_includes/post__meta.html b/_includes/post__meta.html
deleted file mode 100644
index 1ea81e5bbcba..000000000000
--- a/_includes/post__meta.html
+++ /dev/null
@@ -1,35 +0,0 @@
-{% assign page = post | default: page %}
-
-{% if page.read_time or page.show_date %}
-  <p class="page__meta">
-
-    {% if page.show_date %}
-      {% assign date = page.date %}
-      <i class="far {% if include.type == 'grid' and page.read_time and page.show_date %}fa-fw {% endif %}fa-calendar-alt" aria-hidden="true"></i>
-      <time datetime="{{ date | date_to_xmlschema }}">{{ date | date: "%B %-d, %Y" }}</time>
-    {% endif %}
-
-    {% if page.read_time and page.show_date %}
-      {% if include.type == "grid" %}
-        <br \>
-      {% else %}
-      <span class="post__meta-sep"></span>
-      {% endif %}
-    {% endif %}
-
-    {% if page.read_time %}
-      {% assign words_per_minute = page.words_per_minute | default: site.words_per_minute | default: 200 %}
-      {% assign words = page.content | strip_html | number_of_words %}
-
-      <i class="far {% if include.type == 'grid' and page.read_time and page.show_date %}fa-fw {% endif %}fa-clock" aria-hidden="true"></i>
-      {% if words < words_per_minute %}
-        {{ site.data.ui-text[site.locale].less_than | default: "less than" }} 1 {{ site.data.ui-text[site.locale].minute_read | default: "minute read" }}
-      {% elsif words == words_per_minute %}
-        1 {{ site.data.ui-text[site.locale].minute_read | default: "minute read" }}
-      {% else %}
-        {{ words | divided_by:words_per_minute }} {{ site.data.ui-text[site.locale].minute_read | default: "minute read" }}
-      {% endif %}
-    {% endif %}
-
-  </p>
-{% endif %}
\ No newline at end of file
diff --git a/_includes/post_pagination.html b/_includes/post_pagination.html
index a93c6279763b..47bae3c6ee40 100644
--- a/_includes/post_pagination.html
+++ b/_includes/post_pagination.html
@@ -1,14 +1,14 @@
 {% if page.previous or page.next %}
   <nav class="pagination">
     {% if page.previous %}
-      <a href="{{ page.previous.url | relative_url }}" class="pagination--pager" title="{{ page.previous.title | markdownify | strip_html }}">{{ site.data.ui-text[site.locale].pagination_previous | default: "Previous" }}</a>
+      <a href="{{ page.previous.url | relative_url }}" class="pagination--pager" title="{{ page.previous.title | markdownify | strip_html | strip}}">{{ site.data.ui-text[site.locale].pagination_previous | default: "Previous" }}</a>
     {% else %}
       <a href="#" class="pagination--pager disabled">{{ site.data.ui-text[site.locale].pagination_previous | default: "Previous" }}</a>
     {% endif %}
     {% if page.next %}
-      <a href="{{ page.next.url | relative_url }}" class="pagination--pager" title="{{ page.next.title | markdownify | strip_html }}">{{ site.data.ui-text[site.locale].pagination_next | default: "Next" }}</a>
+      <a href="{{ page.next.url | relative_url }}" class="pagination--pager" title="{{ page.next.title | markdownify | strip_html | strip}}">{{ site.data.ui-text[site.locale].pagination_next | default: "Next" }}</a>
     {% else %}
       <a href="#" class="pagination--pager disabled">{{ site.data.ui-text[site.locale].pagination_next | default: "Next" }}</a>
     {% endif %}
   </nav>
-{% endif %}
\ No newline at end of file
+{% endif %}
diff --git a/_includes/posts-category.html b/_includes/posts-category.html
index b364f30e94e5..658f315104b2 100644
--- a/_includes/posts-category.html
+++ b/_includes/posts-category.html
@@ -1,5 +1,4 @@
-{%- for post in site.categories[include.taxonomy] -%}
-  {%- unless post.hidden -%}
-    {% include archive-single.html %}
-  {%- endunless -%}
+{% assign posts = site.categories[include.taxonomy] | where_exp: "post", "post.hidden != true" %}
+{%- for post in posts -%}
+  {% include archive-single.html %}
 {%- endfor -%}
diff --git a/_includes/posts-tag.html b/_includes/posts-tag.html
index 46fade02a01f..a8fc472b443a 100644
--- a/_includes/posts-tag.html
+++ b/_includes/posts-tag.html
@@ -1,5 +1,4 @@
-{%- for post in site.tags[include.taxonomy] -%}
-  {%- unless post.hidden -%}
-    {% include archive-single.html %}
-  {%- endunless -%}
+{% assign posts = site.tags[include.taxonomy] | where_exp: "post", "post.hidden != true" %}
+{%- for post in posts -%}
+  {% include archive-single.html %}
 {%- endfor -%}
diff --git a/_includes/posts-taxonomy.html b/_includes/posts-taxonomy.html
new file mode 100644
index 000000000000..e99db65c875f
--- /dev/null
+++ b/_includes/posts-taxonomy.html
@@ -0,0 +1,37 @@
+{% assign items_max = 0 %}
+{% for item in include.taxonomies %}
+  {% if item[1].size > items_max %}
+    {% assign items_max = item[1].size %}
+  {% endif %}
+{% endfor %}
+
+<ul class="taxonomy__index">
+  {% for i in (1..items_max) reversed %}
+    {% for item in include.taxonomies %}
+      {% if item[1].size == i %}
+        <li>
+          <a href="#{{ item[0] | slugify }}">
+            <strong>{{ item[0] }}</strong> <span class="taxonomy__count">{{ i }}</span>
+          </a>
+        </li>
+      {% endif %}
+    {% endfor %}
+  {% endfor %}
+</ul>
+
+{% assign entries_layout = page.entries_layout | default: 'list' %}
+{% for i in (1..items_max) reversed %}
+  {% for taxonomy in include.taxonomies %}
+    {% if taxonomy[1].size == i %}
+      <section id="{{ taxonomy[0] | slugify }}" class="taxonomy__section">
+        <h2 class="archive__subtitle">{{ taxonomy[0] }}</h2>
+        <div class="entries-{{ entries_layout }}">
+          {% for post in taxonomy.last %}
+            {% include archive-single.html type=entries_layout %}
+          {% endfor %}
+        </div>
+        <a href="#page-title" class="back-to-top">{{ site.data.ui-text[site.locale].back_to_top | default: 'Back to Top' }} &uarr;</a>
+      </section>
+    {% endif %}
+  {% endfor %}
+{% endfor %}
diff --git a/_includes/schema.html b/_includes/schema.html
new file mode 100644
index 000000000000..1dae6e2d7243
--- /dev/null
+++ b/_includes/schema.html
@@ -0,0 +1,16 @@
+<script type="application/ld+json">
+{
+  "@context": "https://schema.org",
+  {% if site.social.type == "Organization" -%}
+    "@type": "Organization",
+    "url": {{ '/' | absolute_url | jsonify }}{% if site.og_image %},
+    "logo": {{ site_og_image | jsonify }}{% endif %}{% if site.social.links %},
+    "sameAs": {{ site.social.links | jsonify }}{% endif %}
+  {%- else -%}
+    "@type": "Person",
+    "name": {{ site.social.name | default: site.name | jsonify }},
+    "url": {{ '/' | absolute_url | jsonify }}{% if site.social.links %},
+    "sameAs": {{ site.social.links | jsonify }}{% endif %}
+  {%- endif %}
+}
+</script>
diff --git a/_includes/search/algolia-search-scripts.html b/_includes/search/algolia-search-scripts.html
index 2728d290e2b3..f2e100224f97 100644
--- a/_includes/search/algolia-search-scripts.html
+++ b/_includes/search/algolia-search-scripts.html
@@ -1,60 +1,81 @@
-<!-- Including InstantSearch.js library and styling -->
-<script src="https://cdn.jsdelivr.net/npm/instantsearch.js@2.3.3/dist/instantsearch.min.js"></script>
-<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/instantsearch.js@2.3.3/dist/instantsearch.min.css">
-<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/instantsearch.js@2.3.3/dist/instantsearch-theme-algolia.min.css">
-
 <script>
-// Instanciating InstantSearch.js with Algolia credentials
-const search = instantsearch({
-  appId: '{{ site.algolia.application_id }}',
-  apiKey: '{{ site.algolia.search_only_api_key }}',
-  indexName: '{{ site.algolia.index_name }}',
-  searchParameters: {
-    restrictSearchableAttributes: [
-      'title',
-      'content'
-    ]
-  }
-});
+// Including InstantSearch.js library and styling
+const loadSearch = function() {
+  const loadCSS = function(src) {
+    var link = document.createElement('link');
+    link.rel = 'stylesheet';
+    link.type = 'text/css';
+    link.href = src;
+    link.media = 'all';
+    document.head.appendChild(link);
+  };
+
+  var script = document.createElement('script');
+  script.setAttribute("type", "text/javascript");
+  script.setAttribute("src", "https://cdn.jsdelivr.net/npm/instantsearch.js@2.3.3/dist/instantsearch.min.js");
+  script.addEventListener("load", function() {
+    // Instantiating InstantSearch.js with Algolia credentials
+    const search = instantsearch({
+      appId: '{{ site.algolia.application_id }}',
+      apiKey: '{{ site.algolia.search_only_api_key }}',
+      indexName: '{{ site.algolia.index_name }}',
+      searchParameters: {
+        restrictSearchableAttributes: ['title', 'content']
+      }
+    });
+
+    const hitTemplate = function(hit) {
+      const url = hit.url;
+      const hightlight = hit._highlightResult;
+      const title = hightlight.title && hightlight.title.value  || "";
+      const content = hightlight.html && hightlight.html.value  || "";
+
+      return `
+        <div class="list__item">
+          <article class="archive__item" itemscope itemtype="https://schema.org/CreativeWork">
+            <h2 class="archive__item-title" itemprop="headline"><a href="{{ site.baseurl }}${url}">${title}</a></h2>
+            <div class="archive__item-excerpt" itemprop="description">${content}</div>
+          </article>
+        </div>
+      `;
+    }
 
-const hitTemplate = function(hit) {
-  const url = hit.url;
-  const title = hit._highlightResult.title.value;
-  const content = hit._highlightResult.html.value;
-
-  return `
-    <div class="list__item">
-      <article class="archive__item" itemscope itemtype="https://schema.org/CreativeWork">
-        <h2 class="archive__item-title" itemprop="headline"><a href="{{ site.baseurl }}${url}">${title}</a></h2>
-        <div class="archive__item-excerpt" itemprop="description">${content}</div>
-      </article>
-    </div>
-  `;
-}
-
-// Adding searchbar and results widgets
-search.addWidget(
-  instantsearch.widgets.searchBox({
-    container: '.search-searchbar',
-    {% unless site.algolia.powered_by == false %}poweredBy: true,{% endunless %}
-    placeholder: '{{ site.data.ui-text[site.locale].search_placeholder_text | default: "Enter your search term..." }}'
-  })
-);
-search.addWidget(
-  instantsearch.widgets.hits({
-    container: '.search-hits',
-    templates: {
-      item: hitTemplate,
-      empty: '{{ site.data.ui-text[site.locale].search_algolia_no_results | default: "No results" }}',
+    // Adding searchbar and results widgets
+    search.addWidget(
+      instantsearch.widgets.searchBox({
+        container: '.search-searchbar',
+        {% unless site.algolia.powered_by == false %}poweredBy: true,{% endunless %}
+        placeholder: '{{ site.data.ui-text[site.locale].search_placeholder_text | default: "Enter your search term..." }}'
+      })
+    );
+    search.addWidget(
+      instantsearch.widgets.hits({
+        container: '.search-hits',
+        templates: {
+          item: hitTemplate,
+          empty: '{{ site.data.ui-text[site.locale].search_algolia_no_results | default: "No results" }}',
+        }
+      })
+    );
+
+    if (!search.started) {
+      search.start();
     }
-  })
-);
+  });
+  document.body.appendChild(script);
+
+  loadCSS("https://cdn.jsdelivr.net/npm/instantsearch.js@2.3.3/dist/instantsearch.min.css");
+  loadCSS("https://cdn.jsdelivr.net/npm/instantsearch.js@2.3.3/dist/instantsearch-theme-algolia.min.css");
+};
 
 // Starting the search only when toggle is clicked
-$(document).ready(function () {
+$(document).ready(function() {
+  var scriptLoaded = false;
+
   $(".search__toggle").on("click", function() {
-    if(!search.started) {
-      search.start();
+    if (!scriptLoaded) {
+      loadSearch();
+      scriptLoaded = true;
     }
   });
 });
diff --git a/_includes/search/search_form.html b/_includes/search/search_form.html
index c3463798437d..b9de365c6efe 100644
--- a/_includes/search/search_form.html
+++ b/_includes/search/search_form.html
@@ -2,7 +2,7 @@
   {%- assign search_provider = site.search_provider | default: "lunr" -%}
   {%- case search_provider -%}
   {%- when "lunr" -%}
-  <form class="search-content__form" onkeydown="return event.key != 'Enter';">
+  <form class="search-content__form" onkeydown="return event.key != 'Enter';" role="search">
     <label class="sr-only" for="search">
       {{ site.data.ui-text[site.locale].search_label_text | default: 'Enter your search term...' }}
     </label>
@@ -10,7 +10,7 @@
   </form>
   <div id="results" class="results"></div>
   {%- when "google" -%}
-  <form onsubmit="return googleCustomSearchExecute();" id="cse-search-box-form-id">
+  <form onsubmit="return googleCustomSearchExecute();" id="cse-search-box-form-id" role="search">
     <label class="sr-only" for="cse-search-input-box-id">
       {{ site.data.ui-text[site.locale].search_label_text | default: 'Enter your search term...' }}
     </label>
diff --git a/_includes/seo.html b/_includes/seo.html
index 9b60b7bb905d..e500c6f3edfa 100644
--- a/_includes/seo.html
+++ b/_includes/seo.html
@@ -1,24 +1,17 @@
 <!-- begin _includes/seo.html -->
-{%- if site.url -%}
-  {%- assign seo_url = site.url | append: site.baseurl -%}
-{%- endif -%}
-{%- assign seo_url = seo_url | default: site.github.url -%}
-
-{% assign title_separator = site.title_separator | default: '-' | replace: '|', '&#124;' %}
+{%- assign title_separator = site.title_separator | default: '-' -%}
 
-{%- if page.title -%}
-  {%- assign seo_title = page.title | append: " " | append: title_separator | append: " " | append: site.title -%}
+{%- assign page_title = page.title | default: site.title | replace: '|', '&#124;' -%}
+{%- if page_title contains site.title -%}
+  {%- assign seo_title = page_title | replace: '|', '&#124;' -%}
+{%- else -%}
+  {%- assign seo_title = page_title | append: " " | append: title_separator | append: " " | append: site.title | replace: '|', '&#124;' -%}
 {%- endif -%}
 
-{%- if seo_title -%}
-  {%- assign seo_title = seo_title | markdownify | strip_html | strip_newlines | escape_once -%}
-{%- endif -%}
+{%- assign page_title = page_title | markdownify | strip_html | strip_newlines | escape_once -%}
+{%- assign seo_title  = seo_title  | markdownify | strip_html | strip_newlines | escape_once -%}
 
-{% if page.canonical_url %}
-  {%- assign canonical_url = page.canonical_url %}
-{% else %}
-  {%- assign canonical_url = page.url | replace: "index.html", "" | absolute_url %}
-{% endif %}
+{%- assign canonical_url = page.canonical_url | default: page.url | replace: "/index.html", "/" | absolute_url %}
 
 {%- assign seo_description = page.description | default: page.excerpt | default: site.description -%}
 {%- if seo_description -%}
@@ -32,14 +25,9 @@
   {%- assign author_twitter = author.twitter | replace: "@", "" -%}
 {%- endif -%}
 
-{%- assign page_large_image = page.header.og_image | default: page.header.overlay_image | default: page.header.image | absolute_url -%}
-{%- assign page_large_image = page_large_image | escape -%}
-
-{%- assign page_teaser_image = page.header.teaser | default: site.og_image | absolute_url -%}
-{%- assign page_teaser_image = page_teaser_image | escape -%}
-
-{%- assign site_og_image = site.og_image | absolute_url -%}
-{%- assign site_og_image = site_og_image | escape -%}
+{%- assign page_large_image = page.header.og_image | default: page.header.overlay_image | default: page.header.image | absolute_url | escape -%}
+{%- assign page_teaser_image = page.header.teaser | default: site.og_image | absolute_url | escape -%}
+{%- assign site_og_image = site.og_image | absolute_url | escape -%}
 
 {%- if page.date -%}
   {%- assign og_type = "article" -%}
@@ -47,17 +35,20 @@
   {%- assign og_type = "website" -%}
 {%- endif -%}
 
-<title>{{ seo_title | default: site.title }}{% if paginator %}{% unless paginator.page == 1 %} {{ title_separator }} {{ site.data.ui-text[site.locale].page | default: "Page" }} {{ paginator.page }}{% endunless %}{% endif %}</title>
+<title>{{ seo_title }}{% if paginator %}{% unless paginator.page == 1 %} {{ title_separator }} {{ site.data.ui-text[site.locale].page | default: "Page" }} {{ paginator.page }}{% endunless %}{% endif %}</title>
 <meta name="description" content="{{ seo_description }}">
 
 {% if author.name %}
   <meta name="author" content="{{ author.name | default: author }}">
+  {% if og_type == "article" %}
+  <meta property="article:author" content="{{ author.name | default: author }}">
+  {% endif %}
 {% endif %}
 
 <meta property="og:type" content="{{ og_type }}">
 <meta property="og:locale" content="{{ site.locale | replace: "-", "_" | default: "en_US" }}">
 <meta property="og:site_name" content="{{ site.title }}">
-<meta property="og:title" content="{{ page.title | default: site.title | markdownify | strip_html | strip_newlines | escape_once }}">
+<meta property="og:title" content="{{ page_title }}">
 <meta property="og:url" content="{{ canonical_url }}">
 
 {% if seo_description %}
@@ -72,7 +63,7 @@
 
 {% if site.twitter.username %}
   <meta name="twitter:site" content="@{{ site.twitter.username | replace: "@", "" }}">
-  <meta name="twitter:title" content="{{ page.title | default: site.title | markdownify | strip_html | strip_newlines | escape_once }}">
+  <meta name="twitter:title" content="{{ page_title }}">
   <meta name="twitter:description" content="{{ seo_description }}">
   <meta name="twitter:url" content="{{ canonical_url }}">
 
@@ -118,21 +109,9 @@
   <link rel="next" href="{{ paginator.next_page_path | absolute_url }}">
 {% endif %}
 
-<script type="application/ld+json">
-  {
-    "@context": "https://schema.org",
-    {% if site.social.type == "Organization" %}
-      "@type": "Organization",
-      "url": {{ '/' | absolute_url | jsonify }}{% if site.og_image %},
-      "logo": {{ site_og_image | jsonify }}{% endif %}
-    {% else %}
-      "@type": "Person",
-      "name": {{ site.social.name | default: site.name | jsonify }},
-      "url": {{ '/' | absolute_url |jsonify }}{% if site.social.links %},
-      "sameAs": {{ site.social.links | jsonify }}{% endif %}
-    {% endif %}
-  }
-</script>
+{% if page.url == '/' %}
+  {% include schema.html %}
+{% endif %}
 
 {% if site.google_site_verification %}
   <meta name="google-site-verification" content="{{ site.google_site_verification }}" />
@@ -149,4 +128,7 @@
 {% if site.naver_site_verification %}
   <meta name="naver-site-verification" content="{{ site.naver_site_verification }}">
 {% endif %}
+{% if site.baidu_site_verification %}
+  <meta name="baidu-site-verification" content="{{ site.baidu_site_verification }}">
+{% endif %}
 <!-- end _includes/seo.html -->
diff --git a/_includes/skip-links.html b/_includes/skip-links.html
index 2cd9f17d814a..c2d52235e14f 100644
--- a/_includes/skip-links.html
+++ b/_includes/skip-links.html
@@ -1,5 +1,4 @@
 <nav class="skip-links">
-  <h2 class="screen-reader-text">{{ site.data.ui-text[site.locale].skip_links | default: 'Skip links' }}</h2>
   <ul>
     <li><a href="#site-nav" class="screen-reader-shortcut">{{ site.data.ui-text[site.locale].skip_primary_nav | default: 'Skip to primary navigation' }}</a></li>
     <li><a href="#main" class="screen-reader-shortcut">{{ site.data.ui-text[site.locale].skip_content | default: 'Skip to content' }}</a></li>
diff --git a/_includes/social-share.html b/_includes/social-share.html
index 0b377982b268..847baa32d5da 100644
--- a/_includes/social-share.html
+++ b/_includes/social-share.html
@@ -1,11 +1,9 @@
 <section class="page__share">
-  {% if site.data.ui-text[site.locale].share_on_label %}
-    <h4 class="page__share-title">{{ site.data.ui-text[site.locale].share_on_label | default: "Share on" }}</h4>
-  {% endif %}
+  <h4 class="page__share-title">{{ site.data.ui-text[site.locale].share_on_label | default: "Share on" }}</h4>
 
   <a href="https://twitter.com/intent/tweet?{% if site.twitter.username %}via={{ site.twitter.username | url_encode }}&{% endif %}text={{ page.title | url_encode }}%20{{ page.url | absolute_url | url_encode }}" class="btn btn--twitter" onclick="window.open(this.href, 'window', 'left=20,top=20,width=500,height=500,toolbar=1,resizable=0'); return false;" title="{{ site.data.ui-text[site.locale].share_on_label | default: 'Share on' }} Twitter"><i class="fab fa-fw fa-twitter" aria-hidden="true"></i><span> Twitter</span></a>
 
   <a href="https://www.facebook.com/sharer/sharer.php?u={{ page.url | absolute_url | url_encode }}" class="btn btn--facebook" onclick="window.open(this.href, 'window', 'left=20,top=20,width=500,height=500,toolbar=1,resizable=0'); return false;" title="{{ site.data.ui-text[site.locale].share_on_label | default: 'Share on' }} Facebook"><i class="fab fa-fw fa-facebook" aria-hidden="true"></i><span> Facebook</span></a>
 
-  <a href="https://www.linkedin.com/shareArticle?mini=true&url={{ page.url | absolute_url | url_encode }}" class="btn btn--linkedin" onclick="window.open(this.href, 'window', 'left=20,top=20,width=500,height=500,toolbar=1,resizable=0'); return false;" title="{{ site.data.ui-text[site.locale].share_on_label | default: 'Share on' }} LinkedIn"><i class="fab fa-fw fa-linkedin" aria-hidden="true"></i><span> LinkedIn</span></a>
+  <a href="https://www.linkedin.com/shareArticle?mini=true&url={{ page.url | absolute_url }}" class="btn btn--linkedin" onclick="window.open(this.href, 'window', 'left=20,top=20,width=500,height=500,toolbar=1,resizable=0'); return false;" title="{{ site.data.ui-text[site.locale].share_on_label | default: 'Share on' }} LinkedIn"><i class="fab fa-fw fa-linkedin" aria-hidden="true"></i><span> LinkedIn</span></a>
 </section>
diff --git a/_includes/tag-list.html b/_includes/tag-list.html
index e0d02bfa561a..5893ee4e4d46 100644
--- a/_includes/tag-list.html
+++ b/_includes/tag-list.html
@@ -6,20 +6,13 @@
 {% endcase %}
 
 {% if site.tag_archive.path %}
-  {% comment %}
-    <!-- Sort alphabetically regardless of case e.g. a B c d E -->
-    <!-- modified from http://www.codeofclimber.ru/2015/sorting-site-tags-in-jekyll/ -->
-  {% endcomment %}
-  {% capture page_tags %}{% for tag in page.tags %}{{ tag | downcase }}|{{ tag }}{% unless forloop.last %},{% endunless %}{% endfor %}{% endcapture %}
-  {% assign tag_hashes = page_tags | split: ',' | sort %}
+  {% assign tags_sorted = page.tags | sort_natural %}
 
   <p class="page__taxonomy">
     <strong><i class="fas fa-fw fa-tags" aria-hidden="true"></i> {{ site.data.ui-text[site.locale].tags_label | default: "Tags:" }} </strong>
     <span itemprop="keywords">
-    {% for hash in tag_hashes %}
-      {% assign keyValue = hash | split: '|' %}
-      {% capture tag_word %}{{ keyValue[1] | strip_newlines }}{% endcapture %}
-      <a href="{{ tag_word | slugify | prepend: path_type | prepend: site.tag_archive.path | relative_url }}" class="page__taxonomy-item" rel="tag">{{ tag_word }}</a>{% unless forloop.last %}<span class="sep">, </span>{% endunless %}
+    {% for tag_word in tags_sorted %}
+      <a href="{{ tag_word | slugify | prepend: path_type | prepend: site.tag_archive.path | relative_url }}" class="page__taxonomy-item p-category" rel="tag">{{ tag_word }}</a>{% unless forloop.last %}<span class="sep">, </span>{% endunless %}
     {% endfor %}
     </span>
   </p>
diff --git a/_includes/toc.html b/_includes/toc.html
index 25b9f6a382b0..bc90d08a994b 100644
--- a/_includes/toc.html
+++ b/_includes/toc.html
@@ -1,6 +1,30 @@
 {% capture tocWorkspace %}
     {% comment %}
-        Version 1.0.8
+        Copyright (c) 2017 Vladimir "allejo" Jimenez
+
+        Permission is hereby granted, free of charge, to any person
+        obtaining a copy of this software and associated documentation
+        files (the "Software"), to deal in the Software without
+        restriction, including without limitation the rights to use,
+        copy, modify, merge, publish, distribute, sublicense, and/or sell
+        copies of the Software, and to permit persons to whom the
+        Software is furnished to do so, subject to the following
+        conditions:
+
+        The above copyright notice and this permission notice shall be
+        included in all copies or substantial portions of the Software.
+
+        THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+        EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+        OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+        NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+        HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+        WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+        FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+        OTHER DEALINGS IN THE SOFTWARE.
+    {% endcomment %}
+    {% comment %}
+        Version 1.2.1
           https://github.com/allejo/jekyll-toc
 
         "...like all things liquid - where there's a will, and ~36 hours to spare, there's usually a/some way" ~jaybe
@@ -12,85 +36,154 @@
             * html         (string) - the HTML of compiled markdown generated by kramdown in Jekyll
 
         Optional Parameters:
-            * sanitize     (bool)   : false  - when set to true, the headers will be stripped of any HTML in the TOC
-            * class        (string) :   ''   - a CSS class assigned to the TOC
-            * id           (string) :   ''   - an ID to assigned to the TOC
-            * h_min        (int)    :   1    - the minimum TOC header level to use; any header lower than this value will be ignored
-            * h_max        (int)    :   6    - the maximum TOC header level to use; any header greater than this value will be ignored
-            * ordered      (bool)   : false  - when set to true, an ordered list will be outputted instead of an unordered list
-            * item_class   (string) :   ''   - add custom class(es) for each list item; has support for '%level%' placeholder, which is the current heading level
-            * baseurl      (string) :   ''   - add a base url to the TOC links for when your TOC is on another page than the actual content
-            * anchor_class (string) :   ''   - add custom class(es) for each anchor element
+            * sanitize      (bool)   : false  - when set to true, the headers will be stripped of any HTML in the TOC
+            * class         (string) :   ''   - a CSS class assigned to the TOC
+            * id            (string) :   ''   - an ID to assigned to the TOC
+            * h_min         (int)    :   1    - the minimum TOC header level to use; any header lower than this value will be ignored
+            * h_max         (int)    :   6    - the maximum TOC header level to use; any header greater than this value will be ignored
+            * ordered       (bool)   : false  - when set to true, an ordered list will be outputted instead of an unordered list
+            * item_class    (string) :   ''   - add custom class(es) for each list item; has support for '%level%' placeholder, which is the current heading level
+            * submenu_class (string) :   ''   - add custom class(es) for each child group of headings; has support for '%level%' placeholder which is the current "submenu" heading level
+            * base_url      (string) :   ''   - add a base url to the TOC links for when your TOC is on another page than the actual content
+            * anchor_class  (string) :   ''   - add custom class(es) for each anchor element
+            * skip_no_ids   (bool)   : false  - skip headers that do not have an `id` attribute
+            * flat_toc      (bool)   : false  - when set to true, the TOC will be a single level list
 
         Output:
             An ordered or unordered list representing the table of contents of a markdown block. This snippet will only
             generate the table of contents and will NOT output the markdown given to it
     {% endcomment %}
 
-    {% capture my_toc %}{% endcapture %}
+    {% capture newline %}
+    {% endcapture %}
+    {% assign newline = newline | rstrip %} <!-- Remove the extra spacing but preserve the newline -->
+
+    {% capture deprecation_warnings %}{% endcapture %}
+
+    {% if include.baseurl %}
+        {% capture deprecation_warnings %}{{ deprecation_warnings }}<!-- jekyll-toc :: "baseurl" has been deprecated, use "base_url" instead -->{{ newline }}{% endcapture %}
+    {% endif %}
+
+    {% if include.skipNoIDs %}
+        {% capture deprecation_warnings %}{{ deprecation_warnings }}<!-- jekyll-toc :: "skipNoIDs" has been deprecated, use "skip_no_ids" instead -->{{ newline }}{% endcapture %}
+    {% endif %}
+
+    {% capture jekyll_toc %}{% endcapture %}
     {% assign orderedList = include.ordered | default: false %}
+    {% assign flatToc = include.flat_toc | default: false %}
+    {% assign baseURL = include.base_url | default: include.baseurl | default: '' %}
+    {% assign skipNoIDs = include.skip_no_ids | default: include.skipNoIDs | default: false %}
     {% assign minHeader = include.h_min | default: 1 %}
     {% assign maxHeader = include.h_max | default: 6 %}
-    {% assign nodes = include.html | split: '<h' %}
+    {% assign nodes = include.html | strip | split: '<h' %}
+
     {% assign firstHeader = true %}
+    {% assign currLevel = 0 %}
+    {% assign lastLevel = 0 %}
 
-    {% capture listModifier %}{% if orderedList %}1.{% else %}-{% endif %}{% endcapture %}
+    {% capture listModifier %}{% if orderedList %}ol{% else %}ul{% endif %}{% endcapture %}
 
     {% for node in nodes %}
         {% if node == "" %}
             {% continue %}
         {% endif %}
 
-        {% assign headerLevel = node | replace: '"', '' | slice: 0, 1 | times: 1 %}
+        {% assign currLevel = node | replace: '"', '' | slice: 0, 1 | times: 1 %}
 
-        {% if headerLevel < minHeader or headerLevel > maxHeader %}
+        {% if currLevel < minHeader or currLevel > maxHeader %}
             {% continue %}
         {% endif %}
 
-        {% if firstHeader %}
-            {% assign firstHeader = false %}
-            {% assign minHeader = headerLevel %}
-        {% endif %}
-
-        {% assign indentAmount = headerLevel | minus: minHeader %}
         {% assign _workspace = node | split: '</h' %}
 
         {% assign _idWorkspace = _workspace[0] | split: 'id="' %}
         {% assign _idWorkspace = _idWorkspace[1] | split: '"' %}
-        {% assign html_id = _idWorkspace[0] %}
+        {% assign htmlID = _idWorkspace[0] %}
 
         {% assign _classWorkspace = _workspace[0] | split: 'class="' %}
         {% assign _classWorkspace = _classWorkspace[1] | split: '"' %}
-        {% assign html_class = _classWorkspace[0] %}
+        {% assign htmlClass = _classWorkspace[0] %}
 
-        {% if html_class contains "no_toc" %}
+        {% if htmlClass contains "no_toc" %}
             {% continue %}
         {% endif %}
 
+        {% if firstHeader %}
+            {% assign minHeader = currLevel %}
+        {% endif %}
+
         {% capture _hAttrToStrip %}{{ _workspace[0] | split: '>' | first }}>{% endcapture %}
         {% assign header = _workspace[0] | replace: _hAttrToStrip, '' %}
 
-        {% assign space = '' %}
-        {% for i in (1..indentAmount) %}
-            {% assign space = space | prepend: '    ' %}
-        {% endfor %}
+        {% if include.item_class and include.item_class != blank %}
+            {% capture listItemClass %} class="{{ include.item_class | replace: '%level%', currLevel | split: '.' | join: ' ' }}"{% endcapture %}
+        {% endif %}
+
+        {% if include.submenu_class and include.submenu_class != blank %}
+            {% assign subMenuLevel = currLevel | minus: 1 %}
+            {% capture subMenuClass %} class="{{ include.submenu_class | replace: '%level%', subMenuLevel | split: '.' | join: ' ' }}"{% endcapture %}
+        {% endif %}
 
-        {% unless include.item_class == blank %}
-            {% capture listItemClass %}{:.{{ include.item_class | replace: '%level%', headerLevel }}}{% endcapture %}
-        {% endunless %}
+        {% capture anchorBody %}{% if include.sanitize %}{{ header | strip_html }}{% else %}{{ header }}{% endif %}{% endcapture %}
 
-        {% capture heading_body %}{% if include.sanitize %}{{ header | strip_html }}{% else %}{{ header }}{% endif %}{% endcapture %}
-        {% capture my_toc %}{{ my_toc }}
-{{ space }}{{ listModifier }} {{ listItemClass }} [{{ heading_body | replace: "|", "\|" }}]({% if include.baseurl %}{{ include.baseurl }}{% endif %}#{{ html_id }}){% if include.anchor_class %}{:.{{ include.anchor_class }}}{% endif %}{% endcapture %}
+        {% if htmlID %}
+            {% capture anchorAttributes %} href="{% if baseURL %}{{ baseURL }}{% endif %}#{{ htmlID }}"{% endcapture %}
+
+            {% if include.anchor_class %}
+                {% capture anchorAttributes %}{{ anchorAttributes }} class="{{ include.anchor_class | split: '.' | join: ' ' }}"{% endcapture %}
+            {% endif %}
+
+            {% capture listItem %}<a{{ anchorAttributes }}>{{ anchorBody }}</a>{% endcapture %}
+        {% elsif skipNoIDs == true %}
+            {% continue %}
+        {% else %}
+            {% capture listItem %}{{ anchorBody }}{% endcapture %}
+        {% endif %}
+
+        {% if currLevel > lastLevel and flatToc == false %}
+            {% capture jekyll_toc %}{{ jekyll_toc }}<{{ listModifier }}{{ subMenuClass }}>{% endcapture %}
+        {% elsif currLevel < lastLevel and flatToc == false %}
+            {% assign repeatCount = lastLevel | minus: currLevel %}
+
+            {% for i in (1..repeatCount) %}
+                {% capture jekyll_toc %}{{ jekyll_toc }}</li></{{ listModifier }}>{% endcapture %}
+            {% endfor %}
+
+            {% capture jekyll_toc %}{{ jekyll_toc }}</li>{% endcapture %}
+        {% else %}
+            {% capture jekyll_toc %}{{ jekyll_toc }}</li>{% endcapture %}
+        {% endif %}
+
+        {% capture jekyll_toc %}{{ jekyll_toc }}<li{{ listItemClass }}>{{ listItem }}{% endcapture %}
+
+        {% assign lastLevel = currLevel %}
+        {% assign firstHeader = false %}
     {% endfor %}
 
-    {% if include.class %}
-        {% capture my_toc %}{:.{{ include.class }}}
-{{ my_toc | lstrip }}{% endcapture %}
+    {% if flatToc == true %}
+        {% assign repeatCount = 1 %}
+    {% else %}
+        {% assign repeatCount = minHeader | minus: 1 %}
+        {% assign repeatCount = lastLevel | minus: repeatCount %}
     {% endif %}
 
-    {% if include.id %}
-        {% capture my_toc %}{: #{{ include.id }}}
-{{ my_toc | lstrip }}{% endcapture %}
+    {% for i in (1..repeatCount) %}
+        {% capture jekyll_toc %}{{ jekyll_toc }}</li></{{ listModifier }}>{% endcapture %}
+    {% endfor %}
+
+    {% if jekyll_toc != '' %}
+        {% assign rootAttributes = '' %}
+        {% if include.class and include.class != blank %}
+            {% capture rootAttributes %} class="{{ include.class | split: '.' | join: ' ' }}"{% endcapture %}
+        {% endif %}
+
+        {% if include.id and include.id != blank %}
+            {% capture rootAttributes %}{{ rootAttributes }} id="{{ include.id }}"{% endcapture %}
+        {% endif %}
+
+        {% if rootAttributes %}
+            {% assign nodes = jekyll_toc | split: '>' %}
+            {% capture jekyll_toc %}<{{ listModifier }}{{ rootAttributes }}>{{ nodes | shift | join: '>' }}>{% endcapture %}
+        {% endif %}
     {% endif %}
-{% endcapture %}{% assign tocWorkspace = '' %}{{ my_toc | markdownify | strip }}
+{% endcapture %}{% assign tocWorkspace = '' %}{{ deprecation_warnings }}{{ jekyll_toc -}}
diff --git a/_includes/video b/_includes/video
index d653fd641df6..c85a868c1d0b 100644
--- a/_includes/video
+++ b/_includes/video
@@ -16,7 +16,7 @@
 {% endcapture %}
 {% assign video_src = video_src | strip %}
 
-<!-- Courtesy of embedresponsively.com //-->
+<!-- Courtesy of embedresponsively.com -->
 {% unless video_src == "" %}
   <div class="responsive-video-container">
     <iframe src="{{ video_src }}" frameborder="0" webkitAllowFullScreen mozallowfullscreen allowfullscreen></iframe>
diff --git a/_layouts/archive-taxonomy.html b/_layouts/archive-taxonomy.html
index eb62a874d010..4e94867df655 100644
--- a/_layouts/archive-taxonomy.html
+++ b/_layouts/archive-taxonomy.html
@@ -20,7 +20,7 @@
 
   <div class="archive">
     {% unless page.header.overlay_color or page.header.overlay_image %}
-      <h1 id="page-title" class="page__title">{{ page.title }}</h1>
+      <h1 id="page-title" class="page__title"{% if page.locale %} lang="{{ page.locale }}"{% endif %}>{{ page.title }}</h1>
     {% endunless %}
     {% for post in page.posts %}
       {% include archive-single.html %}
diff --git a/_layouts/archive.html b/_layouts/archive.html
index 08beb89af516..83e109b58cb4 100644
--- a/_layouts/archive.html
+++ b/_layouts/archive.html
@@ -19,8 +19,8 @@
 
   <div class="archive">
     {% unless page.header.overlay_color or page.header.overlay_image %}
-      <h1 id="page-title" class="page__title">{{ page.title }}</h1>
+      <h1 id="page-title" class="page__title"{% if page.locale %} lang="{{ page.locale }}"{% endif %}>{{ page.title }}</h1>
     {% endunless %}
     {{ content }}
   </div>
-</div>
\ No newline at end of file
+</div>
diff --git a/_layouts/categories.html b/_layouts/categories.html
index aa2c6e80e276..4d3661188982 100644
--- a/_layouts/categories.html
+++ b/_layouts/categories.html
@@ -4,39 +4,4 @@
 
 {{ content }}
 
-{% assign categories_max = 0 %}
-{% for category in site.categories %}
-  {% if category[1].size > categories_max %}
-    {% assign categories_max = category[1].size %}
-  {% endif %}
-{% endfor %}
-
-<ul class="taxonomy__index">
-  {% for i in (1..categories_max) reversed %}
-    {% for category in site.categories %}
-      {% if category[1].size == i %}
-        <li>
-          <a href="#{{ category[0] | slugify }}">
-            <strong>{{ category[0] }}</strong> <span class="taxonomy__count">{{ i }}</span>
-          </a>
-        </li>
-      {% endif %}
-    {% endfor %}
-  {% endfor %}
-</ul>
-
-{% for i in (1..categories_max) reversed %}
-  {% for category in site.categories %}
-    {% if category[1].size == i %}
-      <section id="{{ category[0] | slugify | downcase }}" class="taxonomy__section">
-        <h2 class="archive__subtitle">{{ category[0] }}</h2>
-        <div class="entries-{{ page.entries_layout | default: 'list' }}">
-          {% for post in category.last %}
-            {% include archive-single.html type=page.entries_layout %}
-          {% endfor %}
-        </div>
-        <a href="#page-title" class="back-to-top">{{ site.data.ui-text[site.locale].back_to_top | default: 'Back to Top' }} &uarr;</a>
-      </section>
-    {% endif %}
-  {% endfor %}
-{% endfor %}
+{% include posts-taxonomy.html taxonomies=site.categories %}
diff --git a/_layouts/category.html b/_layouts/category.html
index 79b81ce0972c..b281c8560395 100644
--- a/_layouts/category.html
+++ b/_layouts/category.html
@@ -4,6 +4,7 @@
 
 {{ content }}
 
-<div class="entries-{{ page.entries_layout }}">
-  {% include posts-category.html taxonomy=page.taxonomy type=page.entries_layout %}
+{% assign entries_layout = page.entries_layout | default: 'list' %}
+<div class="entries-{{ entries_layout }}">
+  {% include posts-category.html taxonomy=page.taxonomy type=entries_layout %}
 </div>
diff --git a/_layouts/collection.html b/_layouts/collection.html
index 3bcd916a623d..d23d0c723bf4 100644
--- a/_layouts/collection.html
+++ b/_layouts/collection.html
@@ -4,6 +4,7 @@
 
 {{ content }}
 
-<div class="entries-{{ page.entries_layout }}">
-  {% include documents-collection.html collection=page.collection sort_by=page.sort_by sort_order=page.sort_order type=page.entries_layout %}
+{% assign entries_layout = page.entries_layout | default: 'list' %}
+<div class="entries-{{ entries_layout }}">
+  {% include documents-collection.html collection=page.collection sort_by=page.sort_by sort_order=page.sort_order type=entries_layout %}
 </div>
diff --git a/_layouts/default.html b/_layouts/default.html
index 04517b1abc1d..ecfc46620257 100644
--- a/_layouts/default.html
+++ b/_layouts/default.html
@@ -2,25 +2,20 @@
 ---
 
 <!doctype html>
-<!--
-  Minimal Mistakes Jekyll Theme 4.20.1 by Michael Rose
-  Copyright 2013-2019 Michael Rose - mademistakes.com | @mmistakes
-  Free for personal and commercial use under the MIT license
-  https://github.com/mmistakes/minimal-mistakes/blob/master/LICENSE
--->
-<html lang="{{ site.locale | slice: 0,2 | default: "en" }}" class="no-js">
+{% include copyright.html %}
+<html lang="{{ site.locale | replace: "_", "-" | default: "en" }}" class="no-js">
   <head>
     {% include head.html %}
     {% include head/custom.html %}
   </head>
 
-  <body class="layout--{{ page.layout | default: layout.layout }}{% if page.classes or layout.classes %}{{ page.classes | default: layout.classes | join: ' ' | prepend: ' ' }}{% endif %}">
+  <body class="layout--{{ page.layout | default: layout.layout }}{% if page.classes or layout.classes %}{{ page.classes | default: layout.classes | join: ' ' | prepend: ' ' }}{% endif %}" dir="{% if site.rtl %}rtl{% else %}ltr{% endif %}">
     {% include_cached skip-links.html %}
-    {% include_cached browser-upgrade.html %}
     {% include_cached masthead.html %}
 
     <div class="initial-content">
       {{ content }}
+      {% include after-content.html %}
     </div>
 
     {% if site.search == true %}
@@ -37,6 +32,5 @@
     </div>
 
     {% include scripts.html %}
-
   </body>
 </html>
diff --git a/_layouts/home.html b/_layouts/home.html
index 02e96eb81ca1..384a4d9a3bb7 100644
--- a/_layouts/home.html
+++ b/_layouts/home.html
@@ -14,9 +14,7 @@ <h3 class="archive__subtitle">{{ site.data.ui-text[site.locale].recent_posts | d
 
 {% assign entries_layout = page.entries_layout | default: 'list' %}
 <div class="entries-{{ entries_layout }}">
-  {% for post in posts %}
-    {% include archive-single.html type=entries_layout %}
-  {% endfor %}
+  {% include documents-collection.html entries=posts type=entries_layout %}
 </div>
 
 {% include paginator.html %}
diff --git a/_layouts/posts.html b/_layouts/posts.html
index 95072ce0d402..13fc707cf00a 100644
--- a/_layouts/posts.html
+++ b/_layouts/posts.html
@@ -15,13 +15,14 @@
   {% endfor %}
 </ul>
 
+{% assign entries_layout = page.entries_layout | default: 'list' %}
 {% assign postsByYear = site.posts | where_exp: "item", "item.hidden != true" | group_by_exp: 'post', 'post.date | date: "%Y"' %}
 {% for year in postsByYear %}
   <section id="{{ year.name }}" class="taxonomy__section">
     <h2 class="archive__subtitle">{{ year.name }}</h2>
-    <div class="entries-{{ page.entries_layout | default: 'list' }}">
+    <div class="entries-{{ entries_layout }}">
       {% for post in year.items %}
-        {% include archive-single.html type=page.entries_layout %}
+        {% include archive-single.html type=entries_layout %}
       {% endfor %}
     </div>
     <a href="#page-title" class="back-to-top">{{ site.data.ui-text[site.locale].back_to_top | default: 'Back to Top' }} &uarr;</a>
diff --git a/_layouts/search.html b/_layouts/search.html
index d18f22352204..da8784350fd6 100644
--- a/_layouts/search.html
+++ b/_layouts/search.html
@@ -17,7 +17,7 @@
 
   <div class="archive">
     {% unless page.header.overlay_color or page.header.overlay_image %}
-      <h1 id="page-title" class="page__title">{{ page.title }}</h1>
+      <h1 id="page-title" class="page__title"{% if page.locale %} lang="{{ page.locale }}"{% endif %}>{{ page.title }}</h1>
     {% endunless %}
 
     {{ content }}
@@ -25,11 +25,11 @@ <h1 id="page-title" class="page__title">{{ page.title }}</h1>
     {%- assign search_provider = site.search_provider | default: "lunr" -%}
     {%- case search_provider -%}
       {%- when "lunr" -%}
-        <input type="text" id="search" class="search-input" tabindex="-1" placeholder="{{ site.data.ui-text[site.locale].search_placeholder_text | default: 'Enter your search term...' }}" />
+        <input type="text" id="search" class="search-input" placeholder="{{ site.data.ui-text[site.locale].search_placeholder_text | default: 'Enter your search term...' }}" />
         <div id="results" class="results"></div>
       {%- when "google" -%}
         <form onsubmit="return googleCustomSearchExecute();" id="cse-search-box-form-id">
-        <input type="text" id="cse-search-input-box-id" class="search-input" tabindex="-1" placeholder="{{ site.data.ui-text[site.locale].search_placeholder_text | default: 'Enter your search term...' }}" />
+        <input type="text" id="cse-search-input-box-id" class="search-input" placeholder="{{ site.data.ui-text[site.locale].search_placeholder_text | default: 'Enter your search term...' }}" />
         </form>
         <div id="results" class="results">
           <gcse:searchresults-only></gcse:searchresults-only>
diff --git a/_layouts/single.html b/_layouts/single.html
index 7116d72d688b..21cd71144b56 100644
--- a/_layouts/single.html
+++ b/_layouts/single.html
@@ -8,7 +8,11 @@
   {% include page__hero_video.html %}
 {% endif %}
 
-{% if page.url != "/" and site.breadcrumbs %}
+{% assign breadcrumbs_enabled = site.breadcrumbs %}
+{% if page.breadcrumbs != null %}
+  {% assign breadcrumbs_enabled = page.breadcrumbs %}
+{% endif %}
+{% if page.url != "/" and breadcrumbs_enabled %}
   {% unless paginator %}
     {% include breadcrumbs.html %}
   {% endunless %}
@@ -17,8 +21,8 @@
 <div id="main" role="main">
   {% include sidebar.html %}
 
-  <article class="page" itemscope itemtype="https://schema.org/CreativeWork">
-    {% if page.title %}<meta itemprop="headline" content="{{ page.title | markdownify | strip_html | strip_newlines | escape_once }}">{% endif %}
+  <article class="page" itemscope itemtype="https://schema.org/CreativeWork"{% if page.locale %} lang="{{ page.locale }}"{% endif %}>
+    {% if page.title %}<meta itemprop="headline" content="{{ page.title | replace: '|', '&#124;' | markdownify | strip_html | strip_newlines | escape_once }}">{% endif %}
     {% if page.excerpt %}<meta itemprop="description" content="{{ page.excerpt | markdownify | strip_html | strip_newlines | escape_once }}">{% endif %}
     {% if page.date %}<meta itemprop="datePublished" content="{{ page.date | date_to_xmlschema }}">{% endif %}
     {% if page.last_modified_at %}<meta itemprop="dateModified" content="{{ page.last_modified_at | date_to_xmlschema }}">{% endif %}
@@ -26,8 +30,12 @@
     <div class="page__inner-wrap">
       {% unless page.header.overlay_color or page.header.overlay_image %}
         <header>
-          {% if page.title %}<h1 id="page-title" class="page__title" itemprop="headline">{{ page.title | markdownify | remove: "<p>" | remove: "</p>" }}</h1>{% endif %}
-          {% include post__meta.html %}
+          {% if page.title -%}
+          <h1 id="page-title" class="page__title" itemprop="headline">
+            <a href="{{ page.url | absolute_url }}" itemprop="url">{{ page.title | markdownify | remove: "<p>" | remove: "</p>" }}</a>
+          </h1>
+          {%- endif %}
+          {% include page__meta.html %}
         </header>
       {% endunless %}
 
@@ -36,7 +44,7 @@
           <aside class="sidebar__right {% if page.toc_sticky %}sticky{% endif %}">
             <nav class="toc">
               <header><h4 class="nav__title"><i class="fas fa-{{ page.toc_icon | default: 'file-alt' }}"></i> {{ page.toc_label | default: site.data.ui-text[site.locale].toc_label | default: "On this page" }}</h4></header>
-              {% include toc.html sanitize=true html=content h_min=1 h_max=6 class="toc__menu" %}
+              {% include toc.html sanitize=true html=content h_min=1 h_max=6 class="toc__menu" skip_no_ids=true %}
             </nav>
           </aside>
         {% endif %}
@@ -57,33 +65,23 @@ <h4 class="page__meta-title">{{ site.data.ui-text[site.locale].meta_label }}</h4
       {% include post_pagination.html %}
     </div>
 
-    {% if jekyll.environment == 'production' and site.comments.provider and page.comments %}
-      {% include comments.html %}
+    {% if site.comments.provider and page.comments %}
+      {% if jekyll.environment == 'production' %}
+        {% include comments.html %}
+      {% else %}
+        <p>
+          Comments are configured with provider: <strong>{{ site.comments.provider }}</strong>,
+          but are disabled in non-production environments.
+        </p>
+      {% endif %}
     {% endif %}
   </article>
 
   {% comment %}<!-- only show related on a post page when `related: true` -->{% endcomment %}
   {% if page.id and page.related and site.related_posts.size > 0 %}
-    <div class="page__related">
-      <h4 class="page__related-title">{{ site.data.ui-text[site.locale].related_label | default: "You May Also Enjoy" }}</h4>
-      <div class="grid__wrapper">
-        {% for post in site.related_posts limit:4 %}
-          {% include archive-single.html type="grid" %}
-        {% endfor %}
-      </div>
-    </div>
+    {% include page__related.html posts=site.related_posts %}
   {% comment %}<!-- otherwise show recent posts if no related when `related: true` -->{% endcomment %}
   {% elsif page.id and page.related %}
-    <div class="page__related">
-      <h4 class="page__related-title">{{ site.data.ui-text[site.locale].related_label | default: "You May Also Enjoy" }}</h4>
-      <div class="grid__wrapper">
-        {% for post in site.posts limit:4 %}
-          {% if post.id == page.id %}
-            {% continue %}
-          {% endif %}
-          {% include archive-single.html type="grid" %}
-        {% endfor %}
-      </div>
-    </div>
+    {% include page__related.html posts=site.posts %}
   {% endif %}
 </div>
diff --git a/_layouts/splash.html b/_layouts/splash.html
index 2116502402a3..394209d8c512 100644
--- a/_layouts/splash.html
+++ b/_layouts/splash.html
@@ -9,7 +9,7 @@
 {% endif %}
 
 <div id="main" role="main">
-  <article class="splash" itemscope itemtype="https://schema.org/CreativeWork">
+  <article class="splash" itemscope itemtype="https://schema.org/CreativeWork"{% if page.locale %} lang="{{ page.locale }}"{% endif %}>
     {% if page.title %}<meta itemprop="headline" content="{{ page.title | markdownify | strip_html | strip_newlines | escape_once }}">{% endif %}
     {% if page.excerpt %}<meta itemprop="description" content="{{ page.excerpt | markdownify | strip_html | strip_newlines | escape_once }}">{% endif %}
     {% if page.date %}<meta itemprop="datePublished" content="{{ page.date | date_to_xmlschema }}">{% endif %}
diff --git a/_layouts/tag.html b/_layouts/tag.html
index 5f83c2aa1531..8b1c1885004f 100644
--- a/_layouts/tag.html
+++ b/_layouts/tag.html
@@ -4,6 +4,7 @@
 
 {{ content }}
 
-<div class="entries-{{ page.entries_layout | default: 'list' }}">
-  {% include posts-tag.html taxonomy=page.taxonomy type=page.entries_layout %}
+{% assign entries_layout = page.entries_layout | default: 'list' %}
+<div class="entries-{{ entries_layout }}">
+  {% include posts-tag.html taxonomy=page.taxonomy type=entries_layout %}
 </div>
diff --git a/_layouts/tags.html b/_layouts/tags.html
index 128e176e4b27..a28fa5d709c6 100644
--- a/_layouts/tags.html
+++ b/_layouts/tags.html
@@ -4,39 +4,4 @@
 
 {{ content }}
 
-{% assign tags_max = 0 %}
-{% for tag in site.tags %}
-  {% if tag[1].size > tags_max %}
-    {% assign tags_max = tag[1].size %}
-  {% endif %}
-{% endfor %}
-
-<ul class="taxonomy__index">
-  {% for i in (1..tags_max) reversed %}
-    {% for tag in site.tags %}
-      {% if tag[1].size == i %}
-        <li>
-          <a href="#{{ tag[0] | slugify }}">
-            <strong>{{ tag[0] }}</strong> <span class="taxonomy__count">{{ i }}</span>
-          </a>
-        </li>
-      {% endif %}
-    {% endfor %}
-  {% endfor %}
-</ul>
-
-{% for i in (1..tags_max) reversed %}
-  {% for tag in site.tags %}
-    {% if tag[1].size == i %}
-      <section id="{{ tag[0] | slugify | downcase }}" class="taxonomy__section">
-        <h2 class="archive__subtitle">{{ tag[0] }}</h2>
-        <div class="entries-{{ page.entries_layout | default: 'list' }}">
-          {% for post in tag.last %}
-            {% include archive-single.html type=page.entries_layout %}
-          {% endfor %}
-        </div>
-        <a href="#page-title" class="back-to-top">{{ site.data.ui-text[site.locale].back_to_top | default: 'Back to Top' }} &uarr;</a>
-      </section>
-    {% endif %}
-  {% endfor %}
-{% endfor %}
+{% include posts-taxonomy.html taxonomies=site.tags %}
diff --git a/_sass/minimal-mistakes.scss b/_sass/minimal-mistakes.scss
index 25f739d0460e..ba9d13d5df2f 100644
--- a/_sass/minimal-mistakes.scss
+++ b/_sass/minimal-mistakes.scss
@@ -1,8 +1,5 @@
-/*!
- * Minimal Mistakes Jekyll Theme 4.20.1 by Michael Rose
- * Copyright 2013-2019 Michael Rose - mademistakes.com | @mmistakes
- * Licensed under MIT (https://github.com/mmistakes/minimal-mistakes/blob/master/LICENSE)
-*/
+/* Copyright comment */
+@import "minimal-mistakes/copyright";
 
 /* Variables */
 @import "minimal-mistakes/variables";
diff --git a/_sass/minimal-mistakes/_archive.scss b/_sass/minimal-mistakes/_archive.scss
index 3df299614b00..aee718909418 100644
--- a/_sass/minimal-mistakes/_archive.scss
+++ b/_sass/minimal-mistakes/_archive.scss
@@ -7,14 +7,14 @@
   margin-bottom: 2em;
 
   @include breakpoint($large) {
-    float: right;
+    float: inline-end;
     width: calc(100% - #{$right-sidebar-width-narrow});
-    padding-right: $right-sidebar-width-narrow;
+    padding-inline-end: $right-sidebar-width-narrow;
   }
 
   @include breakpoint($x-large) {
     width: calc(100% - #{$right-sidebar-width});
-    padding-right: $right-sidebar-width;
+    padding-inline-end: $right-sidebar-width;
   }
 }
 
@@ -53,10 +53,7 @@
   a[rel="permalink"]::before {
     content: '';
     position: absolute;
-    left: 0;
-    top: 0;
-    right: 0;
-    bottom: 0;
+    inset: 0;
   }
 
   a + a {
@@ -98,14 +95,14 @@
 .archive__item-caption {
   position: absolute;
   bottom: 0;
-  right: 0;
+  inset-inline-end: 0;
   margin: 0 auto;
   padding: 2px 5px;
   color: #fff;
   font-family: $caption-font-family;
   font-size: $type-size-8;
   background: #000;
-  text-align: right;
+  text-align: end;
   z-index: 5;
   opacity: 0.5;
   border-radius: $border-radius 0 0 0;
@@ -140,11 +137,11 @@
     /* extend grid elements to the right */
 
     @include breakpoint($large) {
-      margin-right: -1 * $right-sidebar-width-narrow;
+      margin-inline-end: -1 * $right-sidebar-width-narrow;
     }
 
     @include breakpoint($x-large) {
-      margin-right: -1 * $right-sidebar-width;
+      margin-inline-end: -1 * $right-sidebar-width;
     }
   }
 }
@@ -153,23 +150,22 @@
   margin-bottom: 2em;
 
   @include breakpoint($small) {
-    float: left;
+    float: inline-start;
     width: span(5 of 10);
 
     &:nth-child(2n + 1) {
       clear: both;
-      margin-left: 0;
+      margin-inline-start: 0;
     }
 
     &:nth-child(2n + 2) {
       clear: none;
-      margin-left: gutter(of 10);
+      margin-inline-start: gutter(of 10);
     }
   }
 
   @include breakpoint($medium) {
-    margin-left: 0; /* override margin*/
-    margin-right: 0; /* override margin*/
+    margin-inline: 0; /* override margin*/
     width: span(3 of 12);
 
     &:nth-child(2n + 1) {
@@ -182,17 +178,17 @@
 
     &:nth-child(4n + 2) {
       clear: none;
-      margin-left: gutter(1 of 12);
+      margin-inline-start: gutter(1 of 12);
     }
 
     &:nth-child(4n + 3) {
       clear: none;
-      margin-left: gutter(1 of 12);
+      margin-inline-start: gutter(1 of 12);
     }
 
     &:nth-child(4n + 4) {
       clear: none;
-      margin-left: gutter(1 of 12);
+      margin-inline-start: gutter(1 of 12);
     }
   }
 
@@ -201,6 +197,14 @@
     font-size: 0.6em;
   }
 
+  .page__meta-sep {
+    display: block;
+
+    &::before {
+      display: none;
+    }
+  }
+
   .archive__item-title {
     margin-top: 0.5em;
     font-size: $type-size-5;
@@ -246,23 +250,23 @@
   font-size: 1.125em;
 
   @include breakpoint($small) {
-    float: left;
+    float: inline-start;
     margin-bottom: 0;
     width: span(4 of 12);
 
     &:nth-child(3n + 1) {
       clear: both;
-      margin-left: 0;
+      margin-inline-start: 0;
     }
 
     &:nth-child(3n + 2) {
       clear: none;
-      margin-left: gutter(of 12);
+      margin-inline-start: gutter(of 12);
     }
 
     &:nth-child(3n + 3) {
       clear: none;
-      margin-left: gutter(of 12);
+      margin-inline-start: gutter(of 12);
     }
 
     .feature__item-teaser {
@@ -272,114 +276,89 @@
   }
 
   .archive__item-body {
-    padding-left: gutter(1 of 12);
-    padding-right: gutter(1 of 12);
+    padding-inline: gutter(1 of 12);
   }
 
   a.btn::before {
     content: '';
     position: absolute;
-    left: 0;
-    top: 0;
-    right: 0;
-    bottom: 0;
+    inset: 0;
   }
 
-  &--left {
+  &--left, &--right {
     position: relative;
-    float: left;
-    margin-left: 0;
-    margin-right: 0;
+    margin-inline: 0;
     width: 100%;
     clear: both;
     font-size: 1.125em;
 
-    .archive__item {
-      float: left;
+    a.btn::before {
+      content: '';
+      position: absolute;
+      inset: 0;
     }
 
     .archive__item-teaser {
       margin-bottom: 2em;
     }
+  }
 
-    a.btn::before {
-      content: '';
-      position: absolute;
-      left: 0;
-      top: 0;
-      right: 0;
-      bottom: 0;
+  &--left {
+    float: inline-start;
+
+    .archive__item {
+      float: inline-start;
     }
 
     @include breakpoint($small) {
       .archive__item-teaser {
-        float: left;
+        float: inline-start;
         width: span(5 of 12);
       }
 
       .archive__item-body {
-        float: right;
-        padding-left: gutter(0.5 of 12);
-        padding-right: gutter(1 of 12);
+        float: inline-end;
         width: span(7 of 12);
+        padding-inline-start: gutter(0.5 of 12);
+        padding-inline-end: gutter(1 of 12);
       }
     }
   }
 
   &--right {
-    position: relative;
-    float: left;
-    margin-left: 0;
-    margin-right: 0;
-    width: 100%;
-    clear: both;
-    font-size: 1.125em;
+    float: inline-end;
 
     .archive__item {
-      float: left;
-    }
-
-    .archive__item-teaser {
-      margin-bottom: 2em;
-    }
-
-    a.btn::before {
-      content: '';
-      position: absolute;
-      left: 0;
-      top: 0;
-      right: 0;
-      bottom: 0;
+      float: inline-end;
     }
 
     @include breakpoint($small) {
-      text-align: right;
+      text-align: end;
 
       .archive__item-teaser {
-        float: right;
+        float: inline-end;
         width: span(5 of 12);
       }
 
       .archive__item-body {
-        float: left;
+        float: inline-start;
         width: span(7 of 12);
-        padding-left: gutter(0.5 of 12);
-        padding-right: gutter(1 of 12);
+        padding-inline-start: gutter(1 of 12);
+        padding-inline-end: gutter(0.5 of 12);
       }
     }
   }
 
   &--center {
     position: relative;
-    float: left;
-    margin-left: 0;
-    margin-right: 0;
+    float: inline-start;
+    margin-inline: 0;
     width: 100%;
     clear: both;
     font-size: 1.125em;
 
     .archive__item {
-      float: left;
+      float: inline-start;
       width: 100%;
     }
 
@@ -390,10 +369,7 @@
     a.btn::before {
       content: '';
       position: absolute;
-      left: 0;
-      top: 0;
-      right: 0;
-      bottom: 0;
+      inset: 0;
     }
 
     @include breakpoint($small) {
@@ -434,14 +410,14 @@
    Wide Pages
    ========================================================================== */
 
-  .wide {
+.wide {
   .archive {
     @include breakpoint($large) {
-      padding-right: 0;
+      padding-inline-end: 0;
     }
 
     @include breakpoint($x-large) {
-      padding-right: 0;
+      padding-inline-end: 0;
     }
   }
 }
diff --git a/_sass/minimal-mistakes/_base.scss b/_sass/minimal-mistakes/_base.scss
index 3796eb61302d..d52a42f2bc03 100644
--- a/_sass/minimal-mistakes/_base.scss
+++ b/_sass/minimal-mistakes/_base.scss
@@ -107,18 +107,18 @@ abbr[data-original-title] {
 /* blockquotes */
 
 blockquote {
-  margin: 2em 1em 2em 0;
-  padding-left: 1em;
-  padding-right: 1em;
+  margin-block: 2em;
+  margin-inline-end: 1em;
+  padding-inline: 1em;
   font-style: italic;
-  border-left: 0.25em solid $primary-color;
+  border-inline-start: 0.25em solid $primary-color;
 
   cite {
     font-style: italic;
 
-    &:before {
+    &::before {
       content: "\2014";
-      padding-right: 5px;
+      padding-inline-end: 5px;
     }
   }
 }
@@ -160,24 +160,6 @@ pre {
   overflow-x: auto; /* add scrollbars to wide code blocks*/
 }
 
-p > code,
-a > code,
-li > code,
-figcaption > code,
-td > code {
-  padding-top: 0.1rem;
-  padding-bottom: 0.1rem;
-  font-size: 0.8em;
-  background: $code-background-color;
-  border-radius: $border-radius;
-
-  &:before,
-  &:after {
-    letter-spacing: -0.2em;
-    content: "\00a0"; /* non-breaking space*/
-  }
-}
-
 /* horizontal rule */
 
 hr {
diff --git a/_sass/minimal-mistakes/_buttons.scss b/_sass/minimal-mistakes/_buttons.scss
index 9ef60a8453cc..d30050bf3c2c 100644
--- a/_sass/minimal-mistakes/_buttons.scss
+++ b/_sass/minimal-mistakes/_buttons.scss
@@ -21,11 +21,11 @@
   cursor: pointer;
 
   .icon {
-    margin-right: 0.5em;
+    margin-inline-end: 0.5em;
   }
 
   .icon + .hidden {
-    margin-left: -0.5em; /* override for hidden text*/
+    margin-inline-start: -0.5em; /* override for hidden text*/
   }
 
   /* button colors */
@@ -39,7 +39,8 @@
   (info, $info-color),
   (facebook, $facebook-color),
   (twitter, $twitter-color),
-  (linkedin, $linkedin-color);
+  (linkedin, $linkedin-color),
+  (mastodon, $mastodon-color);
 
   @each $buttoncolor, $color in $buttoncolors {
     &--#{$buttoncolor} {
@@ -94,4 +95,4 @@
   &--small {
     font-size: $type-size-7;
   }
-}
\ No newline at end of file
+}
diff --git a/_sass/minimal-mistakes/_copyright.scss b/_sass/minimal-mistakes/_copyright.scss
new file mode 100644
index 000000000000..b70c0374f557
--- /dev/null
+++ b/_sass/minimal-mistakes/_copyright.scss
@@ -0,0 +1,6 @@
+/*!
+ * Minimal Mistakes Jekyll Theme 4.26.2 by Michael Rose
+ * Copyright 2013-2024 Michael Rose - mademistakes.com | @mmistakes
+ * Free for personal and commercial use under the MIT license
+ * https://github.com/mmistakes/minimal-mistakes/blob/master/LICENSE
+ */
diff --git a/_sass/minimal-mistakes/_footer.scss b/_sass/minimal-mistakes/_footer.scss
index 71692a0890ad..96d0842cedef 100644
--- a/_sass/minimal-mistakes/_footer.scss
+++ b/_sass/minimal-mistakes/_footer.scss
@@ -4,11 +4,9 @@
 
 .page__footer {
   @include clearfix;
-  float: left;
-  margin-left: 0;
-  margin-right: 0;
+  float: inline-start;
+  margin-inline: 0;
   width: 100%;
-  clear: both;
   margin-top: 3em;
   color: $muted-text-color;
   -webkit-animation: $intro-transition;
@@ -19,8 +17,7 @@
 
   footer {
     @include clearfix;
-    margin-left: auto;
-    margin-right: auto;
+    margin-inline: auto;
     margin-top: 2em;
     max-width: 100%;
     padding: 0 1em 2em;
@@ -68,13 +65,13 @@
     text-transform: uppercase;
   }
 
-  li + li:before {
+  li + li::before {
     content: "";
-    padding-right: 5px;
+    padding-inline-end: 5px;
   }
 
   a {
-    padding-right: 10px;
+    padding-inline-end: 10px;
     font-weight: bold;
   }
 
diff --git a/_sass/minimal-mistakes/_forms.scss b/_sass/minimal-mistakes/_forms.scss
index ec77c54d4480..af29b9f72138 100644
--- a/_sass/minimal-mistakes/_forms.scss
+++ b/_sass/minimal-mistakes/_forms.scss
@@ -3,7 +3,7 @@
    ========================================================================== */
 
 form {
-  margin: 0 0 5px 0;
+  margin-bottom: 5px;
   padding: 1em;
   background-color: $form-background-color;
 
@@ -17,7 +17,7 @@ form {
     display: block;
     width: 100%;
     margin-bottom: 5px * 2;
-    *margin-left: -7px;
+    margin-inline-start: -7px;
     padding: 0;
     color: $text-color;
     border: 0;
@@ -45,7 +45,6 @@ button,
 select,
 textarea {
   vertical-align: baseline;
-  *vertical-align: middle;
 }
 
 input,
@@ -102,7 +101,6 @@ input[type="radio"] {
   height: auto;
   padding: 0;
   margin: 3px 0;
-  *margin-top: 0;
   line-height: normal;
   cursor: pointer;
   border-radius: 0;
@@ -114,8 +112,6 @@ input[type="checkbox"],
 input[type="radio"] {
   box-sizing: border-box;
   padding: 0;
-  *width: 13px;
-  *height: 13px;
 }
 
 input[type="image"] {
@@ -138,12 +134,6 @@ input[type="submit"] {
   width: auto;
   height: auto;
   cursor: pointer;
-  *overflow: visible;
-}
-
-select,
-input[type="file"] {
-  *margin-top: 4px;
 }
 
 select {
@@ -173,14 +163,14 @@ input[type="hidden"] {
 
 .radio,
 .checkbox {
-  padding-left: 18px;
+  padding-inline-start: 18px;
   font-weight: normal;
 }
 
 .radio input[type="radio"],
 .checkbox input[type="checkbox"] {
-  float: left;
-  margin-left: -18px;
+  float: inline-start;
+  margin-inline-start: -18px;
 }
 
 .radio.inline,
@@ -193,7 +183,7 @@ input[type="hidden"] {
 
 .radio.inline + .radio.inline,
 .checkbox.inline + .checkbox.inline {
-  margin-left: 10px;
+  margin-inline-start: 10px;
 }
 
 /*
@@ -248,7 +238,7 @@ select:focus {
 .help-inline {
   display: inline-block;
   vertical-align: middle;
-  padding-left: 5px;
+  padding-inline-start: 5px;
 }
 
 /*
@@ -279,16 +269,16 @@ select:focus {
 .form-inline .radio,
 .form-inline .checkbox,
 .form-inline .radio {
-  padding-left: 0;
+  padding-inline-start: 0;
   margin-bottom: 0;
   vertical-align: middle;
 }
 
 .form-inline .radio input[type="radio"],
 .form-inline .checkbox input[type="checkbox"] {
-  float: left;
-  margin-left: 0;
-  margin-right: 3px;
+  float: inline-start;
+  margin-inline-start: 0;
+  margin-inline-end: 3px;
 }
 
 /*
@@ -303,8 +293,7 @@ select:focus {
 }
 
 .form-search .search-query {
-  padding-left: 14px;
-  padding-right: 14px;
+  padding-inline: 14px;
   margin-bottom: 0;
   border-radius: 14px;
 }
@@ -316,23 +305,23 @@ select:focus {
 .form-search .radio,
 .form-search .checkbox,
 .form-inline .radio {
-  padding-left: 0;
+  padding-inline-start: 0;
   margin-bottom: 0;
   vertical-align: middle;
 }
 
 .form-search .radio input[type="radio"],
 .form-search .checkbox input[type="checkbox"] {
-  float: left;
-  margin-left: 0;
-  margin-right: 3px;
+  float: inline-start;
+  margin-inline-start: 0;
+  margin-inline-end: 3px;
 }
 
 /*
      .form--loading
      ========================================================================== */
 
-.form--loading:before {
+.form--loading::before {
   content: "";
 }
 
@@ -340,10 +329,10 @@ select:focus {
   display: block;
 }
 
-.form:before {
+.form::before {
   position: absolute;
   top: 0;
-  left: 0;
+  inset-inline-start: 0;
   width: 100%;
   height: 100%;
   background-color: rgba(255, 255, 255, 0.7);
@@ -354,40 +343,6 @@ select:focus {
   display: none;
   position: absolute;
   top: 50%;
-  left: 50%;
+  inset-inline-start: 50%;
   z-index: 11;
 }
-
-/*
-     Google search form
-     ========================================================================== */
-
-#goog-fixurl {
-  ul {
-    list-style: none;
-    margin-left: 0;
-    padding-left: 0;
-    li {
-      list-style-type: none;
-    }
-  }
-}
-
-#goog-wm-qt {
-  width: auto;
-  margin-right: 10px;
-  margin-bottom: 20px;
-  padding: 8px 20px;
-  display: inline-block;
-  font-size: $type-size-6;
-  background-color: #fff;
-  color: #000;
-  border-width: 2px !important;
-  border-style: solid !important;
-  border-color: $border-color;
-  border-radius: $border-radius;
-}
-
-#goog-wm-sb {
-  @extend .btn;
-}
diff --git a/_sass/minimal-mistakes/_masthead.scss b/_sass/minimal-mistakes/_masthead.scss
index 2dfefccef656..80b0ed57ab40 100644
--- a/_sass/minimal-mistakes/_masthead.scss
+++ b/_sass/minimal-mistakes/_masthead.scss
@@ -13,8 +13,7 @@
 
   &__inner-wrap {
     @include clearfix;
-    margin-left: auto;
-    margin-right: auto;
+    margin-inline: auto;
     padding: 1em;
     max-width: 100%;
     display: -webkit-box;
@@ -59,17 +58,16 @@
 }
 
 .masthead__menu {
-  float: left;
-  margin-left: 0;
-  margin-right: 0;
+  float: inline-start;
+  margin-inline: 0;
   width: 100%;
   clear: both;
 
   .site-nav {
-    margin-left: 0;
+    margin-inline-start: 0;
 
     @include breakpoint($small) {
-      float: right;
+      float: inline-end;
     }
   }
 
@@ -87,7 +85,7 @@
   white-space: nowrap;
 
   &--lg {
-    padding-right: 2em;
+    padding-inline-end: 2em;
     font-weight: 700;
   }
 }
diff --git a/_sass/minimal-mistakes/_navigation.scss b/_sass/minimal-mistakes/_navigation.scss
index ef73777c006b..3ba1b66deaa0 100644
--- a/_sass/minimal-mistakes/_navigation.scss
+++ b/_sass/minimal-mistakes/_navigation.scss
@@ -10,8 +10,7 @@
   @include clearfix;
   margin: 0 auto;
   max-width: 100%;
-  padding-left: 1em;
-  padding-right: 1em;
+  padding-inline: 1em;
   font-family: $sans-serif;
   -webkit-animation: $intro-transition;
   animation: $intro-transition;
@@ -28,7 +27,7 @@
     font-size: $type-size-6;
 
     @include breakpoint($large) {
-      float: right;
+      float: inline-end;
       width: calc(100% - #{$right-sidebar-width-narrow});
     }
 
@@ -52,7 +51,7 @@
 
 .pagination {
   @include clearfix();
-  float: left;
+  float: inline-start;
   margin-top: 1em;
   padding-top: 1em;
   width: 100%;
@@ -66,8 +65,8 @@
 
   li {
     display: block;
-    float: left;
-    margin-left: -1px;
+    float: inline-start;
+    margin-inline-start: -1px;
 
     a {
       display: block;
@@ -101,18 +100,18 @@
     }
 
     &:first-child {
-      margin-left: 0;
+      margin-inline-start: 0;
 
       a {
-        border-top-left-radius: $border-radius;
-        border-bottom-left-radius: $border-radius;
+        border-start-start-radius: $border-radius;
+        border-end-start-radius: $border-radius;
       }
     }
 
     &:last-child {
       a {
-        border-top-right-radius: $border-radius;
-        border-bottom-right-radius: $border-radius;
+        border-start-end-radius: $border-radius;
+        border-end-end-radius: $border-radius;
       }
     }
   }
@@ -121,7 +120,7 @@
   &--pager {
     display: block;
     padding: 1em 2em;
-    float: left;
+    float: inline-start;
     width: 50%;
     font-family: $sans-serif;
     font-size: $type-size-5;
@@ -137,14 +136,14 @@
     }
 
     &:first-child {
-      border-top-right-radius: 0;
-      border-bottom-right-radius: 0;
+      border-start-end-radius: 0;
+      border-end-end-radius: 0;
     }
 
     &:last-child {
-      margin-left: -1px;
-      border-top-left-radius: 0;
-      border-bottom-left-radius: 0;
+      margin-inline-start: -1px;
+      border-start-start-radius: 0;
+      border-end-start-radius: 0;
     }
 
     &.disabled {
@@ -184,21 +183,28 @@
     margin: 0 1rem;
     color: $masthead-link-color;
     text-decoration: none;
+    -webkit-transition: none;
+    transition: none;
 
     &:hover {
       color: $masthead-link-color-hover;
     }
 
     &.site-logo {
-      margin-left: 0;
-      margin-right: 0.5rem;
+      margin-inline-start: 0;
+      margin-inline-end: 0.5rem;
     }
 
     &.site-title {
-      margin-left: 0;
+      margin-inline-start: 0;
     }
   }
 
+  img {
+    -webkit-transition: none;
+    transition: none;
+  }
+
   &__toggle {
     -ms-flex-item-align: center;
     align-self: center;
@@ -233,7 +239,7 @@
       &:before {
         content: "";
         position: absolute;
-        left: 0;
+        inset-inline-start: 0;
         bottom: 0;
         height: 4px;
         background: $primary-color;
@@ -255,7 +261,7 @@
   .hidden-links {
     position: absolute;
     top: 100%;
-    right: 0;
+    inset-inline-end: 0;
     margin-top: 15px;
     padding: 5px;
     border: 1px solid $border-color;
@@ -280,11 +286,11 @@
       }
     }
 
-    &:before {
+    &::before {
       content: "";
       position: absolute;
       top: -11px;
-      right: 10px;
+      inset-inline-end: 10px;
       width: 0;
       border-style: solid;
       border-width: 0 10px 10px;
@@ -293,11 +299,11 @@
       z-index: 0;
     }
 
-    &:after {
+    &::after {
       content: "";
       position: absolute;
       top: -10px;
-      right: 10px;
+      inset-inline-end: 10px;
       width: 0;
       border-style: solid;
       border-width: 0 10px 10px;
@@ -354,11 +360,11 @@
       transition: 0.2s ease-out;
       cursor: pointer;
 
-      &:before,
-      &:after {
+      &::before,
+      &::after {
         content: "";
         position: absolute;
-        right: 1em;
+        inset-inline-end: 1em;
         top: 1.25em;
         width: 0.75em;
         height: 0.125em;
@@ -439,9 +445,8 @@
   }
 
   .active {
-    margin-left: -0.5em;
-    padding-left: 0.5em;
-    padding-right: 0.5em;
+    margin-inline-start: -0.5em;
+    padding-inline: 0.5em;
     font-weight: bold;
   }
 
@@ -509,8 +514,8 @@
     color: #fff;
     font-size: $type-size-6;
     background: $primary-color;
-    border-top-left-radius: $border-radius;
-    border-top-right-radius: $border-radius;
+    border-start-start-radius: $border-radius;
+    border-start-end-radius: $border-radius;
   }
 
   // Scrollspy marks toc items as .active when they are in focus
@@ -544,23 +549,23 @@
   }
 
   li ul > li a {
-    padding-left: 1.25rem;
+    padding-inline-start: 1.25rem;
     font-weight: normal;
   }
 
   li ul li ul > li a {
-    padding-left: 1.75rem;
+    padding-inline-start: 1.75rem;
   }
 
   li ul li ul li ul > li a {
-    padding-left: 2.25rem;
+    padding-inline-start: 2.25rem;
   }
 
   li ul li ul li ul li ul > li a {
-    padding-left: 2.75rem;
+    padding-inline-start: 2.75rem;
   }
 
   li ul li ul li ul li ul li ul > li a {
-    padding-left: 3.25rem
+    padding-inline-start: 3.25rem;
   }
 }
diff --git a/_sass/minimal-mistakes/_notices.scss b/_sass/minimal-mistakes/_notices.scss
index 5c087ed5b5d2..6b4e40128803 100644
--- a/_sass/minimal-mistakes/_notices.scss
+++ b/_sass/minimal-mistakes/_notices.scss
@@ -13,11 +13,11 @@
 @mixin notice($notice-color) {
   margin: 2em 0 !important;  /* override*/
   padding: 1em;
-  color: $dark-gray;
+  color: $text-color;
   font-family: $global-font-family;
   font-size: $type-size-6 !important;
   text-indent: initial; /* override*/
-  background-color: mix(#fff, $notice-color, 90%);
+  background-color: mix($background-color, $notice-color, $notice-background-mix);
   border-radius: $border-radius;
   box-shadow: 0 1px 1px rgba($notice-color, 0.25);
 
@@ -46,15 +46,19 @@
   }
 
   a {
-    color: $notice-color;
+    color: mix(#000, $notice-color, 10%);
 
     &:hover {
-      color: mix(#000, $notice-color, 40%);
+      color: mix(#000, $notice-color, 50%);
     }
   }
 
+  @at-root #{selector-unify(&, "blockquote")} {
+    border-inline-start-color: mix(#000, $notice-color, 10%);
+  }
+
   code {
-    background-color: mix(#fff, $notice-color, 95%)
+    background-color: mix($background-color, $notice-color, $code-notice-background-mix)
   }
 
 	pre code {
diff --git a/_sass/minimal-mistakes/_page.scss b/_sass/minimal-mistakes/_page.scss
index c4bf8ae76b73..e33888400eed 100644
--- a/_sass/minimal-mistakes/_page.scss
+++ b/_sass/minimal-mistakes/_page.scss
@@ -4,10 +4,8 @@
 
 #main {
   @include clearfix;
-  margin-left: auto;
-  margin-right: auto;
-  padding-left: 1em;
-  padding-right: 1em;
+  margin-inline: auto;
+  padding-inline: 1em;
   -webkit-animation: $intro-transition;
   animation: $intro-transition;
   max-width: 100%;
@@ -37,21 +35,20 @@ body {
 
 .page {
   @include breakpoint($large) {
-    float: right;
+    float: inline-end;
     width: calc(100% - #{$right-sidebar-width-narrow});
-    padding-right: $right-sidebar-width-narrow;
+    padding-inline-end: $right-sidebar-width-narrow;
   }
 
   @include breakpoint($x-large) {
     width: calc(100% - #{$right-sidebar-width});
-    padding-right: $right-sidebar-width;
+    padding-inline-end: $right-sidebar-width;
   }
 
   .page__inner-wrap {
-    float: left;
+    float: inline-start;
     margin-top: 1em;
-    margin-left: 0;
-    margin-right: 0;
+    margin-inline: 0;
     width: 100%;
     clear: both;
 
@@ -59,9 +56,8 @@ body {
     .page__meta,
     .page__share {
       position: relative;
-      float: left;
-      margin-left: 0;
-      margin-right: 0;
+      float: inline-start;
+      margin-inline: 0;
       width: 100%;
       clear: both;
     }
@@ -72,6 +68,11 @@ body {
   margin-top: 0;
   line-height: 1;
 
+  a {
+    color: $text-color;
+    text-decoration: none;
+  }
+
   & + .page__meta {
     margin-top: -0.5em;
   }
@@ -91,7 +92,7 @@ body {
 	h1, h2, h3, h4, h5, h6 {
 		.header-link {
 			position: relative;
-			left: 0.5em;
+			inset-inline-start: 0.5em;
 			opacity: 0;
 			font-size: 0.8em;
 			-webkit-transition: opacity 0.2s ease-in-out 0.1s;
@@ -134,6 +135,20 @@ body {
     }
   }
 
+  :not(pre) > code {
+    padding-top: 0.1rem;
+    padding-bottom: 0.1rem;
+    font-size: 0.8em;
+    background: $code-background-color;
+    border-radius: $border-radius;
+
+    &::before,
+    &::after {
+      letter-spacing: -0.2em;
+      content: "\00a0"; /* non-breaking space*/
+    }
+  }
+
   dt {
     margin-top: 1em;
     font-family: $sans-serif;
@@ -141,7 +156,7 @@ body {
   }
 
   dd {
-    margin-left: 1em;
+    margin-inline-start: 1em;
     font-family: $sans-serif;
     font-size: $type-size-6;
   }
@@ -153,7 +168,7 @@ body {
   /* blockquote citations */
   blockquote + .small {
     margin-top: -1.5em;
-    padding-left: 1.25rem;
+    padding-inline-start: 1.25rem;
   }
 }
 
@@ -184,8 +199,7 @@ body {
     }
 
     .wrapper {
-      padding-left: 1em;
-      padding-right: 1em;
+      padding-inline: 1em;
 
       @include breakpoint($x-large) {
         max-width: $x-large;
@@ -223,14 +237,14 @@ body {
 .page__hero-caption {
   position: absolute;
   bottom: 0;
-  right: 0;
+  inset-inline-end: 0;
   margin: 0 auto;
   padding: 2px 5px;
   color: #fff;
   font-family: $caption-font-family;
   font-size: $type-size-7;
   background: #000;
-  text-align: right;
+  text-align: end;
   z-index: 5;
   opacity: 0.5;
   border-radius: $border-radius 0 0 0;
@@ -299,10 +313,9 @@ body {
   text-transform: uppercase;
 }
 
-.post__meta-sep::before {
+.page__meta-sep::before {
   content: "\2022";
-  padding-left: 0.5em;
-  padding-right: 0.5em;
+  padding-inline: 0.5em;
 }
 
 /*
@@ -315,13 +328,13 @@ body {
   }
 
   strong {
-    margin-right: 10px;
+    margin-inline-end: 10px;
   }
 }
 
 .page__taxonomy-item {
   display: inline-block;
-  margin-right: 5px;
+  margin-inline-end: 5px;
   margin-bottom: 8px;
   padding: 5px 10px;
   text-decoration: none;
@@ -398,7 +411,7 @@ body {
   color: $muted-text-color;
   font-size: 0.6em;
   text-transform: uppercase;
-  text-align: right;
+  text-align: end;
   text-decoration: none;
 }
 
@@ -407,9 +420,8 @@ body {
    ========================================================================== */
 
 .page__comments {
-  float: left;
-  margin-left: 0;
-  margin-right: 0;
+  float: inline-start;
+  margin-inline: 0;
   width: 100%;
   clear: both;
 }
@@ -451,7 +463,7 @@ body {
 }
 
 .comment__avatar-wrapper {
-  float: left;
+  float: inline-start;
   width: 60px;
   height: 60px;
 
@@ -475,7 +487,7 @@ body {
 }
 
 .comment__content-wrapper {
-  float: right;
+  float: inline-end;
   width: calc(100% - 60px);
 
   @include breakpoint($large) {
@@ -506,13 +518,13 @@ body {
 
 .page__related {
   @include clearfix();
-  float: left;
+  float: inline-start;
   margin-top: 2em;
   padding-top: 1em;
   border-top: 1px solid $border-color;
 
   @include breakpoint($large) {
-    float: right;
+    float: inline-end;
     width: calc(100% - #{$right-sidebar-width-narrow});
   }
 
@@ -537,23 +549,13 @@ body {
    ========================================================================== */
 
 .wide {
-  .page {
-    @include breakpoint($large) {
-      padding-right: 0;
-    }
-
-    @include breakpoint($x-large) {
-      padding-right: 0;
-    }
-  }
-
-  .page__related {
+  .page, .page__related {
     @include breakpoint($large) {
-      padding-right: 0;
+      padding-inline-end: 0;
     }
 
     @include breakpoint($x-large) {
-      padding-right: 0;
+      padding-inline-end: 0;
     }
   }
 }
diff --git a/_sass/minimal-mistakes/_reset.scss b/_sass/minimal-mistakes/_reset.scss
index 2259fd0c2388..13bd9915b5ea 100644
--- a/_sass/minimal-mistakes/_reset.scss
+++ b/_sass/minimal-mistakes/_reset.scss
@@ -8,18 +8,18 @@ html {
   /* apply a natural box layout model to all elements */
   box-sizing: border-box;
   background-color: $background-color;
-  font-size: 16px;
+  font-size: $doc-font-size;
 
   @include breakpoint($medium) {
-    font-size: 18px;
+    font-size: $doc-font-size-medium;
   }
 
   @include breakpoint($large) {
-    font-size: 20px;
+    font-size: $doc-font-size-large;
   }
 
   @include breakpoint($x-large) {
-    font-size: 22px;
+    font-size: $doc-font-size-x-large;
   }
 
   -webkit-text-size-adjust: 100%;
@@ -64,8 +64,6 @@ audio,
 canvas,
 video {
   display: inline-block;
-  *display: inline;
-  *zoom: 1;
 }
 
 /* Prevents modern browsers from displaying 'audio' without controls */
@@ -142,7 +140,6 @@ textarea {
 
 button,
 input {
-  *overflow: visible; /* inner spacing ie IE6/7*/
   line-height: normal; /* FF3/4 have !important on line-height in UA stylesheet*/
 }
 
@@ -184,4 +181,4 @@ input[type="search"]::-webkit-search-cancel-button {
 textarea {
   overflow: auto; /* remove vertical scrollbar in IE6-9*/
   vertical-align: top; /* readability and alignment cross-browser*/
-}
\ No newline at end of file
+}
diff --git a/_sass/minimal-mistakes/_search.scss b/_sass/minimal-mistakes/_search.scss
index fa7ee832bf17..4a3a2b37e997 100644
--- a/_sass/minimal-mistakes/_search.scss
+++ b/_sass/minimal-mistakes/_search.scss
@@ -9,8 +9,7 @@
 }
 
 .search__toggle {
-  margin-left: 1rem;
-  margin-right: 1rem;
+  margin-inline: 1rem;
   height: $nav-toggle-height;
   border: 0;
   outline: none;
@@ -38,10 +37,8 @@
 
   &__inner-wrap {
     width: 100%;
-    margin-left: auto;
-    margin-right: auto;
-    padding-left: 1em;
-    padding-right: 1em;
+    margin-inline: auto;
+    padding-inline: 1em;
     -webkit-animation: $intro-transition;
     animation: $intro-transition;
     -webkit-animation-delay: 0.15s;
diff --git a/_sass/minimal-mistakes/_sidebar.scss b/_sass/minimal-mistakes/_sidebar.scss
index cff28c8c4f1b..e51443527a62 100644
--- a/_sass/minimal-mistakes/_sidebar.scss
+++ b/_sass/minimal-mistakes/_sidebar.scss
@@ -17,7 +17,7 @@
   // }
 
   @include breakpoint($large) {
-    float: left;
+    float: inline-start;
     width: calc(#{$right-sidebar-width-narrow} - 1em);
     opacity: 0.75;
     -webkit-transition: opacity 0.2s ease-in-out;
@@ -77,10 +77,10 @@
   @include breakpoint($large) {
     position: absolute;
     top: 0;
-    right: 0;
+    inset-inline-end: 0;
     width: $right-sidebar-width-narrow;
-    margin-right: -1 * $right-sidebar-width-narrow;
-    padding-left: 1em;
+    margin-inline-end: -1 * $right-sidebar-width-narrow;
+    padding-inline-start: 1em;
     z-index: 10;
 
     &.sticky {
@@ -88,25 +88,32 @@
       position: -webkit-sticky;
       position: sticky;
       top: 2em;
-      float: right;
+      float: inline-end;
+
+      .toc {
+        .toc__menu {
+          overflow-y: auto;
+          max-height: calc(100vh - 7em);
+        }
+      }
     }
   }
 
   @include breakpoint($x-large) {
     width: $right-sidebar-width;
-    margin-right: -1 * $right-sidebar-width;
+    margin-inline-end: -1 * $right-sidebar-width;
   }
 }
 
 .splash .sidebar__right {
   @include breakpoint($large) {
     position: relative;
-    float: right;
-    margin-right: 0;
+    float: inline-end;
+    margin-inline-end: 0;
   }
 
   @include breakpoint($x-large) {
-    margin-right: 0;
+    margin-inline-end: 0;
   }
 }
 
@@ -140,15 +147,13 @@
 .author__content {
   display: table-cell;
   vertical-align: top;
-  padding-left: 15px;
-  padding-right: 25px;
+  padding-inline: 15px 25px;
   line-height: 1;
 
   @include breakpoint($large) {
     display: block;
     width: 100%;
-    padding-left: 0;
-    padding-right: 0;
+    padding-inline: 0;
   }
 
   a {
@@ -185,7 +190,6 @@
   vertical-align: middle;
   font-family: $sans-serif;
   z-index: 20;
-  position: relative;
   cursor: pointer;
 
   li:last-child {
@@ -196,7 +200,7 @@
 
   .author__urls {
     span.label {
-      padding-left: 5px;
+      padding-inline-start: 5px;
     }
   }
 
@@ -213,7 +217,7 @@
         content: '';
         position: fixed;
         top: 0;
-        left: 0;
+        inset-inline-start: 0;
         width: 100%;
         height: 100%;
         pointer-events: none;
@@ -235,7 +239,7 @@
 .author__urls {
   display: none;
   position: absolute;
-  right: 0;
+  inset-inline-end: 0;
   margin-top: 15px;
   padding: 10px;
   list-style-type: none;
@@ -259,12 +263,12 @@
     box-shadow: none;
   }
 
-  &:before {
+  &::before {
     display: block;
     content: "";
     position: absolute;
     top: -11px;
-    left: calc(50% - 10px);
+    inset-inline-start: calc(50% - 10px);
     width: 0;
     border-style: solid;
     border-width: 0 10px 10px;
@@ -281,7 +285,7 @@
     content: "";
     position: absolute;
     top: -10px;
-    left: calc(50% - 10px);
+    inset-inline-start: calc(50% - 10px);
     width: 0;
     border-style: solid;
     border-width: 0 10px 10px;
@@ -305,9 +309,8 @@
   a {
     display: block;
     margin-bottom: 5px;
-    padding-right: 5px;
-    padding-top: 2px;
-    padding-bottom: 2px;
+    padding-block: 2px;
+    padding-inline-end: 5px;
     color: inherit;
     font-size: $type-size-5;
     text-decoration: none;
@@ -328,10 +331,10 @@
   @include breakpoint($large) {
     position: initial;
     top: initial;
-    right: initial;
+    inset-inline-end: initial;
     width: initial;
-    margin-right: initial;
-    padding-left: initial;
+    margin-inline-end: initial;
+    padding-inline-start: initial;
     z-index: initial;
 
     &.sticky {
@@ -341,7 +344,6 @@
 
   @include breakpoint($x-large) {
     width: initial;
-    margin-right: initial;
+    margin-inline-end: initial;
   }
 }
-
diff --git a/_sass/minimal-mistakes/_syntax.scss b/_sass/minimal-mistakes/_syntax.scss
index 726520202bcd..6d9102d6f663 100644
--- a/_sass/minimal-mistakes/_syntax.scss
+++ b/_sass/minimal-mistakes/_syntax.scss
@@ -13,6 +13,11 @@ figure.highlight {
   line-height: 1.8;
   border-radius: $border-radius;
 
+  [dir=rtl] & {
+    direction: ltr;
+    text-align: start;
+  }
+
   > pre,
   pre.highlight {
     margin: 0;
@@ -33,17 +38,17 @@ figure.highlight {
     /* line numbers*/
     &.gutter,
     &.rouge-gutter {
-      padding-right: 1em;
+      padding-inline-end: 1em;
       width: 1em;
       color: $base04;
-      border-right: 1px solid $base04;
-      text-align: right;
+      border-inline-end: 1px solid $base04;
+      text-align: end;
     }
 
     /* code */
     &.code,
     &.rouge-code {
-      padding-left: 1em;
+      padding-inline-start: 1em;
     }
   }
 
@@ -321,4 +326,4 @@ figure.highlight {
   th, td {
     border-bottom: 0;
   }
-}
\ No newline at end of file
+}
diff --git a/_sass/minimal-mistakes/_tables.scss b/_sass/minimal-mistakes/_tables.scss
index c270a775bfa4..e2704ee81edc 100644
--- a/_sass/minimal-mistakes/_tables.scss
+++ b/_sass/minimal-mistakes/_tables.scss
@@ -24,7 +24,7 @@ thead {
 th {
   padding: 0.5em;
   font-weight: bold;
-  text-align: left;
+  text-align: start;
 }
 
 td {
@@ -36,4 +36,4 @@ tr,
 td,
 th {
   vertical-align: middle;
-}
\ No newline at end of file
+}
diff --git a/_sass/minimal-mistakes/_utilities.scss b/_sass/minimal-mistakes/_utilities.scss
index 1c127d3664f5..cd6e94b7fd1d 100644
--- a/_sass/minimal-mistakes/_utilities.scss
+++ b/_sass/minimal-mistakes/_utilities.scss
@@ -83,20 +83,11 @@ body:hover .visually-hidden button {
    Type
    ========================================================================== */
 
-.text-left {
-  text-align: left;
-}
-
-.text-center {
-  text-align: center;
-}
-
-.text-right {
-  text-align: right;
-}
-
-.text-justify {
-  text-align: justify;
+$text-alignments: left, right, start, end, center, justify;
+@each $alignment in $text-alignments {
+  .text-#{$alignment} {
+    text-align: $alignment;
+  }
 }
 
 .text-nowrap {
@@ -108,20 +99,20 @@ body:hover .visually-hidden button {
    ========================================================================== */
 
 .task-list {
-  padding:0;
+  padding: 0;
 
   li {
     list-style-type: none;
   }
 
   .task-list-item-checkbox {
-    margin-right: 0.5em;
+    margin-inline-end: 0.5em;
     opacity: 1;
   }
 }
 
 .task-list .task-list {
-  margin-left: 1em;
+  margin-inline-start: 1em;
 }
 
 /*
@@ -135,8 +126,7 @@ body:hover .visually-hidden button {
 }
 
 .wrapper {
-  margin-left: auto;
-  margin-right: auto;
+  margin-inline: auto;
   width: 100%;
 }
 
@@ -148,8 +138,7 @@ body:hover .visually-hidden button {
 
 .align-left {
   display: block;
-  margin-left: auto;
-  margin-right: auto;
+  margin-inline: auto;
 
   @include breakpoint($small) {
     float: left;
@@ -161,8 +150,7 @@ body:hover .visually-hidden button {
 
 .align-right {
   display: block;
-  margin-left: auto;
-  margin-right: auto;
+  margin-inline: auto;
 
   @include breakpoint($small) {
     float: right;
@@ -174,15 +162,14 @@ body:hover .visually-hidden button {
 
 .align-center {
   display: block;
-  margin-left: auto;
-  margin-right: auto;
+  margin-inline: auto;
 }
 
 /* file page content container */
 
 .full {
   @include breakpoint($large) {
-    margin-right: -1 * span(2.5 of 12) !important;
+    margin-inline-end: -1 * span(2.5 of 12) !important;
   }
 }
 
@@ -211,118 +198,35 @@ body:hover .visually-hidden button {
     color: $text-color;
   }
 
-  .fa-behance,
-  .fa-behance-square {
-    color: $behance-color;
-  }
-
-  .fa-bitbucket {
-    color: $bitbucket-color;
-  }
-
-  .fa-dribbble,
-  .fa-dribble-square {
-    color: $dribbble-color;
-  }
-
-  .fa-facebook,
-  .fa-facebook-square,
-  .fa-facebook-f {
-    color: $facebook-color;
-  }
-
-  .fa-flickr {
-    color: $flickr-color;
-  }
-
-  .fa-foursquare {
-    color: $foursquare-color;
-  }
-
-  .fa-github,
-  .fa-github-alt,
-  .fa-github-square {
-    color: $github-color;
-  }
-
-  .fa-gitlab {
-    color: $gitlab-color;
-  }
-
-  .fa-instagram {
-    color: $instagram-color;
-  }
-
-  .fa-keybase {
-    color: $keybase-color;
-  }
-
-  .fa-lastfm,
-  .fa-lastfm-square {
-    color: $lastfm-color;
-  }
-
-  .fa-linkedin,
-  .fa-linkedin-in {
-    color: $linkedin-color;
-  }
-
-  .fa-mastodon,
-  .fa-mastodon-square {
-    color: $mastodon-color;
-  }
-
-  .fa-pinterest,
-  .fa-pinterest-p,
-  .fa-pinterest-square {
-    color: $pinterest-color;
-  }
-
-  .fa-reddit {
-    color: $reddit-color;
-  }
-
-  .fa-rss,
-  .fa-rss-square {
-    color: $rss-color;
-  }
-
-  .fa-soundcloud {
-    color: $soundcloud-color;
-  }
-
-  .fa-stack-exchange,
-  .fa-stack-overflow {
-    color: $stackoverflow-color;
-  }
-
-  .fa-tumblr,
-  .fa-tumblr-square {
-    color: $tumblr-color;
-  }
-
-  .fa-twitter,
-  .fa-twitter-square {
-    color: $twitter-color;
-  }
-
-  .fa-vimeo,
-  .fa-vimeo-square,
-  .fa-vimeo-v {
-    color: $vimeo-color;
-  }
-
-  .fa-vine {
-    color: $vine-color;
-  }
-
-  .fa-youtube {
-    color: $youtube-color;
-  }
-
-  .fa-xing,
-  .fa-xing-square {
-    color: $xing-color;
+  @each $color, $icons in (
+    $behance-color: ".fa-behance, .fa-behance-square",
+    $bitbucket-color: ".fa-bitbucket",
+    $dribbble-color: ".fa-dribbble, .fa-dribbble-square",
+    $facebook-color: ".fa-facebook, .fa-facebook-square, .fa-facebook-f",
+    $flickr-color: ".fa-flickr",
+    $foursquare-color: ".fa-foursquare",
+    $github-color: ".fa-github, .fa-github-alt, .fa-github-square",
+    $gitlab-color: ".fa-gitlab",
+    $instagram-color: ".fa-instagram",
+    $keybase-color: ".fa-keybase",
+    $lastfm-color: ".fa-lastfm, .fa-lastfm-square",
+    $linkedin-color: ".fa-linkedin, .fa-linkedin-in",
+    $mastodon-color: ".fa-mastodon, .fa-mastodon-square",
+    $pinterest-color: ".fa-pinterest, .fa-pinterest-p, .fa-pinterest-square",
+    $reddit-color: ".fa-reddit",
+    $rss-color: ".fa-rss, .fa-rss-square",
+    $soundcloud-color: ".fa-soundcloud",
+    $stackoverflow-color: ".fa-stack-exchange, .fa-stack-overflow",
+    $tumblr-color: ".fa-tumblr, .fa-tumblr-square",
+    $twitter-color: ".fa-twitter, .fa-twitter-square",
+    $vimeo-color: ".fa-vimeo, .fa-vimeo-square, .fa-vimeo-v",
+    $vine-color: ".fa-vine",
+    $xing-color: ".fa-xing, .fa-xing-square",
+    $youtube-color: ".fa-youtube",
+  ) {
+    #{$icons} {
+      color: $color;
+    }
   }
 }
 
@@ -339,11 +243,11 @@ body:hover .visually-hidden button {
   -webkit-transition: 0.3s;
   transition: 0.3s;
 
-  &:before,
-  &:after {
+  &::before,
+  &::after {
     content: "";
     position: absolute;
-    left: 0;
+    inset-inline-start: 0;
     width: $navicon-width;
     height: $navicon-height;
     background: $primary-color;
@@ -391,7 +295,7 @@ body:hover .visually-hidden button {
       content: '';
       position: fixed;
       top: 0;
-      left: 0;
+      inset-inline-start: 0;
       width: 100%;
       height: 100%;
       opacity: 0;
@@ -465,11 +369,11 @@ body:hover .visually-hidden button {
   overflow: hidden;
   position: relative;
 
-  &:before {
+  &::before {
     position: absolute;
     content: "";
     top: 0;
-    left: 0;
+    inset-inline-start: 0;
     width: 100%;
     height: 100%;
     z-index: 999;
@@ -486,8 +390,8 @@ body:hover .visually-hidden button {
   position: fixed;
   width: 300px;
   top: 50%;
-  left: 50%;
-  margin-left: -150px;
+  inset-inline-start: 50%;
+  margin-inline-start: -150px;
   margin-top: -150px;
   min-height: 0;
   z-index: 9999;
@@ -578,7 +482,7 @@ a.reversefootnote {
   embed {
     position: absolute;
     top: 0;
-    left: 0;
+    inset-inline-start: 0;
     width: 100%;
     height: 100%;
   }
@@ -591,3 +495,74 @@ a.reversefootnote {
     position: static;
   }
 }
+
+/*
+   Copy <pre> block to clipboard
+   ========================================================================== */
+
+// a <textarea> to hold text for document.execCommand("copy")
+.clipboard-helper {
+  // Prevent zooming on iOS
+  font-size: 12pt !important;
+  border: 0 !important;
+  padding: 0 !important;
+  margin: 0 !important;
+  outline: none !important;
+  position: absolute;
+}
+
+pre {
+  &.highlight .clipboard-copy-button {
+    color: #ffffca;
+  }
+
+  .clipboard-copy-button {
+    display: block;
+    position: absolute;
+    top: 0.6em;
+    inset-inline-end: 0.5em;
+    width: 1.8em;
+    height: 1.5em;
+    z-index: 1;
+    background: none;
+    border: none;
+    outline: none;
+    border-radius: 0.1em;
+    padding: 0.2em 0.5em;
+    opacity: 0.4;
+    transition: color 0.25s linear -0.25s, opacity 0.25s linear;
+
+    &::before {
+      content: '';
+      position: absolute;
+      inset: 0;
+      z-index: 2;
+    }
+
+    i {
+      position: absolute;
+      top: 0.25em;
+      inset-inline-end: 0.25em;
+      &.copied {
+        opacity: 0;
+      }
+    }
+
+    &.copied i {
+      opacity: 0;
+      &.copied {
+        opacity: 1;
+      }
+    }
+
+    @at-root {
+      .no-copy & {
+        display: none;
+      }
+    }
+  }
+
+  &:hover .clipboard-copy-button {
+    opacity: 1;
+  }
+}
diff --git a/_sass/minimal-mistakes/_variables.scss b/_sass/minimal-mistakes/_variables.scss
index 4065a0ebca4c..2a3258735264 100644
--- a/_sass/minimal-mistakes/_variables.scss
+++ b/_sass/minimal-mistakes/_variables.scss
@@ -6,7 +6,10 @@
    Typography
    ========================================================================== */
 
-$doc-font-size: 16 !default;
+$doc-font-size: 16px !default;
+$doc-font-size-medium: $doc-font-size * 1.125 !default;
+$doc-font-size-large: $doc-font-size * 1.25 !default;
+$doc-font-size-x-large: $doc-font-size * 1.375 !default;
 
 /* paragraph indention */
 $paragraph-indent: false !default; // true, false (default)
@@ -118,6 +121,10 @@ $masthead-link-color: $primary-color !default;
 $masthead-link-color-hover: mix(#000, $primary-color, 25%) !default;
 $navicon-link-color-hover: mix(#fff, $primary-color, 75%) !default;
 
+/* notices */
+$notice-background-mix: 80% !default;
+$code-notice-background-mix: 90% !default;
+
 /* syntax highlighting (base16) */
 $base00: #263238 !default;
 $base01: #2e3c43 !default;
diff --git a/_sass/minimal-mistakes/skins/_aqua.scss b/_sass/minimal-mistakes/skins/_aqua.scss
index f5a69af5c690..7c3944e07173 100644
--- a/_sass/minimal-mistakes/skins/_aqua.scss
+++ b/_sass/minimal-mistakes/skins/_aqua.scss
@@ -27,4 +27,8 @@ $link-color                 : $info-color !default;
 $link-color-hover           : mix(#000, $link-color, 25%) !default;
 $link-color-visited         : mix(#fff, $link-color, 25%) !default;
 $masthead-link-color        : $primary-color !default;
-$masthead-link-color-hover  : mix(#000, $primary-color, 25%) !default;
\ No newline at end of file
+$masthead-link-color-hover  : mix(#000, $primary-color, 25%) !default;
+
+/* notices */
+$notice-background-mix: 90% !default;
+$code-notice-background-mix: 95% !default;
diff --git a/_sass/minimal-mistakes/skins/_contrast.scss b/_sass/minimal-mistakes/skins/_contrast.scss
index 4635e533cb65..a8237878c181 100644
--- a/_sass/minimal-mistakes/skins/_contrast.scss
+++ b/_sass/minimal-mistakes/skins/_contrast.scss
@@ -5,7 +5,7 @@
 /* Colors */
 $text-color: #000 !default;
 $muted-text-color: $text-color !default;
-$primary-color: #ff0000 !default;
+$primary-color: #b60000 !default;
 $border-color: mix(#fff, $text-color, 75%) !default;
 $footer-background-color: #000 !default;
 $link-color: #0000ff !default;
@@ -46,6 +46,7 @@ $base0f: #b18a3d !default;
   color: #fff !important; // override
 }
 
-.page__footer-follow .social-icons .svg-inline--fa {
+.page__footer-follow .social-icons i,
+.page__footer-follow .social-icons .svg-inline--fa  {
   color: inherit;
 }
diff --git a/_sass/minimal-mistakes/skins/_dark.scss b/_sass/minimal-mistakes/skins/_dark.scss
index 44f1bda06fdd..38053493779f 100644
--- a/_sass/minimal-mistakes/skins/_dark.scss
+++ b/_sass/minimal-mistakes/skins/_dark.scss
@@ -18,11 +18,13 @@ $masthead-link-color: $text-color !default;
 $masthead-link-color-hover: mix(#000, $text-color, 20%) !default;
 $navicon-link-color-hover: mix(#000, $background-color, 30%) !default;
 
+.author__urls.social-icons i,
 .author__urls.social-icons .svg-inline--fa,
-.page__footer-follow .social-icons .svg-inline--fa {
+.page__footer-follow .social-icons i,
+.page__footer-follow .social-icons .svg-inline--fa  {
   color: inherit;
 }
 
 .ais-search-box .ais-search-box--input {
   background-color: $form-background-color;
-}
\ No newline at end of file
+}
diff --git a/_sass/minimal-mistakes/skins/_mint.scss b/_sass/minimal-mistakes/skins/_mint.scss
index 575e977d56be..28557a3a2921 100644
--- a/_sass/minimal-mistakes/skins/_mint.scss
+++ b/_sass/minimal-mistakes/skins/_mint.scss
@@ -18,6 +18,7 @@ $navicon-link-color-hover: mix(#fff, $text-color, 80%) !default;
   color: #fff !important; // override
 }
 
+.page__footer-follow .social-icons i,
 .page__footer-follow .social-icons .svg-inline--fa {
   color: inherit;
 }
diff --git a/_sass/minimal-mistakes/skins/_neon.scss b/_sass/minimal-mistakes/skins/_neon.scss
index 649cbff28233..a4f2ef5d9d8d 100644
--- a/_sass/minimal-mistakes/skins/_neon.scss
+++ b/_sass/minimal-mistakes/skins/_neon.scss
@@ -18,6 +18,10 @@ $masthead-link-color: $text-color !default;
 $masthead-link-color-hover: mix(#000, $text-color, 20%) !default;
 $navicon-link-color-hover: mix(#000, $background-color, 30%) !default;
 
+/* notices */
+$notice-background-mix: 90% !default;
+$code-notice-background-mix: 95% !default;
+
 /* neon syntax highlighting (base16) */
 $base00: #ffffff !default;
 $base01: #e0e0e0 !default;
@@ -36,8 +40,10 @@ $base0d: #3777e6 !default;
 $base0e: #ad00a1 !default;
 $base0f: #cc6633 !default;
 
+.author__urls.social-icons i,
 .author__urls.social-icons .svg-inline--fa,
-.page__footer-follow .social-icons .svg-inline--fa {
+.page__footer-follow .social-icons i,
+.page__footer-follow .social-icons .svg-inline--fa  {
   color: inherit;
 }
 
diff --git a/_sass/minimal-mistakes/skins/_plum.scss b/_sass/minimal-mistakes/skins/_plum.scss
index 67975d502786..defa69cde796 100644
--- a/_sass/minimal-mistakes/skins/_plum.scss
+++ b/_sass/minimal-mistakes/skins/_plum.scss
@@ -18,6 +18,10 @@ $masthead-link-color: $text-color !default;
 $masthead-link-color-hover: mix(#000, $text-color, 20%) !default;
 $navicon-link-color-hover: mix(#000, $background-color, 30%) !default;
 
+/* notices */
+$notice-background-mix: 70% !default;
+$code-notice-background-mix: 80% !default;
+
 /* plum syntax highlighting (base16) */
 $base00: #ffffff !default;
 $base01: #e0e0e0 !default;
@@ -36,8 +40,10 @@ $base0d: #3777e6 !default;
 $base0e: #ad00a1 !default;
 $base0f: #cc6633 !default;
 
+.author__urls.social-icons i,
 .author__urls.social-icons .svg-inline--fa,
-.page__footer-follow .social-icons .svg-inline--fa {
+.page__footer-follow .social-icons i,
+.page__footer-follow .social-icons .svg-inline--fa  {
   color: inherit;
 }
 
diff --git a/_sass/minimal-mistakes/skins/_sunrise.scss b/_sass/minimal-mistakes/skins/_sunrise.scss
index 1f0dca394d02..bc259f6d8d3d 100644
--- a/_sass/minimal-mistakes/skins/_sunrise.scss
+++ b/_sass/minimal-mistakes/skins/_sunrise.scss
@@ -20,6 +20,9 @@ $masthead-link-color: $text-color !default;
 $masthead-link-color-hover: mix(#000, $text-color, 20%) !default;
 $navicon-link-color-hover: mix(#000, $background-color, 30%) !default;
 
+/* notices */
+$notice-background-mix: 75% !default;
+
 /* sunrise syntax highlighting (base16) */
 $base00: #1d1f21 !default;
 $base01: #282a2e !default;
@@ -38,7 +41,9 @@ $base0d: #81a2be !default;
 $base0e: #b294bb !default;
 $base0f: #a3685a !default;
 
-.author__urls.social-icons .fa,
-.page__footer-follow .social-icons .svg-inline--fa {
+.author__urls.social-icons i,
+.author__urls.social-icons .svg-inline--fa,
+.page__footer-follow .social-icons i,
+.page__footer-follow .social-icons .svg-inline--fa  {
   color: inherit;
 }
diff --git a/assets/css/main.scss b/assets/css/main.scss
index 23346e773b1b..1f0ead318516 100644
--- a/assets/css/main.scss
+++ b/assets/css/main.scss
@@ -1,8 +1,9 @@
 ---
 # Only the main Sass file needs front matter (the dashes are enough)
+search: false
 ---
 
 @charset "utf-8";
 
 @import "minimal-mistakes/skins/{{ site.minimal_mistakes_skin | default: 'default' }}"; // skin
-@import "minimal-mistakes"; // main partials
\ No newline at end of file
+@import "minimal-mistakes"; // main partials
diff --git a/assets/js/_main.js b/assets/js/_main.js
index 4b1416693dff..a9159ff1e48f 100644
--- a/assets/js/_main.js
+++ b/assets/js/_main.js
@@ -2,39 +2,18 @@
    jQuery plugin settings and other scripts
    ========================================================================== */
 
-$(document).ready(function() {
+$(document).ready(function () {
   // FitVids init
   $("#main").fitVids();
 
-  // Sticky sidebar
-  var stickySideBar = function() {
-    var show =
-      $(".author__urls-wrapper button").length === 0
-        ? $(window).width() > 1024 // width should match $large Sass variable
-        : !$(".author__urls-wrapper button").is(":visible");
-    if (show) {
-      // fix
-      $(".sidebar").addClass("sticky");
-    } else {
-      // unfix
-      $(".sidebar").removeClass("sticky");
-    }
-  };
-
-  stickySideBar();
-
-  $(window).resize(function() {
-    stickySideBar();
-  });
-
   // Follow menu drop down
-  $(".author__urls-wrapper button").on("click", function() {
+  $(".author__urls-wrapper button").on("click", function () {
     $(".author__urls").toggleClass("is--visible");
-    $(".author__urls-wrapper button").toggleClass("open");
+    $(".author__urls-wrapper").find("button").toggleClass("open");
   });
 
   // Close search screen with Esc key
-  $(document).keyup(function(e) {
+  $(document).keyup(function (e) {
     if (e.keyCode === 27) {
       if ($(".initial-content").hasClass("is--hidden")) {
         $(".search-content").toggleClass("is--visible");
@@ -44,11 +23,11 @@ $(document).ready(function() {
   });
 
   // Search toggle
-  $(".search__toggle").on("click", function() {
+  $(".search__toggle").on("click", function () {
     $(".search-content").toggleClass("is--visible");
     $(".initial-content").toggleClass("is--hidden");
     // set focus on input
-    setTimeout(function() {
+    setTimeout(function () {
       $(".search-content input").focus();
     }, 400);
   });
@@ -58,11 +37,11 @@ $(document).ready(function() {
     offset: 20,
     speed: 400,
     speedAsDuration: true,
-    durationMax: 500
+    durationMax: 500,
   });
 
   // Gumshoe scroll spy init
-  if($("nav.toc").length > 0) {
+  if ($("nav.toc").length > 0) {
     var spy = new Gumshoe("nav.toc a", {
       // Active classes
       navClass: "active", // applied to the nav list item
@@ -77,14 +56,36 @@ $(document).ready(function() {
       reflow: true, // if true, listen for reflows
 
       // Event support
-      events: true // if true, emit custom events
+      events: true, // if true, emit custom events
     });
   }
 
+  // Auto scroll sticky ToC with content
+  const scrollTocToContent = function (event) {
+    var target = event.target;
+    var scrollOptions = { behavior: "auto", block: "nearest", inline: "start" };
+
+    var tocElement = document.querySelector("aside.sidebar__right.sticky");
+    if (!tocElement) return;
+    if (window.getComputedStyle(tocElement).position !== "sticky") return;
+
+    if (target.parentElement.classList.contains("toc__menu") && target == target.parentElement.firstElementChild) {
+      // Scroll to top instead
+      document.querySelector("nav.toc header").scrollIntoView(scrollOptions);
+    } else {
+      target.scrollIntoView(scrollOptions);
+    }
+  };
+
+  // Has issues on Firefox, whitelist Chrome for now
+  if (!!window.chrome) {
+    document.addEventListener("gumshoeActivate", scrollTocToContent);
+  }
+
   // add lightbox class to all image links
   $(
-    "a[href$='.jpg'],a[href$='.jpeg'],a[href$='.JPG'],a[href$='.png'],a[href$='.gif']"
-  ).addClass("image-popup");
+    "a[href$='.jpg'],a[href$='.jpeg'],a[href$='.JPG'],a[href$='.png'],a[href$='.gif'],a[href$='.webp']"
+  ).has("> img").addClass("image-popup");
 
   // Magnific-Popup options
   $(".image-popup").magnificPopup({
@@ -99,38 +100,135 @@ $(document).ready(function() {
     gallery: {
       enabled: true,
       navigateByImgClick: true,
-      preload: [0, 1] // Will preload 0 - before current, and 1 after the current image
+      preload: [0, 1], // Will preload 0 - before current, and 1 after the current image
     },
     image: {
-      tError: '<a href="%url%">Image #%curr%</a> could not be loaded.'
+      tError: '<a href="%url%">Image #%curr%</a> could not be loaded.',
     },
     removalDelay: 500, // Delay in milliseconds before popup is removed
     // Class that is added to body when popup is open.
     // make it unique to apply your CSS animations just to this exact popup
     mainClass: "mfp-zoom-in",
     callbacks: {
-      beforeOpen: function() {
+      beforeOpen: function () {
         // just a hack that adds mfp-anim class to markup
         this.st.image.markup = this.st.image.markup.replace(
           "mfp-figure",
           "mfp-figure mfp-with-anim"
         );
-      }
+      },
     },
     closeOnContentClick: true,
-    midClick: true // allow opening popup on middle mouse click. Always set it to true if you don't provide alternative source.
+    midClick: true, // allow opening popup on middle mouse click. Always set it to true if you don't provide alternative source.
   });
 
   // Add anchors for headings
-  $('.page__content').find('h1, h2, h3, h4, h5, h6').each(function() {
-    var id = $(this).attr('id');
-    if (id) {
-      var anchor = document.createElement("a");
-      anchor.className = 'header-link';
-      anchor.href = '#' + id;
-      anchor.innerHTML = '<span class=\"sr-only\">Permalink</span><i class=\"fa fa-link\"></i>';
-      anchor.title = "Permalink";
-      $(this).append(anchor);
+  (function () {
+    var pageContentElement = document.querySelector(".page__content");
+    if (!pageContentElement) return;
+
+    pageContentElement
+      .querySelectorAll("h1, h2, h3, h4, h5, h6")
+      .forEach(function (element) {
+        var id = element.getAttribute("id");
+        if (id) {
+          var anchor = document.createElement("a");
+          anchor.className = "header-link";
+          anchor.href = "#" + id;
+          anchor.innerHTML =
+            '<span class="sr-only">Permalink</span><i class="fas fa-link"></i>';
+          anchor.title = "Permalink";
+          element.appendChild(anchor);
+        }
+      });
+  })();
+
+  // Add copy button for <pre> blocks
+  var copyText = function (text) {
+    if (document.queryCommandEnabled("copy") && navigator.clipboard) {
+      navigator.clipboard.writeText(text).then(
+        () => true,
+        () => console.error("Failed to copy text to clipboard: " + text)
+      );
+      return true;
+    } else {
+      var isRTL = document.documentElement.getAttribute("dir") === "rtl";
+
+      var textarea = document.createElement("textarea");
+      textarea.className = "clipboard-helper";
+      textarea.style[isRTL ? "right" : "left"] = "-9999px";
+      // Move element to the same position vertically
+      var yPosition = window.pageYOffset || document.documentElement.scrollTop;
+      textarea.style.top = yPosition + "px";
+
+      textarea.setAttribute("readonly", "");
+      textarea.value = text;
+      document.body.appendChild(textarea);
+
+      var success = true;
+      try {
+        textarea.select();
+        success = document.execCommand("copy");
+      } catch (e) {
+        success = false;
+      }
+      textarea.parentNode.removeChild(textarea);
+      return success;
     }
-  });
+  };
+
+  var copyButtonEventListener = function (event) {
+    var thisButton = event.target;
+
+    // Locate the <code> element
+    var codeBlock = thisButton.nextElementSibling;
+    while (codeBlock && codeBlock.tagName.toLowerCase() !== "code") {
+      codeBlock = codeBlock.nextElementSibling;
+    }
+    if (!codeBlock) {
+      // No <code> found - wtf?
+      console.warn(thisButton);
+      throw new Error("No code block found for this button.");
+    }
+
+    // Skip line numbers if present (i.e. {% highlight lineno %})
+    var realCodeBlock = codeBlock.querySelector("td.code, td.rouge-code");
+    if (realCodeBlock) {
+      codeBlock = realCodeBlock;
+    }
+    var result = copyText(codeBlock.innerText);
+    // Restore the focus to the button
+    thisButton.focus();
+    if (result) {
+      if (thisButton.interval !== null) {
+        clearInterval(thisButton.interval);
+      }
+      thisButton.classList.add('copied');
+      thisButton.interval = setTimeout(function () {
+        thisButton.classList.remove('copied');
+        clearInterval(thisButton.interval);
+        thisButton.interval = null;
+      }, 1500);
+    }
+    return result;
+  };
+
+  if (window.enable_copy_code_button) {
+    document
+      .querySelectorAll(".page__content pre.highlight > code")
+      .forEach(function (element, index, parentList) {
+        // Locate the <pre> element
+        var container = element.parentElement;
+        // Sanity check - don't add an extra button if there's already one
+        if (container.firstElementChild.tagName.toLowerCase() !== "code") {
+          return;
+        }
+        var copyButton = document.createElement("button");
+        copyButton.title = "Copy to clipboard";
+        copyButton.className = "clipboard-copy-button";
+        copyButton.innerHTML = '<span class="sr-only">Copy code</span><i class="far fa-fw fa-copy"></i><i class="fas fa-fw fa-check copied"></i>';
+        copyButton.addEventListener("click", copyButtonEventListener);
+        container.prepend(copyButton);
+      });
+  }
 });
diff --git a/assets/js/lunr/lunr-store.js b/assets/js/lunr/lunr-store.js
index 370d1448884c..fe14f7e11b4e 100644
--- a/assets/js/lunr/lunr-store.js
+++ b/assets/js/lunr/lunr-store.js
@@ -42,8 +42,43 @@ var store = [
           {%- endif -%}
         "categories": {{ doc.categories | jsonify }},
         "tags": {{ doc.tags | jsonify }},
-        "url": {{ doc.url | absolute_url | jsonify }},
-        "teaser": {{ teaser | absolute_url | jsonify }}
+        "url": {{ doc.url | relative_url | jsonify }},
+        "teaser": {{ teaser | relative_url | jsonify }}
       }{%- unless forloop.last and l -%},{%- endunless -%}
     {%- endfor -%}
-  {%- endfor -%}]
+  {%- endfor -%}{%- if site.lunr.search_within_pages -%},
+  {%- assign pages = site.pages | where_exp: 'doc', 'doc.search != false' | where_exp: 'doc', 'doc.title != null' -%}
+  {%- for doc in pages -%}
+    {%- if forloop.last -%}
+      {%- assign l = true -%}
+    {%- endif -%}
+  {
+    "title": {{ doc.title | jsonify }},
+    "excerpt":
+        {%- if site.search_full_content == true -%}
+          {{ doc.content | newline_to_br |
+            replace:"<br />", " " |
+            replace:"</p>", " " |
+            replace:"</h1>", " " |
+            replace:"</h2>", " " |
+            replace:"</h3>", " " |
+            replace:"</h4>", " " |
+            replace:"</h5>", " " |
+            replace:"</h6>", " "|
+          strip_html | strip_newlines | jsonify }},
+        {%- else -%}
+          {{ doc.content | newline_to_br |
+            replace:"<br />", " " |
+            replace:"</p>", " " |
+            replace:"</h1>", " " |
+            replace:"</h2>", " " |
+            replace:"</h3>", " " |
+            replace:"</h4>", " " |
+            replace:"</h5>", " " |
+            replace:"</h6>", " "|
+          strip_html | strip_newlines | truncatewords: 50 | jsonify }},
+        {%- endif -%}
+      "url": {{ doc.url | absolute_url | jsonify }}
+  }{%- unless forloop.last and l -%},{%- endunless -%}
+  {%- endfor -%}
+{%- endif -%}]
diff --git a/assets/js/lunr/lunr.js b/assets/js/lunr/lunr.js
index b37984ab68f3..6aa370fbcb7b 100644
--- a/assets/js/lunr/lunr.js
+++ b/assets/js/lunr/lunr.js
@@ -1,6 +1,6 @@
 /**
- * lunr - http://lunrjs.com - A bit like Solr, but much smaller and not as bright - 2.3.5
- * Copyright (C) 2018 Oliver Nightingale
+ * lunr - http://lunrjs.com - A bit like Solr, but much smaller and not as bright - 2.3.9
+ * Copyright (C) 2020 Oliver Nightingale
  * @license MIT
  */
 
@@ -54,10 +54,10 @@ var lunr = function (config) {
   return builder.build()
 }
 
-lunr.version = "2.3.5"
+lunr.version = "2.3.9"
 /*!
  * lunr.utils
- * Copyright (C) 2018 Oliver Nightingale
+ * Copyright (C) 2020 Oliver Nightingale
  */
 
 /**
@@ -177,7 +177,7 @@ lunr.FieldRef.prototype.toString = function () {
 }
 /*!
  * lunr.Set
- * Copyright (C) 2018 Oliver Nightingale
+ * Copyright (C) 2020 Oliver Nightingale
  */
 
 /**
@@ -211,8 +211,8 @@ lunr.Set.complete = {
     return other
   },
 
-  union: function (other) {
-    return other
+  union: function () {
+    return this
   },
 
   contains: function () {
@@ -389,7 +389,7 @@ lunr.Token.prototype.clone = function (fn) {
 }
 /*!
  * lunr.tokenizer
- * Copyright (C) 2018 Oliver Nightingale
+ * Copyright (C) 2020 Oliver Nightingale
  */
 
 /**
@@ -424,7 +424,7 @@ lunr.tokenizer = function (obj, metadata) {
     })
   }
 
-  var str = obj.toString().trim().toLowerCase(),
+  var str = obj.toString().toLowerCase(),
       len = str.length,
       tokens = []
 
@@ -465,7 +465,7 @@ lunr.tokenizer = function (obj, metadata) {
 lunr.tokenizer.separator = /[\s\-]+/
 /*!
  * lunr.Pipeline
- * Copyright (C) 2018 Oliver Nightingale
+ * Copyright (C) 2020 Oliver Nightingale
  */
 
 /**
@@ -509,8 +509,8 @@ lunr.Pipeline.registeredFunctions = Object.create(null)
  * or mutate (or add) metadata for a given token.
  *
  * A pipeline function can indicate that the passed token should be discarded by returning
- * null. This token will not be passed to any downstream pipeline functions and will not be
- * added to the index.
+ * null, undefined or an empty string. This token will not be passed to any downstream pipeline
+ * functions and will not be added to the index.
  *
  * Multiple tokens can be returned by returning an array of tokens. Each token will be passed
  * to any downstream pipeline functions and all will returned tokens will be added to the index.
@@ -673,7 +673,7 @@ lunr.Pipeline.prototype.run = function (tokens) {
     for (var j = 0; j < tokens.length; j++) {
       var result = fn(tokens[j], j, tokens)
 
-      if (result === void 0 || result === '') continue
+      if (result === null || result === void 0 || result === '') continue
 
       if (Array.isArray(result)) {
         for (var k = 0; k < result.length; k++) {
@@ -732,7 +732,7 @@ lunr.Pipeline.prototype.toJSON = function () {
 }
 /*!
  * lunr.Vector
- * Copyright (C) 2018 Oliver Nightingale
+ * Copyright (C) 2020 Oliver Nightingale
  */
 
 /**
@@ -929,7 +929,7 @@ lunr.Vector.prototype.toJSON = function () {
 /* eslint-disable */
 /*!
  * lunr.stemmer
- * Copyright (C) 2018 Oliver Nightingale
+ * Copyright (C) 2020 Oliver Nightingale
  * Includes code from - http://tartarus.org/~martin/PorterStemmer/js.txt
  */
 
@@ -1151,7 +1151,7 @@ lunr.stemmer = (function(){
 lunr.Pipeline.registerFunction(lunr.stemmer, 'stemmer')
 /*!
  * lunr.stopWordFilter
- * Copyright (C) 2018 Oliver Nightingale
+ * Copyright (C) 2020 Oliver Nightingale
  */
 
 /**
@@ -1316,7 +1316,7 @@ lunr.stopWordFilter = lunr.generateStopWordFilter([
 lunr.Pipeline.registerFunction(lunr.stopWordFilter, 'stopWordFilter')
 /*!
  * lunr.trimmer
- * Copyright (C) 2018 Oliver Nightingale
+ * Copyright (C) 2020 Oliver Nightingale
  */
 
 /**
@@ -1343,7 +1343,7 @@ lunr.trimmer = function (token) {
 lunr.Pipeline.registerFunction(lunr.trimmer, 'trimmer')
 /*!
  * lunr.TokenSet
- * Copyright (C) 2018 Oliver Nightingale
+ * Copyright (C) 2020 Oliver Nightingale
  */
 
 /**
@@ -1469,41 +1469,49 @@ lunr.TokenSet.fromFuzzyString = function (str, editDistance) {
       })
     }
 
+    if (frame.editsRemaining == 0) {
+      continue
+    }
+
+    // insertion
+    if ("*" in frame.node.edges) {
+      var insertionNode = frame.node.edges["*"]
+    } else {
+      var insertionNode = new lunr.TokenSet
+      frame.node.edges["*"] = insertionNode
+    }
+
+    if (frame.str.length == 0) {
+      insertionNode.final = true
+    }
+
+    stack.push({
+      node: insertionNode,
+      editsRemaining: frame.editsRemaining - 1,
+      str: frame.str
+    })
+
     // deletion
     // can only do a deletion if we have enough edits remaining
     // and if there are characters left to delete in the string
-    if (frame.editsRemaining > 0 && frame.str.length > 1) {
-      var char = frame.str.charAt(1),
-          deletionNode
-
-      if (char in frame.node.edges) {
-        deletionNode = frame.node.edges[char]
-      } else {
-        deletionNode = new lunr.TokenSet
-        frame.node.edges[char] = deletionNode
-      }
-
-      if (frame.str.length <= 2) {
-        deletionNode.final = true
-      } else {
-        stack.push({
-          node: deletionNode,
-          editsRemaining: frame.editsRemaining - 1,
-          str: frame.str.slice(2)
-        })
-      }
+    if (frame.str.length > 1) {
+      stack.push({
+        node: frame.node,
+        editsRemaining: frame.editsRemaining - 1,
+        str: frame.str.slice(1)
+      })
     }
 
     // deletion
     // just removing the last character from the str
-    if (frame.editsRemaining > 0 && frame.str.length == 1) {
+    if (frame.str.length == 1) {
       frame.node.final = true
     }
 
     // substitution
     // can only do a substitution if we have enough edits remaining
     // and if there are characters left to substitute
-    if (frame.editsRemaining > 0 && frame.str.length >= 1) {
+    if (frame.str.length >= 1) {
       if ("*" in frame.node.edges) {
         var substitutionNode = frame.node.edges["*"]
       } else {
@@ -1513,40 +1521,19 @@ lunr.TokenSet.fromFuzzyString = function (str, editDistance) {
 
       if (frame.str.length == 1) {
         substitutionNode.final = true
-      } else {
-        stack.push({
-          node: substitutionNode,
-          editsRemaining: frame.editsRemaining - 1,
-          str: frame.str.slice(1)
-        })
-      }
-    }
-
-    // insertion
-    // can only do insertion if there are edits remaining
-    if (frame.editsRemaining > 0) {
-      if ("*" in frame.node.edges) {
-        var insertionNode = frame.node.edges["*"]
-      } else {
-        var insertionNode = new lunr.TokenSet
-        frame.node.edges["*"] = insertionNode
       }
 
-      if (frame.str.length == 0) {
-        insertionNode.final = true
-      } else {
-        stack.push({
-          node: insertionNode,
-          editsRemaining: frame.editsRemaining - 1,
-          str: frame.str
-        })
-      }
+      stack.push({
+        node: substitutionNode,
+        editsRemaining: frame.editsRemaining - 1,
+        str: frame.str.slice(1)
+      })
     }
 
     // transposition
     // can only do a transposition if there are edits remaining
     // and there are enough characters to transpose
-    if (frame.editsRemaining > 0 && frame.str.length > 1) {
+    if (frame.str.length > 1) {
       var charA = frame.str.charAt(0),
           charB = frame.str.charAt(1),
           transposeNode
@@ -1560,13 +1547,13 @@ lunr.TokenSet.fromFuzzyString = function (str, editDistance) {
 
       if (frame.str.length == 1) {
         transposeNode.final = true
-      } else {
-        stack.push({
-          node: transposeNode,
-          editsRemaining: frame.editsRemaining - 1,
-          str: charA + frame.str.slice(2)
-        })
       }
+
+      stack.push({
+        node: transposeNode,
+        editsRemaining: frame.editsRemaining - 1,
+        str: charA + frame.str.slice(2)
+      })
     }
   }
 
@@ -1619,6 +1606,10 @@ lunr.TokenSet.fromString = function (str) {
  * Converts this TokenSet into an array of strings
  * contained within the TokenSet.
  *
+ * This is not intended to be used on a TokenSet that
+ * contains wildcards, in these cases the results are
+ * undefined and are likely to cause an infinite loop.
+ *
  * @returns {string[]}
  */
 lunr.TokenSet.prototype.toArray = function () {
@@ -1836,7 +1827,7 @@ lunr.TokenSet.Builder.prototype.minimize = function (downTo) {
 }
 /*!
  * lunr.Index
- * Copyright (C) 2018 Oliver Nightingale
+ * Copyright (C) 2020 Oliver Nightingale
  */
 
 /**
@@ -2003,7 +1994,7 @@ lunr.Index.prototype.query = function (fn) {
      */
     var clause = query.clauses[i],
         terms = null,
-        clauseMatches = lunr.Set.complete
+        clauseMatches = lunr.Set.empty
 
     if (clause.usePipeline) {
       terms = this.pipeline.runString(clause.term, {
@@ -2328,7 +2319,7 @@ lunr.Index.load = function (serializedIndex) {
 }
 /*!
  * lunr.Builder
- * Copyright (C) 2018 Oliver Nightingale
+ * Copyright (C) 2020 Oliver Nightingale
  */
 
 /**
diff --git a/assets/js/lunr/lunr.min.js b/assets/js/lunr/lunr.min.js
index f45a81eb800c..cdc94cd390c6 100644
--- a/assets/js/lunr/lunr.min.js
+++ b/assets/js/lunr/lunr.min.js
@@ -1 +1,6 @@
-!function(){var t,l,c,e,r,h,d,f,p,y,m,g,x,v,w,Q,k,S,E,L,b,P,T,O,I,i,n,s,z=function(e){var t=new z.Builder;return t.pipeline.add(z.trimmer,z.stopWordFilter,z.stemmer),t.searchPipeline.add(z.stemmer),e.call(t,t),t.build()};z.version="2.3.5",z.utils={},z.utils.warn=(t=this,function(e){t.console&&console.warn&&console.warn(e)}),z.utils.asString=function(e){return null==e?"":e.toString()},z.utils.clone=function(e){if(null==e)return e;for(var t=Object.create(null),r=Object.keys(e),i=0;i<r.length;i++){var n=r[i],s=e[n];if(Array.isArray(s))t[n]=s.slice();else{if("string"!=typeof s&&"number"!=typeof s&&"boolean"!=typeof s)throw new TypeError("clone is not deep and does not support nested objects");t[n]=s}}return t},z.FieldRef=function(e,t,r){this.docRef=e,this.fieldName=t,this._stringValue=r},z.FieldRef.joiner="/",z.FieldRef.fromString=function(e){var t=e.indexOf(z.FieldRef.joiner);if(-1===t)throw"malformed field ref string";var r=e.slice(0,t),i=e.slice(t+1);return new z.FieldRef(i,r,e)},z.FieldRef.prototype.toString=function(){return null==this._stringValue&&(this._stringValue=this.fieldName+z.FieldRef.joiner+this.docRef),this._stringValue},z.Set=function(e){if(this.elements=Object.create(null),e){this.length=e.length;for(var t=0;t<this.length;t++)this.elements[e[t]]=!0}else this.length=0},z.Set.complete={intersect:function(e){return e},union:function(e){return e},contains:function(){return!0}},z.Set.empty={intersect:function(){return this},union:function(e){return e},contains:function(){return!1}},z.Set.prototype.contains=function(e){return!!this.elements[e]},z.Set.prototype.intersect=function(e){var t,r,i,n=[];if(e===z.Set.complete)return this;if(e===z.Set.empty)return e;r=this.length<e.length?(t=this,e):(t=e,this),i=Object.keys(t.elements);for(var s=0;s<i.length;s++){var o=i[s];o in r.elements&&n.push(o)}return new z.Set(n)},z.Set.prototype.union=function(e){return e===z.Set.complete?z.Set.complete:e===z.Set.empty?this:new z.Set(Object.keys(this.elements).concat(Object.keys(e.elements)))},z.idf=function(e,t){var r=0;for(var i in e)"_index"!=i&&(r+=Object.keys(e[i]).length);var n=(t-r+.5)/(r+.5);return Math.log(1+Math.abs(n))},z.Token=function(e,t){this.str=e||"",this.metadata=t||{}},z.Token.prototype.toString=function(){return this.str},z.Token.prototype.update=function(e){return this.str=e(this.str,this.metadata),this},z.Token.prototype.clone=function(e){return e=e||function(e){return e},new z.Token(e(this.str,this.metadata),this.metadata)},z.tokenizer=function(e,t){if(null==e||null==e)return[];if(Array.isArray(e))return e.map(function(e){return new z.Token(z.utils.asString(e).toLowerCase(),z.utils.clone(t))});for(var r=e.toString().trim().toLowerCase(),i=r.length,n=[],s=0,o=0;s<=i;s++){var a=s-o;if(r.charAt(s).match(z.tokenizer.separator)||s==i){if(0<a){var u=z.utils.clone(t)||{};u.position=[o,a],u.index=n.length,n.push(new z.Token(r.slice(o,s),u))}o=s+1}}return n},z.tokenizer.separator=/[\s\-]+/,z.Pipeline=function(){this._stack=[]},z.Pipeline.registeredFunctions=Object.create(null),z.Pipeline.registerFunction=function(e,t){t in this.registeredFunctions&&z.utils.warn("Overwriting existing registered function: "+t),e.label=t,z.Pipeline.registeredFunctions[e.label]=e},z.Pipeline.warnIfFunctionNotRegistered=function(e){e.label&&e.label in this.registeredFunctions||z.utils.warn("Function is not registered with pipeline. This may cause problems when serialising the index.\n",e)},z.Pipeline.load=function(e){var r=new z.Pipeline;return e.forEach(function(e){var t=z.Pipeline.registeredFunctions[e];if(!t)throw new Error("Cannot load unregistered function: "+e);r.add(t)}),r},z.Pipeline.prototype.add=function(){Array.prototype.slice.call(arguments).forEach(function(e){z.Pipeline.warnIfFunctionNotRegistered(e),this._stack.push(e)},this)},z.Pipeline.prototype.after=function(e,t){z.Pipeline.warnIfFunctionNotRegistered(t);var r=this._stack.indexOf(e);if(-1==r)throw new Error("Cannot find existingFn");r+=1,this._stack.splice(r,0,t)},z.Pipeline.prototype.before=function(e,t){z.Pipeline.warnIfFunctionNotRegistered(t);var r=this._stack.indexOf(e);if(-1==r)throw new Error("Cannot find existingFn");this._stack.splice(r,0,t)},z.Pipeline.prototype.remove=function(e){var t=this._stack.indexOf(e);-1!=t&&this._stack.splice(t,1)},z.Pipeline.prototype.run=function(e){for(var t=this._stack.length,r=0;r<t;r++){for(var i=this._stack[r],n=[],s=0;s<e.length;s++){var o=i(e[s],s,e);if(void 0!==o&&""!==o)if(Array.isArray(o))for(var a=0;a<o.length;a++)n.push(o[a]);else n.push(o)}e=n}return e},z.Pipeline.prototype.runString=function(e,t){var r=new z.Token(e,t);return this.run([r]).map(function(e){return e.toString()})},z.Pipeline.prototype.reset=function(){this._stack=[]},z.Pipeline.prototype.toJSON=function(){return this._stack.map(function(e){return z.Pipeline.warnIfFunctionNotRegistered(e),e.label})},z.Vector=function(e){this._magnitude=0,this.elements=e||[]},z.Vector.prototype.positionForIndex=function(e){if(0==this.elements.length)return 0;for(var t=0,r=this.elements.length/2,i=r-t,n=Math.floor(i/2),s=this.elements[2*n];1<i&&(s<e&&(t=n),e<s&&(r=n),s!=e);)i=r-t,n=t+Math.floor(i/2),s=this.elements[2*n];return s==e?2*n:e<s?2*n:s<e?2*(n+1):void 0},z.Vector.prototype.insert=function(e,t){this.upsert(e,t,function(){throw"duplicate index"})},z.Vector.prototype.upsert=function(e,t,r){this._magnitude=0;var i=this.positionForIndex(e);this.elements[i]==e?this.elements[i+1]=r(this.elements[i+1],t):this.elements.splice(i,0,e,t)},z.Vector.prototype.magnitude=function(){if(this._magnitude)return this._magnitude;for(var e=0,t=this.elements.length,r=1;r<t;r+=2){var i=this.elements[r];e+=i*i}return this._magnitude=Math.sqrt(e)},z.Vector.prototype.dot=function(e){for(var t=0,r=this.elements,i=e.elements,n=r.length,s=i.length,o=0,a=0,u=0,l=0;u<n&&l<s;)(o=r[u])<(a=i[l])?u+=2:a<o?l+=2:o==a&&(t+=r[u+1]*i[l+1],u+=2,l+=2);return t},z.Vector.prototype.similarity=function(e){return this.dot(e)/this.magnitude()||0},z.Vector.prototype.toArray=function(){for(var e=new Array(this.elements.length/2),t=1,r=0;t<this.elements.length;t+=2,r++)e[r]=this.elements[t];return e},z.Vector.prototype.toJSON=function(){return this.elements},z.stemmer=(l={ational:"ate",tional:"tion",enci:"ence",anci:"ance",izer:"ize",bli:"ble",alli:"al",entli:"ent",eli:"e",ousli:"ous",ization:"ize",ation:"ate",ator:"ate",alism:"al",iveness:"ive",fulness:"ful",ousness:"ous",aliti:"al",iviti:"ive",biliti:"ble",logi:"log"},c={icate:"ic",ative:"",alize:"al",iciti:"ic",ical:"ic",ful:"",ness:""},e="[aeiouy]",r="[^aeiou][^aeiouy]*",h=new RegExp("^([^aeiou][^aeiouy]*)?[aeiouy][aeiou]*[^aeiou][^aeiouy]*"),d=new RegExp("^([^aeiou][^aeiouy]*)?[aeiouy][aeiou]*[^aeiou][^aeiouy]*[aeiouy][aeiou]*[^aeiou][^aeiouy]*"),f=new RegExp("^([^aeiou][^aeiouy]*)?[aeiouy][aeiou]*[^aeiou][^aeiouy]*([aeiouy][aeiou]*)?$"),p=new RegExp("^([^aeiou][^aeiouy]*)?[aeiouy]"),y=/^(.+?)(ss|i)es$/,m=/^(.+?)([^s])s$/,g=/^(.+?)eed$/,x=/^(.+?)(ed|ing)$/,v=/.$/,w=/(at|bl|iz)$/,Q=new RegExp("([^aeiouylsz])\\1$"),k=new RegExp("^"+r+e+"[^aeiouwxy]$"),S=/^(.+?[^aeiou])y$/,E=/^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/,L=/^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/,b=/^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/,P=/^(.+?)(s|t)(ion)$/,T=/^(.+?)e$/,O=/ll$/,I=new RegExp("^"+r+e+"[^aeiouwxy]$"),i=function(e){var t,r,i,n,s,o,a;if(e.length<3)return e;if("y"==(i=e.substr(0,1))&&(e=i.toUpperCase()+e.substr(1)),s=m,(n=y).test(e)?e=e.replace(n,"$1$2"):s.test(e)&&(e=e.replace(s,"$1$2")),s=x,(n=g).test(e)){var u=n.exec(e);(n=h).test(u[1])&&(n=v,e=e.replace(n,""))}else if(s.test(e)){t=(u=s.exec(e))[1],(s=p).test(t)&&(o=Q,a=k,(s=w).test(e=t)?e+="e":o.test(e)?(n=v,e=e.replace(n,"")):a.test(e)&&(e+="e"))}(n=S).test(e)&&(e=(t=(u=n.exec(e))[1])+"i");(n=E).test(e)&&(t=(u=n.exec(e))[1],r=u[2],(n=h).test(t)&&(e=t+l[r]));(n=L).test(e)&&(t=(u=n.exec(e))[1],r=u[2],(n=h).test(t)&&(e=t+c[r]));if(s=P,(n=b).test(e))t=(u=n.exec(e))[1],(n=d).test(t)&&(e=t);else if(s.test(e)){t=(u=s.exec(e))[1]+u[2],(s=d).test(t)&&(e=t)}(n=T).test(e)&&(t=(u=n.exec(e))[1],s=f,o=I,((n=d).test(t)||s.test(t)&&!o.test(t))&&(e=t));return s=d,(n=O).test(e)&&s.test(e)&&(n=v,e=e.replace(n,"")),"y"==i&&(e=i.toLowerCase()+e.substr(1)),e},function(e){return e.update(i)}),z.Pipeline.registerFunction(z.stemmer,"stemmer"),z.generateStopWordFilter=function(e){var t=e.reduce(function(e,t){return e[t]=t,e},{});return function(e){if(e&&t[e.toString()]!==e.toString())return e}},z.stopWordFilter=z.generateStopWordFilter(["a","able","about","across","after","all","almost","also","am","among","an","and","any","are","as","at","be","because","been","but","by","can","cannot","could","dear","did","do","does","either","else","ever","every","for","from","get","got","had","has","have","he","her","hers","him","his","how","however","i","if","in","into","is","it","its","just","least","let","like","likely","may","me","might","most","must","my","neither","no","nor","not","of","off","often","on","only","or","other","our","own","rather","said","say","says","she","should","since","so","some","than","that","the","their","them","then","there","these","they","this","tis","to","too","twas","us","wants","was","we","were","what","when","where","which","while","who","whom","why","will","with","would","yet","you","your"]),z.Pipeline.registerFunction(z.stopWordFilter,"stopWordFilter"),z.trimmer=function(e){return e.update(function(e){return e.replace(/^\W+/,"").replace(/\W+$/,"")})},z.Pipeline.registerFunction(z.trimmer,"trimmer"),z.TokenSet=function(){this.final=!1,this.edges={},this.id=z.TokenSet._nextId,z.TokenSet._nextId+=1},z.TokenSet._nextId=1,z.TokenSet.fromArray=function(e){for(var t=new z.TokenSet.Builder,r=0,i=e.length;r<i;r++)t.insert(e[r]);return t.finish(),t.root},z.TokenSet.fromClause=function(e){return"editDistance"in e?z.TokenSet.fromFuzzyString(e.term,e.editDistance):z.TokenSet.fromString(e.term)},z.TokenSet.fromFuzzyString=function(e,t){for(var r=new z.TokenSet,i=[{node:r,editsRemaining:t,str:e}];i.length;){var n,s,o,a=i.pop();if(0<a.str.length)(s=a.str.charAt(0))in a.node.edges?n=a.node.edges[s]:(n=new z.TokenSet,a.node.edges[s]=n),1==a.str.length&&(n.final=!0),i.push({node:n,editsRemaining:a.editsRemaining,str:a.str.slice(1)});if(0<a.editsRemaining&&1<a.str.length)(s=a.str.charAt(1))in a.node.edges?o=a.node.edges[s]:(o=new z.TokenSet,a.node.edges[s]=o),a.str.length<=2?o.final=!0:i.push({node:o,editsRemaining:a.editsRemaining-1,str:a.str.slice(2)});if(0<a.editsRemaining&&1==a.str.length&&(a.node.final=!0),0<a.editsRemaining&&1<=a.str.length){if("*"in a.node.edges)var u=a.node.edges["*"];else{u=new z.TokenSet;a.node.edges["*"]=u}1==a.str.length?u.final=!0:i.push({node:u,editsRemaining:a.editsRemaining-1,str:a.str.slice(1)})}if(0<a.editsRemaining){if("*"in a.node.edges)var l=a.node.edges["*"];else{l=new z.TokenSet;a.node.edges["*"]=l}0==a.str.length?l.final=!0:i.push({node:l,editsRemaining:a.editsRemaining-1,str:a.str})}if(0<a.editsRemaining&&1<a.str.length){var c,h=a.str.charAt(0),d=a.str.charAt(1);d in a.node.edges?c=a.node.edges[d]:(c=new z.TokenSet,a.node.edges[d]=c),1==a.str.length?c.final=!0:i.push({node:c,editsRemaining:a.editsRemaining-1,str:h+a.str.slice(2)})}}return r},z.TokenSet.fromString=function(e){for(var t=new z.TokenSet,r=t,i=0,n=e.length;i<n;i++){var s=e[i],o=i==n-1;if("*"==s)(t.edges[s]=t).final=o;else{var a=new z.TokenSet;a.final=o,t.edges[s]=a,t=a}}return r},z.TokenSet.prototype.toArray=function(){for(var e=[],t=[{prefix:"",node:this}];t.length;){var r=t.pop(),i=Object.keys(r.node.edges),n=i.length;r.node.final&&(r.prefix.charAt(0),e.push(r.prefix));for(var s=0;s<n;s++){var o=i[s];t.push({prefix:r.prefix.concat(o),node:r.node.edges[o]})}}return e},z.TokenSet.prototype.toString=function(){if(this._str)return this._str;for(var e=this.final?"1":"0",t=Object.keys(this.edges).sort(),r=t.length,i=0;i<r;i++){var n=t[i];e=e+n+this.edges[n].id}return e},z.TokenSet.prototype.intersect=function(e){for(var t=new z.TokenSet,r=void 0,i=[{qNode:e,output:t,node:this}];i.length;){r=i.pop();for(var n=Object.keys(r.qNode.edges),s=n.length,o=Object.keys(r.node.edges),a=o.length,u=0;u<s;u++)for(var l=n[u],c=0;c<a;c++){var h=o[c];if(h==l||"*"==l){var d=r.node.edges[h],f=r.qNode.edges[l],p=d.final&&f.final,y=void 0;h in r.output.edges?(y=r.output.edges[h]).final=y.final||p:((y=new z.TokenSet).final=p,r.output.edges[h]=y),i.push({qNode:f,output:y,node:d})}}}return t},z.TokenSet.Builder=function(){this.previousWord="",this.root=new z.TokenSet,this.uncheckedNodes=[],this.minimizedNodes={}},z.TokenSet.Builder.prototype.insert=function(e){var t,r=0;if(e<this.previousWord)throw new Error("Out of order word insertion");for(var i=0;i<e.length&&i<this.previousWord.length&&e[i]==this.previousWord[i];i++)r++;this.minimize(r),t=0==this.uncheckedNodes.length?this.root:this.uncheckedNodes[this.uncheckedNodes.length-1].child;for(i=r;i<e.length;i++){var n=new z.TokenSet,s=e[i];t.edges[s]=n,this.uncheckedNodes.push({parent:t,char:s,child:n}),t=n}t.final=!0,this.previousWord=e},z.TokenSet.Builder.prototype.finish=function(){this.minimize(0)},z.TokenSet.Builder.prototype.minimize=function(e){for(var t=this.uncheckedNodes.length-1;e<=t;t--){var r=this.uncheckedNodes[t],i=r.child.toString();i in this.minimizedNodes?r.parent.edges[r.char]=this.minimizedNodes[i]:(r.child._str=i,this.minimizedNodes[i]=r.child),this.uncheckedNodes.pop()}},z.Index=function(e){this.invertedIndex=e.invertedIndex,this.fieldVectors=e.fieldVectors,this.tokenSet=e.tokenSet,this.fields=e.fields,this.pipeline=e.pipeline},z.Index.prototype.search=function(t){return this.query(function(e){new z.QueryParser(t,e).parse()})},z.Index.prototype.query=function(e){for(var t=new z.Query(this.fields),r=Object.create(null),i=Object.create(null),n=Object.create(null),s=Object.create(null),o=Object.create(null),a=0;a<this.fields.length;a++)i[this.fields[a]]=new z.Vector;e.call(t,t);for(a=0;a<t.clauses.length;a++){var u=t.clauses[a],l=null,c=z.Set.complete;l=u.usePipeline?this.pipeline.runString(u.term,{fields:u.fields}):[u.term];for(var h=0;h<l.length;h++){var d=l[h];u.term=d;var f=z.TokenSet.fromClause(u),p=this.tokenSet.intersect(f).toArray();if(0===p.length&&u.presence===z.Query.presence.REQUIRED){for(var y=0;y<u.fields.length;y++){s[R=u.fields[y]]=z.Set.empty}break}for(var m=0;m<p.length;m++){var g=p[m],x=this.invertedIndex[g],v=x._index;for(y=0;y<u.fields.length;y++){var w=x[R=u.fields[y]],Q=Object.keys(w),k=g+"/"+R,S=new z.Set(Q);if(u.presence==z.Query.presence.REQUIRED&&(c=c.union(S),void 0===s[R]&&(s[R]=z.Set.complete)),u.presence!=z.Query.presence.PROHIBITED){if(i[R].upsert(v,u.boost,function(e,t){return e+t}),!n[k]){for(var E=0;E<Q.length;E++){var L,b=Q[E],P=new z.FieldRef(b,R),T=w[b];void 0===(L=r[P])?r[P]=new z.MatchData(g,R,T):L.add(g,R,T)}n[k]=!0}}else void 0===o[R]&&(o[R]=z.Set.empty),o[R]=o[R].union(S)}}}if(u.presence===z.Query.presence.REQUIRED)for(y=0;y<u.fields.length;y++){s[R=u.fields[y]]=s[R].intersect(c)}}var O=z.Set.complete,I=z.Set.empty;for(a=0;a<this.fields.length;a++){var R;s[R=this.fields[a]]&&(O=O.intersect(s[R])),o[R]&&(I=I.union(o[R]))}var F=Object.keys(r),C=[],N=Object.create(null);if(t.isNegated()){F=Object.keys(this.fieldVectors);for(a=0;a<F.length;a++){P=F[a];var j=z.FieldRef.fromString(P);r[P]=new z.MatchData}}for(a=0;a<F.length;a++){var _=(j=z.FieldRef.fromString(F[a])).docRef;if(O.contains(_)&&!I.contains(_)){var D,A=this.fieldVectors[j],B=i[j.fieldName].similarity(A);if(void 0!==(D=N[_]))D.score+=B,D.matchData.combine(r[j]);else{var V={ref:_,score:B,matchData:r[j]};N[_]=V,C.push(V)}}}return C.sort(function(e,t){return t.score-e.score})},z.Index.prototype.toJSON=function(){var e=Object.keys(this.invertedIndex).sort().map(function(e){return[e,this.invertedIndex[e]]},this),t=Object.keys(this.fieldVectors).map(function(e){return[e,this.fieldVectors[e].toJSON()]},this);return{version:z.version,fields:this.fields,fieldVectors:t,invertedIndex:e,pipeline:this.pipeline.toJSON()}},z.Index.load=function(e){var t={},r={},i=e.fieldVectors,n=Object.create(null),s=e.invertedIndex,o=new z.TokenSet.Builder,a=z.Pipeline.load(e.pipeline);e.version!=z.version&&z.utils.warn("Version mismatch when loading serialised index. Current version of lunr '"+z.version+"' does not match serialized index '"+e.version+"'");for(var u=0;u<i.length;u++){var l=(h=i[u])[0],c=h[1];r[l]=new z.Vector(c)}for(u=0;u<s.length;u++){var h,d=(h=s[u])[0],f=h[1];o.insert(d),n[d]=f}return o.finish(),t.fields=e.fields,t.fieldVectors=r,t.invertedIndex=n,t.tokenSet=o.root,t.pipeline=a,new z.Index(t)},z.Builder=function(){this._ref="id",this._fields=Object.create(null),this._documents=Object.create(null),this.invertedIndex=Object.create(null),this.fieldTermFrequencies={},this.fieldLengths={},this.tokenizer=z.tokenizer,this.pipeline=new z.Pipeline,this.searchPipeline=new z.Pipeline,this.documentCount=0,this._b=.75,this._k1=1.2,this.termIndex=0,this.metadataWhitelist=[]},z.Builder.prototype.ref=function(e){this._ref=e},z.Builder.prototype.field=function(e,t){if(/\//.test(e))throw new RangeError("Field '"+e+"' contains illegal character '/'");this._fields[e]=t||{}},z.Builder.prototype.b=function(e){this._b=e<0?0:1<e?1:e},z.Builder.prototype.k1=function(e){this._k1=e},z.Builder.prototype.add=function(e,t){var r=e[this._ref],i=Object.keys(this._fields);this._documents[r]=t||{},this.documentCount+=1;for(var n=0;n<i.length;n++){var s=i[n],o=this._fields[s].extractor,a=o?o(e):e[s],u=this.tokenizer(a,{fields:[s]}),l=this.pipeline.run(u),c=new z.FieldRef(r,s),h=Object.create(null);this.fieldTermFrequencies[c]=h,this.fieldLengths[c]=0,this.fieldLengths[c]+=l.length;for(var d=0;d<l.length;d++){var f=l[d];if(null==h[f]&&(h[f]=0),h[f]+=1,null==this.invertedIndex[f]){var p=Object.create(null);p._index=this.termIndex,this.termIndex+=1;for(var y=0;y<i.length;y++)p[i[y]]=Object.create(null);this.invertedIndex[f]=p}null==this.invertedIndex[f][s][r]&&(this.invertedIndex[f][s][r]=Object.create(null));for(var m=0;m<this.metadataWhitelist.length;m++){var g=this.metadataWhitelist[m],x=f.metadata[g];null==this.invertedIndex[f][s][r][g]&&(this.invertedIndex[f][s][r][g]=[]),this.invertedIndex[f][s][r][g].push(x)}}}},z.Builder.prototype.calculateAverageFieldLengths=function(){for(var e=Object.keys(this.fieldLengths),t=e.length,r={},i={},n=0;n<t;n++){var s=z.FieldRef.fromString(e[n]),o=s.fieldName;i[o]||(i[o]=0),i[o]+=1,r[o]||(r[o]=0),r[o]+=this.fieldLengths[s]}var a=Object.keys(this._fields);for(n=0;n<a.length;n++){var u=a[n];r[u]=r[u]/i[u]}this.averageFieldLength=r},z.Builder.prototype.createFieldVectors=function(){for(var e={},t=Object.keys(this.fieldTermFrequencies),r=t.length,i=Object.create(null),n=0;n<r;n++){for(var s=z.FieldRef.fromString(t[n]),o=s.fieldName,a=this.fieldLengths[s],u=new z.Vector,l=this.fieldTermFrequencies[s],c=Object.keys(l),h=c.length,d=this._fields[o].boost||1,f=this._documents[s.docRef].boost||1,p=0;p<h;p++){var y,m,g,x=c[p],v=l[x],w=this.invertedIndex[x]._index;void 0===i[x]?(y=z.idf(this.invertedIndex[x],this.documentCount),i[x]=y):y=i[x],m=y*((this._k1+1)*v)/(this._k1*(1-this._b+this._b*(a/this.averageFieldLength[o]))+v),m*=d,m*=f,g=Math.round(1e3*m)/1e3,u.insert(w,g)}e[s]=u}this.fieldVectors=e},z.Builder.prototype.createTokenSet=function(){this.tokenSet=z.TokenSet.fromArray(Object.keys(this.invertedIndex).sort())},z.Builder.prototype.build=function(){return this.calculateAverageFieldLengths(),this.createFieldVectors(),this.createTokenSet(),new z.Index({invertedIndex:this.invertedIndex,fieldVectors:this.fieldVectors,tokenSet:this.tokenSet,fields:Object.keys(this._fields),pipeline:this.searchPipeline})},z.Builder.prototype.use=function(e){var t=Array.prototype.slice.call(arguments,1);t.unshift(this),e.apply(this,t)},z.MatchData=function(e,t,r){for(var i=Object.create(null),n=Object.keys(r||{}),s=0;s<n.length;s++){var o=n[s];i[o]=r[o].slice()}this.metadata=Object.create(null),void 0!==e&&(this.metadata[e]=Object.create(null),this.metadata[e][t]=i)},z.MatchData.prototype.combine=function(e){for(var t=Object.keys(e.metadata),r=0;r<t.length;r++){var i=t[r],n=Object.keys(e.metadata[i]);null==this.metadata[i]&&(this.metadata[i]=Object.create(null));for(var s=0;s<n.length;s++){var o=n[s],a=Object.keys(e.metadata[i][o]);null==this.metadata[i][o]&&(this.metadata[i][o]=Object.create(null));for(var u=0;u<a.length;u++){var l=a[u];null==this.metadata[i][o][l]?this.metadata[i][o][l]=e.metadata[i][o][l]:this.metadata[i][o][l]=this.metadata[i][o][l].concat(e.metadata[i][o][l])}}}},z.MatchData.prototype.add=function(e,t,r){if(!(e in this.metadata))return this.metadata[e]=Object.create(null),void(this.metadata[e][t]=r);if(t in this.metadata[e])for(var i=Object.keys(r),n=0;n<i.length;n++){var s=i[n];s in this.metadata[e][t]?this.metadata[e][t][s]=this.metadata[e][t][s].concat(r[s]):this.metadata[e][t][s]=r[s]}else this.metadata[e][t]=r},z.Query=function(e){this.clauses=[],this.allFields=e},z.Query.wildcard=new String("*"),z.Query.wildcard.NONE=0,z.Query.wildcard.LEADING=1,z.Query.wildcard.TRAILING=2,z.Query.presence={OPTIONAL:1,REQUIRED:2,PROHIBITED:3},z.Query.prototype.clause=function(e){return"fields"in e||(e.fields=this.allFields),"boost"in e||(e.boost=1),"usePipeline"in e||(e.usePipeline=!0),"wildcard"in e||(e.wildcard=z.Query.wildcard.NONE),e.wildcard&z.Query.wildcard.LEADING&&e.term.charAt(0)!=z.Query.wildcard&&(e.term="*"+e.term),e.wildcard&z.Query.wildcard.TRAILING&&e.term.slice(-1)!=z.Query.wildcard&&(e.term=e.term+"*"),"presence"in e||(e.presence=z.Query.presence.OPTIONAL),this.clauses.push(e),this},z.Query.prototype.isNegated=function(){for(var e=0;e<this.clauses.length;e++)if(this.clauses[e].presence!=z.Query.presence.PROHIBITED)return!1;return!0},z.Query.prototype.term=function(e,t){if(Array.isArray(e))return e.forEach(function(e){this.term(e,z.utils.clone(t))},this),this;var r=t||{};return r.term=e.toString(),this.clause(r),this},z.QueryParseError=function(e,t,r){this.name="QueryParseError",this.message=e,this.start=t,this.end=r},z.QueryParseError.prototype=new Error,z.QueryLexer=function(e){this.lexemes=[],this.str=e,this.length=e.length,this.pos=0,this.start=0,this.escapeCharPositions=[]},z.QueryLexer.prototype.run=function(){for(var e=z.QueryLexer.lexText;e;)e=e(this)},z.QueryLexer.prototype.sliceString=function(){for(var e=[],t=this.start,r=this.pos,i=0;i<this.escapeCharPositions.length;i++)r=this.escapeCharPositions[i],e.push(this.str.slice(t,r)),t=r+1;return e.push(this.str.slice(t,this.pos)),this.escapeCharPositions.length=0,e.join("")},z.QueryLexer.prototype.emit=function(e){this.lexemes.push({type:e,str:this.sliceString(),start:this.start,end:this.pos}),this.start=this.pos},z.QueryLexer.prototype.escapeCharacter=function(){this.escapeCharPositions.push(this.pos-1),this.pos+=1},z.QueryLexer.prototype.next=function(){if(this.pos>=this.length)return z.QueryLexer.EOS;var e=this.str.charAt(this.pos);return this.pos+=1,e},z.QueryLexer.prototype.width=function(){return this.pos-this.start},z.QueryLexer.prototype.ignore=function(){this.start==this.pos&&(this.pos+=1),this.start=this.pos},z.QueryLexer.prototype.backup=function(){this.pos-=1},z.QueryLexer.prototype.acceptDigitRun=function(){for(var e,t;47<(t=(e=this.next()).charCodeAt(0))&&t<58;);e!=z.QueryLexer.EOS&&this.backup()},z.QueryLexer.prototype.more=function(){return this.pos<this.length},z.QueryLexer.EOS="EOS",z.QueryLexer.FIELD="FIELD",z.QueryLexer.TERM="TERM",z.QueryLexer.EDIT_DISTANCE="EDIT_DISTANCE",z.QueryLexer.BOOST="BOOST",z.QueryLexer.PRESENCE="PRESENCE",z.QueryLexer.lexField=function(e){return e.backup(),e.emit(z.QueryLexer.FIELD),e.ignore(),z.QueryLexer.lexText},z.QueryLexer.lexTerm=function(e){if(1<e.width()&&(e.backup(),e.emit(z.QueryLexer.TERM)),e.ignore(),e.more())return z.QueryLexer.lexText},z.QueryLexer.lexEditDistance=function(e){return e.ignore(),e.acceptDigitRun(),e.emit(z.QueryLexer.EDIT_DISTANCE),z.QueryLexer.lexText},z.QueryLexer.lexBoost=function(e){return e.ignore(),e.acceptDigitRun(),e.emit(z.QueryLexer.BOOST),z.QueryLexer.lexText},z.QueryLexer.lexEOS=function(e){0<e.width()&&e.emit(z.QueryLexer.TERM)},z.QueryLexer.termSeparator=z.tokenizer.separator,z.QueryLexer.lexText=function(e){for(;;){var t=e.next();if(t==z.QueryLexer.EOS)return z.QueryLexer.lexEOS;if(92!=t.charCodeAt(0)){if(":"==t)return z.QueryLexer.lexField;if("~"==t)return e.backup(),0<e.width()&&e.emit(z.QueryLexer.TERM),z.QueryLexer.lexEditDistance;if("^"==t)return e.backup(),0<e.width()&&e.emit(z.QueryLexer.TERM),z.QueryLexer.lexBoost;if("+"==t&&1===e.width())return e.emit(z.QueryLexer.PRESENCE),z.QueryLexer.lexText;if("-"==t&&1===e.width())return e.emit(z.QueryLexer.PRESENCE),z.QueryLexer.lexText;if(t.match(z.QueryLexer.termSeparator))return z.QueryLexer.lexTerm}else e.escapeCharacter()}},z.QueryParser=function(e,t){this.lexer=new z.QueryLexer(e),this.query=t,this.currentClause={},this.lexemeIdx=0},z.QueryParser.prototype.parse=function(){this.lexer.run(),this.lexemes=this.lexer.lexemes;for(var e=z.QueryParser.parseClause;e;)e=e(this);return this.query},z.QueryParser.prototype.peekLexeme=function(){return this.lexemes[this.lexemeIdx]},z.QueryParser.prototype.consumeLexeme=function(){var e=this.peekLexeme();return this.lexemeIdx+=1,e},z.QueryParser.prototype.nextClause=function(){var e=this.currentClause;this.query.clause(e),this.currentClause={}},z.QueryParser.parseClause=function(e){var t=e.peekLexeme();if(null!=t)switch(t.type){case z.QueryLexer.PRESENCE:return z.QueryParser.parsePresence;case z.QueryLexer.FIELD:return z.QueryParser.parseField;case z.QueryLexer.TERM:return z.QueryParser.parseTerm;default:var r="expected either a field or a term, found "+t.type;throw 1<=t.str.length&&(r+=" with value '"+t.str+"'"),new z.QueryParseError(r,t.start,t.end)}},z.QueryParser.parsePresence=function(e){var t=e.consumeLexeme();if(null!=t){switch(t.str){case"-":e.currentClause.presence=z.Query.presence.PROHIBITED;break;case"+":e.currentClause.presence=z.Query.presence.REQUIRED;break;default:var r="unrecognised presence operator'"+t.str+"'";throw new z.QueryParseError(r,t.start,t.end)}var i=e.peekLexeme();if(null==i){r="expecting term or field, found nothing";throw new z.QueryParseError(r,t.start,t.end)}switch(i.type){case z.QueryLexer.FIELD:return z.QueryParser.parseField;case z.QueryLexer.TERM:return z.QueryParser.parseTerm;default:r="expecting term or field, found '"+i.type+"'";throw new z.QueryParseError(r,i.start,i.end)}}},z.QueryParser.parseField=function(e){var t=e.consumeLexeme();if(null!=t){if(-1==e.query.allFields.indexOf(t.str)){var r=e.query.allFields.map(function(e){return"'"+e+"'"}).join(", "),i="unrecognised field '"+t.str+"', possible fields: "+r;throw new z.QueryParseError(i,t.start,t.end)}e.currentClause.fields=[t.str];var n=e.peekLexeme();if(null==n){i="expecting term, found nothing";throw new z.QueryParseError(i,t.start,t.end)}switch(n.type){case z.QueryLexer.TERM:return z.QueryParser.parseTerm;default:i="expecting term, found '"+n.type+"'";throw new z.QueryParseError(i,n.start,n.end)}}},z.QueryParser.parseTerm=function(e){var t=e.consumeLexeme();if(null!=t){e.currentClause.term=t.str.toLowerCase(),-1!=t.str.indexOf("*")&&(e.currentClause.usePipeline=!1);var r=e.peekLexeme();if(null!=r)switch(r.type){case z.QueryLexer.TERM:return e.nextClause(),z.QueryParser.parseTerm;case z.QueryLexer.FIELD:return e.nextClause(),z.QueryParser.parseField;case z.QueryLexer.EDIT_DISTANCE:return z.QueryParser.parseEditDistance;case z.QueryLexer.BOOST:return z.QueryParser.parseBoost;case z.QueryLexer.PRESENCE:return e.nextClause(),z.QueryParser.parsePresence;default:var i="Unexpected lexeme type '"+r.type+"'";throw new z.QueryParseError(i,r.start,r.end)}else e.nextClause()}},z.QueryParser.parseEditDistance=function(e){var t=e.consumeLexeme();if(null!=t){var r=parseInt(t.str,10);if(isNaN(r)){var i="edit distance must be numeric";throw new z.QueryParseError(i,t.start,t.end)}e.currentClause.editDistance=r;var n=e.peekLexeme();if(null!=n)switch(n.type){case z.QueryLexer.TERM:return e.nextClause(),z.QueryParser.parseTerm;case z.QueryLexer.FIELD:return e.nextClause(),z.QueryParser.parseField;case z.QueryLexer.EDIT_DISTANCE:return z.QueryParser.parseEditDistance;case z.QueryLexer.BOOST:return z.QueryParser.parseBoost;case z.QueryLexer.PRESENCE:return e.nextClause(),z.QueryParser.parsePresence;default:i="Unexpected lexeme type '"+n.type+"'";throw new z.QueryParseError(i,n.start,n.end)}else e.nextClause()}},z.QueryParser.parseBoost=function(e){var t=e.consumeLexeme();if(null!=t){var r=parseInt(t.str,10);if(isNaN(r)){var i="boost must be numeric";throw new z.QueryParseError(i,t.start,t.end)}e.currentClause.boost=r;var n=e.peekLexeme();if(null!=n)switch(n.type){case z.QueryLexer.TERM:return e.nextClause(),z.QueryParser.parseTerm;case z.QueryLexer.FIELD:return e.nextClause(),z.QueryParser.parseField;case z.QueryLexer.EDIT_DISTANCE:return z.QueryParser.parseEditDistance;case z.QueryLexer.BOOST:return z.QueryParser.parseBoost;case z.QueryLexer.PRESENCE:return e.nextClause(),z.QueryParser.parsePresence;default:i="Unexpected lexeme type '"+n.type+"'";throw new z.QueryParseError(i,n.start,n.end)}else e.nextClause()}},n=this,s=function(){return z},"function"==typeof define&&define.amd?define(s):"object"==typeof exports?module.exports=s():n.lunr=s()}();
\ No newline at end of file
+/**
+ * lunr - http://lunrjs.com - A bit like Solr, but much smaller and not as bright - 2.3.9
+ * Copyright (C) 2020 Oliver Nightingale
+ * @license MIT
+ */
+!function(){var e=function(t){var r=new e.Builder;return r.pipeline.add(e.trimmer,e.stopWordFilter,e.stemmer),r.searchPipeline.add(e.stemmer),t.call(r,r),r.build()};e.version="2.3.9",e.utils={},e.utils.warn=function(e){return function(t){e.console&&console.warn&&console.warn(t)}}(this),e.utils.asString=function(e){return void 0===e||null===e?"":e.toString()},e.utils.clone=function(e){if(null===e||void 0===e)return e;for(var t=Object.create(null),r=Object.keys(e),i=0;i<r.length;i++){var n=r[i],s=e[n];if(Array.isArray(s))t[n]=s.slice();else{if("string"!=typeof s&&"number"!=typeof s&&"boolean"!=typeof s)throw new TypeError("clone is not deep and does not support nested objects");t[n]=s}}return t},e.FieldRef=function(e,t,r){this.docRef=e,this.fieldName=t,this._stringValue=r},e.FieldRef.joiner="/",e.FieldRef.fromString=function(t){var r=t.indexOf(e.FieldRef.joiner);if(r===-1)throw"malformed field ref string";var i=t.slice(0,r),n=t.slice(r+1);return new e.FieldRef(n,i,t)},e.FieldRef.prototype.toString=function(){return void 0==this._stringValue&&(this._stringValue=this.fieldName+e.FieldRef.joiner+this.docRef),this._stringValue},e.Set=function(e){if(this.elements=Object.create(null),e){this.length=e.length;for(var t=0;t<this.length;t++)this.elements[e[t]]=!0}else this.length=0},e.Set.complete={intersect:function(e){return e},union:function(){return this},contains:function(){return!0}},e.Set.empty={intersect:function(){return this},union:function(e){return e},contains:function(){return!1}},e.Set.prototype.contains=function(e){return!!this.elements[e]},e.Set.prototype.intersect=function(t){var r,i,n,s=[];if(t===e.Set.complete)return this;if(t===e.Set.empty)return t;this.length<t.length?(r=this,i=t):(r=t,i=this),n=Object.keys(r.elements);for(var o=0;o<n.length;o++){var a=n[o];a in i.elements&&s.push(a)}return new e.Set(s)},e.Set.prototype.union=function(t){return t===e.Set.complete?e.Set.complete:t===e.Set.empty?this:new e.Set(Object.keys(this.elements).concat(Object.keys(t.elements)))},e.idf=function(e,t){var r=0;for(var i in e)"_index"!=i&&(r+=Object.keys(e[i]).length);var n=(t-r+.5)/(r+.5);return Math.log(1+Math.abs(n))},e.Token=function(e,t){this.str=e||"",this.metadata=t||{}},e.Token.prototype.toString=function(){return this.str},e.Token.prototype.update=function(e){return this.str=e(this.str,this.metadata),this},e.Token.prototype.clone=function(t){return t=t||function(e){return e},new e.Token(t(this.str,this.metadata),this.metadata)},e.tokenizer=function(t,r){if(null==t||void 0==t)return[];if(Array.isArray(t))return t.map(function(t){return new e.Token(e.utils.asString(t).toLowerCase(),e.utils.clone(r))});for(var i=t.toString().toLowerCase(),n=i.length,s=[],o=0,a=0;o<=n;o++){var u=i.charAt(o),l=o-a;if(u.match(e.tokenizer.separator)||o==n){if(l>0){var c=e.utils.clone(r)||{};c.position=[a,l],c.index=s.length,s.push(new e.Token(i.slice(a,o),c))}a=o+1}}return s},e.tokenizer.separator=/[\s\-]+/,e.Pipeline=function(){this._stack=[]},e.Pipeline.registeredFunctions=Object.create(null),e.Pipeline.registerFunction=function(t,r){r in this.registeredFunctions&&e.utils.warn("Overwriting existing registered function: "+r),t.label=r,e.Pipeline.registeredFunctions[t.label]=t},e.Pipeline.warnIfFunctionNotRegistered=function(t){var r=t.label&&t.label in this.registeredFunctions;r||e.utils.warn("Function is not registered with pipeline. This may cause problems when serialising the index.\n",t)},e.Pipeline.load=function(t){var r=new e.Pipeline;return t.forEach(function(t){var i=e.Pipeline.registeredFunctions[t];if(!i)throw new Error("Cannot load unregistered function: "+t);r.add(i)}),r},e.Pipeline.prototype.add=function(){var t=Array.prototype.slice.call(arguments);t.forEach(function(t){e.Pipeline.warnIfFunctionNotRegistered(t),this._stack.push(t)},this)},e.Pipeline.prototype.after=function(t,r){e.Pipeline.warnIfFunctionNotRegistered(r);var i=this._stack.indexOf(t);if(i==-1)throw new Error("Cannot find existingFn");i+=1,this._stack.splice(i,0,r)},e.Pipeline.prototype.before=function(t,r){e.Pipeline.warnIfFunctionNotRegistered(r);var i=this._stack.indexOf(t);if(i==-1)throw new Error("Cannot find existingFn");this._stack.splice(i,0,r)},e.Pipeline.prototype.remove=function(e){var t=this._stack.indexOf(e);t!=-1&&this._stack.splice(t,1)},e.Pipeline.prototype.run=function(e){for(var t=this._stack.length,r=0;r<t;r++){for(var i=this._stack[r],n=[],s=0;s<e.length;s++){var o=i(e[s],s,e);if(null!==o&&void 0!==o&&""!==o)if(Array.isArray(o))for(var a=0;a<o.length;a++)n.push(o[a]);else n.push(o)}e=n}return e},e.Pipeline.prototype.runString=function(t,r){var i=new e.Token(t,r);return this.run([i]).map(function(e){return e.toString()})},e.Pipeline.prototype.reset=function(){this._stack=[]},e.Pipeline.prototype.toJSON=function(){return this._stack.map(function(t){return e.Pipeline.warnIfFunctionNotRegistered(t),t.label})},e.Vector=function(e){this._magnitude=0,this.elements=e||[]},e.Vector.prototype.positionForIndex=function(e){if(0==this.elements.length)return 0;for(var t=0,r=this.elements.length/2,i=r-t,n=Math.floor(i/2),s=this.elements[2*n];i>1&&(s<e&&(t=n),s>e&&(r=n),s!=e);)i=r-t,n=t+Math.floor(i/2),s=this.elements[2*n];return s==e?2*n:s>e?2*n:s<e?2*(n+1):void 0},e.Vector.prototype.insert=function(e,t){this.upsert(e,t,function(){throw"duplicate index"})},e.Vector.prototype.upsert=function(e,t,r){this._magnitude=0;var i=this.positionForIndex(e);this.elements[i]==e?this.elements[i+1]=r(this.elements[i+1],t):this.elements.splice(i,0,e,t)},e.Vector.prototype.magnitude=function(){if(this._magnitude)return this._magnitude;for(var e=0,t=this.elements.length,r=1;r<t;r+=2){var i=this.elements[r];e+=i*i}return this._magnitude=Math.sqrt(e)},e.Vector.prototype.dot=function(e){for(var t=0,r=this.elements,i=e.elements,n=r.length,s=i.length,o=0,a=0,u=0,l=0;u<n&&l<s;)o=r[u],a=i[l],o<a?u+=2:o>a?l+=2:o==a&&(t+=r[u+1]*i[l+1],u+=2,l+=2);return t},e.Vector.prototype.similarity=function(e){return this.dot(e)/this.magnitude()||0},e.Vector.prototype.toArray=function(){for(var e=new Array(this.elements.length/2),t=1,r=0;t<this.elements.length;t+=2,r++)e[r]=this.elements[t];return e},e.Vector.prototype.toJSON=function(){return this.elements},e.stemmer=function(){var e={ational:"ate",tional:"tion",enci:"ence",anci:"ance",izer:"ize",bli:"ble",alli:"al",entli:"ent",eli:"e",ousli:"ous",ization:"ize",ation:"ate",ator:"ate",alism:"al",iveness:"ive",fulness:"ful",ousness:"ous",aliti:"al",iviti:"ive",biliti:"ble",logi:"log"},t={icate:"ic",ative:"",alize:"al",iciti:"ic",ical:"ic",ful:"",ness:""},r="[^aeiou]",i="[aeiouy]",n=r+"[^aeiouy]*",s=i+"[aeiou]*",o="^("+n+")?"+s+n,a="^("+n+")?"+s+n+"("+s+")?$",u="^("+n+")?"+s+n+s+n,l="^("+n+")?"+i,c=new RegExp(o),h=new RegExp(u),d=new RegExp(a),f=new RegExp(l),p=/^(.+?)(ss|i)es$/,y=/^(.+?)([^s])s$/,m=/^(.+?)eed$/,v=/^(.+?)(ed|ing)$/,g=/.$/,x=/(at|bl|iz)$/,w=new RegExp("([^aeiouylsz])\\1$"),Q=new RegExp("^"+n+i+"[^aeiouwxy]$"),k=/^(.+?[^aeiou])y$/,S=/^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/,E=/^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/,L=/^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/,b=/^(.+?)(s|t)(ion)$/,P=/^(.+?)e$/,T=/ll$/,O=new RegExp("^"+n+i+"[^aeiouwxy]$"),I=function(r){var i,n,s,o,a,u,l;if(r.length<3)return r;if(s=r.substr(0,1),"y"==s&&(r=s.toUpperCase()+r.substr(1)),o=p,a=y,o.test(r)?r=r.replace(o,"$1$2"):a.test(r)&&(r=r.replace(a,"$1$2")),o=m,a=v,o.test(r)){var I=o.exec(r);o=c,o.test(I[1])&&(o=g,r=r.replace(o,""))}else if(a.test(r)){var I=a.exec(r);i=I[1],a=f,a.test(i)&&(r=i,a=x,u=w,l=Q,a.test(r)?r+="e":u.test(r)?(o=g,r=r.replace(o,"")):l.test(r)&&(r+="e"))}if(o=k,o.test(r)){var I=o.exec(r);i=I[1],r=i+"i"}if(o=S,o.test(r)){var I=o.exec(r);i=I[1],n=I[2],o=c,o.test(i)&&(r=i+e[n])}if(o=E,o.test(r)){var I=o.exec(r);i=I[1],n=I[2],o=c,o.test(i)&&(r=i+t[n])}if(o=L,a=b,o.test(r)){var I=o.exec(r);i=I[1],o=h,o.test(i)&&(r=i)}else if(a.test(r)){var I=a.exec(r);i=I[1]+I[2],a=h,a.test(i)&&(r=i)}if(o=P,o.test(r)){var I=o.exec(r);i=I[1],o=h,a=d,u=O,(o.test(i)||a.test(i)&&!u.test(i))&&(r=i)}return o=T,a=h,o.test(r)&&a.test(r)&&(o=g,r=r.replace(o,"")),"y"==s&&(r=s.toLowerCase()+r.substr(1)),r};return function(e){return e.update(I)}}(),e.Pipeline.registerFunction(e.stemmer,"stemmer"),e.generateStopWordFilter=function(e){var t=e.reduce(function(e,t){return e[t]=t,e},{});return function(e){if(e&&t[e.toString()]!==e.toString())return e}},e.stopWordFilter=e.generateStopWordFilter(["a","able","about","across","after","all","almost","also","am","among","an","and","any","are","as","at","be","because","been","but","by","can","cannot","could","dear","did","do","does","either","else","ever","every","for","from","get","got","had","has","have","he","her","hers","him","his","how","however","i","if","in","into","is","it","its","just","least","let","like","likely","may","me","might","most","must","my","neither","no","nor","not","of","off","often","on","only","or","other","our","own","rather","said","say","says","she","should","since","so","some","than","that","the","their","them","then","there","these","they","this","tis","to","too","twas","us","wants","was","we","were","what","when","where","which","while","who","whom","why","will","with","would","yet","you","your"]),e.Pipeline.registerFunction(e.stopWordFilter,"stopWordFilter"),e.trimmer=function(e){return e.update(function(e){return e.replace(/^\W+/,"").replace(/\W+$/,"")})},e.Pipeline.registerFunction(e.trimmer,"trimmer"),e.TokenSet=function(){this["final"]=!1,this.edges={},this.id=e.TokenSet._nextId,e.TokenSet._nextId+=1},e.TokenSet._nextId=1,e.TokenSet.fromArray=function(t){for(var r=new e.TokenSet.Builder,i=0,n=t.length;i<n;i++)r.insert(t[i]);return r.finish(),r.root},e.TokenSet.fromClause=function(t){return"editDistance"in t?e.TokenSet.fromFuzzyString(t.term,t.editDistance):e.TokenSet.fromString(t.term)},e.TokenSet.fromFuzzyString=function(t,r){for(var i=new e.TokenSet,n=[{node:i,editsRemaining:r,str:t}];n.length;){var s=n.pop();if(s.str.length>0){var o,a=s.str.charAt(0);a in s.node.edges?o=s.node.edges[a]:(o=new e.TokenSet,s.node.edges[a]=o),1==s.str.length&&(o["final"]=!0),n.push({node:o,editsRemaining:s.editsRemaining,str:s.str.slice(1)})}if(0!=s.editsRemaining){if("*"in s.node.edges)var u=s.node.edges["*"];else{var u=new e.TokenSet;s.node.edges["*"]=u}if(0==s.str.length&&(u["final"]=!0),n.push({node:u,editsRemaining:s.editsRemaining-1,str:s.str}),s.str.length>1&&n.push({node:s.node,editsRemaining:s.editsRemaining-1,str:s.str.slice(1)}),1==s.str.length&&(s.node["final"]=!0),s.str.length>=1){if("*"in s.node.edges)var l=s.node.edges["*"];else{var l=new e.TokenSet;s.node.edges["*"]=l}1==s.str.length&&(l["final"]=!0),n.push({node:l,editsRemaining:s.editsRemaining-1,str:s.str.slice(1)})}if(s.str.length>1){var c,h=s.str.charAt(0),d=s.str.charAt(1);d in s.node.edges?c=s.node.edges[d]:(c=new e.TokenSet,s.node.edges[d]=c),1==s.str.length&&(c["final"]=!0),n.push({node:c,editsRemaining:s.editsRemaining-1,str:h+s.str.slice(2)})}}}return i},e.TokenSet.fromString=function(t){for(var r=new e.TokenSet,i=r,n=0,s=t.length;n<s;n++){var o=t[n],a=n==s-1;if("*"==o)r.edges[o]=r,r["final"]=a;else{var u=new e.TokenSet;u["final"]=a,r.edges[o]=u,r=u}}return i},e.TokenSet.prototype.toArray=function(){for(var e=[],t=[{prefix:"",node:this}];t.length;){var r=t.pop(),i=Object.keys(r.node.edges),n=i.length;r.node["final"]&&(r.prefix.charAt(0),e.push(r.prefix));for(var s=0;s<n;s++){var o=i[s];t.push({prefix:r.prefix.concat(o),node:r.node.edges[o]})}}return e},e.TokenSet.prototype.toString=function(){if(this._str)return this._str;for(var e=this["final"]?"1":"0",t=Object.keys(this.edges).sort(),r=t.length,i=0;i<r;i++){var n=t[i],s=this.edges[n];e=e+n+s.id}return e},e.TokenSet.prototype.intersect=function(t){for(var r=new e.TokenSet,i=void 0,n=[{qNode:t,output:r,node:this}];n.length;){i=n.pop();for(var s=Object.keys(i.qNode.edges),o=s.length,a=Object.keys(i.node.edges),u=a.length,l=0;l<o;l++)for(var c=s[l],h=0;h<u;h++){var d=a[h];if(d==c||"*"==c){var f=i.node.edges[d],p=i.qNode.edges[c],y=f["final"]&&p["final"],m=void 0;d in i.output.edges?(m=i.output.edges[d],m["final"]=m["final"]||y):(m=new e.TokenSet,m["final"]=y,i.output.edges[d]=m),n.push({qNode:p,output:m,node:f})}}}return r},e.TokenSet.Builder=function(){this.previousWord="",this.root=new e.TokenSet,this.uncheckedNodes=[],this.minimizedNodes={}},e.TokenSet.Builder.prototype.insert=function(t){var r,i=0;if(t<this.previousWord)throw new Error("Out of order word insertion");for(var n=0;n<t.length&&n<this.previousWord.length&&t[n]==this.previousWord[n];n++)i++;this.minimize(i),r=0==this.uncheckedNodes.length?this.root:this.uncheckedNodes[this.uncheckedNodes.length-1].child;for(var n=i;n<t.length;n++){var s=new e.TokenSet,o=t[n];r.edges[o]=s,this.uncheckedNodes.push({parent:r,"char":o,child:s}),r=s}r["final"]=!0,this.previousWord=t},e.TokenSet.Builder.prototype.finish=function(){this.minimize(0)},e.TokenSet.Builder.prototype.minimize=function(e){for(var t=this.uncheckedNodes.length-1;t>=e;t--){var r=this.uncheckedNodes[t],i=r.child.toString();i in this.minimizedNodes?r.parent.edges[r["char"]]=this.minimizedNodes[i]:(r.child._str=i,this.minimizedNodes[i]=r.child),this.uncheckedNodes.pop()}},e.Index=function(e){this.invertedIndex=e.invertedIndex,this.fieldVectors=e.fieldVectors,this.tokenSet=e.tokenSet,this.fields=e.fields,this.pipeline=e.pipeline},e.Index.prototype.search=function(t){return this.query(function(r){var i=new e.QueryParser(t,r);i.parse()})},e.Index.prototype.query=function(t){for(var r=new e.Query(this.fields),i=Object.create(null),n=Object.create(null),s=Object.create(null),o=Object.create(null),a=Object.create(null),u=0;u<this.fields.length;u++)n[this.fields[u]]=new e.Vector;t.call(r,r);for(var u=0;u<r.clauses.length;u++){var l=r.clauses[u],c=null,h=e.Set.empty;c=l.usePipeline?this.pipeline.runString(l.term,{fields:l.fields}):[l.term];for(var d=0;d<c.length;d++){var f=c[d];l.term=f;var p=e.TokenSet.fromClause(l),y=this.tokenSet.intersect(p).toArray();if(0===y.length&&l.presence===e.Query.presence.REQUIRED){for(var m=0;m<l.fields.length;m++){var v=l.fields[m];o[v]=e.Set.empty}break}for(var g=0;g<y.length;g++)for(var x=y[g],w=this.invertedIndex[x],Q=w._index,m=0;m<l.fields.length;m++){var v=l.fields[m],k=w[v],S=Object.keys(k),E=x+"/"+v,L=new e.Set(S);if(l.presence==e.Query.presence.REQUIRED&&(h=h.union(L),void 0===o[v]&&(o[v]=e.Set.complete)),l.presence!=e.Query.presence.PROHIBITED){if(n[v].upsert(Q,l.boost,function(e,t){return e+t}),!s[E]){for(var b=0;b<S.length;b++){var P,T=S[b],O=new e.FieldRef(T,v),I=k[T];void 0===(P=i[O])?i[O]=new e.MatchData(x,v,I):P.add(x,v,I)}s[E]=!0}}else void 0===a[v]&&(a[v]=e.Set.empty),a[v]=a[v].union(L)}}if(l.presence===e.Query.presence.REQUIRED)for(var m=0;m<l.fields.length;m++){var v=l.fields[m];o[v]=o[v].intersect(h)}}for(var R=e.Set.complete,F=e.Set.empty,u=0;u<this.fields.length;u++){var v=this.fields[u];o[v]&&(R=R.intersect(o[v])),a[v]&&(F=F.union(a[v]))}var C=Object.keys(i),N=[],_=Object.create(null);if(r.isNegated()){C=Object.keys(this.fieldVectors);for(var u=0;u<C.length;u++){var O=C[u],j=e.FieldRef.fromString(O);i[O]=new e.MatchData}}for(var u=0;u<C.length;u++){var j=e.FieldRef.fromString(C[u]),D=j.docRef;if(R.contains(D)&&!F.contains(D)){var A,B=this.fieldVectors[j],V=n[j.fieldName].similarity(B);if(void 0!==(A=_[D]))A.score+=V,A.matchData.combine(i[j]);else{var z={ref:D,score:V,matchData:i[j]};_[D]=z,N.push(z)}}}return N.sort(function(e,t){return t.score-e.score})},e.Index.prototype.toJSON=function(){var t=Object.keys(this.invertedIndex).sort().map(function(e){return[e,this.invertedIndex[e]]},this),r=Object.keys(this.fieldVectors).map(function(e){return[e,this.fieldVectors[e].toJSON()]},this);return{version:e.version,fields:this.fields,fieldVectors:r,invertedIndex:t,pipeline:this.pipeline.toJSON()}},e.Index.load=function(t){var r={},i={},n=t.fieldVectors,s=Object.create(null),o=t.invertedIndex,a=new e.TokenSet.Builder,u=e.Pipeline.load(t.pipeline);t.version!=e.version&&e.utils.warn("Version mismatch when loading serialised index. Current version of lunr '"+e.version+"' does not match serialized index '"+t.version+"'");for(var l=0;l<n.length;l++){var c=n[l],h=c[0],d=c[1];i[h]=new e.Vector(d)}for(var l=0;l<o.length;l++){var c=o[l],f=c[0],p=c[1];a.insert(f),s[f]=p}return a.finish(),r.fields=t.fields,r.fieldVectors=i,r.invertedIndex=s,r.tokenSet=a.root,r.pipeline=u,new e.Index(r)},e.Builder=function(){this._ref="id",this._fields=Object.create(null),this._documents=Object.create(null),this.invertedIndex=Object.create(null),this.fieldTermFrequencies={},this.fieldLengths={},this.tokenizer=e.tokenizer,this.pipeline=new e.Pipeline,this.searchPipeline=new e.Pipeline,this.documentCount=0,this._b=.75,this._k1=1.2,this.termIndex=0,this.metadataWhitelist=[]},e.Builder.prototype.ref=function(e){this._ref=e},e.Builder.prototype.field=function(e,t){if(/\//.test(e))throw new RangeError("Field '"+e+"' contains illegal character '/'");this._fields[e]=t||{}},e.Builder.prototype.b=function(e){e<0?this._b=0:e>1?this._b=1:this._b=e},e.Builder.prototype.k1=function(e){this._k1=e},e.Builder.prototype.add=function(t,r){var i=t[this._ref],n=Object.keys(this._fields);this._documents[i]=r||{},this.documentCount+=1;for(var s=0;s<n.length;s++){var o=n[s],a=this._fields[o].extractor,u=a?a(t):t[o],l=this.tokenizer(u,{fields:[o]}),c=this.pipeline.run(l),h=new e.FieldRef(i,o),d=Object.create(null);this.fieldTermFrequencies[h]=d,this.fieldLengths[h]=0,this.fieldLengths[h]+=c.length;for(var f=0;f<c.length;f++){var p=c[f];if(void 0==d[p]&&(d[p]=0),d[p]+=1,void 0==this.invertedIndex[p]){var y=Object.create(null);y._index=this.termIndex,this.termIndex+=1;for(var m=0;m<n.length;m++)y[n[m]]=Object.create(null);this.invertedIndex[p]=y}void 0==this.invertedIndex[p][o][i]&&(this.invertedIndex[p][o][i]=Object.create(null));for(var v=0;v<this.metadataWhitelist.length;v++){var g=this.metadataWhitelist[v],x=p.metadata[g];void 0==this.invertedIndex[p][o][i][g]&&(this.invertedIndex[p][o][i][g]=[]),this.invertedIndex[p][o][i][g].push(x)}}}},e.Builder.prototype.calculateAverageFieldLengths=function(){for(var t=Object.keys(this.fieldLengths),r=t.length,i={},n={},s=0;s<r;s++){var o=e.FieldRef.fromString(t[s]),a=o.fieldName;n[a]||(n[a]=0),n[a]+=1,i[a]||(i[a]=0),i[a]+=this.fieldLengths[o]}for(var u=Object.keys(this._fields),s=0;s<u.length;s++){var l=u[s];i[l]=i[l]/n[l]}this.averageFieldLength=i},e.Builder.prototype.createFieldVectors=function(){for(var t={},r=Object.keys(this.fieldTermFrequencies),i=r.length,n=Object.create(null),s=0;s<i;s++){for(var o=e.FieldRef.fromString(r[s]),a=o.fieldName,u=this.fieldLengths[o],l=new e.Vector,c=this.fieldTermFrequencies[o],h=Object.keys(c),d=h.length,f=this._fields[a].boost||1,p=this._documents[o.docRef].boost||1,y=0;y<d;y++){var m,v,g,x=h[y],w=c[x],Q=this.invertedIndex[x]._index;void 0===n[x]?(m=e.idf(this.invertedIndex[x],this.documentCount),n[x]=m):m=n[x],v=m*((this._k1+1)*w)/(this._k1*(1-this._b+this._b*(u/this.averageFieldLength[a]))+w),v*=f,v*=p,g=Math.round(1e3*v)/1e3,l.insert(Q,g)}t[o]=l}this.fieldVectors=t},e.Builder.prototype.createTokenSet=function(){this.tokenSet=e.TokenSet.fromArray(Object.keys(this.invertedIndex).sort())},e.Builder.prototype.build=function(){return this.calculateAverageFieldLengths(),this.createFieldVectors(),this.createTokenSet(),new e.Index({invertedIndex:this.invertedIndex,fieldVectors:this.fieldVectors,tokenSet:this.tokenSet,fields:Object.keys(this._fields),pipeline:this.searchPipeline})},e.Builder.prototype.use=function(e){var t=Array.prototype.slice.call(arguments,1);t.unshift(this),e.apply(this,t)},e.MatchData=function(e,t,r){for(var i=Object.create(null),n=Object.keys(r||{}),s=0;s<n.length;s++){var o=n[s];i[o]=r[o].slice()}this.metadata=Object.create(null),void 0!==e&&(this.metadata[e]=Object.create(null),this.metadata[e][t]=i)},e.MatchData.prototype.combine=function(e){for(var t=Object.keys(e.metadata),r=0;r<t.length;r++){var i=t[r],n=Object.keys(e.metadata[i]);void 0==this.metadata[i]&&(this.metadata[i]=Object.create(null));for(var s=0;s<n.length;s++){var o=n[s],a=Object.keys(e.metadata[i][o]);void 0==this.metadata[i][o]&&(this.metadata[i][o]=Object.create(null));for(var u=0;u<a.length;u++){var l=a[u];void 0==this.metadata[i][o][l]?this.metadata[i][o][l]=e.metadata[i][o][l]:this.metadata[i][o][l]=this.metadata[i][o][l].concat(e.metadata[i][o][l])}}}},e.MatchData.prototype.add=function(e,t,r){if(!(e in this.metadata))return this.metadata[e]=Object.create(null),void(this.metadata[e][t]=r);if(!(t in this.metadata[e]))return void(this.metadata[e][t]=r);for(var i=Object.keys(r),n=0;n<i.length;n++){var s=i[n];s in this.metadata[e][t]?this.metadata[e][t][s]=this.metadata[e][t][s].concat(r[s]):this.metadata[e][t][s]=r[s]}},e.Query=function(e){this.clauses=[],this.allFields=e},e.Query.wildcard=new String("*"),e.Query.wildcard.NONE=0,e.Query.wildcard.LEADING=1,e.Query.wildcard.TRAILING=2,e.Query.presence={OPTIONAL:1,REQUIRED:2,PROHIBITED:3},e.Query.prototype.clause=function(t){return"fields"in t||(t.fields=this.allFields),"boost"in t||(t.boost=1),"usePipeline"in t||(t.usePipeline=!0),"wildcard"in t||(t.wildcard=e.Query.wildcard.NONE),t.wildcard&e.Query.wildcard.LEADING&&t.term.charAt(0)!=e.Query.wildcard&&(t.term="*"+t.term),t.wildcard&e.Query.wildcard.TRAILING&&t.term.slice(-1)!=e.Query.wildcard&&(t.term=""+t.term+"*"),"presence"in t||(t.presence=e.Query.presence.OPTIONAL),this.clauses.push(t),this},e.Query.prototype.isNegated=function(){for(var t=0;t<this.clauses.length;t++)if(this.clauses[t].presence!=e.Query.presence.PROHIBITED)return!1;return!0},e.Query.prototype.term=function(t,r){if(Array.isArray(t))return t.forEach(function(t){this.term(t,e.utils.clone(r))},this),this;var i=r||{};return i.term=t.toString(),this.clause(i),this},e.QueryParseError=function(e,t,r){this.name="QueryParseError",this.message=e,this.start=t,this.end=r},e.QueryParseError.prototype=new Error,e.QueryLexer=function(e){this.lexemes=[],this.str=e,this.length=e.length,this.pos=0,this.start=0,this.escapeCharPositions=[]},e.QueryLexer.prototype.run=function(){for(var t=e.QueryLexer.lexText;t;)t=t(this)},e.QueryLexer.prototype.sliceString=function(){for(var e=[],t=this.start,r=this.pos,i=0;i<this.escapeCharPositions.length;i++)r=this.escapeCharPositions[i],e.push(this.str.slice(t,r)),t=r+1;return e.push(this.str.slice(t,this.pos)),this.escapeCharPositions.length=0,e.join("")},e.QueryLexer.prototype.emit=function(e){this.lexemes.push({type:e,str:this.sliceString(),start:this.start,end:this.pos}),this.start=this.pos},e.QueryLexer.prototype.escapeCharacter=function(){this.escapeCharPositions.push(this.pos-1),this.pos+=1},e.QueryLexer.prototype.next=function(){if(this.pos>=this.length)return e.QueryLexer.EOS;var t=this.str.charAt(this.pos);return this.pos+=1,t},e.QueryLexer.prototype.width=function(){return this.pos-this.start},e.QueryLexer.prototype.ignore=function(){this.start==this.pos&&(this.pos+=1),this.start=this.pos},e.QueryLexer.prototype.backup=function(){this.pos-=1},e.QueryLexer.prototype.acceptDigitRun=function(){var t,r;do t=this.next(),r=t.charCodeAt(0);while(r>47&&r<58);t!=e.QueryLexer.EOS&&this.backup()},e.QueryLexer.prototype.more=function(){return this.pos<this.length},e.QueryLexer.EOS="EOS",e.QueryLexer.FIELD="FIELD",e.QueryLexer.TERM="TERM",e.QueryLexer.EDIT_DISTANCE="EDIT_DISTANCE",e.QueryLexer.BOOST="BOOST",e.QueryLexer.PRESENCE="PRESENCE",e.QueryLexer.lexField=function(t){return t.backup(),t.emit(e.QueryLexer.FIELD),t.ignore(),e.QueryLexer.lexText},e.QueryLexer.lexTerm=function(t){if(t.width()>1&&(t.backup(),t.emit(e.QueryLexer.TERM)),t.ignore(),t.more())return e.QueryLexer.lexText},e.QueryLexer.lexEditDistance=function(t){return t.ignore(),t.acceptDigitRun(),t.emit(e.QueryLexer.EDIT_DISTANCE),e.QueryLexer.lexText},e.QueryLexer.lexBoost=function(t){return t.ignore(),t.acceptDigitRun(),t.emit(e.QueryLexer.BOOST),e.QueryLexer.lexText},e.QueryLexer.lexEOS=function(t){t.width()>0&&t.emit(e.QueryLexer.TERM)},e.QueryLexer.termSeparator=e.tokenizer.separator,e.QueryLexer.lexText=function(t){for(;;){var r=t.next();if(r==e.QueryLexer.EOS)return e.QueryLexer.lexEOS;if(92!=r.charCodeAt(0)){if(":"==r)return e.QueryLexer.lexField;if("~"==r)return t.backup(),t.width()>0&&t.emit(e.QueryLexer.TERM),e.QueryLexer.lexEditDistance;if("^"==r)return t.backup(),t.width()>0&&t.emit(e.QueryLexer.TERM),e.QueryLexer.lexBoost;if("+"==r&&1===t.width())return t.emit(e.QueryLexer.PRESENCE),e.QueryLexer.lexText;if("-"==r&&1===t.width())return t.emit(e.QueryLexer.PRESENCE),e.QueryLexer.lexText;if(r.match(e.QueryLexer.termSeparator))return e.QueryLexer.lexTerm}else t.escapeCharacter()}},e.QueryParser=function(t,r){this.lexer=new e.QueryLexer(t),this.query=r,this.currentClause={},this.lexemeIdx=0},e.QueryParser.prototype.parse=function(){this.lexer.run(),this.lexemes=this.lexer.lexemes;for(var t=e.QueryParser.parseClause;t;)t=t(this);return this.query},e.QueryParser.prototype.peekLexeme=function(){return this.lexemes[this.lexemeIdx]},e.QueryParser.prototype.consumeLexeme=function(){var e=this.peekLexeme();return this.lexemeIdx+=1,e},e.QueryParser.prototype.nextClause=function(){var e=this.currentClause;this.query.clause(e),this.currentClause={}},e.QueryParser.parseClause=function(t){var r=t.peekLexeme();if(void 0!=r)switch(r.type){case e.QueryLexer.PRESENCE:return e.QueryParser.parsePresence;case e.QueryLexer.FIELD:return e.QueryParser.parseField;case e.QueryLexer.TERM:return e.QueryParser.parseTerm;default:var i="expected either a field or a term, found "+r.type;throw r.str.length>=1&&(i+=" with value '"+r.str+"'"),new e.QueryParseError(i,r.start,r.end)}},e.QueryParser.parsePresence=function(t){var r=t.consumeLexeme();if(void 0!=r){switch(r.str){case"-":t.currentClause.presence=e.Query.presence.PROHIBITED;break;case"+":t.currentClause.presence=e.Query.presence.REQUIRED;break;default:var i="unrecognised presence operator'"+r.str+"'";throw new e.QueryParseError(i,r.start,r.end)}var n=t.peekLexeme();if(void 0==n){var i="expecting term or field, found nothing";throw new e.QueryParseError(i,r.start,r.end)}switch(n.type){case e.QueryLexer.FIELD:return e.QueryParser.parseField;case e.QueryLexer.TERM:return e.QueryParser.parseTerm;default:var i="expecting term or field, found '"+n.type+"'";throw new e.QueryParseError(i,n.start,n.end)}}},e.QueryParser.parseField=function(t){var r=t.consumeLexeme();if(void 0!=r){if(t.query.allFields.indexOf(r.str)==-1){var i=t.query.allFields.map(function(e){return"'"+e+"'"}).join(", "),n="unrecognised field '"+r.str+"', possible fields: "+i;throw new e.QueryParseError(n,r.start,r.end)}t.currentClause.fields=[r.str];var s=t.peekLexeme();if(void 0==s){var n="expecting term, found nothing";throw new e.QueryParseError(n,r.start,r.end)}switch(s.type){case e.QueryLexer.TERM:return e.QueryParser.parseTerm;default:var n="expecting term, found '"+s.type+"'";throw new e.QueryParseError(n,s.start,s.end)}}},e.QueryParser.parseTerm=function(t){var r=t.consumeLexeme();if(void 0!=r){t.currentClause.term=r.str.toLowerCase(),r.str.indexOf("*")!=-1&&(t.currentClause.usePipeline=!1);var i=t.peekLexeme();if(void 0==i)return void t.nextClause();switch(i.type){case e.QueryLexer.TERM:return t.nextClause(),e.QueryParser.parseTerm;case e.QueryLexer.FIELD:return t.nextClause(),e.QueryParser.parseField;case e.QueryLexer.EDIT_DISTANCE:return e.QueryParser.parseEditDistance;case e.QueryLexer.BOOST:return e.QueryParser.parseBoost;case e.QueryLexer.PRESENCE:return t.nextClause(),e.QueryParser.parsePresence;default:var n="Unexpected lexeme type '"+i.type+"'";throw new e.QueryParseError(n,i.start,i.end)}}},e.QueryParser.parseEditDistance=function(t){var r=t.consumeLexeme();if(void 0!=r){var i=parseInt(r.str,10);if(isNaN(i)){var n="edit distance must be numeric";throw new e.QueryParseError(n,r.start,r.end)}t.currentClause.editDistance=i;var s=t.peekLexeme();if(void 0==s)return void t.nextClause();switch(s.type){case e.QueryLexer.TERM:return t.nextClause(),e.QueryParser.parseTerm;case e.QueryLexer.FIELD:return t.nextClause(),e.QueryParser.parseField;case e.QueryLexer.EDIT_DISTANCE:return e.QueryParser.parseEditDistance;case e.QueryLexer.BOOST:return e.QueryParser.parseBoost;case e.QueryLexer.PRESENCE:return t.nextClause(),e.QueryParser.parsePresence;default:var n="Unexpected lexeme type '"+s.type+"'";throw new e.QueryParseError(n,s.start,s.end)}}},e.QueryParser.parseBoost=function(t){var r=t.consumeLexeme();if(void 0!=r){var i=parseInt(r.str,10);if(isNaN(i)){var n="boost must be numeric";throw new e.QueryParseError(n,r.start,r.end)}t.currentClause.boost=i;var s=t.peekLexeme();if(void 0==s)return void t.nextClause();switch(s.type){case e.QueryLexer.TERM:return t.nextClause(),e.QueryParser.parseTerm;case e.QueryLexer.FIELD:return t.nextClause(),e.QueryParser.parseField;case e.QueryLexer.EDIT_DISTANCE:return e.QueryParser.parseEditDistance;case e.QueryLexer.BOOST:return e.QueryParser.parseBoost;case e.QueryLexer.PRESENCE:return t.nextClause(),e.QueryParser.parsePresence;default:var n="Unexpected lexeme type '"+s.type+"'";throw new e.QueryParseError(n,s.start,s.end)}}},function(e,t){"function"==typeof define&&define.amd?define(t):"object"==typeof exports?module.exports=t():e.lunr=t()}(this,function(){return e})}();
diff --git a/assets/js/main.min.js b/assets/js/main.min.js
old mode 100755
new mode 100644
index 8a9e93abc7fb..9ae91ed20349
--- a/assets/js/main.min.js
+++ b/assets/js/main.min.js
@@ -1,9 +1,7 @@
 /*!
- * Minimal Mistakes Jekyll Theme 4.20.1 by Michael Rose
- * Copyright 2013-2020 Michael Rose - mademistakes.com | @mmistakes
- * Licensed under MIT
+ * Minimal Mistakes Jekyll Theme 4.26.2 by Michael Rose
+ * Copyright 2013-2024 Michael Rose - mademistakes.com | @mmistakes
+ * Free for personal and commercial use under the MIT license
+ * https://github.com/mmistakes/minimal-mistakes/blob/master/LICENSE
  */
-!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(e,t){"use strict";function n(e,t,n){n=n||ue;var r,o,i=n.createElement("script");if(i.text=e,t)for(r in Ce)o=t[r]||t.getAttribute&&t.getAttribute(r),o&&i.setAttribute(r,o);n.head.appendChild(i).parentNode.removeChild(i)}function r(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?he[me.call(e)]||"object":typeof e}function o(e){var t=!!e&&"length"in e&&e.length,n=r(e);return xe(e)||we(e)?!1:"array"===n||0===t||"number"==typeof t&&t>0&&t-1 in e}function i(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()}function a(e,t,n){return xe(t)?Ee.grep(e,function(e,r){return!!t.call(e,r,e)!==n}):t.nodeType?Ee.grep(e,function(e){return e===t!==n}):"string"!=typeof t?Ee.grep(e,function(e){return pe.call(t,e)>-1!==n}):Ee.filter(t,e,n)}function s(e,t){for(;(e=e[t])&&1!==e.nodeType;);return e}function u(e){var t={};return Ee.each(e.match(qe)||[],function(e,n){t[n]=!0}),t}function l(e){return e}function c(e){throw e}function f(e,t,n,r){var o;try{e&&xe(o=e.promise)?o.call(e).done(t).fail(n):e&&xe(o=e.then)?o.call(e,t,n):t.apply(void 0,[e].slice(r))}catch(e){n.apply(void 0,[e])}}function d(){ue.removeEventListener("DOMContentLoaded",d),e.removeEventListener("load",d),Ee.ready()}function p(e,t){return t.toUpperCase()}function h(e){return e.replace(Be,"ms-").replace($e,p)}function m(){this.expando=Ee.expando+m.uid++}function g(e){return"true"===e?!0:"false"===e?!1:"null"===e?null:e===+e+""?+e:Ue.test(e)?JSON.parse(e):e}function v(e,t,n){var r;if(void 0===n&&1===e.nodeType)if(r="data-"+t.replace(Xe,"-$&").toLowerCase(),n=e.getAttribute(r),"string"==typeof n){try{n=g(n)}catch(o){}We.set(e,t,n)}else n=void 0;return n}function y(e,t,n,r){var o,i,a=20,s=r?function(){return r.cur()}:function(){return Ee.css(e,t,"")},u=s(),l=n&&n[3]||(Ee.cssNumber[t]?"":"px"),c=e.nodeType&&(Ee.cssNumber[t]||"px"!==l&&+u)&&Ye.exec(Ee.css(e,t));if(c&&c[3]!==l){for(u/=2,l=l||c[3],c=+u||1;a--;)Ee.style(e,t,c+l),(1-i)*(1-(i=s()/u||.5))<=0&&(a=0),c/=i;c=2*c,Ee.style(e,t,c+l),n=n||[]}return n&&(c=+c||+u||0,o=n[1]?c+(n[1]+1)*n[2]:+n[2],r&&(r.unit=l,r.start=c,r.end=o)),o}function b(e){var t,n=e.ownerDocument,r=e.nodeName,o=tt[r];return o?o:(t=n.body.appendChild(n.createElement(r)),o=Ee.css(t,"display"),t.parentNode.removeChild(t),"none"===o&&(o="block"),tt[r]=o,o)}function x(e,t){for(var n,r,o=[],i=0,a=e.length;a>i;i++)r=e[i],r.style&&(n=r.style.display,t?("none"===n&&(o[i]=ze.get(r,"display")||null,o[i]||(r.style.display="")),""===r.style.display&&Je(r)&&(o[i]=b(r))):"none"!==n&&(o[i]="none",ze.set(r,"display",n)));for(i=0;a>i;i++)null!=o[i]&&(e[i].style.display=o[i]);return e}function w(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&i(e,t)?Ee.merge([e],n):n}function C(e,t){for(var n=0,r=e.length;r>n;n++)ze.set(e[n],"globalEval",!t||ze.get(t[n],"globalEval"))}function T(e,t,n,o,i){for(var a,s,u,l,c,f,d=t.createDocumentFragment(),p=[],h=0,m=e.length;m>h;h++)if(a=e[h],a||0===a)if("object"===r(a))Ee.merge(p,a.nodeType?[a]:a);else if(at.test(a)){for(s=s||d.appendChild(t.createElement("div")),u=(rt.exec(a)||["",""])[1].toLowerCase(),l=it[u]||it._default,s.innerHTML=l[1]+Ee.htmlPrefilter(a)+l[2],f=l[0];f--;)s=s.lastChild;Ee.merge(p,s.childNodes),s=d.firstChild,s.textContent=""}else p.push(t.createTextNode(a));for(d.textContent="",h=0;a=p[h++];)if(o&&Ee.inArray(a,o)>-1)i&&i.push(a);else if(c=Ke(a),s=w(d.appendChild(a),"script"),c&&C(s),n)for(f=0;a=s[f++];)ot.test(a.type||"")&&n.push(a);return d}function E(){return!0}function S(){return!1}function k(e,t){return e===A()==("focus"===t)}function A(){try{return ue.activeElement}catch(e){}}function N(e,t,n,r,o,i){var a,s;if("object"==typeof t){"string"!=typeof n&&(r=r||n,n=void 0);for(s in t)N(e,s,n,r,t[s],i);return e}if(null==r&&null==o?(o=n,r=n=void 0):null==o&&("string"==typeof n?(o=r,r=void 0):(o=r,r=n,n=void 0)),o===!1)o=S;else if(!o)return e;return 1===i&&(a=o,o=function(e){return Ee().off(e),a.apply(this,arguments)},o.guid=a.guid||(a.guid=Ee.guid++)),e.each(function(){Ee.event.add(this,t,o,r,n)})}function j(e,t,n){return n?(ze.set(e,t,!1),void Ee.event.add(e,t,{namespace:!1,handler:function(e){var r,o,i=ze.get(this,t);if(1&e.isTrigger&&this[t]){if(i.length)(Ee.event.special[t]||{}).delegateType&&e.stopPropagation();else if(i=ce.call(arguments),ze.set(this,t,i),r=n(this,t),this[t](),o=ze.get(this,t),i!==o||r?ze.set(this,t,!1):o={},i!==o)return e.stopImmediatePropagation(),e.preventDefault(),o.value}else i.length&&(ze.set(this,t,{value:Ee.event.trigger(Ee.extend(i[0],Ee.Event.prototype),i.slice(1),this)}),e.stopImmediatePropagation())}})):void(void 0===ze.get(e,t)&&Ee.event.add(e,t,E))}function I(e,t){return i(e,"table")&&i(11!==t.nodeType?t:t.firstChild,"tr")?Ee(e).children("tbody")[0]||e:e}function L(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function D(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function O(e,t){var n,r,o,i,a,s,u,l;if(1===t.nodeType){if(ze.hasData(e)&&(i=ze.access(e),a=ze.set(t,i),l=i.events)){delete a.handle,a.events={};for(o in l)for(n=0,r=l[o].length;r>n;n++)Ee.event.add(t,o,l[o][n])}We.hasData(e)&&(s=We.access(e),u=Ee.extend({},s),We.set(t,u))}}function H(e,t){var n=t.nodeName.toLowerCase();"input"===n&&nt.test(e.type)?t.checked=e.checked:"input"!==n&&"textarea"!==n||(t.defaultValue=e.defaultValue)}function P(e,t,r,o){t=fe.apply([],t);var i,a,s,u,l,c,f=0,d=e.length,p=d-1,h=t[0],m=xe(h);if(m||d>1&&"string"==typeof h&&!be.checkClone&&dt.test(h))return e.each(function(n){var i=e.eq(n);m&&(t[0]=h.call(this,n,i.html())),P(i,t,r,o)});if(d&&(i=T(t,e[0].ownerDocument,!1,e,o),a=i.firstChild,1===i.childNodes.length&&(i=a),a||o)){for(s=Ee.map(w(i,"script"),L),u=s.length;d>f;f++)l=i,f!==p&&(l=Ee.clone(l,!0,!0),u&&Ee.merge(s,w(l,"script"))),r.call(e[f],l,f);if(u)for(c=s[s.length-1].ownerDocument,Ee.map(s,D),f=0;u>f;f++)l=s[f],ot.test(l.type||"")&&!ze.access(l,"globalEval")&&Ee.contains(c,l)&&(l.src&&"module"!==(l.type||"").toLowerCase()?Ee._evalUrl&&!l.noModule&&Ee._evalUrl(l.src,{nonce:l.nonce||l.getAttribute("nonce")}):n(l.textContent.replace(pt,""),l,c))}return e}function q(e,t,n){for(var r,o=t?Ee.filter(t,e):e,i=0;null!=(r=o[i]);i++)n||1!==r.nodeType||Ee.cleanData(w(r)),r.parentNode&&(n&&Ke(r)&&C(w(r,"script")),r.parentNode.removeChild(r));return e}function M(e,t,n){var r,o,i,a,s=e.style;return n=n||mt(e),n&&(a=n.getPropertyValue(t)||n[t],""!==a||Ke(e)||(a=Ee.style(e,t)),!be.pixelBoxStyles()&&ht.test(a)&&gt.test(t)&&(r=s.width,o=s.minWidth,i=s.maxWidth,s.minWidth=s.maxWidth=s.width=a,a=n.width,s.width=r,s.minWidth=o,s.maxWidth=i)),void 0!==a?a+"":a}function _(e,t){return{get:function(){return e()?void delete this.get:(this.get=t).apply(this,arguments)}}}function R(e){for(var t=e[0].toUpperCase()+e.slice(1),n=vt.length;n--;)if(e=vt[n]+t,e in yt)return e}function B(e){var t=Ee.cssProps[e]||bt[e];return t?t:e in yt?e:bt[e]=R(e)||e}function $(e,t,n){var r=Ye.exec(t);return r?Math.max(0,r[2]-(n||0))+(r[3]||"px"):t}function F(e,t,n,r,o,i){var a="width"===t?1:0,s=0,u=0;if(n===(r?"border":"content"))return 0;for(;4>a;a+=2)"margin"===n&&(u+=Ee.css(e,n+Ve[a],!0,o)),r?("content"===n&&(u-=Ee.css(e,"padding"+Ve[a],!0,o)),"margin"!==n&&(u-=Ee.css(e,"border"+Ve[a]+"Width",!0,o))):(u+=Ee.css(e,"padding"+Ve[a],!0,o),"padding"!==n?u+=Ee.css(e,"border"+Ve[a]+"Width",!0,o):s+=Ee.css(e,"border"+Ve[a]+"Width",!0,o));return!r&&i>=0&&(u+=Math.max(0,Math.ceil(e["offset"+t[0].toUpperCase()+t.slice(1)]-i-u-s-.5))||0),u}function z(e,t,n){var r=mt(e),o=!be.boxSizingReliable()||n,i=o&&"border-box"===Ee.css(e,"boxSizing",!1,r),a=i,s=M(e,t,r),u="offset"+t[0].toUpperCase()+t.slice(1);if(ht.test(s)){if(!n)return s;s="auto"}return(!be.boxSizingReliable()&&i||"auto"===s||!parseFloat(s)&&"inline"===Ee.css(e,"display",!1,r))&&e.getClientRects().length&&(i="border-box"===Ee.css(e,"boxSizing",!1,r),a=u in e,a&&(s=e[u])),s=parseFloat(s)||0,s+F(e,t,n||(i?"border":"content"),a,r,s)+"px"}function W(e,t,n,r,o){return new W.prototype.init(e,t,n,r,o)}function U(){St&&(ue.hidden===!1&&e.requestAnimationFrame?e.requestAnimationFrame(U):e.setTimeout(U,Ee.fx.interval),Ee.fx.tick())}function X(){return e.setTimeout(function(){Et=void 0}),Et=Date.now()}function Q(e,t){var n,r=0,o={height:e};for(t=t?1:0;4>r;r+=2-t)n=Ve[r],o["margin"+n]=o["padding"+n]=e;return t&&(o.opacity=o.width=e),o}function Y(e,t,n){for(var r,o=(K.tweeners[t]||[]).concat(K.tweeners["*"]),i=0,a=o.length;a>i;i++)if(r=o[i].call(n,t,e))return r}function V(e,t,n){var r,o,i,a,s,u,l,c,f="width"in t||"height"in t,d=this,p={},h=e.style,m=e.nodeType&&Je(e),g=ze.get(e,"fxshow");n.queue||(a=Ee._queueHooks(e,"fx"),null==a.unqueued&&(a.unqueued=0,s=a.empty.fire,a.empty.fire=function(){a.unqueued||s()}),a.unqueued++,d.always(function(){d.always(function(){a.unqueued--,Ee.queue(e,"fx").length||a.empty.fire()})}));for(r in t)if(o=t[r],kt.test(o)){if(delete t[r],i=i||"toggle"===o,o===(m?"hide":"show")){if("show"!==o||!g||void 0===g[r])continue;m=!0}p[r]=g&&g[r]||Ee.style(e,r)}if(u=!Ee.isEmptyObject(t),u||!Ee.isEmptyObject(p)){f&&1===e.nodeType&&(n.overflow=[h.overflow,h.overflowX,h.overflowY],l=g&&g.display,null==l&&(l=ze.get(e,"display")),c=Ee.css(e,"display"),"none"===c&&(l?c=l:(x([e],!0),l=e.style.display||l,c=Ee.css(e,"display"),x([e]))),("inline"===c||"inline-block"===c&&null!=l)&&"none"===Ee.css(e,"float")&&(u||(d.done(function(){h.display=l}),null==l&&(c=h.display,l="none"===c?"":c)),h.display="inline-block")),n.overflow&&(h.overflow="hidden",d.always(function(){h.overflow=n.overflow[0],h.overflowX=n.overflow[1],h.overflowY=n.overflow[2]})),u=!1;for(r in p)u||(g?"hidden"in g&&(m=g.hidden):g=ze.access(e,"fxshow",{display:l}),i&&(g.hidden=!m),m&&x([e],!0),d.done(function(){m||x([e]),ze.remove(e,"fxshow");for(r in p)Ee.style(e,r,p[r])})),u=Y(m?g[r]:0,r,d),r in g||(g[r]=u.start,m&&(u.end=u.start,u.start=0))}}function G(e,t){var n,r,o,i,a;for(n in e)if(r=h(n),o=t[r],i=e[n],Array.isArray(i)&&(o=i[1],i=e[n]=i[0]),n!==r&&(e[r]=i,delete e[n]),a=Ee.cssHooks[r],a&&"expand"in a){i=a.expand(i),delete e[r];for(n in i)n in e||(e[n]=i[n],t[n]=o)}else t[r]=o}function K(e,t,n){var r,o,i=0,a=K.prefilters.length,s=Ee.Deferred().always(function(){delete u.elem}),u=function(){if(o)return!1;for(var t=Et||X(),n=Math.max(0,l.startTime+l.duration-t),r=n/l.duration||0,i=1-r,a=0,u=l.tweens.length;u>a;a++)l.tweens[a].run(i);return s.notifyWith(e,[l,i,n]),1>i&&u?n:(u||s.notifyWith(e,[l,1,0]),s.resolveWith(e,[l]),!1)},l=s.promise({elem:e,props:Ee.extend({},t),opts:Ee.extend(!0,{specialEasing:{},easing:Ee.easing._default},n),originalProperties:t,originalOptions:n,startTime:Et||X(),duration:n.duration,tweens:[],createTween:function(t,n){var r=Ee.Tween(e,l.opts,t,n,l.opts.specialEasing[t]||l.opts.easing);return l.tweens.push(r),r},stop:function(t){var n=0,r=t?l.tweens.length:0;if(o)return this;for(o=!0;r>n;n++)l.tweens[n].run(1);return t?(s.notifyWith(e,[l,1,0]),s.resolveWith(e,[l,t])):s.rejectWith(e,[l,t]),this}}),c=l.props;for(G(c,l.opts.specialEasing);a>i;i++)if(r=K.prefilters[i].call(l,e,c,l.opts))return xe(r.stop)&&(Ee._queueHooks(l.elem,l.opts.queue).stop=r.stop.bind(r)),r;return Ee.map(c,Y,l),xe(l.opts.start)&&l.opts.start.call(e,l),l.progress(l.opts.progress).done(l.opts.done,l.opts.complete).fail(l.opts.fail).always(l.opts.always),Ee.fx.timer(Ee.extend(u,{elem:e,anim:l,queue:l.opts.queue})),l}function Z(e){var t=e.match(qe)||[];return t.join(" ")}function J(e){return e.getAttribute&&e.getAttribute("class")||""}function ee(e){return Array.isArray(e)?e:"string"==typeof e?e.match(qe)||[]:[]}function te(e,t,n,o){var i;if(Array.isArray(t))Ee.each(t,function(t,r){n||_t.test(e)?o(e,r):te(e+"["+("object"==typeof r&&null!=r?t:"")+"]",r,n,o)});else if(n||"object"!==r(t))o(e,t);else for(i in t)te(e+"["+i+"]",t[i],n,o)}function ne(e){return function(t,n){"string"!=typeof t&&(n=t,t="*");var r,o=0,i=t.toLowerCase().match(qe)||[];if(xe(n))for(;r=i[o++];)"+"===r[0]?(r=r.slice(1)||"*",(e[r]=e[r]||[]).unshift(n)):(e[r]=e[r]||[]).push(n)}}function re(e,t,n,r){function o(s){var u;return i[s]=!0,Ee.each(e[s]||[],function(e,s){var l=s(t,n,r);return"string"!=typeof l||a||i[l]?a?!(u=l):void 0:(t.dataTypes.unshift(l),o(l),!1)}),u}var i={},a=e===Gt;return o(t.dataTypes[0])||!i["*"]&&o("*")}function oe(e,t){var n,r,o=Ee.ajaxSettings.flatOptions||{};for(n in t)void 0!==t[n]&&((o[n]?e:r||(r={}))[n]=t[n]);return r&&Ee.extend(!0,e,r),e}function ie(e,t,n){for(var r,o,i,a,s=e.contents,u=e.dataTypes;"*"===u[0];)u.shift(),void 0===r&&(r=e.mimeType||t.getResponseHeader("Content-Type"));if(r)for(o in s)if(s[o]&&s[o].test(r)){u.unshift(o);break}if(u[0]in n)i=u[0];else{for(o in n){if(!u[0]||e.converters[o+" "+u[0]]){i=o;break}a||(a=o)}i=i||a}return i?(i!==u[0]&&u.unshift(i),n[i]):void 0}function ae(e,t,n,r){var o,i,a,s,u,l={},c=e.dataTypes.slice();if(c[1])for(a in e.converters)l[a.toLowerCase()]=e.converters[a];for(i=c.shift();i;)if(e.responseFields[i]&&(n[e.responseFields[i]]=t),!u&&r&&e.dataFilter&&(t=e.dataFilter(t,e.dataType)),u=i,i=c.shift())if("*"===i)i=u;else if("*"!==u&&u!==i){if(a=l[u+" "+i]||l["* "+i],!a)for(o in l)if(s=o.split(" "),s[1]===i&&(a=l[u+" "+s[0]]||l["* "+s[0]])){a===!0?a=l[o]:l[o]!==!0&&(i=s[0],c.unshift(s[1]));break}if(a!==!0)if(a&&e["throws"])t=a(t);else try{t=a(t)}catch(f){return{state:"parsererror",error:a?f:"No conversion from "+u+" to "+i}}}return{state:"success",data:t}}var se=[],ue=e.document,le=Object.getPrototypeOf,ce=se.slice,fe=se.concat,de=se.push,pe=se.indexOf,he={},me=he.toString,ge=he.hasOwnProperty,ve=ge.toString,ye=ve.call(Object),be={},xe=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType},we=function(e){return null!=e&&e===e.window},Ce={type:!0,src:!0,nonce:!0,noModule:!0},Te="3.4.1",Ee=function(e,t){return new Ee.fn.init(e,t)},Se=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;Ee.fn=Ee.prototype={jquery:Te,constructor:Ee,length:0,toArray:function(){return ce.call(this)},get:function(e){return null==e?ce.call(this):0>e?this[e+this.length]:this[e]},pushStack:function(e){var t=Ee.merge(this.constructor(),e);return t.prevObject=this,t},each:function(e){return Ee.each(this,e)},map:function(e){return this.pushStack(Ee.map(this,function(t,n){return e.call(t,n,t)}))},slice:function(){return this.pushStack(ce.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(e){var t=this.length,n=+e+(0>e?t:0);return this.pushStack(n>=0&&t>n?[this[n]]:[])},end:function(){return this.prevObject||this.constructor()},push:de,sort:se.sort,splice:se.splice},Ee.extend=Ee.fn.extend=function(){var e,t,n,r,o,i,a=arguments[0]||{},s=1,u=arguments.length,l=!1;for("boolean"==typeof a&&(l=a,a=arguments[s]||{},s++),"object"==typeof a||xe(a)||(a={}),s===u&&(a=this,s--);u>s;s++)if(null!=(e=arguments[s]))for(t in e)r=e[t],"__proto__"!==t&&a!==r&&(l&&r&&(Ee.isPlainObject(r)||(o=Array.isArray(r)))?(n=a[t],i=o&&!Array.isArray(n)?[]:o||Ee.isPlainObject(n)?n:{},o=!1,a[t]=Ee.extend(l,i,r)):void 0!==r&&(a[t]=r));return a},Ee.extend({expando:"jQuery"+(Te+Math.random()).replace(/\D/g,""),isReady:!0,error:function(e){throw new Error(e)},noop:function(){},isPlainObject:function(e){var t,n;return e&&"[object Object]"===me.call(e)?(t=le(e))?(n=ge.call(t,"constructor")&&t.constructor,"function"==typeof n&&ve.call(n)===ye):!0:!1},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},globalEval:function(e,t){n(e,{nonce:t&&t.nonce})},each:function(e,t){var n,r=0;if(o(e))for(n=e.length;n>r&&t.call(e[r],r,e[r])!==!1;r++);else for(r in e)if(t.call(e[r],r,e[r])===!1)break;return e},trim:function(e){return null==e?"":(e+"").replace(Se,"")},makeArray:function(e,t){var n=t||[];return null!=e&&(o(Object(e))?Ee.merge(n,"string"==typeof e?[e]:e):de.call(n,e)),n},inArray:function(e,t,n){return null==t?-1:pe.call(t,e,n)},merge:function(e,t){for(var n=+t.length,r=0,o=e.length;n>r;r++)e[o++]=t[r];return e.length=o,e},grep:function(e,t,n){for(var r,o=[],i=0,a=e.length,s=!n;a>i;i++)r=!t(e[i],i),r!==s&&o.push(e[i]);return o},map:function(e,t,n){var r,i,a=0,s=[];if(o(e))for(r=e.length;r>a;a++)i=t(e[a],a,n),null!=i&&s.push(i);else for(a in e)i=t(e[a],a,n),null!=i&&s.push(i);return fe.apply([],s)},guid:1,support:be}),"function"==typeof Symbol&&(Ee.fn[Symbol.iterator]=se[Symbol.iterator]),Ee.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),function(e,t){he["[object "+t+"]"]=t.toLowerCase()});var ke=function(e){function t(e,t,n,r){var o,i,a,s,u,l,c,d=t&&t.ownerDocument,h=t?t.nodeType:9;if(n=n||[],"string"!=typeof e||!e||1!==h&&9!==h&&11!==h)return n;if(!r&&((t?t.ownerDocument||t:$)!==O&&D(t),t=t||O,P)){if(11!==h&&(u=be.exec(e)))if(o=u[1]){if(9===h){if(!(a=t.getElementById(o)))return n;if(a.id===o)return n.push(a),n}else if(d&&(a=d.getElementById(o))&&R(t,a)&&a.id===o)return n.push(a),n}else{if(u[2])return J.apply(n,t.getElementsByTagName(e)),n;if((o=u[3])&&C.getElementsByClassName&&t.getElementsByClassName)return J.apply(n,t.getElementsByClassName(o)),n}if(C.qsa&&!Q[e+" "]&&(!q||!q.test(e))&&(1!==h||"object"!==t.nodeName.toLowerCase())){if(c=e,d=t,1===h&&fe.test(e)){for((s=t.getAttribute("id"))?s=s.replace(Te,Ee):t.setAttribute("id",s=B),l=k(e),i=l.length;i--;)l[i]="#"+s+" "+p(l[i]);c=l.join(","),d=xe.test(e)&&f(t.parentNode)||t}try{return J.apply(n,d.querySelectorAll(c)),n}catch(m){Q(e,!0)}finally{s===B&&t.removeAttribute("id")}}}return N(e.replace(ue,"$1"),t,n,r)}function n(){function e(n,r){return t.push(n+" ")>T.cacheLength&&delete e[t.shift()],e[n+" "]=r}var t=[];return e}function r(e){return e[B]=!0,e}function o(e){var t=O.createElement("fieldset");try{return!!e(t)}catch(n){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function i(e,t){for(var n=e.split("|"),r=n.length;r--;)T.attrHandle[n[r]]=t}function a(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)for(;n=n.nextSibling;)if(n===t)return-1;return e?1:-1}function s(e){return function(t){var n=t.nodeName.toLowerCase();return"input"===n&&t.type===e}}function u(e){return function(t){var n=t.nodeName.toLowerCase();return("input"===n||"button"===n)&&t.type===e}}function l(e){return function(t){return"form"in t?t.parentNode&&t.disabled===!1?"label"in t?"label"in t.parentNode?t.parentNode.disabled===e:t.disabled===e:t.isDisabled===e||t.isDisabled!==!e&&ke(t)===e:t.disabled===e:"label"in t?t.disabled===e:!1}}function c(e){return r(function(t){return t=+t,r(function(n,r){for(var o,i=e([],n.length,t),a=i.length;a--;)n[o=i[a]]&&(n[o]=!(r[o]=n[o]))})})}function f(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}function d(){}function p(e){for(var t=0,n=e.length,r="";n>t;t++)r+=e[t].value;return r}function h(e,t,n){var r=t.dir,o=t.next,i=o||r,a=n&&"parentNode"===i,s=z++;return t.first?function(t,n,o){for(;t=t[r];)if(1===t.nodeType||a)return e(t,n,o);return!1}:function(t,n,u){var l,c,f,d=[F,s];if(u){for(;t=t[r];)if((1===t.nodeType||a)&&e(t,n,u))return!0}else for(;t=t[r];)if(1===t.nodeType||a)if(f=t[B]||(t[B]={}),c=f[t.uniqueID]||(f[t.uniqueID]={}),o&&o===t.nodeName.toLowerCase())t=t[r]||t;else{if((l=c[i])&&l[0]===F&&l[1]===s)return d[2]=l[2];if(c[i]=d,d[2]=e(t,n,u))return!0}return!1}}function m(e){return e.length>1?function(t,n,r){for(var o=e.length;o--;)if(!e[o](t,n,r))return!1;return!0}:e[0]}function g(e,n,r){for(var o=0,i=n.length;i>o;o++)t(e,n[o],r);return r}function v(e,t,n,r,o){for(var i,a=[],s=0,u=e.length,l=null!=t;u>s;s++)(i=e[s])&&(n&&!n(i,r,o)||(a.push(i),l&&t.push(s)));return a}function y(e,t,n,o,i,a){return o&&!o[B]&&(o=y(o)),i&&!i[B]&&(i=y(i,a)),r(function(r,a,s,u){var l,c,f,d=[],p=[],h=a.length,m=r||g(t||"*",s.nodeType?[s]:s,[]),y=!e||!r&&t?m:v(m,d,e,s,u),b=n?i||(r?e:h||o)?[]:a:y;if(n&&n(y,b,s,u),o)for(l=v(b,p),o(l,[],s,u),c=l.length;c--;)(f=l[c])&&(b[p[c]]=!(y[p[c]]=f));if(r){if(i||e){if(i){for(l=[],c=b.length;c--;)(f=b[c])&&l.push(y[c]=f);i(null,b=[],l,u)}for(c=b.length;c--;)(f=b[c])&&(l=i?te(r,f):d[c])>-1&&(r[l]=!(a[l]=f))}}else b=v(b===a?b.splice(h,b.length):b),i?i(null,a,b,u):J.apply(a,b)})}function b(e){for(var t,n,r,o=e.length,i=T.relative[e[0].type],a=i||T.relative[" "],s=i?1:0,u=h(function(e){return e===t},a,!0),l=h(function(e){return te(t,e)>-1},a,!0),c=[function(e,n,r){var o=!i&&(r||n!==j)||((t=n).nodeType?u(e,n,r):l(e,n,r));return t=null,o}];o>s;s++)if(n=T.relative[e[s].type])c=[h(m(c),n)];else{if(n=T.filter[e[s].type].apply(null,e[s].matches),n[B]){for(r=++s;o>r&&!T.relative[e[r].type];r++);return y(s>1&&m(c),s>1&&p(e.slice(0,s-1).concat({value:" "===e[s-2].type?"*":""})).replace(ue,"$1"),n,r>s&&b(e.slice(s,r)),o>r&&b(e=e.slice(r)),o>r&&p(e))}c.push(n)}return m(c)}function x(e,n){var o=n.length>0,i=e.length>0,a=function(r,a,s,u,l){var c,f,d,p=0,h="0",m=r&&[],g=[],y=j,b=r||i&&T.find.TAG("*",l),x=F+=null==y?1:Math.random()||.1,w=b.length;for(l&&(j=a===O||a||l);h!==w&&null!=(c=b[h]);h++){if(i&&c){for(f=0,a||c.ownerDocument===O||(D(c),s=!P);d=e[f++];)if(d(c,a||O,s)){u.push(c);break}l&&(F=x)}o&&((c=!d&&c)&&p--,r&&m.push(c))}if(p+=h,o&&h!==p){for(f=0;d=n[f++];)d(m,g,a,s);if(r){if(p>0)for(;h--;)m[h]||g[h]||(g[h]=K.call(u));g=v(g)}J.apply(u,g),l&&!r&&g.length>0&&p+n.length>1&&t.uniqueSort(u)}return l&&(F=x,j=y),m};return o?r(a):a}var w,C,T,E,S,k,A,N,j,I,L,D,O,H,P,q,M,_,R,B="sizzle"+1*new Date,$=e.document,F=0,z=0,W=n(),U=n(),X=n(),Q=n(),Y=function(e,t){return e===t&&(L=!0),0},V={}.hasOwnProperty,G=[],K=G.pop,Z=G.push,J=G.push,ee=G.slice,te=function(e,t){for(var n=0,r=e.length;r>n;n++)if(e[n]===t)return n;return-1},ne="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",re="[\\x20\\t\\r\\n\\f]",oe="(?:\\\\.|[\\w-]|[^\x00-\\xa0])+",ie="\\["+re+"*("+oe+")(?:"+re+"*([*^$|!~]?=)"+re+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+oe+"))|)"+re+"*\\]",ae=":("+oe+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+ie+")*)|.*)\\)|)",se=new RegExp(re+"+","g"),ue=new RegExp("^"+re+"+|((?:^|[^\\\\])(?:\\\\.)*)"+re+"+$","g"),le=new RegExp("^"+re+"*,"+re+"*"),ce=new RegExp("^"+re+"*([>+~]|"+re+")"+re+"*"),fe=new RegExp(re+"|>"),de=new RegExp(ae),pe=new RegExp("^"+oe+"$"),he={ID:new RegExp("^#("+oe+")"),CLASS:new RegExp("^\\.("+oe+")"),TAG:new RegExp("^("+oe+"|[*])"),ATTR:new RegExp("^"+ie),PSEUDO:new RegExp("^"+ae),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+re+"*(even|odd|(([+-]|)(\\d*)n|)"+re+"*(?:([+-]|)"+re+"*(\\d+)|))"+re+"*\\)|)","i"),bool:new RegExp("^(?:"+ne+")$","i"),needsContext:new RegExp("^"+re+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+re+"*((?:-\\d)?\\d*)"+re+"*\\)|)(?=[^-]|$)","i")},me=/HTML$/i,ge=/^(?:input|select|textarea|button)$/i,ve=/^h\d$/i,ye=/^[^{]+\{\s*\[native \w/,be=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,xe=/[+~]/,we=new RegExp("\\\\([\\da-f]{1,6}"+re+"?|("+re+")|.)","ig"),Ce=function(e,t,n){var r="0x"+t-65536;return r!==r||n?t:0>r?String.fromCharCode(r+65536):String.fromCharCode(r>>10|55296,1023&r|56320)},Te=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,Ee=function(e,t){return t?"\x00"===e?"�":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},Se=function(){D()},ke=h(function(e){return e.disabled===!0&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{J.apply(G=ee.call($.childNodes),$.childNodes),G[$.childNodes.length].nodeType}catch(Ae){J={apply:G.length?function(e,t){Z.apply(e,ee.call(t))}:function(e,t){for(var n=e.length,r=0;e[n++]=t[r++];);e.length=n-1}}}C=t.support={},S=t.isXML=function(e){var t=e.namespaceURI,n=(e.ownerDocument||e).documentElement;return!me.test(t||n&&n.nodeName||"HTML")},D=t.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:$;return r!==O&&9===r.nodeType&&r.documentElement?(O=r,H=O.documentElement,P=!S(O),$!==O&&(n=O.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",Se,!1):n.attachEvent&&n.attachEvent("onunload",Se)),C.attributes=o(function(e){return e.className="i",!e.getAttribute("className")}),C.getElementsByTagName=o(function(e){return e.appendChild(O.createComment("")),!e.getElementsByTagName("*").length}),C.getElementsByClassName=ye.test(O.getElementsByClassName),C.getById=o(function(e){return H.appendChild(e).id=B,!O.getElementsByName||!O.getElementsByName(B).length}),C.getById?(T.filter.ID=function(e){var t=e.replace(we,Ce);return function(e){return e.getAttribute("id")===t}},T.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&P){var n=t.getElementById(e);return n?[n]:[]}}):(T.filter.ID=function(e){var t=e.replace(we,Ce);return function(e){var n="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return n&&n.value===t}},T.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&P){var n,r,o,i=t.getElementById(e);if(i){if(n=i.getAttributeNode("id"),n&&n.value===e)return[i];for(o=t.getElementsByName(e),r=0;i=o[r++];)if(n=i.getAttributeNode("id"),n&&n.value===e)return[i]}return[]}}),T.find.TAG=C.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):C.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],o=0,i=t.getElementsByTagName(e);if("*"===e){for(;n=i[o++];)1===n.nodeType&&r.push(n);return r}return i},T.find.CLASS=C.getElementsByClassName&&function(e,t){return"undefined"!=typeof t.getElementsByClassName&&P?t.getElementsByClassName(e):void 0},M=[],q=[],(C.qsa=ye.test(O.querySelectorAll))&&(o(function(e){H.appendChild(e).innerHTML="<a id='"+B+"'></a><select id='"+B+"-\r\\' msallowcapture=''><option selected=''></option></select>",e.querySelectorAll("[msallowcapture^='']").length&&q.push("[*^$]="+re+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||q.push("\\["+re+"*(?:value|"+ne+")"),e.querySelectorAll("[id~="+B+"-]").length||q.push("~="),e.querySelectorAll(":checked").length||q.push(":checked"),e.querySelectorAll("a#"+B+"+*").length||q.push(".#.+[+~]")}),o(function(e){e.innerHTML="<a href='' disabled='disabled'></a><select disabled='disabled'><option/></select>";var t=O.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&q.push("name"+re+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&q.push(":enabled",":disabled"),H.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&q.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),q.push(",.*:")})),(C.matchesSelector=ye.test(_=H.matches||H.webkitMatchesSelector||H.mozMatchesSelector||H.oMatchesSelector||H.msMatchesSelector))&&o(function(e){C.disconnectedMatch=_.call(e,"*"),_.call(e,"[s!='']:x"),M.push("!=",ae)}),q=q.length&&new RegExp(q.join("|")),M=M.length&&new RegExp(M.join("|")),t=ye.test(H.compareDocumentPosition),R=t||ye.test(H.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)for(;t=t.parentNode;)if(t===e)return!0;return!1},Y=t?function(e,t){if(e===t)return L=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n?n:(n=(e.ownerDocument||e)===(t.ownerDocument||t)?e.compareDocumentPosition(t):1,1&n||!C.sortDetached&&t.compareDocumentPosition(e)===n?e===O||e.ownerDocument===$&&R($,e)?-1:t===O||t.ownerDocument===$&&R($,t)?1:I?te(I,e)-te(I,t):0:4&n?-1:1)}:function(e,t){if(e===t)return L=!0,0;var n,r=0,o=e.parentNode,i=t.parentNode,s=[e],u=[t];if(!o||!i)return e===O?-1:t===O?1:o?-1:i?1:I?te(I,e)-te(I,t):0;if(o===i)return a(e,t);for(n=e;n=n.parentNode;)s.unshift(n);for(n=t;n=n.parentNode;)u.unshift(n);for(;s[r]===u[r];)r++;return r?a(s[r],u[r]):s[r]===$?-1:u[r]===$?1:0},O):O},t.matches=function(e,n){return t(e,null,null,n)},t.matchesSelector=function(e,n){if((e.ownerDocument||e)!==O&&D(e),C.matchesSelector&&P&&!Q[n+" "]&&(!M||!M.test(n))&&(!q||!q.test(n)))try{var r=_.call(e,n);if(r||C.disconnectedMatch||e.document&&11!==e.document.nodeType)return r}catch(o){Q(n,!0)}return t(n,O,null,[e]).length>0},t.contains=function(e,t){return(e.ownerDocument||e)!==O&&D(e),R(e,t)},t.attr=function(e,t){(e.ownerDocument||e)!==O&&D(e);var n=T.attrHandle[t.toLowerCase()],r=n&&V.call(T.attrHandle,t.toLowerCase())?n(e,t,!P):void 0;return void 0!==r?r:C.attributes||!P?e.getAttribute(t):(r=e.getAttributeNode(t))&&r.specified?r.value:null},t.escape=function(e){return(e+"").replace(Te,Ee)},t.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)},t.uniqueSort=function(e){var t,n=[],r=0,o=0;if(L=!C.detectDuplicates,I=!C.sortStable&&e.slice(0),e.sort(Y),L){for(;t=e[o++];)t===e[o]&&(r=n.push(o));for(;r--;)e.splice(n[r],1)}return I=null,e},E=t.getText=function(e){var t,n="",r=0,o=e.nodeType;if(o){if(1===o||9===o||11===o){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=E(e)}else if(3===o||4===o)return e.nodeValue}else for(;t=e[r++];)n+=E(t);return n},T=t.selectors={cacheLength:50,createPseudo:r,match:he,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(we,Ce),e[3]=(e[3]||e[4]||e[5]||"").replace(we,Ce),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||t.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&t.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return he.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&de.test(n)&&(t=k(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(we,Ce).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=W[e+" "];return t||(t=new RegExp("(^|"+re+")"+e+"("+re+"|$)"))&&W(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(e,n,r){return function(o){var i=t.attr(o,e);return null==i?"!="===n:n?(i+="","="===n?i===r:"!="===n?i!==r:"^="===n?r&&0===i.indexOf(r):"*="===n?r&&i.indexOf(r)>-1:"$="===n?r&&i.slice(-r.length)===r:"~="===n?(" "+i.replace(se," ")+" ").indexOf(r)>-1:"|="===n?i===r||i.slice(0,r.length+1)===r+"-":!1):!0}},CHILD:function(e,t,n,r,o){var i="nth"!==e.slice(0,3),a="last"!==e.slice(-4),s="of-type"===t;return 1===r&&0===o?function(e){return!!e.parentNode}:function(t,n,u){var l,c,f,d,p,h,m=i!==a?"nextSibling":"previousSibling",g=t.parentNode,v=s&&t.nodeName.toLowerCase(),y=!u&&!s,b=!1;if(g){if(i){for(;m;){for(d=t;d=d[m];)if(s?d.nodeName.toLowerCase()===v:1===d.nodeType)return!1;h=m="only"===e&&!h&&"nextSibling"}return!0}if(h=[a?g.firstChild:g.lastChild],a&&y){for(d=g,f=d[B]||(d[B]={}),c=f[d.uniqueID]||(f[d.uniqueID]={}),l=c[e]||[],p=l[0]===F&&l[1],b=p&&l[2],d=p&&g.childNodes[p];d=++p&&d&&d[m]||(b=p=0)||h.pop();)if(1===d.nodeType&&++b&&d===t){c[e]=[F,p,b];break}}else if(y&&(d=t,f=d[B]||(d[B]={}),c=f[d.uniqueID]||(f[d.uniqueID]={}),l=c[e]||[],p=l[0]===F&&l[1],b=p),b===!1)for(;(d=++p&&d&&d[m]||(b=p=0)||h.pop())&&((s?d.nodeName.toLowerCase()!==v:1!==d.nodeType)||!++b||(y&&(f=d[B]||(d[B]={}),c=f[d.uniqueID]||(f[d.uniqueID]={}),c[e]=[F,b]),d!==t)););return b-=o,b===r||b%r===0&&b/r>=0}}},PSEUDO:function(e,n){var o,i=T.pseudos[e]||T.setFilters[e.toLowerCase()]||t.error("unsupported pseudo: "+e);return i[B]?i(n):i.length>1?(o=[e,e,"",n],T.setFilters.hasOwnProperty(e.toLowerCase())?r(function(e,t){for(var r,o=i(e,n),a=o.length;a--;)r=te(e,o[a]),e[r]=!(t[r]=o[a])}):function(e){
-return i(e,0,o)}):i}},pseudos:{not:r(function(e){var t=[],n=[],o=A(e.replace(ue,"$1"));return o[B]?r(function(e,t,n,r){for(var i,a=o(e,null,r,[]),s=e.length;s--;)(i=a[s])&&(e[s]=!(t[s]=i))}):function(e,r,i){return t[0]=e,o(t,null,i,n),t[0]=null,!n.pop()}}),has:r(function(e){return function(n){return t(e,n).length>0}}),contains:r(function(e){return e=e.replace(we,Ce),function(t){return(t.textContent||E(t)).indexOf(e)>-1}}),lang:r(function(e){return pe.test(e||"")||t.error("unsupported lang: "+e),e=e.replace(we,Ce).toLowerCase(),function(t){var n;do if(n=P?t.lang:t.getAttribute("xml:lang")||t.getAttribute("lang"))return n=n.toLowerCase(),n===e||0===n.indexOf(e+"-");while((t=t.parentNode)&&1===t.nodeType);return!1}}),target:function(t){var n=e.location&&e.location.hash;return n&&n.slice(1)===t.id},root:function(e){return e===H},focus:function(e){return e===O.activeElement&&(!O.hasFocus||O.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:l(!1),disabled:l(!0),checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,e.selected===!0},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeType<6)return!1;return!0},parent:function(e){return!T.pseudos.empty(e)},header:function(e){return ve.test(e.nodeName)},input:function(e){return ge.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||"text"===t.toLowerCase())},first:c(function(){return[0]}),last:c(function(e,t){return[t-1]}),eq:c(function(e,t,n){return[0>n?n+t:n]}),even:c(function(e,t){for(var n=0;t>n;n+=2)e.push(n);return e}),odd:c(function(e,t){for(var n=1;t>n;n+=2)e.push(n);return e}),lt:c(function(e,t,n){for(var r=0>n?n+t:n>t?t:n;--r>=0;)e.push(r);return e}),gt:c(function(e,t,n){for(var r=0>n?n+t:n;++r<t;)e.push(r);return e})}},T.pseudos.nth=T.pseudos.eq;for(w in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})T.pseudos[w]=s(w);for(w in{submit:!0,reset:!0})T.pseudos[w]=u(w);return d.prototype=T.filters=T.pseudos,T.setFilters=new d,k=t.tokenize=function(e,n){var r,o,i,a,s,u,l,c=U[e+" "];if(c)return n?0:c.slice(0);for(s=e,u=[],l=T.preFilter;s;){r&&!(o=le.exec(s))||(o&&(s=s.slice(o[0].length)||s),u.push(i=[])),r=!1,(o=ce.exec(s))&&(r=o.shift(),i.push({value:r,type:o[0].replace(ue," ")}),s=s.slice(r.length));for(a in T.filter)!(o=he[a].exec(s))||l[a]&&!(o=l[a](o))||(r=o.shift(),i.push({value:r,type:a,matches:o}),s=s.slice(r.length));if(!r)break}return n?s.length:s?t.error(e):U(e,u).slice(0)},A=t.compile=function(e,t){var n,r=[],o=[],i=X[e+" "];if(!i){for(t||(t=k(e)),n=t.length;n--;)i=b(t[n]),i[B]?r.push(i):o.push(i);i=X(e,x(o,r)),i.selector=e}return i},N=t.select=function(e,t,n,r){var o,i,a,s,u,l="function"==typeof e&&e,c=!r&&k(e=l.selector||e);if(n=n||[],1===c.length){if(i=c[0]=c[0].slice(0),i.length>2&&"ID"===(a=i[0]).type&&9===t.nodeType&&P&&T.relative[i[1].type]){if(t=(T.find.ID(a.matches[0].replace(we,Ce),t)||[])[0],!t)return n;l&&(t=t.parentNode),e=e.slice(i.shift().value.length)}for(o=he.needsContext.test(e)?0:i.length;o--&&(a=i[o],!T.relative[s=a.type]);)if((u=T.find[s])&&(r=u(a.matches[0].replace(we,Ce),xe.test(i[0].type)&&f(t.parentNode)||t))){if(i.splice(o,1),e=r.length&&p(i),!e)return J.apply(n,r),n;break}}return(l||A(e,c))(r,t,!P,n,!t||xe.test(e)&&f(t.parentNode)||t),n},C.sortStable=B.split("").sort(Y).join("")===B,C.detectDuplicates=!!L,D(),C.sortDetached=o(function(e){return 1&e.compareDocumentPosition(O.createElement("fieldset"))}),o(function(e){return e.innerHTML="<a href='#'></a>","#"===e.firstChild.getAttribute("href")})||i("type|href|height|width",function(e,t,n){return n?void 0:e.getAttribute(t,"type"===t.toLowerCase()?1:2)}),C.attributes&&o(function(e){return e.innerHTML="<input/>",e.firstChild.setAttribute("value",""),""===e.firstChild.getAttribute("value")})||i("value",function(e,t,n){return n||"input"!==e.nodeName.toLowerCase()?void 0:e.defaultValue}),o(function(e){return null==e.getAttribute("disabled")})||i(ne,function(e,t,n){var r;return n?void 0:e[t]===!0?t.toLowerCase():(r=e.getAttributeNode(t))&&r.specified?r.value:null}),t}(e);Ee.find=ke,Ee.expr=ke.selectors,Ee.expr[":"]=Ee.expr.pseudos,Ee.uniqueSort=Ee.unique=ke.uniqueSort,Ee.text=ke.getText,Ee.isXMLDoc=ke.isXML,Ee.contains=ke.contains,Ee.escapeSelector=ke.escape;var Ae=function(e,t,n){for(var r=[],o=void 0!==n;(e=e[t])&&9!==e.nodeType;)if(1===e.nodeType){if(o&&Ee(e).is(n))break;r.push(e)}return r},Ne=function(e,t){for(var n=[];e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n},je=Ee.expr.match.needsContext,Ie=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;Ee.filter=function(e,t,n){var r=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===r.nodeType?Ee.find.matchesSelector(r,e)?[r]:[]:Ee.find.matches(e,Ee.grep(t,function(e){return 1===e.nodeType}))},Ee.fn.extend({find:function(e){var t,n,r=this.length,o=this;if("string"!=typeof e)return this.pushStack(Ee(e).filter(function(){for(t=0;r>t;t++)if(Ee.contains(o[t],this))return!0}));for(n=this.pushStack([]),t=0;r>t;t++)Ee.find(e,o[t],n);return r>1?Ee.uniqueSort(n):n},filter:function(e){return this.pushStack(a(this,e||[],!1))},not:function(e){return this.pushStack(a(this,e||[],!0))},is:function(e){return!!a(this,"string"==typeof e&&je.test(e)?Ee(e):e||[],!1).length}});var Le,De=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/,Oe=Ee.fn.init=function(e,t,n){var r,o;if(!e)return this;if(n=n||Le,"string"==typeof e){if(r="<"===e[0]&&">"===e[e.length-1]&&e.length>=3?[null,e,null]:De.exec(e),!r||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof Ee?t[0]:t,Ee.merge(this,Ee.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:ue,!0)),Ie.test(r[1])&&Ee.isPlainObject(t))for(r in t)xe(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return o=ue.getElementById(r[2]),o&&(this[0]=o,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):xe(e)?void 0!==n.ready?n.ready(e):e(Ee):Ee.makeArray(e,this)};Oe.prototype=Ee.fn,Le=Ee(ue);var He=/^(?:parents|prev(?:Until|All))/,Pe={children:!0,contents:!0,next:!0,prev:!0};Ee.fn.extend({has:function(e){var t=Ee(e,this),n=t.length;return this.filter(function(){for(var e=0;n>e;e++)if(Ee.contains(this,t[e]))return!0})},closest:function(e,t){var n,r=0,o=this.length,i=[],a="string"!=typeof e&&Ee(e);if(!je.test(e))for(;o>r;r++)for(n=this[r];n&&n!==t;n=n.parentNode)if(n.nodeType<11&&(a?a.index(n)>-1:1===n.nodeType&&Ee.find.matchesSelector(n,e))){i.push(n);break}return this.pushStack(i.length>1?Ee.uniqueSort(i):i)},index:function(e){return e?"string"==typeof e?pe.call(Ee(e),this[0]):pe.call(this,e.jquery?e[0]:e):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){return this.pushStack(Ee.uniqueSort(Ee.merge(this.get(),Ee(e,t))))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}}),Ee.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return Ae(e,"parentNode")},parentsUntil:function(e,t,n){return Ae(e,"parentNode",n)},next:function(e){return s(e,"nextSibling")},prev:function(e){return s(e,"previousSibling")},nextAll:function(e){return Ae(e,"nextSibling")},prevAll:function(e){return Ae(e,"previousSibling")},nextUntil:function(e,t,n){return Ae(e,"nextSibling",n)},prevUntil:function(e,t,n){return Ae(e,"previousSibling",n)},siblings:function(e){return Ne((e.parentNode||{}).firstChild,e)},children:function(e){return Ne(e.firstChild)},contents:function(e){return"undefined"!=typeof e.contentDocument?e.contentDocument:(i(e,"template")&&(e=e.content||e),Ee.merge([],e.childNodes))}},function(e,t){Ee.fn[e]=function(n,r){var o=Ee.map(this,t,n);return"Until"!==e.slice(-5)&&(r=n),r&&"string"==typeof r&&(o=Ee.filter(r,o)),this.length>1&&(Pe[e]||Ee.uniqueSort(o),He.test(e)&&o.reverse()),this.pushStack(o)}});var qe=/[^\x20\t\r\n\f]+/g;Ee.Callbacks=function(e){e="string"==typeof e?u(e):Ee.extend({},e);var t,n,o,i,a=[],s=[],l=-1,c=function(){for(i=i||e.once,o=t=!0;s.length;l=-1)for(n=s.shift();++l<a.length;)a[l].apply(n[0],n[1])===!1&&e.stopOnFalse&&(l=a.length,n=!1);e.memory||(n=!1),t=!1,i&&(a=n?[]:"")},f={add:function(){return a&&(n&&!t&&(l=a.length-1,s.push(n)),function o(t){Ee.each(t,function(t,n){xe(n)?e.unique&&f.has(n)||a.push(n):n&&n.length&&"string"!==r(n)&&o(n)})}(arguments),n&&!t&&c()),this},remove:function(){return Ee.each(arguments,function(e,t){for(var n;(n=Ee.inArray(t,a,n))>-1;)a.splice(n,1),l>=n&&l--}),this},has:function(e){return e?Ee.inArray(e,a)>-1:a.length>0},empty:function(){return a&&(a=[]),this},disable:function(){return i=s=[],a=n="",this},disabled:function(){return!a},lock:function(){return i=s=[],n||t||(a=n=""),this},locked:function(){return!!i},fireWith:function(e,n){return i||(n=n||[],n=[e,n.slice?n.slice():n],s.push(n),t||c()),this},fire:function(){return f.fireWith(this,arguments),this},fired:function(){return!!o}};return f},Ee.extend({Deferred:function(t){var n=[["notify","progress",Ee.Callbacks("memory"),Ee.Callbacks("memory"),2],["resolve","done",Ee.Callbacks("once memory"),Ee.Callbacks("once memory"),0,"resolved"],["reject","fail",Ee.Callbacks("once memory"),Ee.Callbacks("once memory"),1,"rejected"]],r="pending",o={state:function(){return r},always:function(){return i.done(arguments).fail(arguments),this},"catch":function(e){return o.then(null,e)},pipe:function(){var e=arguments;return Ee.Deferred(function(t){Ee.each(n,function(n,r){var o=xe(e[r[4]])&&e[r[4]];i[r[1]](function(){var e=o&&o.apply(this,arguments);e&&xe(e.promise)?e.promise().progress(t.notify).done(t.resolve).fail(t.reject):t[r[0]+"With"](this,o?[e]:arguments)})}),e=null}).promise()},then:function(t,r,o){function i(t,n,r,o){return function(){var s=this,u=arguments,f=function(){var e,f;if(!(a>t)){if(e=r.apply(s,u),e===n.promise())throw new TypeError("Thenable self-resolution");f=e&&("object"==typeof e||"function"==typeof e)&&e.then,xe(f)?o?f.call(e,i(a,n,l,o),i(a,n,c,o)):(a++,f.call(e,i(a,n,l,o),i(a,n,c,o),i(a,n,l,n.notifyWith))):(r!==l&&(s=void 0,u=[e]),(o||n.resolveWith)(s,u))}},d=o?f:function(){try{f()}catch(e){Ee.Deferred.exceptionHook&&Ee.Deferred.exceptionHook(e,d.stackTrace),t+1>=a&&(r!==c&&(s=void 0,u=[e]),n.rejectWith(s,u))}};t?d():(Ee.Deferred.getStackHook&&(d.stackTrace=Ee.Deferred.getStackHook()),e.setTimeout(d))}}var a=0;return Ee.Deferred(function(e){n[0][3].add(i(0,e,xe(o)?o:l,e.notifyWith)),n[1][3].add(i(0,e,xe(t)?t:l)),n[2][3].add(i(0,e,xe(r)?r:c))}).promise()},promise:function(e){return null!=e?Ee.extend(e,o):o}},i={};return Ee.each(n,function(e,t){var a=t[2],s=t[5];o[t[1]]=a.add,s&&a.add(function(){r=s},n[3-e][2].disable,n[3-e][3].disable,n[0][2].lock,n[0][3].lock),a.add(t[3].fire),i[t[0]]=function(){return i[t[0]+"With"](this===i?void 0:this,arguments),this},i[t[0]+"With"]=a.fireWith}),o.promise(i),t&&t.call(i,i),i},when:function(e){var t=arguments.length,n=t,r=Array(n),o=ce.call(arguments),i=Ee.Deferred(),a=function(e){return function(n){r[e]=this,o[e]=arguments.length>1?ce.call(arguments):n,--t||i.resolveWith(r,o)}};if(1>=t&&(f(e,i.done(a(n)).resolve,i.reject,!t),"pending"===i.state()||xe(o[n]&&o[n].then)))return i.then();for(;n--;)f(o[n],a(n),i.reject);return i.promise()}});var Me=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;Ee.Deferred.exceptionHook=function(t,n){e.console&&e.console.warn&&t&&Me.test(t.name)&&e.console.warn("jQuery.Deferred exception: "+t.message,t.stack,n)},Ee.readyException=function(t){e.setTimeout(function(){throw t})};var _e=Ee.Deferred();Ee.fn.ready=function(e){return _e.then(e)["catch"](function(e){Ee.readyException(e)}),this},Ee.extend({isReady:!1,readyWait:1,ready:function(e){(e===!0?--Ee.readyWait:Ee.isReady)||(Ee.isReady=!0,e!==!0&&--Ee.readyWait>0||_e.resolveWith(ue,[Ee]))}}),Ee.ready.then=_e.then,"complete"===ue.readyState||"loading"!==ue.readyState&&!ue.documentElement.doScroll?e.setTimeout(Ee.ready):(ue.addEventListener("DOMContentLoaded",d),e.addEventListener("load",d));var Re=function(e,t,n,o,i,a,s){var u=0,l=e.length,c=null==n;if("object"===r(n)){i=!0;for(u in n)Re(e,t,u,n[u],!0,a,s)}else if(void 0!==o&&(i=!0,xe(o)||(s=!0),c&&(s?(t.call(e,o),t=null):(c=t,t=function(e,t,n){return c.call(Ee(e),n)})),t))for(;l>u;u++)t(e[u],n,s?o:o.call(e[u],u,t(e[u],n)));return i?e:c?t.call(e):l?t(e[0],n):a},Be=/^-ms-/,$e=/-([a-z])/g,Fe=function(e){return 1===e.nodeType||9===e.nodeType||!+e.nodeType};m.uid=1,m.prototype={cache:function(e){var t=e[this.expando];return t||(t={},Fe(e)&&(e.nodeType?e[this.expando]=t:Object.defineProperty(e,this.expando,{value:t,configurable:!0}))),t},set:function(e,t,n){var r,o=this.cache(e);if("string"==typeof t)o[h(t)]=n;else for(r in t)o[h(r)]=t[r];return o},get:function(e,t){return void 0===t?this.cache(e):e[this.expando]&&e[this.expando][h(t)]},access:function(e,t,n){return void 0===t||t&&"string"==typeof t&&void 0===n?this.get(e,t):(this.set(e,t,n),void 0!==n?n:t)},remove:function(e,t){var n,r=e[this.expando];if(void 0!==r){if(void 0!==t){Array.isArray(t)?t=t.map(h):(t=h(t),t=t in r?[t]:t.match(qe)||[]),n=t.length;for(;n--;)delete r[t[n]]}(void 0===t||Ee.isEmptyObject(r))&&(e.nodeType?e[this.expando]=void 0:delete e[this.expando])}},hasData:function(e){var t=e[this.expando];return void 0!==t&&!Ee.isEmptyObject(t)}};var ze=new m,We=new m,Ue=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,Xe=/[A-Z]/g;Ee.extend({hasData:function(e){return We.hasData(e)||ze.hasData(e)},data:function(e,t,n){return We.access(e,t,n)},removeData:function(e,t){We.remove(e,t)},_data:function(e,t,n){return ze.access(e,t,n)},_removeData:function(e,t){ze.remove(e,t)}}),Ee.fn.extend({data:function(e,t){var n,r,o,i=this[0],a=i&&i.attributes;if(void 0===e){if(this.length&&(o=We.get(i),1===i.nodeType&&!ze.get(i,"hasDataAttrs"))){for(n=a.length;n--;)a[n]&&(r=a[n].name,0===r.indexOf("data-")&&(r=h(r.slice(5)),v(i,r,o[r])));ze.set(i,"hasDataAttrs",!0)}return o}return"object"==typeof e?this.each(function(){We.set(this,e)}):Re(this,function(t){var n;if(i&&void 0===t){if(n=We.get(i,e),void 0!==n)return n;if(n=v(i,e),void 0!==n)return n}else this.each(function(){We.set(this,e,t)})},null,t,arguments.length>1,null,!0)},removeData:function(e){return this.each(function(){We.remove(this,e)})}}),Ee.extend({queue:function(e,t,n){var r;return e?(t=(t||"fx")+"queue",r=ze.get(e,t),n&&(!r||Array.isArray(n)?r=ze.access(e,t,Ee.makeArray(n)):r.push(n)),r||[]):void 0},dequeue:function(e,t){t=t||"fx";var n=Ee.queue(e,t),r=n.length,o=n.shift(),i=Ee._queueHooks(e,t),a=function(){Ee.dequeue(e,t)};"inprogress"===o&&(o=n.shift(),r--),o&&("fx"===t&&n.unshift("inprogress"),delete i.stop,o.call(e,a,i)),!r&&i&&i.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return ze.get(e,n)||ze.access(e,n,{empty:Ee.Callbacks("once memory").add(function(){ze.remove(e,[t+"queue",n])})})}}),Ee.fn.extend({queue:function(e,t){var n=2;return"string"!=typeof e&&(t=e,e="fx",n--),arguments.length<n?Ee.queue(this[0],e):void 0===t?this:this.each(function(){var n=Ee.queue(this,e,t);Ee._queueHooks(this,e),"fx"===e&&"inprogress"!==n[0]&&Ee.dequeue(this,e)})},dequeue:function(e){return this.each(function(){Ee.dequeue(this,e)})},clearQueue:function(e){return this.queue(e||"fx",[])},promise:function(e,t){var n,r=1,o=Ee.Deferred(),i=this,a=this.length,s=function(){--r||o.resolveWith(i,[i])};for("string"!=typeof e&&(t=e,e=void 0),e=e||"fx";a--;)n=ze.get(i[a],e+"queueHooks"),n&&n.empty&&(r++,n.empty.add(s));return s(),o.promise(t)}});var Qe=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,Ye=new RegExp("^(?:([+-])=|)("+Qe+")([a-z%]*)$","i"),Ve=["Top","Right","Bottom","Left"],Ge=ue.documentElement,Ke=function(e){return Ee.contains(e.ownerDocument,e)},Ze={composed:!0};Ge.getRootNode&&(Ke=function(e){return Ee.contains(e.ownerDocument,e)||e.getRootNode(Ze)===e.ownerDocument});var Je=function(e,t){return e=t||e,"none"===e.style.display||""===e.style.display&&Ke(e)&&"none"===Ee.css(e,"display")},et=function(e,t,n,r){var o,i,a={};for(i in t)a[i]=e.style[i],e.style[i]=t[i];o=n.apply(e,r||[]);for(i in t)e.style[i]=a[i];return o},tt={};Ee.fn.extend({show:function(){return x(this,!0)},hide:function(){return x(this)},toggle:function(e){return"boolean"==typeof e?e?this.show():this.hide():this.each(function(){Je(this)?Ee(this).show():Ee(this).hide()})}});var nt=/^(?:checkbox|radio)$/i,rt=/<([a-z][^\/\0>\x20\t\r\n\f]*)/i,ot=/^$|^module$|\/(?:java|ecma)script/i,it={option:[1,"<select multiple='multiple'>","</select>"],thead:[1,"<table>","</table>"],col:[2,"<table><colgroup>","</colgroup></table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:[0,"",""]};it.optgroup=it.option,it.tbody=it.tfoot=it.colgroup=it.caption=it.thead,it.th=it.td;var at=/<|&#?\w+;/;!function(){var e=ue.createDocumentFragment(),t=e.appendChild(ue.createElement("div")),n=ue.createElement("input");n.setAttribute("type","radio"),n.setAttribute("checked","checked"),n.setAttribute("name","t"),t.appendChild(n),be.checkClone=t.cloneNode(!0).cloneNode(!0).lastChild.checked,t.innerHTML="<textarea>x</textarea>",be.noCloneChecked=!!t.cloneNode(!0).lastChild.defaultValue}();var st=/^key/,ut=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,lt=/^([^.]*)(?:\.(.+)|)/;Ee.event={global:{},add:function(e,t,n,r,o){var i,a,s,u,l,c,f,d,p,h,m,g=ze.get(e);if(g)for(n.handler&&(i=n,n=i.handler,o=i.selector),o&&Ee.find.matchesSelector(Ge,o),n.guid||(n.guid=Ee.guid++),(u=g.events)||(u=g.events={}),(a=g.handle)||(a=g.handle=function(t){return"undefined"!=typeof Ee&&Ee.event.triggered!==t.type?Ee.event.dispatch.apply(e,arguments):void 0}),t=(t||"").match(qe)||[""],l=t.length;l--;)s=lt.exec(t[l])||[],p=m=s[1],h=(s[2]||"").split(".").sort(),p&&(f=Ee.event.special[p]||{},p=(o?f.delegateType:f.bindType)||p,f=Ee.event.special[p]||{},c=Ee.extend({type:p,origType:m,data:r,handler:n,guid:n.guid,selector:o,needsContext:o&&Ee.expr.match.needsContext.test(o),namespace:h.join(".")},i),(d=u[p])||(d=u[p]=[],d.delegateCount=0,f.setup&&f.setup.call(e,r,h,a)!==!1||e.addEventListener&&e.addEventListener(p,a)),f.add&&(f.add.call(e,c),c.handler.guid||(c.handler.guid=n.guid)),o?d.splice(d.delegateCount++,0,c):d.push(c),Ee.event.global[p]=!0)},remove:function(e,t,n,r,o){var i,a,s,u,l,c,f,d,p,h,m,g=ze.hasData(e)&&ze.get(e);if(g&&(u=g.events)){for(t=(t||"").match(qe)||[""],l=t.length;l--;)if(s=lt.exec(t[l])||[],p=m=s[1],h=(s[2]||"").split(".").sort(),p){for(f=Ee.event.special[p]||{},p=(r?f.delegateType:f.bindType)||p,d=u[p]||[],s=s[2]&&new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),a=i=d.length;i--;)c=d[i],!o&&m!==c.origType||n&&n.guid!==c.guid||s&&!s.test(c.namespace)||r&&r!==c.selector&&("**"!==r||!c.selector)||(d.splice(i,1),c.selector&&d.delegateCount--,f.remove&&f.remove.call(e,c));a&&!d.length&&(f.teardown&&f.teardown.call(e,h,g.handle)!==!1||Ee.removeEvent(e,p,g.handle),delete u[p])}else for(p in u)Ee.event.remove(e,p+t[l],n,r,!0);Ee.isEmptyObject(u)&&ze.remove(e,"handle events")}},dispatch:function(e){var t,n,r,o,i,a,s=Ee.event.fix(e),u=new Array(arguments.length),l=(ze.get(this,"events")||{})[s.type]||[],c=Ee.event.special[s.type]||{};for(u[0]=s,t=1;t<arguments.length;t++)u[t]=arguments[t];if(s.delegateTarget=this,!c.preDispatch||c.preDispatch.call(this,s)!==!1){for(a=Ee.event.handlers.call(this,s,l),t=0;(o=a[t++])&&!s.isPropagationStopped();)for(s.currentTarget=o.elem,n=0;(i=o.handlers[n++])&&!s.isImmediatePropagationStopped();)s.rnamespace&&i.namespace!==!1&&!s.rnamespace.test(i.namespace)||(s.handleObj=i,s.data=i.data,r=((Ee.event.special[i.origType]||{}).handle||i.handler).apply(o.elem,u),void 0!==r&&(s.result=r)===!1&&(s.preventDefault(),s.stopPropagation()));return c.postDispatch&&c.postDispatch.call(this,s),s.result}},handlers:function(e,t){var n,r,o,i,a,s=[],u=t.delegateCount,l=e.target;if(u&&l.nodeType&&!("click"===e.type&&e.button>=1))for(;l!==this;l=l.parentNode||this)if(1===l.nodeType&&("click"!==e.type||l.disabled!==!0)){for(i=[],a={},n=0;u>n;n++)r=t[n],o=r.selector+" ",void 0===a[o]&&(a[o]=r.needsContext?Ee(o,this).index(l)>-1:Ee.find(o,this,null,[l]).length),a[o]&&i.push(r);i.length&&s.push({elem:l,handlers:i})}return l=this,u<t.length&&s.push({elem:l,handlers:t.slice(u)}),s},addProp:function(e,t){Object.defineProperty(Ee.Event.prototype,e,{enumerable:!0,configurable:!0,get:xe(t)?function(){return this.originalEvent?t(this.originalEvent):void 0}:function(){return this.originalEvent?this.originalEvent[e]:void 0},set:function(t){Object.defineProperty(this,e,{enumerable:!0,configurable:!0,writable:!0,value:t})}})},fix:function(e){return e[Ee.expando]?e:new Ee.Event(e)},special:{load:{noBubble:!0},click:{setup:function(e){var t=this||e;return nt.test(t.type)&&t.click&&i(t,"input")&&j(t,"click",E),!1},trigger:function(e){var t=this||e;return nt.test(t.type)&&t.click&&i(t,"input")&&j(t,"click"),!0},_default:function(e){var t=e.target;return nt.test(t.type)&&t.click&&i(t,"input")&&ze.get(t,"click")||i(t,"a")}},beforeunload:{postDispatch:function(e){void 0!==e.result&&e.originalEvent&&(e.originalEvent.returnValue=e.result)}}}},Ee.removeEvent=function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n)},Ee.Event=function(e,t){return this instanceof Ee.Event?(e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||void 0===e.defaultPrevented&&e.returnValue===!1?E:S,this.target=e.target&&3===e.target.nodeType?e.target.parentNode:e.target,this.currentTarget=e.currentTarget,this.relatedTarget=e.relatedTarget):this.type=e,t&&Ee.extend(this,t),this.timeStamp=e&&e.timeStamp||Date.now(),void(this[Ee.expando]=!0)):new Ee.Event(e,t)},Ee.Event.prototype={constructor:Ee.Event,isDefaultPrevented:S,isPropagationStopped:S,isImmediatePropagationStopped:S,isSimulated:!1,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=E,e&&!this.isSimulated&&e.preventDefault()},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=E,e&&!this.isSimulated&&e.stopPropagation()},stopImmediatePropagation:function(){var e=this.originalEvent;this.isImmediatePropagationStopped=E,e&&!this.isSimulated&&e.stopImmediatePropagation(),this.stopPropagation()}},Ee.each({altKey:!0,bubbles:!0,cancelable:!0,changedTouches:!0,ctrlKey:!0,detail:!0,eventPhase:!0,metaKey:!0,pageX:!0,pageY:!0,shiftKey:!0,view:!0,"char":!0,code:!0,charCode:!0,key:!0,keyCode:!0,button:!0,buttons:!0,clientX:!0,clientY:!0,offsetX:!0,offsetY:!0,pointerId:!0,pointerType:!0,screenX:!0,screenY:!0,targetTouches:!0,toElement:!0,touches:!0,which:function(e){var t=e.button;return null==e.which&&st.test(e.type)?null!=e.charCode?e.charCode:e.keyCode:!e.which&&void 0!==t&&ut.test(e.type)?1&t?1:2&t?3:4&t?2:0:e.which}},Ee.event.addProp),Ee.each({focus:"focusin",blur:"focusout"},function(e,t){Ee.event.special[e]={setup:function(){return j(this,e,k),!1},trigger:function(){return j(this,e),!0},delegateType:t}}),Ee.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(e,t){Ee.event.special[e]={delegateType:t,bindType:t,handle:function(e){var n,r=this,o=e.relatedTarget,i=e.handleObj;return o&&(o===r||Ee.contains(r,o))||(e.type=i.origType,n=i.handler.apply(this,arguments),e.type=t),n}}}),Ee.fn.extend({on:function(e,t,n,r){return N(this,e,t,n,r)},one:function(e,t,n,r){return N(this,e,t,n,r,1)},off:function(e,t,n){var r,o;if(e&&e.preventDefault&&e.handleObj)return r=e.handleObj,Ee(e.delegateTarget).off(r.namespace?r.origType+"."+r.namespace:r.origType,r.selector,r.handler),this;if("object"==typeof e){for(o in e)this.off(o,t,e[o]);return this}return t!==!1&&"function"!=typeof t||(n=t,t=void 0),n===!1&&(n=S),this.each(function(){Ee.event.remove(this,e,n,t)})}});var ct=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\/\0>\x20\t\r\n\f]*)[^>]*)\/>/gi,ft=/<script|<style|<link/i,dt=/checked\s*(?:[^=]|=\s*.checked.)/i,pt=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g;Ee.extend({htmlPrefilter:function(e){return e.replace(ct,"<$1></$2>")},clone:function(e,t,n){var r,o,i,a,s=e.cloneNode(!0),u=Ke(e);if(!(be.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||Ee.isXMLDoc(e)))for(a=w(s),i=w(e),r=0,o=i.length;o>r;r++)H(i[r],a[r]);if(t)if(n)for(i=i||w(e),a=a||w(s),r=0,o=i.length;o>r;r++)O(i[r],a[r]);else O(e,s);return a=w(s,"script"),a.length>0&&C(a,!u&&w(e,"script")),s},cleanData:function(e){for(var t,n,r,o=Ee.event.special,i=0;void 0!==(n=e[i]);i++)if(Fe(n)){if(t=n[ze.expando]){if(t.events)for(r in t.events)o[r]?Ee.event.remove(n,r):Ee.removeEvent(n,r,t.handle);n[ze.expando]=void 0}n[We.expando]&&(n[We.expando]=void 0)}}}),Ee.fn.extend({detach:function(e){return q(this,e,!0)},remove:function(e){return q(this,e)},text:function(e){return Re(this,function(e){return void 0===e?Ee.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=e)})},null,e,arguments.length)},append:function(){return P(this,arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=I(this,e);t.appendChild(e)}})},prepend:function(){return P(this,arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=I(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return P(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return P(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},empty:function(){for(var e,t=0;null!=(e=this[t]);t++)1===e.nodeType&&(Ee.cleanData(w(e,!1)),e.textContent="");return this},clone:function(e,t){return e=null==e?!1:e,t=null==t?e:t,this.map(function(){return Ee.clone(this,e,t)})},html:function(e){return Re(this,function(e){var t=this[0]||{},n=0,r=this.length;if(void 0===e&&1===t.nodeType)return t.innerHTML;if("string"==typeof e&&!ft.test(e)&&!it[(rt.exec(e)||["",""])[1].toLowerCase()]){e=Ee.htmlPrefilter(e);try{for(;r>n;n++)t=this[n]||{},1===t.nodeType&&(Ee.cleanData(w(t,!1)),t.innerHTML=e);t=0}catch(o){}}t&&this.empty().append(e)},null,e,arguments.length)},replaceWith:function(){var e=[];return P(this,arguments,function(t){var n=this.parentNode;Ee.inArray(this,e)<0&&(Ee.cleanData(w(this)),n&&n.replaceChild(t,this))},e)}}),Ee.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(e,t){Ee.fn[e]=function(e){for(var n,r=[],o=Ee(e),i=o.length-1,a=0;i>=a;a++)n=a===i?this:this.clone(!0),Ee(o[a])[t](n),de.apply(r,n.get());return this.pushStack(r)}});var ht=new RegExp("^("+Qe+")(?!px)[a-z%]+$","i"),mt=function(t){var n=t.ownerDocument.defaultView;return n&&n.opener||(n=e),n.getComputedStyle(t)},gt=new RegExp(Ve.join("|"),"i");!function(){function t(){if(l){u.style.cssText="position:absolute;left:-11111px;width:60px;margin-top:1px;padding:0;border:0",l.style.cssText="position:relative;display:block;box-sizing:border-box;overflow:scroll;margin:auto;border:1px;padding:1px;width:60%;top:1%",Ge.appendChild(u).appendChild(l);var t=e.getComputedStyle(l);r="1%"!==t.top,s=12===n(t.marginLeft),l.style.right="60%",a=36===n(t.right),o=36===n(t.width),l.style.position="absolute",i=12===n(l.offsetWidth/3),Ge.removeChild(u),l=null}}function n(e){return Math.round(parseFloat(e))}var r,o,i,a,s,u=ue.createElement("div"),l=ue.createElement("div");l.style&&(l.style.backgroundClip="content-box",l.cloneNode(!0).style.backgroundClip="",be.clearCloneStyle="content-box"===l.style.backgroundClip,Ee.extend(be,{boxSizingReliable:function(){return t(),o},pixelBoxStyles:function(){return t(),a},pixelPosition:function(){return t(),r},reliableMarginLeft:function(){return t(),s},scrollboxSize:function(){return t(),i}}))}();var vt=["Webkit","Moz","ms"],yt=ue.createElement("div").style,bt={},xt=/^(none|table(?!-c[ea]).+)/,wt=/^--/,Ct={position:"absolute",visibility:"hidden",display:"block"},Tt={letterSpacing:"0",fontWeight:"400"};Ee.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=M(e,"opacity");return""===n?"1":n}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,gridArea:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnStart:!0,gridRow:!0,gridRowEnd:!0,gridRowStart:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{},style:function(e,t,n,r){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var o,i,a,s=h(t),u=wt.test(t),l=e.style;return u||(t=B(s)),a=Ee.cssHooks[t]||Ee.cssHooks[s],void 0===n?a&&"get"in a&&void 0!==(o=a.get(e,!1,r))?o:l[t]:(i=typeof n,"string"===i&&(o=Ye.exec(n))&&o[1]&&(n=y(e,t,o),i="number"),null!=n&&n===n&&("number"!==i||u||(n+=o&&o[3]||(Ee.cssNumber[s]?"":"px")),be.clearCloneStyle||""!==n||0!==t.indexOf("background")||(l[t]="inherit"),a&&"set"in a&&void 0===(n=a.set(e,n,r))||(u?l.setProperty(t,n):l[t]=n)),void 0)}},css:function(e,t,n,r){var o,i,a,s=h(t),u=wt.test(t);return u||(t=B(s)),a=Ee.cssHooks[t]||Ee.cssHooks[s],a&&"get"in a&&(o=a.get(e,!0,n)),void 0===o&&(o=M(e,t,r)),"normal"===o&&t in Tt&&(o=Tt[t]),""===n||n?(i=parseFloat(o),n===!0||isFinite(i)?i||0:o):o}}),Ee.each(["height","width"],function(e,t){Ee.cssHooks[t]={get:function(e,n,r){return n?!xt.test(Ee.css(e,"display"))||e.getClientRects().length&&e.getBoundingClientRect().width?z(e,t,r):et(e,Ct,function(){return z(e,t,r)}):void 0},set:function(e,n,r){var o,i=mt(e),a=!be.scrollboxSize()&&"absolute"===i.position,s=a||r,u=s&&"border-box"===Ee.css(e,"boxSizing",!1,i),l=r?F(e,t,r,u,i):0;return u&&a&&(l-=Math.ceil(e["offset"+t[0].toUpperCase()+t.slice(1)]-parseFloat(i[t])-F(e,t,"border",!1,i)-.5)),l&&(o=Ye.exec(n))&&"px"!==(o[3]||"px")&&(e.style[t]=n,n=Ee.css(e,t)),$(e,n,l)}}}),Ee.cssHooks.marginLeft=_(be.reliableMarginLeft,function(e,t){return t?(parseFloat(M(e,"marginLeft"))||e.getBoundingClientRect().left-et(e,{marginLeft:0},function(){return e.getBoundingClientRect().left}))+"px":void 0}),Ee.each({margin:"",padding:"",border:"Width"},function(e,t){Ee.cssHooks[e+t]={expand:function(n){for(var r=0,o={},i="string"==typeof n?n.split(" "):[n];4>r;r++)o[e+Ve[r]+t]=i[r]||i[r-2]||i[0];return o}},"margin"!==e&&(Ee.cssHooks[e+t].set=$)}),Ee.fn.extend({css:function(e,t){return Re(this,function(e,t,n){var r,o,i={},a=0;if(Array.isArray(t)){for(r=mt(e),o=t.length;o>a;a++)i[t[a]]=Ee.css(e,t[a],!1,r);return i}return void 0!==n?Ee.style(e,t,n):Ee.css(e,t)},e,t,arguments.length>1)}}),Ee.Tween=W,W.prototype={constructor:W,init:function(e,t,n,r,o,i){this.elem=e,this.prop=n,this.easing=o||Ee.easing._default,this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=i||(Ee.cssNumber[n]?"":"px")},cur:function(){var e=W.propHooks[this.prop];return e&&e.get?e.get(this):W.propHooks._default.get(this)},run:function(e){var t,n=W.propHooks[this.prop];return this.options.duration?this.pos=t=Ee.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):this.pos=t=e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):W.propHooks._default.set(this),this}},W.prototype.init.prototype=W.prototype,W.propHooks={_default:{get:function(e){var t;return 1!==e.elem.nodeType||null!=e.elem[e.prop]&&null==e.elem.style[e.prop]?e.elem[e.prop]:(t=Ee.css(e.elem,e.prop,""),t&&"auto"!==t?t:0)},set:function(e){Ee.fx.step[e.prop]?Ee.fx.step[e.prop](e):1!==e.elem.nodeType||!Ee.cssHooks[e.prop]&&null==e.elem.style[B(e.prop)]?e.elem[e.prop]=e.now:Ee.style(e.elem,e.prop,e.now+e.unit)}}},W.propHooks.scrollTop=W.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},Ee.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2},_default:"swing"},Ee.fx=W.prototype.init,Ee.fx.step={};var Et,St,kt=/^(?:toggle|show|hide)$/,At=/queueHooks$/;Ee.Animation=Ee.extend(K,{tweeners:{"*":[function(e,t){var n=this.createTween(e,t);return y(n.elem,e,Ye.exec(t),n),n}]},tweener:function(e,t){xe(e)?(t=e,e=["*"]):e=e.match(qe);
-for(var n,r=0,o=e.length;o>r;r++)n=e[r],K.tweeners[n]=K.tweeners[n]||[],K.tweeners[n].unshift(t)},prefilters:[V],prefilter:function(e,t){t?K.prefilters.unshift(e):K.prefilters.push(e)}}),Ee.speed=function(e,t,n){var r=e&&"object"==typeof e?Ee.extend({},e):{complete:n||!n&&t||xe(e)&&e,duration:e,easing:n&&t||t&&!xe(t)&&t};return Ee.fx.off?r.duration=0:"number"!=typeof r.duration&&(r.duration in Ee.fx.speeds?r.duration=Ee.fx.speeds[r.duration]:r.duration=Ee.fx.speeds._default),null!=r.queue&&r.queue!==!0||(r.queue="fx"),r.old=r.complete,r.complete=function(){xe(r.old)&&r.old.call(this),r.queue&&Ee.dequeue(this,r.queue)},r},Ee.fn.extend({fadeTo:function(e,t,n,r){return this.filter(Je).css("opacity",0).show().end().animate({opacity:t},e,n,r)},animate:function(e,t,n,r){var o=Ee.isEmptyObject(e),i=Ee.speed(t,n,r),a=function(){var t=K(this,Ee.extend({},e),i);(o||ze.get(this,"finish"))&&t.stop(!0)};return a.finish=a,o||i.queue===!1?this.each(a):this.queue(i.queue,a)},stop:function(e,t,n){var r=function(e){var t=e.stop;delete e.stop,t(n)};return"string"!=typeof e&&(n=t,t=e,e=void 0),t&&e!==!1&&this.queue(e||"fx",[]),this.each(function(){var t=!0,o=null!=e&&e+"queueHooks",i=Ee.timers,a=ze.get(this);if(o)a[o]&&a[o].stop&&r(a[o]);else for(o in a)a[o]&&a[o].stop&&At.test(o)&&r(a[o]);for(o=i.length;o--;)i[o].elem!==this||null!=e&&i[o].queue!==e||(i[o].anim.stop(n),t=!1,i.splice(o,1));!t&&n||Ee.dequeue(this,e)})},finish:function(e){return e!==!1&&(e=e||"fx"),this.each(function(){var t,n=ze.get(this),r=n[e+"queue"],o=n[e+"queueHooks"],i=Ee.timers,a=r?r.length:0;for(n.finish=!0,Ee.queue(this,e,[]),o&&o.stop&&o.stop.call(this,!0),t=i.length;t--;)i[t].elem===this&&i[t].queue===e&&(i[t].anim.stop(!0),i.splice(t,1));for(t=0;a>t;t++)r[t]&&r[t].finish&&r[t].finish.call(this);delete n.finish})}}),Ee.each(["toggle","show","hide"],function(e,t){var n=Ee.fn[t];Ee.fn[t]=function(e,r,o){return null==e||"boolean"==typeof e?n.apply(this,arguments):this.animate(Q(t,!0),e,r,o)}}),Ee.each({slideDown:Q("show"),slideUp:Q("hide"),slideToggle:Q("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(e,t){Ee.fn[e]=function(e,n,r){return this.animate(t,e,n,r)}}),Ee.timers=[],Ee.fx.tick=function(){var e,t=0,n=Ee.timers;for(Et=Date.now();t<n.length;t++)e=n[t],e()||n[t]!==e||n.splice(t--,1);n.length||Ee.fx.stop(),Et=void 0},Ee.fx.timer=function(e){Ee.timers.push(e),Ee.fx.start()},Ee.fx.interval=13,Ee.fx.start=function(){St||(St=!0,U())},Ee.fx.stop=function(){St=null},Ee.fx.speeds={slow:600,fast:200,_default:400},Ee.fn.delay=function(t,n){return t=Ee.fx?Ee.fx.speeds[t]||t:t,n=n||"fx",this.queue(n,function(n,r){var o=e.setTimeout(n,t);r.stop=function(){e.clearTimeout(o)}})},function(){var e=ue.createElement("input"),t=ue.createElement("select"),n=t.appendChild(ue.createElement("option"));e.type="checkbox",be.checkOn=""!==e.value,be.optSelected=n.selected,e=ue.createElement("input"),e.value="t",e.type="radio",be.radioValue="t"===e.value}();var Nt,jt=Ee.expr.attrHandle;Ee.fn.extend({attr:function(e,t){return Re(this,Ee.attr,e,t,arguments.length>1)},removeAttr:function(e){return this.each(function(){Ee.removeAttr(this,e)})}}),Ee.extend({attr:function(e,t,n){var r,o,i=e.nodeType;if(3!==i&&8!==i&&2!==i)return"undefined"==typeof e.getAttribute?Ee.prop(e,t,n):(1===i&&Ee.isXMLDoc(e)||(o=Ee.attrHooks[t.toLowerCase()]||(Ee.expr.match.bool.test(t)?Nt:void 0)),void 0!==n?null===n?void Ee.removeAttr(e,t):o&&"set"in o&&void 0!==(r=o.set(e,n,t))?r:(e.setAttribute(t,n+""),n):o&&"get"in o&&null!==(r=o.get(e,t))?r:(r=Ee.find.attr(e,t),null==r?void 0:r))},attrHooks:{type:{set:function(e,t){if(!be.radioValue&&"radio"===t&&i(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},removeAttr:function(e,t){var n,r=0,o=t&&t.match(qe);if(o&&1===e.nodeType)for(;n=o[r++];)e.removeAttribute(n)}}),Nt={set:function(e,t,n){return t===!1?Ee.removeAttr(e,n):e.setAttribute(n,n),n}},Ee.each(Ee.expr.match.bool.source.match(/\w+/g),function(e,t){var n=jt[t]||Ee.find.attr;jt[t]=function(e,t,r){var o,i,a=t.toLowerCase();return r||(i=jt[a],jt[a]=o,o=null!=n(e,t,r)?a:null,jt[a]=i),o}});var It=/^(?:input|select|textarea|button)$/i,Lt=/^(?:a|area)$/i;Ee.fn.extend({prop:function(e,t){return Re(this,Ee.prop,e,t,arguments.length>1)},removeProp:function(e){return this.each(function(){delete this[Ee.propFix[e]||e]})}}),Ee.extend({prop:function(e,t,n){var r,o,i=e.nodeType;if(3!==i&&8!==i&&2!==i)return 1===i&&Ee.isXMLDoc(e)||(t=Ee.propFix[t]||t,o=Ee.propHooks[t]),void 0!==n?o&&"set"in o&&void 0!==(r=o.set(e,n,t))?r:e[t]=n:o&&"get"in o&&null!==(r=o.get(e,t))?r:e[t]},propHooks:{tabIndex:{get:function(e){var t=Ee.find.attr(e,"tabindex");return t?parseInt(t,10):It.test(e.nodeName)||Lt.test(e.nodeName)&&e.href?0:-1}}},propFix:{"for":"htmlFor","class":"className"}}),be.optSelected||(Ee.propHooks.selected={get:function(e){var t=e.parentNode;return t&&t.parentNode&&t.parentNode.selectedIndex,null},set:function(e){var t=e.parentNode;t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex)}}),Ee.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){Ee.propFix[this.toLowerCase()]=this}),Ee.fn.extend({addClass:function(e){var t,n,r,o,i,a,s,u=0;if(xe(e))return this.each(function(t){Ee(this).addClass(e.call(this,t,J(this)))});if(t=ee(e),t.length)for(;n=this[u++];)if(o=J(n),r=1===n.nodeType&&" "+Z(o)+" "){for(a=0;i=t[a++];)r.indexOf(" "+i+" ")<0&&(r+=i+" ");s=Z(r),o!==s&&n.setAttribute("class",s)}return this},removeClass:function(e){var t,n,r,o,i,a,s,u=0;if(xe(e))return this.each(function(t){Ee(this).removeClass(e.call(this,t,J(this)))});if(!arguments.length)return this.attr("class","");if(t=ee(e),t.length)for(;n=this[u++];)if(o=J(n),r=1===n.nodeType&&" "+Z(o)+" "){for(a=0;i=t[a++];)for(;r.indexOf(" "+i+" ")>-1;)r=r.replace(" "+i+" "," ");s=Z(r),o!==s&&n.setAttribute("class",s)}return this},toggleClass:function(e,t){var n=typeof e,r="string"===n||Array.isArray(e);return"boolean"==typeof t&&r?t?this.addClass(e):this.removeClass(e):xe(e)?this.each(function(n){Ee(this).toggleClass(e.call(this,n,J(this),t),t)}):this.each(function(){var t,o,i,a;if(r)for(o=0,i=Ee(this),a=ee(e);t=a[o++];)i.hasClass(t)?i.removeClass(t):i.addClass(t);else void 0!==e&&"boolean"!==n||(t=J(this),t&&ze.set(this,"__className__",t),this.setAttribute&&this.setAttribute("class",t||e===!1?"":ze.get(this,"__className__")||""))})},hasClass:function(e){var t,n,r=0;for(t=" "+e+" ";n=this[r++];)if(1===n.nodeType&&(" "+Z(J(n))+" ").indexOf(t)>-1)return!0;return!1}});var Dt=/\r/g;Ee.fn.extend({val:function(e){var t,n,r,o=this[0];{if(arguments.length)return r=xe(e),this.each(function(n){var o;1===this.nodeType&&(o=r?e.call(this,n,Ee(this).val()):e,null==o?o="":"number"==typeof o?o+="":Array.isArray(o)&&(o=Ee.map(o,function(e){return null==e?"":e+""})),t=Ee.valHooks[this.type]||Ee.valHooks[this.nodeName.toLowerCase()],t&&"set"in t&&void 0!==t.set(this,o,"value")||(this.value=o))});if(o)return t=Ee.valHooks[o.type]||Ee.valHooks[o.nodeName.toLowerCase()],t&&"get"in t&&void 0!==(n=t.get(o,"value"))?n:(n=o.value,"string"==typeof n?n.replace(Dt,""):null==n?"":n)}}}),Ee.extend({valHooks:{option:{get:function(e){var t=Ee.find.attr(e,"value");return null!=t?t:Z(Ee.text(e))}},select:{get:function(e){var t,n,r,o=e.options,a=e.selectedIndex,s="select-one"===e.type,u=s?null:[],l=s?a+1:o.length;for(r=0>a?l:s?a:0;l>r;r++)if(n=o[r],(n.selected||r===a)&&!n.disabled&&(!n.parentNode.disabled||!i(n.parentNode,"optgroup"))){if(t=Ee(n).val(),s)return t;u.push(t)}return u},set:function(e,t){for(var n,r,o=e.options,i=Ee.makeArray(t),a=o.length;a--;)r=o[a],(r.selected=Ee.inArray(Ee.valHooks.option.get(r),i)>-1)&&(n=!0);return n||(e.selectedIndex=-1),i}}}}),Ee.each(["radio","checkbox"],function(){Ee.valHooks[this]={set:function(e,t){return Array.isArray(t)?e.checked=Ee.inArray(Ee(e).val(),t)>-1:void 0}},be.checkOn||(Ee.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})}),be.focusin="onfocusin"in e;var Ot=/^(?:focusinfocus|focusoutblur)$/,Ht=function(e){e.stopPropagation()};Ee.extend(Ee.event,{trigger:function(t,n,r,o){var i,a,s,u,l,c,f,d,p=[r||ue],h=ge.call(t,"type")?t.type:t,m=ge.call(t,"namespace")?t.namespace.split("."):[];if(a=d=s=r=r||ue,3!==r.nodeType&&8!==r.nodeType&&!Ot.test(h+Ee.event.triggered)&&(h.indexOf(".")>-1&&(m=h.split("."),h=m.shift(),m.sort()),l=h.indexOf(":")<0&&"on"+h,t=t[Ee.expando]?t:new Ee.Event(h,"object"==typeof t&&t),t.isTrigger=o?2:3,t.namespace=m.join("."),t.rnamespace=t.namespace?new RegExp("(^|\\.)"+m.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,t.result=void 0,t.target||(t.target=r),n=null==n?[t]:Ee.makeArray(n,[t]),f=Ee.event.special[h]||{},o||!f.trigger||f.trigger.apply(r,n)!==!1)){if(!o&&!f.noBubble&&!we(r)){for(u=f.delegateType||h,Ot.test(u+h)||(a=a.parentNode);a;a=a.parentNode)p.push(a),s=a;s===(r.ownerDocument||ue)&&p.push(s.defaultView||s.parentWindow||e)}for(i=0;(a=p[i++])&&!t.isPropagationStopped();)d=a,t.type=i>1?u:f.bindType||h,c=(ze.get(a,"events")||{})[t.type]&&ze.get(a,"handle"),c&&c.apply(a,n),c=l&&a[l],c&&c.apply&&Fe(a)&&(t.result=c.apply(a,n),t.result===!1&&t.preventDefault());return t.type=h,o||t.isDefaultPrevented()||f._default&&f._default.apply(p.pop(),n)!==!1||!Fe(r)||l&&xe(r[h])&&!we(r)&&(s=r[l],s&&(r[l]=null),Ee.event.triggered=h,t.isPropagationStopped()&&d.addEventListener(h,Ht),r[h](),t.isPropagationStopped()&&d.removeEventListener(h,Ht),Ee.event.triggered=void 0,s&&(r[l]=s)),t.result}},simulate:function(e,t,n){var r=Ee.extend(new Ee.Event,n,{type:e,isSimulated:!0});Ee.event.trigger(r,null,t)}}),Ee.fn.extend({trigger:function(e,t){return this.each(function(){Ee.event.trigger(e,t,this)})},triggerHandler:function(e,t){var n=this[0];return n?Ee.event.trigger(e,t,n,!0):void 0}}),be.focusin||Ee.each({focus:"focusin",blur:"focusout"},function(e,t){var n=function(e){Ee.event.simulate(t,e.target,Ee.event.fix(e))};Ee.event.special[t]={setup:function(){var r=this.ownerDocument||this,o=ze.access(r,t);o||r.addEventListener(e,n,!0),ze.access(r,t,(o||0)+1)},teardown:function(){var r=this.ownerDocument||this,o=ze.access(r,t)-1;o?ze.access(r,t,o):(r.removeEventListener(e,n,!0),ze.remove(r,t))}}});var Pt=e.location,qt=Date.now(),Mt=/\?/;Ee.parseXML=function(t){var n;if(!t||"string"!=typeof t)return null;try{n=(new e.DOMParser).parseFromString(t,"text/xml")}catch(r){n=void 0}return n&&!n.getElementsByTagName("parsererror").length||Ee.error("Invalid XML: "+t),n};var _t=/\[\]$/,Rt=/\r?\n/g,Bt=/^(?:submit|button|image|reset|file)$/i,$t=/^(?:input|select|textarea|keygen)/i;Ee.param=function(e,t){var n,r=[],o=function(e,t){var n=xe(t)?t():t;r[r.length]=encodeURIComponent(e)+"="+encodeURIComponent(null==n?"":n)};if(null==e)return"";if(Array.isArray(e)||e.jquery&&!Ee.isPlainObject(e))Ee.each(e,function(){o(this.name,this.value)});else for(n in e)te(n,e[n],t,o);return r.join("&")},Ee.fn.extend({serialize:function(){return Ee.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=Ee.prop(this,"elements");return e?Ee.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!Ee(this).is(":disabled")&&$t.test(this.nodeName)&&!Bt.test(e)&&(this.checked||!nt.test(e))}).map(function(e,t){var n=Ee(this).val();return null==n?null:Array.isArray(n)?Ee.map(n,function(e){return{name:t.name,value:e.replace(Rt,"\r\n")}}):{name:t.name,value:n.replace(Rt,"\r\n")}}).get()}});var Ft=/%20/g,zt=/#.*$/,Wt=/([?&])_=[^&]*/,Ut=/^(.*?):[ \t]*([^\r\n]*)$/gm,Xt=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Qt=/^(?:GET|HEAD)$/,Yt=/^\/\//,Vt={},Gt={},Kt="*/".concat("*"),Zt=ue.createElement("a");Zt.href=Pt.href,Ee.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:Pt.href,type:"GET",isLocal:Xt.test(Pt.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Kt,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":Ee.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?oe(oe(e,Ee.ajaxSettings),t):oe(Ee.ajaxSettings,e)},ajaxPrefilter:ne(Vt),ajaxTransport:ne(Gt),ajax:function(t,n){function r(t,n,r,s){var l,d,p,x,w,C=n;c||(c=!0,u&&e.clearTimeout(u),o=void 0,a=s||"",T.readyState=t>0?4:0,l=t>=200&&300>t||304===t,r&&(x=ie(h,T,r)),x=ae(h,x,T,l),l?(h.ifModified&&(w=T.getResponseHeader("Last-Modified"),w&&(Ee.lastModified[i]=w),w=T.getResponseHeader("etag"),w&&(Ee.etag[i]=w)),204===t||"HEAD"===h.type?C="nocontent":304===t?C="notmodified":(C=x.state,d=x.data,p=x.error,l=!p)):(p=C,!t&&C||(C="error",0>t&&(t=0))),T.status=t,T.statusText=(n||C)+"",l?v.resolveWith(m,[d,C,T]):v.rejectWith(m,[T,C,p]),T.statusCode(b),b=void 0,f&&g.trigger(l?"ajaxSuccess":"ajaxError",[T,h,l?d:p]),y.fireWith(m,[T,C]),f&&(g.trigger("ajaxComplete",[T,h]),--Ee.active||Ee.event.trigger("ajaxStop")))}"object"==typeof t&&(n=t,t=void 0),n=n||{};var o,i,a,s,u,l,c,f,d,p,h=Ee.ajaxSetup({},n),m=h.context||h,g=h.context&&(m.nodeType||m.jquery)?Ee(m):Ee.event,v=Ee.Deferred(),y=Ee.Callbacks("once memory"),b=h.statusCode||{},x={},w={},C="canceled",T={readyState:0,getResponseHeader:function(e){var t;if(c){if(!s)for(s={};t=Ut.exec(a);)s[t[1].toLowerCase()+" "]=(s[t[1].toLowerCase()+" "]||[]).concat(t[2]);t=s[e.toLowerCase()+" "]}return null==t?null:t.join(", ")},getAllResponseHeaders:function(){return c?a:null},setRequestHeader:function(e,t){return null==c&&(e=w[e.toLowerCase()]=w[e.toLowerCase()]||e,x[e]=t),this},overrideMimeType:function(e){return null==c&&(h.mimeType=e),this},statusCode:function(e){var t;if(e)if(c)T.always(e[T.status]);else for(t in e)b[t]=[b[t],e[t]];return this},abort:function(e){var t=e||C;return o&&o.abort(t),r(0,t),this}};if(v.promise(T),h.url=((t||h.url||Pt.href)+"").replace(Yt,Pt.protocol+"//"),h.type=n.method||n.type||h.method||h.type,h.dataTypes=(h.dataType||"*").toLowerCase().match(qe)||[""],null==h.crossDomain){l=ue.createElement("a");try{l.href=h.url,l.href=l.href,h.crossDomain=Zt.protocol+"//"+Zt.host!=l.protocol+"//"+l.host}catch(E){h.crossDomain=!0}}if(h.data&&h.processData&&"string"!=typeof h.data&&(h.data=Ee.param(h.data,h.traditional)),re(Vt,h,n,T),c)return T;f=Ee.event&&h.global,f&&0===Ee.active++&&Ee.event.trigger("ajaxStart"),h.type=h.type.toUpperCase(),h.hasContent=!Qt.test(h.type),i=h.url.replace(zt,""),h.hasContent?h.data&&h.processData&&0===(h.contentType||"").indexOf("application/x-www-form-urlencoded")&&(h.data=h.data.replace(Ft,"+")):(p=h.url.slice(i.length),h.data&&(h.processData||"string"==typeof h.data)&&(i+=(Mt.test(i)?"&":"?")+h.data,delete h.data),h.cache===!1&&(i=i.replace(Wt,"$1"),p=(Mt.test(i)?"&":"?")+"_="+qt++ +p),h.url=i+p),h.ifModified&&(Ee.lastModified[i]&&T.setRequestHeader("If-Modified-Since",Ee.lastModified[i]),Ee.etag[i]&&T.setRequestHeader("If-None-Match",Ee.etag[i])),(h.data&&h.hasContent&&h.contentType!==!1||n.contentType)&&T.setRequestHeader("Content-Type",h.contentType),T.setRequestHeader("Accept",h.dataTypes[0]&&h.accepts[h.dataTypes[0]]?h.accepts[h.dataTypes[0]]+("*"!==h.dataTypes[0]?", "+Kt+"; q=0.01":""):h.accepts["*"]);for(d in h.headers)T.setRequestHeader(d,h.headers[d]);if(h.beforeSend&&(h.beforeSend.call(m,T,h)===!1||c))return T.abort();if(C="abort",y.add(h.complete),T.done(h.success),T.fail(h.error),o=re(Gt,h,n,T)){if(T.readyState=1,f&&g.trigger("ajaxSend",[T,h]),c)return T;h.async&&h.timeout>0&&(u=e.setTimeout(function(){T.abort("timeout")},h.timeout));try{c=!1,o.send(x,r)}catch(E){if(c)throw E;r(-1,E)}}else r(-1,"No Transport");return T},getJSON:function(e,t,n){return Ee.get(e,t,n,"json")},getScript:function(e,t){return Ee.get(e,void 0,t,"script")}}),Ee.each(["get","post"],function(e,t){Ee[t]=function(e,n,r,o){return xe(n)&&(o=o||r,r=n,n=void 0),Ee.ajax(Ee.extend({url:e,type:t,dataType:o,data:n,success:r},Ee.isPlainObject(e)&&e))}}),Ee._evalUrl=function(e,t){return Ee.ajax({url:e,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,converters:{"text script":function(){}},dataFilter:function(e){Ee.globalEval(e,t)}})},Ee.fn.extend({wrapAll:function(e){var t;return this[0]&&(xe(e)&&(e=e.call(this[0])),t=Ee(e,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){for(var e=this;e.firstElementChild;)e=e.firstElementChild;return e}).append(this)),this},wrapInner:function(e){return xe(e)?this.each(function(t){Ee(this).wrapInner(e.call(this,t))}):this.each(function(){var t=Ee(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)})},wrap:function(e){var t=xe(e);return this.each(function(n){Ee(this).wrapAll(t?e.call(this,n):e)})},unwrap:function(e){return this.parent(e).not("body").each(function(){Ee(this).replaceWith(this.childNodes)}),this}}),Ee.expr.pseudos.hidden=function(e){return!Ee.expr.pseudos.visible(e)},Ee.expr.pseudos.visible=function(e){return!!(e.offsetWidth||e.offsetHeight||e.getClientRects().length)},Ee.ajaxSettings.xhr=function(){try{return new e.XMLHttpRequest}catch(t){}};var Jt={0:200,1223:204},en=Ee.ajaxSettings.xhr();be.cors=!!en&&"withCredentials"in en,be.ajax=en=!!en,Ee.ajaxTransport(function(t){var n,r;return be.cors||en&&!t.crossDomain?{send:function(o,i){var a,s=t.xhr();if(s.open(t.type,t.url,t.async,t.username,t.password),t.xhrFields)for(a in t.xhrFields)s[a]=t.xhrFields[a];t.mimeType&&s.overrideMimeType&&s.overrideMimeType(t.mimeType),t.crossDomain||o["X-Requested-With"]||(o["X-Requested-With"]="XMLHttpRequest");for(a in o)s.setRequestHeader(a,o[a]);n=function(e){return function(){n&&(n=r=s.onload=s.onerror=s.onabort=s.ontimeout=s.onreadystatechange=null,"abort"===e?s.abort():"error"===e?"number"!=typeof s.status?i(0,"error"):i(s.status,s.statusText):i(Jt[s.status]||s.status,s.statusText,"text"!==(s.responseType||"text")||"string"!=typeof s.responseText?{binary:s.response}:{text:s.responseText},s.getAllResponseHeaders()))}},s.onload=n(),r=s.onerror=s.ontimeout=n("error"),void 0!==s.onabort?s.onabort=r:s.onreadystatechange=function(){4===s.readyState&&e.setTimeout(function(){n&&r()})},n=n("abort");try{s.send(t.hasContent&&t.data||null)}catch(u){if(n)throw u}},abort:function(){n&&n()}}:void 0}),Ee.ajaxPrefilter(function(e){e.crossDomain&&(e.contents.script=!1)}),Ee.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(e){return Ee.globalEval(e),e}}}),Ee.ajaxPrefilter("script",function(e){void 0===e.cache&&(e.cache=!1),e.crossDomain&&(e.type="GET")}),Ee.ajaxTransport("script",function(e){if(e.crossDomain||e.scriptAttrs){var t,n;return{send:function(r,o){t=Ee("<script>").attr(e.scriptAttrs||{}).prop({charset:e.scriptCharset,src:e.url}).on("load error",n=function(e){t.remove(),n=null,e&&o("error"===e.type?404:200,e.type)}),ue.head.appendChild(t[0])},abort:function(){n&&n()}}}});var tn=[],nn=/(=)\?(?=&|$)|\?\?/;Ee.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=tn.pop()||Ee.expando+"_"+qt++;return this[e]=!0,e}}),Ee.ajaxPrefilter("json jsonp",function(t,n,r){var o,i,a,s=t.jsonp!==!1&&(nn.test(t.url)?"url":"string"==typeof t.data&&0===(t.contentType||"").indexOf("application/x-www-form-urlencoded")&&nn.test(t.data)&&"data");return s||"jsonp"===t.dataTypes[0]?(o=t.jsonpCallback=xe(t.jsonpCallback)?t.jsonpCallback():t.jsonpCallback,s?t[s]=t[s].replace(nn,"$1"+o):t.jsonp!==!1&&(t.url+=(Mt.test(t.url)?"&":"?")+t.jsonp+"="+o),t.converters["script json"]=function(){return a||Ee.error(o+" was not called"),a[0]},t.dataTypes[0]="json",i=e[o],e[o]=function(){a=arguments},r.always(function(){void 0===i?Ee(e).removeProp(o):e[o]=i,t[o]&&(t.jsonpCallback=n.jsonpCallback,tn.push(o)),a&&xe(i)&&i(a[0]),a=i=void 0}),"script"):void 0}),be.createHTMLDocument=function(){var e=ue.implementation.createHTMLDocument("").body;return e.innerHTML="<form></form><form></form>",2===e.childNodes.length}(),Ee.parseHTML=function(e,t,n){if("string"!=typeof e)return[];"boolean"==typeof t&&(n=t,t=!1);var r,o,i;return t||(be.createHTMLDocument?(t=ue.implementation.createHTMLDocument(""),r=t.createElement("base"),r.href=ue.location.href,t.head.appendChild(r)):t=ue),o=Ie.exec(e),i=!n&&[],o?[t.createElement(o[1])]:(o=T([e],t,i),i&&i.length&&Ee(i).remove(),Ee.merge([],o.childNodes))},Ee.fn.load=function(e,t,n){var r,o,i,a=this,s=e.indexOf(" ");return s>-1&&(r=Z(e.slice(s)),e=e.slice(0,s)),xe(t)?(n=t,t=void 0):t&&"object"==typeof t&&(o="POST"),a.length>0&&Ee.ajax({url:e,type:o||"GET",dataType:"html",data:t}).done(function(e){i=arguments,a.html(r?Ee("<div>").append(Ee.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,i||[e.responseText,t,e])})}),this},Ee.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){Ee.fn[t]=function(e){return this.on(t,e)}}),Ee.expr.pseudos.animated=function(e){return Ee.grep(Ee.timers,function(t){return e===t.elem}).length},Ee.offset={setOffset:function(e,t,n){var r,o,i,a,s,u,l,c=Ee.css(e,"position"),f=Ee(e),d={};"static"===c&&(e.style.position="relative"),s=f.offset(),i=Ee.css(e,"top"),u=Ee.css(e,"left"),l=("absolute"===c||"fixed"===c)&&(i+u).indexOf("auto")>-1,l?(r=f.position(),a=r.top,o=r.left):(a=parseFloat(i)||0,o=parseFloat(u)||0),xe(t)&&(t=t.call(e,n,Ee.extend({},s))),null!=t.top&&(d.top=t.top-s.top+a),null!=t.left&&(d.left=t.left-s.left+o),"using"in t?t.using.call(e,d):f.css(d)}},Ee.fn.extend({offset:function(e){if(arguments.length)return void 0===e?this:this.each(function(t){Ee.offset.setOffset(this,e,t)});var t,n,r=this[0];if(r)return r.getClientRects().length?(t=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:t.top+n.pageYOffset,left:t.left+n.pageXOffset}):{top:0,left:0}},position:function(){if(this[0]){var e,t,n,r=this[0],o={top:0,left:0};if("fixed"===Ee.css(r,"position"))t=r.getBoundingClientRect();else{for(t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;e&&(e===n.body||e===n.documentElement)&&"static"===Ee.css(e,"position");)e=e.parentNode;e&&e!==r&&1===e.nodeType&&(o=Ee(e).offset(),o.top+=Ee.css(e,"borderTopWidth",!0),o.left+=Ee.css(e,"borderLeftWidth",!0))}return{top:t.top-o.top-Ee.css(r,"marginTop",!0),left:t.left-o.left-Ee.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){for(var e=this.offsetParent;e&&"static"===Ee.css(e,"position");)e=e.offsetParent;return e||Ge})}}),Ee.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(e,t){var n="pageYOffset"===t;Ee.fn[e]=function(r){return Re(this,function(e,r,o){var i;return we(e)?i=e:9===e.nodeType&&(i=e.defaultView),void 0===o?i?i[t]:e[r]:void(i?i.scrollTo(n?i.pageXOffset:o,n?o:i.pageYOffset):e[r]=o)},e,r,arguments.length)}}),Ee.each(["top","left"],function(e,t){Ee.cssHooks[t]=_(be.pixelPosition,function(e,n){return n?(n=M(e,t),ht.test(n)?Ee(e).position()[t]+"px":n):void 0})}),Ee.each({Height:"height",Width:"width"},function(e,t){Ee.each({padding:"inner"+e,content:t,"":"outer"+e},function(n,r){Ee.fn[r]=function(o,i){var a=arguments.length&&(n||"boolean"!=typeof o),s=n||(o===!0||i===!0?"margin":"border");return Re(this,function(t,n,o){var i;return we(t)?0===r.indexOf("outer")?t["inner"+e]:t.document.documentElement["client"+e]:9===t.nodeType?(i=t.documentElement,Math.max(t.body["scroll"+e],i["scroll"+e],t.body["offset"+e],i["offset"+e],i["client"+e])):void 0===o?Ee.css(t,n,s):Ee.style(t,n,o,s)},t,a?o:void 0,a)}})}),Ee.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,t){Ee.fn[t]=function(e,n){return arguments.length>0?this.on(t,null,e,n):this.trigger(t)}}),Ee.fn.extend({hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),Ee.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)}}),Ee.proxy=function(e,t){var n,r,o;return"string"==typeof t&&(n=e[t],t=e,e=n),xe(e)?(r=ce.call(arguments,2),o=function(){return e.apply(t||this,r.concat(ce.call(arguments)))},o.guid=e.guid=e.guid||Ee.guid++,o):void 0},Ee.holdReady=function(e){e?Ee.readyWait++:Ee.ready(!0)},Ee.isArray=Array.isArray,Ee.parseJSON=JSON.parse,Ee.nodeName=i,Ee.isFunction=xe,Ee.isWindow=we,Ee.camelCase=h,Ee.type=r,Ee.now=Date.now,Ee.isNumeric=function(e){var t=Ee.type(e);return("number"===t||"string"===t)&&!isNaN(e-parseFloat(e))},"function"==typeof define&&define.amd&&define("jquery",[],function(){return Ee});var rn=e.jQuery,on=e.$;return Ee.noConflict=function(t){return e.$===Ee&&(e.$=on),t&&e.jQuery===Ee&&(e.jQuery=rn),Ee},t||(e.jQuery=e.$=Ee),Ee}),function(e){"use strict";e.fn.fitVids=function(t){var n={customSelector:null,ignore:null};if(!document.getElementById("fit-vids-style")){var r=document.head||document.getElementsByTagName("head")[0],o=".fluid-width-video-wrapper{width:100%;position:relative;padding:0;}.fluid-width-video-wrapper iframe,.fluid-width-video-wrapper object,.fluid-width-video-wrapper embed {position:absolute;top:0;left:0;width:100%;height:100%;}",i=document.createElement("div");i.innerHTML='<p>x</p><style id="fit-vids-style">'+o+"</style>",r.appendChild(i.childNodes[1])}return t&&e.extend(n,t),this.each(function(){var t=['iframe[src*="player.vimeo.com"]','iframe[src*="youtube.com"]','iframe[src*="youtube-nocookie.com"]','iframe[src*="kickstarter.com"][src*="video.html"]',"object","embed"];n.customSelector&&t.push(n.customSelector);var r=".fitvidsignore";n.ignore&&(r=r+", "+n.ignore);var o=e(this).find(t.join(","));o=o.not("object object"),o=o.not(r),o.each(function(t){var n=e(this);if(!(n.parents(r).length>0||"embed"===this.tagName.toLowerCase()&&n.parent("object").length||n.parent(".fluid-width-video-wrapper").length)){n.css("height")||n.css("width")||!isNaN(n.attr("height"))&&!isNaN(n.attr("width"))||(n.attr("height",9),n.attr("width",16));var o="object"===this.tagName.toLowerCase()||n.attr("height")&&!isNaN(parseInt(n.attr("height"),10))?parseInt(n.attr("height"),10):n.height(),i=isNaN(parseInt(n.attr("width"),10))?n.width():parseInt(n.attr("width"),10),a=o/i;if(!n.attr("id")){var s="fitvid"+t;n.attr("id",s)}n.wrap('<div class="fluid-width-video-wrapper"></div>').parent(".fluid-width-video-wrapper").css("padding-top",100*a+"%"),n.removeAttr("height").removeAttr("width")}})})}}(window.jQuery||window.Zepto),$(function(){function e(){u=n.width()-10,l=n.children().length,c=s[l-1],c>u?(n.children().last().prependTo(r),l-=1,e()):u>s[l]&&(r.children().first().appendTo(n),l+=1,e()),t.attr("count",o-l),l===o?t.addClass("hidden"):t.removeClass("hidden")}var t=$("nav.greedy-nav .greedy-nav__toggle"),n=$("nav.greedy-nav .visible-links"),r=$("nav.greedy-nav .hidden-links"),o=0,i=0,a=1e3,s=[];n.children().outerWidth(function(e,t){i+=t,o+=1,s.push(i)});var u,l,c,f;$(window).resize(function(){e()}),t.on("click",function(){r.toggleClass("hidden"),clearTimeout(f)}),r.on("mouseleave",function(){f=setTimeout(function(){r.addClass("hidden")},a)}).on("mouseenter",function(){clearTimeout(f)}),e()}),function(e){"function"==typeof define&&define.amd?define(["jquery"],e):e("object"==typeof exports?require("jquery"):window.jQuery||window.Zepto)}(function(e){var t,n,r,o,i,a,s="Close",u="BeforeClose",l="AfterClose",c="BeforeAppend",f="MarkupParse",d="Open",p="Change",h="mfp",m="."+h,g="mfp-ready",v="mfp-removing",y="mfp-prevent-close",b=function(){},x=!!window.jQuery,w=e(window),C=function(e,n){t.ev.on(h+e+m,n)},T=function(t,n,r,o){var i=document.createElement("div");return i.className="mfp-"+t,r&&(i.innerHTML=r),o?n&&n.appendChild(i):(i=e(i),n&&i.appendTo(n)),i},E=function(n,r){t.ev.triggerHandler(h+n,r),t.st.callbacks&&(n=n.charAt(0).toLowerCase()+n.slice(1),t.st.callbacks[n]&&t.st.callbacks[n].apply(t,e.isArray(r)?r:[r]))},S=function(n){return n===a&&t.currTemplate.closeBtn||(t.currTemplate.closeBtn=e(t.st.closeMarkup.replace("%title%",t.st.tClose)),a=n),t.currTemplate.closeBtn},k=function(){e.magnificPopup.instance||(t=new b,t.init(),e.magnificPopup.instance=t)},A=function(){var e=document.createElement("p").style,t=["ms","O","Moz","Webkit"];if(void 0!==e.transition)return!0;for(;t.length;)if(t.pop()+"Transition"in e)return!0;return!1};b.prototype={constructor:b,init:function(){var n=navigator.appVersion;t.isLowIE=t.isIE8=document.all&&!document.addEventListener,t.isAndroid=/android/gi.test(n),t.isIOS=/iphone|ipad|ipod/gi.test(n),t.supportsTransition=A(),t.probablyMobile=t.isAndroid||t.isIOS||/(Opera Mini)|Kindle|webOS|BlackBerry|(Opera Mobi)|(Windows Phone)|IEMobile/i.test(navigator.userAgent),r=e(document),t.popupsCache={}},open:function(n){var o;if(n.isObj===!1){t.items=n.items.toArray(),t.index=0;var a,s=n.items;for(o=0;o<s.length;o++)if(a=s[o],a.parsed&&(a=a.el[0]),a===n.el[0]){t.index=o;break}}else t.items=e.isArray(n.items)?n.items:[n.items],t.index=n.index||0;if(t.isOpen)return void t.updateItemHTML();t.types=[],i="",n.mainEl&&n.mainEl.length?t.ev=n.mainEl.eq(0):t.ev=r,n.key?(t.popupsCache[n.key]||(t.popupsCache[n.key]={}),t.currTemplate=t.popupsCache[n.key]):t.currTemplate={},t.st=e.extend(!0,{},e.magnificPopup.defaults,n),t.fixedContentPos="auto"===t.st.fixedContentPos?!t.probablyMobile:t.st.fixedContentPos,t.st.modal&&(t.st.closeOnContentClick=!1,t.st.closeOnBgClick=!1,t.st.showCloseBtn=!1,t.st.enableEscapeKey=!1),t.bgOverlay||(t.bgOverlay=T("bg").on("click"+m,function(){t.close()}),t.wrap=T("wrap").attr("tabindex",-1).on("click"+m,function(e){t._checkIfClose(e.target)&&t.close()}),t.container=T("container",t.wrap)),t.contentContainer=T("content"),t.st.preloader&&(t.preloader=T("preloader",t.container,t.st.tLoading));var u=e.magnificPopup.modules;for(o=0;o<u.length;o++){var l=u[o];l=l.charAt(0).toUpperCase()+l.slice(1),t["init"+l].call(t)}E("BeforeOpen"),t.st.showCloseBtn&&(t.st.closeBtnInside?(C(f,function(e,t,n,r){n.close_replaceWith=S(r.type)}),i+=" mfp-close-btn-in"):t.wrap.append(S())),t.st.alignTop&&(i+=" mfp-align-top"),t.fixedContentPos?t.wrap.css({overflow:t.st.overflowY,overflowX:"hidden",overflowY:t.st.overflowY}):t.wrap.css({top:w.scrollTop(),position:"absolute"}),(t.st.fixedBgPos===!1||"auto"===t.st.fixedBgPos&&!t.fixedContentPos)&&t.bgOverlay.css({height:r.height(),position:"absolute"}),t.st.enableEscapeKey&&r.on("keyup"+m,function(e){27===e.keyCode&&t.close()}),w.on("resize"+m,function(){t.updateSize()}),t.st.closeOnContentClick||(i+=" mfp-auto-cursor"),i&&t.wrap.addClass(i);var c=t.wH=w.height(),p={};if(t.fixedContentPos&&t._hasScrollBar(c)){var h=t._getScrollbarSize();h&&(p.marginRight=h)}t.fixedContentPos&&(t.isIE7?e("body, html").css("overflow","hidden"):p.overflow="hidden");var v=t.st.mainClass;return t.isIE7&&(v+=" mfp-ie7"),v&&t._addClassToMFP(v),t.updateItemHTML(),E("BuildControls"),e("html").css(p),t.bgOverlay.add(t.wrap).prependTo(t.st.prependTo||e(document.body)),t._lastFocusedEl=document.activeElement,setTimeout(function(){t.content?(t._addClassToMFP(g),t._setFocus()):t.bgOverlay.addClass(g),r.on("focusin"+m,t._onFocusIn)},16),t.isOpen=!0,t.updateSize(c),E(d),n},close:function(){t.isOpen&&(E(u),t.isOpen=!1,t.st.removalDelay&&!t.isLowIE&&t.supportsTransition?(t._addClassToMFP(v),setTimeout(function(){t._close()},t.st.removalDelay)):t._close())},_close:function(){E(s);var n=v+" "+g+" ";if(t.bgOverlay.detach(),t.wrap.detach(),t.container.empty(),t.st.mainClass&&(n+=t.st.mainClass+" "),t._removeClassFromMFP(n),t.fixedContentPos){var o={marginRight:""};t.isIE7?e("body, html").css("overflow",""):o.overflow="",e("html").css(o)}r.off("keyup"+m+" focusin"+m),t.ev.off(m),t.wrap.attr("class","mfp-wrap").removeAttr("style"),t.bgOverlay.attr("class","mfp-bg"),t.container.attr("class","mfp-container"),
-!t.st.showCloseBtn||t.st.closeBtnInside&&t.currTemplate[t.currItem.type]!==!0||t.currTemplate.closeBtn&&t.currTemplate.closeBtn.detach(),t.st.autoFocusLast&&t._lastFocusedEl&&e(t._lastFocusedEl).focus(),t.currItem=null,t.content=null,t.currTemplate=null,t.prevHeight=0,E(l)},updateSize:function(e){if(t.isIOS){var n=document.documentElement.clientWidth/window.innerWidth,r=window.innerHeight*n;t.wrap.css("height",r),t.wH=r}else t.wH=e||w.height();t.fixedContentPos||t.wrap.css("height",t.wH),E("Resize")},updateItemHTML:function(){var n=t.items[t.index];t.contentContainer.detach(),t.content&&t.content.detach(),n.parsed||(n=t.parseEl(t.index));var r=n.type;if(E("BeforeChange",[t.currItem?t.currItem.type:"",r]),t.currItem=n,!t.currTemplate[r]){var i=t.st[r]?t.st[r].markup:!1;E("FirstMarkupParse",i),i?t.currTemplate[r]=e(i):t.currTemplate[r]=!0}o&&o!==n.type&&t.container.removeClass("mfp-"+o+"-holder");var a=t["get"+r.charAt(0).toUpperCase()+r.slice(1)](n,t.currTemplate[r]);t.appendContent(a,r),n.preloaded=!0,E(p,n),o=n.type,t.container.prepend(t.contentContainer),E("AfterChange")},appendContent:function(e,n){t.content=e,e?t.st.showCloseBtn&&t.st.closeBtnInside&&t.currTemplate[n]===!0?t.content.find(".mfp-close").length||t.content.append(S()):t.content=e:t.content="",E(c),t.container.addClass("mfp-"+n+"-holder"),t.contentContainer.append(t.content)},parseEl:function(n){var r,o=t.items[n];if(o.tagName?o={el:e(o)}:(r=o.type,o={data:o,src:o.src}),o.el){for(var i=t.types,a=0;a<i.length;a++)if(o.el.hasClass("mfp-"+i[a])){r=i[a];break}o.src=o.el.attr("data-mfp-src"),o.src||(o.src=o.el.attr("href"))}return o.type=r||t.st.type||"inline",o.index=n,o.parsed=!0,t.items[n]=o,E("ElementParse",o),t.items[n]},addGroup:function(e,n){var r=function(r){r.mfpEl=this,t._openClick(r,e,n)};n||(n={});var o="click.magnificPopup";n.mainEl=e,n.items?(n.isObj=!0,e.off(o).on(o,r)):(n.isObj=!1,n.delegate?e.off(o).on(o,n.delegate,r):(n.items=e,e.off(o).on(o,r)))},_openClick:function(n,r,o){var i=void 0!==o.midClick?o.midClick:e.magnificPopup.defaults.midClick;if(i||!(2===n.which||n.ctrlKey||n.metaKey||n.altKey||n.shiftKey)){var a=void 0!==o.disableOn?o.disableOn:e.magnificPopup.defaults.disableOn;if(a)if(e.isFunction(a)){if(!a.call(t))return!0}else if(w.width()<a)return!0;n.type&&(n.preventDefault(),t.isOpen&&n.stopPropagation()),o.el=e(n.mfpEl),o.delegate&&(o.items=r.find(o.delegate)),t.open(o)}},updateStatus:function(e,r){if(t.preloader){n!==e&&t.container.removeClass("mfp-s-"+n),r||"loading"!==e||(r=t.st.tLoading);var o={status:e,text:r};E("UpdateStatus",o),e=o.status,r=o.text,t.preloader.html(r),t.preloader.find("a").on("click",function(e){e.stopImmediatePropagation()}),t.container.addClass("mfp-s-"+e),n=e}},_checkIfClose:function(n){if(!e(n).hasClass(y)){var r=t.st.closeOnContentClick,o=t.st.closeOnBgClick;if(r&&o)return!0;if(!t.content||e(n).hasClass("mfp-close")||t.preloader&&n===t.preloader[0])return!0;if(n===t.content[0]||e.contains(t.content[0],n)){if(r)return!0}else if(o&&e.contains(document,n))return!0;return!1}},_addClassToMFP:function(e){t.bgOverlay.addClass(e),t.wrap.addClass(e)},_removeClassFromMFP:function(e){this.bgOverlay.removeClass(e),t.wrap.removeClass(e)},_hasScrollBar:function(e){return(t.isIE7?r.height():document.body.scrollHeight)>(e||w.height())},_setFocus:function(){(t.st.focus?t.content.find(t.st.focus).eq(0):t.wrap).focus()},_onFocusIn:function(n){return n.target===t.wrap[0]||e.contains(t.wrap[0],n.target)?void 0:(t._setFocus(),!1)},_parseMarkup:function(t,n,r){var o;r.data&&(n=e.extend(r.data,n)),E(f,[t,n,r]),e.each(n,function(n,r){if(void 0===r||r===!1)return!0;if(o=n.split("_"),o.length>1){var i=t.find(m+"-"+o[0]);if(i.length>0){var a=o[1];"replaceWith"===a?i[0]!==r[0]&&i.replaceWith(r):"img"===a?i.is("img")?i.attr("src",r):i.replaceWith(e("<img>").attr("src",r).attr("class",i.attr("class"))):i.attr(o[1],r)}}else t.find(m+"-"+n).html(r)})},_getScrollbarSize:function(){if(void 0===t.scrollbarSize){var e=document.createElement("div");e.style.cssText="width: 99px; height: 99px; overflow: scroll; position: absolute; top: -9999px;",document.body.appendChild(e),t.scrollbarSize=e.offsetWidth-e.clientWidth,document.body.removeChild(e)}return t.scrollbarSize}},e.magnificPopup={instance:null,proto:b.prototype,modules:[],open:function(t,n){return k(),t=t?e.extend(!0,{},t):{},t.isObj=!0,t.index=n||0,this.instance.open(t)},close:function(){return e.magnificPopup.instance&&e.magnificPopup.instance.close()},registerModule:function(t,n){n.options&&(e.magnificPopup.defaults[t]=n.options),e.extend(this.proto,n.proto),this.modules.push(t)},defaults:{disableOn:0,key:null,midClick:!1,mainClass:"",preloader:!0,focus:"",closeOnContentClick:!1,closeOnBgClick:!0,closeBtnInside:!0,showCloseBtn:!0,enableEscapeKey:!0,modal:!1,alignTop:!1,removalDelay:0,prependTo:null,fixedContentPos:"auto",fixedBgPos:"auto",overflowY:"auto",closeMarkup:'<button title="%title%" type="button" class="mfp-close">&#215;</button>',tClose:"Close (Esc)",tLoading:"Loading...",autoFocusLast:!0}},e.fn.magnificPopup=function(n){k();var r=e(this);if("string"==typeof n)if("open"===n){var o,i=x?r.data("magnificPopup"):r[0].magnificPopup,a=parseInt(arguments[1],10)||0;i.items?o=i.items[a]:(o=r,i.delegate&&(o=o.find(i.delegate)),o=o.eq(a)),t._openClick({mfpEl:o},r,i)}else t.isOpen&&t[n].apply(t,Array.prototype.slice.call(arguments,1));else n=e.extend(!0,{},n),x?r.data("magnificPopup",n):r[0].magnificPopup=n,t.addGroup(r,n);return r};var N,j,I,L="inline",D=function(){I&&(j.after(I.addClass(N)).detach(),I=null)};e.magnificPopup.registerModule(L,{options:{hiddenClass:"hide",markup:"",tNotFound:"Content not found"},proto:{initInline:function(){t.types.push(L),C(s+"."+L,function(){D()})},getInline:function(n,r){if(D(),n.src){var o=t.st.inline,i=e(n.src);if(i.length){var a=i[0].parentNode;a&&a.tagName&&(j||(N=o.hiddenClass,j=T(N),N="mfp-"+N),I=i.after(j).detach().removeClass(N)),t.updateStatus("ready")}else t.updateStatus("error",o.tNotFound),i=e("<div>");return n.inlineElement=i,i}return t.updateStatus("ready"),t._parseMarkup(r,{},n),r}}});var O,H="ajax",P=function(){O&&e(document.body).removeClass(O)},q=function(){P(),t.req&&t.req.abort()};e.magnificPopup.registerModule(H,{options:{settings:null,cursor:"mfp-ajax-cur",tError:'<a href="%url%">The content</a> could not be loaded.'},proto:{initAjax:function(){t.types.push(H),O=t.st.ajax.cursor,C(s+"."+H,q),C("BeforeChange."+H,q)},getAjax:function(n){O&&e(document.body).addClass(O),t.updateStatus("loading");var r=e.extend({url:n.src,success:function(r,o,i){var a={data:r,xhr:i};E("ParseAjax",a),t.appendContent(e(a.data),H),n.finished=!0,P(),t._setFocus(),setTimeout(function(){t.wrap.addClass(g)},16),t.updateStatus("ready"),E("AjaxContentAdded")},error:function(){P(),n.finished=n.loadError=!0,t.updateStatus("error",t.st.ajax.tError.replace("%url%",n.src))}},t.st.ajax.settings);return t.req=e.ajax(r),""}}});var M,_=function(n){if(n.data&&void 0!==n.data.title)return n.data.title;var r=t.st.image.titleSrc;if(r){if(e.isFunction(r))return r.call(t,n);if(n.el)return n.el.attr(r)||""}return""};e.magnificPopup.registerModule("image",{options:{markup:'<div class="mfp-figure"><div class="mfp-close"></div><figure><div class="mfp-img"></div><figcaption><div class="mfp-bottom-bar"><div class="mfp-title"></div><div class="mfp-counter"></div></div></figcaption></figure></div>',cursor:"mfp-zoom-out-cur",titleSrc:"title",verticalFit:!0,tError:'<a href="%url%">The image</a> could not be loaded.'},proto:{initImage:function(){var n=t.st.image,r=".image";t.types.push("image"),C(d+r,function(){"image"===t.currItem.type&&n.cursor&&e(document.body).addClass(n.cursor)}),C(s+r,function(){n.cursor&&e(document.body).removeClass(n.cursor),w.off("resize"+m)}),C("Resize"+r,t.resizeImage),t.isLowIE&&C("AfterChange",t.resizeImage)},resizeImage:function(){var e=t.currItem;if(e&&e.img&&t.st.image.verticalFit){var n=0;t.isLowIE&&(n=parseInt(e.img.css("padding-top"),10)+parseInt(e.img.css("padding-bottom"),10)),e.img.css("max-height",t.wH-n)}},_onImageHasSize:function(e){e.img&&(e.hasSize=!0,M&&clearInterval(M),e.isCheckingImgSize=!1,E("ImageHasSize",e),e.imgHidden&&(t.content&&t.content.removeClass("mfp-loading"),e.imgHidden=!1))},findImageSize:function(e){var n=0,r=e.img[0],o=function(i){M&&clearInterval(M),M=setInterval(function(){return r.naturalWidth>0?void t._onImageHasSize(e):(n>200&&clearInterval(M),n++,void(3===n?o(10):40===n?o(50):100===n&&o(500)))},i)};o(1)},getImage:function(n,r){var o=0,i=function(){n&&(n.img[0].complete?(n.img.off(".mfploader"),n===t.currItem&&(t._onImageHasSize(n),t.updateStatus("ready")),n.hasSize=!0,n.loaded=!0,E("ImageLoadComplete")):(o++,200>o?setTimeout(i,100):a()))},a=function(){n&&(n.img.off(".mfploader"),n===t.currItem&&(t._onImageHasSize(n),t.updateStatus("error",s.tError.replace("%url%",n.src))),n.hasSize=!0,n.loaded=!0,n.loadError=!0)},s=t.st.image,u=r.find(".mfp-img");if(u.length){var l=document.createElement("img");l.className="mfp-img",n.el&&n.el.find("img").length&&(l.alt=n.el.find("img").attr("alt")),n.img=e(l).on("load.mfploader",i).on("error.mfploader",a),l.src=n.src,u.is("img")&&(n.img=n.img.clone()),l=n.img[0],l.naturalWidth>0?n.hasSize=!0:l.width||(n.hasSize=!1)}return t._parseMarkup(r,{title:_(n),img_replaceWith:n.img},n),t.resizeImage(),n.hasSize?(M&&clearInterval(M),n.loadError?(r.addClass("mfp-loading"),t.updateStatus("error",s.tError.replace("%url%",n.src))):(r.removeClass("mfp-loading"),t.updateStatus("ready")),r):(t.updateStatus("loading"),n.loading=!0,n.hasSize||(n.imgHidden=!0,r.addClass("mfp-loading"),t.findImageSize(n)),r)}}});var R,B=function(){return void 0===R&&(R=void 0!==document.createElement("p").style.MozTransform),R};e.magnificPopup.registerModule("zoom",{options:{enabled:!1,easing:"ease-in-out",duration:300,opener:function(e){return e.is("img")?e:e.find("img")}},proto:{initZoom:function(){var e,n=t.st.zoom,r=".zoom";if(n.enabled&&t.supportsTransition){var o,i,a=n.duration,l=function(e){var t=e.clone().removeAttr("style").removeAttr("class").addClass("mfp-animated-image"),r="all "+n.duration/1e3+"s "+n.easing,o={position:"fixed",zIndex:9999,left:0,top:0,"-webkit-backface-visibility":"hidden"},i="transition";return o["-webkit-"+i]=o["-moz-"+i]=o["-o-"+i]=o[i]=r,t.css(o),t},c=function(){t.content.css("visibility","visible")};C("BuildControls"+r,function(){if(t._allowZoom()){if(clearTimeout(o),t.content.css("visibility","hidden"),e=t._getItemToZoom(),!e)return void c();i=l(e),i.css(t._getOffset()),t.wrap.append(i),o=setTimeout(function(){i.css(t._getOffset(!0)),o=setTimeout(function(){c(),setTimeout(function(){i.remove(),e=i=null,E("ZoomAnimationEnded")},16)},a)},16)}}),C(u+r,function(){if(t._allowZoom()){if(clearTimeout(o),t.st.removalDelay=a,!e){if(e=t._getItemToZoom(),!e)return;i=l(e)}i.css(t._getOffset(!0)),t.wrap.append(i),t.content.css("visibility","hidden"),setTimeout(function(){i.css(t._getOffset())},16)}}),C(s+r,function(){t._allowZoom()&&(c(),i&&i.remove(),e=null)})}},_allowZoom:function(){return"image"===t.currItem.type},_getItemToZoom:function(){return t.currItem.hasSize?t.currItem.img:!1},_getOffset:function(n){var r;r=n?t.currItem.img:t.st.zoom.opener(t.currItem.el||t.currItem);var o=r.offset(),i=parseInt(r.css("padding-top"),10),a=parseInt(r.css("padding-bottom"),10);o.top-=e(window).scrollTop()-i;var s={width:r.width(),height:(x?r.innerHeight():r[0].offsetHeight)-a-i};return B()?s["-moz-transform"]=s.transform="translate("+o.left+"px,"+o.top+"px)":(s.left=o.left,s.top=o.top),s}}});var $="iframe",F="//about:blank",z=function(e){if(t.currTemplate[$]){var n=t.currTemplate[$].find("iframe");n.length&&(e||(n[0].src=F),t.isIE8&&n.css("display",e?"block":"none"))}};e.magnificPopup.registerModule($,{options:{markup:'<div class="mfp-iframe-scaler"><div class="mfp-close"></div><iframe class="mfp-iframe" src="//about:blank" frameborder="0" allowfullscreen></iframe></div>',srcAction:"iframe_src",patterns:{youtube:{index:"youtube.com",id:"v=",src:"//www.youtube.com/embed/%id%?autoplay=1"},vimeo:{index:"vimeo.com/",id:"/",src:"//player.vimeo.com/video/%id%?autoplay=1"},gmaps:{index:"//maps.google.",src:"%id%&output=embed"}}},proto:{initIframe:function(){t.types.push($),C("BeforeChange",function(e,t,n){t!==n&&(t===$?z():n===$&&z(!0))}),C(s+"."+$,function(){z()})},getIframe:function(n,r){var o=n.src,i=t.st.iframe;e.each(i.patterns,function(){return o.indexOf(this.index)>-1?(this.id&&(o="string"==typeof this.id?o.substr(o.lastIndexOf(this.id)+this.id.length,o.length):this.id.call(this,o)),o=this.src.replace("%id%",o),!1):void 0});var a={};return i.srcAction&&(a[i.srcAction]=o),t._parseMarkup(r,a,n),t.updateStatus("ready"),r}}});var W=function(e){var n=t.items.length;return e>n-1?e-n:0>e?n+e:e},U=function(e,t,n){return e.replace(/%curr%/gi,t+1).replace(/%total%/gi,n)};e.magnificPopup.registerModule("gallery",{options:{enabled:!1,arrowMarkup:'<button title="%title%" type="button" class="mfp-arrow mfp-arrow-%dir%"></button>',preload:[0,2],navigateByImgClick:!0,arrows:!0,tPrev:"Previous (Left arrow key)",tNext:"Next (Right arrow key)",tCounter:"%curr% of %total%"},proto:{initGallery:function(){var n=t.st.gallery,o=".mfp-gallery";return t.direction=!0,n&&n.enabled?(i+=" mfp-gallery",C(d+o,function(){n.navigateByImgClick&&t.wrap.on("click"+o,".mfp-img",function(){return t.items.length>1?(t.next(),!1):void 0}),r.on("keydown"+o,function(e){37===e.keyCode?t.prev():39===e.keyCode&&t.next()})}),C("UpdateStatus"+o,function(e,n){n.text&&(n.text=U(n.text,t.currItem.index,t.items.length))}),C(f+o,function(e,r,o,i){var a=t.items.length;o.counter=a>1?U(n.tCounter,i.index,a):""}),C("BuildControls"+o,function(){if(t.items.length>1&&n.arrows&&!t.arrowLeft){var r=n.arrowMarkup,o=t.arrowLeft=e(r.replace(/%title%/gi,n.tPrev).replace(/%dir%/gi,"left")).addClass(y),i=t.arrowRight=e(r.replace(/%title%/gi,n.tNext).replace(/%dir%/gi,"right")).addClass(y);o.click(function(){t.prev()}),i.click(function(){t.next()}),t.container.append(o.add(i))}}),C(p+o,function(){t._preloadTimeout&&clearTimeout(t._preloadTimeout),t._preloadTimeout=setTimeout(function(){t.preloadNearbyImages(),t._preloadTimeout=null},16)}),void C(s+o,function(){r.off(o),t.wrap.off("click"+o),t.arrowRight=t.arrowLeft=null})):!1},next:function(){t.direction=!0,t.index=W(t.index+1),t.updateItemHTML()},prev:function(){t.direction=!1,t.index=W(t.index-1),t.updateItemHTML()},goTo:function(e){t.direction=e>=t.index,t.index=e,t.updateItemHTML()},preloadNearbyImages:function(){var e,n=t.st.gallery.preload,r=Math.min(n[0],t.items.length),o=Math.min(n[1],t.items.length);for(e=1;e<=(t.direction?o:r);e++)t._preloadItem(t.index+e);for(e=1;e<=(t.direction?r:o);e++)t._preloadItem(t.index-e)},_preloadItem:function(n){if(n=W(n),!t.items[n].preloaded){var r=t.items[n];r.parsed||(r=t.parseEl(n)),E("LazyLoad",r),"image"===r.type&&(r.img=e('<img class="mfp-img" />').on("load.mfploader",function(){r.hasSize=!0}).on("error.mfploader",function(){r.hasSize=!0,r.loadError=!0,E("LazyLoadError",r)}).attr("src",r.src)),r.preloaded=!0}}}});var X="retina";e.magnificPopup.registerModule(X,{options:{replaceSrc:function(e){return e.src.replace(/\.\w+$/,function(e){return"@2x"+e})},ratio:1},proto:{initRetina:function(){if(window.devicePixelRatio>1){var e=t.st.retina,n=e.ratio;n=isNaN(n)?n():n,n>1&&(C("ImageHasSize."+X,function(e,t){t.img.css({"max-width":t.img[0].naturalWidth/n,width:"100%"})}),C("ElementParse."+X,function(t,r){r.src=e.replaceSrc(r,n)}))}}}}),k()}),function(e,t){"$:nomunge";var n,r=e.jQuery||e.Cowboy||(e.Cowboy={});r.throttle=n=function(e,n,o,i){function a(){function r(){u=+new Date,o.apply(l,f)}function a(){s=t}var l=this,c=+new Date-u,f=arguments;i&&!s&&r(),s&&clearTimeout(s),i===t&&c>e?r():n!==!0&&(s=setTimeout(i?a:r,i===t?e-c:e))}var s,u=0;return"boolean"!=typeof n&&(i=o,o=n,n=t),r.guid&&(a.guid=o.guid=o.guid||r.guid++),a},r.debounce=function(e,r,o){return o===t?n(e,r,!1):n(e,o,r!==!1)}}(this),function(e,t){"function"==typeof define&&define.amd?define([],function(){return t(e)}):"object"==typeof exports?module.exports=t(e):e.SmoothScroll=t(e)}("undefined"!=typeof global?global:"undefined"!=typeof window?window:this,function(e){"use strict";var t={ignore:"[data-scroll-ignore]",header:null,topOnEmptyHash:!0,speed:500,speedAsDuration:!1,durationMax:null,durationMin:null,clip:!0,offset:0,easing:"easeInOutCubic",customEasing:null,updateURL:!0,popstate:!0,emitEvents:!0},n=function(){return"querySelector"in document&&"addEventListener"in e&&"requestAnimationFrame"in e&&"closest"in e.Element.prototype},r=function(){var e={};return Array.prototype.forEach.call(arguments,function(t){for(var n in t){if(!t.hasOwnProperty(n))return;e[n]=t[n]}}),e},o=function(){return!!("matchMedia"in e&&e.matchMedia("(prefers-reduced-motion)").matches)},i=function(t){return parseInt(e.getComputedStyle(t).height,10)},a=function(e){"#"===e.charAt(0)&&(e=e.substr(1));for(var t,n=String(e),r=n.length,o=-1,i="",a=n.charCodeAt(0);++o<r;){if(t=n.charCodeAt(o),0===t)throw new InvalidCharacterError("Invalid character: the input contains U+0000.");i+=t>=1&&31>=t||127==t||0===o&&t>=48&&57>=t||1===o&&t>=48&&57>=t&&45===a?"\\"+t.toString(16)+" ":t>=128||45===t||95===t||t>=48&&57>=t||t>=65&&90>=t||t>=97&&122>=t?n.charAt(o):"\\"+n.charAt(o)}return"#"+i},s=function(e,t){var n;return"easeInQuad"===e.easing&&(n=t*t),"easeOutQuad"===e.easing&&(n=t*(2-t)),"easeInOutQuad"===e.easing&&(n=.5>t?2*t*t:-1+(4-2*t)*t),"easeInCubic"===e.easing&&(n=t*t*t),"easeOutCubic"===e.easing&&(n=--t*t*t+1),"easeInOutCubic"===e.easing&&(n=.5>t?4*t*t*t:(t-1)*(2*t-2)*(2*t-2)+1),"easeInQuart"===e.easing&&(n=t*t*t*t),"easeOutQuart"===e.easing&&(n=1- --t*t*t*t),"easeInOutQuart"===e.easing&&(n=.5>t?8*t*t*t*t:1-8*--t*t*t*t),"easeInQuint"===e.easing&&(n=t*t*t*t*t),"easeOutQuint"===e.easing&&(n=1+--t*t*t*t*t),"easeInOutQuint"===e.easing&&(n=.5>t?16*t*t*t*t*t:1+16*--t*t*t*t*t),e.customEasing&&(n=e.customEasing(t)),n||t},u=function(){return Math.max(document.body.scrollHeight,document.documentElement.scrollHeight,document.body.offsetHeight,document.documentElement.offsetHeight,document.body.clientHeight,document.documentElement.clientHeight)},l=function(t,n,r,o){var i=0;if(t.offsetParent)do i+=t.offsetTop,t=t.offsetParent;while(t);return i=Math.max(i-n-r,0),o&&(i=Math.min(i,u()-e.innerHeight)),i},c=function(e){return e?i(e)+e.offsetTop:0},f=function(e,t){var n=t.speedAsDuration?t.speed:Math.abs(e/1e3*t.speed);return t.durationMax&&n>t.durationMax?t.durationMax:t.durationMin&&n<t.durationMin?t.durationMin:parseInt(n,10)},d=function(t){if(history.replaceState&&t.updateURL&&!history.state){var n=e.location.hash;n=n?n:"",history.replaceState({smoothScroll:JSON.stringify(t),anchor:n?n:e.pageYOffset},document.title,n?n:e.location.href)}},p=function(e,t,n){t||history.pushState&&n.updateURL&&history.pushState({smoothScroll:JSON.stringify(n),anchor:e.id},document.title,e===document.documentElement?"#top":"#"+e.id)},h=function(t,n,r){0===t&&document.body.focus(),r||(t.focus(),document.activeElement!==t&&(t.setAttribute("tabindex","-1"),t.focus(),t.style.outline="none"),e.scrollTo(0,n))},m=function(t,n,r,o){if(n.emitEvents&&"function"==typeof e.CustomEvent){var i=new CustomEvent(t,{bubbles:!0,detail:{anchor:r,toggle:o}});document.dispatchEvent(i)}},g=function(i,g){var v,y,b,x,w,C,T={};T.cancelScroll=function(e){cancelAnimationFrame(C),C=null,e||m("scrollCancel",v)},T.animateScroll=function(n,i,a){T.cancelScroll();var d=r(v||t,a||{}),g="[object Number]"===Object.prototype.toString.call(n),y=g||!n.tagName?null:n;if(g||y){var b=e.pageYOffset;d.header&&!x&&(x=document.querySelector(d.header));var w,E,S,k=c(x),A=g?n:l(y,k,parseInt("function"==typeof d.offset?d.offset(n,i):d.offset,10),d.clip),N=A-b,j=u(),I=0,L=f(N,d),D=function(t,r){var o=e.pageYOffset;return t==r||o==r||(r>b&&e.innerHeight+o)>=j?(T.cancelScroll(!0),h(n,r,g),m("scrollStop",d,n,i),w=null,C=null,!0):void 0},O=function(t){w||(w=t),I+=t-w,E=0===L?0:I/L,E=E>1?1:E,S=b+N*s(d,E),e.scrollTo(0,Math.floor(S)),D(S,A)||(C=e.requestAnimationFrame(O),w=t)};if(0===e.pageYOffset&&e.scrollTo(0,0),p(n,g,d),o())return void e.scrollTo(0,Math.floor(A));m("scrollStart",d,n,i),T.cancelScroll(!0),e.requestAnimationFrame(O)}};var E=function(t){if(!t.defaultPrevented&&!(0!==t.button||t.metaKey||t.ctrlKey||t.shiftKey)&&"closest"in t.target&&(b=t.target.closest(i),b&&"a"===b.tagName.toLowerCase()&&!t.target.closest(v.ignore)&&b.hostname===e.location.hostname&&b.pathname===e.location.pathname&&/#/.test(b.href))){var n;try{n=a(decodeURIComponent(b.hash))}catch(r){n=a(b.hash)}var o;if("#"===n){if(!v.topOnEmptyHash)return;o=document.documentElement}else o=document.querySelector(n);o=o||"#top"!==n?o:document.documentElement,o&&(t.preventDefault(),d(v),T.animateScroll(o,b))}},S=function(e){if(null!==history.state&&history.state.smoothScroll&&history.state.smoothScroll===JSON.stringify(v)){var t=history.state.anchor;"string"==typeof t&&t&&!(t=document.querySelector(a(history.state.anchor)))||T.animateScroll(t,null,{updateURL:!1})}};T.destroy=function(){v&&(document.removeEventListener("click",E,!1),e.removeEventListener("popstate",S,!1),T.cancelScroll(),v=null,y=null,b=null,x=null,w=null,C=null)};var k=function(){if(!n())throw"Smooth Scroll: This browser does not support the required JavaScript methods and browser APIs.";T.destroy(),v=r(t,g||{}),x=v.header?document.querySelector(v.header):null,document.addEventListener("click",E,!1),v.updateURL&&v.popstate&&e.addEventListener("popstate",S,!1)};return k(),T};return g}),function(e,t){"function"==typeof define&&define.amd?define([],function(){return t(e)}):"object"==typeof exports?module.exports=t(e):e.Gumshoe=t(e)}("undefined"!=typeof global?global:"undefined"!=typeof window?window:this,function(e){"use strict";var t={navClass:"active",contentClass:"active",nested:!1,nestedClass:"active",offset:0,reflow:!1,events:!0},n=function(){var e={};return Array.prototype.forEach.call(arguments,function(t){for(var n in t){if(!t.hasOwnProperty(n))return;e[n]=t[n]}}),e},r=function(e,t,n){if(n.settings.events){var r=new CustomEvent(e,{bubbles:!0,cancelable:!0,detail:n});t.dispatchEvent(r)}},o=function(e){var t=0;if(e.offsetParent)for(;e;)t+=e.offsetTop,e=e.offsetParent;return t>=0?t:0},i=function(e){e&&e.sort(function(e,t){var n=o(e.content),r=o(t.content);return r>n?-1:1})},a=function(e){return"function"==typeof e.offset?parseFloat(e.offset()):parseFloat(e.offset)},s=function(){return Math.max(document.body.scrollHeight,document.documentElement.scrollHeight,document.body.offsetHeight,document.documentElement.offsetHeight,document.body.clientHeight,document.documentElement.clientHeight)},u=function(t,n,r){var o=t.getBoundingClientRect(),i=a(n);return r?parseInt(o.bottom,10)<(e.innerHeight||document.documentElement.clientHeight):parseInt(o.top,10)<=i},l=function(){return e.innerHeight+e.pageYOffset>=s()},c=function(e,t){return!(!l()||!u(e.content,t,!0))},f=function(e,t){var n=e[e.length-1];if(c(n,t))return n;for(var r=e.length-1;r>=0;r--)if(u(e[r].content,t))return e[r]},d=function(e,t){if(t.nested){var n=e.parentNode.closest("li");n&&(n.classList.remove(t.nestedClass),d(n,t))}},p=function(e,t){if(e){var n=e.nav.closest("li");n&&(n.classList.remove(t.navClass),e.content.classList.remove(t.contentClass),d(n,t),r("gumshoeDeactivate",n,{link:e.nav,content:e.content,settings:t}))}},h=function(e,t){if(t.nested){var n=e.parentNode.closest("li");n&&(n.classList.add(t.nestedClass),h(n,t))}},m=function(e,t){if(e){var n=e.nav.closest("li");n&&(n.classList.add(t.navClass),e.content.classList.add(t.contentClass),h(n,t),r("gumshoeActivate",n,{link:e.nav,content:e.content,settings:t}))}},g=function(r,o){var a,s,u,l,c,d={};d.setup=function(){a=document.querySelectorAll(r),s=[],Array.prototype.forEach.call(a,function(e){var t=document.getElementById(decodeURIComponent(e.hash.substr(1)));t&&s.push({nav:e,content:t})}),i(s)},d.detect=function(){var e=f(s,c);return e?void(u&&e.content===u.content||(p(u,c),m(e,c),u=e)):void(u&&(p(u,c),u=null))};var h=function(t){l&&e.cancelAnimationFrame(l),l=e.requestAnimationFrame(d.detect)},g=function(t){l&&e.cancelAnimationFrame(l),l=e.requestAnimationFrame(function(){i(s),d.detect()})};d.destroy=function(){u&&p(u,c),e.removeEventListener("scroll",h,!1),c.reflow&&e.removeEventListener("resize",g,!1),s=null,a=null,u=null,l=null,c=null};var v=function(){c=n(t,o||{}),d.setup(),d.detect(),e.addEventListener("scroll",h,!1),c.reflow&&e.addEventListener("resize",g,!1)};return v(),d};return g}),$(document).ready(function(){$("#main").fitVids();var e=function(){var e=0===$(".author__urls-wrapper button").length?$(window).width()>1024:!$(".author__urls-wrapper button").is(":visible");e?$(".sidebar").addClass("sticky"):$(".sidebar").removeClass("sticky")};e(),$(window).resize(function(){e()}),$(".author__urls-wrapper button").on("click",function(){$(".author__urls").toggleClass("is--visible"),$(".author__urls-wrapper button").toggleClass("open")}),$(document).keyup(function(e){27===e.keyCode&&$(".initial-content").hasClass("is--hidden")&&($(".search-content").toggleClass("is--visible"),$(".initial-content").toggleClass("is--hidden"))}),$(".search__toggle").on("click",function(){$(".search-content").toggleClass("is--visible"),$(".initial-content").toggleClass("is--hidden"),setTimeout(function(){$(".search-content input").focus()},400)});new SmoothScroll('a[href*="#"]',{offset:20,speed:400,speedAsDuration:!0,durationMax:500});if($("nav.toc").length>0){new Gumshoe("nav.toc a",{navClass:"active",contentClass:"active",nested:!1,nestedClass:"active",offset:20,reflow:!0,events:!0})}$("a[href$='.jpg'],a[href$='.jpeg'],a[href$='.JPG'],a[href$='.png'],a[href$='.gif']").addClass("image-popup"),$(".image-popup").magnificPopup({type:"image",tLoading:"Loading image #%curr%...",gallery:{enabled:!0,navigateByImgClick:!0,preload:[0,1]},image:{tError:'<a href="%url%">Image #%curr%</a> could not be loaded.'},removalDelay:500,mainClass:"mfp-zoom-in",callbacks:{beforeOpen:function(){this.st.image.markup=this.st.image.markup.replace("mfp-figure","mfp-figure mfp-with-anim")}},closeOnContentClick:!0,midClick:!0}),$(".page__content").find("h1, h2, h3, h4, h5, h6").each(function(){var e=$(this).attr("id");if(e){var t=document.createElement("a");t.className="header-link",t.href="#"+e,t.innerHTML='<span class="sr-only">Permalink</span><i class="fa fa-link"></i>',t.title="Permalink",$(this).append(t)}})});
\ No newline at end of file
+!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(e.document)return t(e);throw new Error("jQuery requires a window with a document")}:t(e)}("undefined"!=typeof window?window:this,function(w,P){"use strict";function y(e){return"function"==typeof e&&"number"!=typeof e.nodeType&&"function"!=typeof e.item}function m(e){return null!=e&&e===e.window}var t=[],M=Object.getPrototypeOf,s=t.slice,_=t.flat?function(e){return t.flat.call(e)}:function(e){return t.concat.apply([],e)},R=t.push,B=t.indexOf,F={},$=F.toString,W=F.hasOwnProperty,z=W.toString,U=z.call(Object),g={},C=w.document,X={type:!0,src:!0,nonce:!0,noModule:!0};function Q(e,t,n){var r,o,i=(n=n||C).createElement("script");if(i.text=e,t)for(r in X)(o=t[r]||t.getAttribute&&t.getAttribute(r))&&i.setAttribute(r,o);n.head.appendChild(i).parentNode.removeChild(i)}function h(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?F[$.call(e)]||"object":typeof e}var e="3.6.0",T=function(e,t){return new T.fn.init(e,t)};function Y(e){var t=!!e&&"length"in e&&e.length,n=h(e);return!y(e)&&!m(e)&&("array"===n||0===t||"number"==typeof t&&0<t&&t-1 in e)}T.fn=T.prototype={jquery:e,constructor:T,length:0,toArray:function(){return s.call(this)},get:function(e){return null==e?s.call(this):e<0?this[e+this.length]:this[e]},pushStack:function(e){e=T.merge(this.constructor(),e);return e.prevObject=this,e},each:function(e){return T.each(this,e)},map:function(n){return this.pushStack(T.map(this,function(e,t){return n.call(e,t,e)}))},slice:function(){return this.pushStack(s.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},even:function(){return this.pushStack(T.grep(this,function(e,t){return(t+1)%2}))},odd:function(){return this.pushStack(T.grep(this,function(e,t){return t%2}))},eq:function(e){var t=this.length,e=+e+(e<0?t:0);return this.pushStack(0<=e&&e<t?[this[e]]:[])},end:function(){return this.prevObject||this.constructor()},push:R,sort:t.sort,splice:t.splice},T.extend=T.fn.extend=function(){var e,t,n,r,o,i=arguments[0]||{},a=1,s=arguments.length,l=!1;for("boolean"==typeof i&&(l=i,i=arguments[a]||{},a++),"object"==typeof i||y(i)||(i={}),a===s&&(i=this,a--);a<s;a++)if(null!=(e=arguments[a]))for(t in e)n=e[t],"__proto__"!==t&&i!==n&&(l&&n&&(T.isPlainObject(n)||(r=Array.isArray(n)))?(o=i[t],o=r&&!Array.isArray(o)?[]:r||T.isPlainObject(o)?o:{},r=!1,i[t]=T.extend(l,o,n)):void 0!==n&&(i[t]=n));return i},T.extend({expando:"jQuery"+(e+Math.random()).replace(/\D/g,""),isReady:!0,error:function(e){throw new Error(e)},noop:function(){},isPlainObject:function(e){return!(!e||"[object Object]"!==$.call(e)||(e=M(e))&&("function"!=typeof(e=W.call(e,"constructor")&&e.constructor)||z.call(e)!==U))},isEmptyObject:function(e){for(var t in e)return!1;return!0},globalEval:function(e,t,n){Q(e,{nonce:t&&t.nonce},n)},each:function(e,t){var n,r=0;if(Y(e))for(n=e.length;r<n&&!1!==t.call(e[r],r,e[r]);r++);else for(r in e)if(!1===t.call(e[r],r,e[r]))break;return e},makeArray:function(e,t){t=t||[];return null!=e&&(Y(Object(e))?T.merge(t,"string"==typeof e?[e]:e):R.call(t,e)),t},inArray:function(e,t,n){return null==t?-1:B.call(t,e,n)},merge:function(e,t){for(var n=+t.length,r=0,o=e.length;r<n;r++)e[o++]=t[r];return e.length=o,e},grep:function(e,t,n){for(var r=[],o=0,i=e.length,a=!n;o<i;o++)!t(e[o],o)!=a&&r.push(e[o]);return r},map:function(e,t,n){var r,o,i=0,a=[];if(Y(e))for(r=e.length;i<r;i++)null!=(o=t(e[i],i,n))&&a.push(o);else for(i in e)null!=(o=t(e[i],i,n))&&a.push(o);return _(a)},guid:1,support:g}),"function"==typeof Symbol&&(T.fn[Symbol.iterator]=t[Symbol.iterator]),T.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),function(e,t){F["[object "+t+"]"]=t.toLowerCase()});function r(e,t,n){for(var r=[],o=void 0!==n;(e=e[t])&&9!==e.nodeType;)if(1===e.nodeType){if(o&&T(e).is(n))break;r.push(e)}return r}function V(e,t){for(var n=[];e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n}var e=function(P){function d(e,t){return e="0x"+e.slice(1)-65536,t||(e<0?String.fromCharCode(65536+e):String.fromCharCode(e>>10|55296,1023&e|56320))}function M(e,t){return t?"\0"===e?"�":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e}function _(){C()}var e,f,x,i,R,p,B,F,w,l,u,C,T,n,E,h,r,o,m,S="sizzle"+ +new Date,c=P.document,k=0,$=0,W=L(),z=L(),U=L(),g=L(),X=function(e,t){return e===t&&(u=!0),0},Q={}.hasOwnProperty,t=[],Y=t.pop,V=t.push,A=t.push,G=t.slice,y=function(e,t){for(var n=0,r=e.length;n<r;n++)if(e[n]===t)return n;return-1},K="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",a="[\\x20\\t\\r\\n\\f]",s="(?:\\\\[\\da-fA-F]{1,6}"+a+"?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+",Z="\\["+a+"*("+s+")(?:"+a+"*([*^$|!~]?=)"+a+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+s+"))|)"+a+"*\\]",J=":("+s+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+Z+")*)|.*)\\)|)",ee=new RegExp(a+"+","g"),v=new RegExp("^"+a+"+|((?:^|[^\\\\])(?:\\\\.)*)"+a+"+$","g"),te=new RegExp("^"+a+"*,"+a+"*"),ne=new RegExp("^"+a+"*([>+~]|"+a+")"+a+"*"),re=new RegExp(a+"|>"),oe=new RegExp(J),ie=new RegExp("^"+s+"$"),b={ID:new RegExp("^#("+s+")"),CLASS:new RegExp("^\\.("+s+")"),TAG:new RegExp("^("+s+"|[*])"),ATTR:new RegExp("^"+Z),PSEUDO:new RegExp("^"+J),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+a+"*(even|odd|(([+-]|)(\\d*)n|)"+a+"*(?:([+-]|)"+a+"*(\\d+)|))"+a+"*\\)|)","i"),bool:new RegExp("^(?:"+K+")$","i"),needsContext:new RegExp("^"+a+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+a+"*((?:-\\d)?\\d*)"+a+"*\\)|)(?=[^-]|$)","i")},ae=/HTML$/i,se=/^(?:input|select|textarea|button)$/i,le=/^h\d$/i,N=/^[^{]+\{\s*\[native \w/,ue=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ce=/[+~]/,j=new RegExp("\\\\[\\da-fA-F]{1,6}"+a+"?|\\\\([^\\r\\n\\f])","g"),de=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,fe=ye(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{A.apply(t=G.call(c.childNodes),c.childNodes),t[c.childNodes.length].nodeType}catch(e){A={apply:t.length?function(e,t){V.apply(e,G.call(t))}:function(e,t){for(var n=e.length,r=0;e[n++]=t[r++];);e.length=n-1}}}function I(t,e,n,r){var o,i,a,s,l,u,c=e&&e.ownerDocument,d=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==d&&9!==d&&11!==d)return n;if(!r&&(C(e),e=e||T,E)){if(11!==d&&(s=ue.exec(t)))if(o=s[1]){if(9===d){if(!(u=e.getElementById(o)))return n;if(u.id===o)return n.push(u),n}else if(c&&(u=c.getElementById(o))&&m(e,u)&&u.id===o)return n.push(u),n}else{if(s[2])return A.apply(n,e.getElementsByTagName(t)),n;if((o=s[3])&&f.getElementsByClassName&&e.getElementsByClassName)return A.apply(n,e.getElementsByClassName(o)),n}if(f.qsa&&!g[t+" "]&&(!h||!h.test(t))&&(1!==d||"object"!==e.nodeName.toLowerCase())){if(u=t,c=e,1===d&&(re.test(t)||ne.test(t))){for((c=ce.test(t)&&ge(e.parentNode)||e)===e&&f.scope||((a=e.getAttribute("id"))?a=a.replace(de,M):e.setAttribute("id",a=S)),i=(l=p(t)).length;i--;)l[i]=(a?"#"+a:":scope")+" "+H(l[i]);u=l.join(",")}try{return A.apply(n,c.querySelectorAll(u)),n}catch(e){g(t,!0)}finally{a===S&&e.removeAttribute("id")}}}return F(t.replace(v,"$1"),e,n,r)}function L(){var n=[];function r(e,t){return n.push(e+" ")>x.cacheLength&&delete r[n.shift()],r[e+" "]=t}return r}function D(e){return e[S]=!0,e}function O(e){var t=T.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t)}}function pe(e,t){for(var n=e.split("|"),r=n.length;r--;)x.attrHandle[n[r]]=t}function he(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)for(;n=n.nextSibling;)if(n===t)return-1;return e?1:-1}function me(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&fe(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function q(a){return D(function(i){return i=+i,D(function(e,t){for(var n,r=a([],e.length,i),o=r.length;o--;)e[n=r[o]]&&(e[n]=!(t[n]=e[n]))})})}function ge(e){return e&&void 0!==e.getElementsByTagName&&e}for(e in f=I.support={},R=I.isXML=function(e){var t=e&&e.namespaceURI,e=e&&(e.ownerDocument||e).documentElement;return!ae.test(t||e&&e.nodeName||"HTML")},C=I.setDocument=function(e){var e=e?e.ownerDocument||e:c;return e!=T&&9===e.nodeType&&e.documentElement&&(n=(T=e).documentElement,E=!R(T),c!=T&&(e=T.defaultView)&&e.top!==e&&(e.addEventListener?e.addEventListener("unload",_,!1):e.attachEvent&&e.attachEvent("onunload",_)),f.scope=O(function(e){return n.appendChild(e).appendChild(T.createElement("div")),void 0!==e.querySelectorAll&&!e.querySelectorAll(":scope fieldset div").length}),f.attributes=O(function(e){return e.className="i",!e.getAttribute("className")}),f.getElementsByTagName=O(function(e){return e.appendChild(T.createComment("")),!e.getElementsByTagName("*").length}),f.getElementsByClassName=N.test(T.getElementsByClassName),f.getById=O(function(e){return n.appendChild(e).id=S,!T.getElementsByName||!T.getElementsByName(S).length}),f.getById?(x.filter.ID=function(e){var t=e.replace(j,d);return function(e){return e.getAttribute("id")===t}},x.find.ID=function(e,t){if(void 0!==t.getElementById&&E)return(t=t.getElementById(e))?[t]:[]}):(x.filter.ID=function(e){var t=e.replace(j,d);return function(e){e=void 0!==e.getAttributeNode&&e.getAttributeNode("id");return e&&e.value===t}},x.find.ID=function(e,t){if(void 0!==t.getElementById&&E){var n,r,o,i=t.getElementById(e);if(i){if((n=i.getAttributeNode("id"))&&n.value===e)return[i];for(o=t.getElementsByName(e),r=0;i=o[r++];)if((n=i.getAttributeNode("id"))&&n.value===e)return[i]}return[]}}),x.find.TAG=f.getElementsByTagName?function(e,t){return void 0!==t.getElementsByTagName?t.getElementsByTagName(e):f.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],o=0,i=t.getElementsByTagName(e);if("*"!==e)return i;for(;n=i[o++];)1===n.nodeType&&r.push(n);return r},x.find.CLASS=f.getElementsByClassName&&function(e,t){if(void 0!==t.getElementsByClassName&&E)return t.getElementsByClassName(e)},r=[],h=[],(f.qsa=N.test(T.querySelectorAll))&&(O(function(e){var t;n.appendChild(e).innerHTML="<a id='"+S+"'></a><select id='"+S+"-\r\\' msallowcapture=''><option selected=''></option></select>",e.querySelectorAll("[msallowcapture^='']").length&&h.push("[*^$]="+a+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||h.push("\\["+a+"*(?:value|"+K+")"),e.querySelectorAll("[id~="+S+"-]").length||h.push("~="),(t=T.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||h.push("\\["+a+"*name"+a+"*="+a+"*(?:''|\"\")"),e.querySelectorAll(":checked").length||h.push(":checked"),e.querySelectorAll("a#"+S+"+*").length||h.push(".#.+[+~]"),e.querySelectorAll("\\\f"),h.push("[\\r\\n\\f]")}),O(function(e){e.innerHTML="<a href='' disabled='disabled'></a><select disabled='disabled'><option/></select>";var t=T.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&h.push("name"+a+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&h.push(":enabled",":disabled"),n.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&h.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),h.push(",.*:")})),(f.matchesSelector=N.test(o=n.matches||n.webkitMatchesSelector||n.mozMatchesSelector||n.oMatchesSelector||n.msMatchesSelector))&&O(function(e){f.disconnectedMatch=o.call(e,"*"),o.call(e,"[s!='']:x"),r.push("!=",J)}),h=h.length&&new RegExp(h.join("|")),r=r.length&&new RegExp(r.join("|")),e=N.test(n.compareDocumentPosition),m=e||N.test(n.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,t=t&&t.parentNode;return e===t||!(!t||1!==t.nodeType||!(n.contains?n.contains(t):e.compareDocumentPosition&&16&e.compareDocumentPosition(t)))}:function(e,t){if(t)for(;t=t.parentNode;)if(t===e)return!0;return!1},X=e?function(e,t){var n;return e===t?(u=!0,0):(n=!e.compareDocumentPosition-!t.compareDocumentPosition)||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!f.sortDetached&&t.compareDocumentPosition(e)===n?e==T||e.ownerDocument==c&&m(c,e)?-1:t==T||t.ownerDocument==c&&m(c,t)?1:l?y(l,e)-y(l,t):0:4&n?-1:1)}:function(e,t){if(e===t)return u=!0,0;var n,r=0,o=e.parentNode,i=t.parentNode,a=[e],s=[t];if(!o||!i)return e==T?-1:t==T?1:o?-1:i?1:l?y(l,e)-y(l,t):0;if(o===i)return he(e,t);for(n=e;n=n.parentNode;)a.unshift(n);for(n=t;n=n.parentNode;)s.unshift(n);for(;a[r]===s[r];)r++;return r?he(a[r],s[r]):a[r]==c?-1:s[r]==c?1:0}),T},I.matches=function(e,t){return I(e,null,null,t)},I.matchesSelector=function(e,t){if(C(e),f.matchesSelector&&E&&!g[t+" "]&&(!r||!r.test(t))&&(!h||!h.test(t)))try{var n=o.call(e,t);if(n||f.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){g(t,!0)}return 0<I(t,T,null,[e]).length},I.contains=function(e,t){return(e.ownerDocument||e)!=T&&C(e),m(e,t)},I.attr=function(e,t){(e.ownerDocument||e)!=T&&C(e);var n=x.attrHandle[t.toLowerCase()],n=n&&Q.call(x.attrHandle,t.toLowerCase())?n(e,t,!E):void 0;return void 0!==n?n:f.attributes||!E?e.getAttribute(t):(n=e.getAttributeNode(t))&&n.specified?n.value:null},I.escape=function(e){return(e+"").replace(de,M)},I.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)},I.uniqueSort=function(e){var t,n=[],r=0,o=0;if(u=!f.detectDuplicates,l=!f.sortStable&&e.slice(0),e.sort(X),u){for(;t=e[o++];)t===e[o]&&(r=n.push(o));for(;r--;)e.splice(n[r],1)}return l=null,e},i=I.getText=function(e){var t,n="",r=0,o=e.nodeType;if(o){if(1===o||9===o||11===o){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=i(e)}else if(3===o||4===o)return e.nodeValue}else for(;t=e[r++];)n+=i(t);return n},(x=I.selectors={cacheLength:50,createPseudo:D,match:b,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(j,d),e[3]=(e[3]||e[4]||e[5]||"").replace(j,d),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||I.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&I.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return b.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&oe.test(n)&&(t=(t=p(n,!0))&&n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(j,d).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=W[e+" "];return t||(t=new RegExp("(^|"+a+")"+e+"("+a+"|$)"))&&W(e,function(e){return t.test("string"==typeof e.className&&e.className||void 0!==e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(t,n,r){return function(e){e=I.attr(e,t);return null==e?"!="===n:!n||(e+="","="===n?e===r:"!="===n?e!==r:"^="===n?r&&0===e.indexOf(r):"*="===n?r&&-1<e.indexOf(r):"$="===n?r&&e.slice(-r.length)===r:"~="===n?-1<(" "+e.replace(ee," ")+" ").indexOf(r):"|="===n&&(e===r||e.slice(0,r.length+1)===r+"-"))}},CHILD:function(h,e,t,m,g){var v="nth"!==h.slice(0,3),y="last"!==h.slice(-4),b="of-type"===e;return 1===m&&0===g?function(e){return!!e.parentNode}:function(e,t,n){var r,o,i,a,s,l,u=v!=y?"nextSibling":"previousSibling",c=e.parentNode,d=b&&e.nodeName.toLowerCase(),f=!n&&!b,p=!1;if(c){if(v){for(;u;){for(a=e;a=a[u];)if(b?a.nodeName.toLowerCase()===d:1===a.nodeType)return!1;l=u="only"===h&&!l&&"nextSibling"}return!0}if(l=[y?c.firstChild:c.lastChild],y&&f){for(p=(s=(r=(o=(i=(a=c)[S]||(a[S]={}))[a.uniqueID]||(i[a.uniqueID]={}))[h]||[])[0]===k&&r[1])&&r[2],a=s&&c.childNodes[s];a=++s&&a&&a[u]||(p=s=0,l.pop());)if(1===a.nodeType&&++p&&a===e){o[h]=[k,s,p];break}}else if(!1===(p=f?s=(r=(o=(i=(a=e)[S]||(a[S]={}))[a.uniqueID]||(i[a.uniqueID]={}))[h]||[])[0]===k&&r[1]:p))for(;(a=++s&&a&&a[u]||(p=s=0,l.pop()))&&((b?a.nodeName.toLowerCase()!==d:1!==a.nodeType)||!++p||(f&&((o=(i=a[S]||(a[S]={}))[a.uniqueID]||(i[a.uniqueID]={}))[h]=[k,p]),a!==e)););return(p-=g)===m||p%m==0&&0<=p/m}}},PSEUDO:function(e,i){var t,a=x.pseudos[e]||x.setFilters[e.toLowerCase()]||I.error("unsupported pseudo: "+e);return a[S]?a(i):1<a.length?(t=[e,e,"",i],x.setFilters.hasOwnProperty(e.toLowerCase())?D(function(e,t){for(var n,r=a(e,i),o=r.length;o--;)e[n=y(e,r[o])]=!(t[n]=r[o])}):function(e){return a(e,0,t)}):a}},pseudos:{not:D(function(e){var r=[],o=[],s=B(e.replace(v,"$1"));return s[S]?D(function(e,t,n,r){for(var o,i=s(e,null,r,[]),a=e.length;a--;)(o=i[a])&&(e[a]=!(t[a]=o))}):function(e,t,n){return r[0]=e,s(r,null,n,o),r[0]=null,!o.pop()}}),has:D(function(t){return function(e){return 0<I(t,e).length}}),contains:D(function(t){return t=t.replace(j,d),function(e){return-1<(e.textContent||i(e)).indexOf(t)}}),lang:D(function(n){return ie.test(n||"")||I.error("unsupported lang: "+n),n=n.replace(j,d).toLowerCase(),function(e){var t;do{if(t=E?e.lang:e.getAttribute("xml:lang")||e.getAttribute("lang"))return(t=t.toLowerCase())===n||0===t.indexOf(n+"-")}while((e=e.parentNode)&&1===e.nodeType);return!1}}),target:function(e){var t=P.location&&P.location.hash;return t&&t.slice(1)===e.id},root:function(e){return e===n},focus:function(e){return e===T.activeElement&&(!T.hasFocus||T.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:me(!1),disabled:me(!0),checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,!0===e.selected},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeType<6)return!1;return!0},parent:function(e){return!x.pseudos.empty(e)},header:function(e){return le.test(e.nodeName)},input:function(e){return se.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(e=e.getAttribute("type"))||"text"===e.toLowerCase())},first:q(function(){return[0]}),last:q(function(e,t){return[t-1]}),eq:q(function(e,t,n){return[n<0?n+t:n]}),even:q(function(e,t){for(var n=0;n<t;n+=2)e.push(n);return e}),odd:q(function(e,t){for(var n=1;n<t;n+=2)e.push(n);return e}),lt:q(function(e,t,n){for(var r=n<0?n+t:t<n?t:n;0<=--r;)e.push(r);return e}),gt:q(function(e,t,n){for(var r=n<0?n+t:n;++r<t;)e.push(r);return e})}}).pseudos.nth=x.pseudos.eq,{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})x.pseudos[e]=function(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}(e);for(e in{submit:!0,reset:!0})x.pseudos[e]=function(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}(e);function ve(){}function H(e){for(var t=0,n=e.length,r="";t<n;t++)r+=e[t].value;return r}function ye(a,e,t){var s=e.dir,l=e.next,u=l||s,c=t&&"parentNode"===u,d=$++;return e.first?function(e,t,n){for(;e=e[s];)if(1===e.nodeType||c)return a(e,t,n);return!1}:function(e,t,n){var r,o,i=[k,d];if(n){for(;e=e[s];)if((1===e.nodeType||c)&&a(e,t,n))return!0}else for(;e=e[s];)if(1===e.nodeType||c)if(o=(o=e[S]||(e[S]={}))[e.uniqueID]||(o[e.uniqueID]={}),l&&l===e.nodeName.toLowerCase())e=e[s]||e;else{if((r=o[u])&&r[0]===k&&r[1]===d)return i[2]=r[2];if((o[u]=i)[2]=a(e,t,n))return!0}return!1}}function be(o){return 1<o.length?function(e,t,n){for(var r=o.length;r--;)if(!o[r](e,t,n))return!1;return!0}:o[0]}function xe(e,t,n,r,o){for(var i,a=[],s=0,l=e.length,u=null!=t;s<l;s++)!(i=e[s])||n&&!n(i,r,o)||(a.push(i),u&&t.push(s));return a}function we(p,h,m,g,v,e){return g&&!g[S]&&(g=we(g)),v&&!v[S]&&(v=we(v,e)),D(function(e,t,n,r){var o,i,a,s=[],l=[],u=t.length,c=e||function(e,t,n){for(var r=0,o=t.length;r<o;r++)I(e,t[r],n);return n}(h||"*",n.nodeType?[n]:n,[]),d=!p||!e&&h?c:xe(c,s,p,n,r),f=m?v||(e?p:u||g)?[]:t:d;if(m&&m(d,f,n,r),g)for(o=xe(f,l),g(o,[],n,r),i=o.length;i--;)(a=o[i])&&(f[l[i]]=!(d[l[i]]=a));if(e){if(v||p){if(v){for(o=[],i=f.length;i--;)(a=f[i])&&o.push(d[i]=a);v(null,f=[],o,r)}for(i=f.length;i--;)(a=f[i])&&-1<(o=v?y(e,a):s[i])&&(e[o]=!(t[o]=a))}}else f=xe(f===t?f.splice(u,f.length):f),v?v(null,t,f,r):A.apply(t,f)})}function Ce(g,v){function e(e,t,n,r,o){var i,a,s,l=0,u="0",c=e&&[],d=[],f=w,p=e||b&&x.find.TAG("*",o),h=k+=null==f?1:Math.random()||.1,m=p.length;for(o&&(w=t==T||t||o);u!==m&&null!=(i=p[u]);u++){if(b&&i){for(a=0,t||i.ownerDocument==T||(C(i),n=!E);s=g[a++];)if(s(i,t||T,n)){r.push(i);break}o&&(k=h)}y&&((i=!s&&i)&&l--,e)&&c.push(i)}if(l+=u,y&&u!==l){for(a=0;s=v[a++];)s(c,d,t,n);if(e){if(0<l)for(;u--;)c[u]||d[u]||(d[u]=Y.call(r));d=xe(d)}A.apply(r,d),o&&!e&&0<d.length&&1<l+v.length&&I.uniqueSort(r)}return o&&(k=h,w=f),c}var y=0<v.length,b=0<g.length;return y?D(e):e}return ve.prototype=x.filters=x.pseudos,x.setFilters=new ve,p=I.tokenize=function(e,t){var n,r,o,i,a,s,l,u=z[e+" "];if(u)return t?0:u.slice(0);for(a=e,s=[],l=x.preFilter;a;){for(i in n&&!(r=te.exec(a))||(r&&(a=a.slice(r[0].length)||a),s.push(o=[])),n=!1,(r=ne.exec(a))&&(n=r.shift(),o.push({value:n,type:r[0].replace(v," ")}),a=a.slice(n.length)),x.filter)!(r=b[i].exec(a))||l[i]&&!(r=l[i](r))||(n=r.shift(),o.push({value:n,type:i,matches:r}),a=a.slice(n.length));if(!n)break}return t?a.length:a?I.error(e):z(e,s).slice(0)},B=I.compile=function(e,t){var n,r=[],o=[],i=U[e+" "];if(!i){for(n=(t=t||p(e)).length;n--;)((i=function e(t){for(var r,n,o,i=t.length,a=x.relative[t[0].type],s=a||x.relative[" "],l=a?1:0,u=ye(function(e){return e===r},s,!0),c=ye(function(e){return-1<y(r,e)},s,!0),d=[function(e,t,n){return e=!a&&(n||t!==w)||((r=t).nodeType?u:c)(e,t,n),r=null,e}];l<i;l++)if(n=x.relative[t[l].type])d=[ye(be(d),n)];else{if((n=x.filter[t[l].type].apply(null,t[l].matches))[S]){for(o=++l;o<i&&!x.relative[t[o].type];o++);return we(1<l&&be(d),1<l&&H(t.slice(0,l-1).concat({value:" "===t[l-2].type?"*":""})).replace(v,"$1"),n,l<o&&e(t.slice(l,o)),o<i&&e(t=t.slice(o)),o<i&&H(t))}d.push(n)}return be(d)}(t[n]))[S]?r:o).push(i);(i=U(e,Ce(o,r))).selector=e}return i},F=I.select=function(e,t,n,r){var o,i,a,s,l,u="function"==typeof e&&e,c=!r&&p(e=u.selector||e);if(n=n||[],1===c.length){if(2<(i=c[0]=c[0].slice(0)).length&&"ID"===(a=i[0]).type&&9===t.nodeType&&E&&x.relative[i[1].type]){if(!(t=(x.find.ID(a.matches[0].replace(j,d),t)||[])[0]))return n;u&&(t=t.parentNode),e=e.slice(i.shift().value.length)}for(o=b.needsContext.test(e)?0:i.length;o--&&(a=i[o],!x.relative[s=a.type]);)if((l=x.find[s])&&(r=l(a.matches[0].replace(j,d),ce.test(i[0].type)&&ge(t.parentNode)||t))){if(i.splice(o,1),e=r.length&&H(i))break;return A.apply(n,r),n}}return(u||B(e,c))(r,t,!E,n,!t||ce.test(e)&&ge(t.parentNode)||t),n},f.sortStable=S.split("").sort(X).join("")===S,f.detectDuplicates=!!u,C(),f.sortDetached=O(function(e){return 1&e.compareDocumentPosition(T.createElement("fieldset"))}),O(function(e){return e.innerHTML="<a href='#'></a>","#"===e.firstChild.getAttribute("href")})||pe("type|href|height|width",function(e,t,n){if(!n)return e.getAttribute(t,"type"===t.toLowerCase()?1:2)}),f.attributes&&O(function(e){return e.innerHTML="<input/>",e.firstChild.setAttribute("value",""),""===e.firstChild.getAttribute("value")})||pe("value",function(e,t,n){if(!n&&"input"===e.nodeName.toLowerCase())return e.defaultValue}),O(function(e){return null==e.getAttribute("disabled")})||pe(K,function(e,t,n){if(!n)return!0===e[t]?t.toLowerCase():(n=e.getAttributeNode(t))&&n.specified?n.value:null}),I}(w),G=(T.find=e,T.expr=e.selectors,T.expr[":"]=T.expr.pseudos,T.uniqueSort=T.unique=e.uniqueSort,T.text=e.getText,T.isXMLDoc=e.isXML,T.contains=e.contains,T.escapeSelector=e.escape,T.expr.match.needsContext);function l(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()}var K=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function Z(e,n,r){return y(n)?T.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?T.grep(e,function(e){return e===n!==r}):"string"!=typeof n?T.grep(e,function(e){return-1<B.call(n,e)!==r}):T.filter(n,e,r)}T.filter=function(e,t,n){var r=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===r.nodeType?T.find.matchesSelector(r,e)?[r]:[]:T.find.matches(e,T.grep(t,function(e){return 1===e.nodeType}))},T.fn.extend({find:function(e){var t,n,r=this.length,o=this;if("string"!=typeof e)return this.pushStack(T(e).filter(function(){for(t=0;t<r;t++)if(T.contains(o[t],this))return!0}));for(n=this.pushStack([]),t=0;t<r;t++)T.find(e,o[t],n);return 1<r?T.uniqueSort(n):n},filter:function(e){return this.pushStack(Z(this,e||[],!1))},not:function(e){return this.pushStack(Z(this,e||[],!0))},is:function(e){return!!Z(this,"string"==typeof e&&G.test(e)?T(e):e||[],!1).length}});var J,ee=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/,te=((T.fn.init=function(e,t,n){if(e){if(n=n||J,"string"!=typeof e)return e.nodeType?(this[0]=e,this.length=1,this):y(e)?void 0!==n.ready?n.ready(e):e(T):T.makeArray(e,this);if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:ee.exec(e))||!r[1]&&t)return(!t||t.jquery?t||n:this.constructor(t)).find(e);if(r[1]){if(t=t instanceof T?t[0]:t,T.merge(this,T.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:C,!0)),K.test(r[1])&&T.isPlainObject(t))for(var r in t)y(this[r])?this[r](t[r]):this.attr(r,t[r])}else(n=C.getElementById(r[2]))&&(this[0]=n,this.length=1)}return this}).prototype=T.fn,J=T(C),/^(?:parents|prev(?:Until|All))/),ne={children:!0,contents:!0,next:!0,prev:!0};function re(e,t){for(;(e=e[t])&&1!==e.nodeType;);return e}T.fn.extend({has:function(e){var t=T(e,this),n=t.length;return this.filter(function(){for(var e=0;e<n;e++)if(T.contains(this,t[e]))return!0})},closest:function(e,t){var n,r=0,o=this.length,i=[],a="string"!=typeof e&&T(e);if(!G.test(e))for(;r<o;r++)for(n=this[r];n&&n!==t;n=n.parentNode)if(n.nodeType<11&&(a?-1<a.index(n):1===n.nodeType&&T.find.matchesSelector(n,e))){i.push(n);break}return this.pushStack(1<i.length?T.uniqueSort(i):i)},index:function(e){return e?"string"==typeof e?B.call(T(e),this[0]):B.call(this,e.jquery?e[0]:e):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){return this.pushStack(T.uniqueSort(T.merge(this.get(),T(e,t))))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}}),T.each({parent:function(e){e=e.parentNode;return e&&11!==e.nodeType?e:null},parents:function(e){return r(e,"parentNode")},parentsUntil:function(e,t,n){return r(e,"parentNode",n)},next:function(e){return re(e,"nextSibling")},prev:function(e){return re(e,"previousSibling")},nextAll:function(e){return r(e,"nextSibling")},prevAll:function(e){return r(e,"previousSibling")},nextUntil:function(e,t,n){return r(e,"nextSibling",n)},prevUntil:function(e,t,n){return r(e,"previousSibling",n)},siblings:function(e){return V((e.parentNode||{}).firstChild,e)},children:function(e){return V(e.firstChild)},contents:function(e){return null!=e.contentDocument&&M(e.contentDocument)?e.contentDocument:(l(e,"template")&&(e=e.content||e),T.merge([],e.childNodes))}},function(r,o){T.fn[r]=function(e,t){var n=T.map(this,o,e);return(t="Until"!==r.slice(-5)?e:t)&&"string"==typeof t&&(n=T.filter(t,n)),1<this.length&&(ne[r]||T.uniqueSort(n),te.test(r))&&n.reverse(),this.pushStack(n)}});var E=/[^\x20\t\r\n\f]+/g;function c(e){return e}function oe(e){throw e}function ie(e,t,n,r){var o;try{e&&y(o=e.promise)?o.call(e).done(t).fail(n):e&&y(o=e.then)?o.call(e,t,n):t.apply(void 0,[e].slice(r))}catch(e){n.apply(void 0,[e])}}T.Callbacks=function(r){var e,n;r="string"==typeof r?(e=r,n={},T.each(e.match(E)||[],function(e,t){n[t]=!0}),n):T.extend({},r);function o(){for(s=s||r.once,a=i=!0;u.length;c=-1)for(t=u.shift();++c<l.length;)!1===l[c].apply(t[0],t[1])&&r.stopOnFalse&&(c=l.length,t=!1);r.memory||(t=!1),i=!1,s&&(l=t?[]:"")}var i,t,a,s,l=[],u=[],c=-1,d={add:function(){return l&&(t&&!i&&(c=l.length-1,u.push(t)),function n(e){T.each(e,function(e,t){y(t)?r.unique&&d.has(t)||l.push(t):t&&t.length&&"string"!==h(t)&&n(t)})}(arguments),t)&&!i&&o(),this},remove:function(){return T.each(arguments,function(e,t){for(var n;-1<(n=T.inArray(t,l,n));)l.splice(n,1),n<=c&&c--}),this},has:function(e){return e?-1<T.inArray(e,l):0<l.length},empty:function(){return l=l&&[],this},disable:function(){return s=u=[],l=t="",this},disabled:function(){return!l},lock:function(){return s=u=[],t||i||(l=t=""),this},locked:function(){return!!s},fireWith:function(e,t){return s||(t=[e,(t=t||[]).slice?t.slice():t],u.push(t),i)||o(),this},fire:function(){return d.fireWith(this,arguments),this},fired:function(){return!!a}};return d},T.extend({Deferred:function(e){var i=[["notify","progress",T.Callbacks("memory"),T.Callbacks("memory"),2],["resolve","done",T.Callbacks("once memory"),T.Callbacks("once memory"),0,"resolved"],["reject","fail",T.Callbacks("once memory"),T.Callbacks("once memory"),1,"rejected"]],o="pending",a={state:function(){return o},always:function(){return s.done(arguments).fail(arguments),this},catch:function(e){return a.then(null,e)},pipe:function(){var o=arguments;return T.Deferred(function(r){T.each(i,function(e,t){var n=y(o[t[4]])&&o[t[4]];s[t[1]](function(){var e=n&&n.apply(this,arguments);e&&y(e.promise)?e.promise().progress(r.notify).done(r.resolve).fail(r.reject):r[t[0]+"With"](this,n?[e]:arguments)})}),o=null}).promise()},then:function(t,n,r){var l=0;function u(o,i,a,s){return function(){function e(){var e,t;if(!(o<l)){if((e=a.apply(n,r))===i.promise())throw new TypeError("Thenable self-resolution");t=e&&("object"==typeof e||"function"==typeof e)&&e.then,y(t)?s?t.call(e,u(l,i,c,s),u(l,i,oe,s)):(l++,t.call(e,u(l,i,c,s),u(l,i,oe,s),u(l,i,c,i.notifyWith))):(a!==c&&(n=void 0,r=[e]),(s||i.resolveWith)(n,r))}}var n=this,r=arguments,t=s?e:function(){try{e()}catch(e){T.Deferred.exceptionHook&&T.Deferred.exceptionHook(e,t.stackTrace),l<=o+1&&(a!==oe&&(n=void 0,r=[e]),i.rejectWith(n,r))}};o?t():(T.Deferred.getStackHook&&(t.stackTrace=T.Deferred.getStackHook()),w.setTimeout(t))}}return T.Deferred(function(e){i[0][3].add(u(0,e,y(r)?r:c,e.notifyWith)),i[1][3].add(u(0,e,y(t)?t:c)),i[2][3].add(u(0,e,y(n)?n:oe))}).promise()},promise:function(e){return null!=e?T.extend(e,a):a}},s={};return T.each(i,function(e,t){var n=t[2],r=t[5];a[t[1]]=n.add,r&&n.add(function(){o=r},i[3-e][2].disable,i[3-e][3].disable,i[0][2].lock,i[0][3].lock),n.add(t[3].fire),s[t[0]]=function(){return s[t[0]+"With"](this===s?void 0:this,arguments),this},s[t[0]+"With"]=n.fireWith}),a.promise(s),e&&e.call(s,s),s},when:function(e){function t(t){return function(e){o[t]=this,i[t]=1<arguments.length?s.call(arguments):e,--n||a.resolveWith(o,i)}}var n=arguments.length,r=n,o=Array(r),i=s.call(arguments),a=T.Deferred();if(n<=1&&(ie(e,a.done(t(r)).resolve,a.reject,!n),"pending"===a.state()||y(i[r]&&i[r].then)))return a.then();for(;r--;)ie(i[r],t(r),a.reject);return a.promise()}});var ae=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/,se=(T.Deferred.exceptionHook=function(e,t){w.console&&w.console.warn&&e&&ae.test(e.name)&&w.console.warn("jQuery.Deferred exception: "+e.message,e.stack,t)},T.readyException=function(e){w.setTimeout(function(){throw e})},T.Deferred());function le(){C.removeEventListener("DOMContentLoaded",le),w.removeEventListener("load",le),T.ready()}T.fn.ready=function(e){return se.then(e).catch(function(e){T.readyException(e)}),this},T.extend({isReady:!1,readyWait:1,ready:function(e){(!0===e?--T.readyWait:T.isReady)||(T.isReady=!0)!==e&&0<--T.readyWait||se.resolveWith(C,[T])}}),T.ready.then=se.then,"complete"===C.readyState||"loading"!==C.readyState&&!C.documentElement.doScroll?w.setTimeout(T.ready):(C.addEventListener("DOMContentLoaded",le),w.addEventListener("load",le));function d(e,t,n,r,o,i,a){var s=0,l=e.length,u=null==n;if("object"===h(n))for(s in o=!0,n)d(e,t,s,n[s],!0,i,a);else if(void 0!==r&&(o=!0,y(r)||(a=!0),t=u?a?(t.call(e,r),null):(u=t,function(e,t,n){return u.call(T(e),n)}):t))for(;s<l;s++)t(e[s],n,a?r:r.call(e[s],s,t(e[s],n)));return o?e:u?t.call(e):l?t(e[0],n):i}var ue=/^-ms-/,ce=/-([a-z])/g;function de(e,t){return t.toUpperCase()}function b(e){return e.replace(ue,"ms-").replace(ce,de)}function v(e){return 1===e.nodeType||9===e.nodeType||!+e.nodeType}function fe(){this.expando=T.expando+fe.uid++}fe.uid=1,fe.prototype={cache:function(e){var t=e[this.expando];return t||(t={},v(e)&&(e.nodeType?e[this.expando]=t:Object.defineProperty(e,this.expando,{value:t,configurable:!0}))),t},set:function(e,t,n){var r,o=this.cache(e);if("string"==typeof t)o[b(t)]=n;else for(r in t)o[b(r)]=t[r];return o},get:function(e,t){return void 0===t?this.cache(e):e[this.expando]&&e[this.expando][b(t)]},access:function(e,t,n){return void 0===t||t&&"string"==typeof t&&void 0===n?this.get(e,t):(this.set(e,t,n),void 0!==n?n:t)},remove:function(e,t){var n,r=e[this.expando];if(void 0!==r){if(void 0!==t){n=(t=Array.isArray(t)?t.map(b):(t=b(t))in r?[t]:t.match(E)||[]).length;for(;n--;)delete r[t[n]]}void 0!==t&&!T.isEmptyObject(r)||(e.nodeType?e[this.expando]=void 0:delete e[this.expando])}},hasData:function(e){e=e[this.expando];return void 0!==e&&!T.isEmptyObject(e)}};var x=new fe,u=new fe,pe=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,he=/[A-Z]/g;function me(e,t,n){var r,o;if(void 0===n&&1===e.nodeType)if(r="data-"+t.replace(he,"-$&").toLowerCase(),"string"==typeof(n=e.getAttribute(r))){try{n="true"===(o=n)||"false"!==o&&("null"===o?null:o===+o+""?+o:pe.test(o)?JSON.parse(o):o)}catch(e){}u.set(e,t,n)}else n=void 0;return n}T.extend({hasData:function(e){return u.hasData(e)||x.hasData(e)},data:function(e,t,n){return u.access(e,t,n)},removeData:function(e,t){u.remove(e,t)},_data:function(e,t,n){return x.access(e,t,n)},_removeData:function(e,t){x.remove(e,t)}}),T.fn.extend({data:function(n,e){var t,r,o,i=this[0],a=i&&i.attributes;if(void 0!==n)return"object"==typeof n?this.each(function(){u.set(this,n)}):d(this,function(e){var t;if(i&&void 0===e)return void 0!==(t=u.get(i,n))||void 0!==(t=me(i,n))?t:void 0;this.each(function(){u.set(this,n,e)})},null,e,1<arguments.length,null,!0);if(this.length&&(o=u.get(i),1===i.nodeType)&&!x.get(i,"hasDataAttrs")){for(t=a.length;t--;)a[t]&&0===(r=a[t].name).indexOf("data-")&&(r=b(r.slice(5)),me(i,r,o[r]));x.set(i,"hasDataAttrs",!0)}return o},removeData:function(e){return this.each(function(){u.remove(this,e)})}}),T.extend({queue:function(e,t,n){var r;if(e)return r=x.get(e,t=(t||"fx")+"queue"),n&&(!r||Array.isArray(n)?r=x.access(e,t,T.makeArray(n)):r.push(n)),r||[]},dequeue:function(e,t){t=t||"fx";var n=T.queue(e,t),r=n.length,o=n.shift(),i=T._queueHooks(e,t);"inprogress"===o&&(o=n.shift(),r--),o&&("fx"===t&&n.unshift("inprogress"),delete i.stop,o.call(e,function(){T.dequeue(e,t)},i)),!r&&i&&i.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return x.get(e,n)||x.access(e,n,{empty:T.Callbacks("once memory").add(function(){x.remove(e,[t+"queue",n])})})}}),T.fn.extend({queue:function(t,n){var e=2;return"string"!=typeof t&&(n=t,t="fx",e--),arguments.length<e?T.queue(this[0],t):void 0===n?this:this.each(function(){var e=T.queue(this,t,n);T._queueHooks(this,t),"fx"===t&&"inprogress"!==e[0]&&T.dequeue(this,t)})},dequeue:function(e){return this.each(function(){T.dequeue(this,e)})},clearQueue:function(e){return this.queue(e||"fx",[])},promise:function(e,t){function n(){--o||i.resolveWith(a,[a])}var r,o=1,i=T.Deferred(),a=this,s=this.length;for("string"!=typeof e&&(t=e,e=void 0),e=e||"fx";s--;)(r=x.get(a[s],e+"queueHooks"))&&r.empty&&(o++,r.empty.add(n));return n(),i.promise(t)}});function ge(e,t){return"none"===(e=t||e).style.display||""===e.style.display&&k(e)&&"none"===T.css(e,"display")}var e=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,ve=new RegExp("^(?:([+-])=|)("+e+")([a-z%]*)$","i"),f=["Top","Right","Bottom","Left"],S=C.documentElement,k=function(e){return T.contains(e.ownerDocument,e)},ye={composed:!0};S.getRootNode&&(k=function(e){return T.contains(e.ownerDocument,e)||e.getRootNode(ye)===e.ownerDocument});function be(e,t,n,r){var o,i,a=20,s=r?function(){return r.cur()}:function(){return T.css(e,t,"")},l=s(),u=n&&n[3]||(T.cssNumber[t]?"":"px"),c=e.nodeType&&(T.cssNumber[t]||"px"!==u&&+l)&&ve.exec(T.css(e,t));if(c&&c[3]!==u){for(u=u||c[3],c=+(l/=2)||1;a--;)T.style(e,t,c+u),(1-i)*(1-(i=s()/l||.5))<=0&&(a=0),c/=i;T.style(e,t,(c*=2)+u),n=n||[]}return n&&(c=+c||+l||0,o=n[1]?c+(n[1]+1)*n[2]:+n[2],r)&&(r.unit=u,r.start=c,r.end=o),o}var xe={};function A(e,t){for(var n,r,o,i,a,s=[],l=0,u=e.length;l<u;l++)(r=e[l]).style&&(n=r.style.display,t?("none"===n&&(s[l]=x.get(r,"display")||null,s[l]||(r.style.display="")),""===r.style.display&&ge(r)&&(s[l]=(a=i=void 0,i=(o=r).ownerDocument,o=o.nodeName,(a=xe[o])||(i=i.body.appendChild(i.createElement(o)),a=T.css(i,"display"),i.parentNode.removeChild(i),xe[o]=a="none"===a?"block":a),a))):"none"!==n&&(s[l]="none",x.set(r,"display",n)));for(l=0;l<u;l++)null!=s[l]&&(e[l].style.display=s[l]);return e}T.fn.extend({show:function(){return A(this,!0)},hide:function(){return A(this)},toggle:function(e){return"boolean"==typeof e?e?this.show():this.hide():this.each(function(){ge(this)?T(this).show():T(this).hide()})}});var we=/^(?:checkbox|radio)$/i,Ce=/<([a-z][^\/\0>\x20\t\r\n\f]*)/i,Te=/^$|^module$|\/(?:java|ecma)script/i,N=(D=C.createDocumentFragment().appendChild(C.createElement("div")),(a=C.createElement("input")).setAttribute("type","radio"),a.setAttribute("checked","checked"),a.setAttribute("name","t"),D.appendChild(a),g.checkClone=D.cloneNode(!0).cloneNode(!0).lastChild.checked,D.innerHTML="<textarea>x</textarea>",g.noCloneChecked=!!D.cloneNode(!0).lastChild.defaultValue,D.innerHTML="<option></option>",g.option=!!D.lastChild,{thead:[1,"<table>","</table>"],col:[2,"<table><colgroup>","</colgroup></table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:[0,"",""]});function j(e,t){var n=void 0!==e.getElementsByTagName?e.getElementsByTagName(t||"*"):void 0!==e.querySelectorAll?e.querySelectorAll(t||"*"):[];return void 0===t||t&&l(e,t)?T.merge([e],n):n}function Ee(e,t){for(var n=0,r=e.length;n<r;n++)x.set(e[n],"globalEval",!t||x.get(t[n],"globalEval"))}N.tbody=N.tfoot=N.colgroup=N.caption=N.thead,N.th=N.td,g.option||(N.optgroup=N.option=[1,"<select multiple='multiple'>","</select>"]);var Se=/<|&#?\w+;/;function ke(e,t,n,r,o){for(var i,a,s,l,u,c=t.createDocumentFragment(),d=[],f=0,p=e.length;f<p;f++)if((i=e[f])||0===i)if("object"===h(i))T.merge(d,i.nodeType?[i]:i);else if(Se.test(i)){for(a=a||c.appendChild(t.createElement("div")),s=(Ce.exec(i)||["",""])[1].toLowerCase(),s=N[s]||N._default,a.innerHTML=s[1]+T.htmlPrefilter(i)+s[2],u=s[0];u--;)a=a.lastChild;T.merge(d,a.childNodes),(a=c.firstChild).textContent=""}else d.push(t.createTextNode(i));for(c.textContent="",f=0;i=d[f++];)if(r&&-1<T.inArray(i,r))o&&o.push(i);else if(l=k(i),a=j(c.appendChild(i),"script"),l&&Ee(a),n)for(u=0;i=a[u++];)Te.test(i.type||"")&&n.push(i);return c}var Ae=/^([^.]*)(?:\.(.+)|)/;function n(){return!0}function p(){return!1}function Ne(e,t){return e===function(){try{return C.activeElement}catch(e){}}()==("focus"===t)}function je(e,t,n,r,o,i){var a,s;if("object"==typeof t){for(s in"string"!=typeof n&&(r=r||n,n=void 0),t)je(e,s,n,r,t[s],i);return e}if(null==r&&null==o?(o=n,r=n=void 0):null==o&&("string"==typeof n?(o=r,r=void 0):(o=r,r=n,n=void 0)),!1===o)o=p;else if(!o)return e;return 1===i&&(a=o,(o=function(e){return T().off(e),a.apply(this,arguments)}).guid=a.guid||(a.guid=T.guid++)),e.each(function(){T.event.add(this,t,o,r,n)})}function Ie(e,o,i){i?(x.set(e,o,!1),T.event.add(e,o,{namespace:!1,handler:function(e){var t,n,r=x.get(this,o);if(1&e.isTrigger&&this[o]){if(r.length)(T.event.special[o]||{}).delegateType&&e.stopPropagation();else if(r=s.call(arguments),x.set(this,o,r),t=i(this,o),this[o](),r!==(n=x.get(this,o))||t?x.set(this,o,!1):n={},r!==n)return e.stopImmediatePropagation(),e.preventDefault(),n&&n.value}else r.length&&(x.set(this,o,{value:T.event.trigger(T.extend(r[0],T.Event.prototype),r.slice(1),this)}),e.stopImmediatePropagation())}})):void 0===x.get(e,o)&&T.event.add(e,o,n)}T.event={global:{},add:function(t,e,n,r,o){var i,a,s,l,u,c,d,f,p,h=x.get(t);if(v(t))for(n.handler&&(n=(i=n).handler,o=i.selector),o&&T.find.matchesSelector(S,o),n.guid||(n.guid=T.guid++),s=(s=h.events)||(h.events=Object.create(null)),a=(a=h.handle)||(h.handle=function(e){return void 0!==T&&T.event.triggered!==e.type?T.event.dispatch.apply(t,arguments):void 0}),l=(e=(e||"").match(E)||[""]).length;l--;)d=p=(f=Ae.exec(e[l])||[])[1],f=(f[2]||"").split(".").sort(),d&&(u=T.event.special[d]||{},d=(o?u.delegateType:u.bindType)||d,u=T.event.special[d]||{},p=T.extend({type:d,origType:p,data:r,handler:n,guid:n.guid,selector:o,needsContext:o&&T.expr.match.needsContext.test(o),namespace:f.join(".")},i),(c=s[d])||((c=s[d]=[]).delegateCount=0,u.setup&&!1!==u.setup.call(t,r,f,a))||t.addEventListener&&t.addEventListener(d,a),u.add&&(u.add.call(t,p),p.handler.guid||(p.handler.guid=n.guid)),o?c.splice(c.delegateCount++,0,p):c.push(p),T.event.global[d]=!0)},remove:function(e,t,n,r,o){var i,a,s,l,u,c,d,f,p,h,m,g=x.hasData(e)&&x.get(e);if(g&&(l=g.events)){for(u=(t=(t||"").match(E)||[""]).length;u--;)if(p=m=(s=Ae.exec(t[u])||[])[1],h=(s[2]||"").split(".").sort(),p){for(d=T.event.special[p]||{},f=l[p=(r?d.delegateType:d.bindType)||p]||[],s=s[2]&&new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),a=i=f.length;i--;)c=f[i],!o&&m!==c.origType||n&&n.guid!==c.guid||s&&!s.test(c.namespace)||r&&r!==c.selector&&("**"!==r||!c.selector)||(f.splice(i,1),c.selector&&f.delegateCount--,d.remove&&d.remove.call(e,c));a&&!f.length&&(d.teardown&&!1!==d.teardown.call(e,h,g.handle)||T.removeEvent(e,p,g.handle),delete l[p])}else for(p in l)T.event.remove(e,p+t[u],n,r,!0);T.isEmptyObject(l)&&x.remove(e,"handle events")}},dispatch:function(e){var t,n,r,o,i,a=new Array(arguments.length),s=T.event.fix(e),e=(x.get(this,"events")||Object.create(null))[s.type]||[],l=T.event.special[s.type]||{};for(a[0]=s,t=1;t<arguments.length;t++)a[t]=arguments[t];if(s.delegateTarget=this,!l.preDispatch||!1!==l.preDispatch.call(this,s)){for(i=T.event.handlers.call(this,s,e),t=0;(r=i[t++])&&!s.isPropagationStopped();)for(s.currentTarget=r.elem,n=0;(o=r.handlers[n++])&&!s.isImmediatePropagationStopped();)s.rnamespace&&!1!==o.namespace&&!s.rnamespace.test(o.namespace)||(s.handleObj=o,s.data=o.data,void 0!==(o=((T.event.special[o.origType]||{}).handle||o.handler).apply(r.elem,a))&&!1===(s.result=o)&&(s.preventDefault(),s.stopPropagation()));return l.postDispatch&&l.postDispatch.call(this,s),s.result}},handlers:function(e,t){var n,r,o,i,a,s=[],l=t.delegateCount,u=e.target;if(l&&u.nodeType&&!("click"===e.type&&1<=e.button))for(;u!==this;u=u.parentNode||this)if(1===u.nodeType&&("click"!==e.type||!0!==u.disabled)){for(i=[],a={},n=0;n<l;n++)void 0===a[o=(r=t[n]).selector+" "]&&(a[o]=r.needsContext?-1<T(o,this).index(u):T.find(o,this,null,[u]).length),a[o]&&i.push(r);i.length&&s.push({elem:u,handlers:i})}return u=this,l<t.length&&s.push({elem:u,handlers:t.slice(l)}),s},addProp:function(t,e){Object.defineProperty(T.Event.prototype,t,{enumerable:!0,configurable:!0,get:y(e)?function(){if(this.originalEvent)return e(this.originalEvent)}:function(){if(this.originalEvent)return this.originalEvent[t]},set:function(e){Object.defineProperty(this,t,{enumerable:!0,configurable:!0,writable:!0,value:e})}})},fix:function(e){return e[T.expando]?e:new T.Event(e)},special:{load:{noBubble:!0},click:{setup:function(e){e=this||e;return we.test(e.type)&&e.click&&l(e,"input")&&Ie(e,"click",n),!1},trigger:function(e){e=this||e;return we.test(e.type)&&e.click&&l(e,"input")&&Ie(e,"click"),!0},_default:function(e){e=e.target;return we.test(e.type)&&e.click&&l(e,"input")&&x.get(e,"click")||l(e,"a")}},beforeunload:{postDispatch:function(e){void 0!==e.result&&e.originalEvent&&(e.originalEvent.returnValue=e.result)}}}},T.removeEvent=function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n)},T.Event=function(e,t){if(!(this instanceof T.Event))return new T.Event(e,t);e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||void 0===e.defaultPrevented&&!1===e.returnValue?n:p,this.target=e.target&&3===e.target.nodeType?e.target.parentNode:e.target,this.currentTarget=e.currentTarget,this.relatedTarget=e.relatedTarget):this.type=e,t&&T.extend(this,t),this.timeStamp=e&&e.timeStamp||Date.now(),this[T.expando]=!0},T.Event.prototype={constructor:T.Event,isDefaultPrevented:p,isPropagationStopped:p,isImmediatePropagationStopped:p,isSimulated:!1,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=n,e&&!this.isSimulated&&e.preventDefault()},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=n,e&&!this.isSimulated&&e.stopPropagation()},stopImmediatePropagation:function(){var e=this.originalEvent;this.isImmediatePropagationStopped=n,e&&!this.isSimulated&&e.stopImmediatePropagation(),this.stopPropagation()}},T.each({altKey:!0,bubbles:!0,cancelable:!0,changedTouches:!0,ctrlKey:!0,detail:!0,eventPhase:!0,metaKey:!0,pageX:!0,pageY:!0,shiftKey:!0,view:!0,char:!0,code:!0,charCode:!0,key:!0,keyCode:!0,button:!0,buttons:!0,clientX:!0,clientY:!0,offsetX:!0,offsetY:!0,pointerId:!0,pointerType:!0,screenX:!0,screenY:!0,targetTouches:!0,toElement:!0,touches:!0,which:!0},T.event.addProp),T.each({focus:"focusin",blur:"focusout"},function(e,t){T.event.special[e]={setup:function(){return Ie(this,e,Ne),!1},trigger:function(){return Ie(this,e),!0},_default:function(){return!0},delegateType:t}}),T.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(e,o){T.event.special[e]={delegateType:o,bindType:o,handle:function(e){var t,n=e.relatedTarget,r=e.handleObj;return n&&(n===this||T.contains(this,n))||(e.type=r.origType,t=r.handler.apply(this,arguments),e.type=o),t}}}),T.fn.extend({on:function(e,t,n,r){return je(this,e,t,n,r)},one:function(e,t,n,r){return je(this,e,t,n,r,1)},off:function(e,t,n){var r,o;if(e&&e.preventDefault&&e.handleObj)r=e.handleObj,T(e.delegateTarget).off(r.namespace?r.origType+"."+r.namespace:r.origType,r.selector,r.handler);else{if("object"!=typeof e)return!1!==t&&"function"!=typeof t||(n=t,t=void 0),!1===n&&(n=p),this.each(function(){T.event.remove(this,e,n,t)});for(o in e)this.off(o,t,e[o])}return this}});var Le=/<script|<style|<link/i,De=/checked\s*(?:[^=]|=\s*.checked.)/i,Oe=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g;function qe(e,t){return l(e,"table")&&l(11!==t.nodeType?t:t.firstChild,"tr")&&T(e).children("tbody")[0]||e}function He(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function Pe(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Me(e,t){var n,r,o,i;if(1===t.nodeType){if(x.hasData(e)&&(i=x.get(e).events))for(o in x.remove(t,"handle events"),i)for(n=0,r=i[o].length;n<r;n++)T.event.add(t,o,i[o][n]);u.hasData(e)&&(e=u.access(e),e=T.extend({},e),u.set(t,e))}}function I(n,r,o,i){r=_(r);var e,t,a,s,l,u,c=0,d=n.length,f=d-1,p=r[0],h=y(p);if(h||1<d&&"string"==typeof p&&!g.checkClone&&De.test(p))return n.each(function(e){var t=n.eq(e);h&&(r[0]=p.call(this,e,t.html())),I(t,r,o,i)});if(d&&(t=(e=ke(r,n[0].ownerDocument,!1,n,i)).firstChild,1===e.childNodes.length&&(e=t),t||i)){for(s=(a=T.map(j(e,"script"),He)).length;c<d;c++)l=e,c!==f&&(l=T.clone(l,!0,!0),s)&&T.merge(a,j(l,"script")),o.call(n[c],l,c);if(s)for(u=a[a.length-1].ownerDocument,T.map(a,Pe),c=0;c<s;c++)l=a[c],Te.test(l.type||"")&&!x.access(l,"globalEval")&&T.contains(u,l)&&(l.src&&"module"!==(l.type||"").toLowerCase()?T._evalUrl&&!l.noModule&&T._evalUrl(l.src,{nonce:l.nonce||l.getAttribute("nonce")},u):Q(l.textContent.replace(Oe,""),l,u))}return n}function _e(e,t,n){for(var r,o=t?T.filter(t,e):e,i=0;null!=(r=o[i]);i++)n||1!==r.nodeType||T.cleanData(j(r)),r.parentNode&&(n&&k(r)&&Ee(j(r,"script")),r.parentNode.removeChild(r));return e}T.extend({htmlPrefilter:function(e){return e},clone:function(e,t,n){var r,o,i,a,s,l,u,c=e.cloneNode(!0),d=k(e);if(!(g.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||T.isXMLDoc(e)))for(a=j(c),r=0,o=(i=j(e)).length;r<o;r++)s=i[r],l=a[r],u=void 0,"input"===(u=l.nodeName.toLowerCase())&&we.test(s.type)?l.checked=s.checked:"input"!==u&&"textarea"!==u||(l.defaultValue=s.defaultValue);if(t)if(n)for(i=i||j(e),a=a||j(c),r=0,o=i.length;r<o;r++)Me(i[r],a[r]);else Me(e,c);return 0<(a=j(c,"script")).length&&Ee(a,!d&&j(e,"script")),c},cleanData:function(e){for(var t,n,r,o=T.event.special,i=0;void 0!==(n=e[i]);i++)if(v(n)){if(t=n[x.expando]){if(t.events)for(r in t.events)o[r]?T.event.remove(n,r):T.removeEvent(n,r,t.handle);n[x.expando]=void 0}n[u.expando]&&(n[u.expando]=void 0)}}}),T.fn.extend({detach:function(e){return _e(this,e,!0)},remove:function(e){return _e(this,e)},text:function(e){return d(this,function(e){return void 0===e?T.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=e)})},null,e,arguments.length)},append:function(){return I(this,arguments,function(e){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||qe(this,e).appendChild(e)})},prepend:function(){return I(this,arguments,function(e){var t;1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(t=qe(this,e)).insertBefore(e,t.firstChild)})},before:function(){return I(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return I(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},empty:function(){for(var e,t=0;null!=(e=this[t]);t++)1===e.nodeType&&(T.cleanData(j(e,!1)),e.textContent="");return this},clone:function(e,t){return e=null!=e&&e,t=null==t?e:t,this.map(function(){return T.clone(this,e,t)})},html:function(e){return d(this,function(e){var t=this[0]||{},n=0,r=this.length;if(void 0===e&&1===t.nodeType)return t.innerHTML;if("string"==typeof e&&!Le.test(e)&&!N[(Ce.exec(e)||["",""])[1].toLowerCase()]){e=T.htmlPrefilter(e);try{for(;n<r;n++)1===(t=this[n]||{}).nodeType&&(T.cleanData(j(t,!1)),t.innerHTML=e);t=0}catch(e){}}t&&this.empty().append(e)},null,e,arguments.length)},replaceWith:function(){var n=[];return I(this,arguments,function(e){var t=this.parentNode;T.inArray(this,n)<0&&(T.cleanData(j(this)),t)&&t.replaceChild(e,this)},n)}}),T.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(e,a){T.fn[e]=function(e){for(var t,n=[],r=T(e),o=r.length-1,i=0;i<=o;i++)t=i===o?this:this.clone(!0),T(r[i])[a](t),R.apply(n,t.get());return this.pushStack(n)}});function Re(e){var t=e.ownerDocument.defaultView;return(t=t&&t.opener?t:w).getComputedStyle(e)}function Be(e,t,n){var r,o={};for(r in t)o[r]=e.style[r],e.style[r]=t[r];for(r in n=n.call(e),t)e.style[r]=o[r];return n}var Fe,$e,We,ze,Ue,Xe,Qe,o,Ye=new RegExp("^("+e+")(?!px)[a-z%]+$","i"),Ve=new RegExp(f.join("|"),"i");function Ge(){var e;o&&(Qe.style.cssText="position:absolute;left:-11111px;width:60px;margin-top:1px;padding:0;border:0",o.style.cssText="position:relative;display:block;box-sizing:border-box;overflow:scroll;margin:auto;border:1px;padding:1px;width:60%;top:1%",S.appendChild(Qe).appendChild(o),e=w.getComputedStyle(o),Fe="1%"!==e.top,Xe=12===Ke(e.marginLeft),o.style.right="60%",ze=36===Ke(e.right),$e=36===Ke(e.width),o.style.position="absolute",We=12===Ke(o.offsetWidth/3),S.removeChild(Qe),o=null)}function Ke(e){return Math.round(parseFloat(e))}function Ze(e,t,n){var r,o,i=e.style;return(n=n||Re(e))&&(""!==(o=n.getPropertyValue(t)||n[t])||k(e)||(o=T.style(e,t)),!g.pixelBoxStyles())&&Ye.test(o)&&Ve.test(t)&&(e=i.width,t=i.minWidth,r=i.maxWidth,i.minWidth=i.maxWidth=i.width=o,o=n.width,i.width=e,i.minWidth=t,i.maxWidth=r),void 0!==o?o+"":o}function Je(e,t){return{get:function(){if(!e())return(this.get=t).apply(this,arguments);delete this.get}}}Qe=C.createElement("div"),(o=C.createElement("div")).style&&(o.style.backgroundClip="content-box",o.cloneNode(!0).style.backgroundClip="",g.clearCloneStyle="content-box"===o.style.backgroundClip,T.extend(g,{boxSizingReliable:function(){return Ge(),$e},pixelBoxStyles:function(){return Ge(),ze},pixelPosition:function(){return Ge(),Fe},reliableMarginLeft:function(){return Ge(),Xe},scrollboxSize:function(){return Ge(),We},reliableTrDimensions:function(){var e,t,n;return null==Ue&&(e=C.createElement("table"),t=C.createElement("tr"),n=C.createElement("div"),e.style.cssText="position:absolute;left:-11111px;border-collapse:separate",t.style.cssText="border:1px solid",t.style.height="1px",n.style.height="9px",n.style.display="block",S.appendChild(e).appendChild(t).appendChild(n),n=w.getComputedStyle(t),Ue=parseInt(n.height,10)+parseInt(n.borderTopWidth,10)+parseInt(n.borderBottomWidth,10)===t.offsetHeight,S.removeChild(e)),Ue}}));var et=["Webkit","Moz","ms"],tt=C.createElement("div").style,nt={};function rt(e){var t=T.cssProps[e]||nt[e];return t||(e in tt?e:nt[e]=function(e){for(var t=e[0].toUpperCase()+e.slice(1),n=et.length;n--;)if((e=et[n]+t)in tt)return e}(e)||e)}var ot=/^(none|table(?!-c[ea]).+)/,it=/^--/,at={position:"absolute",visibility:"hidden",display:"block"},st={letterSpacing:"0",fontWeight:"400"};function lt(e,t,n){var r=ve.exec(t);return r?Math.max(0,r[2]-(n||0))+(r[3]||"px"):t}function ut(e,t,n,r,o,i){var a="width"===t?1:0,s=0,l=0;if(n===(r?"border":"content"))return 0;for(;a<4;a+=2)"margin"===n&&(l+=T.css(e,n+f[a],!0,o)),r?("content"===n&&(l-=T.css(e,"padding"+f[a],!0,o)),"margin"!==n&&(l-=T.css(e,"border"+f[a]+"Width",!0,o))):(l+=T.css(e,"padding"+f[a],!0,o),"padding"!==n?l+=T.css(e,"border"+f[a]+"Width",!0,o):s+=T.css(e,"border"+f[a]+"Width",!0,o));return!r&&0<=i&&(l+=Math.max(0,Math.ceil(e["offset"+t[0].toUpperCase()+t.slice(1)]-i-l-s-.5))||0),l}function ct(e,t,n){var r=Re(e),o=(!g.boxSizingReliable()||n)&&"border-box"===T.css(e,"boxSizing",!1,r),i=o,a=Ze(e,t,r),s="offset"+t[0].toUpperCase()+t.slice(1);if(Ye.test(a)){if(!n)return a;a="auto"}return(!g.boxSizingReliable()&&o||!g.reliableTrDimensions()&&l(e,"tr")||"auto"===a||!parseFloat(a)&&"inline"===T.css(e,"display",!1,r))&&e.getClientRects().length&&(o="border-box"===T.css(e,"boxSizing",!1,r),i=s in e)&&(a=e[s]),(a=parseFloat(a)||0)+ut(e,t,n||(o?"border":"content"),i,r,a)+"px"}function i(e,t,n,r,o){return new i.prototype.init(e,t,n,r,o)}T.extend({cssHooks:{opacity:{get:function(e,t){if(t)return""===(t=Ze(e,"opacity"))?"1":t}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,gridArea:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnStart:!0,gridRow:!0,gridRowEnd:!0,gridRowStart:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{},style:function(e,t,n,r){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var o,i,a,s=b(t),l=it.test(t),u=e.style;if(l||(t=rt(s)),a=T.cssHooks[t]||T.cssHooks[s],void 0===n)return a&&"get"in a&&void 0!==(o=a.get(e,!1,r))?o:u[t];"string"===(i=typeof n)&&(o=ve.exec(n))&&o[1]&&(n=be(e,t,o),i="number"),null==n||n!=n||("number"!==i||l||(n+=o&&o[3]||(T.cssNumber[s]?"":"px")),g.clearCloneStyle||""!==n||0!==t.indexOf("background")||(u[t]="inherit"),a&&"set"in a&&void 0===(n=a.set(e,n,r)))||(l?u.setProperty(t,n):u[t]=n)}},css:function(e,t,n,r){var o,i=b(t);return it.test(t)||(t=rt(i)),"normal"===(o=void 0===(o=(i=T.cssHooks[t]||T.cssHooks[i])&&"get"in i?i.get(e,!0,n):o)?Ze(e,t,r):o)&&t in st&&(o=st[t]),(""===n||n)&&(i=parseFloat(o),!0===n||isFinite(i))?i||0:o}}),T.each(["height","width"],function(e,a){T.cssHooks[a]={get:function(e,t,n){if(t)return!ot.test(T.css(e,"display"))||e.getClientRects().length&&e.getBoundingClientRect().width?ct(e,a,n):Be(e,at,function(){return ct(e,a,n)})},set:function(e,t,n){var r=Re(e),o=!g.scrollboxSize()&&"absolute"===r.position,i=(o||n)&&"border-box"===T.css(e,"boxSizing",!1,r),n=n?ut(e,a,n,i,r):0;return i&&o&&(n-=Math.ceil(e["offset"+a[0].toUpperCase()+a.slice(1)]-parseFloat(r[a])-ut(e,a,"border",!1,r)-.5)),n&&(i=ve.exec(t))&&"px"!==(i[3]||"px")&&(e.style[a]=t,t=T.css(e,a)),lt(0,t,n)}}}),T.cssHooks.marginLeft=Je(g.reliableMarginLeft,function(e,t){if(t)return(parseFloat(Ze(e,"marginLeft"))||e.getBoundingClientRect().left-Be(e,{marginLeft:0},function(){return e.getBoundingClientRect().left}))+"px"}),T.each({margin:"",padding:"",border:"Width"},function(o,i){T.cssHooks[o+i]={expand:function(e){for(var t=0,n={},r="string"==typeof e?e.split(" "):[e];t<4;t++)n[o+f[t]+i]=r[t]||r[t-2]||r[0];return n}},"margin"!==o&&(T.cssHooks[o+i].set=lt)}),T.fn.extend({css:function(e,t){return d(this,function(e,t,n){var r,o,i={},a=0;if(Array.isArray(t)){for(r=Re(e),o=t.length;a<o;a++)i[t[a]]=T.css(e,t[a],!1,r);return i}return void 0!==n?T.style(e,t,n):T.css(e,t)},e,t,1<arguments.length)}}),((T.Tween=i).prototype={constructor:i,init:function(e,t,n,r,o,i){this.elem=e,this.prop=n,this.easing=o||T.easing._default,this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=i||(T.cssNumber[n]?"":"px")},cur:function(){var e=i.propHooks[this.prop];return(e&&e.get?e:i.propHooks._default).get(this)},run:function(e){var t,n=i.propHooks[this.prop];return this.options.duration?this.pos=t=T.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):this.pos=t=e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),(n&&n.set?n:i.propHooks._default).set(this),this}}).init.prototype=i.prototype,(i.propHooks={_default:{get:function(e){return 1!==e.elem.nodeType||null!=e.elem[e.prop]&&null==e.elem.style[e.prop]?e.elem[e.prop]:(e=T.css(e.elem,e.prop,""))&&"auto"!==e?e:0},set:function(e){T.fx.step[e.prop]?T.fx.step[e.prop](e):1!==e.elem.nodeType||!T.cssHooks[e.prop]&&null==e.elem.style[rt(e.prop)]?e.elem[e.prop]=e.now:T.style(e.elem,e.prop,e.now+e.unit)}}}).scrollTop=i.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},T.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2},_default:"swing"},T.fx=i.prototype.init,T.fx.step={};var L,dt,a,D,ft=/^(?:toggle|show|hide)$/,pt=/queueHooks$/;function ht(){dt&&(!1===C.hidden&&w.requestAnimationFrame?w.requestAnimationFrame(ht):w.setTimeout(ht,T.fx.interval),T.fx.tick())}function mt(){return w.setTimeout(function(){L=void 0}),L=Date.now()}function gt(e,t){var n,r=0,o={height:e};for(t=t?1:0;r<4;r+=2-t)o["margin"+(n=f[r])]=o["padding"+n]=e;return t&&(o.opacity=o.width=e),o}function vt(e,t,n){for(var r,o=(O.tweeners[t]||[]).concat(O.tweeners["*"]),i=0,a=o.length;i<a;i++)if(r=o[i].call(n,t,e))return r}function O(o,e,t){var n,i,r,a,s,l,u,c=0,d=O.prefilters.length,f=T.Deferred().always(function(){delete p.elem}),p=function(){if(!i){for(var e=L||mt(),e=Math.max(0,h.startTime+h.duration-e),t=1-(e/h.duration||0),n=0,r=h.tweens.length;n<r;n++)h.tweens[n].run(t);if(f.notifyWith(o,[h,t,e]),t<1&&r)return e;r||f.notifyWith(o,[h,1,0]),f.resolveWith(o,[h])}return!1},h=f.promise({elem:o,props:T.extend({},e),opts:T.extend(!0,{specialEasing:{},easing:T.easing._default},t),originalProperties:e,originalOptions:t,startTime:L||mt(),duration:t.duration,tweens:[],createTween:function(e,t){t=T.Tween(o,h.opts,e,t,h.opts.specialEasing[e]||h.opts.easing);return h.tweens.push(t),t},stop:function(e){var t=0,n=e?h.tweens.length:0;if(!i){for(i=!0;t<n;t++)h.tweens[t].run(1);e?(f.notifyWith(o,[h,1,0]),f.resolveWith(o,[h,e])):f.rejectWith(o,[h,e])}return this}}),m=h.props,g=m,v=h.opts.specialEasing;for(r in g)if(s=v[a=b(r)],l=g[r],Array.isArray(l)&&(s=l[1],l=g[r]=l[0]),r!==a&&(g[a]=l,delete g[r]),(u=T.cssHooks[a])&&"expand"in u)for(r in l=u.expand(l),delete g[a],l)r in g||(g[r]=l[r],v[r]=s);else v[a]=s;for(;c<d;c++)if(n=O.prefilters[c].call(h,o,m,h.opts))return y(n.stop)&&(T._queueHooks(h.elem,h.opts.queue).stop=n.stop.bind(n)),n;return T.map(m,vt,h),y(h.opts.start)&&h.opts.start.call(o,h),h.progress(h.opts.progress).done(h.opts.done,h.opts.complete).fail(h.opts.fail).always(h.opts.always),T.fx.timer(T.extend(p,{elem:o,anim:h,queue:h.opts.queue})),h}T.Animation=T.extend(O,{tweeners:{"*":[function(e,t){var n=this.createTween(e,t);return be(n.elem,e,ve.exec(t),n),n}]},tweener:function(e,t){for(var n,r=0,o=(e=y(e)?(t=e,["*"]):e.match(E)).length;r<o;r++)n=e[r],O.tweeners[n]=O.tweeners[n]||[],O.tweeners[n].unshift(t)},prefilters:[function(e,t,n){var r,o,i,a,s,l,u,c="width"in t||"height"in t,d=this,f={},p=e.style,h=e.nodeType&&ge(e),m=x.get(e,"fxshow");for(r in n.queue||(null==(a=T._queueHooks(e,"fx")).unqueued&&(a.unqueued=0,s=a.empty.fire,a.empty.fire=function(){a.unqueued||s()}),a.unqueued++,d.always(function(){d.always(function(){a.unqueued--,T.queue(e,"fx").length||a.empty.fire()})})),t)if(o=t[r],ft.test(o)){if(delete t[r],i=i||"toggle"===o,o===(h?"hide":"show")){if("show"!==o||!m||void 0===m[r])continue;h=!0}f[r]=m&&m[r]||T.style(e,r)}if((l=!T.isEmptyObject(t))||!T.isEmptyObject(f))for(r in c&&1===e.nodeType&&(n.overflow=[p.overflow,p.overflowX,p.overflowY],null==(u=m&&m.display)&&(u=x.get(e,"display")),"none"===(c=T.css(e,"display"))&&(u?c=u:(A([e],!0),u=e.style.display||u,c=T.css(e,"display"),A([e]))),"inline"===c||"inline-block"===c&&null!=u)&&"none"===T.css(e,"float")&&(l||(d.done(function(){p.display=u}),null==u&&(c=p.display,u="none"===c?"":c)),p.display="inline-block"),n.overflow&&(p.overflow="hidden",d.always(function(){p.overflow=n.overflow[0],p.overflowX=n.overflow[1],p.overflowY=n.overflow[2]})),l=!1,f)l||(m?"hidden"in m&&(h=m.hidden):m=x.access(e,"fxshow",{display:u}),i&&(m.hidden=!h),h&&A([e],!0),d.done(function(){for(r in h||A([e]),x.remove(e,"fxshow"),f)T.style(e,r,f[r])})),l=vt(h?m[r]:0,r,d),r in m||(m[r]=l.start,h&&(l.end=l.start,l.start=0))}],prefilter:function(e,t){t?O.prefilters.unshift(e):O.prefilters.push(e)}}),T.speed=function(e,t,n){var r=e&&"object"==typeof e?T.extend({},e):{complete:n||!n&&t||y(e)&&e,duration:e,easing:n&&t||t&&!y(t)&&t};return T.fx.off?r.duration=0:"number"!=typeof r.duration&&(r.duration in T.fx.speeds?r.duration=T.fx.speeds[r.duration]:r.duration=T.fx.speeds._default),null!=r.queue&&!0!==r.queue||(r.queue="fx"),r.old=r.complete,r.complete=function(){y(r.old)&&r.old.call(this),r.queue&&T.dequeue(this,r.queue)},r},T.fn.extend({fadeTo:function(e,t,n,r){return this.filter(ge).css("opacity",0).show().end().animate({opacity:t},e,n,r)},animate:function(t,e,n,r){function o(){var e=O(this,T.extend({},t),a);(i||x.get(this,"finish"))&&e.stop(!0)}var i=T.isEmptyObject(t),a=T.speed(e,n,r);return o.finish=o,i||!1===a.queue?this.each(o):this.queue(a.queue,o)},stop:function(o,e,i){function a(e){var t=e.stop;delete e.stop,t(i)}return"string"!=typeof o&&(i=e,e=o,o=void 0),e&&this.queue(o||"fx",[]),this.each(function(){var e=!0,t=null!=o&&o+"queueHooks",n=T.timers,r=x.get(this);if(t)r[t]&&r[t].stop&&a(r[t]);else for(t in r)r[t]&&r[t].stop&&pt.test(t)&&a(r[t]);for(t=n.length;t--;)n[t].elem!==this||null!=o&&n[t].queue!==o||(n[t].anim.stop(i),e=!1,n.splice(t,1));!e&&i||T.dequeue(this,o)})},finish:function(a){return!1!==a&&(a=a||"fx"),this.each(function(){var e,t=x.get(this),n=t[a+"queue"],r=t[a+"queueHooks"],o=T.timers,i=n?n.length:0;for(t.finish=!0,T.queue(this,a,[]),r&&r.stop&&r.stop.call(this,!0),e=o.length;e--;)o[e].elem===this&&o[e].queue===a&&(o[e].anim.stop(!0),o.splice(e,1));for(e=0;e<i;e++)n[e]&&n[e].finish&&n[e].finish.call(this);delete t.finish})}}),T.each(["toggle","show","hide"],function(e,r){var o=T.fn[r];T.fn[r]=function(e,t,n){return null==e||"boolean"==typeof e?o.apply(this,arguments):this.animate(gt(r,!0),e,t,n)}}),T.each({slideDown:gt("show"),slideUp:gt("hide"),slideToggle:gt("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(e,r){T.fn[e]=function(e,t,n){return this.animate(r,e,t,n)}}),T.timers=[],T.fx.tick=function(){var e,t=0,n=T.timers;for(L=Date.now();t<n.length;t++)(e=n[t])()||n[t]!==e||n.splice(t--,1);n.length||T.fx.stop(),L=void 0},T.fx.timer=function(e){T.timers.push(e),T.fx.start()},T.fx.interval=13,T.fx.start=function(){dt||(dt=!0,ht())},T.fx.stop=function(){dt=null},T.fx.speeds={slow:600,fast:200,_default:400},T.fn.delay=function(r,e){return r=T.fx&&T.fx.speeds[r]||r,this.queue(e=e||"fx",function(e,t){var n=w.setTimeout(e,r);t.stop=function(){w.clearTimeout(n)}})},a=C.createElement("input"),D=C.createElement("select").appendChild(C.createElement("option")),a.type="checkbox",g.checkOn=""!==a.value,g.optSelected=D.selected,(a=C.createElement("input")).value="t",a.type="radio",g.radioValue="t"===a.value;var yt,bt=T.expr.attrHandle,xt=(T.fn.extend({attr:function(e,t){return d(this,T.attr,e,t,1<arguments.length)},removeAttr:function(e){return this.each(function(){T.removeAttr(this,e)})}}),T.extend({attr:function(e,t,n){var r,o,i=e.nodeType;if(3!==i&&8!==i&&2!==i)return void 0===e.getAttribute?T.prop(e,t,n):(1===i&&T.isXMLDoc(e)||(o=T.attrHooks[t.toLowerCase()]||(T.expr.match.bool.test(t)?yt:void 0)),void 0!==n?null===n?void T.removeAttr(e,t):o&&"set"in o&&void 0!==(r=o.set(e,n,t))?r:(e.setAttribute(t,n+""),n):!(o&&"get"in o&&null!==(r=o.get(e,t)))&&null==(r=T.find.attr(e,t))?void 0:r)},attrHooks:{type:{set:function(e,t){var n;if(!g.radioValue&&"radio"===t&&l(e,"input"))return n=e.value,e.setAttribute("type",t),n&&(e.value=n),t}}},removeAttr:function(e,t){var n,r=0,o=t&&t.match(E);if(o&&1===e.nodeType)for(;n=o[r++];)e.removeAttribute(n)}}),yt={set:function(e,t,n){return!1===t?T.removeAttr(e,n):e.setAttribute(n,n),n}},T.each(T.expr.match.bool.source.match(/\w+/g),function(e,t){var a=bt[t]||T.find.attr;bt[t]=function(e,t,n){var r,o,i=t.toLowerCase();return n||(o=bt[i],bt[i]=r,r=null!=a(e,t,n)?i:null,bt[i]=o),r}}),/^(?:input|select|textarea|button)$/i),wt=/^(?:a|area)$/i;function q(e){return(e.match(E)||[]).join(" ")}function H(e){return e.getAttribute&&e.getAttribute("class")||""}function Ct(e){return Array.isArray(e)?e:"string"==typeof e&&e.match(E)||[]}T.fn.extend({prop:function(e,t){return d(this,T.prop,e,t,1<arguments.length)},removeProp:function(e){return this.each(function(){delete this[T.propFix[e]||e]})}}),T.extend({prop:function(e,t,n){var r,o,i=e.nodeType;if(3!==i&&8!==i&&2!==i)return 1===i&&T.isXMLDoc(e)||(t=T.propFix[t]||t,o=T.propHooks[t]),void 0!==n?o&&"set"in o&&void 0!==(r=o.set(e,n,t))?r:e[t]=n:o&&"get"in o&&null!==(r=o.get(e,t))?r:e[t]},propHooks:{tabIndex:{get:function(e){var t=T.find.attr(e,"tabindex");return t?parseInt(t,10):xt.test(e.nodeName)||wt.test(e.nodeName)&&e.href?0:-1}}},propFix:{for:"htmlFor",class:"className"}}),g.optSelected||(T.propHooks.selected={get:function(e){e=e.parentNode;return e&&e.parentNode&&e.parentNode.selectedIndex,null},set:function(e){e=e.parentNode;e&&(e.selectedIndex,e.parentNode)&&e.parentNode.selectedIndex}}),T.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){T.propFix[this.toLowerCase()]=this}),T.fn.extend({addClass:function(t){var e,n,r,o,i,a,s=0;if(y(t))return this.each(function(e){T(this).addClass(t.call(this,e,H(this)))});if((e=Ct(t)).length)for(;n=this[s++];)if(a=H(n),r=1===n.nodeType&&" "+q(a)+" "){for(i=0;o=e[i++];)r.indexOf(" "+o+" ")<0&&(r+=o+" ");a!==(a=q(r))&&n.setAttribute("class",a)}return this},removeClass:function(t){var e,n,r,o,i,a,s=0;if(y(t))return this.each(function(e){T(this).removeClass(t.call(this,e,H(this)))});if(!arguments.length)return this.attr("class","");if((e=Ct(t)).length)for(;n=this[s++];)if(a=H(n),r=1===n.nodeType&&" "+q(a)+" "){for(i=0;o=e[i++];)for(;-1<r.indexOf(" "+o+" ");)r=r.replace(" "+o+" "," ");a!==(a=q(r))&&n.setAttribute("class",a)}return this},toggleClass:function(o,t){var i=typeof o,a="string"==i||Array.isArray(o);return"boolean"==typeof t&&a?t?this.addClass(o):this.removeClass(o):y(o)?this.each(function(e){T(this).toggleClass(o.call(this,e,H(this),t),t)}):this.each(function(){var e,t,n,r;if(a)for(t=0,n=T(this),r=Ct(o);e=r[t++];)n.hasClass(e)?n.removeClass(e):n.addClass(e);else void 0!==o&&"boolean"!=i||((e=H(this))&&x.set(this,"__className__",e),this.setAttribute&&this.setAttribute("class",!e&&!1!==o&&x.get(this,"__className__")||""))})},hasClass:function(e){for(var t,n=0,r=" "+e+" ";t=this[n++];)if(1===t.nodeType&&-1<(" "+q(H(t))+" ").indexOf(r))return!0;return!1}});function Tt(e){e.stopPropagation()}var Et=/\r/g,St=(T.fn.extend({val:function(t){var n,e,r,o=this[0];return arguments.length?(r=y(t),this.each(function(e){1!==this.nodeType||(null==(e=r?t.call(this,e,T(this).val()):t)?e="":"number"==typeof e?e+="":Array.isArray(e)&&(e=T.map(e,function(e){return null==e?"":e+""})),(n=T.valHooks[this.type]||T.valHooks[this.nodeName.toLowerCase()])&&"set"in n&&void 0!==n.set(this,e,"value"))||(this.value=e)})):o?(n=T.valHooks[o.type]||T.valHooks[o.nodeName.toLowerCase()])&&"get"in n&&void 0!==(e=n.get(o,"value"))?e:"string"==typeof(e=o.value)?e.replace(Et,""):null==e?"":e:void 0}}),T.extend({valHooks:{option:{get:function(e){var t=T.find.attr(e,"value");return null!=t?t:q(T.text(e))}},select:{get:function(e){for(var t,n=e.options,r=e.selectedIndex,o="select-one"===e.type,i=o?null:[],a=o?r+1:n.length,s=r<0?a:o?r:0;s<a;s++)if(((t=n[s]).selected||s===r)&&!t.disabled&&(!t.parentNode.disabled||!l(t.parentNode,"optgroup"))){if(t=T(t).val(),o)return t;i.push(t)}return i},set:function(e,t){for(var n,r,o=e.options,i=T.makeArray(t),a=o.length;a--;)((r=o[a]).selected=-1<T.inArray(T.valHooks.option.get(r),i))&&(n=!0);return n||(e.selectedIndex=-1),i}}}}),T.each(["radio","checkbox"],function(){T.valHooks[this]={set:function(e,t){if(Array.isArray(t))return e.checked=-1<T.inArray(T(e).val(),t)}},g.checkOn||(T.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})}),g.focusin="onfocusin"in w,/^(?:focusinfocus|focusoutblur)$/),kt=(T.extend(T.event,{trigger:function(e,t,n,r){var o,i,a,s,l,u,c,d=[n||C],f=W.call(e,"type")?e.type:e,p=W.call(e,"namespace")?e.namespace.split("."):[],h=c=i=n=n||C;if(3!==n.nodeType&&8!==n.nodeType&&!St.test(f+T.event.triggered)&&(-1<f.indexOf(".")&&(f=(p=f.split(".")).shift(),p.sort()),s=f.indexOf(":")<0&&"on"+f,(e=e[T.expando]?e:new T.Event(f,"object"==typeof e&&e)).isTrigger=r?2:3,e.namespace=p.join("."),e.rnamespace=e.namespace?new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,e.result=void 0,e.target||(e.target=n),t=null==t?[e]:T.makeArray(t,[e]),u=T.event.special[f]||{},r||!u.trigger||!1!==u.trigger.apply(n,t))){if(!r&&!u.noBubble&&!m(n)){for(a=u.delegateType||f,St.test(a+f)||(h=h.parentNode);h;h=h.parentNode)d.push(h),i=h;i===(n.ownerDocument||C)&&d.push(i.defaultView||i.parentWindow||w)}for(o=0;(h=d[o++])&&!e.isPropagationStopped();)c=h,e.type=1<o?a:u.bindType||f,(l=(x.get(h,"events")||Object.create(null))[e.type]&&x.get(h,"handle"))&&l.apply(h,t),(l=s&&h[s])&&l.apply&&v(h)&&(e.result=l.apply(h,t),!1===e.result)&&e.preventDefault();return e.type=f,r||e.isDefaultPrevented()||u._default&&!1!==u._default.apply(d.pop(),t)||!v(n)||s&&y(n[f])&&!m(n)&&((i=n[s])&&(n[s]=null),T.event.triggered=f,e.isPropagationStopped()&&c.addEventListener(f,Tt),n[f](),e.isPropagationStopped()&&c.removeEventListener(f,Tt),T.event.triggered=void 0,i)&&(n[s]=i),e.result}},simulate:function(e,t,n){n=T.extend(new T.Event,n,{type:e,isSimulated:!0});T.event.trigger(n,null,t)}}),T.fn.extend({trigger:function(e,t){return this.each(function(){T.event.trigger(e,t,this)})},triggerHandler:function(e,t){var n=this[0];if(n)return T.event.trigger(e,t,n,!0)}}),g.focusin||T.each({focus:"focusin",blur:"focusout"},function(n,r){function o(e){T.event.simulate(r,e.target,T.event.fix(e))}T.event.special[r]={setup:function(){var e=this.ownerDocument||this.document||this,t=x.access(e,r);t||e.addEventListener(n,o,!0),x.access(e,r,(t||0)+1)},teardown:function(){var e=this.ownerDocument||this.document||this,t=x.access(e,r)-1;t?x.access(e,r,t):(e.removeEventListener(n,o,!0),x.remove(e,r))}}}),w.location),At={guid:Date.now()},Nt=/\?/,jt=(T.parseXML=function(e){var t,n;if(!e||"string"!=typeof e)return null;try{t=(new w.DOMParser).parseFromString(e,"text/xml")}catch(e){}return n=t&&t.getElementsByTagName("parsererror")[0],t&&!n||T.error("Invalid XML: "+(n?T.map(n.childNodes,function(e){return e.textContent}).join("\n"):e)),t},/\[\]$/),It=/\r?\n/g,Lt=/^(?:submit|button|image|reset|file)$/i,Dt=/^(?:input|select|textarea|keygen)/i;T.param=function(e,t){function n(e,t){t=y(t)?t():t,o[o.length]=encodeURIComponent(e)+"="+encodeURIComponent(null==t?"":t)}var r,o=[];if(null==e)return"";if(Array.isArray(e)||e.jquery&&!T.isPlainObject(e))T.each(e,function(){n(this.name,this.value)});else for(r in e)!function n(r,e,o,i){if(Array.isArray(e))T.each(e,function(e,t){o||jt.test(r)?i(r,t):n(r+"["+("object"==typeof t&&null!=t?e:"")+"]",t,o,i)});else if(o||"object"!==h(e))i(r,e);else for(var t in e)n(r+"["+t+"]",e[t],o,i)}(r,e[r],t,n);return o.join("&")},T.fn.extend({serialize:function(){return T.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=T.prop(this,"elements");return e?T.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!T(this).is(":disabled")&&Dt.test(this.nodeName)&&!Lt.test(e)&&(this.checked||!we.test(e))}).map(function(e,t){var n=T(this).val();return null==n?null:Array.isArray(n)?T.map(n,function(e){return{name:t.name,value:e.replace(It,"\r\n")}}):{name:t.name,value:n.replace(It,"\r\n")}}).get()}});var Ot=/%20/g,qt=/#.*$/,Ht=/([?&])_=[^&]*/,Pt=/^(.*?):[ \t]*([^\r\n]*)$/gm,Mt=/^(?:GET|HEAD)$/,_t=/^\/\//,Rt={},Bt={},Ft="*/".concat("*"),$t=C.createElement("a");function Wt(i){return function(e,t){"string"!=typeof e&&(t=e,e="*");var n,r=0,o=e.toLowerCase().match(E)||[];if(y(t))for(;n=o[r++];)"+"===n[0]?(n=n.slice(1)||"*",(i[n]=i[n]||[]).unshift(t)):(i[n]=i[n]||[]).push(t)}}function zt(t,r,o,i){var a={},s=t===Bt;function l(e){var n;return a[e]=!0,T.each(t[e]||[],function(e,t){t=t(r,o,i);return"string"!=typeof t||s||a[t]?s?!(n=t):void 0:(r.dataTypes.unshift(t),l(t),!1)}),n}return l(r.dataTypes[0])||!a["*"]&&l("*")}function Ut(e,t){var n,r,o=T.ajaxSettings.flatOptions||{};for(n in t)void 0!==t[n]&&((o[n]?e:r=r||{})[n]=t[n]);return r&&T.extend(!0,e,r),e}$t.href=kt.href,T.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:kt.href,type:"GET",isLocal:/^(?:about|app|app-storage|.+-extension|file|res|widget):$/.test(kt.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Ft,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":T.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?Ut(Ut(e,T.ajaxSettings),t):Ut(T.ajaxSettings,e)},ajaxPrefilter:Wt(Rt),ajaxTransport:Wt(Bt),ajax:function(e,t){"object"==typeof e&&(t=e,e=void 0);var l,u,c,n,d,f,p,r,h=T.ajaxSetup({},t=t||{}),m=h.context||h,g=h.context&&(m.nodeType||m.jquery)?T(m):T.event,v=T.Deferred(),y=T.Callbacks("once memory"),b=h.statusCode||{},o={},i={},a="canceled",x={readyState:0,getResponseHeader:function(e){var t;if(f){if(!n)for(n={};t=Pt.exec(c);)n[t[1].toLowerCase()+" "]=(n[t[1].toLowerCase()+" "]||[]).concat(t[2]);t=n[e.toLowerCase()+" "]}return null==t?null:t.join(", ")},getAllResponseHeaders:function(){return f?c:null},setRequestHeader:function(e,t){return null==f&&(e=i[e.toLowerCase()]=i[e.toLowerCase()]||e,o[e]=t),this},overrideMimeType:function(e){return null==f&&(h.mimeType=e),this},statusCode:function(e){if(e)if(f)x.always(e[x.status]);else for(var t in e)b[t]=[b[t],e[t]];return this},abort:function(e){e=e||a;return l&&l.abort(e),s(0,e),this}};if(v.promise(x),h.url=((e||h.url||kt.href)+"").replace(_t,kt.protocol+"//"),h.type=t.method||t.type||h.method||h.type,h.dataTypes=(h.dataType||"*").toLowerCase().match(E)||[""],null==h.crossDomain){e=C.createElement("a");try{e.href=h.url,e.href=e.href,h.crossDomain=$t.protocol+"//"+$t.host!=e.protocol+"//"+e.host}catch(e){h.crossDomain=!0}}if(h.data&&h.processData&&"string"!=typeof h.data&&(h.data=T.param(h.data,h.traditional)),zt(Rt,h,t,x),!f){for(r in(p=T.event&&h.global)&&0==T.active++&&T.event.trigger("ajaxStart"),h.type=h.type.toUpperCase(),h.hasContent=!Mt.test(h.type),u=h.url.replace(qt,""),h.hasContent?h.data&&h.processData&&0===(h.contentType||"").indexOf("application/x-www-form-urlencoded")&&(h.data=h.data.replace(Ot,"+")):(e=h.url.slice(u.length),h.data&&(h.processData||"string"==typeof h.data)&&(u+=(Nt.test(u)?"&":"?")+h.data,delete h.data),!1===h.cache&&(u=u.replace(Ht,"$1"),e=(Nt.test(u)?"&":"?")+"_="+At.guid+++e),h.url=u+e),h.ifModified&&(T.lastModified[u]&&x.setRequestHeader("If-Modified-Since",T.lastModified[u]),T.etag[u])&&x.setRequestHeader("If-None-Match",T.etag[u]),(h.data&&h.hasContent&&!1!==h.contentType||t.contentType)&&x.setRequestHeader("Content-Type",h.contentType),x.setRequestHeader("Accept",h.dataTypes[0]&&h.accepts[h.dataTypes[0]]?h.accepts[h.dataTypes[0]]+("*"!==h.dataTypes[0]?", "+Ft+"; q=0.01":""):h.accepts["*"]),h.headers)x.setRequestHeader(r,h.headers[r]);if(h.beforeSend&&(!1===h.beforeSend.call(m,x,h)||f))return x.abort();if(a="abort",y.add(h.complete),x.done(h.success),x.fail(h.error),l=zt(Bt,h,t,x)){if(x.readyState=1,p&&g.trigger("ajaxSend",[x,h]),f)return x;h.async&&0<h.timeout&&(d=w.setTimeout(function(){x.abort("timeout")},h.timeout));try{f=!1,l.send(o,s)}catch(e){if(f)throw e;s(-1,e)}}else s(-1,"No Transport")}return x;function s(e,t,n,r){var o,i,a,s=t;f||(f=!0,d&&w.clearTimeout(d),l=void 0,c=r||"",x.readyState=0<e?4:0,r=200<=e&&e<300||304===e,n&&(a=function(e,t,n){for(var r,o,i,a,s=e.contents,l=e.dataTypes;"*"===l[0];)l.shift(),void 0===r&&(r=e.mimeType||t.getResponseHeader("Content-Type"));if(r)for(o in s)if(s[o]&&s[o].test(r)){l.unshift(o);break}if(l[0]in n)i=l[0];else{for(o in n){if(!l[0]||e.converters[o+" "+l[0]]){i=o;break}a=a||o}i=i||a}if(i)return i!==l[0]&&l.unshift(i),n[i]}(h,x,n)),!r&&-1<T.inArray("script",h.dataTypes)&&T.inArray("json",h.dataTypes)<0&&(h.converters["text script"]=function(){}),a=function(e,t,n,r){var o,i,a,s,l,u={},c=e.dataTypes.slice();if(c[1])for(a in e.converters)u[a.toLowerCase()]=e.converters[a];for(i=c.shift();i;)if(e.responseFields[i]&&(n[e.responseFields[i]]=t),!l&&r&&e.dataFilter&&(t=e.dataFilter(t,e.dataType)),l=i,i=c.shift())if("*"===i)i=l;else if("*"!==l&&l!==i){if(!(a=u[l+" "+i]||u["* "+i]))for(o in u)if((s=o.split(" "))[1]===i&&(a=u[l+" "+s[0]]||u["* "+s[0]])){!0===a?a=u[o]:!0!==u[o]&&(i=s[0],c.unshift(s[1]));break}if(!0!==a)if(a&&e.throws)t=a(t);else try{t=a(t)}catch(e){return{state:"parsererror",error:a?e:"No conversion from "+l+" to "+i}}}return{state:"success",data:t}}(h,a,x,r),r?(h.ifModified&&((n=x.getResponseHeader("Last-Modified"))&&(T.lastModified[u]=n),n=x.getResponseHeader("etag"))&&(T.etag[u]=n),204===e||"HEAD"===h.type?s="nocontent":304===e?s="notmodified":(s=a.state,o=a.data,r=!(i=a.error))):(i=s,!e&&s||(s="error",e<0&&(e=0))),x.status=e,x.statusText=(t||s)+"",r?v.resolveWith(m,[o,s,x]):v.rejectWith(m,[x,s,i]),x.statusCode(b),b=void 0,p&&g.trigger(r?"ajaxSuccess":"ajaxError",[x,h,r?o:i]),y.fireWith(m,[x,s]),p&&(g.trigger("ajaxComplete",[x,h]),--T.active||T.event.trigger("ajaxStop")))}},getJSON:function(e,t,n){return T.get(e,t,n,"json")},getScript:function(e,t){return T.get(e,void 0,t,"script")}}),T.each(["get","post"],function(e,o){T[o]=function(e,t,n,r){return y(t)&&(r=r||n,n=t,t=void 0),T.ajax(T.extend({url:e,type:o,dataType:r,data:t,success:n},T.isPlainObject(e)&&e))}}),T.ajaxPrefilter(function(e){for(var t in e.headers)"content-type"===t.toLowerCase()&&(e.contentType=e.headers[t]||"")}),T._evalUrl=function(e,t,n){return T.ajax({url:e,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,converters:{"text script":function(){}},dataFilter:function(e){T.globalEval(e,t,n)}})},T.fn.extend({wrapAll:function(e){return this[0]&&(y(e)&&(e=e.call(this[0])),e=T(e,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&e.insertBefore(this[0]),e.map(function(){for(var e=this;e.firstElementChild;)e=e.firstElementChild;return e}).append(this)),this},wrapInner:function(n){return y(n)?this.each(function(e){T(this).wrapInner(n.call(this,e))}):this.each(function(){var e=T(this),t=e.contents();t.length?t.wrapAll(n):e.append(n)})},wrap:function(t){var n=y(t);return this.each(function(e){T(this).wrapAll(n?t.call(this,e):t)})},unwrap:function(e){return this.parent(e).not("body").each(function(){T(this).replaceWith(this.childNodes)}),this}}),T.expr.pseudos.hidden=function(e){return!T.expr.pseudos.visible(e)},T.expr.pseudos.visible=function(e){return!!(e.offsetWidth||e.offsetHeight||e.getClientRects().length)},T.ajaxSettings.xhr=function(){try{return new w.XMLHttpRequest}catch(e){}};var Xt={0:200,1223:204},Qt=T.ajaxSettings.xhr(),Yt=(g.cors=!!Qt&&"withCredentials"in Qt,g.ajax=Qt=!!Qt,T.ajaxTransport(function(o){var i,a;if(g.cors||Qt&&!o.crossDomain)return{send:function(e,t){var n,r=o.xhr();if(r.open(o.type,o.url,o.async,o.username,o.password),o.xhrFields)for(n in o.xhrFields)r[n]=o.xhrFields[n];for(n in o.mimeType&&r.overrideMimeType&&r.overrideMimeType(o.mimeType),o.crossDomain||e["X-Requested-With"]||(e["X-Requested-With"]="XMLHttpRequest"),e)r.setRequestHeader(n,e[n]);i=function(e){return function(){i&&(i=a=r.onload=r.onerror=r.onabort=r.ontimeout=r.onreadystatechange=null,"abort"===e?r.abort():"error"===e?"number"!=typeof r.status?t(0,"error"):t(r.status,r.statusText):t(Xt[r.status]||r.status,r.statusText,"text"!==(r.responseType||"text")||"string"!=typeof r.responseText?{binary:r.response}:{text:r.responseText},r.getAllResponseHeaders()))}},r.onload=i(),a=r.onerror=r.ontimeout=i("error"),void 0!==r.onabort?r.onabort=a:r.onreadystatechange=function(){4===r.readyState&&w.setTimeout(function(){i&&a()})},i=i("abort");try{r.send(o.hasContent&&o.data||null)}catch(e){if(i)throw e}},abort:function(){i&&i()}}}),T.ajaxPrefilter(function(e){e.crossDomain&&(e.contents.script=!1)}),T.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(e){return T.globalEval(e),e}}}),T.ajaxPrefilter("script",function(e){void 0===e.cache&&(e.cache=!1),e.crossDomain&&(e.type="GET")}),T.ajaxTransport("script",function(n){var r,o;if(n.crossDomain||n.scriptAttrs)return{send:function(e,t){r=T("<script>").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",o=function(e){r.remove(),o=null,e&&t("error"===e.type?404:200,e.type)}),C.head.appendChild(r[0])},abort:function(){o&&o()}}}),[]),Vt=/(=)\?(?=&|$)|\?\?/,Gt=(T.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Yt.pop()||T.expando+"_"+At.guid++;return this[e]=!0,e}}),T.ajaxPrefilter("json jsonp",function(e,t,n){var r,o,i,a=!1!==e.jsonp&&(Vt.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Vt.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=y(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Vt,"$1"+r):!1!==e.jsonp&&(e.url+=(Nt.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return i||T.error(r+" was not called"),i[0]},e.dataTypes[0]="json",o=w[r],w[r]=function(){i=arguments},n.always(function(){void 0===o?T(w).removeProp(r):w[r]=o,e[r]&&(e.jsonpCallback=t.jsonpCallback,Yt.push(r)),i&&y(o)&&o(i[0]),i=o=void 0}),"script"}),g.createHTMLDocument=((e=C.implementation.createHTMLDocument("").body).innerHTML="<form></form><form></form>",2===e.childNodes.length),T.parseHTML=function(e,t,n){var r;return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(g.createHTMLDocument?((r=(t=C.implementation.createHTMLDocument("")).createElement("base")).href=C.location.href,t.head.appendChild(r)):t=C),r=!n&&[],(n=K.exec(e))?[t.createElement(n[1])]:(n=ke([e],t,r),r&&r.length&&T(r).remove(),T.merge([],n.childNodes)))},T.fn.load=function(e,t,n){var r,o,i,a=this,s=e.indexOf(" ");return-1<s&&(r=q(e.slice(s)),e=e.slice(0,s)),y(t)?(n=t,t=void 0):t&&"object"==typeof t&&(o="POST"),0<a.length&&T.ajax({url:e,type:o||"GET",dataType:"html",data:t}).done(function(e){i=arguments,a.html(r?T("<div>").append(T.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,i||[e.responseText,t,e])})}),this},T.expr.pseudos.animated=function(t){return T.grep(T.timers,function(e){return t===e.elem}).length},T.offset={setOffset:function(e,t,n){var r,o,i,a,s=T.css(e,"position"),l=T(e),u={};"static"===s&&(e.style.position="relative"),i=l.offset(),r=T.css(e,"top"),a=T.css(e,"left"),s=("absolute"===s||"fixed"===s)&&-1<(r+a).indexOf("auto")?(o=(s=l.position()).top,s.left):(o=parseFloat(r)||0,parseFloat(a)||0),null!=(t=y(t)?t.call(e,n,T.extend({},i)):t).top&&(u.top=t.top-i.top+o),null!=t.left&&(u.left=t.left-i.left+s),"using"in t?t.using.call(e,u):l.css(u)}},T.fn.extend({offset:function(t){var e,n;return arguments.length?void 0===t?this:this.each(function(e){T.offset.setOffset(this,t,e)}):(n=this[0])?n.getClientRects().length?(e=n.getBoundingClientRect(),n=n.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],o={top:0,left:0};if("fixed"===T.css(r,"position"))t=r.getBoundingClientRect();else{for(t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;e&&(e===n.body||e===n.documentElement)&&"static"===T.css(e,"position");)e=e.parentNode;e&&e!==r&&1===e.nodeType&&((o=T(e).offset()).top+=T.css(e,"borderTopWidth",!0),o.left+=T.css(e,"borderLeftWidth",!0))}return{top:t.top-o.top-T.css(r,"marginTop",!0),left:t.left-o.left-T.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){for(var e=this.offsetParent;e&&"static"===T.css(e,"position");)e=e.offsetParent;return e||S})}}),T.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,o){var i="pageYOffset"===o;T.fn[t]=function(e){return d(this,function(e,t,n){var r;if(m(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[o]:e[t];r?r.scrollTo(i?r.pageXOffset:n,i?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),T.each(["top","left"],function(e,n){T.cssHooks[n]=Je(g.pixelPosition,function(e,t){if(t)return t=Ze(e,n),Ye.test(t)?T(e).position()[n]+"px":t})}),T.each({Height:"height",Width:"width"},function(a,s){T.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,i){T.fn[i]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),o=r||(!0===e||!0===t?"margin":"border");return d(this,function(e,t,n){var r;return m(e)?0===i.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?T.css(e,t,o):T.style(e,t,n,o)},s,n?e:void 0,n)}})}),T.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){T.fn[t]=function(e){return this.on(t,e)}}),T.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),T.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){T.fn[n]=function(e,t){return 0<arguments.length?this.on(n,null,e,t):this.trigger(n)}}),/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g),Kt=(T.proxy=function(e,t){var n,r;if("string"==typeof t&&(r=e[t],t=e,e=r),y(e))return n=s.call(arguments,2),(r=function(){return e.apply(t||this,n.concat(s.call(arguments)))}).guid=e.guid=e.guid||T.guid++,r},T.holdReady=function(e){e?T.readyWait++:T.ready(!0)},T.isArray=Array.isArray,T.parseJSON=JSON.parse,T.nodeName=l,T.isFunction=y,T.isWindow=m,T.camelCase=b,T.type=h,T.now=Date.now,T.isNumeric=function(e){var t=T.type(e);return("number"===t||"string"===t)&&!isNaN(e-parseFloat(e))},T.trim=function(e){return null==e?"":(e+"").replace(Gt,"")},"function"==typeof define&&define.amd&&define("jquery",[],function(){return T}),w.jQuery),Zt=w.$;return T.noConflict=function(e){return w.$===T&&(w.$=Zt),e&&w.jQuery===T&&(w.jQuery=Kt),T},void 0===P&&(w.jQuery=w.$=T),T}),function(e,t){"function"==typeof define&&define.amd?define([],function(){return t(e)}):"object"==typeof exports?module.exports=t(e):e.Gumshoe=t(e)}("undefined"!=typeof global?global:"undefined"!=typeof window?window:this,function(c){"use strict";function d(e){e&&e.sort(function(e,t){return r(e.content)<r(t.content)?-1:1})}function n(){return c.innerHeight+c.pageYOffset>=Math.max(document.body.scrollHeight,document.documentElement.scrollHeight,document.body.offsetHeight,document.documentElement.offsetHeight,document.body.clientHeight,document.documentElement.clientHeight)}function f(e,t){var n;e&&(n=e.nav.closest("li"))&&(n.classList.remove(t.navClass),e.content.classList.remove(t.contentClass),o(n,t),h("gumshoeDeactivate",n,{link:e.nav,content:e.content,settings:t}))}var p={navClass:"active",contentClass:"active",nested:!1,nestedClass:"active",offset:0,reflow:!1,events:!0},h=function(e,t,n){n.settings.events&&(e=new CustomEvent(e,{bubbles:!0,cancelable:!0,detail:n}),t.dispatchEvent(e))},r=function(e){var t=0;if(e.offsetParent)for(;e;)t+=e.offsetTop,e=e.offsetParent;return 0<=t?t:0},m=function(e,t,n){e=e.getBoundingClientRect(),t="function"==typeof(t=t).offset?parseFloat(t.offset()):parseFloat(t.offset);return n?parseInt(e.bottom,10)<(c.innerHeight||document.documentElement.clientHeight):parseInt(e.top,10)<=t},g=function(e,t){return!(!n()||!m(e.content,t,!0))},o=function(e,t){t.nested&&(e=e.parentNode.closest("li"))&&(e.classList.remove(t.nestedClass),o(e,t))},v=function(e,t){t.nested&&(e=e.parentNode.closest("li"))&&(e.classList.add(t.nestedClass),v(e,t))};return function(e,t){function n(e){s&&c.cancelAnimationFrame(s),s=c.requestAnimationFrame(u.detect)}function r(e){s&&c.cancelAnimationFrame(s),s=c.requestAnimationFrame(function(){d(i),u.detect()})}var o,i,a,s,l,u={setup:function(){o=document.querySelectorAll(e),i=[],Array.prototype.forEach.call(o,function(e){var t=document.getElementById(decodeURIComponent(e.hash.substr(1)));t&&i.push({nav:e,content:t})}),d(i)}};u.detect=function(){var e,t,n,r=function(e,t){var n=e[e.length-1];if(g(n,t))return n;for(var r=e.length-1;0<=r;r--)if(m(e[r].content,t))return e[r]}(i,l);r?a&&r.content===a.content||(f(a,l),t=l,(e=r)&&(n=e.nav.closest("li"))&&(n.classList.add(t.navClass),e.content.classList.add(t.contentClass),v(n,t),h("gumshoeActivate",n,{link:e.nav,content:e.content,settings:t})),a=r):a&&(f(a,l),a=null)},u.destroy=function(){a&&f(a,l),c.removeEventListener("scroll",n,!1),l.reflow&&c.removeEventListener("resize",r,!1),l=s=a=o=i=null};return l=function(){var n={};return Array.prototype.forEach.call(arguments,function(e){for(var t in e){if(!e.hasOwnProperty(t))return;n[t]=e[t]}}),n}(p,t||{}),u.setup(),u.detect(),c.addEventListener("scroll",n,!1),l.reflow&&c.addEventListener("resize",r,!1),u}}),function(e,c){var r,t=e.jQuery||e.Cowboy||(e.Cowboy={});t.throttle=r=function(o,i,a,s){var l,u=0;function e(){var e=this,t=+new Date-u,n=arguments;function r(){u=+new Date,a.apply(e,n)}s&&!l&&r(),l&&clearTimeout(l),s===c&&o<t?r():!0!==i&&(l=setTimeout(s?function(){l=c}:r,s===c?o-t:o))}return"boolean"!=typeof i&&(s=a,a=i,i=c),t.guid&&(e.guid=a.guid=a.guid||t.guid++),e},t.debounce=function(e,t,n){return n===c?r(e,t,!1):r(e,n,!1!==t)}}(this),function(i){"use strict";i.fn.fitVids=function(e){var t,n,o={customSelector:null,ignore:null};return document.getElementById("fit-vids-style")||(t=document.head||document.getElementsByTagName("head")[0],(n=document.createElement("div")).innerHTML='<p>x</p><style id="fit-vids-style">.fluid-width-video-wrapper{width:100%;position:relative;padding:0;}.fluid-width-video-wrapper iframe,.fluid-width-video-wrapper object,.fluid-width-video-wrapper embed {position:absolute;top:0;left:0;width:100%;height:100%;}</style>',t.appendChild(n.childNodes[1])),e&&i.extend(o,e),this.each(function(){var e=['iframe[src*="player.vimeo.com"]','iframe[src*="youtube.com"]','iframe[src*="youtube-nocookie.com"]','iframe[src*="kickstarter.com"][src*="video.html"]',"object","embed"],r=(o.customSelector&&e.push(o.customSelector),".fitvidsignore"),e=(o.ignore&&(r=r+", "+o.ignore),i(this).find(e.join(",")));(e=(e=e.not("object object")).not(r)).each(function(e){var t,n=i(this);0<n.parents(r).length||"embed"===this.tagName.toLowerCase()&&n.parent("object").length||n.parent(".fluid-width-video-wrapper").length||(n.css("height")||n.css("width")||!isNaN(n.attr("height"))&&!isNaN(n.attr("width"))||(n.attr("height",9),n.attr("width",16)),t=("object"===this.tagName.toLowerCase()||n.attr("height")&&!isNaN(parseInt(n.attr("height"),10))?parseInt(n.attr("height"),10):n.height())/(isNaN(parseInt(n.attr("width"),10))?n.width():parseInt(n.attr("width"),10)),n.attr("id")||n.attr("id","fitvid"+e),n.wrap('<div class="fluid-width-video-wrapper"></div>').parent(".fluid-width-video-wrapper").css("padding-top",100*t+"%"),n.removeAttr("height").removeAttr("width"))})})}}(window.jQuery||window.Zepto),$(function(){var n,r,e,o,t=$("nav.greedy-nav .greedy-nav__toggle"),i=$("nav.greedy-nav .visible-links"),a=$("nav.greedy-nav .hidden-links"),s=$("nav.greedy-nav"),l=$("nav.greedy-nav .site-logo"),u=$("nav.greedy-nav .site-logo img"),c=$("nav.greedy-nav .site-title"),d=$("nav.greedy-nav button.search__toggle");function f(){function t(e,t){r+=t,n+=1,o.push(r)}r=n=0,e=1e3,o=[],i.children().outerWidth(t),a.children().each(function(){var e;(e=(e=$(this)).clone()).css("visibility","hidden"),i.append(e),t(0,e.outerWidth()),e.remove()})}f();var p,h,m,g,v=$(window).width(),y=v<768?0:v<1024?1:v<1280?2:3;function b(){var e=(v=$(window).width())<768?0:v<1024?1:v<1280?2:3;e!==y&&f(),y=e,h=i.children().length,p=s.innerWidth()-(0!==l.length?l.outerWidth(!0):0)-c.outerWidth(!0)-(0!==d.length?d.outerWidth(!0):0)-(h!==o.length?t.outerWidth(!0):0),m=o[h-1],p<m?(i.children().last().prependTo(a),--h,b()):p+(h===o.length-1?t.outerWidth(!0):0)>o[h]&&(a.children().first().appendTo(i),h+=1,b()),t.attr("count",n-h),h===n?t.addClass("hidden"):t.removeClass("hidden")}$(window).resize(function(){b()}),t.on("click",function(){a.toggleClass("hidden"),$(this).toggleClass("close"),clearTimeout(g)}),a.on("click",function(){a.addClass("hidden"),t.removeClass("close")}).on("mouseleave",function(){g=setTimeout(function(){a.addClass("hidden"),$(".greedy-nav__toggle").removeClass("close")},e)}).on("mouseenter",function(){clearTimeout(g)}),0===u.length||u[0].complete||0!==u[0].naturalWidth?b():u.one("load error",b)}),function(e){"function"==typeof define&&define.amd?define(["jquery"],e):"object"==typeof exports?e(require("jquery")):e(window.jQuery||window.Zepto)}(function(u){function e(){}function c(e,t){h.ev.on("mfp"+e+T,t)}function d(e,t,n,r){var o=document.createElement("div");return o.className="mfp-"+e,n&&(o.innerHTML=n),r?t&&t.appendChild(o):(o=u(o),t&&o.appendTo(t)),o}function f(e,t){h.ev.triggerHandler("mfp"+e,t),h.st.callbacks&&(e=e.charAt(0).toLowerCase()+e.slice(1),h.st.callbacks[e])&&h.st.callbacks[e].apply(h,u.isArray(t)?t:[t])}function p(e){return e===n&&h.currTemplate.closeBtn||(h.currTemplate.closeBtn=u(h.st.closeMarkup.replace("%title%",h.st.tClose)),n=e),h.currTemplate.closeBtn}function i(){u.magnificPopup.instance||((h=new e).init(),u.magnificPopup.instance=h)}function a(){y&&(v.after(y.addClass(l)).detach(),y=null)}function o(){b&&u(document.body).removeClass(b)}function t(){o(),h.req&&h.req.abort()}var h,r,m,s,g,n,l,v,y,b,x="Close",P="BeforeClose",w="MarkupParse",C="Open",T=".mfp",E="mfp-ready",M="mfp-removing",S="mfp-prevent-close",k=!!window.jQuery,A=u(window),N=(u.magnificPopup={instance:null,proto:e.prototype={constructor:e,init:function(){var e=navigator.appVersion;h.isLowIE=h.isIE8=document.all&&!document.addEventListener,h.isAndroid=/android/gi.test(e),h.isIOS=/iphone|ipad|ipod/gi.test(e),h.supportsTransition=function(){var e=document.createElement("p").style,t=["ms","O","Moz","Webkit"];if(void 0!==e.transition)return!0;for(;t.length;)if(t.pop()+"Transition"in e)return!0;return!1}(),h.probablyMobile=h.isAndroid||h.isIOS||/(Opera Mini)|Kindle|webOS|BlackBerry|(Opera Mobi)|(Windows Phone)|IEMobile/i.test(navigator.userAgent),m=u(document),h.popupsCache={}},open:function(e){if(!1===e.isObj){h.items=e.items.toArray(),h.index=0;for(var t,n=e.items,r=0;r<n.length;r++)if((t=(t=n[r]).parsed?t.el[0]:t)===e.el[0]){h.index=r;break}}else h.items=u.isArray(e.items)?e.items:[e.items],h.index=e.index||0;if(!h.isOpen){h.types=[],g="",e.mainEl&&e.mainEl.length?h.ev=e.mainEl.eq(0):h.ev=m,e.key?(h.popupsCache[e.key]||(h.popupsCache[e.key]={}),h.currTemplate=h.popupsCache[e.key]):h.currTemplate={},h.st=u.extend(!0,{},u.magnificPopup.defaults,e),h.fixedContentPos="auto"===h.st.fixedContentPos?!h.probablyMobile:h.st.fixedContentPos,h.st.modal&&(h.st.closeOnContentClick=!1,h.st.closeOnBgClick=!1,h.st.showCloseBtn=!1,h.st.enableEscapeKey=!1),h.bgOverlay||(h.bgOverlay=d("bg").on("click"+T,function(){h.close()}),h.wrap=d("wrap").attr("tabindex",-1).on("click"+T,function(e){h._checkIfClose(e.target)&&h.close()}),h.container=d("container",h.wrap)),h.contentContainer=d("content"),h.st.preloader&&(h.preloader=d("preloader",h.container,h.st.tLoading));var o=u.magnificPopup.modules;for(r=0;r<o.length;r++){var i=(i=o[r]).charAt(0).toUpperCase()+i.slice(1);h["init"+i].call(h)}f("BeforeOpen"),h.st.showCloseBtn&&(h.st.closeBtnInside?(c(w,function(e,t,n,r){n.close_replaceWith=p(r.type)}),g+=" mfp-close-btn-in"):h.wrap.append(p())),h.st.alignTop&&(g+=" mfp-align-top"),h.fixedContentPos?h.wrap.css({overflow:h.st.overflowY,overflowX:"hidden",overflowY:h.st.overflowY}):h.wrap.css({top:A.scrollTop(),position:"absolute"}),!1!==h.st.fixedBgPos&&("auto"!==h.st.fixedBgPos||h.fixedContentPos)||h.bgOverlay.css({height:m.height(),position:"absolute"}),h.st.enableEscapeKey&&m.on("keyup"+T,function(e){27===e.keyCode&&h.close()}),A.on("resize"+T,function(){h.updateSize()}),h.st.closeOnContentClick||(g+=" mfp-auto-cursor"),g&&h.wrap.addClass(g);var a=h.wH=A.height(),s={},l=(h.fixedContentPos&&h._hasScrollBar(a)&&(l=h._getScrollbarSize())&&(s.marginRight=l),h.fixedContentPos&&(h.isIE7?u("body, html").css("overflow","hidden"):s.overflow="hidden"),h.st.mainClass);return h.isIE7&&(l+=" mfp-ie7"),l&&h._addClassToMFP(l),h.updateItemHTML(),f("BuildControls"),u("html").css(s),h.bgOverlay.add(h.wrap).prependTo(h.st.prependTo||u(document.body)),h._lastFocusedEl=document.activeElement,setTimeout(function(){h.content?(h._addClassToMFP(E),h._setFocus()):h.bgOverlay.addClass(E),m.on("focusin"+T,h._onFocusIn)},16),h.isOpen=!0,h.updateSize(a),f(C),e}h.updateItemHTML()},close:function(){h.isOpen&&(f(P),h.isOpen=!1,h.st.removalDelay&&!h.isLowIE&&h.supportsTransition?(h._addClassToMFP(M),setTimeout(function(){h._close()},h.st.removalDelay)):h._close())},_close:function(){f(x);var e=M+" "+E+" ";h.bgOverlay.detach(),h.wrap.detach(),h.container.empty(),h.st.mainClass&&(e+=h.st.mainClass+" "),h._removeClassFromMFP(e),h.fixedContentPos&&(e={marginRight:""},h.isIE7?u("body, html").css("overflow",""):e.overflow="",u("html").css(e)),m.off("keyup.mfp focusin"+T),h.ev.off(T),h.wrap.attr("class","mfp-wrap").removeAttr("style"),h.bgOverlay.attr("class","mfp-bg"),h.container.attr("class","mfp-container"),!h.st.showCloseBtn||h.st.closeBtnInside&&!0!==h.currTemplate[h.currItem.type]||h.currTemplate.closeBtn&&h.currTemplate.closeBtn.detach(),h.st.autoFocusLast&&h._lastFocusedEl&&u(h._lastFocusedEl).focus(),h.currItem=null,h.content=null,h.currTemplate=null,h.prevHeight=0,f("AfterClose")},updateSize:function(e){var t;h.isIOS?(t=document.documentElement.clientWidth/window.innerWidth,t=window.innerHeight*t,h.wrap.css("height",t),h.wH=t):h.wH=e||A.height(),h.fixedContentPos||h.wrap.css("height",h.wH),f("Resize")},updateItemHTML:function(){var e=h.items[h.index],t=(h.contentContainer.detach(),h.content&&h.content.detach(),(e=e.parsed?e:h.parseEl(h.index)).type),n=(f("BeforeChange",[h.currItem?h.currItem.type:"",t]),h.currItem=e,h.currTemplate[t]||(n=!!h.st[t]&&h.st[t].markup,f("FirstMarkupParse",n),h.currTemplate[t]=!n||u(n)),s&&s!==e.type&&h.container.removeClass("mfp-"+s+"-holder"),h["get"+t.charAt(0).toUpperCase()+t.slice(1)](e,h.currTemplate[t]));h.appendContent(n,t),e.preloaded=!0,f("Change",e),s=e.type,h.container.prepend(h.contentContainer),f("AfterChange")},appendContent:function(e,t){(h.content=e)?h.st.showCloseBtn&&h.st.closeBtnInside&&!0===h.currTemplate[t]?h.content.find(".mfp-close").length||h.content.append(p()):h.content=e:h.content="",f("BeforeAppend"),h.container.addClass("mfp-"+t+"-holder"),h.contentContainer.append(h.content)},parseEl:function(e){var t,n=h.items[e];if((n=n.tagName?{el:u(n)}:(t=n.type,{data:n,src:n.src})).el){for(var r=h.types,o=0;o<r.length;o++)if(n.el.hasClass("mfp-"+r[o])){t=r[o];break}n.src=n.el.attr("data-mfp-src"),n.src||(n.src=n.el.attr("href"))}return n.type=t||h.st.type||"inline",n.index=e,n.parsed=!0,h.items[e]=n,f("ElementParse",n),h.items[e]},addGroup:function(t,n){function e(e){e.mfpEl=this,h._openClick(e,t,n)}var r="click.magnificPopup";(n=n||{}).mainEl=t,n.items?(n.isObj=!0,t.off(r).on(r,e)):(n.isObj=!1,n.delegate?t.off(r).on(r,n.delegate,e):(n.items=t).off(r).on(r,e))},_openClick:function(e,t,n){var r=(void 0!==n.midClick?n:u.magnificPopup.defaults).midClick;if(r||!(2===e.which||e.ctrlKey||e.metaKey||e.altKey||e.shiftKey)){r=(void 0!==n.disableOn?n:u.magnificPopup.defaults).disableOn;if(r)if(u.isFunction(r)){if(!r.call(h))return!0}else if(A.width()<r)return!0;e.type&&(e.preventDefault(),h.isOpen)&&e.stopPropagation(),n.el=u(e.mfpEl),n.delegate&&(n.items=t.find(n.delegate)),h.open(n)}},updateStatus:function(e,t){var n;h.preloader&&(r!==e&&h.container.removeClass("mfp-s-"+r),n={status:e,text:t=t||"loading"!==e?t:h.st.tLoading},f("UpdateStatus",n),e=n.status,h.preloader.html(t=n.text),h.preloader.find("a").on("click",function(e){e.stopImmediatePropagation()}),h.container.addClass("mfp-s-"+e),r=e)},_checkIfClose:function(e){if(!u(e).hasClass(S)){var t=h.st.closeOnContentClick,n=h.st.closeOnBgClick;if(t&&n)return!0;if(!h.content||u(e).hasClass("mfp-close")||h.preloader&&e===h.preloader[0])return!0;if(e===h.content[0]||u.contains(h.content[0],e)){if(t)return!0}else if(n&&u.contains(document,e))return!0;return!1}},_addClassToMFP:function(e){h.bgOverlay.addClass(e),h.wrap.addClass(e)},_removeClassFromMFP:function(e){this.bgOverlay.removeClass(e),h.wrap.removeClass(e)},_hasScrollBar:function(e){return(h.isIE7?m.height():document.body.scrollHeight)>(e||A.height())},_setFocus:function(){(h.st.focus?h.content.find(h.st.focus).eq(0):h.wrap).focus()},_onFocusIn:function(e){if(e.target!==h.wrap[0]&&!u.contains(h.wrap[0],e.target))return h._setFocus(),!1},_parseMarkup:function(o,e,t){var i;t.data&&(e=u.extend(t.data,e)),f(w,[o,e,t]),u.each(e,function(e,t){if(void 0===t||!1===t)return!0;var n,r;1<(i=e.split("_")).length?0<(n=o.find(T+"-"+i[0])).length&&("replaceWith"===(r=i[1])?n[0]!==t[0]&&n.replaceWith(t):"img"===r?n.is("img")?n.attr("src",t):n.replaceWith(u("<img>").attr("src",t).attr("class",n.attr("class"))):n.attr(i[1],t)):o.find(T+"-"+e).html(t)})},_getScrollbarSize:function(){var e;return void 0===h.scrollbarSize&&((e=document.createElement("div")).style.cssText="width: 99px; height: 99px; overflow: scroll; position: absolute; top: -9999px;",document.body.appendChild(e),h.scrollbarSize=e.offsetWidth-e.clientWidth,document.body.removeChild(e)),h.scrollbarSize}},modules:[],open:function(e,t){return i(),(e=e?u.extend(!0,{},e):{}).isObj=!0,e.index=t||0,this.instance.open(e)},close:function(){return u.magnificPopup.instance&&u.magnificPopup.instance.close()},registerModule:function(e,t){t.options&&(u.magnificPopup.defaults[e]=t.options),u.extend(this.proto,t.proto),this.modules.push(e)},defaults:{disableOn:0,key:null,midClick:!1,mainClass:"",preloader:!0,focus:"",closeOnContentClick:!1,closeOnBgClick:!0,closeBtnInside:!0,showCloseBtn:!0,enableEscapeKey:!0,modal:!1,alignTop:!1,removalDelay:0,prependTo:null,fixedContentPos:"auto",fixedBgPos:"auto",overflowY:"auto",closeMarkup:'<button title="%title%" type="button" class="mfp-close">&#215;</button>',tClose:"Close (Esc)",tLoading:"Loading...",autoFocusLast:!0}},u.fn.magnificPopup=function(e){i();var t,n,r,o=u(this);return"string"==typeof e?"open"===e?(t=k?o.data("magnificPopup"):o[0].magnificPopup,n=parseInt(arguments[1],10)||0,r=t.items?t.items[n]:(r=o,(r=t.delegate?r.find(t.delegate):r).eq(n)),h._openClick({mfpEl:r},o,t)):h.isOpen&&h[e].apply(h,Array.prototype.slice.call(arguments,1)):(e=u.extend(!0,{},e),k?o.data("magnificPopup",e):o[0].magnificPopup=e,h.addGroup(o,e)),o},"inline"),j=(u.magnificPopup.registerModule(N,{options:{hiddenClass:"hide",markup:"",tNotFound:"Content not found"},proto:{initInline:function(){h.types.push(N),c(x+"."+N,function(){a()})},getInline:function(e,t){var n,r,o;return a(),e.src?(n=h.st.inline,(r=u(e.src)).length?((o=r[0].parentNode)&&o.tagName&&(v||(l=n.hiddenClass,v=d(l),l="mfp-"+l),y=r.after(v).detach().removeClass(l)),h.updateStatus("ready")):(h.updateStatus("error",n.tNotFound),r=u("<div>")),e.inlineElement=r):(h.updateStatus("ready"),h._parseMarkup(t,{},e),t)}}}),"ajax");u.magnificPopup.registerModule(j,{options:{settings:null,cursor:"mfp-ajax-cur",tError:'<a href="%url%">The content</a> could not be loaded.'},proto:{initAjax:function(){h.types.push(j),b=h.st.ajax.cursor,c(x+"."+j,t),c("BeforeChange."+j,t)},getAjax:function(r){b&&u(document.body).addClass(b),h.updateStatus("loading");var e=u.extend({url:r.src,success:function(e,t,n){e={data:e,xhr:n};f("ParseAjax",e),h.appendContent(u(e.data),j),r.finished=!0,o(),h._setFocus(),setTimeout(function(){h.wrap.addClass(E)},16),h.updateStatus("ready"),f("AjaxContentAdded")},error:function(){o(),r.finished=r.loadError=!0,h.updateStatus("error",h.st.ajax.tError.replace("%url%",r.src))}},h.st.ajax.settings);return h.req=u.ajax(e),""}}});var I;u.magnificPopup.registerModule("image",{options:{markup:'<div class="mfp-figure"><div class="mfp-close"></div><figure><div class="mfp-img"></div><figcaption><div class="mfp-bottom-bar"><div class="mfp-title"></div><div class="mfp-counter"></div></div></figcaption></figure></div>',cursor:"mfp-zoom-out-cur",titleSrc:"title",verticalFit:!0,tError:'<a href="%url%">The image</a> could not be loaded.'},proto:{initImage:function(){var e=h.st.image,t=".image";h.types.push("image"),c(C+t,function(){"image"===h.currItem.type&&e.cursor&&u(document.body).addClass(e.cursor)}),c(x+t,function(){e.cursor&&u(document.body).removeClass(e.cursor),A.off("resize"+T)}),c("Resize"+t,h.resizeImage),h.isLowIE&&c("AfterChange",h.resizeImage)},resizeImage:function(){var e,t=h.currItem;t&&t.img&&h.st.image.verticalFit&&(e=0,h.isLowIE&&(e=parseInt(t.img.css("padding-top"),10)+parseInt(t.img.css("padding-bottom"),10)),t.img.css("max-height",h.wH-e))},_onImageHasSize:function(e){e.img&&(e.hasSize=!0,I&&clearInterval(I),e.isCheckingImgSize=!1,f("ImageHasSize",e),e.imgHidden)&&(h.content&&h.content.removeClass("mfp-loading"),e.imgHidden=!1)},findImageSize:function(t){function n(e){I&&clearInterval(I),I=setInterval(function(){0<o.naturalWidth?h._onImageHasSize(t):(200<r&&clearInterval(I),3===++r?n(10):40===r?n(50):100===r&&n(500))},e)}var r=0,o=t.img[0];n(1)},getImage:function(e,t){function n(){e&&(e.img[0].complete?(e.img.off(".mfploader"),e===h.currItem&&(h._onImageHasSize(e),h.updateStatus("ready")),e.hasSize=!0,e.loaded=!0,f("ImageLoadComplete")):++i<200?setTimeout(n,100):r())}function r(){e&&(e.img.off(".mfploader"),e===h.currItem&&(h._onImageHasSize(e),h.updateStatus("error",a.tError.replace("%url%",e.src))),e.hasSize=!0,e.loaded=!0,e.loadError=!0)}var o,i=0,a=h.st.image,s=t.find(".mfp-img");return s.length&&((o=document.createElement("img")).className="mfp-img",e.el&&e.el.find("img").length&&(o.alt=e.el.find("img").attr("alt")),e.img=u(o).on("load.mfploader",n).on("error.mfploader",r),o.src=e.src,s.is("img")&&(e.img=e.img.clone()),0<(o=e.img[0]).naturalWidth?e.hasSize=!0:o.width||(e.hasSize=!1)),h._parseMarkup(t,{title:function(e){if(e.data&&void 0!==e.data.title)return e.data.title;var t=h.st.image.titleSrc;if(t){if(u.isFunction(t))return t.call(h,e);if(e.el)return e.el.attr(t)||""}return""}(e),img_replaceWith:e.img},e),h.resizeImage(),e.hasSize?(I&&clearInterval(I),e.loadError?(t.addClass("mfp-loading"),h.updateStatus("error",a.tError.replace("%url%",e.src))):(t.removeClass("mfp-loading"),h.updateStatus("ready"))):(h.updateStatus("loading"),e.loading=!0,e.hasSize||(e.imgHidden=!0,t.addClass("mfp-loading"),h.findImageSize(e))),t}}});function L(e){var t;h.currTemplate[q]&&(t=h.currTemplate[q].find("iframe")).length&&(e||(t[0].src="//about:blank"),h.isIE8)&&t.css("display",e?"block":"none")}function D(e){var t=h.items.length;return t-1<e?e-t:e<0?t+e:e}function _(e,t,n){return e.replace(/%curr%/gi,t+1).replace(/%total%/gi,n)}u.magnificPopup.registerModule("zoom",{options:{enabled:!1,easing:"ease-in-out",duration:300,opener:function(e){return e.is("img")?e:e.find("img")}},proto:{initZoom:function(){var e,t,n,r,o,i,a=h.st.zoom,s=".zoom";a.enabled&&h.supportsTransition&&(t=a.duration,n=function(e){var e=e.clone().removeAttr("style").removeAttr("class").addClass("mfp-animated-image"),t="all "+a.duration/1e3+"s "+a.easing,n={position:"fixed",zIndex:9999,left:0,top:0,"-webkit-backface-visibility":"hidden"},r="transition";return n["-webkit-"+r]=n["-moz-"+r]=n["-o-"+r]=n[r]=t,e.css(n),e},r=function(){h.content.css("visibility","visible")},c("BuildControls"+s,function(){h._allowZoom()&&(clearTimeout(o),h.content.css("visibility","hidden"),(e=h._getItemToZoom())?((i=n(e)).css(h._getOffset()),h.wrap.append(i),o=setTimeout(function(){i.css(h._getOffset(!0)),o=setTimeout(function(){r(),setTimeout(function(){i.remove(),e=i=null,f("ZoomAnimationEnded")},16)},t)},16)):r())}),c(P+s,function(){if(h._allowZoom()){if(clearTimeout(o),h.st.removalDelay=t,!e){if(!(e=h._getItemToZoom()))return;i=n(e)}i.css(h._getOffset(!0)),h.wrap.append(i),h.content.css("visibility","hidden"),setTimeout(function(){i.css(h._getOffset())},16)}}),c(x+s,function(){h._allowZoom()&&(r(),i&&i.remove(),e=null)}))},_allowZoom:function(){return"image"===h.currItem.type},_getItemToZoom:function(){return!!h.currItem.hasSize&&h.currItem.img},_getOffset:function(e){var e=e?h.currItem.img:h.st.zoom.opener(h.currItem.el||h.currItem),t=e.offset(),n=parseInt(e.css("padding-top"),10),r=parseInt(e.css("padding-bottom"),10),e=(t.top-=u(window).scrollTop()-n,{width:e.width(),height:(k?e.innerHeight():e[0].offsetHeight)-r-n});return(O=void 0===O?void 0!==document.createElement("p").style.MozTransform:O)?e["-moz-transform"]=e.transform="translate("+t.left+"px,"+t.top+"px)":(e.left=t.left,e.top=t.top),e}}});var O,q="iframe",H=(u.magnificPopup.registerModule(q,{options:{markup:'<div class="mfp-iframe-scaler"><div class="mfp-close"></div><iframe class="mfp-iframe" src="//about:blank" frameborder="0" allowfullscreen></iframe></div>',srcAction:"iframe_src",patterns:{youtube:{index:"youtube.com",id:"v=",src:"//www.youtube.com/embed/%id%?autoplay=1"},vimeo:{index:"vimeo.com/",id:"/",src:"//player.vimeo.com/video/%id%?autoplay=1"},gmaps:{index:"//maps.google.",src:"%id%&output=embed"}}},proto:{initIframe:function(){h.types.push(q),c("BeforeChange",function(e,t,n){t!==n&&(t===q?L():n===q&&L(!0))}),c(x+"."+q,function(){L()})},getIframe:function(e,t){var n=e.src,r=h.st.iframe,o=(u.each(r.patterns,function(){if(-1<n.indexOf(this.index))return this.id&&(n="string"==typeof this.id?n.substr(n.lastIndexOf(this.id)+this.id.length,n.length):this.id.call(this,n)),n=this.src.replace("%id%",n),!1}),{});return r.srcAction&&(o[r.srcAction]=n),h._parseMarkup(t,o,e),h.updateStatus("ready"),t}}}),u.magnificPopup.registerModule("gallery",{options:{enabled:!1,arrowMarkup:'<button title="%title%" type="button" class="mfp-arrow mfp-arrow-%dir%"></button>',preload:[0,2],navigateByImgClick:!0,arrows:!0,tPrev:"Previous (Left arrow key)",tNext:"Next (Right arrow key)",tCounter:"%curr% of %total%"},proto:{initGallery:function(){var i=h.st.gallery,e=".mfp-gallery";if(h.direction=!0,!i||!i.enabled)return!1;g+=" mfp-gallery",c(C+e,function(){i.navigateByImgClick&&h.wrap.on("click"+e,".mfp-img",function(){if(1<h.items.length)return h.next(),!1}),m.on("keydown"+e,function(e){37===e.keyCode?h.prev():39===e.keyCode&&h.next()})}),c("UpdateStatus"+e,function(e,t){t.text&&(t.text=_(t.text,h.currItem.index,h.items.length))}),c(w+e,function(e,t,n,r){var o=h.items.length;n.counter=1<o?_(i.tCounter,r.index,o):""}),c("BuildControls"+e,function(){var e,t;1<h.items.length&&i.arrows&&!h.arrowLeft&&(t=i.arrowMarkup,e=h.arrowLeft=u(t.replace(/%title%/gi,i.tPrev).replace(/%dir%/gi,"left")).addClass(S),t=h.arrowRight=u(t.replace(/%title%/gi,i.tNext).replace(/%dir%/gi,"right")).addClass(S),e.click(function(){h.prev()}),t.click(function(){h.next()}),h.container.append(e.add(t)))}),c("Change"+e,function(){h._preloadTimeout&&clearTimeout(h._preloadTimeout),h._preloadTimeout=setTimeout(function(){h.preloadNearbyImages(),h._preloadTimeout=null},16)}),c(x+e,function(){m.off(e),h.wrap.off("click"+e),h.arrowRight=h.arrowLeft=null})},next:function(){h.direction=!0,h.index=D(h.index+1),h.updateItemHTML()},prev:function(){h.direction=!1,h.index=D(h.index-1),h.updateItemHTML()},goTo:function(e){h.direction=e>=h.index,h.index=e,h.updateItemHTML()},preloadNearbyImages:function(){for(var e=h.st.gallery.preload,t=Math.min(e[0],h.items.length),n=Math.min(e[1],h.items.length),r=1;r<=(h.direction?n:t);r++)h._preloadItem(h.index+r);for(r=1;r<=(h.direction?t:n);r++)h._preloadItem(h.index-r)},_preloadItem:function(e){var t;e=D(e),h.items[e].preloaded||((t=h.items[e]).parsed||(t=h.parseEl(e)),f("LazyLoad",t),"image"===t.type&&(t.img=u('<img class="mfp-img" />').on("load.mfploader",function(){t.hasSize=!0}).on("error.mfploader",function(){t.hasSize=!0,t.loadError=!0,f("LazyLoadError",t)}).attr("src",t.src)),t.preloaded=!0)}}}),"retina");u.magnificPopup.registerModule(H,{options:{replaceSrc:function(e){return e.src.replace(/\.\w+$/,function(e){return"@2x"+e})},ratio:1},proto:{initRetina:function(){var n,r;1<window.devicePixelRatio&&(n=h.st.retina,r=n.ratio,1<(r=isNaN(r)?r():r))&&(c("ImageHasSize."+H,function(e,t){t.img.css({"max-width":t.img[0].naturalWidth/r,width:"100%"})}),c("ElementParse."+H,function(e,t){t.src=n.replaceSrc(t,r)}))}}}),i()}),function(e,t){"function"==typeof define&&define.amd?define([],function(){return t(e)}):"object"==typeof exports?module.exports=t(e):e.SmoothScroll=t(e)}("undefined"!=typeof global?global:"undefined"!=typeof window?window:this,function(w){"use strict";function C(){var n={};return Array.prototype.forEach.call(arguments,function(e){for(var t in e){if(!e.hasOwnProperty(t))return;n[t]=e[t]}}),n}function i(e){"#"===e.charAt(0)&&(e=e.substr(1));for(var t,n=String(e),r=n.length,o=-1,i="",a=n.charCodeAt(0);++o<r;){if(0===(t=n.charCodeAt(o)))throw new InvalidCharacterError("Invalid character: the input contains U+0000.");1<=t&&t<=31||127==t||0===o&&48<=t&&t<=57||1===o&&48<=t&&t<=57&&45===a?i+="\\"+t.toString(16)+" ":i+=128<=t||45===t||95===t||48<=t&&t<=57||65<=t&&t<=90||97<=t&&t<=122?n.charAt(o):"\\"+n.charAt(o)}return"#"+i}function T(e,t,n,r){t.emitEvents&&"function"==typeof w.CustomEvent&&(t=new CustomEvent(e,{bubbles:!0,detail:{anchor:n,toggle:r}}),document.dispatchEvent(t))}var E={ignore:"[data-scroll-ignore]",header:null,topOnEmptyHash:!0,speed:500,speedAsDuration:!1,durationMax:null,durationMin:null,clip:!0,offset:0,easing:"easeInOutCubic",customEasing:null,updateURL:!0,popstate:!0,emitEvents:!0},S=function(e){return parseInt(w.getComputedStyle(e).height,10)},k=function(){return Math.max(document.body.scrollHeight,document.documentElement.scrollHeight,document.body.offsetHeight,document.documentElement.offsetHeight,document.body.clientHeight,document.documentElement.clientHeight)};return function(r,e){function t(e){if(!e.defaultPrevented&&!(0!==e.button||e.metaKey||e.ctrlKey||e.shiftKey)&&"closest"in e.target&&(o=e.target.closest(r))&&"a"===o.tagName.toLowerCase()&&!e.target.closest(v.ignore)&&o.hostname===w.location.hostname&&o.pathname===w.location.pathname&&/#/.test(o.href)){var t,n;try{n=i(decodeURIComponent(o.hash))}catch(e){n=i(o.hash)}if("#"===n){if(!v.topOnEmptyHash)return;t=document.documentElement}else t=document.querySelector(n);(t=t||"#top"!==n?t:document.documentElement)&&(e.preventDefault(),n=v,history.replaceState&&n.updateURL&&!history.state&&(e=(e=w.location.hash)||"",history.replaceState({smoothScroll:JSON.stringify(n),anchor:e||w.pageYOffset},document.title,e||w.location.href)),x.animateScroll(t,o))}}function n(e){var t;null===history.state||!history.state.smoothScroll||history.state.smoothScroll!==JSON.stringify(v)||"string"==typeof(t=history.state.anchor)&&t&&!(t=document.querySelector(i(history.state.anchor)))||x.animateScroll(t,null,{updateURL:!1})}var v,o,y,b,x={cancelScroll:function(e){cancelAnimationFrame(b),b=null,e||T("scrollCancel",v)}};x.animateScroll=function(r,o,e){x.cancelScroll();var i,a,s,l,u,c,d,f,p,h,t,m=C(v||E,e||{}),g="[object Number]"===Object.prototype.toString.call(r),e=g||!r.tagName?null:r;(g||e)&&(i=w.pageYOffset,m.header&&!y&&(y=document.querySelector(m.header)),t=(t=y)?S(t)+t.offsetTop:0,a=g?r:function(e,t,n,r){var o=0;if(e.offsetParent)for(;o+=e.offsetTop,e=e.offsetParent;);return o=Math.max(o-t-n,0),o=r?Math.min(o,k()-w.innerHeight):o}(e,t,parseInt("function"==typeof m.offset?m.offset(r,o):m.offset,10),m.clip),s=a-i,l=k(),u=0,c=function(e,t){e=t.speedAsDuration?t.speed:Math.abs(e/1e3*t.speed);return t.durationMax&&e>t.durationMax?t.durationMax:t.durationMin&&e<t.durationMin?t.durationMin:parseInt(e,10)}(s,m),p=function(e,t){var n=w.pageYOffset;if(e==t||n==t||(i<t&&w.innerHeight+n)>=l)return x.cancelScroll(!0),e=t,n=g,0===(t=r)&&document.body.focus(),n||(t.focus(),document.activeElement!==t&&(t.setAttribute("tabindex","-1"),t.focus(),t.style.outline="none"),w.scrollTo(0,e)),T("scrollStop",m,r,o),!(b=d=null)},h=function(e){var t,n,r;u+=e-(d=d||e),f=i+s*(n=1<(f=0===c?0:u/c)?1:f,"easeInQuad"===(t=m).easing&&(r=n*n),"easeOutQuad"===t.easing&&(r=n*(2-n)),"easeInOutQuad"===t.easing&&(r=n<.5?2*n*n:(4-2*n)*n-1),"easeInCubic"===t.easing&&(r=n*n*n),"easeOutCubic"===t.easing&&(r=--n*n*n+1),"easeInOutCubic"===t.easing&&(r=n<.5?4*n*n*n:(n-1)*(2*n-2)*(2*n-2)+1),"easeInQuart"===t.easing&&(r=n*n*n*n),"easeOutQuart"===t.easing&&(r=1- --n*n*n*n),"easeInOutQuart"===t.easing&&(r=n<.5?8*n*n*n*n:1-8*--n*n*n*n),"easeInQuint"===t.easing&&(r=n*n*n*n*n),"easeOutQuint"===t.easing&&(r=1+--n*n*n*n*n),"easeInOutQuint"===t.easing&&(r=n<.5?16*n*n*n*n*n:1+16*--n*n*n*n*n),(r=t.customEasing?t.customEasing(n):r)||n),w.scrollTo(0,Math.floor(f)),p(f,a)||(b=w.requestAnimationFrame(h),d=e)},0===w.pageYOffset&&w.scrollTo(0,0),e=r,t=m,g||history.pushState&&t.updateURL&&history.pushState({smoothScroll:JSON.stringify(t),anchor:e.id},document.title,e===document.documentElement?"#top":"#"+e.id),"matchMedia"in w&&w.matchMedia("(prefers-reduced-motion)").matches?w.scrollTo(0,Math.floor(a)):(T("scrollStart",m,r,o),x.cancelScroll(!0),w.requestAnimationFrame(h)))},x.destroy=function(){v&&(document.removeEventListener("click",t,!1),w.removeEventListener("popstate",n,!1),x.cancelScroll(),b=y=o=v=null)};if("querySelector"in document&&"addEventListener"in w&&"requestAnimationFrame"in w&&"closest"in w.Element.prototype)return x.destroy(),v=C(E,e||{}),y=v.header?document.querySelector(v.header):null,document.addEventListener("click",t,!1),v.updateURL&&v.popstate&&w.addEventListener("popstate",n,!1),x;throw"Smooth Scroll: This browser does not support the required JavaScript methods and browser APIs."}}),$(document).ready(function(){$("#main").fitVids(),$(".author__urls-wrapper button").on("click",function(){$(".author__urls").toggleClass("is--visible"),$(".author__urls-wrapper").find("button").toggleClass("open")}),$(document).keyup(function(e){27===e.keyCode&&$(".initial-content").hasClass("is--hidden")&&($(".search-content").toggleClass("is--visible"),$(".initial-content").toggleClass("is--hidden"))}),$(".search__toggle").on("click",function(){$(".search-content").toggleClass("is--visible"),$(".initial-content").toggleClass("is--hidden"),setTimeout(function(){$(".search-content input").focus()},400)});function o(e){for(var t=e.target,n=t.nextElementSibling;n&&"code"!==n.tagName.toLowerCase();)n=n.nextElementSibling;if(n)return e=function(e){if(document.queryCommandEnabled("copy")&&navigator.clipboard)return navigator.clipboard.writeText(e).then(()=>!0,()=>console.error("Failed to copy text to clipboard: "+e)),!0;var t="rtl"===document.documentElement.getAttribute("dir"),n=document.createElement("textarea"),t=(n.className="clipboard-helper",n.style[t?"right":"left"]="-9999px",window.pageYOffset||document.documentElement.scrollTop),t=(n.style.top=t+"px",n.setAttribute("readonly",""),n.value=e,document.body.appendChild(n),!0);try{n.select(),t=document.execCommand("copy")}catch(e){t=!1}return n.parentNode.removeChild(n),t}((n=(e=n.querySelector("td.code, td.rouge-code"))?e:n).innerText),t.focus(),e&&(null!==t.interval&&clearInterval(t.interval),t.classList.add("copied"),t.interval=setTimeout(function(){t.classList.remove("copied"),clearInterval(t.interval),t.interval=null},1500)),e;throw console.warn(t),new Error("No code block found for this button.")}var e;new SmoothScroll('a[href*="#"]',{offset:20,speed:400,speedAsDuration:!0,durationMax:500}),0<$("nav.toc").length&&new Gumshoe("nav.toc a",{navClass:"active",contentClass:"active",nested:!1,nestedClass:"active",offset:20,reflow:!0,events:!0}),window.chrome&&document.addEventListener("gumshoeActivate",function(e){var e=e.target,t={behavior:"auto",block:"nearest",inline:"start"},n=document.querySelector("aside.sidebar__right.sticky");n&&"sticky"===window.getComputedStyle(n).position&&(e.parentElement.classList.contains("toc__menu")&&e==e.parentElement.firstElementChild?document.querySelector("nav.toc header"):e).scrollIntoView(t)}),$("a[href$='.jpg'],a[href$='.jpeg'],a[href$='.JPG'],a[href$='.png'],a[href$='.gif'],a[href$='.webp']").has("> img").addClass("image-popup"),$(".image-popup").magnificPopup({type:"image",tLoading:"Loading image #%curr%...",gallery:{enabled:!0,navigateByImgClick:!0,preload:[0,1]},image:{tError:'<a href="%url%">Image #%curr%</a> could not be loaded.'},removalDelay:500,mainClass:"mfp-zoom-in",callbacks:{beforeOpen:function(){this.st.image.markup=this.st.image.markup.replace("mfp-figure","mfp-figure mfp-with-anim")}},closeOnContentClick:!0,midClick:!0}),(e=document.querySelector(".page__content"))&&e.querySelectorAll("h1, h2, h3, h4, h5, h6").forEach(function(e){var t,n=e.getAttribute("id");n&&((t=document.createElement("a")).className="header-link",t.href="#"+n,t.innerHTML='<span class="sr-only">Permalink</span><i class="fas fa-link"></i>',t.title="Permalink",e.appendChild(t))});window.enable_copy_code_button&&document.querySelectorAll(".page__content pre.highlight > code").forEach(function(e,t,n){var r,e=e.parentElement;"code"===e.firstElementChild.tagName.toLowerCase()&&((r=document.createElement("button")).title="Copy to clipboard",r.className="clipboard-copy-button",r.innerHTML='<span class="sr-only">Copy code</span><i class="far fa-fw fa-copy"></i><i class="fas fa-fw fa-check copied"></i>',r.addEventListener("click",o),e.prepend(r))})});
\ No newline at end of file
diff --git a/assets/js/main.min.js.map b/assets/js/main.min.js.map
new file mode 100644
index 000000000000..19426d858742
--- /dev/null
+++ b/assets/js/main.min.js.map
@@ -0,0 +1 @@
+{"version":3,"sources":["assets/js/vendor/jquery/jquery-3.6.0.js","assets/js/plugins/gumshoe.js","assets/js/plugins/jquery.ba-throttle-debounce.js","assets/js/plugins/jquery.fitvids.js","assets/js/plugins/jquery.greedy-navigation.js","assets/js/plugins/jquery.magnific-popup.js","assets/js/plugins/smooth-scroll.js","assets/js/_main.js"],"names":["global","factory","module","exports","document","w","Error","window","this","noGlobal","isFunction","obj","nodeType","item","isWindow","arr","getProto","Object","getPrototypeOf","slice","flat","array","call","concat","apply","push","indexOf","class2type","toString","hasOwn","hasOwnProperty","fnToString","ObjectFunctionString","support","preservedScriptAttributes","type","src","nonce","noModule","DOMEval","code","node","doc","i","val","script","createElement","text","getAttribute","setAttribute","head","appendChild","parentNode","removeChild","toType","version","jQuery","selector","context","fn","init","isArrayLike","length","prototype","jquery","constructor","toArray","get","num","pushStack","elems","ret","merge","prevObject","each","callback","map","elem","arguments","first","eq","last","even","grep","_elem","odd","len","j","end","sort","splice","extend","options","name","copy","copyIsArray","clone","target","deep","isPlainObject","Array","isArray","undefined","expando","Math","random","replace","isReady","error","msg","noop","proto","Ctor","isEmptyObject","globalEval","makeArray","results","inArray","second","invert","matches","callbackExpect","arg","value","guid","Symbol","iterator","split","_i","toLowerCase","dir","until","matched","truncate","is","siblings","n","nextSibling","Sizzle","funescape","escape","nonHex","high","String","fromCharCode","fcssescape","ch","asCodePoint","charCodeAt","unloadHandler","setDocument","Expr","getText","isXML","tokenize","compile","select","outermostContext","sortInput","hasDuplicate","docElem","documentIsHTML","rbuggyQSA","rbuggyMatches","contains","Date","preferredDoc","dirruns","done","classCache","createCache","tokenCache","compilerCache","nonnativeSelectorCache","sortOrder","a","b","pop","pushNative","list","booleans","whitespace","identifier","attributes","pseudos","rwhitespace","RegExp","rtrim","rcomma","rcombinators","rdescend","rpseudo","ridentifier","matchExpr","ID","CLASS","TAG","ATTR","PSEUDO","CHILD","bool","needsContext","rhtml","rinputs","rheader","rnative","rquickExpr","rsibling","runescape","rcssescape","inDisabledFieldset","addCombinator","disabled","nodeName","next","childNodes","e","els","seed","m","nid","match","groups","newSelector","newContext","ownerDocument","exec","getElementById","id","getElementsByTagName","getElementsByClassName","qsa","test","testContext","scope","toSelector","join","querySelectorAll","qsaError","removeAttribute","keys","cache","key","cacheLength","shift","markFunction","assert","el","addHandle","attrs","handler","attrHandle","siblingCheck","cur","diff","sourceIndex","createDisabledPseudo","isDisabled","createPositionalPseudo","argument","matchIndexes","namespace","namespaceURI","documentElement","subWindow","defaultView","top","addEventListener","attachEvent","className","createComment","getById","getElementsByName","filter","attrId","find","getAttributeNode","tag","tmp","input","innerHTML","matchesSelector","webkitMatchesSelector","mozMatchesSelector","oMatchesSelector","msMatchesSelector","disconnectedMatch","hasCompare","compareDocumentPosition","adown","bup","compare","sortDetached","aup","ap","bp","unshift","expr","elements","attr","specified","sel","uniqueSort","duplicates","detectDuplicates","sortStable","textContent","firstChild","nodeValue","selectors","createPseudo","relative",">"," ","+","~","preFilter","excess","unquoted","nodeNameSelector","pattern","operator","check","result","what","_argument","simple","forward","ofType","_context","xml","uniqueCache","outerCache","nodeIndex","start","parent","useCache","lastChild","uniqueID","pseudo","args","setFilters","idx","not","matcher","unmatched","has","lang","elemLang","hash","location","root","focus","activeElement","hasFocus","href","tabIndex","enabled","checked","selected","selectedIndex","empty","header","button","_matchIndexes","lt","gt","radio","checkbox","file","password","image","submit","reset","tokens","combinator","base","skip","checkNonElements","doneName","oldCache","newCache","elementMatcher","matchers","condense","newUnmatched","mapped","setMatcher","postFilter","postFinder","postSelector","temp","preMap","postMap","preexisting","contexts","matcherIn","matcherOut","matcherFromGroupMatchers","elementMatchers","setMatchers","superMatcher","outermost","matchedCount","setMatched","contextBackup","byElement","dirrunsUnique","bySet","filters","parseOnly","soFar","preFilters","cached","matcherFromTokens","checkContext","leadingRelative","implicitRelative","matchContext","matchAnyContext","token","compiled","_name","defaultValue","rneedsContext","unique","isXMLDoc","escapeSelector","rsingleTag","winnow","qualifier","self","rootjQuery","rparentsprev","ready","parseHTML","guaranteedUnique","children","contents","prev","sibling","targets","l","closest","index","prevAll","add","addBack","parents","parentsUntil","nextAll","nextUntil","prevUntil","contentDocument","content","reverse","rnothtmlwhite","Identity","v","Thrower","ex","adoptValue","resolve","reject","noValue","method","promise","fail","then","Callbacks","object","_","flag","fire","locked","once","fired","firing","queue","firingIndex","memory","stopOnFalse","remove","disable","lock","fireWith","Deferred","func","tuples","state","always","deferred","catch","pipe","fns","newDefer","tuple","returned","progress","notify","onFulfilled","onRejected","onProgress","maxDepth","depth","special","mightThrow","that","TypeError","notifyWith","resolveWith","process","exceptionHook","stackTrace","rejectWith","getStackHook","setTimeout","stateString","when","singleValue","updateFunc","resolveContexts","resolveValues","remaining","primary","rerrorNames","readyList","stack","console","warn","message","readyException","completed","removeEventListener","readyWait","wait","readyState","doScroll","access","chainable","emptyGet","raw","bulk","_key","rmsPrefix","rdashAlpha","fcamelCase","_all","letter","toUpperCase","camelCase","string","acceptData","owner","Data","uid","defineProperty","configurable","set","data","prop","hasData","dataPriv","dataUser","rbrace","rmultiDash","dataAttr","JSON","parse","removeData","_data","_removeData","dequeue","startLength","hooks","_queueHooks","stop","setter","clearQueue","count","defer","isHiddenWithinTree","style","display","isAttached","css","pnum","source","rcssNum","cssExpand","composed","getRootNode","adjustCSS","valueParts","tween","adjusted","scale","maxIterations","currentValue","initial","unit","cssNumber","initialInUnit","defaultDisplayMap","showHide","show","values","body","hide","toggle","rcheckableType","rtagName","rscriptType","wrapMap","div","createDocumentFragment","checkClone","cloneNode","noCloneChecked","option","thead","col","tr","td","_default","getAll","setGlobalEval","refElements","tbody","tfoot","colgroup","caption","th","optgroup","buildFragment","scripts","selection","ignored","wrap","attached","fragment","nodes","htmlPrefilter","createTextNode","rtypenamespace","returnTrue","returnFalse","expectSync","err","on","types","one","origFn","event","off","leverageNative","notAsync","saved","isTrigger","delegateType","stopPropagation","stopImmediatePropagation","preventDefault","trigger","Event","handleObjIn","eventHandle","events","t","handlers","namespaces","origType","elemData","create","handle","triggered","dispatch","bindType","handleObj","delegateCount","setup","mappedTypes","origCount","teardown","removeEvent","nativeEvent","handlerQueue","fix","delegateTarget","preDispatch","isPropagationStopped","currentTarget","isImmediatePropagationStopped","rnamespace","postDispatch","matchedHandlers","matchedSelectors","addProp","hook","enumerable","originalEvent","writable","load","noBubble","click","beforeunload","returnValue","props","isDefaultPrevented","defaultPrevented","relatedTarget","timeStamp","now","isSimulated","altKey","bubbles","cancelable","changedTouches","ctrlKey","detail","eventPhase","metaKey","pageX","pageY","shiftKey","view","char","charCode","keyCode","buttons","clientX","clientY","offsetX","offsetY","pointerId","pointerType","screenX","screenY","targetTouches","toElement","touches","which","blur","mouseenter","mouseleave","pointerenter","pointerleave","orig","related","rnoInnerhtml","rchecked","rcleanScript","manipulationTarget","disableScript","restoreScript","cloneCopyEvent","dest","udataOld","udataCur","domManip","collection","hasScripts","iNoClone","valueIsFunction","html","_evalUrl","keepData","cleanData","dataAndEvents","deepDataAndEvents","srcElements","destElements","inPage","detach","append","prepend","insertBefore","before","after","replaceWith","replaceChild","appendTo","prependTo","insertAfter","replaceAll","original","insert","getStyles","opener","getComputedStyle","swap","old","pixelPositionVal","boxSizingReliableVal","scrollboxSizeVal","pixelBoxStylesVal","reliableTrDimensionsVal","reliableMarginLeftVal","container","rnumnonpx","rboxStyle","computeStyleTests","divStyle","cssText","roundPixelMeasures","marginLeft","right","width","position","offsetWidth","measure","round","parseFloat","curCSS","computed","maxWidth","getPropertyValue","pixelBoxStyles","minWidth","addGetHookIf","conditionFn","hookFn","backgroundClip","clearCloneStyle","boxSizingReliable","pixelPosition","reliableMarginLeft","scrollboxSize","reliableTrDimensions","table","trStyle","trChild","height","parseInt","borderTopWidth","borderBottomWidth","offsetHeight","cssPrefixes","emptyStyle","vendorProps","finalPropName","final","cssProps","capName","rdisplayswap","rcustomProp","cssShow","visibility","cssNormalTransform","letterSpacing","fontWeight","setPositiveNumber","subtract","max","boxModelAdjustment","dimension","box","isBorderBox","styles","computedVal","extra","delta","ceil","getWidthOrHeight","valueIsBorderBox","offsetProp","getClientRects","Tween","easing","cssHooks","opacity","animationIterationCount","columnCount","fillOpacity","flexGrow","flexShrink","gridArea","gridColumn","gridColumnEnd","gridColumnStart","gridRow","gridRowEnd","gridRowStart","lineHeight","order","orphans","widows","zIndex","zoom","origName","isCustomProp","setProperty","isFinite","getBoundingClientRect","scrollboxSizeBuggy","left","margin","padding","border","prefix","suffix","expand","expanded","parts","propHooks","run","percent","eased","duration","pos","step","fx","scrollTop","scrollLeft","linear","p","swing","cos","PI","fxNow","inProgress","opt","rfxtypes","rrun","schedule","hidden","requestAnimationFrame","interval","tick","createFxNow","genFx","includeWidth","createTween","animation","Animation","tweeners","properties","stopped","prefilters","currentTime","startTime","tweens","opts","specialEasing","originalProperties","originalOptions","gotoEnd","bind","complete","timer","anim","*","tweener","oldfire","propTween","restoreDisplay","isBox","dataShow","unqueued","overflow","overflowX","overflowY","prefilter","speed","speeds","fadeTo","to","animate","doAnimation","optall","finish","stopQueue","timers","cssFn","slideDown","slideUp","slideToggle","fadeIn","fadeOut","fadeToggle","slow","fast","delay","time","timeout","clearTimeout","checkOn","optSelected","radioValue","boolHook","rfocusable","removeAttr","nType","attrHooks","attrNames","getter","lowercaseName","rclickable","stripAndCollapse","getClass","classesToArray","removeProp","propFix","tabindex","for","class","addClass","classes","clazz","finalValue","curValue","removeClass","toggleClass","stateVal","isValidValue","classNames","hasClass","stopPropagationCallback","rreturn","rfocusMorph","valHooks","optionSet","focusin","onlyHandlers","bubbleType","ontype","lastElement","eventPath","parentWindow","simulate","triggerHandler","attaches","rquery","rbracket","parseXML","parserErrorElem","DOMParser","parseFromString","rCRLF","rsubmitterTypes","rsubmittable","param","traditional","valueOrFunction","s","encodeURIComponent","buildParams","serialize","serializeArray","r20","rhash","rantiCache","rheaders","rnoContent","rprotocol","transports","allTypes","originAnchor","addToPrefiltersOrTransports","structure","dataTypeExpression","dataType","dataTypes","inspectPrefiltersOrTransports","jqXHR","inspected","seekingTransport","inspect","prefilterOrFactory","dataTypeOrTransport","ajaxExtend","flatOptions","ajaxSettings","active","lastModified","etag","url","isLocal","protocol","processData","async","contentType","accepts","json","responseFields","converters","* text","text html","text json","text xml","ajaxSetup","settings","ajaxPrefilter","ajaxTransport","ajax","transport","cacheURL","responseHeadersString","responseHeaders","timeoutTimer","fireGlobals","callbackContext","globalEventContext","completeDeferred","statusCode","requestHeaders","requestHeadersNames","strAbort","getResponseHeader","getAllResponseHeaders","setRequestHeader","overrideMimeType","mimeType","status","abort","statusText","finalText","crossDomain","urlAnchor","host","hasContent","uncached","ifModified","headers","beforeSend","success","send","nativeStatusText","responses","response","isSuccess","ct","finalDataType","firstDataType","conv2","current","conv","dataFilter","throws","modified","getJSON","getScript","text script","wrapAll","firstElementChild","wrapInner","htmlIsFunction","unwrap","visible","xhr","XMLHttpRequest","xhrSuccessStatus","0","1223","xhrSupported","oldCallbacks","cors","errorCallback","open","username","xhrFields","onload","onerror","onabort","ontimeout","onreadystatechange","responseType","responseText","binary","scriptAttrs","charset","scriptCharset","evt","rjsonp","jsonp","jsonpCallback","originalSettings","callbackName","overwritten","responseContainer","jsonProp","createHTMLDocument","implementation","keepScripts","parsed","params","animated","offset","setOffset","curCSSTop","curTop","curOffset","curCSSLeft","curElem","curLeft","curPosition","using","rect","win","pageYOffset","pageXOffset","offsetParent","parentOffset","scrollTo","Height","Width","","defaultExtra","funcName","unbind","delegate","undelegate","hover","fnOver","fnOut","_jQuery","proxy","holdReady","hold","parseJSON","isNumeric","isNaN","trim","define","amd","_$","$","noConflict","Gumshoe","sortContents","item1","item2","getOffsetTop","isAtBottom","innerHeight","scrollHeight","clientHeight","deactivate","items","li","nav","classList","navClass","contentClass","deactivateNested","emitEvent","link","defaults","nested","nestedClass","reflow","CustomEvent","dispatchEvent","offsetTop","isInView","bottom","bounds","useLastItem","activateNested","scrollHandler","cancelAnimationFrame","publicAPIs","detect","resizeHandler","navItems","forEach","decodeURIComponent","substr","destroy","merged","jq_throttle","Cowboy","throttle","no_trailing","debounce_mode","timeout_id","last_exec","wrapper","elapsed","debounce","at_begin","fitVids","customSelector","ignore","ignoreList","$allVideos","aspectRatio","$this","tagName","Zepto","numOfItems","totalSpace","closingTime","breakWidths","$btn","$vlinks","$hlinks","$nav","$logo","$logoImg","$title","$search","measureLinks","addWidth","outerWidth","availableSpace","numOfVisibleItems","requiredSpace","winWidth","lastBreakpoint","curBreakpoint","innerWidth","resize","naturalWidth","require","MagnificPopup","_mfpOn","f","mfp","ev","EVENT_NS","_getEl","_mfpTrigger","st","callbacks","charAt","_getCloseBtn","_currPopupType","currTemplate","closeBtn","closeMarkup","tClose","_checkInstance","magnificPopup","instance","_putInlineElementsBack","_lastInlineElement","_inlinePlaceholder","_hiddenClass","_removeAjaxCursor","_ajaxCur","_destroyAjaxRequest","req","_prevStatus","_document","_prevContentType","_wrapClasses","CLOSE_EVENT","BEFORE_CLOSE_EVENT","MARKUP_PARSE_EVENT","OPEN_EVENT","READY_CLASS","REMOVING_CLASS","PREVENT_CLOSE_CLASS","_isJQ","_window","INLINE_NS","appVersion","navigator","isLowIE","isIE8","all","isAndroid","isIOS","supportsTransition","probablyMobile","userAgent","popupsCache","isObj","isOpen","mainEl","fixedContentPos","modal","closeOnContentClick","closeOnBgClick","showCloseBtn","enableEscapeKey","bgOverlay","close","_checkIfClose","contentContainer","preloader","tLoading","modules","closeBtnInside","template","close_replaceWith","alignTop","fixedBgPos","updateSize","windowHeight","wH","windowStyles","classesToadd","_hasScrollBar","_getScrollbarSize","marginRight","isIE7","mainClass","_addClassToMFP","updateItemHTML","_lastFocusedEl","_setFocus","_onFocusIn","removalDelay","_close","classesToRemove","_removeClassFromMFP","currItem","autoFocusLast","prevHeight","winHeight","zoomLevel","clientWidth","parseEl","newContent","markup","appendContent","preloaded","addGroup","eHandler","mfpEl","_openClick","eName","midClick","disableOn","updateStatus","closeOnContent","closeOnBg","cName","_parseMarkup","scrollDiv","scrollbarSize","registerModule","itemOpts","jqEl","AJAX_NS","hiddenClass","tNotFound","initInline","getInline","inlineSt","inline","inlineElement","cursor","tError","initAjax","getAjax","textStatus","finished","loadError","_imgInterval","titleSrc","verticalFit","initImage","imgSt","ns","resizeImage","decr","img","_onImageHasSize","hasSize","clearInterval","isCheckingImgSize","imgHidden","findImageSize","mfpSetInterval","setInterval","counter","getImage","onLoadComplete","loaded","guard","onLoadError","alt","title","img_replaceWith","loading","_fixIframeBugs","isShowing","IFRAME_NS","_getLoopedId","numSlides","_replaceCurrTotal","curr","total","element","initZoom","getElToAnimate","showMainContent","openTimeout","animatedImg","zoomSt","newImg","transition","cssObj","-webkit-backface-visibility","_allowZoom","_getItemToZoom","_getOffset","isLarge","paddingTop","paddingBottom","hasMozTransform","MozTransform","RETINA_NS","srcAction","patterns","youtube","vimeo","gmaps","initIframe","prevType","newType","getIframe","embedSrc","iframeSt","iframe","dataObj","lastIndexOf","arrowMarkup","preload","navigateByImgClick","arrows","tPrev","tNext","tCounter","initGallery","gSt","gallery","direction","arrowLeft","arrowRight","_preloadTimeout","preloadNearbyImages","goTo","newIndex","preloadBefore","min","preloadAfter","_preloadItem","replaceSrc","ratio","initRetina","devicePixelRatio","retina","max-width","SmoothScroll","escapeCharacters","codeUnit","firstCodeUnit","InvalidCharacterError","anchor","emitEvents","topOnEmptyHash","speedAsDuration","durationMax","durationMin","clip","customEasing","updateURL","popstate","getHeight","getDocumentHeight","clickHandler","hostname","pathname","querySelector","history","replaceState","smoothScroll","stringify","animateScroll","popstateHandler","fixedHeader","animationInterval","cancelScroll","noEvent","startLocation","endLocation","distance","documentHeight","timeLapsed","stopAnimateScroll","loopAnimateScroll","_settings","isNum","anchorElem","headerHeight","abs","currentLocation","outline","timestamp","percentage","floor","pushState","matchMedia","Element","keyup","copyButtonEventListener","thisButton","codeBlock","nextElementSibling","queryCommandEnabled","clipboard","writeText","isRTL","textarea","yPosition","execCommand","realCodeBlock","innerText","pageContentElement","chrome","scrollOptions","behavior","block","tocElement","parentElement","scrollIntoView","beforeOpen","enable_copy_code_button","parentList","copyButton"],"mappings":"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"}
\ No newline at end of file
diff --git a/assets/js/plugins/jquery.greedy-navigation.js b/assets/js/plugins/jquery.greedy-navigation.js
index ca053cf28232..a12ec3ee6394 100644
--- a/assets/js/plugins/jquery.greedy-navigation.js
+++ b/assets/js/plugins/jquery.greedy-navigation.js
@@ -1,7 +1,7 @@
 /*
-GreedyNav.js - http://lukejacksonn.com/actuate
+GreedyNav.js - https://github.com/lukejacksonn/GreedyNav
 Licensed under the MIT license - http://opensource.org/licenses/MIT
-Copyright (c) 2015 Luke Jackson
+Copyright (c) 2015 Luke Jackson http://lukejacksonn.com
 */
 
 $(function() {
@@ -9,26 +9,69 @@ $(function() {
   var $btn = $("nav.greedy-nav .greedy-nav__toggle");
   var $vlinks = $("nav.greedy-nav .visible-links");
   var $hlinks = $("nav.greedy-nav .hidden-links");
+  var $nav = $("nav.greedy-nav");
+  var $logo = $('nav.greedy-nav .site-logo');
+  var $logoImg = $('nav.greedy-nav .site-logo img');
+  var $title = $("nav.greedy-nav .site-title");
+  var $search = $('nav.greedy-nav button.search__toggle');
 
-  var numOfItems = 0;
-  var totalSpace = 0;
-  var closingTime = 1000;
-  var breakWidths = [];
+  var numOfItems, totalSpace, closingTime, breakWidths;
 
+  // This function measures both hidden and visible links and sets the navbar breakpoints
+  // This is called the first time the script runs and everytime the "check()" function detects a change of window width that reached a different CSS width breakpoint, which affects the size of navbar Items
+  // Please note that "CSS width breakpoints" (which are only 4) !== "navbar breakpoints" (which are as many as the number of items on the navbar)
+  function measureLinks(){
+    numOfItems = 0;
+    totalSpace = 0;
+    closingTime = 1000;
+    breakWidths = [];
+
+    // Adds the width of a navItem in order to create breakpoints for the navbar
+    function addWidth(i, w) {
+      totalSpace += w;
+      numOfItems += 1;
+      breakWidths.push(totalSpace);
+    }
+
+    // Measures the width of hidden links by making a temporary clone of them and positioning under visible links
+    function hiddenWidth(obj){
+      var clone = obj.clone();
+      clone.css("visibility","hidden");
+      $vlinks.append(clone);
+      addWidth(0, clone.outerWidth());
+      clone.remove();
+    }
+    // Measure both visible and hidden links widths
+    $vlinks.children().outerWidth(addWidth);
+    $hlinks.children().each(function(){hiddenWidth($(this))});
+  }
   // Get initial state
-  $vlinks.children().outerWidth(function(i, w) {
-    totalSpace += w;
-    numOfItems += 1;
-    breakWidths.push(totalSpace);
-  });
+  measureLinks();
+
+  var winWidth = $( window ).width();
+  // Set the last measured CSS width breakpoint: 0: <768px, 1: <1024px, 2: < 1280px, 3: >= 1280px.
+  var lastBreakpoint = winWidth < 768 ? 0 : winWidth < 1024 ? 1 : winWidth < 1280 ? 2 : 3;
 
   var availableSpace, numOfVisibleItems, requiredSpace, timer;
 
   function check() {
 
+    winWidth = $( window ).width();
+    // Set the current CSS width breakpoint: 0: <768px, 1: <1024px, 2: < 1280px, 3: >= 1280px.
+    var curBreakpoint = winWidth < 768 ? 0 : winWidth < 1024 ? 1 : winWidth < 1280 ? 2 : 3;
+    // If current breakpoint is different from last measured breakpoint, measureLinks again
+    if(curBreakpoint !== lastBreakpoint) measureLinks();
+    // Set the last measured CSS width breakpoint with the current breakpoint
+    lastBreakpoint = curBreakpoint;
+
     // Get instant state
-    availableSpace = $vlinks.width() - 10;
     numOfVisibleItems = $vlinks.children().length;
+    // Decrease the width of visible elements from the nav innerWidth to find out the available space for navItems
+    availableSpace = /* nav */ $nav.innerWidth()
+                   - /* logo */ ($logo.length !== 0 ? $logo.outerWidth(true) : 0)
+                   - /* title */ $title.outerWidth(true)
+                   - /* search */ ($search.length !== 0 ? $search.outerWidth(true) : 0)
+                   - /* toggle */ (numOfVisibleItems !== breakWidths.length ? $btn.outerWidth(true) : 0);
     requiredSpace = breakWidths[numOfVisibleItems - 1];
 
     // There is not enought space
@@ -36,8 +79,8 @@ $(function() {
       $vlinks.children().last().prependTo($hlinks);
       numOfVisibleItems -= 1;
       check();
-      // There is more than enough space
-    } else if (availableSpace > breakWidths[numOfVisibleItems]) {
+      // There is more than enough space. If only one element is hidden, add the toggle width to the available space
+    } else if (availableSpace + (numOfVisibleItems === breakWidths.length - 1?$btn.outerWidth(true):0) > breakWidths[numOfVisibleItems]) {
       $hlinks.children().first().appendTo($vlinks);
       numOfVisibleItems += 1;
       check();
@@ -56,19 +99,34 @@ $(function() {
 
   $btn.on('click', function() {
     $hlinks.toggleClass('hidden');
+    $(this).toggleClass('close');
     clearTimeout(timer);
   });
 
-  $hlinks.on('mouseleave', function() {
+  $hlinks.on("click", function () {
+    // Hide the hidden links & remove the overlay when one is clicked.
+    $hlinks.addClass("hidden");
+    $btn.removeClass("close");
+  }).on('mouseleave', function() {
     // Mouse has left, start the timer
     timer = setTimeout(function() {
       $hlinks.addClass('hidden');
+      $('.greedy-nav__toggle').removeClass('close');
     }, closingTime);
   }).on('mouseenter', function() {
     // Mouse is back, cancel the timer
     clearTimeout(timer);
   })
 
-  check();
+  // check if page has a logo
+  if($logoImg.length !== 0){
+    // check if logo is not loaded
+    if(!($logoImg[0].complete || $logoImg[0].naturalWidth !== 0)){
+      // if logo is not loaded wait for logo to load or fail to check
+      $logoImg.one("load error", check);
+    // if logo is already loaded just check
+    } else check();
+  // if page does not have a logo just check
+  } else check();
 
-});
\ No newline at end of file
+});
diff --git a/assets/js/vendor/jquery/jquery-3.4.1.js b/assets/js/vendor/jquery/jquery-3.6.0.js
similarity index 90%
rename from assets/js/vendor/jquery/jquery-3.4.1.js
rename to assets/js/vendor/jquery/jquery-3.6.0.js
index 773ad95c56f8..fc6c299b73e7 100644
--- a/assets/js/vendor/jquery/jquery-3.4.1.js
+++ b/assets/js/vendor/jquery/jquery-3.6.0.js
@@ -1,15 +1,15 @@
 /*!
- * jQuery JavaScript Library v3.4.1
+ * jQuery JavaScript Library v3.6.0
  * https://jquery.com/
  *
  * Includes Sizzle.js
  * https://sizzlejs.com/
  *
- * Copyright JS Foundation and other contributors
+ * Copyright OpenJS Foundation and other contributors
  * Released under the MIT license
  * https://jquery.org/license
  *
- * Date: 2019-05-01T21:04Z
+ * Date: 2021-03-02T17:08Z
  */
 ( function( global, factory ) {
 
@@ -47,13 +47,16 @@
 
 var arr = [];
 
-var document = window.document;
-
 var getProto = Object.getPrototypeOf;
 
 var slice = arr.slice;
 
-var concat = arr.concat;
+var flat = arr.flat ? function( array ) {
+	return arr.flat.call( array );
+} : function( array ) {
+	return arr.concat.apply( [], array );
+};
+
 
 var push = arr.push;
 
@@ -73,12 +76,16 @@ var support = {};
 
 var isFunction = function isFunction( obj ) {
 
-      // Support: Chrome <=57, Firefox <=52
-      // In some browsers, typeof returns "function" for HTML <object> elements
-      // (i.e., `typeof document.createElement( "object" ) === "function"`).
-      // We don't want to classify *any* DOM node as a function.
-      return typeof obj === "function" && typeof obj.nodeType !== "number";
-  };
+		// Support: Chrome <=57, Firefox <=52
+		// In some browsers, typeof returns "function" for HTML <object> elements
+		// (i.e., `typeof document.createElement( "object" ) === "function"`).
+		// We don't want to classify *any* DOM node as a function.
+		// Support: QtWeb <=3.8.5, WebKit <=534.34, wkhtmltopdf tool <=0.12.5
+		// Plus for old WebKit, typeof returns "function" for HTML collections
+		// (e.g., `typeof document.getElementsByTagName("div") === "function"`). (gh-4756)
+		return typeof obj === "function" && typeof obj.nodeType !== "number" &&
+			typeof obj.item !== "function";
+	};
 
 
 var isWindow = function isWindow( obj ) {
@@ -86,6 +93,8 @@ var isWindow = function isWindow( obj ) {
 	};
 
 
+var document = window.document;
+
 
 
 	var preservedScriptAttributes = {
@@ -142,7 +151,7 @@ function toType( obj ) {
 
 
 var
-	version = "3.4.1",
+	version = "3.6.0",
 
 	// Define a local copy of jQuery
 	jQuery = function( selector, context ) {
@@ -150,11 +159,7 @@ var
 		// The jQuery object is actually just the init constructor 'enhanced'
 		// Need init if jQuery is called (just allow error to be thrown if not included)
 		return new jQuery.fn.init( selector, context );
-	},
-
-	// Support: Android <=4.0 only
-	// Make sure we trim BOM and NBSP
-	rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;
+	};
 
 jQuery.fn = jQuery.prototype = {
 
@@ -220,6 +225,18 @@ jQuery.fn = jQuery.prototype = {
 		return this.eq( -1 );
 	},
 
+	even: function() {
+		return this.pushStack( jQuery.grep( this, function( _elem, i ) {
+			return ( i + 1 ) % 2;
+		} ) );
+	},
+
+	odd: function() {
+		return this.pushStack( jQuery.grep( this, function( _elem, i ) {
+			return i % 2;
+		} ) );
+	},
+
 	eq: function( i ) {
 		var len = this.length,
 			j = +i + ( i < 0 ? len : 0 );
@@ -353,9 +370,10 @@ jQuery.extend( {
 		return true;
 	},
 
-	// Evaluates a script in a global context
-	globalEval: function( code, options ) {
-		DOMEval( code, { nonce: options && options.nonce } );
+	// Evaluates a script in a provided context; falls back to the global one
+	// if not specified.
+	globalEval: function( code, options, doc ) {
+		DOMEval( code, { nonce: options && options.nonce }, doc );
 	},
 
 	each: function( obj, callback ) {
@@ -379,13 +397,6 @@ jQuery.extend( {
 		return obj;
 	},
 
-	// Support: Android <=4.0 only
-	trim: function( text ) {
-		return text == null ?
-			"" :
-			( text + "" ).replace( rtrim, "" );
-	},
-
 	// results is for internal usage only
 	makeArray: function( arr, results ) {
 		var ret = results || [];
@@ -394,7 +405,7 @@ jQuery.extend( {
 			if ( isArrayLike( Object( arr ) ) ) {
 				jQuery.merge( ret,
 					typeof arr === "string" ?
-					[ arr ] : arr
+						[ arr ] : arr
 				);
 			} else {
 				push.call( ret, arr );
@@ -472,7 +483,7 @@ jQuery.extend( {
 		}
 
 		// Flatten any nested arrays
-		return concat.apply( [], ret );
+		return flat( ret );
 	},
 
 	// A global GUID counter for objects
@@ -489,9 +500,9 @@ if ( typeof Symbol === "function" ) {
 
 // Populate the class2type map
 jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ),
-function( i, name ) {
-	class2type[ "[object " + name + "]" ] = name.toLowerCase();
-} );
+	function( _i, name ) {
+		class2type[ "[object " + name + "]" ] = name.toLowerCase();
+	} );
 
 function isArrayLike( obj ) {
 
@@ -511,17 +522,16 @@ function isArrayLike( obj ) {
 }
 var Sizzle =
 /*!
- * Sizzle CSS Selector Engine v2.3.4
+ * Sizzle CSS Selector Engine v2.3.6
  * https://sizzlejs.com/
  *
  * Copyright JS Foundation and other contributors
  * Released under the MIT license
  * https://js.foundation/
  *
- * Date: 2019-04-08
+ * Date: 2021-02-16
  */
-(function( window ) {
-
+( function( window ) {
 var i,
 	support,
 	Expr,
@@ -561,59 +571,70 @@ var i,
 	},
 
 	// Instance methods
-	hasOwn = ({}).hasOwnProperty,
+	hasOwn = ( {} ).hasOwnProperty,
 	arr = [],
 	pop = arr.pop,
-	push_native = arr.push,
+	pushNative = arr.push,
 	push = arr.push,
 	slice = arr.slice,
+
 	// Use a stripped-down indexOf as it's faster than native
 	// https://jsperf.com/thor-indexof-vs-for/5
 	indexOf = function( list, elem ) {
 		var i = 0,
 			len = list.length;
 		for ( ; i < len; i++ ) {
-			if ( list[i] === elem ) {
+			if ( list[ i ] === elem ) {
 				return i;
 			}
 		}
 		return -1;
 	},
 
-	booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",
+	booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|" +
+		"ismap|loop|multiple|open|readonly|required|scoped",
 
 	// Regular expressions
 
 	// http://www.w3.org/TR/css3-selectors/#whitespace
 	whitespace = "[\\x20\\t\\r\\n\\f]",
 
-	// http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier
-	identifier = "(?:\\\\.|[\\w-]|[^\0-\\xa0])+",
+	// https://www.w3.org/TR/css-syntax-3/#ident-token-diagram
+	identifier = "(?:\\\\[\\da-fA-F]{1,6}" + whitespace +
+		"?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+",
 
 	// Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors
 	attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace +
+
 		// Operator (capture 2)
 		"*([*^$|!~]?=)" + whitespace +
-		// "Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]"
-		"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + whitespace +
-		"*\\]",
+
+		// "Attribute values must be CSS identifiers [capture 5]
+		// or strings [capture 3 or capture 4]"
+		"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" +
+		whitespace + "*\\]",
 
 	pseudos = ":(" + identifier + ")(?:\\((" +
+
 		// To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:
 		// 1. quoted (capture 3; capture 4 or capture 5)
 		"('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" +
+
 		// 2. simple (capture 6)
 		"((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" +
+
 		// 3. anything else (capture 2)
 		".*" +
 		")\\)|)",
 
 	// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter
 	rwhitespace = new RegExp( whitespace + "+", "g" ),
-	rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ),
+	rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" +
+		whitespace + "+$", "g" ),
 
 	rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ),
-	rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + "*" ),
+	rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace +
+		"*" ),
 	rdescend = new RegExp( whitespace + "|>" ),
 
 	rpseudo = new RegExp( pseudos ),
@@ -625,14 +646,16 @@ var i,
 		"TAG": new RegExp( "^(" + identifier + "|[*])" ),
 		"ATTR": new RegExp( "^" + attributes ),
 		"PSEUDO": new RegExp( "^" + pseudos ),
-		"CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace +
-			"*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace +
-			"*(\\d+)|))" + whitespace + "*\\)|)", "i" ),
+		"CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" +
+			whitespace + "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" +
+			whitespace + "*(\\d+)|))" + whitespace + "*\\)|)", "i" ),
 		"bool": new RegExp( "^(?:" + booleans + ")$", "i" ),
+
 		// For use in libraries implementing .is()
 		// We use this for POS matching in `select`
-		"needsContext": new RegExp( "^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" +
-			whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" )
+		"needsContext": new RegExp( "^" + whitespace +
+			"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + whitespace +
+			"*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" )
 	},
 
 	rhtml = /HTML$/i,
@@ -648,18 +671,21 @@ var i,
 
 	// CSS escapes
 	// http://www.w3.org/TR/CSS21/syndata.html#escaped-characters
-	runescape = new RegExp( "\\\\([\\da-f]{1,6}" + whitespace + "?|(" + whitespace + ")|.)", "ig" ),
-	funescape = function( _, escaped, escapedWhitespace ) {
-		var high = "0x" + escaped - 0x10000;
-		// NaN means non-codepoint
-		// Support: Firefox<24
-		// Workaround erroneous numeric interpretation of +"0x"
-		return high !== high || escapedWhitespace ?
-			escaped :
+	runescape = new RegExp( "\\\\[\\da-fA-F]{1,6}" + whitespace + "?|\\\\([^\\r\\n\\f])", "g" ),
+	funescape = function( escape, nonHex ) {
+		var high = "0x" + escape.slice( 1 ) - 0x10000;
+
+		return nonHex ?
+
+			// Strip the backslash prefix from a non-hex escape sequence
+			nonHex :
+
+			// Replace a hexadecimal escape sequence with the encoded Unicode code point
+			// Support: IE <=11+
+			// For values outside the Basic Multilingual Plane (BMP), manually construct a
+			// surrogate pair
 			high < 0 ?
-				// BMP codepoint
 				String.fromCharCode( high + 0x10000 ) :
-				// Supplemental Plane codepoint (surrogate pair)
 				String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );
 	},
 
@@ -675,7 +701,8 @@ var i,
 			}
 
 			// Control characters and (dependent upon position) numbers get escaped as code points
-			return ch.slice( 0, -1 ) + "\\" + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + " ";
+			return ch.slice( 0, -1 ) + "\\" +
+				ch.charCodeAt( ch.length - 1 ).toString( 16 ) + " ";
 		}
 
 		// Other potentially-special ASCII characters get backslash-escaped
@@ -700,18 +727,20 @@ var i,
 // Optimize for push.apply( _, NodeList )
 try {
 	push.apply(
-		(arr = slice.call( preferredDoc.childNodes )),
+		( arr = slice.call( preferredDoc.childNodes ) ),
 		preferredDoc.childNodes
 	);
+
 	// Support: Android<4.0
 	// Detect silently failing push.apply
+	// eslint-disable-next-line no-unused-expressions
 	arr[ preferredDoc.childNodes.length ].nodeType;
 } catch ( e ) {
 	push = { apply: arr.length ?
 
 		// Leverage slice if possible
 		function( target, els ) {
-			push_native.apply( target, slice.call(els) );
+			pushNative.apply( target, slice.call( els ) );
 		} :
 
 		// Support: IE<9
@@ -719,8 +748,9 @@ try {
 		function( target, els ) {
 			var j = target.length,
 				i = 0;
+
 			// Can't trust NodeList.length
-			while ( (target[j++] = els[i++]) ) {}
+			while ( ( target[ j++ ] = els[ i++ ] ) ) {}
 			target.length = j - 1;
 		}
 	};
@@ -744,24 +774,21 @@ function Sizzle( selector, context, results, seed ) {
 
 	// Try to shortcut find operations (as opposed to filters) in HTML documents
 	if ( !seed ) {
-
-		if ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) {
-			setDocument( context );
-		}
+		setDocument( context );
 		context = context || document;
 
 		if ( documentIsHTML ) {
 
 			// If the selector is sufficiently simple, try using a "get*By*" DOM method
 			// (excepting DocumentFragment context, where the methods don't exist)
-			if ( nodeType !== 11 && (match = rquickExpr.exec( selector )) ) {
+			if ( nodeType !== 11 && ( match = rquickExpr.exec( selector ) ) ) {
 
 				// ID selector
-				if ( (m = match[1]) ) {
+				if ( ( m = match[ 1 ] ) ) {
 
 					// Document context
 					if ( nodeType === 9 ) {
-						if ( (elem = context.getElementById( m )) ) {
+						if ( ( elem = context.getElementById( m ) ) ) {
 
 							// Support: IE, Opera, Webkit
 							// TODO: identify versions
@@ -780,7 +807,7 @@ function Sizzle( selector, context, results, seed ) {
 						// Support: IE, Opera, Webkit
 						// TODO: identify versions
 						// getElementById can match elements by name instead of ID
-						if ( newContext && (elem = newContext.getElementById( m )) &&
+						if ( newContext && ( elem = newContext.getElementById( m ) ) &&
 							contains( context, elem ) &&
 							elem.id === m ) {
 
@@ -790,12 +817,12 @@ function Sizzle( selector, context, results, seed ) {
 					}
 
 				// Type selector
-				} else if ( match[2] ) {
+				} else if ( match[ 2 ] ) {
 					push.apply( results, context.getElementsByTagName( selector ) );
 					return results;
 
 				// Class selector
-				} else if ( (m = match[3]) && support.getElementsByClassName &&
+				} else if ( ( m = match[ 3 ] ) && support.getElementsByClassName &&
 					context.getElementsByClassName ) {
 
 					push.apply( results, context.getElementsByClassName( m ) );
@@ -806,11 +833,11 @@ function Sizzle( selector, context, results, seed ) {
 			// Take advantage of querySelectorAll
 			if ( support.qsa &&
 				!nonnativeSelectorCache[ selector + " " ] &&
-				(!rbuggyQSA || !rbuggyQSA.test( selector )) &&
+				( !rbuggyQSA || !rbuggyQSA.test( selector ) ) &&
 
 				// Support: IE 8 only
 				// Exclude object elements
-				(nodeType !== 1 || context.nodeName.toLowerCase() !== "object") ) {
+				( nodeType !== 1 || context.nodeName.toLowerCase() !== "object" ) ) {
 
 				newSelector = selector;
 				newContext = context;
@@ -819,27 +846,36 @@ function Sizzle( selector, context, results, seed ) {
 				// descendant combinators, which is not what we want.
 				// In such cases, we work around the behavior by prefixing every selector in the
 				// list with an ID selector referencing the scope context.
+				// The technique has to be used as well when a leading combinator is used
+				// as such selectors are not recognized by querySelectorAll.
 				// Thanks to Andrew Dupont for this technique.
-				if ( nodeType === 1 && rdescend.test( selector ) ) {
+				if ( nodeType === 1 &&
+					( rdescend.test( selector ) || rcombinators.test( selector ) ) ) {
 
-					// Capture the context ID, setting it first if necessary
-					if ( (nid = context.getAttribute( "id" )) ) {
-						nid = nid.replace( rcssescape, fcssescape );
-					} else {
-						context.setAttribute( "id", (nid = expando) );
+					// Expand context for sibling selectors
+					newContext = rsibling.test( selector ) && testContext( context.parentNode ) ||
+						context;
+
+					// We can use :scope instead of the ID hack if the browser
+					// supports it & if we're not changing the context.
+					if ( newContext !== context || !support.scope ) {
+
+						// Capture the context ID, setting it first if necessary
+						if ( ( nid = context.getAttribute( "id" ) ) ) {
+							nid = nid.replace( rcssescape, fcssescape );
+						} else {
+							context.setAttribute( "id", ( nid = expando ) );
+						}
 					}
 
 					// Prefix every selector in the list
 					groups = tokenize( selector );
 					i = groups.length;
 					while ( i-- ) {
-						groups[i] = "#" + nid + " " + toSelector( groups[i] );
+						groups[ i ] = ( nid ? "#" + nid : ":scope" ) + " " +
+							toSelector( groups[ i ] );
 					}
 					newSelector = groups.join( "," );
-
-					// Expand context for sibling selectors
-					newContext = rsibling.test( selector ) && testContext( context.parentNode ) ||
-						context;
 				}
 
 				try {
@@ -872,12 +908,14 @@ function createCache() {
 	var keys = [];
 
 	function cache( key, value ) {
+
 		// Use (key + " ") to avoid collision with native prototype properties (see Issue #157)
 		if ( keys.push( key + " " ) > Expr.cacheLength ) {
+
 			// Only keep the most recent entries
 			delete cache[ keys.shift() ];
 		}
-		return (cache[ key + " " ] = value);
+		return ( cache[ key + " " ] = value );
 	}
 	return cache;
 }
@@ -896,17 +934,19 @@ function markFunction( fn ) {
  * @param {Function} fn Passed the created element and returns a boolean result
  */
 function assert( fn ) {
-	var el = document.createElement("fieldset");
+	var el = document.createElement( "fieldset" );
 
 	try {
 		return !!fn( el );
-	} catch (e) {
+	} catch ( e ) {
 		return false;
 	} finally {
+
 		// Remove from its parent by default
 		if ( el.parentNode ) {
 			el.parentNode.removeChild( el );
 		}
+
 		// release memory in IE
 		el = null;
 	}
@@ -918,11 +958,11 @@ function assert( fn ) {
  * @param {Function} handler The method that will be applied
  */
 function addHandle( attrs, handler ) {
-	var arr = attrs.split("|"),
+	var arr = attrs.split( "|" ),
 		i = arr.length;
 
 	while ( i-- ) {
-		Expr.attrHandle[ arr[i] ] = handler;
+		Expr.attrHandle[ arr[ i ] ] = handler;
 	}
 }
 
@@ -944,7 +984,7 @@ function siblingCheck( a, b ) {
 
 	// Check if b follows a
 	if ( cur ) {
-		while ( (cur = cur.nextSibling) ) {
+		while ( ( cur = cur.nextSibling ) ) {
 			if ( cur === b ) {
 				return -1;
 			}
@@ -972,7 +1012,7 @@ function createInputPseudo( type ) {
 function createButtonPseudo( type ) {
 	return function( elem ) {
 		var name = elem.nodeName.toLowerCase();
-		return (name === "input" || name === "button") && elem.type === type;
+		return ( name === "input" || name === "button" ) && elem.type === type;
 	};
 }
 
@@ -1015,7 +1055,7 @@ function createDisabledPseudo( disabled ) {
 					// Where there is no isDisabled, check manually
 					/* jshint -W018 */
 					elem.isDisabled !== !disabled &&
-						inDisabledFieldset( elem ) === disabled;
+					inDisabledFieldset( elem ) === disabled;
 			}
 
 			return elem.disabled === disabled;
@@ -1037,21 +1077,21 @@ function createDisabledPseudo( disabled ) {
  * @param {Function} fn
  */
 function createPositionalPseudo( fn ) {
-	return markFunction(function( argument ) {
+	return markFunction( function( argument ) {
 		argument = +argument;
-		return markFunction(function( seed, matches ) {
+		return markFunction( function( seed, matches ) {
 			var j,
 				matchIndexes = fn( [], seed.length, argument ),
 				i = matchIndexes.length;
 
 			// Match elements found at the specified indexes
 			while ( i-- ) {
-				if ( seed[ (j = matchIndexes[i]) ] ) {
-					seed[j] = !(matches[j] = seed[j]);
+				if ( seed[ ( j = matchIndexes[ i ] ) ] ) {
+					seed[ j ] = !( matches[ j ] = seed[ j ] );
 				}
 			}
-		});
-	});
+		} );
+	} );
 }
 
 /**
@@ -1072,8 +1112,8 @@ support = Sizzle.support = {};
  * @returns {Boolean} True iff elem is a non-HTML XML node
  */
 isXML = Sizzle.isXML = function( elem ) {
-	var namespace = elem.namespaceURI,
-		docElem = (elem.ownerDocument || elem).documentElement;
+	var namespace = elem && elem.namespaceURI,
+		docElem = elem && ( elem.ownerDocument || elem ).documentElement;
 
 	// Support: IE <=8
 	// Assume HTML when documentElement doesn't yet exist, such as inside loading iframes
@@ -1091,7 +1131,11 @@ setDocument = Sizzle.setDocument = function( node ) {
 		doc = node ? node.ownerDocument || node : preferredDoc;
 
 	// Return early if doc is invalid or already selected
-	if ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) {
+	// Support: IE 11+, Edge 17 - 18+
+	// IE/Edge sometimes throw a "Permission denied" error when strict-comparing
+	// two documents; shallow comparisons work.
+	// eslint-disable-next-line eqeqeq
+	if ( doc == document || doc.nodeType !== 9 || !doc.documentElement ) {
 		return document;
 	}
 
@@ -1100,10 +1144,14 @@ setDocument = Sizzle.setDocument = function( node ) {
 	docElem = document.documentElement;
 	documentIsHTML = !isXML( document );
 
-	// Support: IE 9-11, Edge
+	// Support: IE 9 - 11+, Edge 12 - 18+
 	// Accessing iframe documents after unload throws "permission denied" errors (jQuery #13936)
-	if ( preferredDoc !== document &&
-		(subWindow = document.defaultView) && subWindow.top !== subWindow ) {
+	// Support: IE 11+, Edge 17 - 18+
+	// IE/Edge sometimes throw a "Permission denied" error when strict-comparing
+	// two documents; shallow comparisons work.
+	// eslint-disable-next-line eqeqeq
+	if ( preferredDoc != document &&
+		( subWindow = document.defaultView ) && subWindow.top !== subWindow ) {
 
 		// Support: IE 11, Edge
 		if ( subWindow.addEventListener ) {
@@ -1115,25 +1163,36 @@ setDocument = Sizzle.setDocument = function( node ) {
 		}
 	}
 
+	// Support: IE 8 - 11+, Edge 12 - 18+, Chrome <=16 - 25 only, Firefox <=3.6 - 31 only,
+	// Safari 4 - 5 only, Opera <=11.6 - 12.x only
+	// IE/Edge & older browsers don't support the :scope pseudo-class.
+	// Support: Safari 6.0 only
+	// Safari 6.0 supports :scope but it's an alias of :root there.
+	support.scope = assert( function( el ) {
+		docElem.appendChild( el ).appendChild( document.createElement( "div" ) );
+		return typeof el.querySelectorAll !== "undefined" &&
+			!el.querySelectorAll( ":scope fieldset div" ).length;
+	} );
+
 	/* Attributes
 	---------------------------------------------------------------------- */
 
 	// Support: IE<8
 	// Verify that getAttribute really returns attributes and not properties
 	// (excepting IE8 booleans)
-	support.attributes = assert(function( el ) {
+	support.attributes = assert( function( el ) {
 		el.className = "i";
-		return !el.getAttribute("className");
-	});
+		return !el.getAttribute( "className" );
+	} );
 
 	/* getElement(s)By*
 	---------------------------------------------------------------------- */
 
 	// Check if getElementsByTagName("*") returns only elements
-	support.getElementsByTagName = assert(function( el ) {
-		el.appendChild( document.createComment("") );
-		return !el.getElementsByTagName("*").length;
-	});
+	support.getElementsByTagName = assert( function( el ) {
+		el.appendChild( document.createComment( "" ) );
+		return !el.getElementsByTagName( "*" ).length;
+	} );
 
 	// Support: IE<9
 	support.getElementsByClassName = rnative.test( document.getElementsByClassName );
@@ -1142,38 +1201,38 @@ setDocument = Sizzle.setDocument = function( node ) {
 	// Check if getElementById returns elements by name
 	// The broken getElementById methods don't pick up programmatically-set names,
 	// so use a roundabout getElementsByName test
-	support.getById = assert(function( el ) {
+	support.getById = assert( function( el ) {
 		docElem.appendChild( el ).id = expando;
 		return !document.getElementsByName || !document.getElementsByName( expando ).length;
-	});
+	} );
 
 	// ID filter and find
 	if ( support.getById ) {
-		Expr.filter["ID"] = function( id ) {
+		Expr.filter[ "ID" ] = function( id ) {
 			var attrId = id.replace( runescape, funescape );
 			return function( elem ) {
-				return elem.getAttribute("id") === attrId;
+				return elem.getAttribute( "id" ) === attrId;
 			};
 		};
-		Expr.find["ID"] = function( id, context ) {
+		Expr.find[ "ID" ] = function( id, context ) {
 			if ( typeof context.getElementById !== "undefined" && documentIsHTML ) {
 				var elem = context.getElementById( id );
 				return elem ? [ elem ] : [];
 			}
 		};
 	} else {
-		Expr.filter["ID"] =  function( id ) {
+		Expr.filter[ "ID" ] =  function( id ) {
 			var attrId = id.replace( runescape, funescape );
 			return function( elem ) {
 				var node = typeof elem.getAttributeNode !== "undefined" &&
-					elem.getAttributeNode("id");
+					elem.getAttributeNode( "id" );
 				return node && node.value === attrId;
 			};
 		};
 
 		// Support: IE 6 - 7 only
 		// getElementById is not reliable as a find shortcut
-		Expr.find["ID"] = function( id, context ) {
+		Expr.find[ "ID" ] = function( id, context ) {
 			if ( typeof context.getElementById !== "undefined" && documentIsHTML ) {
 				var node, i, elems,
 					elem = context.getElementById( id );
@@ -1181,7 +1240,7 @@ setDocument = Sizzle.setDocument = function( node ) {
 				if ( elem ) {
 
 					// Verify the id attribute
-					node = elem.getAttributeNode("id");
+					node = elem.getAttributeNode( "id" );
 					if ( node && node.value === id ) {
 						return [ elem ];
 					}
@@ -1189,8 +1248,8 @@ setDocument = Sizzle.setDocument = function( node ) {
 					// Fall back on getElementsByName
 					elems = context.getElementsByName( id );
 					i = 0;
-					while ( (elem = elems[i++]) ) {
-						node = elem.getAttributeNode("id");
+					while ( ( elem = elems[ i++ ] ) ) {
+						node = elem.getAttributeNode( "id" );
 						if ( node && node.value === id ) {
 							return [ elem ];
 						}
@@ -1203,7 +1262,7 @@ setDocument = Sizzle.setDocument = function( node ) {
 	}
 
 	// Tag
-	Expr.find["TAG"] = support.getElementsByTagName ?
+	Expr.find[ "TAG" ] = support.getElementsByTagName ?
 		function( tag, context ) {
 			if ( typeof context.getElementsByTagName !== "undefined" ) {
 				return context.getElementsByTagName( tag );
@@ -1218,12 +1277,13 @@ setDocument = Sizzle.setDocument = function( node ) {
 			var elem,
 				tmp = [],
 				i = 0,
+
 				// By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too
 				results = context.getElementsByTagName( tag );
 
 			// Filter out possible comments
 			if ( tag === "*" ) {
-				while ( (elem = results[i++]) ) {
+				while ( ( elem = results[ i++ ] ) ) {
 					if ( elem.nodeType === 1 ) {
 						tmp.push( elem );
 					}
@@ -1235,7 +1295,7 @@ setDocument = Sizzle.setDocument = function( node ) {
 		};
 
 	// Class
-	Expr.find["CLASS"] = support.getElementsByClassName && function( className, context ) {
+	Expr.find[ "CLASS" ] = support.getElementsByClassName && function( className, context ) {
 		if ( typeof context.getElementsByClassName !== "undefined" && documentIsHTML ) {
 			return context.getElementsByClassName( className );
 		}
@@ -1256,10 +1316,14 @@ setDocument = Sizzle.setDocument = function( node ) {
 	// See https://bugs.jquery.com/ticket/13378
 	rbuggyQSA = [];
 
-	if ( (support.qsa = rnative.test( document.querySelectorAll )) ) {
+	if ( ( support.qsa = rnative.test( document.querySelectorAll ) ) ) {
+
 		// Build QSA regex
 		// Regex strategy adopted from Diego Perini
-		assert(function( el ) {
+		assert( function( el ) {
+
+			var input;
+
 			// Select is set to empty string on purpose
 			// This is to test IE's treatment of not explicitly
 			// setting a boolean content attribute,
@@ -1273,78 +1337,98 @@ setDocument = Sizzle.setDocument = function( node ) {
 			// Nothing should be selected when empty strings follow ^= or $= or *=
 			// The test attribute must be unknown in Opera but "safe" for WinRT
 			// https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section
-			if ( el.querySelectorAll("[msallowcapture^='']").length ) {
+			if ( el.querySelectorAll( "[msallowcapture^='']" ).length ) {
 				rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" );
 			}
 
 			// Support: IE8
 			// Boolean attributes and "value" are not treated correctly
-			if ( !el.querySelectorAll("[selected]").length ) {
+			if ( !el.querySelectorAll( "[selected]" ).length ) {
 				rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" );
 			}
 
 			// Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+
 			if ( !el.querySelectorAll( "[id~=" + expando + "-]" ).length ) {
-				rbuggyQSA.push("~=");
+				rbuggyQSA.push( "~=" );
+			}
+
+			// Support: IE 11+, Edge 15 - 18+
+			// IE 11/Edge don't find elements on a `[name='']` query in some cases.
+			// Adding a temporary attribute to the document before the selection works
+			// around the issue.
+			// Interestingly, IE 10 & older don't seem to have the issue.
+			input = document.createElement( "input" );
+			input.setAttribute( "name", "" );
+			el.appendChild( input );
+			if ( !el.querySelectorAll( "[name='']" ).length ) {
+				rbuggyQSA.push( "\\[" + whitespace + "*name" + whitespace + "*=" +
+					whitespace + "*(?:''|\"\")" );
 			}
 
 			// Webkit/Opera - :checked should return selected option elements
 			// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
 			// IE8 throws error here and will not see later tests
-			if ( !el.querySelectorAll(":checked").length ) {
-				rbuggyQSA.push(":checked");
+			if ( !el.querySelectorAll( ":checked" ).length ) {
+				rbuggyQSA.push( ":checked" );
 			}
 
 			// Support: Safari 8+, iOS 8+
 			// https://bugs.webkit.org/show_bug.cgi?id=136851
 			// In-page `selector#id sibling-combinator selector` fails
 			if ( !el.querySelectorAll( "a#" + expando + "+*" ).length ) {
-				rbuggyQSA.push(".#.+[+~]");
+				rbuggyQSA.push( ".#.+[+~]" );
 			}
-		});
 
-		assert(function( el ) {
+			// Support: Firefox <=3.6 - 5 only
+			// Old Firefox doesn't throw on a badly-escaped identifier.
+			el.querySelectorAll( "\\\f" );
+			rbuggyQSA.push( "[\\r\\n\\f]" );
+		} );
+
+		assert( function( el ) {
 			el.innerHTML = "<a href='' disabled='disabled'></a>" +
 				"<select disabled='disabled'><option/></select>";
 
 			// Support: Windows 8 Native Apps
 			// The type and name attributes are restricted during .innerHTML assignment
-			var input = document.createElement("input");
+			var input = document.createElement( "input" );
 			input.setAttribute( "type", "hidden" );
 			el.appendChild( input ).setAttribute( "name", "D" );
 
 			// Support: IE8
 			// Enforce case-sensitivity of name attribute
-			if ( el.querySelectorAll("[name=d]").length ) {
+			if ( el.querySelectorAll( "[name=d]" ).length ) {
 				rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" );
 			}
 
 			// FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)
 			// IE8 throws error here and will not see later tests
-			if ( el.querySelectorAll(":enabled").length !== 2 ) {
+			if ( el.querySelectorAll( ":enabled" ).length !== 2 ) {
 				rbuggyQSA.push( ":enabled", ":disabled" );
 			}
 
 			// Support: IE9-11+
 			// IE's :disabled selector does not pick up the children of disabled fieldsets
 			docElem.appendChild( el ).disabled = true;
-			if ( el.querySelectorAll(":disabled").length !== 2 ) {
+			if ( el.querySelectorAll( ":disabled" ).length !== 2 ) {
 				rbuggyQSA.push( ":enabled", ":disabled" );
 			}
 
+			// Support: Opera 10 - 11 only
 			// Opera 10-11 does not throw on post-comma invalid pseudos
-			el.querySelectorAll("*,:x");
-			rbuggyQSA.push(",.*:");
-		});
+			el.querySelectorAll( "*,:x" );
+			rbuggyQSA.push( ",.*:" );
+		} );
 	}
 
-	if ( (support.matchesSelector = rnative.test( (matches = docElem.matches ||
+	if ( ( support.matchesSelector = rnative.test( ( matches = docElem.matches ||
 		docElem.webkitMatchesSelector ||
 		docElem.mozMatchesSelector ||
 		docElem.oMatchesSelector ||
-		docElem.msMatchesSelector) )) ) {
+		docElem.msMatchesSelector ) ) ) ) {
+
+		assert( function( el ) {
 
-		assert(function( el ) {
 			// Check to see if it's possible to do matchesSelector
 			// on a disconnected node (IE 9)
 			support.disconnectedMatch = matches.call( el, "*" );
@@ -1353,11 +1437,11 @@ setDocument = Sizzle.setDocument = function( node ) {
 			// Gecko does not error, returns false instead
 			matches.call( el, "[s!='']:x" );
 			rbuggyMatches.push( "!=", pseudos );
-		});
+		} );
 	}
 
-	rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join("|") );
-	rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join("|") );
+	rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join( "|" ) );
+	rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join( "|" ) );
 
 	/* Contains
 	---------------------------------------------------------------------- */
@@ -1374,11 +1458,11 @@ setDocument = Sizzle.setDocument = function( node ) {
 				adown.contains ?
 					adown.contains( bup ) :
 					a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16
-			));
+			) );
 		} :
 		function( a, b ) {
 			if ( b ) {
-				while ( (b = b.parentNode) ) {
+				while ( ( b = b.parentNode ) ) {
 					if ( b === a ) {
 						return true;
 					}
@@ -1407,7 +1491,11 @@ setDocument = Sizzle.setDocument = function( node ) {
 		}
 
 		// Calculate position if both inputs belong to the same document
-		compare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ?
+		// Support: IE 11+, Edge 17 - 18+
+		// IE/Edge sometimes throw a "Permission denied" error when strict-comparing
+		// two documents; shallow comparisons work.
+		// eslint-disable-next-line eqeqeq
+		compare = ( a.ownerDocument || a ) == ( b.ownerDocument || b ) ?
 			a.compareDocumentPosition( b ) :
 
 			// Otherwise we know they are disconnected
@@ -1415,13 +1503,24 @@ setDocument = Sizzle.setDocument = function( node ) {
 
 		// Disconnected nodes
 		if ( compare & 1 ||
-			(!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) {
+			( !support.sortDetached && b.compareDocumentPosition( a ) === compare ) ) {
 
 			// Choose the first element that is related to our preferred document
-			if ( a === document || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) {
+			// Support: IE 11+, Edge 17 - 18+
+			// IE/Edge sometimes throw a "Permission denied" error when strict-comparing
+			// two documents; shallow comparisons work.
+			// eslint-disable-next-line eqeqeq
+			if ( a == document || a.ownerDocument == preferredDoc &&
+				contains( preferredDoc, a ) ) {
 				return -1;
 			}
-			if ( b === document || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) {
+
+			// Support: IE 11+, Edge 17 - 18+
+			// IE/Edge sometimes throw a "Permission denied" error when strict-comparing
+			// two documents; shallow comparisons work.
+			// eslint-disable-next-line eqeqeq
+			if ( b == document || b.ownerDocument == preferredDoc &&
+				contains( preferredDoc, b ) ) {
 				return 1;
 			}
 
@@ -1434,6 +1533,7 @@ setDocument = Sizzle.setDocument = function( node ) {
 		return compare & 4 ? -1 : 1;
 	} :
 	function( a, b ) {
+
 		// Exit early if the nodes are identical
 		if ( a === b ) {
 			hasDuplicate = true;
@@ -1449,8 +1549,14 @@ setDocument = Sizzle.setDocument = function( node ) {
 
 		// Parentless nodes are either documents or disconnected
 		if ( !aup || !bup ) {
-			return a === document ? -1 :
-				b === document ? 1 :
+
+			// Support: IE 11+, Edge 17 - 18+
+			// IE/Edge sometimes throw a "Permission denied" error when strict-comparing
+			// two documents; shallow comparisons work.
+			/* eslint-disable eqeqeq */
+			return a == document ? -1 :
+				b == document ? 1 :
+				/* eslint-enable eqeqeq */
 				aup ? -1 :
 				bup ? 1 :
 				sortInput ?
@@ -1464,26 +1570,32 @@ setDocument = Sizzle.setDocument = function( node ) {
 
 		// Otherwise we need full lists of their ancestors for comparison
 		cur = a;
-		while ( (cur = cur.parentNode) ) {
+		while ( ( cur = cur.parentNode ) ) {
 			ap.unshift( cur );
 		}
 		cur = b;
-		while ( (cur = cur.parentNode) ) {
+		while ( ( cur = cur.parentNode ) ) {
 			bp.unshift( cur );
 		}
 
 		// Walk down the tree looking for a discrepancy
-		while ( ap[i] === bp[i] ) {
+		while ( ap[ i ] === bp[ i ] ) {
 			i++;
 		}
 
 		return i ?
+
 			// Do a sibling check if the nodes have a common ancestor
-			siblingCheck( ap[i], bp[i] ) :
+			siblingCheck( ap[ i ], bp[ i ] ) :
 
 			// Otherwise nodes in our document sort first
-			ap[i] === preferredDoc ? -1 :
-			bp[i] === preferredDoc ? 1 :
+			// Support: IE 11+, Edge 17 - 18+
+			// IE/Edge sometimes throw a "Permission denied" error when strict-comparing
+			// two documents; shallow comparisons work.
+			/* eslint-disable eqeqeq */
+			ap[ i ] == preferredDoc ? -1 :
+			bp[ i ] == preferredDoc ? 1 :
+			/* eslint-enable eqeqeq */
 			0;
 	};
 
@@ -1495,10 +1607,7 @@ Sizzle.matches = function( expr, elements ) {
 };
 
 Sizzle.matchesSelector = function( elem, expr ) {
-	// Set document vars if needed
-	if ( ( elem.ownerDocument || elem ) !== document ) {
-		setDocument( elem );
-	}
+	setDocument( elem );
 
 	if ( support.matchesSelector && documentIsHTML &&
 		!nonnativeSelectorCache[ expr + " " ] &&
@@ -1510,12 +1619,13 @@ Sizzle.matchesSelector = function( elem, expr ) {
 
 			// IE 9's matchesSelector returns false on disconnected nodes
 			if ( ret || support.disconnectedMatch ||
-					// As well, disconnected nodes are said to be in a document
-					// fragment in IE 9
-					elem.document && elem.document.nodeType !== 11 ) {
+
+				// As well, disconnected nodes are said to be in a document
+				// fragment in IE 9
+				elem.document && elem.document.nodeType !== 11 ) {
 				return ret;
 			}
-		} catch (e) {
+		} catch ( e ) {
 			nonnativeSelectorCache( expr, true );
 		}
 	}
@@ -1524,20 +1634,31 @@ Sizzle.matchesSelector = function( elem, expr ) {
 };
 
 Sizzle.contains = function( context, elem ) {
+
 	// Set document vars if needed
-	if ( ( context.ownerDocument || context ) !== document ) {
+	// Support: IE 11+, Edge 17 - 18+
+	// IE/Edge sometimes throw a "Permission denied" error when strict-comparing
+	// two documents; shallow comparisons work.
+	// eslint-disable-next-line eqeqeq
+	if ( ( context.ownerDocument || context ) != document ) {
 		setDocument( context );
 	}
 	return contains( context, elem );
 };
 
 Sizzle.attr = function( elem, name ) {
+
 	// Set document vars if needed
-	if ( ( elem.ownerDocument || elem ) !== document ) {
+	// Support: IE 11+, Edge 17 - 18+
+	// IE/Edge sometimes throw a "Permission denied" error when strict-comparing
+	// two documents; shallow comparisons work.
+	// eslint-disable-next-line eqeqeq
+	if ( ( elem.ownerDocument || elem ) != document ) {
 		setDocument( elem );
 	}
 
 	var fn = Expr.attrHandle[ name.toLowerCase() ],
+
 		// Don't get fooled by Object.prototype properties (jQuery #13807)
 		val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?
 			fn( elem, name, !documentIsHTML ) :
@@ -1547,13 +1668,13 @@ Sizzle.attr = function( elem, name ) {
 		val :
 		support.attributes || !documentIsHTML ?
 			elem.getAttribute( name ) :
-			(val = elem.getAttributeNode(name)) && val.specified ?
+			( val = elem.getAttributeNode( name ) ) && val.specified ?
 				val.value :
 				null;
 };
 
 Sizzle.escape = function( sel ) {
-	return (sel + "").replace( rcssescape, fcssescape );
+	return ( sel + "" ).replace( rcssescape, fcssescape );
 };
 
 Sizzle.error = function( msg ) {
@@ -1576,7 +1697,7 @@ Sizzle.uniqueSort = function( results ) {
 	results.sort( sortOrder );
 
 	if ( hasDuplicate ) {
-		while ( (elem = results[i++]) ) {
+		while ( ( elem = results[ i++ ] ) ) {
 			if ( elem === results[ i ] ) {
 				j = duplicates.push( i );
 			}
@@ -1604,17 +1725,21 @@ getText = Sizzle.getText = function( elem ) {
 		nodeType = elem.nodeType;
 
 	if ( !nodeType ) {
+
 		// If no nodeType, this is expected to be an array
-		while ( (node = elem[i++]) ) {
+		while ( ( node = elem[ i++ ] ) ) {
+
 			// Do not traverse comment nodes
 			ret += getText( node );
 		}
 	} else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {
+
 		// Use textContent for elements
 		// innerText usage removed for consistency of new lines (jQuery #11153)
 		if ( typeof elem.textContent === "string" ) {
 			return elem.textContent;
 		} else {
+
 			// Traverse its children
 			for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {
 				ret += getText( elem );
@@ -1623,6 +1748,7 @@ getText = Sizzle.getText = function( elem ) {
 	} else if ( nodeType === 3 || nodeType === 4 ) {
 		return elem.nodeValue;
 	}
+
 	// Do not include comment or processing instruction nodes
 
 	return ret;
@@ -1650,19 +1776,21 @@ Expr = Sizzle.selectors = {
 
 	preFilter: {
 		"ATTR": function( match ) {
-			match[1] = match[1].replace( runescape, funescape );
+			match[ 1 ] = match[ 1 ].replace( runescape, funescape );
 
 			// Move the given value to match[3] whether quoted or unquoted
-			match[3] = ( match[3] || match[4] || match[5] || "" ).replace( runescape, funescape );
+			match[ 3 ] = ( match[ 3 ] || match[ 4 ] ||
+				match[ 5 ] || "" ).replace( runescape, funescape );
 
-			if ( match[2] === "~=" ) {
-				match[3] = " " + match[3] + " ";
+			if ( match[ 2 ] === "~=" ) {
+				match[ 3 ] = " " + match[ 3 ] + " ";
 			}
 
 			return match.slice( 0, 4 );
 		},
 
 		"CHILD": function( match ) {
+
 			/* matches from matchExpr["CHILD"]
 				1 type (only|nth|...)
 				2 what (child|of-type)
@@ -1673,22 +1801,25 @@ Expr = Sizzle.selectors = {
 				7 sign of y-component
 				8 y of y-component
 			*/
-			match[1] = match[1].toLowerCase();
+			match[ 1 ] = match[ 1 ].toLowerCase();
+
+			if ( match[ 1 ].slice( 0, 3 ) === "nth" ) {
 
-			if ( match[1].slice( 0, 3 ) === "nth" ) {
 				// nth-* requires argument
-				if ( !match[3] ) {
-					Sizzle.error( match[0] );
+				if ( !match[ 3 ] ) {
+					Sizzle.error( match[ 0 ] );
 				}
 
 				// numeric x and y parameters for Expr.filter.CHILD
 				// remember that false/true cast respectively to 0/1
-				match[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === "even" || match[3] === "odd" ) );
-				match[5] = +( ( match[7] + match[8] ) || match[3] === "odd" );
+				match[ 4 ] = +( match[ 4 ] ?
+					match[ 5 ] + ( match[ 6 ] || 1 ) :
+					2 * ( match[ 3 ] === "even" || match[ 3 ] === "odd" ) );
+				match[ 5 ] = +( ( match[ 7 ] + match[ 8 ] ) || match[ 3 ] === "odd" );
 
-			// other types prohibit arguments
-			} else if ( match[3] ) {
-				Sizzle.error( match[0] );
+				// other types prohibit arguments
+			} else if ( match[ 3 ] ) {
+				Sizzle.error( match[ 0 ] );
 			}
 
 			return match;
@@ -1696,26 +1827,28 @@ Expr = Sizzle.selectors = {
 
 		"PSEUDO": function( match ) {
 			var excess,
-				unquoted = !match[6] && match[2];
+				unquoted = !match[ 6 ] && match[ 2 ];
 
-			if ( matchExpr["CHILD"].test( match[0] ) ) {
+			if ( matchExpr[ "CHILD" ].test( match[ 0 ] ) ) {
 				return null;
 			}
 
 			// Accept quoted arguments as-is
-			if ( match[3] ) {
-				match[2] = match[4] || match[5] || "";
+			if ( match[ 3 ] ) {
+				match[ 2 ] = match[ 4 ] || match[ 5 ] || "";
 
 			// Strip excess characters from unquoted arguments
 			} else if ( unquoted && rpseudo.test( unquoted ) &&
+
 				// Get excess from tokenize (recursively)
-				(excess = tokenize( unquoted, true )) &&
+				( excess = tokenize( unquoted, true ) ) &&
+
 				// advance to the next closing parenthesis
-				(excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length) ) {
+				( excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length ) ) {
 
 				// excess is a negative index
-				match[0] = match[0].slice( 0, excess );
-				match[2] = unquoted.slice( 0, excess );
+				match[ 0 ] = match[ 0 ].slice( 0, excess );
+				match[ 2 ] = unquoted.slice( 0, excess );
 			}
 
 			// Return only captures needed by the pseudo filter method (type and argument)
@@ -1728,7 +1861,9 @@ Expr = Sizzle.selectors = {
 		"TAG": function( nodeNameSelector ) {
 			var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();
 			return nodeNameSelector === "*" ?
-				function() { return true; } :
+				function() {
+					return true;
+				} :
 				function( elem ) {
 					return elem.nodeName && elem.nodeName.toLowerCase() === nodeName;
 				};
@@ -1738,10 +1873,16 @@ Expr = Sizzle.selectors = {
 			var pattern = classCache[ className + " " ];
 
 			return pattern ||
-				(pattern = new RegExp( "(^|" + whitespace + ")" + className + "(" + whitespace + "|$)" )) &&
-				classCache( className, function( elem ) {
-					return pattern.test( typeof elem.className === "string" && elem.className || typeof elem.getAttribute !== "undefined" && elem.getAttribute("class") || "" );
-				});
+				( pattern = new RegExp( "(^|" + whitespace +
+					")" + className + "(" + whitespace + "|$)" ) ) && classCache(
+						className, function( elem ) {
+							return pattern.test(
+								typeof elem.className === "string" && elem.className ||
+								typeof elem.getAttribute !== "undefined" &&
+									elem.getAttribute( "class" ) ||
+								""
+							);
+				} );
 		},
 
 		"ATTR": function( name, operator, check ) {
@@ -1757,6 +1898,8 @@ Expr = Sizzle.selectors = {
 
 				result += "";
 
+				/* eslint-disable max-len */
+
 				return operator === "=" ? result === check :
 					operator === "!=" ? result !== check :
 					operator === "^=" ? check && result.indexOf( check ) === 0 :
@@ -1765,10 +1908,12 @@ Expr = Sizzle.selectors = {
 					operator === "~=" ? ( " " + result.replace( rwhitespace, " " ) + " " ).indexOf( check ) > -1 :
 					operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" :
 					false;
+				/* eslint-enable max-len */
+
 			};
 		},
 
-		"CHILD": function( type, what, argument, first, last ) {
+		"CHILD": function( type, what, _argument, first, last ) {
 			var simple = type.slice( 0, 3 ) !== "nth",
 				forward = type.slice( -4 ) !== "last",
 				ofType = what === "of-type";
@@ -1780,7 +1925,7 @@ Expr = Sizzle.selectors = {
 					return !!elem.parentNode;
 				} :
 
-				function( elem, context, xml ) {
+				function( elem, _context, xml ) {
 					var cache, uniqueCache, outerCache, node, nodeIndex, start,
 						dir = simple !== forward ? "nextSibling" : "previousSibling",
 						parent = elem.parentNode,
@@ -1794,7 +1939,7 @@ Expr = Sizzle.selectors = {
 						if ( simple ) {
 							while ( dir ) {
 								node = elem;
-								while ( (node = node[ dir ]) ) {
+								while ( ( node = node[ dir ] ) ) {
 									if ( ofType ?
 										node.nodeName.toLowerCase() === name :
 										node.nodeType === 1 ) {
@@ -1802,6 +1947,7 @@ Expr = Sizzle.selectors = {
 										return false;
 									}
 								}
+
 								// Reverse direction for :only-* (if we haven't yet done so)
 								start = dir = type === "only" && !start && "nextSibling";
 							}
@@ -1817,22 +1963,22 @@ Expr = Sizzle.selectors = {
 
 							// ...in a gzip-friendly way
 							node = parent;
-							outerCache = node[ expando ] || (node[ expando ] = {});
+							outerCache = node[ expando ] || ( node[ expando ] = {} );
 
 							// Support: IE <9 only
 							// Defend against cloned attroperties (jQuery gh-1709)
 							uniqueCache = outerCache[ node.uniqueID ] ||
-								(outerCache[ node.uniqueID ] = {});
+								( outerCache[ node.uniqueID ] = {} );
 
 							cache = uniqueCache[ type ] || [];
 							nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];
 							diff = nodeIndex && cache[ 2 ];
 							node = nodeIndex && parent.childNodes[ nodeIndex ];
 
-							while ( (node = ++nodeIndex && node && node[ dir ] ||
+							while ( ( node = ++nodeIndex && node && node[ dir ] ||
 
 								// Fallback to seeking `elem` from the start
-								(diff = nodeIndex = 0) || start.pop()) ) {
+								( diff = nodeIndex = 0 ) || start.pop() ) ) {
 
 								// When found, cache indexes on `parent` and break
 								if ( node.nodeType === 1 && ++diff && node === elem ) {
@@ -1842,16 +1988,18 @@ Expr = Sizzle.selectors = {
 							}
 
 						} else {
+
 							// Use previously-cached element index if available
 							if ( useCache ) {
+
 								// ...in a gzip-friendly way
 								node = elem;
-								outerCache = node[ expando ] || (node[ expando ] = {});
+								outerCache = node[ expando ] || ( node[ expando ] = {} );
 
 								// Support: IE <9 only
 								// Defend against cloned attroperties (jQuery gh-1709)
 								uniqueCache = outerCache[ node.uniqueID ] ||
-									(outerCache[ node.uniqueID ] = {});
+									( outerCache[ node.uniqueID ] = {} );
 
 								cache = uniqueCache[ type ] || [];
 								nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];
@@ -1861,9 +2009,10 @@ Expr = Sizzle.selectors = {
 							// xml :nth-child(...)
 							// or :nth-last-child(...) or :nth(-last)?-of-type(...)
 							if ( diff === false ) {
+
 								// Use the same loop as above to seek `elem` from the start
-								while ( (node = ++nodeIndex && node && node[ dir ] ||
-									(diff = nodeIndex = 0) || start.pop()) ) {
+								while ( ( node = ++nodeIndex && node && node[ dir ] ||
+									( diff = nodeIndex = 0 ) || start.pop() ) ) {
 
 									if ( ( ofType ?
 										node.nodeName.toLowerCase() === name :
@@ -1872,12 +2021,13 @@ Expr = Sizzle.selectors = {
 
 										// Cache the index of each encountered element
 										if ( useCache ) {
-											outerCache = node[ expando ] || (node[ expando ] = {});
+											outerCache = node[ expando ] ||
+												( node[ expando ] = {} );
 
 											// Support: IE <9 only
 											// Defend against cloned attroperties (jQuery gh-1709)
 											uniqueCache = outerCache[ node.uniqueID ] ||
-												(outerCache[ node.uniqueID ] = {});
+												( outerCache[ node.uniqueID ] = {} );
 
 											uniqueCache[ type ] = [ dirruns, diff ];
 										}
@@ -1898,6 +2048,7 @@ Expr = Sizzle.selectors = {
 		},
 
 		"PSEUDO": function( pseudo, argument ) {
+
 			// pseudo-class names are case-insensitive
 			// http://www.w3.org/TR/selectors/#pseudo-classes
 			// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters
@@ -1917,15 +2068,15 @@ Expr = Sizzle.selectors = {
 			if ( fn.length > 1 ) {
 				args = [ pseudo, pseudo, "", argument ];
 				return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?
-					markFunction(function( seed, matches ) {
+					markFunction( function( seed, matches ) {
 						var idx,
 							matched = fn( seed, argument ),
 							i = matched.length;
 						while ( i-- ) {
-							idx = indexOf( seed, matched[i] );
-							seed[ idx ] = !( matches[ idx ] = matched[i] );
+							idx = indexOf( seed, matched[ i ] );
+							seed[ idx ] = !( matches[ idx ] = matched[ i ] );
 						}
-					}) :
+					} ) :
 					function( elem ) {
 						return fn( elem, 0, args );
 					};
@@ -1936,8 +2087,10 @@ Expr = Sizzle.selectors = {
 	},
 
 	pseudos: {
+
 		// Potentially complex pseudos
-		"not": markFunction(function( selector ) {
+		"not": markFunction( function( selector ) {
+
 			// Trim the selector passed to compile
 			// to avoid treating leading and trailing
 			// spaces as combinators
@@ -1946,39 +2099,40 @@ Expr = Sizzle.selectors = {
 				matcher = compile( selector.replace( rtrim, "$1" ) );
 
 			return matcher[ expando ] ?
-				markFunction(function( seed, matches, context, xml ) {
+				markFunction( function( seed, matches, _context, xml ) {
 					var elem,
 						unmatched = matcher( seed, null, xml, [] ),
 						i = seed.length;
 
 					// Match elements unmatched by `matcher`
 					while ( i-- ) {
-						if ( (elem = unmatched[i]) ) {
-							seed[i] = !(matches[i] = elem);
+						if ( ( elem = unmatched[ i ] ) ) {
+							seed[ i ] = !( matches[ i ] = elem );
 						}
 					}
-				}) :
-				function( elem, context, xml ) {
-					input[0] = elem;
+				} ) :
+				function( elem, _context, xml ) {
+					input[ 0 ] = elem;
 					matcher( input, null, xml, results );
+
 					// Don't keep the element (issue #299)
-					input[0] = null;
+					input[ 0 ] = null;
 					return !results.pop();
 				};
-		}),
+		} ),
 
-		"has": markFunction(function( selector ) {
+		"has": markFunction( function( selector ) {
 			return function( elem ) {
 				return Sizzle( selector, elem ).length > 0;
 			};
-		}),
+		} ),
 
-		"contains": markFunction(function( text ) {
+		"contains": markFunction( function( text ) {
 			text = text.replace( runescape, funescape );
 			return function( elem ) {
 				return ( elem.textContent || getText( elem ) ).indexOf( text ) > -1;
 			};
-		}),
+		} ),
 
 		// "Whether an element is represented by a :lang() selector
 		// is based solely on the element's language value
@@ -1988,25 +2142,26 @@ Expr = Sizzle.selectors = {
 		// The identifier C does not have to be a valid language name."
 		// http://www.w3.org/TR/selectors/#lang-pseudo
 		"lang": markFunction( function( lang ) {
+
 			// lang value must be a valid identifier
-			if ( !ridentifier.test(lang || "") ) {
+			if ( !ridentifier.test( lang || "" ) ) {
 				Sizzle.error( "unsupported lang: " + lang );
 			}
 			lang = lang.replace( runescape, funescape ).toLowerCase();
 			return function( elem ) {
 				var elemLang;
 				do {
-					if ( (elemLang = documentIsHTML ?
+					if ( ( elemLang = documentIsHTML ?
 						elem.lang :
-						elem.getAttribute("xml:lang") || elem.getAttribute("lang")) ) {
+						elem.getAttribute( "xml:lang" ) || elem.getAttribute( "lang" ) ) ) {
 
 						elemLang = elemLang.toLowerCase();
 						return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0;
 					}
-				} while ( (elem = elem.parentNode) && elem.nodeType === 1 );
+				} while ( ( elem = elem.parentNode ) && elem.nodeType === 1 );
 				return false;
 			};
-		}),
+		} ),
 
 		// Miscellaneous
 		"target": function( elem ) {
@@ -2019,7 +2174,9 @@ Expr = Sizzle.selectors = {
 		},
 
 		"focus": function( elem ) {
-			return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex);
+			return elem === document.activeElement &&
+				( !document.hasFocus || document.hasFocus() ) &&
+				!!( elem.type || elem.href || ~elem.tabIndex );
 		},
 
 		// Boolean properties
@@ -2027,16 +2184,20 @@ Expr = Sizzle.selectors = {
 		"disabled": createDisabledPseudo( true ),
 
 		"checked": function( elem ) {
+
 			// In CSS3, :checked should return both checked and selected elements
 			// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
 			var nodeName = elem.nodeName.toLowerCase();
-			return (nodeName === "input" && !!elem.checked) || (nodeName === "option" && !!elem.selected);
+			return ( nodeName === "input" && !!elem.checked ) ||
+				( nodeName === "option" && !!elem.selected );
 		},
 
 		"selected": function( elem ) {
+
 			// Accessing this property makes selected-by-default
 			// options in Safari work properly
 			if ( elem.parentNode ) {
+				// eslint-disable-next-line no-unused-expressions
 				elem.parentNode.selectedIndex;
 			}
 
@@ -2045,6 +2206,7 @@ Expr = Sizzle.selectors = {
 
 		// Contents
 		"empty": function( elem ) {
+
 			// http://www.w3.org/TR/selectors/#empty-pseudo
 			// :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),
 			//   but not by others (comment: 8; processing instruction: 7; etc.)
@@ -2058,7 +2220,7 @@ Expr = Sizzle.selectors = {
 		},
 
 		"parent": function( elem ) {
-			return !Expr.pseudos["empty"]( elem );
+			return !Expr.pseudos[ "empty" ]( elem );
 		},
 
 		// Element/input types
@@ -2082,39 +2244,40 @@ Expr = Sizzle.selectors = {
 
 				// Support: IE<8
 				// New HTML5 attribute values (e.g., "search") appear with elem.type === "text"
-				( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === "text" );
+				( ( attr = elem.getAttribute( "type" ) ) == null ||
+					attr.toLowerCase() === "text" );
 		},
 
 		// Position-in-collection
-		"first": createPositionalPseudo(function() {
+		"first": createPositionalPseudo( function() {
 			return [ 0 ];
-		}),
+		} ),
 
-		"last": createPositionalPseudo(function( matchIndexes, length ) {
+		"last": createPositionalPseudo( function( _matchIndexes, length ) {
 			return [ length - 1 ];
-		}),
+		} ),
 
-		"eq": createPositionalPseudo(function( matchIndexes, length, argument ) {
+		"eq": createPositionalPseudo( function( _matchIndexes, length, argument ) {
 			return [ argument < 0 ? argument + length : argument ];
-		}),
+		} ),
 
-		"even": createPositionalPseudo(function( matchIndexes, length ) {
+		"even": createPositionalPseudo( function( matchIndexes, length ) {
 			var i = 0;
 			for ( ; i < length; i += 2 ) {
 				matchIndexes.push( i );
 			}
 			return matchIndexes;
-		}),
+		} ),
 
-		"odd": createPositionalPseudo(function( matchIndexes, length ) {
+		"odd": createPositionalPseudo( function( matchIndexes, length ) {
 			var i = 1;
 			for ( ; i < length; i += 2 ) {
 				matchIndexes.push( i );
 			}
 			return matchIndexes;
-		}),
+		} ),
 
-		"lt": createPositionalPseudo(function( matchIndexes, length, argument ) {
+		"lt": createPositionalPseudo( function( matchIndexes, length, argument ) {
 			var i = argument < 0 ?
 				argument + length :
 				argument > length ?
@@ -2124,19 +2287,19 @@ Expr = Sizzle.selectors = {
 				matchIndexes.push( i );
 			}
 			return matchIndexes;
-		}),
+		} ),
 
-		"gt": createPositionalPseudo(function( matchIndexes, length, argument ) {
+		"gt": createPositionalPseudo( function( matchIndexes, length, argument ) {
 			var i = argument < 0 ? argument + length : argument;
 			for ( ; ++i < length; ) {
 				matchIndexes.push( i );
 			}
 			return matchIndexes;
-		})
+		} )
 	}
 };
 
-Expr.pseudos["nth"] = Expr.pseudos["eq"];
+Expr.pseudos[ "nth" ] = Expr.pseudos[ "eq" ];
 
 // Add button/input type pseudos
 for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {
@@ -2167,37 +2330,39 @@ tokenize = Sizzle.tokenize = function( selector, parseOnly ) {
 	while ( soFar ) {
 
 		// Comma and first run
-		if ( !matched || (match = rcomma.exec( soFar )) ) {
+		if ( !matched || ( match = rcomma.exec( soFar ) ) ) {
 			if ( match ) {
+
 				// Don't consume trailing commas as valid
-				soFar = soFar.slice( match[0].length ) || soFar;
+				soFar = soFar.slice( match[ 0 ].length ) || soFar;
 			}
-			groups.push( (tokens = []) );
+			groups.push( ( tokens = [] ) );
 		}
 
 		matched = false;
 
 		// Combinators
-		if ( (match = rcombinators.exec( soFar )) ) {
+		if ( ( match = rcombinators.exec( soFar ) ) ) {
 			matched = match.shift();
-			tokens.push({
+			tokens.push( {
 				value: matched,
+
 				// Cast descendant combinators to space
-				type: match[0].replace( rtrim, " " )
-			});
+				type: match[ 0 ].replace( rtrim, " " )
+			} );
 			soFar = soFar.slice( matched.length );
 		}
 
 		// Filters
 		for ( type in Expr.filter ) {
-			if ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] ||
-				(match = preFilters[ type ]( match ))) ) {
+			if ( ( match = matchExpr[ type ].exec( soFar ) ) && ( !preFilters[ type ] ||
+				( match = preFilters[ type ]( match ) ) ) ) {
 				matched = match.shift();
-				tokens.push({
+				tokens.push( {
 					value: matched,
 					type: type,
 					matches: match
-				});
+				} );
 				soFar = soFar.slice( matched.length );
 			}
 		}
@@ -2214,6 +2379,7 @@ tokenize = Sizzle.tokenize = function( selector, parseOnly ) {
 		soFar.length :
 		soFar ?
 			Sizzle.error( selector ) :
+
 			// Cache the tokens
 			tokenCache( selector, groups ).slice( 0 );
 };
@@ -2223,7 +2389,7 @@ function toSelector( tokens ) {
 		len = tokens.length,
 		selector = "";
 	for ( ; i < len; i++ ) {
-		selector += tokens[i].value;
+		selector += tokens[ i ].value;
 	}
 	return selector;
 }
@@ -2236,9 +2402,10 @@ function addCombinator( matcher, combinator, base ) {
 		doneName = done++;
 
 	return combinator.first ?
+
 		// Check against closest ancestor/preceding element
 		function( elem, context, xml ) {
-			while ( (elem = elem[ dir ]) ) {
+			while ( ( elem = elem[ dir ] ) ) {
 				if ( elem.nodeType === 1 || checkNonElements ) {
 					return matcher( elem, context, xml );
 				}
@@ -2253,7 +2420,7 @@ function addCombinator( matcher, combinator, base ) {
 
 			// We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching
 			if ( xml ) {
-				while ( (elem = elem[ dir ]) ) {
+				while ( ( elem = elem[ dir ] ) ) {
 					if ( elem.nodeType === 1 || checkNonElements ) {
 						if ( matcher( elem, context, xml ) ) {
 							return true;
@@ -2261,27 +2428,29 @@ function addCombinator( matcher, combinator, base ) {
 					}
 				}
 			} else {
-				while ( (elem = elem[ dir ]) ) {
+				while ( ( elem = elem[ dir ] ) ) {
 					if ( elem.nodeType === 1 || checkNonElements ) {
-						outerCache = elem[ expando ] || (elem[ expando ] = {});
+						outerCache = elem[ expando ] || ( elem[ expando ] = {} );
 
 						// Support: IE <9 only
 						// Defend against cloned attroperties (jQuery gh-1709)
-						uniqueCache = outerCache[ elem.uniqueID ] || (outerCache[ elem.uniqueID ] = {});
+						uniqueCache = outerCache[ elem.uniqueID ] ||
+							( outerCache[ elem.uniqueID ] = {} );
 
 						if ( skip && skip === elem.nodeName.toLowerCase() ) {
 							elem = elem[ dir ] || elem;
-						} else if ( (oldCache = uniqueCache[ key ]) &&
+						} else if ( ( oldCache = uniqueCache[ key ] ) &&
 							oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {
 
 							// Assign to newCache so results back-propagate to previous elements
-							return (newCache[ 2 ] = oldCache[ 2 ]);
+							return ( newCache[ 2 ] = oldCache[ 2 ] );
 						} else {
+
 							// Reuse newcache so results back-propagate to previous elements
 							uniqueCache[ key ] = newCache;
 
 							// A match means we're done; a fail means we have to keep checking
-							if ( (newCache[ 2 ] = matcher( elem, context, xml )) ) {
+							if ( ( newCache[ 2 ] = matcher( elem, context, xml ) ) ) {
 								return true;
 							}
 						}
@@ -2297,20 +2466,20 @@ function elementMatcher( matchers ) {
 		function( elem, context, xml ) {
 			var i = matchers.length;
 			while ( i-- ) {
-				if ( !matchers[i]( elem, context, xml ) ) {
+				if ( !matchers[ i ]( elem, context, xml ) ) {
 					return false;
 				}
 			}
 			return true;
 		} :
-		matchers[0];
+		matchers[ 0 ];
 }
 
 function multipleContexts( selector, contexts, results ) {
 	var i = 0,
 		len = contexts.length;
 	for ( ; i < len; i++ ) {
-		Sizzle( selector, contexts[i], results );
+		Sizzle( selector, contexts[ i ], results );
 	}
 	return results;
 }
@@ -2323,7 +2492,7 @@ function condense( unmatched, map, filter, context, xml ) {
 		mapped = map != null;
 
 	for ( ; i < len; i++ ) {
-		if ( (elem = unmatched[i]) ) {
+		if ( ( elem = unmatched[ i ] ) ) {
 			if ( !filter || filter( elem, context, xml ) ) {
 				newUnmatched.push( elem );
 				if ( mapped ) {
@@ -2343,14 +2512,18 @@ function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postS
 	if ( postFinder && !postFinder[ expando ] ) {
 		postFinder = setMatcher( postFinder, postSelector );
 	}
-	return markFunction(function( seed, results, context, xml ) {
+	return markFunction( function( seed, results, context, xml ) {
 		var temp, i, elem,
 			preMap = [],
 			postMap = [],
 			preexisting = results.length,
 
 			// Get initial elements from seed or context
-			elems = seed || multipleContexts( selector || "*", context.nodeType ? [ context ] : context, [] ),
+			elems = seed || multipleContexts(
+				selector || "*",
+				context.nodeType ? [ context ] : context,
+				[]
+			),
 
 			// Prefilter to get matcher input, preserving a map for seed-results synchronization
 			matcherIn = preFilter && ( seed || !selector ) ?
@@ -2358,6 +2531,7 @@ function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postS
 				elems,
 
 			matcherOut = matcher ?
+
 				// If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,
 				postFinder || ( seed ? preFilter : preexisting || postFilter ) ?
 
@@ -2381,8 +2555,8 @@ function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postS
 			// Un-match failing elements by moving them back to matcherIn
 			i = temp.length;
 			while ( i-- ) {
-				if ( (elem = temp[i]) ) {
-					matcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem);
+				if ( ( elem = temp[ i ] ) ) {
+					matcherOut[ postMap[ i ] ] = !( matcherIn[ postMap[ i ] ] = elem );
 				}
 			}
 		}
@@ -2390,25 +2564,27 @@ function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postS
 		if ( seed ) {
 			if ( postFinder || preFilter ) {
 				if ( postFinder ) {
+
 					// Get the final matcherOut by condensing this intermediate into postFinder contexts
 					temp = [];
 					i = matcherOut.length;
 					while ( i-- ) {
-						if ( (elem = matcherOut[i]) ) {
+						if ( ( elem = matcherOut[ i ] ) ) {
+
 							// Restore matcherIn since elem is not yet a final match
-							temp.push( (matcherIn[i] = elem) );
+							temp.push( ( matcherIn[ i ] = elem ) );
 						}
 					}
-					postFinder( null, (matcherOut = []), temp, xml );
+					postFinder( null, ( matcherOut = [] ), temp, xml );
 				}
 
 				// Move matched elements from seed to results to keep them synchronized
 				i = matcherOut.length;
 				while ( i-- ) {
-					if ( (elem = matcherOut[i]) &&
-						(temp = postFinder ? indexOf( seed, elem ) : preMap[i]) > -1 ) {
+					if ( ( elem = matcherOut[ i ] ) &&
+						( temp = postFinder ? indexOf( seed, elem ) : preMap[ i ] ) > -1 ) {
 
-						seed[temp] = !(results[temp] = elem);
+						seed[ temp ] = !( results[ temp ] = elem );
 					}
 				}
 			}
@@ -2426,14 +2602,14 @@ function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postS
 				push.apply( results, matcherOut );
 			}
 		}
-	});
+	} );
 }
 
 function matcherFromTokens( tokens ) {
 	var checkContext, matcher, j,
 		len = tokens.length,
-		leadingRelative = Expr.relative[ tokens[0].type ],
-		implicitRelative = leadingRelative || Expr.relative[" "],
+		leadingRelative = Expr.relative[ tokens[ 0 ].type ],
+		implicitRelative = leadingRelative || Expr.relative[ " " ],
 		i = leadingRelative ? 1 : 0,
 
 		// The foundational matcher ensures that elements are reachable from top-level context(s)
@@ -2445,38 +2621,43 @@ function matcherFromTokens( tokens ) {
 		}, implicitRelative, true ),
 		matchers = [ function( elem, context, xml ) {
 			var ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || (
-				(checkContext = context).nodeType ?
+				( checkContext = context ).nodeType ?
 					matchContext( elem, context, xml ) :
 					matchAnyContext( elem, context, xml ) );
+
 			// Avoid hanging onto element (issue #299)
 			checkContext = null;
 			return ret;
 		} ];
 
 	for ( ; i < len; i++ ) {
-		if ( (matcher = Expr.relative[ tokens[i].type ]) ) {
-			matchers = [ addCombinator(elementMatcher( matchers ), matcher) ];
+		if ( ( matcher = Expr.relative[ tokens[ i ].type ] ) ) {
+			matchers = [ addCombinator( elementMatcher( matchers ), matcher ) ];
 		} else {
-			matcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches );
+			matcher = Expr.filter[ tokens[ i ].type ].apply( null, tokens[ i ].matches );
 
 			// Return special upon seeing a positional matcher
 			if ( matcher[ expando ] ) {
+
 				// Find the next relative operator (if any) for proper handling
 				j = ++i;
 				for ( ; j < len; j++ ) {
-					if ( Expr.relative[ tokens[j].type ] ) {
+					if ( Expr.relative[ tokens[ j ].type ] ) {
 						break;
 					}
 				}
 				return setMatcher(
 					i > 1 && elementMatcher( matchers ),
 					i > 1 && toSelector(
-						// If the preceding token was a descendant combinator, insert an implicit any-element `*`
-						tokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === " " ? "*" : "" })
+
+					// If the preceding token was a descendant combinator, insert an implicit any-element `*`
+					tokens
+						.slice( 0, i - 1 )
+						.concat( { value: tokens[ i - 2 ].type === " " ? "*" : "" } )
 					).replace( rtrim, "$1" ),
 					matcher,
 					i < j && matcherFromTokens( tokens.slice( i, j ) ),
-					j < len && matcherFromTokens( (tokens = tokens.slice( j )) ),
+					j < len && matcherFromTokens( ( tokens = tokens.slice( j ) ) ),
 					j < len && toSelector( tokens )
 				);
 			}
@@ -2497,28 +2678,40 @@ function matcherFromGroupMatchers( elementMatchers, setMatchers ) {
 				unmatched = seed && [],
 				setMatched = [],
 				contextBackup = outermostContext,
+
 				// We must always have either seed elements or outermost context
-				elems = seed || byElement && Expr.find["TAG"]( "*", outermost ),
+				elems = seed || byElement && Expr.find[ "TAG" ]( "*", outermost ),
+
 				// Use integer dirruns iff this is the outermost matcher
-				dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1),
+				dirrunsUnique = ( dirruns += contextBackup == null ? 1 : Math.random() || 0.1 ),
 				len = elems.length;
 
 			if ( outermost ) {
-				outermostContext = context === document || context || outermost;
+
+				// Support: IE 11+, Edge 17 - 18+
+				// IE/Edge sometimes throw a "Permission denied" error when strict-comparing
+				// two documents; shallow comparisons work.
+				// eslint-disable-next-line eqeqeq
+				outermostContext = context == document || context || outermost;
 			}
 
 			// Add elements passing elementMatchers directly to results
 			// Support: IE<9, Safari
 			// Tolerate NodeList properties (IE: "length"; Safari: <number>) matching elements by id
-			for ( ; i !== len && (elem = elems[i]) != null; i++ ) {
+			for ( ; i !== len && ( elem = elems[ i ] ) != null; i++ ) {
 				if ( byElement && elem ) {
 					j = 0;
-					if ( !context && elem.ownerDocument !== document ) {
+
+					// Support: IE 11+, Edge 17 - 18+
+					// IE/Edge sometimes throw a "Permission denied" error when strict-comparing
+					// two documents; shallow comparisons work.
+					// eslint-disable-next-line eqeqeq
+					if ( !context && elem.ownerDocument != document ) {
 						setDocument( elem );
 						xml = !documentIsHTML;
 					}
-					while ( (matcher = elementMatchers[j++]) ) {
-						if ( matcher( elem, context || document, xml) ) {
+					while ( ( matcher = elementMatchers[ j++ ] ) ) {
+						if ( matcher( elem, context || document, xml ) ) {
 							results.push( elem );
 							break;
 						}
@@ -2530,8 +2723,9 @@ function matcherFromGroupMatchers( elementMatchers, setMatchers ) {
 
 				// Track unmatched elements for set filters
 				if ( bySet ) {
+
 					// They will have gone through all possible matchers
-					if ( (elem = !matcher && elem) ) {
+					if ( ( elem = !matcher && elem ) ) {
 						matchedCount--;
 					}
 
@@ -2555,16 +2749,17 @@ function matcherFromGroupMatchers( elementMatchers, setMatchers ) {
 			// numerically zero.
 			if ( bySet && i !== matchedCount ) {
 				j = 0;
-				while ( (matcher = setMatchers[j++]) ) {
+				while ( ( matcher = setMatchers[ j++ ] ) ) {
 					matcher( unmatched, setMatched, context, xml );
 				}
 
 				if ( seed ) {
+
 					// Reintegrate element matches to eliminate the need for sorting
 					if ( matchedCount > 0 ) {
 						while ( i-- ) {
-							if ( !(unmatched[i] || setMatched[i]) ) {
-								setMatched[i] = pop.call( results );
+							if ( !( unmatched[ i ] || setMatched[ i ] ) ) {
+								setMatched[ i ] = pop.call( results );
 							}
 						}
 					}
@@ -2605,13 +2800,14 @@ compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) {
 		cached = compilerCache[ selector + " " ];
 
 	if ( !cached ) {
+
 		// Generate a function of recursive functions that can be used to check each element
 		if ( !match ) {
 			match = tokenize( selector );
 		}
 		i = match.length;
 		while ( i-- ) {
-			cached = matcherFromTokens( match[i] );
+			cached = matcherFromTokens( match[ i ] );
 			if ( cached[ expando ] ) {
 				setMatchers.push( cached );
 			} else {
@@ -2620,7 +2816,10 @@ compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) {
 		}
 
 		// Cache the compiled function
-		cached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) );
+		cached = compilerCache(
+			selector,
+			matcherFromGroupMatchers( elementMatchers, setMatchers )
+		);
 
 		// Save selector and tokenization
 		cached.selector = selector;
@@ -2640,7 +2839,7 @@ compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) {
 select = Sizzle.select = function( selector, context, results, seed ) {
 	var i, tokens, token, type, find,
 		compiled = typeof selector === "function" && selector,
-		match = !seed && tokenize( (selector = compiled.selector || selector) );
+		match = !seed && tokenize( ( selector = compiled.selector || selector ) );
 
 	results = results || [];
 
@@ -2649,11 +2848,12 @@ select = Sizzle.select = function( selector, context, results, seed ) {
 	if ( match.length === 1 ) {
 
 		// Reduce context if the leading compound selector is an ID
-		tokens = match[0] = match[0].slice( 0 );
-		if ( tokens.length > 2 && (token = tokens[0]).type === "ID" &&
-				context.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[1].type ] ) {
+		tokens = match[ 0 ] = match[ 0 ].slice( 0 );
+		if ( tokens.length > 2 && ( token = tokens[ 0 ] ).type === "ID" &&
+			context.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[ 1 ].type ] ) {
 
-			context = ( Expr.find["ID"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0];
+			context = ( Expr.find[ "ID" ]( token.matches[ 0 ]
+				.replace( runescape, funescape ), context ) || [] )[ 0 ];
 			if ( !context ) {
 				return results;
 
@@ -2666,20 +2866,22 @@ select = Sizzle.select = function( selector, context, results, seed ) {
 		}
 
 		// Fetch a seed set for right-to-left matching
-		i = matchExpr["needsContext"].test( selector ) ? 0 : tokens.length;
+		i = matchExpr[ "needsContext" ].test( selector ) ? 0 : tokens.length;
 		while ( i-- ) {
-			token = tokens[i];
+			token = tokens[ i ];
 
 			// Abort if we hit a combinator
-			if ( Expr.relative[ (type = token.type) ] ) {
+			if ( Expr.relative[ ( type = token.type ) ] ) {
 				break;
 			}
-			if ( (find = Expr.find[ type ]) ) {
+			if ( ( find = Expr.find[ type ] ) ) {
+
 				// Search, expanding context for leading sibling combinators
-				if ( (seed = find(
-					token.matches[0].replace( runescape, funescape ),
-					rsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context
-				)) ) {
+				if ( ( seed = find(
+					token.matches[ 0 ].replace( runescape, funescape ),
+					rsibling.test( tokens[ 0 ].type ) && testContext( context.parentNode ) ||
+						context
+				) ) ) {
 
 					// If seed is empty or no tokens remain, we can return early
 					tokens.splice( i, 1 );
@@ -2710,7 +2912,7 @@ select = Sizzle.select = function( selector, context, results, seed ) {
 // One-time assignments
 
 // Sort stability
-support.sortStable = expando.split("").sort( sortOrder ).join("") === expando;
+support.sortStable = expando.split( "" ).sort( sortOrder ).join( "" ) === expando;
 
 // Support: Chrome 14-35+
 // Always assume duplicates if they aren't passed to the comparison function
@@ -2721,58 +2923,59 @@ setDocument();
 
 // Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27)
 // Detached nodes confoundingly follow *each other*
-support.sortDetached = assert(function( el ) {
+support.sortDetached = assert( function( el ) {
+
 	// Should return 1, but returns 4 (following)
-	return el.compareDocumentPosition( document.createElement("fieldset") ) & 1;
-});
+	return el.compareDocumentPosition( document.createElement( "fieldset" ) ) & 1;
+} );
 
 // Support: IE<8
 // Prevent attribute/property "interpolation"
 // https://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx
-if ( !assert(function( el ) {
+if ( !assert( function( el ) {
 	el.innerHTML = "<a href='#'></a>";
-	return el.firstChild.getAttribute("href") === "#" ;
-}) ) {
+	return el.firstChild.getAttribute( "href" ) === "#";
+} ) ) {
 	addHandle( "type|href|height|width", function( elem, name, isXML ) {
 		if ( !isXML ) {
 			return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 );
 		}
-	});
+	} );
 }
 
 // Support: IE<9
 // Use defaultValue in place of getAttribute("value")
-if ( !support.attributes || !assert(function( el ) {
+if ( !support.attributes || !assert( function( el ) {
 	el.innerHTML = "<input/>";
 	el.firstChild.setAttribute( "value", "" );
 	return el.firstChild.getAttribute( "value" ) === "";
-}) ) {
-	addHandle( "value", function( elem, name, isXML ) {
+} ) ) {
+	addHandle( "value", function( elem, _name, isXML ) {
 		if ( !isXML && elem.nodeName.toLowerCase() === "input" ) {
 			return elem.defaultValue;
 		}
-	});
+	} );
 }
 
 // Support: IE<9
 // Use getAttributeNode to fetch booleans when getAttribute lies
-if ( !assert(function( el ) {
-	return el.getAttribute("disabled") == null;
-}) ) {
+if ( !assert( function( el ) {
+	return el.getAttribute( "disabled" ) == null;
+} ) ) {
 	addHandle( booleans, function( elem, name, isXML ) {
 		var val;
 		if ( !isXML ) {
 			return elem[ name ] === true ? name.toLowerCase() :
-					(val = elem.getAttributeNode( name )) && val.specified ?
+				( val = elem.getAttributeNode( name ) ) && val.specified ?
 					val.value :
-				null;
+					null;
 		}
-	});
+	} );
 }
 
 return Sizzle;
 
-})( window );
+} )( window );
 
 
 
@@ -2825,9 +3028,9 @@ var rneedsContext = jQuery.expr.match.needsContext;
 
 function nodeName( elem, name ) {
 
-  return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();
+	return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();
 
-};
+}
 var rsingleTag = ( /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i );
 
 
@@ -3141,7 +3344,7 @@ jQuery.each( {
 	parents: function( elem ) {
 		return dir( elem, "parentNode" );
 	},
-	parentsUntil: function( elem, i, until ) {
+	parentsUntil: function( elem, _i, until ) {
 		return dir( elem, "parentNode", until );
 	},
 	next: function( elem ) {
@@ -3156,10 +3359,10 @@ jQuery.each( {
 	prevAll: function( elem ) {
 		return dir( elem, "previousSibling" );
 	},
-	nextUntil: function( elem, i, until ) {
+	nextUntil: function( elem, _i, until ) {
 		return dir( elem, "nextSibling", until );
 	},
-	prevUntil: function( elem, i, until ) {
+	prevUntil: function( elem, _i, until ) {
 		return dir( elem, "previousSibling", until );
 	},
 	siblings: function( elem ) {
@@ -3169,7 +3372,13 @@ jQuery.each( {
 		return siblings( elem.firstChild );
 	},
 	contents: function( elem ) {
-		if ( typeof elem.contentDocument !== "undefined" ) {
+		if ( elem.contentDocument != null &&
+
+			// Support: IE 11+
+			// <object> elements with no `data` attribute has an object
+			// `contentDocument` with a `null` prototype.
+			getProto( elem.contentDocument ) ) {
+
 			return elem.contentDocument;
 		}
 
@@ -3512,7 +3721,7 @@ jQuery.extend( {
 					var fns = arguments;
 
 					return jQuery.Deferred( function( newDefer ) {
-						jQuery.each( tuples, function( i, tuple ) {
+						jQuery.each( tuples, function( _i, tuple ) {
 
 							// Map tuples (progress, done, fail) to arguments (done, fail, progress)
 							var fn = isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ];
@@ -3792,8 +4001,8 @@ jQuery.extend( {
 			resolveContexts = Array( i ),
 			resolveValues = slice.call( arguments ),
 
-			// the master Deferred
-			master = jQuery.Deferred(),
+			// the primary Deferred
+			primary = jQuery.Deferred(),
 
 			// subordinate callback factory
 			updateFunc = function( i ) {
@@ -3801,30 +4010,30 @@ jQuery.extend( {
 					resolveContexts[ i ] = this;
 					resolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;
 					if ( !( --remaining ) ) {
-						master.resolveWith( resolveContexts, resolveValues );
+						primary.resolveWith( resolveContexts, resolveValues );
 					}
 				};
 			};
 
 		// Single- and empty arguments are adopted like Promise.resolve
 		if ( remaining <= 1 ) {
-			adoptValue( singleValue, master.done( updateFunc( i ) ).resolve, master.reject,
+			adoptValue( singleValue, primary.done( updateFunc( i ) ).resolve, primary.reject,
 				!remaining );
 
 			// Use .then() to unwrap secondary thenables (cf. gh-3000)
-			if ( master.state() === "pending" ||
+			if ( primary.state() === "pending" ||
 				isFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) {
 
-				return master.then();
+				return primary.then();
 			}
 		}
 
 		// Multiple arguments are aggregated like Promise.all array elements
 		while ( i-- ) {
-			adoptValue( resolveValues[ i ], updateFunc( i ), master.reject );
+			adoptValue( resolveValues[ i ], updateFunc( i ), primary.reject );
 		}
 
-		return master.promise();
+		return primary.promise();
 	}
 } );
 
@@ -3965,7 +4174,7 @@ var access = function( elems, fn, key, value, chainable, emptyGet, raw ) {
 			// ...except when executing function values
 			} else {
 				bulk = fn;
-				fn = function( elem, key, value ) {
+				fn = function( elem, _key, value ) {
 					return bulk.call( jQuery( elem ), value );
 				};
 			}
@@ -3975,8 +4184,8 @@ var access = function( elems, fn, key, value, chainable, emptyGet, raw ) {
 			for ( ; i < len; i++ ) {
 				fn(
 					elems[ i ], key, raw ?
-					value :
-					value.call( elems[ i ], i, fn( elems[ i ], key ) )
+						value :
+						value.call( elems[ i ], i, fn( elems[ i ], key ) )
 				);
 			}
 		}
@@ -4000,7 +4209,7 @@ var rmsPrefix = /^-ms-/,
 	rdashAlpha = /-([a-z])/g;
 
 // Used by camelCase as callback to replace()
-function fcamelCase( all, letter ) {
+function fcamelCase( _all, letter ) {
 	return letter.toUpperCase();
 }
 
@@ -4528,27 +4737,6 @@ var isHiddenWithinTree = function( elem, el ) {
 			jQuery.css( elem, "display" ) === "none";
 	};
 
-var swap = function( elem, options, callback, args ) {
-	var ret, name,
-		old = {};
-
-	// Remember the old values, and insert the new ones
-	for ( name in options ) {
-		old[ name ] = elem.style[ name ];
-		elem.style[ name ] = options[ name ];
-	}
-
-	ret = callback.apply( elem, args || [] );
-
-	// Revert the old values
-	for ( name in options ) {
-		elem.style[ name ] = old[ name ];
-	}
-
-	return ret;
-};
-
-
 
 
 function adjustCSS( elem, prop, valueParts, tween ) {
@@ -4719,11 +4907,40 @@ var rscriptType = ( /^$|^module$|\/(?:java|ecma)script/i );
 
 
 
-// We have to close these tags to support XHTML (#13200)
-var wrapMap = {
+( function() {
+	var fragment = document.createDocumentFragment(),
+		div = fragment.appendChild( document.createElement( "div" ) ),
+		input = document.createElement( "input" );
+
+	// Support: Android 4.0 - 4.3 only
+	// Check state lost if the name is set (#11217)
+	// Support: Windows Web Apps (WWA)
+	// `name` and `type` must use .setAttribute for WWA (#14901)
+	input.setAttribute( "type", "radio" );
+	input.setAttribute( "checked", "checked" );
+	input.setAttribute( "name", "t" );
+
+	div.appendChild( input );
+
+	// Support: Android <=4.1 only
+	// Older WebKit doesn't clone checked state correctly in fragments
+	support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked;
+
+	// Support: IE <=11 only
+	// Make sure textarea (and checkbox) defaultValue is properly cloned
+	div.innerHTML = "<textarea>x</textarea>";
+	support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue;
 
 	// Support: IE <=9 only
-	option: [ 1, "<select multiple='multiple'>", "</select>" ],
+	// IE <=9 replaces <option> tags with their contents when inserted outside of
+	// the select element.
+	div.innerHTML = "<option></option>";
+	support.option = !!div.lastChild;
+} )();
+
+
+// We have to close these tags to support XHTML (#13200)
+var wrapMap = {
 
 	// XHTML parsers do not magically insert elements in the
 	// same way that tag soup parsers do. So we cannot shorten
@@ -4736,12 +4953,14 @@ var wrapMap = {
 	_default: [ 0, "", "" ]
 };
 
-// Support: IE <=9 only
-wrapMap.optgroup = wrapMap.option;
-
 wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;
 wrapMap.th = wrapMap.td;
 
+// Support: IE <=9 only
+if ( !support.option ) {
+	wrapMap.optgroup = wrapMap.option = [ 1, "<select multiple='multiple'>", "</select>" ];
+}
+
 
 function getAll( context, tag ) {
 
@@ -4874,36 +5093,7 @@ function buildFragment( elems, context, scripts, selection, ignored ) {
 }
 
 
-( function() {
-	var fragment = document.createDocumentFragment(),
-		div = fragment.appendChild( document.createElement( "div" ) ),
-		input = document.createElement( "input" );
-
-	// Support: Android 4.0 - 4.3 only
-	// Check state lost if the name is set (#11217)
-	// Support: Windows Web Apps (WWA)
-	// `name` and `type` must use .setAttribute for WWA (#14901)
-	input.setAttribute( "type", "radio" );
-	input.setAttribute( "checked", "checked" );
-	input.setAttribute( "name", "t" );
-
-	div.appendChild( input );
-
-	// Support: Android <=4.1 only
-	// Older WebKit doesn't clone checked state correctly in fragments
-	support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked;
-
-	// Support: IE <=11 only
-	// Make sure textarea (and checkbox) defaultValue is properly cloned
-	div.innerHTML = "<textarea>x</textarea>";
-	support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue;
-} )();
-
-
-var
-	rkeyEvent = /^key/,
-	rmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/,
-	rtypenamespace = /^([^.]*)(?:\.(.+)|)/;
+var rtypenamespace = /^([^.]*)(?:\.(.+)|)/;
 
 function returnTrue() {
 	return true;
@@ -5008,8 +5198,8 @@ jQuery.event = {
 			special, handlers, type, namespaces, origType,
 			elemData = dataPriv.get( elem );
 
-		// Don't attach events to noData or text/comment nodes (but allow plain objects)
-		if ( !elemData ) {
+		// Only attach events to objects that accept data
+		if ( !acceptData( elem ) ) {
 			return;
 		}
 
@@ -5033,7 +5223,7 @@ jQuery.event = {
 
 		// Init the element's event structure and main handler, if this is the first
 		if ( !( events = elemData.events ) ) {
-			events = elemData.events = {};
+			events = elemData.events = Object.create( null );
 		}
 		if ( !( eventHandle = elemData.handle ) ) {
 			eventHandle = elemData.handle = function( e ) {
@@ -5191,12 +5381,15 @@ jQuery.event = {
 
 	dispatch: function( nativeEvent ) {
 
-		// Make a writable jQuery.Event from the native event object
-		var event = jQuery.event.fix( nativeEvent );
-
 		var i, j, ret, matched, handleObj, handlerQueue,
 			args = new Array( arguments.length ),
-			handlers = ( dataPriv.get( this, "events" ) || {} )[ event.type ] || [],
+
+			// Make a writable jQuery.Event from the native event object
+			event = jQuery.event.fix( nativeEvent ),
+
+			handlers = (
+				dataPriv.get( this, "events" ) || Object.create( null )
+			)[ event.type ] || [],
 			special = jQuery.event.special[ event.type ] || {};
 
 		// Use the fix-ed jQuery.Event rather than the (read-only) native event
@@ -5320,12 +5513,12 @@ jQuery.event = {
 			get: isFunction( hook ) ?
 				function() {
 					if ( this.originalEvent ) {
-							return hook( this.originalEvent );
+						return hook( this.originalEvent );
 					}
 				} :
 				function() {
 					if ( this.originalEvent ) {
-							return this.originalEvent[ name ];
+						return this.originalEvent[ name ];
 					}
 				},
 
@@ -5464,7 +5657,13 @@ function leverageNative( el, type, expectSync ) {
 						// Cancel the outer synthetic event
 						event.stopImmediatePropagation();
 						event.preventDefault();
-						return result.value;
+
+						// Support: Chrome 86+
+						// In Chrome, if an element having a focusout handler is blurred by
+						// clicking outside of it, it invokes the handler synchronously. If
+						// that handler calls `.remove()` on the element, the data is cleared,
+						// leaving `result` undefined. We need to guard against this.
+						return result && result.value;
 					}
 
 				// If this is an inner synthetic event for an event with a bubbling surrogate
@@ -5629,34 +5828,7 @@ jQuery.each( {
 	targetTouches: true,
 	toElement: true,
 	touches: true,
-
-	which: function( event ) {
-		var button = event.button;
-
-		// Add which for key events
-		if ( event.which == null && rkeyEvent.test( event.type ) ) {
-			return event.charCode != null ? event.charCode : event.keyCode;
-		}
-
-		// Add which for click: 1 === left; 2 === middle; 3 === right
-		if ( !event.which && button !== undefined && rmouseEvent.test( event.type ) ) {
-			if ( button & 1 ) {
-				return 1;
-			}
-
-			if ( button & 2 ) {
-				return 3;
-			}
-
-			if ( button & 4 ) {
-				return 2;
-			}
-
-			return 0;
-		}
-
-		return event.which;
-	}
+	which: true
 }, jQuery.event.addProp );
 
 jQuery.each( { focus: "focusin", blur: "focusout" }, function( type, delegateType ) {
@@ -5682,6 +5854,12 @@ jQuery.each( { focus: "focusin", blur: "focusout" }, function( type, delegateTyp
 			return true;
 		},
 
+		// Suppress native focus or blur as it's already being fired
+		// in leverageNative.
+		_default: function() {
+			return true;
+		},
+
 		delegateType: delegateType
 	};
 } );
@@ -5771,13 +5949,6 @@ jQuery.fn.extend( {
 
 var
 
-	/* eslint-disable max-len */
-
-	// See https://github.com/eslint/eslint/issues/3229
-	rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\/\0>\x20\t\r\n\f]*)[^>]*)\/>/gi,
-
-	/* eslint-enable */
-
 	// Support: IE <=10 - 11, Edge 12 - 13 only
 	// In IE/Edge using regex groups here causes severe slowdowns.
 	// See https://connect.microsoft.com/IE/feedback/details/1736512/
@@ -5814,7 +5985,7 @@ function restoreScript( elem ) {
 }
 
 function cloneCopyEvent( src, dest ) {
-	var i, l, type, pdataOld, pdataCur, udataOld, udataCur, events;
+	var i, l, type, pdataOld, udataOld, udataCur, events;
 
 	if ( dest.nodeType !== 1 ) {
 		return;
@@ -5822,13 +5993,11 @@ function cloneCopyEvent( src, dest ) {
 
 	// 1. Copy private data: events, handlers, etc.
 	if ( dataPriv.hasData( src ) ) {
-		pdataOld = dataPriv.access( src );
-		pdataCur = dataPriv.set( dest, pdataOld );
+		pdataOld = dataPriv.get( src );
 		events = pdataOld.events;
 
 		if ( events ) {
-			delete pdataCur.handle;
-			pdataCur.events = {};
+			dataPriv.remove( dest, "handle events" );
 
 			for ( type in events ) {
 				for ( i = 0, l = events[ type ].length; i < l; i++ ) {
@@ -5864,7 +6033,7 @@ function fixInput( src, dest ) {
 function domManip( collection, args, callback, ignored ) {
 
 	// Flatten any nested arrays
-	args = concat.apply( [], args );
+	args = flat( args );
 
 	var fragment, first, scripts, hasScripts, node, doc,
 		i = 0,
@@ -5939,7 +6108,7 @@ function domManip( collection, args, callback, ignored ) {
 							if ( jQuery._evalUrl && !node.noModule ) {
 								jQuery._evalUrl( node.src, {
 									nonce: node.nonce || node.getAttribute( "nonce" )
-								} );
+								}, doc );
 							}
 						} else {
 							DOMEval( node.textContent.replace( rcleanScript, "" ), node, doc );
@@ -5976,7 +6145,7 @@ function remove( elem, selector, keepData ) {
 
 jQuery.extend( {
 	htmlPrefilter: function( html ) {
-		return html.replace( rxhtmlTag, "<$1></$2>" );
+		return html;
 	},
 
 	clone: function( elem, dataAndEvents, deepDataAndEvents ) {
@@ -6238,6 +6407,27 @@ var getStyles = function( elem ) {
 		return view.getComputedStyle( elem );
 	};
 
+var swap = function( elem, options, callback ) {
+	var ret, name,
+		old = {};
+
+	// Remember the old values, and insert the new ones
+	for ( name in options ) {
+		old[ name ] = elem.style[ name ];
+		elem.style[ name ] = options[ name ];
+	}
+
+	ret = callback.call( elem );
+
+	// Revert the old values
+	for ( name in options ) {
+		elem.style[ name ] = old[ name ];
+	}
+
+	return ret;
+};
+
+
 var rboxStyle = new RegExp( cssExpand.join( "|" ), "i" );
 
 
@@ -6295,7 +6485,7 @@ var rboxStyle = new RegExp( cssExpand.join( "|" ), "i" );
 	}
 
 	var pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal,
-		reliableMarginLeftVal,
+		reliableTrDimensionsVal, reliableMarginLeftVal,
 		container = document.createElement( "div" ),
 		div = document.createElement( "div" );
 
@@ -6330,6 +6520,54 @@ var rboxStyle = new RegExp( cssExpand.join( "|" ), "i" );
 		scrollboxSize: function() {
 			computeStyleTests();
 			return scrollboxSizeVal;
+		},
+
+		// Support: IE 9 - 11+, Edge 15 - 18+
+		// IE/Edge misreport `getComputedStyle` of table rows with width/height
+		// set in CSS while `offset*` properties report correct values.
+		// Behavior in IE 9 is more subtle than in newer versions & it passes
+		// some versions of this test; make sure not to make it pass there!
+		//
+		// Support: Firefox 70+
+		// Only Firefox includes border widths
+		// in computed dimensions. (gh-4529)
+		reliableTrDimensions: function() {
+			var table, tr, trChild, trStyle;
+			if ( reliableTrDimensionsVal == null ) {
+				table = document.createElement( "table" );
+				tr = document.createElement( "tr" );
+				trChild = document.createElement( "div" );
+
+				table.style.cssText = "position:absolute;left:-11111px;border-collapse:separate";
+				tr.style.cssText = "border:1px solid";
+
+				// Support: Chrome 86+
+				// Height set through cssText does not get applied.
+				// Computed height then comes back as 0.
+				tr.style.height = "1px";
+				trChild.style.height = "9px";
+
+				// Support: Android 8 Chrome 86+
+				// In our bodyBackground.html iframe,
+				// display for all div elements is set to "inline",
+				// which causes a problem only in Android 8 Chrome 86.
+				// Ensuring the div is display: block
+				// gets around this issue.
+				trChild.style.display = "block";
+
+				documentElement
+					.appendChild( table )
+					.appendChild( tr )
+					.appendChild( trChild );
+
+				trStyle = window.getComputedStyle( tr );
+				reliableTrDimensionsVal = ( parseInt( trStyle.height, 10 ) +
+					parseInt( trStyle.borderTopWidth, 10 ) +
+					parseInt( trStyle.borderBottomWidth, 10 ) ) === tr.offsetHeight;
+
+				documentElement.removeChild( table );
+			}
+			return reliableTrDimensionsVal;
 		}
 	} );
 } )();
@@ -6454,7 +6692,7 @@ var
 		fontWeight: "400"
 	};
 
-function setPositiveNumber( elem, value, subtract ) {
+function setPositiveNumber( _elem, value, subtract ) {
 
 	// Any relative (+/-) values have already been
 	// normalized at this point
@@ -6559,17 +6797,26 @@ function getWidthOrHeight( elem, dimension, extra ) {
 	}
 
 
-	// Fall back to offsetWidth/offsetHeight when value is "auto"
-	// This happens for inline elements with no explicit setting (gh-3571)
-	// Support: Android <=4.1 - 4.3 only
-	// Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602)
-	// Support: IE 9-11 only
-	// Also use offsetWidth/offsetHeight for when box sizing is unreliable
-	// We use getClientRects() to check for hidden/disconnected.
-	// In those cases, the computed value can be trusted to be border-box
+	// Support: IE 9 - 11 only
+	// Use offsetWidth/offsetHeight for when box sizing is unreliable.
+	// In those cases, the computed value can be trusted to be border-box.
 	if ( ( !support.boxSizingReliable() && isBorderBox ||
+
+		// Support: IE 10 - 11+, Edge 15 - 18+
+		// IE/Edge misreport `getComputedStyle` of table rows with width/height
+		// set in CSS while `offset*` properties report correct values.
+		// Interestingly, in some cases IE 9 doesn't suffer from this issue.
+		!support.reliableTrDimensions() && nodeName( elem, "tr" ) ||
+
+		// Fall back to offsetWidth/offsetHeight when value is "auto"
+		// This happens for inline elements with no explicit setting (gh-3571)
 		val === "auto" ||
+
+		// Support: Android <=4.1 - 4.3 only
+		// Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602)
 		!parseFloat( val ) && jQuery.css( elem, "display", false, styles ) === "inline" ) &&
+
+		// Make sure the element is visible & connected
 		elem.getClientRects().length ) {
 
 		isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box";
@@ -6764,7 +7011,7 @@ jQuery.extend( {
 	}
 } );
 
-jQuery.each( [ "height", "width" ], function( i, dimension ) {
+jQuery.each( [ "height", "width" ], function( _i, dimension ) {
 	jQuery.cssHooks[ dimension ] = {
 		get: function( elem, computed, extra ) {
 			if ( computed ) {
@@ -6780,10 +7027,10 @@ jQuery.each( [ "height", "width" ], function( i, dimension ) {
 					// Running getBoundingClientRect on a disconnected node
 					// in IE throws an error.
 					( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ?
-						swap( elem, cssShow, function() {
-							return getWidthOrHeight( elem, dimension, extra );
-						} ) :
-						getWidthOrHeight( elem, dimension, extra );
+					swap( elem, cssShow, function() {
+						return getWidthOrHeight( elem, dimension, extra );
+					} ) :
+					getWidthOrHeight( elem, dimension, extra );
 			}
 		},
 
@@ -6842,7 +7089,7 @@ jQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft,
 					swap( elem, { marginLeft: 0 }, function() {
 						return elem.getBoundingClientRect().left;
 					} )
-				) + "px";
+			) + "px";
 		}
 	}
 );
@@ -6981,7 +7228,7 @@ Tween.propHooks = {
 			if ( jQuery.fx.step[ tween.prop ] ) {
 				jQuery.fx.step[ tween.prop ]( tween );
 			} else if ( tween.elem.nodeType === 1 && (
-					jQuery.cssHooks[ tween.prop ] ||
+				jQuery.cssHooks[ tween.prop ] ||
 					tween.elem.style[ finalPropName( tween.prop ) ] != null ) ) {
 				jQuery.style( tween.elem, tween.prop, tween.now + tween.unit );
 			} else {
@@ -7226,7 +7473,7 @@ function defaultPrefilter( elem, props, opts ) {
 
 			anim.done( function() {
 
-			/* eslint-enable no-loop-func */
+				/* eslint-enable no-loop-func */
 
 				// The final step of a "hide" animation is actually hiding the element
 				if ( !hidden ) {
@@ -7346,7 +7593,7 @@ function Animation( elem, properties, options ) {
 			tweens: [],
 			createTween: function( prop, end ) {
 				var tween = jQuery.Tween( elem, animation.opts, prop, end,
-						animation.opts.specialEasing[ prop ] || animation.opts.easing );
+					animation.opts.specialEasing[ prop ] || animation.opts.easing );
 				animation.tweens.push( tween );
 				return tween;
 			},
@@ -7519,7 +7766,8 @@ jQuery.fn.extend( {
 					anim.stop( true );
 				}
 			};
-			doAnimation.finish = doAnimation;
+
+		doAnimation.finish = doAnimation;
 
 		return empty || optall.queue === false ?
 			this.each( doAnimation ) :
@@ -7537,7 +7785,7 @@ jQuery.fn.extend( {
 			clearQueue = type;
 			type = undefined;
 		}
-		if ( clearQueue && type !== false ) {
+		if ( clearQueue ) {
 			this.queue( type || "fx", [] );
 		}
 
@@ -7620,7 +7868,7 @@ jQuery.fn.extend( {
 	}
 } );
 
-jQuery.each( [ "toggle", "show", "hide" ], function( i, name ) {
+jQuery.each( [ "toggle", "show", "hide" ], function( _i, name ) {
 	var cssFn = jQuery.fn[ name ];
 	jQuery.fn[ name ] = function( speed, easing, callback ) {
 		return speed == null || typeof speed === "boolean" ?
@@ -7841,7 +8089,7 @@ boolHook = {
 	}
 };
 
-jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( i, name ) {
+jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( _i, name ) {
 	var getter = attrHandle[ name ] || jQuery.find.attr;
 
 	attrHandle[ name ] = function( elem, name, isXML ) {
@@ -8159,8 +8407,8 @@ jQuery.fn.extend( {
 				if ( this.setAttribute ) {
 					this.setAttribute( "class",
 						className || value === false ?
-						"" :
-						dataPriv.get( this, "__className__" ) || ""
+							"" :
+							dataPriv.get( this, "__className__" ) || ""
 					);
 				}
 			}
@@ -8175,7 +8423,7 @@ jQuery.fn.extend( {
 		while ( ( elem = this[ i++ ] ) ) {
 			if ( elem.nodeType === 1 &&
 				( " " + stripAndCollapse( getClass( elem ) ) + " " ).indexOf( className ) > -1 ) {
-					return true;
+				return true;
 			}
 		}
 
@@ -8465,7 +8713,7 @@ jQuery.extend( jQuery.event, {
 				special.bindType || type;
 
 			// jQuery handler
-			handle = ( dataPriv.get( cur, "events" ) || {} )[ event.type ] &&
+			handle = ( dataPriv.get( cur, "events" ) || Object.create( null ) )[ event.type ] &&
 				dataPriv.get( cur, "handle" );
 			if ( handle ) {
 				handle.apply( cur, data );
@@ -8576,7 +8824,10 @@ if ( !support.focusin ) {
 
 		jQuery.event.special[ fix ] = {
 			setup: function() {
-				var doc = this.ownerDocument || this,
+
+				// Handle: regular nodes (via `this.ownerDocument`), window
+				// (via `this.document`) & document (via `this`).
+				var doc = this.ownerDocument || this.document || this,
 					attaches = dataPriv.access( doc, fix );
 
 				if ( !attaches ) {
@@ -8585,7 +8836,7 @@ if ( !support.focusin ) {
 				dataPriv.access( doc, fix, ( attaches || 0 ) + 1 );
 			},
 			teardown: function() {
-				var doc = this.ownerDocument || this,
+				var doc = this.ownerDocument || this.document || this,
 					attaches = dataPriv.access( doc, fix ) - 1;
 
 				if ( !attaches ) {
@@ -8601,7 +8852,7 @@ if ( !support.focusin ) {
 }
 var location = window.location;
 
-var nonce = Date.now();
+var nonce = { guid: Date.now() };
 
 var rquery = ( /\?/ );
 
@@ -8609,7 +8860,7 @@ var rquery = ( /\?/ );
 
 // Cross-browser xml parsing
 jQuery.parseXML = function( data ) {
-	var xml;
+	var xml, parserErrorElem;
 	if ( !data || typeof data !== "string" ) {
 		return null;
 	}
@@ -8618,12 +8869,17 @@ jQuery.parseXML = function( data ) {
 	// IE throws on parseFromString with invalid input.
 	try {
 		xml = ( new window.DOMParser() ).parseFromString( data, "text/xml" );
-	} catch ( e ) {
-		xml = undefined;
-	}
+	} catch ( e ) {}
 
-	if ( !xml || xml.getElementsByTagName( "parsererror" ).length ) {
-		jQuery.error( "Invalid XML: " + data );
+	parserErrorElem = xml && xml.getElementsByTagName( "parsererror" )[ 0 ];
+	if ( !xml || parserErrorElem ) {
+		jQuery.error( "Invalid XML: " + (
+			parserErrorElem ?
+				jQuery.map( parserErrorElem.childNodes, function( el ) {
+					return el.textContent;
+				} ).join( "\n" ) :
+				data
+		) );
 	}
 	return xml;
 };
@@ -8724,16 +8980,14 @@ jQuery.fn.extend( {
 			// Can add propHook for "elements" to filter or add form elements
 			var elements = jQuery.prop( this, "elements" );
 			return elements ? jQuery.makeArray( elements ) : this;
-		} )
-		.filter( function() {
+		} ).filter( function() {
 			var type = this.type;
 
 			// Use .is( ":disabled" ) so that fieldset[disabled] works
 			return this.name && !jQuery( this ).is( ":disabled" ) &&
 				rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&
 				( this.checked || !rcheckableType.test( type ) );
-		} )
-		.map( function( i, elem ) {
+		} ).map( function( _i, elem ) {
 			var val = jQuery( this ).val();
 
 			if ( val == null ) {
@@ -8786,7 +9040,8 @@ var
 
 	// Anchor tag for parsing the document origin
 	originAnchor = document.createElement( "a" );
-	originAnchor.href = location.href;
+
+originAnchor.href = location.href;
 
 // Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport
 function addToPrefiltersOrTransports( structure ) {
@@ -9167,8 +9422,8 @@ jQuery.extend( {
 			// Context for global events is callbackContext if it is a DOM node or jQuery collection
 			globalEventContext = s.context &&
 				( callbackContext.nodeType || callbackContext.jquery ) ?
-					jQuery( callbackContext ) :
-					jQuery.event,
+				jQuery( callbackContext ) :
+				jQuery.event,
 
 			// Deferreds
 			deferred = jQuery.Deferred(),
@@ -9346,7 +9601,8 @@ jQuery.extend( {
 			// Add or update anti-cache param if needed
 			if ( s.cache === false ) {
 				cacheURL = cacheURL.replace( rantiCache, "$1" );
-				uncached = ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + ( nonce++ ) + uncached;
+				uncached = ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + ( nonce.guid++ ) +
+					uncached;
 			}
 
 			// Put hash and anti-cache on the URL that will be requested (gh-1732)
@@ -9479,6 +9735,13 @@ jQuery.extend( {
 				response = ajaxHandleResponses( s, jqXHR, responses );
 			}
 
+			// Use a noop converter for missing script but not if jsonp
+			if ( !isSuccess &&
+				jQuery.inArray( "script", s.dataTypes ) > -1 &&
+				jQuery.inArray( "json", s.dataTypes ) < 0 ) {
+				s.converters[ "text script" ] = function() {};
+			}
+
 			// Convert no matter what (that way responseXXX fields are always set)
 			response = ajaxConvert( s, response, jqXHR, isSuccess );
 
@@ -9569,7 +9832,7 @@ jQuery.extend( {
 	}
 } );
 
-jQuery.each( [ "get", "post" ], function( i, method ) {
+jQuery.each( [ "get", "post" ], function( _i, method ) {
 	jQuery[ method ] = function( url, data, callback, type ) {
 
 		// Shift arguments if data argument was omitted
@@ -9590,8 +9853,17 @@ jQuery.each( [ "get", "post" ], function( i, method ) {
 	};
 } );
 
+jQuery.ajaxPrefilter( function( s ) {
+	var i;
+	for ( i in s.headers ) {
+		if ( i.toLowerCase() === "content-type" ) {
+			s.contentType = s.headers[ i ] || "";
+		}
+	}
+} );
+
 
-jQuery._evalUrl = function( url, options ) {
+jQuery._evalUrl = function( url, options, doc ) {
 	return jQuery.ajax( {
 		url: url,
 
@@ -9609,7 +9881,7 @@ jQuery._evalUrl = function( url, options ) {
 			"text script": function() {}
 		},
 		dataFilter: function( response ) {
-			jQuery.globalEval( response, options );
+			jQuery.globalEval( response, options, doc );
 		}
 	} );
 };
@@ -9931,7 +10203,7 @@ var oldCallbacks = [],
 jQuery.ajaxSetup( {
 	jsonp: "callback",
 	jsonpCallback: function() {
-		var callback = oldCallbacks.pop() || ( jQuery.expando + "_" + ( nonce++ ) );
+		var callback = oldCallbacks.pop() || ( jQuery.expando + "_" + ( nonce.guid++ ) );
 		this[ callback ] = true;
 		return callback;
 	}
@@ -10148,23 +10420,6 @@ jQuery.fn.load = function( url, params, callback ) {
 
 
 
-// Attach a bunch of functions for handling common AJAX events
-jQuery.each( [
-	"ajaxStart",
-	"ajaxStop",
-	"ajaxComplete",
-	"ajaxError",
-	"ajaxSuccess",
-	"ajaxSend"
-], function( i, type ) {
-	jQuery.fn[ type ] = function( fn ) {
-		return this.on( type, fn );
-	};
-} );
-
-
-
-
 jQuery.expr.pseudos.animated = function( elem ) {
 	return jQuery.grep( jQuery.timers, function( fn ) {
 		return elem === fn.elem;
@@ -10371,7 +10626,7 @@ jQuery.each( { scrollLeft: "pageXOffset", scrollTop: "pageYOffset" }, function(
 // Blink bug: https://bugs.chromium.org/p/chromium/issues/detail?id=589347
 // getComputedStyle returns percent when specified for top/left/bottom/right;
 // rather than make the css module depend on the offset module, just check for it here
-jQuery.each( [ "top", "left" ], function( i, prop ) {
+jQuery.each( [ "top", "left" ], function( _i, prop ) {
 	jQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition,
 		function( elem, computed ) {
 			if ( computed ) {
@@ -10389,8 +10644,11 @@ jQuery.each( [ "top", "left" ], function( i, prop ) {
 
 // Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods
 jQuery.each( { Height: "height", Width: "width" }, function( name, type ) {
-	jQuery.each( { padding: "inner" + name, content: type, "": "outer" + name },
-		function( defaultExtra, funcName ) {
+	jQuery.each( {
+		padding: "inner" + name,
+		content: type,
+		"": "outer" + name
+	}, function( defaultExtra, funcName ) {
 
 		// Margin is only for outerHeight, outerWidth
 		jQuery.fn[ funcName ] = function( margin, value ) {
@@ -10434,25 +10692,19 @@ jQuery.each( { Height: "height", Width: "width" }, function( name, type ) {
 } );
 
 
-jQuery.each( ( "blur focus focusin focusout resize scroll click dblclick " +
-	"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " +
-	"change select submit keydown keypress keyup contextmenu" ).split( " " ),
-	function( i, name ) {
-
-	// Handle event binding
-	jQuery.fn[ name ] = function( data, fn ) {
-		return arguments.length > 0 ?
-			this.on( name, null, data, fn ) :
-			this.trigger( name );
+jQuery.each( [
+	"ajaxStart",
+	"ajaxStop",
+	"ajaxComplete",
+	"ajaxError",
+	"ajaxSuccess",
+	"ajaxSend"
+], function( _i, type ) {
+	jQuery.fn[ type ] = function( fn ) {
+		return this.on( type, fn );
 	};
 } );
 
-jQuery.fn.extend( {
-	hover: function( fnOver, fnOut ) {
-		return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );
-	}
-} );
-
 
 
 
@@ -10474,9 +10726,35 @@ jQuery.fn.extend( {
 		return arguments.length === 1 ?
 			this.off( selector, "**" ) :
 			this.off( types, selector || "**", fn );
+	},
+
+	hover: function( fnOver, fnOut ) {
+		return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );
 	}
 } );
 
+jQuery.each(
+	( "blur focus focusin focusout resize scroll click dblclick " +
+	"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " +
+	"change select submit keydown keypress keyup contextmenu" ).split( " " ),
+	function( _i, name ) {
+
+		// Handle event binding
+		jQuery.fn[ name ] = function( data, fn ) {
+			return arguments.length > 0 ?
+				this.on( name, null, data, fn ) :
+				this.trigger( name );
+		};
+	}
+);
+
+
+
+
+// Support: Android <=4.0 only
+// Make sure we trim BOM and NBSP
+var rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;
+
 // Bind a function to a context, optionally partially applying any
 // arguments.
 // jQuery.proxy is deprecated to promote standards (specifically Function#bind)
@@ -10539,6 +10817,11 @@ jQuery.isNumeric = function( obj ) {
 		!isNaN( obj - parseFloat( obj ) );
 };
 
+jQuery.trim = function( text ) {
+	return text == null ?
+		"" :
+		( text + "" ).replace( rtrim, "" );
+};
 
 
 
@@ -10587,7 +10870,7 @@ jQuery.noConflict = function( deep ) {
 // Expose jQuery and $ identifiers, even in AMD
 // (#7102#comment:10, https://github.com/jquery/jquery/pull/557)
 // and CommonJS for browser emulators (#13566)
-if ( !noGlobal ) {
+if ( typeof noGlobal === "undefined" ) {
 	window.jQuery = window.$ = jQuery;
 }
 
diff --git a/banner.js b/banner.js
deleted file mode 100644
index db3974c0c122..000000000000
--- a/banner.js
+++ /dev/null
@@ -1,19 +0,0 @@
-const fs = require("fs");
-const pkg = require("./package.json");
-const filename = "assets/js/main.min.js";
-const script = fs.readFileSync(filename);
-const padStart = str => ("0" + str).slice(-2);
-const dateObj = new Date();
-const date = `${dateObj.getFullYear()}-${padStart(
-  dateObj.getMonth() + 1
-)}-${padStart(dateObj.getDate())}`;
-const banner = `/*!
- * Minimal Mistakes Jekyll Theme ${pkg.version} by ${pkg.author}
- * Copyright 2013-${dateObj.getFullYear()} Michael Rose - mademistakes.com | @mmistakes
- * Licensed under ${pkg.license}
- */
-`;
-
-if (script.slice(0, 3) != "/**") {
-  fs.writeFileSync(filename, banner + script);
-}
diff --git a/docs/Gemfile b/docs/Gemfile
index 5c41b36a2465..bd95289ce62f 100644
--- a/docs/Gemfile
+++ b/docs/Gemfile
@@ -1,6 +1,8 @@
 source "https://rubygems.org"
 
 gem "github-pages", group: :jekyll_plugins
+gem "minimal-mistakes-jekyll", path: ".."
+gem "rake"
 
 gem "tzinfo-data"
 gem "wdm", "~> 0.1.0" if Gem.win_platform?
diff --git a/docs/Rakefile b/docs/Rakefile
new file mode 100644
index 000000000000..1236de9f6c3e
--- /dev/null
+++ b/docs/Rakefile
@@ -0,0 +1,5 @@
+task :default => %i[build]
+
+task :build do
+  sh 'jekyll build --profile --trace --config _config.yml,_config.dev.yml'
+end
diff --git a/docs/_config.dev.yml b/docs/_config.dev.yml
index 45df3dfe29a0..deceee89b697 100644
--- a/docs/_config.dev.yml
+++ b/docs/_config.dev.yml
@@ -1,5 +1,7 @@
 # Develop override settings
 
+theme: minimal-mistakes-jekyll
+remote_theme: null
 url: http://localhost:4000
 
 analytics:
@@ -10,4 +12,4 @@ comments:
     shortname            : "mmistakes-dev"
 
 sass:
-  style: expanded
\ No newline at end of file
+  style: expanded
diff --git a/docs/_config.yml b/docs/_config.yml
index ca1be7055e7c..2266a9047012 100644
--- a/docs/_config.yml
+++ b/docs/_config.yml
@@ -5,7 +5,7 @@
 # For technical reasons, this file is *NOT* reloaded automatically when you use
 # `jekyll serve`. If you change this file, please restart the server process.
 
-remote_theme             : "mmistakes/minimal-mistakes@4.20.0"
+remote_theme             : "mmistakes/minimal-mistakes@master"
 
 minimal_mistakes_skin    : "default" # "air", "aqua", "contrast", "dark", "dirt", "neon", "mint", "plum", "sunrise"
 
@@ -24,8 +24,9 @@ logo                     : # path of logo image to display in the masthead, e.g.
 masthead_title           : # overrides the website title displayed in the masthead, use " " for no title
 # breadcrumbs            : false # true, false (default)
 words_per_minute         : 200
+enable_copy_code_button  : true
 comments:
-  provider               : "false" # false (default), "disqus", "discourse", "facebook", "staticman_v2", "staticman", "utterances", "custom"
+  provider               : "false" # false (default), "disqus", "discourse", "facebook", "staticman_v2", "staticman", "utterances", "giscus", "custom"
   disqus:
     shortname            :
   discourse:
@@ -38,6 +39,13 @@ comments:
   utterances:
     theme                : # "github-light" (default), "github-dark"
     issue_term           : # "pathname" (default)
+  giscus:
+    repo_id              : # Shown during giscus setup at https://giscus.app
+    category_name        : # Full text name of the category
+    category_id          : # Shown during giscus setup at https://giscus.app
+    discussion_term      : # "pathname" (default), "url", "title", "og:title"
+    reactions_enabled    : # '1' for enabled (default), '0' for disabled
+    theme                : # "light" (default), "dark", "dark_dimmed", "transparent_dark", "preferred_color_scheme"
 reCaptcha:
   siteKey                : # "6LdRBykTAAAAAFB46MnIu6ixuxwu9W1ihFF8G60Q"
   secret                 : # "PznnZGu3P6eTHRPLORniSq+J61YEf+A9zmColXDM5icqF49gbunH51B8+h+i2IvewpuxtA9TFoK68TuhUp/X3YKmmqhXasegHYabY50fqF9nJh9npWNhvITdkQHeaOqnFXUIwxfiEeUt49Yoa2waRR7a5LdRAP3SVM8hz0KIBT4="
@@ -59,8 +67,9 @@ algolia:
 # SEO Related
 google_site_verification : "UQj93ERU9zgECodaaXgVpkjrFn9UrDMEzVamacSoQ8Y" # Replace this with your ID, or delete
 bing_site_verification   :
-yandex_site_verification :
 naver_site_verification  :
+yandex_site_verification :
+baidu_site_verification  :
 
 # Social Sharing
 twitter:
@@ -223,6 +232,7 @@ defaults:
       author_profile: false
       share: false
       comments: false
+      toc_sticky: true
       sidebar:
         nav: "docs"
   # _recipes
diff --git a/docs/_data/navigation.yml b/docs/_data/navigation.yml
index 5398e4742279..6893b59c8f10 100644
--- a/docs/_data/navigation.yml
+++ b/docs/_data/navigation.yml
@@ -78,6 +78,8 @@ docs:
         url: /docs/javascript/
   - title: Meta
     children:
+      - title: "FAQ"
+        url: /docs/faq/
       - title: "History"
         url: /docs/history/
       - title: "Contributing"
diff --git a/docs/_data/theme.yml b/docs/_data/theme.yml
new file mode 100644
index 000000000000..1fa7ff01ebdd
--- /dev/null
+++ b/docs/_data/theme.yml
@@ -0,0 +1,3 @@
+# for use with in-page templates
+---
+version: 4.26.2
diff --git a/docs/_docs/01-quick-start-guide.md b/docs/_docs/01-quick-start-guide.md
index bcbb1c3ebf63..0691f1d4ce4e 100644
--- a/docs/_docs/01-quick-start-guide.md
+++ b/docs/_docs/01-quick-start-guide.md
@@ -2,7 +2,7 @@
 title: "Quick-Start Guide"
 permalink: /docs/quick-start-guide/
 excerpt: "How to quickly install and setup Minimal Mistakes for use with GitHub Pages."
-last_modified_at: 2020-07-27
+last_modified_at: 2021-06-07T08:48:05-04:00
 redirect_from:
   - /theme-setup/
 toc: true
@@ -10,9 +10,12 @@ toc: true
 
 Minimal Mistakes has been developed as a [Gem-based theme](http://jekyllrb.com/docs/themes/) for easier use, and 100% compatible with GitHub Pages when used as a remote theme.
 
-**If you enjoy this theme, please consider [supporting me](https://www.paypal.me/mmistakes) for developing and maintaining it.**
+**If you enjoy this theme, please consider [sponsoring me](https://github.com/sponsors/mmistakes) to continue developing and maintaining it.**
+
+[!["Buy Me A Coffee"](https://user-images.githubusercontent.com/1376749/120938564-50c59780-c6e1-11eb-814f-22a0399623c5.png)](https://www.buymeacoffee.com/mmistakes)
 
 [![Support via PayPal](https://cdn.jsdelivr.net/gh/twolfson/paypal-github-button@1.0.0/dist/button.svg)](https://www.paypal.me/mmistakes)
+{: style="margin-top: 0.5em;"}
 
 ## Installing the theme
 
@@ -64,6 +67,7 @@ To install as a remote theme:
    source "https://rubygems.org"
 
    gem "github-pages", group: :jekyll_plugins
+   gem "jekyll-include-cache", group: :jekyll_plugins
    ```
 
 2. Add `jekyll-include-cache` to the `plugins` array of your `_config.yml`.
@@ -74,7 +78,7 @@ To install as a remote theme:
    bundle
    ```
 
-4. Add `remote_theme: "mmistakes/minimal-mistakes@4.20.1"` to your `_config.yml` file. Remove any other `theme:` or `remote_theme:` entry.
+4. Add `remote_theme: "mmistakes/minimal-mistakes@{{ site.data.theme.version }}"` to your `_config.yml` file. Remove any other `theme:` or `remote_theme:` entry.
 
 You may also optionally specify a branch, [tag](https://github.com/mmistakes/minimal-mistakes/tags), or commit to use by appending an @ and the Git ref (e.g., `mmistakes/minimal-mistakes@4.9.0` or `mmistakes/minimal-mistakes@bbf3cbc5fd64a3e1885f3f99eb90ba92af84063d`). This is useful when rolling back to older versions of the theme. If you don't specify a Git ref, the latest on `master` will be used.
 
@@ -105,7 +109,7 @@ To do so fork the [Minimal Mistakes theme](https://github.com/mmistakes/minimal-
 
 [netlify-jekyll]: https://www.netlify.com/blog/2015/10/28/a-step-by-step-guide-jekyll-3.0-on-netlify/
 [gitlab-jekyll]: https://about.gitlab.com/2016/04/07/gitlab-pages-setup/
-[ci-jekyll]: https://jekyllrb.com/docs/continuous-integration/
+[ci-jekyll]: https://jekyllrb.com/docs/deployment/automated/#continuous-integration-service
 
 ### Remove the Unnecessary
 
diff --git a/docs/_docs/02-structure.md b/docs/_docs/02-structure.md
index 5c7016364d8d..18562ad34abf 100644
--- a/docs/_docs/02-structure.md
+++ b/docs/_docs/02-structure.md
@@ -7,7 +7,7 @@ last_modified_at: 2018-03-20T15:19:22-04:00
 
 Nothing clever here :wink:. Layouts, data files, and includes are all placed in their default locations. Stylesheets and scripts in `assets`, and a few development related files in the project's root directory.
 
-**Please note:** If you installed Minimal Mistakes via the Ruby Gem method, theme files like `_layouts`, `_includes`, `_sass`, and `/assets/` will be missing. This is normal as they are bundled with the [`minimal-mistakes-jekyll`](https://rubygems.org/gems/minimal-mistakes-jekyll) Ruby gem.
+**Please note:** If you installed Minimal Mistakes via the Ruby Gem method, theme files like `_layouts`, `_includes`, `_sass`, and `/assets/` will be missing. This is normal as they are bundled with the [`minimal-mistakes-jekyll`](https://rubygems.org/gems/minimal-mistakes-jekyll) Ruby gem. If you would like to make changes, create the files and Jekyll will prefer your local copy.
 {: .notice--info}
 
 ```bash
@@ -18,8 +18,10 @@ minimal-mistakes
 ├── _includes
 |  ├── analytics-providers     # snippets for analytics (Google and custom)
 |  ├── comments-providers      # snippets for comments
-|  ├── footer                  # custom snippets to add to site footer
-|  ├── head                    # custom snippets to add to site head
+|  ├── footer
+|  |  └── custom.html          # custom snippets to add to site footer
+|  ├── head
+|  |  └── custom.html          # custom snippets to add to site head
 |  ├── feature_row             # feature row helper
 |  ├── gallery                 # image gallery helper
 |  ├── group-by-array          # group by array helper for archives
diff --git a/docs/_docs/03-installation.md b/docs/_docs/03-installation.md
index ec12124bbbc2..9bd73655a671 100644
--- a/docs/_docs/03-installation.md
+++ b/docs/_docs/03-installation.md
@@ -84,6 +84,7 @@ gem "minimal-mistakes-jekyll"
 #   gem "jekyll-include-cache"
 #
 # If you have any other plugins, put them here!
+# Cf. https://jekyllrb.com/docs/plugins/installation/
 group :jekyll_plugins do
 end
 ```
diff --git a/docs/_docs/04-upgrading.md b/docs/_docs/04-upgrading.md
index a2a06474c25a..0f81e0365236 100644
--- a/docs/_docs/04-upgrading.md
+++ b/docs/_docs/04-upgrading.md
@@ -2,21 +2,16 @@
 title: "Upgrading"
 permalink: /docs/upgrading/
 excerpt: "Instructions and suggestions for upgrading the theme."
-last_modified_at: 2018-11-25T19:38:20-05:00
+last_modified_at: 2024-04-23T00:43:19+08:00
 toc: true
 ---
 
-If you're using the [Ruby Gem]({{ "/docs/quick-start-guide/#ruby-gem-method" | relative_url }}) or [remote theme]({{ "/docs/quick-start-guide/#github-pages-method" | relative_url }}) versions of Minimal Mistakes, upgrading is fairly painless.
+If you're using the [Ruby Gem]({{ "/docs/quick-start-guide/#gem-based-method" | relative_url }}) or [remote theme]({{ "/docs/quick-start-guide/#remote-theme-method" | relative_url }}) versions of Minimal Mistakes, upgrading is fairly painless.
 
 To check which version you are currently using, view the source of your built site and you should see something similar to:
 
-```
-<!--
-  Minimal Mistakes Jekyll Theme 4.20.1 by Michael Rose
-  Copyright 2013-2020 Michael Rose - mademistakes.com | @mmistakes
-  Free for personal and commercial use under the MIT license
-  https://github.com/mmistakes/minimal-mistakes/blob/master/LICENSE
--->
+```text
+{% include copyright.html %}
 ```
 
 At the top of every `.html` file, `/assets/css/main.css`, and `/assets/js/main.min.js`.
@@ -25,19 +20,21 @@ At the top of every `.html` file, `/assets/css/main.css`, and `/assets/js/main.m
 
 Simply run `bundle update` if you're using Bundler (have a `Gemfile`) or `gem update minimal-mistakes-jekyll` if you're not.
 
-When using Bundler you can downgrade or lock the theme to a specific release ([tag](https://github.com/mmistakes/minimal-mistakes/tags)), branch, or commit. Instead of `gem "minimal-mistakes-jekyll"` you'd add the following to your `Gemfile`:
+When using Bundler you can downgrade or lock the theme to a specific release ([tag][tag]), branch, or commit. Instead of `gem "minimal-mistakes-jekyll"` you'd add the following to your `Gemfile`:
 
 ```ruby
-gem "minimal-mistakes-jekyll", :git => "https://github.com/mmistakes/minimal-mistakes.git", :tag => "4.20.1"
+gem "minimal-mistakes-jekyll", :git => "https://github.com/mmistakes/minimal-mistakes.git", :tag => "{{ site.data.theme.version }}"
 ```
 
-For more information on [installing gems from git repositories](http://bundler.io/v1.16/guides/git.html) consult Bundler's documentation.
+  [tag]: https://github.com/mmistakes/minimal-mistakes/tags
+
+For more information on [installing gems from Git repositories](https://bundler.io/guides/git.html) consult Bundler's documentation.
 
 ## Remote theme
 
-When setting `remote_theme: "mmistakes/minimal-mistakes@4.20.1"` in your `_config.yml` you may also optionally specify a branch, [tag](https://github.com/mmistakes/minimal-mistakes/tags), or commit to use by appending an @ and the Git ref.
+When setting `remote_theme: "mmistakes/minimal-mistakes@{{ site.data.theme.version }}"` in your `_config.yml` you may also optionally specify a branch, [tag][tag], or commit to use by appending an @ and the Git ref.
 
-For example you can roll back to release 4.8.1 with `mmistakes/minimal-mistakes@4.8.1` or a specific commit with `mmistakes/minimal-mistakes@bbf3cbc5fd64a3e1885f3f99eb90ba92af84063d`). For a complete list of theme versions consult the [releases page](https://github.com/mmistakes/minimal-mistakes/releases).
+For example, you can roll back to release 4.8.1 with `mmistakes/minimal-mistakes@4.8.1` or a specific commit with `mmistakes/minimal-mistakes@bbf3cbc5fd64a3e1885f3f99eb90ba92af84063d`). For a complete list of theme versions consult the [releases page](https://github.com/mmistakes/minimal-mistakes/releases).
 
 To update the theme on GitHub Pages you'll need to push up a commit to force a rebuild. An empty commit works well if you don't have anything to push at the moment:
 
diff --git a/docs/_docs/05-configuration.md b/docs/_docs/05-configuration.md
index 3cb1de043fdf..09272ec6f554 100644
--- a/docs/_docs/05-configuration.md
+++ b/docs/_docs/05-configuration.md
@@ -2,8 +2,28 @@
 title: "Configuration"
 permalink: /docs/configuration/
 excerpt: "Settings for configuring and customizing the theme."
-last_modified_at: 2020-08-04T11:26:21-04:00
+last_modified_at: 2021-05-11T10:40:42-04:00
 toc: true
+
+skins:
+  - name: air
+    description: Calm and blue.
+  - name: aqua
+    description: Just like water.
+  - name: contrast
+    description: Retro feel with bold blue links and inverted footer.
+  - name: dark
+    description: Inverted palette, white text on a dark background.
+  - name: dirt
+    description: Earthy tones.
+  - name: mint
+    description: Minty fresh green.
+  - name: neon
+    description: Inverted palette, white text on a dark background.
+  - name: plum
+    description: Purple reigns supreme.
+  - name: sunrise
+    description: Oranges and red.
 ---
 
 Settings that affect your entire site can be changed in [Jekyll's configuration file](https://jekyllrb.com/docs/configuration/): `_config.yml`, found in the root of your project. If you don't have this file you'll need to copy or create one using the theme's [default `_config.yml`](https://github.com/mmistakes/minimal-mistakes/blob/master/_config.yml) as a base.
@@ -28,93 +48,38 @@ theme: minimal-mistakes-jekyll
 Easily change the color scheme of the theme using one of the provided "skins":
 
 ```yaml
-minimal_mistakes_skin: "default" # "air", "aqua", "contrast", "dark", "dirt", "neon", "mint", "plum" "sunrise"
+minimal_mistakes_skin: "default" # "air", "aqua", "contrast", "dark", "dirt", "neon", "mint", "plum", "sunrise"
 ```
 
-**Note:** If you have made edits to the theme's CSS files be sure to update [`/assets/css/main.scss`](https://github.com/mmistakes/minimal-mistakes/blob/master/assets/css/main.scss) to include `@import "minimal-mistakes/skins/{{ site.minimal_mistakes_skin | default: 'default' }}"; // skin` before the `minimal-mistakes` import.
+**Note:** If you have made edits to the theme's CSS files be sure to update [`/assets/css/main.scss`](https://github.com/mmistakes/minimal-mistakes/blob/master/assets/css/main.scss) to include {% raw %}`@import "minimal-mistakes/skins/{{ site.minimal_mistakes_skin | default: 'default' }}"; // skin`{% endraw %} before the `minimal-mistakes` import.
 {: .notice--warning}
 
-#### Air skin: `air`
-
+{% for skin in page.skins %}
+#### {{ skin.name | capitalize }} skin: `{{ skin.name }}`
 {:.no_toc}
 
 <figure class="half">
-    <a href="{{ site.baseurl }}/assets/images/air-skin-archive-large.png"><img src="{{ site.baseurl }}/assets/images/air-skin-archive.png"></a>
-    <a href="{{ site.baseurl }}/assets/images/air-skin-post-large.png"><img src="{{ site.baseurl }}/assets/images/air-skin-post.png"></a>
-    <figcaption>Calm and blue.</figcaption>
-</figure>
-
-#### Aqua skin: `aqua`
-
-<figure class="half">
-  <a href="{{ site.baseurl }}/assets/images/aqua-skin-archive-large.png"><img src="{{ site.baseurl }}/assets/images/aqua-skin-archive.png"></a>
-  <a href="{{ site.baseurl }}/assets/images/aqua-skin-post-large.png"><img src="{{ site.baseurl }}/assets/images/aqua-skin-post.png"></a>
-  <figcaption>Just like water.</figcaption>
-</figure>
-
-#### Contrast skin: `contrast`
-
-<figure class="half">
-  <a href="{{ site.baseurl }}/assets/images/contrast-skin-archive-large.png"><img src="{{ site.baseurl }}/assets/images/contrast-skin-archive.png"></a>
-  <a href="{{ site.baseurl }}/assets/images/contrast-skin-post-large.png"><img src="{{ site.baseurl }}/assets/images/contrast-skin-post.png"></a>
-  <figcaption>Retro feel with bold blue links and inverted footer.</figcaption>
-</figure>
-
-#### Dark skin: `dark`
-
-<figure class="half">
-  <a href="{{ site.baseurl }}/assets/images/dark-skin-archive-large.png"><img src="{{ site.baseurl }}/assets/images/dark-skin-archive.png"></a>
-  <a href="{{ site.baseurl }}/assets/images/dark-skin-post-large.png"><img src="{{ site.baseurl }}/assets/images/dark-skin-post.png"></a>
-  <figcaption>Inverted palette, white text on a dark background.</figcaption>
-</figure>
-
-#### Dirt skin: `dirt`
-
-<figure class="half">
-  <a href="{{ site.baseurl }}/assets/images/dirt-skin-archive-large.png"><img src="{{ site.baseurl }}/assets/images/dirt-skin-archive.png"></a>
-  <a href="{{ site.baseurl }}/assets/images/dirt-skin-post-large.png"><img src="{{ site.baseurl }}/assets/images/dirt-skin-post.png"></a>
-  <figcaption>Earthy tones.</figcaption>
-</figure>
-
-#### Mint skin: `mint`
-
-{:.no_toc}
-
-<figure class="half">
-  <a href="{{ site.baseurl }}/assets/images/mint-skin-archive-large.png"><img src="{{ site.baseurl }}/assets/images/mint-skin-archive.png"></a>
-  <a href="{{ site.baseurl }}/assets/images/mint-skin-post-large.png"><img src="{{ site.baseurl }}/assets/images/mint-skin-post.png"></a>
-  <figcaption>Minty fresh green.</figcaption>
-</figure>
-
-#### Neon skin: `neon`
-
-<figure class="half">
-  <a href="{{ site.baseurl }}/assets/images/neon-skin-archive-large.png"><img src="{{ site.baseurl }}/assets/images/neon-skin-archive.png"></a>
-  <a href="{{ site.baseurl }}/assets/images/neon-skin-post-large.png"><img src="{{ site.baseurl }}/assets/images/neon-skin-post.png"></a>
-  <figcaption>Inverted palette, white text on a dark background.</figcaption>
-</figure>
-
-#### Neon skin: `plum`
-
-<figure class="half">
-  <a href="{{ site.baseurl }}/assets/images/plum-skin-archive-large.png"><img src="{{ site.baseurl }}/assets/images/plum-skin-archive.png"></a>
-  <a href="{{ site.baseurl }}/assets/images/plum-skin-post-large.png"><img src="{{ site.baseurl }}/assets/images/plum-skin-post.png"></a>
-  <figcaption>Purple reigns supreme.</figcaption>
-</figure>
-
-#### Sunrise skin: `sunrise`
-
-<figure class="half">
-  <a href="{{ site.baseurl }}/assets/images/sunrise-skin-archive-large.png"><img src="{{ site.baseurl }}/assets/images/sunrise-skin-archive.png"></a>
-  <a href="{{ site.baseurl }}/assets/images/sunrise-skin-post-large.png"><img src="{{ site.baseurl }}/assets/images/sunrise-skin-post.png"></a>
-  <figcaption>Oranges and red.</figcaption>
+  <a href="{{ skin.name | prepend: "/assets/images/" | append: "-skin-archive-large.png" | relative_url }}">
+    <img
+      src="{{ skin.name | prepend: "/assets/images/" | append: "-skin-archive.png" | relative_url }}"
+      alt="Archive page of {{ skin.name | capitalize }} skin"
+      />
+  </a>
+  <a href="{{ skin.name | prepend: "/assets/images/" | append: "-skin-post-large.png" | relative_url }}">
+    <img
+      src="{{ skin.name | prepend: "/assets/images/" | append: "-skin-post.png" | relative_url }}"
+      alt="Posts page of {{ skin.name | capitalize }} skin"
+      />
+  </a>
+  <figcaption>{{ skin.description }}</figcaption>
 </figure>
+{% endfor %}
 
 ### Site locale
 
 `site.locale` is used to declare the primary language for each web page within the site.
 
-_Example:_ `locale: "en-US"` sets the `lang` attribute for the site to the _United States_ flavor of English, while `en-GB` would be for the `United Kingdom` style of English. Country codes are optional and the shorter variation `locale: "en"` is also acceptable. To find your language and country codes check this [reference table](<https://msdn.microsoft.com/en-us/library/ee825488(v=cs.20).aspx>).
+_Example:_ `locale: "en-US"` sets the `lang` attribute for the site to the _United States_ flavor of English, while `en-GB` would be for the _United Kingdom_ style of English. Country codes are optional and the shorter variation `locale: "en"` is also acceptable. To find your language and country codes check this [reference table](<https://msdn.microsoft.com/en-us/library/ee825488(v=cs.20).aspx>).
 
 Properly setting the locale is important for associating localized text found in the [**UI Text**]({{ "/docs/ui-text/" | relative_url }}) data file. An improper match will cause parts of the UI to disappear (eg. button labels, section headings, etc).
 
@@ -131,7 +96,7 @@ You also have the option of customizing the separation character used in SEO-fri
 
 _Example:_ `title_separator: "|"` would produce page titles like `Sample Page | My Awesome Site`.
 
-**Note:** Long site titles have been known to break the masthead layout. Avoid adding a long "tagline" to the title prevent this from happening eg. `My Awesome Site is the Best Because I Say So".
+**Note:** Long site titles have been known to break the masthead layout. Avoid adding a long "tagline" to the title to prevent this from happening, e.g. `My Awesome Site is the Best Because I Say So`.
 {: .notice--warning}
 
 ### Site subtitle
@@ -157,11 +122,11 @@ _Example:_ `description: "A flexible Jekyll theme for your blog or site with a m
 
 ### Site URL
 
-The base hostname and protocol for your site. If you're hosting with GitHub Pages this will be something like `url: "https://mmistakes.github.io"` or `url: "https://mademistakes.com"` if you have a custom domain name.
+The base hostname and protocol for your site. If you're hosting on GitHub Pages this will be something like `url: "https://mmistakes.github.io"` or `url: "https://mademistakes.com"` if you have a custom domain name.
 
 GitHub Pages now [forces `https://` for new sites](https://help.github.com/articles/securing-your-github-pages-site-with-https/) so be mindful of that when setting your URL to avoid mixed-content warnings.
 
-**Note:** Jekyll 3.3 overrides this value with `url: http://localhost:4000` when running `jekyll serve` locally in development. If you want to avoid this behavior set `JEKYLL_ENV=production` to [force the environment](http://jekyllrb.com/docs/configuration/#specifying-a-jekyll-environment-at-build-time) to production.
+**Note:** Jekyll 3.3 overrides this value with `url: http://localhost:4000` when running `jekyll serve` locally in development. If you want to avoid this behavior set `JEKYLL_ENV=production` to [force the environment](https://jekyllrb.com/docs/configuration/environments/) to production.
 {: .notice--warning}
 
 ### Site base URL
@@ -183,9 +148,9 @@ Add your repository name with organization to your site's configuration file, `_
 repository: "username/repo-name"
 ```
 
-"NWO" stands for "name with owner." It is GitHub lingo for the username of the owner of the repository plus a forward slash plus the name of the repository, e.g. `mmistakes/minimal-mistakes`, where **mmistakes** is the owner and **minimal-mistakes** is the repository name.
+"NWO" stands for "**n**ame **w**ith **o**wner." It is GitHub lingo for the username of the owner of the repository plus a forward slash plus the name of the repository, e.g. `mmistakes/minimal-mistakes`, where **mmistakes** is the owner and **minimal-mistakes** is the repository name.
 
-Your `site.github.*` fields should fill in like normal. If you run Jekyll with the --verbose flag, you should be able to see all the API calls made.
+Your `site.github.*` fields should be filled in like normal. If you run Jekyll with the `--verbose` flag, you should be able to see all the API calls made.
 
 If you don't set `repository` correctly you may see the following error when trying to `serve` or `build` your Jekyll site:
 
@@ -250,6 +215,12 @@ By default your site title is used in the masthead. You can override this text b
 masthead_title: "My Custom Title"
 ```
 
+### Site RTL direction
+
+`site.rtl` is used to turn the direction of the page into right to left. This option can be used for RTL languages (like Arabic, Persian, etc)
+
+_Example:_ `rtl: true` sets the direction of the page to right to left. By default this option is `rtl: false`.
+
 ### Breadcrumb navigation (beta)
 
 Enable breadcrumb links to help visitors better navigate deep sites. Because of the fragile method of implementing them they don't always produce accurate links reliably. For best results:
@@ -285,6 +256,12 @@ defaults:
 
 To disable post date for a post, add `show_date: false` to its YAML Front Matter, overriding what was set in `_config.yml`.
 
+When dates are shown on blog posts or pages, a date format will be chosen to format the date string. The default format is `"%B %-d, %Y"`, which will be displayed like "February 24, 2016". You can choose your date format by referencing this [cheat sheet](https://www.shortcutfoo.com/app/dojos/ruby-date-format-strftime/cheatsheet). For example, use your date format in `_config.yml`.
+
+```yaml
+date_format: "%Y-%m-%d"
+```
+
 ### Reading time
 
 Enable estimated reading time snippets with `read_time: true` in YAML Front Matter. `200` has been set as the default words per minute value --- which can be changed by adjusting `words_per_minute:` in `_config.yml`.
@@ -305,38 +282,65 @@ defaults:
 
 To disable reading time for a post, add `read_time: false` to its YAML Front Matter to override what was set in `_config.yml`.
 
-`words_per_minute` can also be adjusted per-page basis by adding to its YAML Front Matter. This is useful for sites with multi-lingual content where you'd like specify a different value from the site config.
+`words_per_minute` can also be adjusted on a per-page basis by adding to its YAML Front Matter. This is useful for sites with multi-lingual content where you'd like specify a different value from the site config.
 
 ```yaml
 words_per_minute: 250
 ```
 
-### Post meta separator
+### Page meta separator
 
-To customise the separator between the post date and reading time (if both are enabled), edit `.post__meta-sep::before` in a [custom stylesheet]({{ "/docs/stylesheets/" | relative_url }}).
+To customise the separator between the page date and reading time (if both are enabled), edit `.page__meta-sep::before` in a [custom stylesheet]({{ "/docs/stylesheets/" | relative_url }}).
 
 For example,
 
 ```css
-.post__meta-sep::before {
+.page__meta-sep::before {
   content: "\2022";
   padding-left: 0.5em;
   padding-right: 0.5em;
 }
 ```
 
+### Code block copy button
+
+*New in v4.26.0*
+
+To enable a copy button on code blocks, add the following to `_config.yml`:
+
+```yaml
+enable_copy_code_button: true
+```
+
+When enabled site-wide, the button can be disabled on individual code blocks by adding `no-copy` to the code block's class list.
+
+````markdown
+```
+Hey, I have a "copy to clipboard" button!
+```
+````
+
+````markdown
+```
+But I don't have one.
+```
+{: .no-copy}
+````
+{: .no-copy}
+
 ### Comments
 
-[**Disqus**](https://disqus.com/), [**Discourse**](https://www.discourse.org/), [**Facebook**](https://developers.facebook.com/docs/plugins/comments), [**utterances**](https://utteranc.es/), and static-based commenting via [**Staticman**](https://staticman.net/) are built into the theme. First set the comment provider you'd like to use:
+[**Disqus**](https://disqus.com/), [**Discourse**](https://www.discourse.org/), [**Facebook**](https://developers.facebook.com/docs/plugins/comments), [**utterances**](https://utteranc.es/), [**giscus**](https://giscus.app/) and static-based commenting via [**Staticman**](https://staticman.net/) are built into the theme. First set the comment provider you'd like to use:
 
 | Name             | Comment Provider          |
 | ---------------- | ------------------------- |
 | **disqus**       | Disqus                    |
 | **discourse**    | Discourse                 |
 | **facebook**     | Facebook Comments         |
-| **staticman_v2** | Staticman v2              |
+| **staticman_v2** | Staticman v2 / v3         |
 | **staticman**    | Staticman v1 (deprecated) |
 | **utterances**   | utterances                |
+| **giscus**       | giscus                    |
 | **custom**       | Other                     |
 
 Then add `comments: true` to each document you want comments visible on.
@@ -355,7 +359,7 @@ defaults:
 
 If you add `comments: false` to a post's YAML Front Matter it will override the default and disable comments for just that post.
 
-**Note:** Comments are disabled by default in `development`. To enable when testing/building locally be sure to set
+**Note:** Comments are disabled in `development`. To enable when testing/building locally be sure to set
 `JEKYLL_ENV=production` to [force the environment](http://jekyllrb.com/docs/configuration/#specifying-a-jekyll-environment-at-build-time) to production.
 {: .notice--info}
 
@@ -416,6 +420,36 @@ comments:
   utterances:
     theme: "github-light" # "github-dark"
     issue_term: "pathname"
+    label: "comment" # Optional - must be existing label.
+```
+
+#### giscus comments
+
+To use giscus you will need to [install the app](https://github.com/apps/giscus) to your GitHub repository.
+
+The next step is to go to <https://giscus.app> and fill out the desired settings. This will generate JavaScript that will provide you with the settings you will need to configure things below.
+
+You'll need to ensure you've added the following to `_config.yml`:
+
+```yaml
+repository: # GitHub username/repo-name e.g. "mmistakes/minimal-mistakes"
+```
+
+**Note:** Make sure the repo is public, otherwise your readers will not be able to view the issues/comments. The [discussions feature](https://docs.github.com/en/discussions) also needs to be active on your repo.
+{: .notice--warning}
+
+To enable giscus on the front end set `comments.provider` and the other additional options.
+
+```yaml
+comments:
+  provider: "giscus"
+  giscus:
+    repo_id              : # Shown during giscus setup at https://giscus.app
+    category_name        : # Full text name of the category
+    category_id          : # Shown during giscus setup at https://giscus.app
+    discussion_term      : # "pathname" (default), "url", "title", "og:title"
+    reactions_enabled    : # '1' for enabled (default), '0' for disabled
+    theme                : # "light" (default), "dark", "dark_dimmed", "transparent_dark", "preferred_color_scheme"
 ```
 
 #### Static-based comments via Staticman
@@ -425,13 +459,16 @@ Transform user comments into `_data` files that live inside of your GitHub repos
 **Note:** Looking to migrate comments from a WordPress based site? Give [this tool](https://github.com/arthurlacoste/wordpress-comments-jekyll-staticman) a try.
 {: .notice--info}
 
-**Note:** Please note that as of September 2018, Staticman is reaching GitHub API limits due to its popularity, and it is recommended by its maintainer that users deploy their own instances for production (use `site.staticman.endpoint`).
+**Note:** Please note that as of September 2018, Staticman is reaching GitHub API limits due to its popularity, and it is recommended by its maintainer that users deploy their own instances for production (use `site.staticman.endpoint`).  Consult the Staticman "[Get Started](https://staticman.net/docs/index.html)" guide for more info.
 {: .notice--warning}
 
-##### Add Staticman as a collaborator
+##### Add Staticman as a collaborator on GitHub (legacy)
 
-1. Allow Staticman push access to your GitHub repository by clicking on **Settings**, then the **Collaborators** tab and adding `staticmanapp` as a collaborator.
-2. To accept the pending invitation visit: `https://api.staticman.net/v2/connect/{your GitHub username}/{your repository name}`. Consult the Staticman "[Get Started](https://staticman.net/docs/index.html)" guide for more info.
+1. Allow Staticman push access to your GitHub repository by clicking on **Settings**, then the **Collaborators** tab and adding your GitHub bot as a collaborator.
+2. To accept the pending invitation visit: `https://{your Staticman v2/3 API}/v[2|3]/connect/{your GitHub username}/{your repository name}`.
+
+**Note:** The new GitHub App authentication method is recommended for GitHub repositories to avoid the API rate limit.
+{: .notice--info}
 
 ##### Configure Staticman
 
@@ -524,7 +561,7 @@ By default comment moderation is enabled in `staticman.yml`. As new comments are
 
 To skip this moderation step simply set `moderation: false`.
 
-**ProTip:** Create a GitHub webhook that sends a `POST` request to the following payload URL `https://api.staticman.net/v2/webhook` and triggers a "Pull request" event to delete Staticman branches on merge.
+**ProTip:** Create a GitHub webhook that sends a `POST` request to the following payload URL `https://{your Staticman API URL}/v2/webhook` and triggers a "Pull request" event to delete Staticman branches on merge.
 {: .notice--info}
 
 ![pull-request webhook]({{ "/assets/images/mm-staticman-pr-webhook.jpg" | relative_url }})
@@ -559,6 +596,15 @@ atom_feed:
 **Note:** By default the site feed is linked in two locations: inside the [`<head>` element](https://github.com/mmistakes/minimal-mistakes/blob/master/_includes/head.html) and at the bottom of every page in the [site footer](https://github.com/mmistakes/minimal-mistakes/blob/master/_includes/footer.html).
 {: .notice--info}
 
+### Disable Feed Icons
+
+By default the theme links to `feed.xml` generated in the root of your site by the **jekyll-feed** plugin. To remove the RSS icon in the header and footer, update `atom_feed` in `_config.yml` like so:
+
+```yaml
+atom_feed:
+  hide: true
+```
+
 ### Site search
 
 To enable site-wide search add `search: true` to your `_config.yml`.
@@ -569,6 +615,13 @@ To enable site-wide search add `search: true` to your `_config.yml`.
 
 The default search uses [**Lunr**](https://lunrjs.com/) to build a search index of all post and your documents in collections. This method is 100% compatible with sites hosted on GitHub Pages.
 
+To have it index all pages, update `lunr` in `_config.yml` like so:
+
+```yaml
+lunr:
+  search_within_pages: true
+```
+
 **Note:** Only the first 50 words of a post or page's body content is added to the Lunr search index. Setting `search_full_content` to `true` in your `_config.yml` will override this and could impact page load performance.
 {: .notice--warning}
 
@@ -662,7 +715,7 @@ Formerly known as [Google Webmaster Tools](https://www.google.com/webmasters/too
 
 #### Bing Webmaster Tools
 
-There are several ways to [verify site ownership](https://www.bing.com/webmaster/help/how-to-verify-ownership-of-your-site-afcfefc6) --- the easiest adding an authentication code to your config file.
+There are several ways to [verify site ownership](https://www.bing.com/webmasters/help/add-and-verify-site-12184f8b) --- the easiest adding an authentication code to your config file.
 
 Copy and paste the string inside of `content`:
 
@@ -706,6 +759,22 @@ Into `_config.yml`
 yandex_site_verification: "2132801JL"
 ```
 
+#### Baidu
+
+There are several ways to verify site ownership — the easiest is adding an authentication code to your config file.
+
+Copy and paste the string inside of `content`:
+
+```html
+<meta name="baidu-site-verification" content="code-iA0wScWXN1" />
+```
+
+Into `_config.yml`
+
+```yaml
+baidu_site_verification: "code-iA0wScWXN1"
+```
+
 #### Twitter Cards and Facebook Open Graph
 
 To improve the appearance of links shared from your site to social networks like Twitter and Facebook be sure to configure the following.
@@ -723,7 +792,7 @@ twitter:
 
 And if I assign `@mmistakes` as an author account it will appear in the Twitter Card along with `@mmistakes-theme`, attributed as a creator of the page being shared.
 
-**Note**: You need to validate cards are working and have Twitter [approve Player Cards](https://developer.twitter.com/en/docs/tweets/optimize-with-cards/overview/player-card) before they will begin showing up.
+**Note**: You need to validate cards are working and have Twitter [approve Player Cards](https://developer.twitter.com/en/docs/tweets/optimize-with-cards/overview/player-card) before they begin showing up.
 {: .notice--warning}
 
 ##### Facebook Open Graph
@@ -743,33 +812,36 @@ facebook:
   username: "michaelrose"  # https://www.facebook.com/michaelrose
 ```
 
-**ProTip:** To debug Open Graph data use [this tool](https://developers.facebook.com/tools/debug/og/object?q=https%3A%2F%2Fmademistakes.com) to test your pages. If content changes aren't reflected you will probably have to hit the **Fetch new scrape information** button to refresh.
+**ProTip:** To debug Open Graph data use [this tool](https://developers.facebook.com/tools/debug/) to test your pages. If content changes aren't reflected you will probably have to hit the **Scrape Again** button to refresh.
 {: .notice--info}
 
 ##### Open Graph default image
 
-For pages that don't have a `header.image` assigned in their YAML Front Matter, `site.og_image` will be used as a fallback. Use your logo, icon, avatar or something else that is meaningful. Just make sure it is place in the `/assets/images/` folder, a minimum size of 120px by 120px, and less than 1MB in file size.
+For pages that don't have a `header.image` assigned in their YAML Front Matter, `site.og_image` will be used as a fallback. Use your logo, icon, avatar or something else that is meaningful. Just make sure it is placed in the `/assets/images/` folder, has a minimum size of 120px by 120px, and is less than 1MB in file size.
 
 ```yaml
 og_image: /assets/images/site-logo.png
 ```
 
-<figure>
-  <img src="{{ '/assets/images/mm-twitter-card-summary-image.jpg' | relative_url }}" alt="Twitter Card summary example">
-  <figcaption>Example of a image placed in a Summary Card.</figcaption>
-</figure>
+{% include figure
+   image_path="/assets/images/mm-twitter-card-summary-image.jpg"
+   alt="Twitter Card summary example"
+   caption="Example of an image placed in a Summary Card."
+%}
 
 Documents who have a `header.image` assigned in their YAML Front Matter will appear like this when shared on Twitter and Facebook.
 
-<figure>
-  <img src="{{ '/assets/images/mm-twitter-card-summary-large.jpg' | relative_url }}" alt="page shared on Twitter">
-  <figcaption>Shared page on Twitter with header image assigned.</figcaption>
-</figure>
+{% include figure
+   image_path="/assets/images/mm-twitter-card-summary-large.jpg"
+   alt="page shared on Twitter"
+   caption="Shared page on Twitter with header image assigned."
+%}
 
-<figure>
-  <img src="{{ '/assets/images/facebook-share-example.jpg' | relative_url }}" alt="page shared on Facebook">
-  <figcaption>Shared page on Facebook with header image assigned.</figcaption>
-</figure>
+{% include figure
+   image_path="/assets/images/facebook-share-example.jpg"
+   alt="page shared on Facebook"
+   caption="Shared page on Facebook with header image assigned."
+%}
 
 ##### Include your social profile in search results
 
@@ -809,7 +881,7 @@ analytics:
 
 To use another provider not included with the theme set `provider: "custom"` then add their embed code to `_includes/analytics-providers/custom.html`.
 
-**Note:** Analytics are disabled by default in `development`. To enable when testing/building locally be sure to set
+**Note:** Analytics are disabled in `development`. To enable when testing/building locally be sure to set
 `JEKYLL_ENV=production` to [force the environment](http://jekyllrb.com/docs/configuration/#specifying-a-jekyll-environment-at-build-time) to production.
 {: .notice--info}
 
@@ -835,7 +907,7 @@ Author links are all optional, include the ones you want visible under the `auth
 | Name | Description |
 | --- | --- |
 | **label** | Link label (e.g. `"Twitter"`) |
-| **icon** | [Font Awesome icon](https://fontawesome.com/icons?d=gallery) classes (e.g. `"fab fa-fw fa-twitter-square"`) |
+| **icon** | [Font Awesome icon](https://fontawesome.com/v6/search) classes (e.g. `"fab fa-fw fa-twitter-square"`) |
 | **url** | Link URL (e.g. `"https://twitter.com/mmistakes"`) |
 
 ```yaml
@@ -868,7 +940,7 @@ Footer links can be added under the `footer.links` array.
 | Name | Description |
 | --- | --- |
 | **label** | Link label (e.g. `"Twitter"`) |
-| **icon** | [Font Awesome icon](https://fontawesome.com/icons?d=gallery) classes (e.g. `"fab fa-fw fa-twitter-square"`) |
+| **icon** | [Font Awesome icon](https://fontawesome.com/v6/search) classes (e.g. `"fab fa-fw fa-twitter-square"`) |
 | **url** | Link URL (e.g. `"https://twitter.com/mmistakes"`) |
 
 ```yaml
@@ -896,7 +968,7 @@ Nothing out of the ordinary here. `include` and `exclude` may be the only things
 
 ## Conversion and Markdown processing
 
-Again nothing out of the ordinary here as the theme adheres to the defaults used by GitHub Pages. [**Kramdown**](http://kramdown.gettalong.org/) for Markdown conversion, [**Rouge**](http://rouge.jneen.net/) syntax highlighting, and incremental building disabled. Change them if you need to.
+Again nothing out of the ordinary here as the theme adheres to the defaults used by GitHub Pages. [**Kramdown**](http://kramdown.gettalong.org/) for Markdown conversion, [**Rouge**](https://rouge.jneen.net/) syntax highlighting, and incremental building disabled. Change them if you need to.
 
 ## Front Matter Defaults
 
@@ -968,9 +1040,76 @@ The paginator only works on files with name `index.html`. To use pagination in a
 paginate_path: /recent/page:num/
 ```
 
-**Please note:** When using Jekyll's default [pagination plugin](https://jekyllrb.com/docs/pagination/) `paginator.posts` can only be called once. If you're looking for something more powerful that can paginate category, tag, and collection pages I suggest [**jekyll-paginate-v2**](https://github.com/sverrirs/jekyll-paginate-v2).
+**Please note:** When using Jekyll's default [pagination plugin](https://jekyllrb.com/docs/pagination/) `paginator.posts` can only be called once. If you're looking for something more powerful that can paginate category, tag, and collection pages I suggest **[jekyll-paginate-v2][jekyll-paginate-v2]**.
 {: .notice--info}
 
+  [jekyll-paginate-v2]: https://github.com/sverrirs/jekyll-paginate-v2
+
+### Paginate V2
+
+*New in v4.26.0*
+
+If you're using [Jekyll Paginate V2][jekyll-paginate-v2], you can enjoy its powerful features by removing `paginate` and `paginate_path` and adding the following configuration to your `_config.yml`:
+
+```yaml
+pagination:
+  enabled: true
+  collection: 'posts'
+  per_page: 5
+  permalink: '/page/:num/'  # Pages are index.html inside this folder (default)
+  title: ':title - page :num'
+  limit: 0
+  sort_field: 'date'
+  sort_reverse: true
+  trail:
+    before: 2
+    after: 2
+```
+
+Then, create `/posts/index.html` with the following content:
+
+```html
+---
+title: "Posts"
+layout: home
+permalink: /posts/
+pagination:
+  enabled: true
+---
+```
+
+Your posts will be paginated at `/posts/`, `/posts/page/2/` and `/posts/page/3/` etc.
+
+Similarly, if you want to paginate a collection or a tag, you can create another `index.html` at an appropriate location, and add configuration to the `pagination` key in the front matter, like this:
+
+```html
+---
+title: "Lovely pets"
+layout: home
+permalink: /pets/
+pagination:
+  enabled: true
+  collection:
+    - cat
+    - dog
+---
+```
+
+<div class="notice--danger" markdown="1">
+**Note:** There are two more configuration options from Jekyll Paginate V2 that this theme doesn't support yet. You should either leave them out or use their default values as shown below. Changing them may lead to unexpected results and you're on your own.
+
+```yaml
+pagination:
+  # Optional, the default file extension for generated pages (e.g html, json, xml).
+  # Internally this is set to html by default
+  extension: html
+
+  # Optional, the default name of the index file for generated pages (e.g. 'index.html')
+  # Without file extension
+  indexpage: 'index'
+```
+</div>
+
 ### Timezone
 
 This sets the timezone environment variable, which Ruby uses to handle time and date creation and manipulation. Any entry from the [IANA Time Zone Database](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones) is valid. The default is the local time zone, as set by your operating system.
@@ -1093,7 +1232,7 @@ If you care at all about performance (and really who doesn't) compressing the HT
 
 If you're hosting with GitHub Pages there aren't many options afforded to you for optimizing the HTML Jekyll generates. Thankfully there is some Liquid wizardry you can use to strip whitespace and comments to reduce file size.
 
-There's a variety of configurations and caveats to using the `compress` layout, so be sure to read through the [documentation](http://jch.penibelst.de/) if you decide to make change the defaults set in the theme's `_config.yml`.
+There's a variety of configurations and caveats to using the `compress` layout, so be sure to read through the [documentation](http://jch.penibelst.de/) if you decide to change the defaults set in the theme's `_config.yml`.
 
 ```yaml
 compress_html:
diff --git a/docs/_docs/07-navigation.md b/docs/_docs/07-navigation.md
index dba977140f98..feb9fe25a53c 100644
--- a/docs/_docs/07-navigation.md
+++ b/docs/_docs/07-navigation.md
@@ -30,6 +30,7 @@ main:
     url: /collection-archive/
   - title: "External Link"
     url: https://google.com
+    target: _blank
 ```
 
 Which will give you a responsive masthead similar to this:
diff --git a/docs/_docs/08-ui-text.md b/docs/_docs/08-ui-text.md
index e51561178371..3a97ee1cadf4 100644
--- a/docs/_docs/08-ui-text.md
+++ b/docs/_docs/08-ui-text.md
@@ -2,31 +2,37 @@
 title: "UI Text"
 permalink: /docs/ui-text/
 excerpt: "Text for customizing user interface elements found in the theme."
-last_modified_at: 2020-05-01T10:15:37-04:00
+last_modified_at: 2021-05-11T10:22:55-04:00
 ---
 
 Text for UI elements, `_layouts`, and `_includes` grouped together as a set of translation keys. This is by no means a full-on i18n solution, but it does help make customizing theme text a bit easier.
 
 The English[^yaml-anchors] main keys in [`_data/ui-text.yml`](https://github.com/mmistakes/minimal-mistakes/blob/master/_data/ui-text.yml) are translated in the following languages:
 
+- Arabic (عربي)
 - Brazilian Portuguese (Português brasileiro)
+- Bulgarian
 - Catalan
 - Chinese
+- Czech
 - Danish
 - Dutch
 - Finnish
 - French (Français)
 - German (Deutsch)
 - Greek
+- Hebrew
 - Hungarian
 - Indonesian
 - Irish (Gaeilge)
 - Italian (Italiano)
+- Kiswahili
 - Korean
 - Japanese
 - Malayalam
 - Myanmar (Burmese)
 - Nepali (Nepalese)
+- Norwegian (Norsk)
 - Polish
 - Persian (فارسی)
 - Romanian
diff --git a/docs/_docs/10-layouts.md b/docs/_docs/10-layouts.md
index 20d5be432123..cf3eeb47a5e0 100644
--- a/docs/_docs/10-layouts.md
+++ b/docs/_docs/10-layouts.md
@@ -7,7 +7,7 @@ single_layout_gallery:
     alt: "single layout with header example"
   - image_path: /assets/images/mm-layout-single-meta.png
     alt: "single layout with comments and related posts"
-last_modified_at: 2020-07-24T16:00:21-04:00
+last_modified_at: 2020-08-30T21:27:40-04:00
 toc: true
 toc_label: "Included Layouts"
 toc_icon: "columns"
@@ -128,7 +128,8 @@ Auto-generated table of contents list for your posts and pages can be enabled by
 | ---------   | -------- | ----------- | ------- |
 | **toc**     | Optional | Show table of contents. (boolean) | `false` |
 | **toc_label** | Optional | Table of contents title. (string) | `toc_label` in UI Text data file. |
-| **toc_icon**  | Optional | Table of contents icon, displays before the title. (string) | [Font Awesome](https://fontawesome.com/icons?d=gallery&s=solid&m=free) <i class="fas fa-file-alt"></i> **file-alt** icon. Other FA icons can be used instead. |
+| **toc_icon**  | Optional | Table of contents icon, displays before the title. (string) | [Font Awesome](https://fontawesome.com/v6/search?s=solid&m=free) <i class="fas fa-file-alt"></i> **file-alt** icon. Other FA icons can be used instead. |
+| **toc_sticky** | Optional | Stick table of contents to top of screen.                   | `false` |
 
 **TOC example with custom title and icon**
 
@@ -140,6 +141,31 @@ toc_icon: "cog"
 ---
 ```
 
+{% capture notice-text %}
+**Note:** You need to use contiguous levels of headings for the TOC to generate properly. For example:
+
+```markdown
+Good headings:
+
+# Heading
+## Heading
+### Heading
+### Heading
+# Heading
+## Heading
+
+Bad headings:
+
+# Heading
+### Heading (skipped H2)
+##### Heading (skipped H4)
+```
+{% endcapture %}
+
+<div class="notice--warning">
+  {{ notice-text | markdownify }}
+</div>
+
 ## Archive layout
 
 Essentially the same as `single` with markup adjustments and some modules removed.
@@ -224,7 +250,7 @@ If you're not using the `jekyll-archives` plugin then you need to create archive
 | [Category Archive](https://mmistakes.github.io/minimal-mistakes/categories/edge-case/) | `layout: category` | [edge-case.md](https://github.com/mmistakes/minimal-mistakes/blob/master/docs/_pages/edge-case.md) |
 | [Tags Archive](https://mmistakes.github.io/minimal-mistakes/tags/) | `layout: tags` | [tag-archive.md](https://github.com/mmistakes/minimal-mistakes/blob/master/docs/_pages/tag-archive.md) |
 | [Tag Archive](https://mmistakes.github.io/minimal-mistakes/tags/markup/) | `layout: tag` | [markup.md](https://github.com/mmistakes/minimal-mistakes/blob/master/docs/_pages/markup.md) |
-| [Collection Archive](https://mmistakes.github.io/minimal-mistakes/recipes-archive/) | `layout: collection` | [recipes-archive.md](https://github.com/mmistakes/minimal-mistakes/blob/master/docs/_pages/recipes-archive.md) |
+| [Collection Archive](https://mmistakes.github.io/minimal-mistakes/recipes/) | `layout: collection` | [recipes-archive.md](https://github.com/mmistakes/minimal-mistakes/blob/master/docs/_pages/recipes-archive.md) |
 
 **Note:** By default, documents are shown in a list view. To change to a grid view add `entries_layout: grid` to the page's front matter.
 {: .notice--info}
@@ -249,7 +275,7 @@ This layout displays all documents grouped by a specific collection. It accommod
 collection: # collection name
 entries_layout: # list (default), grid
 show_excerpts: # true (default), false
-sort_by: # date (default) title
+sort_by: # date (default), title or any metadata key added to the collection's documents
 sort_order: # forward (default), reverse
 ```
 
@@ -263,6 +289,11 @@ collection: recipes
 ```
 
 If you want to sort the collection by title add `sort_by: title`. If you want reverse sorting, add `sort_order: reverse`.
+You can also use any metadata key that is present in the documents. For example, you can add `number: <any number>` to your documents and use `number` as the sort key:
+
+```yaml
+sort_by: number
+```
 
 ### `layout: category`
 
@@ -332,9 +363,9 @@ Then adjust the `paginate_path` in **_config.yml** to match.
 
 ```yaml
 paginate_path: /blog/page:num
-``` 
+```
 
-**Note:** Jekyll can only paginate a single `index.html` file. If you'd like to paginate more pages (e.g. category indexes) you'll need the help of a custom plugin. For more pagination related settings check the [**Configuration**]({{ "/docs/configuration/#paginate" | relative_url }}) section.
+**Note:** The default Jekyll Paginate plugin can only paginate a single `index.html` file. If you'd like to paginate more pages (e.g. category indexes) you'll need the help of a custom plugin. For more pagination-related settings check the [**Configuration**]({{ "/docs/configuration/#paginate" | relative_url }}) section, including settings for [Jekyll Paginate V2](https://github.com/sverrirs/jekyll-paginate-v2).
 {: .notice--info}
 
 **Note:** By default, documents are shown in a list view. To change to a grid view add `entries_layout: grid` to the page's front matter. To increase the width of the main container, giving more space to the grid items also add `classes: wide` to the home page's YAML Front Matter.
@@ -427,13 +458,13 @@ To overlay text on top of a header image you have a few more options:
 | Name                     | Description | Default |
 | ----                     | ----------- | ------- |
 | **overlay_image**        | Header image you'd like to overlay. Same rules as `header.image` from above. | |
-| **overlay_filter**       | Color/opacity to overlay on top of the header image eg: `0.5` or `rgba(255, 0, 0, 0.5)`. |
+| **overlay_filter**       | Color/opacity to overlay on top of the header image. Example: `0.5`, `rgba(255, 0, 0, 0.5)` or [`linear-gradient`][mdn-linear-gradient]. |
 | **show_overlay_excerpt** | Display excerpt in the overlay text | true |
 | **excerpt**              | Auto-generated page excerpt is added to the overlay text or can be overridden. | |
 | **tagline**              | Overrides page excerpt. Useful when header text needs to be different from excerpt in archive views. | |
 | **actions**              | Call to action button links (`actions` array: `label` and `url`). More than one button link can be assigned. | |
-| **cta_label**            | Deprecated, use `actions` instead. Call to action button text label. | `more_label` in UI Text data file |
-| **cta_url**              | Deprecated, use `actions` instead. Call to action button URL. | |
+
+  [mdn-linear-gradient]: https://developer.mozilla.org/en-US/docs/Web/CSS/linear-gradient()
 
 With this YAML Front Matter:
 
@@ -476,7 +507,7 @@ header:
       url: "https://github.com"
 ```
 
-Or if you want to do more fancy things, go full rgba:
+Or if you feel colorful, use full rgba:
 
 ![transparent red overlay]({{ "/assets/images/mm-header-overlay-red-filter.jpg" | relative_url }})
 
@@ -491,6 +522,21 @@ header:
       url: "https://github.com"
 ```
 
+Or if you want to do more fancy things, go all the way to [linear-gradient][mdn-linear-gradient]:
+
+![transparent custom overlay]({{ "/assets/images/mm-header-overlay-custom-filter.jpg" | relative_url }})
+
+```yaml
+excerpt: "This post should [...]"
+header:
+  overlay_image: /assets/images/unsplash-image-1.jpg
+  overlay_filter: linear-gradient(rgba(255, 0, 0, 0.5), rgba(0, 255, 255, 0.5))
+  caption: "Photo credit: [**Unsplash**](https://unsplash.com)"
+  actions:
+    - label: "Download"
+      url: "https://github.com"
+```
+
 Multiple call to action button links can be assigned like this:
 
 ```yaml
@@ -545,7 +591,7 @@ defaults:
 **Note:** To disable the author sidebar profile for a specific post or page, add `author_profile: false` to the YAML Front Matter instead.
 {: .notice--warning}
 
-To assign more author links, add to the `author.links` array  in [`_config.yml`]({{ "/docs/configuration/" | relative_url }}) link so. Any of [Font Awesome's icons](https://fontawesome.com/icons?d=gallery) are available for use.
+To assign more author links, add to the `author.links` array  in [`_config.yml`]({{ "/docs/configuration/" | relative_url }}) link so. Any of [Font Awesome's icons](https://fontawesome.com/v6/search) are available for use.
 
 ```yaml
 author:
@@ -579,7 +625,7 @@ For example, to color a Reddit icon, simply add a `color` declaration and the co
     color: #ff4500;
   }
 }
-``` 
+```
 
 ![Reddit link in author profile with color]({{ "/assets/images/mm-author-profile-reddit-color.png" | relative_url }})
 
@@ -625,11 +671,11 @@ To create a sidebar menu[^sidebar-menu] similar to the one found in the theme's
   <figcaption>Custom sidebar navigation menu example.</figcaption>
 </figure>
 
-To start, add a new key to `_data/navigation.yml`. This will be referenced later in via YAML Front Matter so keep it short and memorable. In the case of the theme's documentation menu I used `docs`.
+To start, add a new key to `_data/navigation.yml`. This will be referenced later via YAML Front Matter so keep it short and memorable. In the case of the theme's documentation menu I used `docs`.
 
 **Sample sidebar menu links:**
 
-```yaml 
+```yaml
 docs:
   - title: Getting Started
     children:
@@ -701,6 +747,15 @@ defaults:
         nav: "docs"
 ```
 
+*New in v4.26.0*: If you have multiple sidebar navs defined and want to include more than one on a page, the sidebar nav can also be a list.
+
+```yaml
+sidebar:
+  nav:
+    - main
+    - docs
+```
+
 ---
 
 ## Social sharing links
@@ -730,23 +785,69 @@ The important parts to change are:
 
 To change the color of the button use one of the built in [utility classes]({{ "/docs/utility-classes/#buttons" | relative_url }}). Or you can create a new button class to match whatever color you want.
 
-Under the `$social` color map in `assets/_scss/_buttons.scss` simply add a name (this will be appened to `btn--`) that matches the new button class. In our case `reddit` ~> `.btn--reddit`.
+Under the `$buttoncolors:` color map in `_sass/minimal-mistakes/_buttons.scss` simply add a name (this will be appended to `btn--`) that matches the new button class. In our case `reddit` ~> `.btn--reddit`.
 
 ```scss
-$social:
+$buttoncolors:
 (facebook, $facebook-color),
 (twitter, $twitter-color),
 (linkedin, $linkedin-color),
-(reddit, #ff4500);
+(reddit, $reddit-color);
 ```
 
-**ProTip:** For bonus points you can add it as a Sass `$variable` that you set in `_variables.scss` like the other ["brand" colors](http://brandcolors.net/).
+**ProTip:** For bonus points you can modify the Sass variable `$reddit-color` that is set in `_variables.scss` [or use a different "brand" color](http://brandcolors.net/).
 {: .notice--info}
 
 Add the new `.btn--reddit` class to the `<a>` element from earlier, [compile `main.css`]({{ "/docs/stylesheets/" | relative_url }}) and away you go.
 
 ```html
-{% raw %}<a href="https://www.reddit.com/submit?url={{ page.url | relative_url }}&title={{ page.title }}" class="btn btn--reddit" title="{{ site.data.ui-text[site.locale].share_on_label }} Reddit"><i class="fab fa-fw fa-reddit" aria-hidden="true"></i><span> Reddit</span></a>{% endraw %}
+{% raw %}<a href="https://www.reddit.com/submit?url={{ page.url | absolute_url | url_encode }}&title={{ page.title }}" class="btn btn--reddit" title="{{ site.data.ui-text[site.locale].share_on_label }} Reddit"><i class="fab fa-fw fa-reddit" aria-hidden="true"></i><span> Reddit</span></a>{% endraw %}
 ```
 
 ![Reddit social share link button]({{ "/assets/images/mm-social-share-links-reddit-color.png" | relative_url }})
+
+---
+
+## Custom head and footer
+
+The `default` layout includes a number of custom templates, which provide ways for you to directly add content to all your pages.
+
+### Head
+
+`_includes/head/custom.html` is included at the end of the `<head>` tag. An example use of this include is to add custom CSS per page:
+
+Add some Liquid tags for the new configuration to `_includes/head/custom.html`.
+{% raw %}```html
+{% if page.page_css %}
+  {% for stylesheet in page.page_css %}
+    <link rel="stylesheet" href="{{ stylesheet | relative_url }}">
+  {% endfor %}
+{% endif %}
+```{% endraw %}
+
+Next, add `page_css` to any page's YAML Front Matter to have your CSS loaded for that page.
+```yaml
+page_css:
+  - /path/to/your/custom.css
+```
+
+### Footer
+
+`_includes/footer/custom.html` is included at the beginning of the `<footer>` tag. An example use of this include is to add custom JavaScript per page:
+
+Add some Liquid tags for the new configuration to `_includes/footer/custom.html`.
+{% raw %}```html
+{% if page.page_js %}
+  {% for script in page.page_js %}
+    <script src="{{ script | relative_url }}"></script>
+  {% endfor %}
+{% endif %}
+```{% endraw %}
+
+Next, add `page_js` to any page's YAML Front Matter to have your JavaScript loaded for that page.
+```yaml
+page_js:
+  - /path/to/your/custom.js
+```
+
+---
diff --git a/docs/_docs/14-helpers.md b/docs/_docs/14-helpers.md
index e7ff5a267352..f76dff403ad1 100644
--- a/docs/_docs/14-helpers.md
+++ b/docs/_docs/14-helpers.md
@@ -53,20 +53,23 @@ Generate a `<figure>` element with a single image and caption.
 | **image_path**    | **Required** | Full path to image eg: `/assets/images/filename.jpg`. Use absolute URLS for those hosted externally. |
 | **alt**           | Optional     | Alternate text for image.                                                                            |
 | **caption**       | Optional     | Figure caption text. Markdown is allowed.                                                            |
+| **popup**         | Optional     | Enable Magnific Popup on the image.                                                                  |
 
 Using the `figure` include like so:
 
 ```liquid
-{% raw %}{% include figure image_path="/assets/images/unsplash-image-10.jpg" alt="this is a placeholder image" caption="This is a figure caption." %}{% endraw %}
+{% raw %}{% include figure popup=true image_path="/assets/images/unsplash-image-10.jpg" alt="this is a placeholder image" caption="This is a figure caption." %}{% endraw %}
 ```
 
 Will output the following:
 
-{% include figure image_path="/assets/images/unsplash-image-10.jpg" alt="this is a placeholder image" caption="This is a figure caption." %}
+{% include figure popup=true image_path="/assets/images/unsplash-image-10.jpg" alt="this is a placeholder image" caption="This is a figure caption." %}
 
 ```html
 <figure>
-  <img src="/assets/images/unsplash-image-10.jpg" alt="this is a placeholder image">
+  <a href="/assets/images/unsplash-image-10.jpg" class="image-popup" title="This is a figure caption.">
+    <img src="/assets/images/unsplash-image-10.jpg" alt="this is a placeholder image">
+  </a>
   <figcaption>This is a figure caption.</figcaption>
 </figure>
 ```
@@ -129,7 +132,7 @@ To add a feature row containing three content blocks with text and image, add th
 | Name              | Required     | Description                                                                                          | Default                            |
 | ----------------- | ------------ | ---------------------------------------------------------------------------------------------------- | ---------------------------------- |
 | **image_path**    | **Required** | Full path to image eg: `/assets/images/filename.jpg`. Use absolute URLS for those hosted externally. |                                    |
-| **image_caption** | Optional     | Caption for image, Markdown is supported eg: `"Image from [Unsplash](https://unsplash.com)"          |
+| **image_caption** | Optional     | Caption for image, Markdown is supported eg: `"Image from [Unsplash](https://unsplash.com)"`         |
 | **alt**           | Optional     | Alternate text for image.                                                                            |                                    |
 | **title**         | Optional     | Content block title.                                                                                 |                                    |
 | **excerpt**       | Optional     | Content block excerpt text. Markdown is allowed.                                                     |                                    |
@@ -249,7 +252,7 @@ To embed the following Bilibili video at url `https://www.bilibili.com/video/BV1
 {% raw %}{% include video id="BV1E7411e7hC" provider="bilibili" %}{% endraw %}
 ```
 
-If you want to enable danmaku (弹幕) for the embeded video, which is disabled by default, you can supply an additional parameter `danmaku="1"` as shown below: 
+If you want to enable danmaku (弹幕) for the embedded video, which is disabled by default, you can supply an additional parameter `danmaku="1"` as shown below:
 
 ```liquid
 {% raw %}{% include video id="BV1E7411e7hC" provider="bilibili" danmaku="1" %}{% endraw %}
@@ -279,7 +282,7 @@ Add `toc: true` to the YAML Front Matter of any post or page.
 | -------------- | -------- | ----------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------- |
 | **toc**        | Optional | Show table of contents. (boolean)                           | `false`                                                                                                                                                       |
 | **toc_label**  | Optional | Table of contents title. (string)                           | `toc_label` in UI Text data file.                                                                                                                             |
-| **toc_icon**   | Optional | Table of contents icon, displays before the title. (string) | [Font Awesome](https://fontawesome.com/icons?d=gallery&s=solid&m=free) <i class="fas fa-file-alt"></i> **file-alt** icon. Other FA icons can be used instead. |
+| **toc_icon**   | Optional | Table of contents icon, displays before the title. (string) | [Font Awesome](https://fontawesome.com/v6/search?s=solid&m=free) <i class="fas fa-file-alt"></i> **file-alt** icon. Other FA icons can be used instead. |
 | **toc_sticky** | Optional | Stick table of contents to top of screen.                   | `false`                                                                                                                                                       |
 
 **TOC example with custom title and icon**
@@ -295,6 +298,31 @@ toc_icon: "cog"
 **Note:** using both methods will have unintended results. Be sure to remove `{% raw %}{% include toc %}{% endraw %}` placed table of contents from your content when using `toc: true`.
 {: .notice--warning }
 
+{% capture notice-text %}
+**Note:** You need to use contiguous levels of headings for the TOC to generate properly. For example:
+
+```markdown
+Good headings:
+
+# Heading
+## Heading
+### Heading
+### Heading
+# Heading
+## Heading
+
+Bad headings:
+
+# Heading
+### Heading (skipped H2)
+##### Heading (skipped H4)
+```
+{% endcapture %}
+
+<div class="notice--warning">
+  {{ notice-text | markdownify }}
+</div>
+
 ### Enabled via `toc` include (deprecated)
 
 To include a Kramdown [auto-generated table of contents](https://kramdown.gettalong.org/converter/html.html#toc) for posts and pages, add the following helper to your content.
@@ -312,7 +340,7 @@ To include a Kramdown [auto-generated table of contents](https://kramdown.gettal
 | Parameter | Required | Description                                                 | Default                                                                                                                                                       |
 | --------- | -------- | ----------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------- |
 | **title** | Optional | Table of contents title. (string)                           | `toc_label` in UI Text data file.                                                                                                                             |
-| **icon**  | Optional | Table of contents icon, displays before the title. (string) | [Font Awesome](https://fontawesome.com/icons?d=gallery&s=solid&m=free) <i class="fas fa-file-alt"></i> **file-alt** icon. Other FA icons can be used instead. |
+| **icon**  | Optional | Table of contents icon, displays before the title. (string) | [Font Awesome](https://fontawesome.com/v6/search?s=solid&m=free) <i class="fas fa-file-alt"></i> **file-alt** icon. Other FA icons can be used instead. |
 
 **TOC example with custom title and icon**
 
diff --git a/docs/_docs/16-stylesheets.md b/docs/_docs/16-stylesheets.md
index b05b7ddd7d7d..c8acf05146d5 100644
--- a/docs/_docs/16-stylesheets.md
+++ b/docs/_docs/16-stylesheets.md
@@ -40,29 +40,29 @@ minimal-mistakes
 
 ## Customizing
 
-To override the default [Sass](http://sass-lang.com/guide) (located in theme's 
+To override the default [Sass](http://sass-lang.com/guide) (located in theme's
 `_sass` directory), do one of the following:
 
 1. Copy directly from the Minimal Mistakes theme gem
 
-   - Go to your local Minimal Mistakes gem installation directory (run 
+   - Go to your local Minimal Mistakes gem installation directory (run
      `bundle show minimal-mistakes-jekyll` to get the path to it).
-   - Copy the contents of `/assets/css/main.scss` from there to 
+   - Copy the contents of `/assets/css/main.scss` from there to
      `<your_project>`.
    - Customize what you want inside `<your_project>/assets/css/main.scss`.
 
 2. Copy from this repo.
 
-   - Copy the contents of [assets/css/main.scss](https://github.com/mmistakes/minimal-mistakes/blob/master/assets/css/main.scss) 
+   - Copy the contents of [assets/css/main.scss](https://github.com/mmistakes/minimal-mistakes/blob/master/assets/css/main.scss)
      to `<your_project>`.
    - Customize what you want inside `<your_project/assets/css/main.scss`.
 
-**Note:** To make more extensive changes and customize the Sass partials bundled 
-in the gem. You will need to copy the complete contents of the `_sass` directory 
+**Note:** To make more extensive changes and customize the Sass partials bundled
+in the gem. You will need to copy the complete contents of the `_sass` directory
 to `<your_project>` due to the way Jekyll currently reads those files.
 
-To make basic tweaks to theme's style Sass variables can be overridden by adding 
-to `<your_project>/assets/css/main.scss`. For instance, to change the 
+To make basic tweaks to theme's style Sass variables can be overridden by adding
+to `<your_project>/assets/css/main.scss`. For instance, to change the
 link color used throughout the theme add:
 
 ```scss
@@ -71,7 +71,7 @@ $link-color: red;
 
 Before any `@import` lines.
 
-### Paragraph indention 
+### Paragraph indention
 
 To mimic the look of type set in a printed book or manuscript you may want to enable paragraph indention. When `$paragraph-indent` is set to `true` indents are added to each sibling and the margin below each paragraph is removed.
 
@@ -120,7 +120,7 @@ $header-font-family : $sans-serif-narrow;
 
 ### Type scale
 
-Wherever possible type scale variables have been used instead of writing out fixed sizes. This makes updating much easier by changing values in one file. 
+Wherever possible type scale variables have been used instead of writing out fixed sizes. This makes updating much easier by changing values in one file.
 
 Example:
 
@@ -147,7 +147,7 @@ $type-size-8 : 0.625em;  // ~10px
 
 ### Colors
 
-Change the mood of your site by altering a few color variables. `$body-color`, `$background-color`, `$text-color`, `$link-color`, and `$masthead-link-color` will have the most affect when changed.
+Change the mood of your site by altering a few color variables. `$body-color`, `$background-color`, `$text-color`, `$link-color`, and `$masthead-link-color` will have the most effect when changed.
 
 #### Syntax highlighting
 
@@ -370,7 +370,7 @@ $base0c: #8abeb7;
 $base0d: #81a2be;
 $base0e: #b294bb;
 $base0f: #a3685a;
-```  
+```
 
 ### Breakpoints and grid stuff
 
diff --git a/docs/_docs/17-javascript.md b/docs/_docs/17-javascript.md
index 3d8ad948e559..919315cb5d8c 100644
--- a/docs/_docs/17-javascript.md
+++ b/docs/_docs/17-javascript.md
@@ -2,7 +2,7 @@
 title: "JavaScript"
 permalink: /docs/javascript/
 excerpt: "Instructions for customizing and building the theme's scripts."
-last_modified_at: 2019-05-02T08:55:27-04:00
+last_modified_at: 2021-07-23T09:33:35-04:00
 ---
 
 The theme's `assets/js/main.min.js` script is built from several vendor, jQuery plugins, and other scripts found in [`assets/js/`](https://github.com/mmistakes/minimal-mistakes/tree/master/assets/js).
@@ -20,7 +20,7 @@ minimal mistakes
 |  |  |   └── smooth-scroll.js               # make same-page links scroll smoothly
 |  |  ├── vendor
 |  |  |   └── jquery
-|  |  |       └── jquery-3.4.1.js
+|  |  |       └── jquery-3.5.1.js
 |  |  ├── _main.js                           # jQuery plugin settings and other scripts
 |  |  └── main.min.js                        # concatenated and minified theme script
 ```
@@ -64,3 +64,19 @@ To get started:
 {: .notice--warning}
 
 If all goes well, running `npm run build:js` will compress/concatenate `_main.js` and all plugin scripts into `main.min.js`.
+
+## Debugging
+
+The minified JavaScript is harder to debug in the browser than the raw source. To stop the minification and bundle all the JavaScript as-is --- open up `package.json` and edit the value `scripts.uglify` from:
+
+```json
+  "scripts": {
+    "uglify": "uglifyjs [...] -c -m -o assets/js/main.min.js",
+```
+
+To the following:
+
+```json
+  "scripts": {
+    "uglify": "cat [...] > assets/js/main.min.js",
+```
diff --git a/docs/_docs/18-history.md b/docs/_docs/18-history.md
index 5b2e42311898..f9da68e7bc08 100644
--- a/docs/_docs/18-history.md
+++ b/docs/_docs/18-history.md
@@ -1,14 +1,277 @@
 ---
-title: "History"
+title: History
 classes: wide
-permalink: /docs/history/
-excerpt: "Change log of enhancements and bug fixes made to the theme."
+permalink: "/docs/history/"
+excerpt: Change log of enhancements and bug fixes made to the theme.
 sidebar:
   nav: docs
-last_modified_at: 2020-08-04T12:31:35-04:00
+last_modified_at: '2025-02-14T22:47:24+08:00'
 toc: false
 ---
 
+<!--
+  Sourced from CHANGELOG.md
+  See Rakefile `task :changelog` for details
+-->
+
+{% raw %}
+## Unreleased
+
+### Enhancements
+
+- Add RTL Support. [#4886](https://github.com/mmistakes/minimal-mistakes/pull/4886)
+- Add missing Polish translation. [#4890](https://github.com/mmistakes/minimal-mistakes/pull/4890)
+- Rewrite most directions with [CSS logical properties](https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_logical_properties_and_values).
+- Remove unnecessary "type" attribute [#4956](https://github.com/mmistakes/minimal-mistakes/issues/4956)
+- The "if" means the default is never used [#4955](https://github.com/mmistakes/minimal-mistakes/issues/4955)
+- For pages without a title, show the site title only once [#4959](https://github.com/mmistakes/minimal-mistakes/issues/4959)
+- Use `documents-collection.html` partial in `home` layout.
+- Add Bulgarian translation. [#5003](https://github.com/mmistakes/minimal-mistakes/pull/5003)
+- Add provider and comments info to `single.html` layout for non-production. [#5068](https://github.com/mmistakes/minimal-mistakes/issues/5068)
+- Tweak contrast skin $primary-color to adhere to WCAG guidelines. [#5126](https://github.com/mmistakes/minimal-mistakes/issues/5126)
+
+### Bug Fixes
+
+- Replace a redirected link to MadeMistakes in footer. [#4882](https://github.com/mmistakes/minimal-mistakes/pull/4882)
+- Fix wrong float direction for `feature_row` with `type="right"`. [#4061](https://github.com/mmistakes/minimal-mistakes/issues/4061)
+- Fix reset stylesheet overruling `$doc-font-size`. [#4983](https://github.com/mmistakes/minimal-mistakes/issues/4983)
+- Fix JavaScript null error on home and splash layouts. [#4938](https://github.com/mmistakes/minimal-mistakes/issues/4938), [#4939](https://github.com/mmistakes/minimal-mistakes/pull/4939)
+- Fix bad &lt;figure&gt; HTML if "alt" contains quotes.
+- Fix extra newline generated in `_includes/post_pagination.html`.
+- Hide hidden links & remove the overlay when one is clicked. [#5042](https://github.com/mmistakes/minimal-mistakes/pull/5042)
+- Fix typo in "Configuration" [#5106](https://github.com/mmistakes/minimal-mistakes/issues/5106)
+
+### Documentation & Maintenance
+
+- Automatically update Algolia search index with GitHub Actions.
+
+## [4.26.2](https://github.com/mmistakes/minimal-mistakes/releases/tag/4.26.2)
+
+### Enhancements
+
+- Add Czech localization. [#4866](https://github.com/mmistakes/minimal-mistakes/pull/4866)
+- Allow overriding HTML `lang` attribute on a per-page basis. [#4862](https://github.com/mmistakes/minimal-mistakes/pull/4862)
+
+### Bug Fixes
+
+- Figure helper breaks when using code markup in caption with `popup=true`. [#4841](https://github.com/mmistakes/minimal-mistakes/issues/4841)
+
+## [4.26.1](https://github.com/mmistakes/minimal-mistakes/releases/tag/4.26.1)
+
+### Bug Fixes
+
+- Disable copy button on invalid syntax highlighting blocks to avoid positioning issues.
+- Fix typo for `fa-dribbble` in `_utilities.scss`.
+- Restrict "auto scroll sticky ToC to content" feature to Chromium browsers for now. [#4826](https://github.com/mmistakes/minimal-mistakes/issues/4826)
+
+### Documentation & Maintenance
+
+- Rewrite social icons SCSS with a loop.
+
+### Enhancements
+
+- Change the icon of a copy button into a tick for 1.5 seconds on successful copy.
+
+## [4.26.0](https://github.com/mmistakes/minimal-mistakes/releases/tag/4.26.0)
+
+### Bug Fixes
+
+- Fix an unclosed `<p>` tag in `page__hero.html`, near `page.header.actions`.
+- Remove overlay and revert X to hamburger icon when popup disappears. [#3958](https://github.com/mmistakes/minimal-mistakes/pull/3958)
+- Fix SEO title when it contains a vertical bar. [#3094](https://github.com/mmistakes/minimal-mistakes/pull/3094) [#3113](https://github.com/mmistakes/minimal-mistakes/pull/3113)
+- Remove "sticky sidebar" JS as it's now completely based on CSS media queries. [#4245](https://github.com/mmistakes/minimal-mistakes/issues/4245) [#4645](https://github.com/mmistakes/minimal-mistakes/pull/4645)
+
+### Enhancements
+
+- Add support for [Jekyll Paginate V2](https://github.com/sverrirs/jekyll-paginate-v2) 🎉 [#2636](https://github.com/mmistakes/minimal-mistakes/pull/2636)
+- Add "copy to clipboard" button for code blocks 🎉 [#2812](https://github.com/mmistakes/minimal-mistakes/pull/2812)
+- Auto scroll sticky ToC with content. [#3115](https://github.com/mmistakes/minimal-mistakes/pull/3115)
+- Replace "hidden" check in Liquid templates with `where_exp: "item", "item.hidden != true"`.
+- Remove deprecated `page.header.cta_url` setting. [#4821](https://github.com/mmistakes/minimal-mistakes/pull/4821)
+- Allow multiple nav lists in sidebar. [#2843](https://github.com/mmistakes/minimal-mistakes/pull/2843)
+- Add popup parameter to `{% include figure %}` to enable Magnific Popup. [#3119](https://github.com/mmistakes/minimal-mistakes/pull/3119)
+- Add target attribute for navigation link. [#3056](https://github.com/mmistakes/minimal-mistakes/pull/3056)
+- Split schema to a separate include file. [#3085](https://github.com/mmistakes/minimal-mistakes/pull/3085)
+- Cleanup `_includes/seo.html`.
+
+### Documentation & Maintenance
+
+- Rewrite skin previews on `05-configuration.md` in Liquid template.
+- Remove unused classes from `_layouts/single.html`.
+- Migrate npm run scripts to Ruby Rake tasks.
+- Add Rake task `version` for updating all hard-coded version numbers from `package.json` all at once.
+- Merge `categories` and `tags` layout into `_includes/posts-taxonomy.html`.
+- Update Social Sharing links section. [#4066](https://github.com/mmistakes/minimal-mistakes/pull/4066)
+
+## [4.25.1](https://github.com/mmistakes/minimal-mistakes/releases/tag/4.25.1)
+
+### Bug Fixes
+
+- "You may also enjoy" no longer recommends hidden posts. [#4653](https://github.com/mmistakes/minimal-mistakes/issues/4653)
+- Replaced dead link to "Viewport and Media Queries" slides. [#4421](https://github.com/mmistakes/minimal-mistakes/discussions/4421)
+- Fix broken `where_exp` in `lunr-store.js` for Jekyll &lt; 4.0. [#4808](https://github.com/mmistakes/minimal-mistakes/issues/4808)
+
+### Enhancements
+
+- Add Ukrainian translations. [#4273](https://github.com/mmistakes/minimal-mistakes/pull/4273)
+- Add more configuration for Giscus. [#4274](https://github.com/mmistakes/minimal-mistakes/pull/4274)
+- Bump jekyll-toc to [v1.2.1](https://github.com/allejo/jekyll-toc/releases/tag/v1.2.1).
+
+### Documentation & Maintenance
+
+- Bump shell-quote from 1.7.1 to 1.7.3 [#3692](https://github.com/mmistakes/minimal-mistakes/issues/3692)
+- Add `after-content.html` and `before-related.html` includes to ease docs site overrides.
+- GitHub Workflows security hardening [#3884](https://github.com/mmistakes/minimal-mistakes/issues/3884)
+- Replace Font Awesome v5 search page with v6.
+- Try adding an FAQ page.
+- Update remote theme reference in Quick-Start Guide to point to 4.25.0. [#4809](https://github.com/mmistakes/minimal-mistakes/issues/4809)
+
+## [4.25.0](https://github.com/mmistakes/minimal-mistakes/releases/tag/4.25.0)
+
+### Bug Fixes
+
+- Fix Linkedin social share link [#4754](https://github.com/mmistakes/minimal-mistakes/issues/4754)
+- Fix non-English characters being url encoded in breadcrumb [#3819](https://github.com/mmistakes/minimal-mistakes/issues/3819)
+- Fix wrong `first_page_path` because of hard-coded `page:num` [#3778](https://github.com/mmistakes/minimal-mistakes/issues/3778)
+- Remove JS and other files from search index [#4000](https://github.com/mmistakes/minimal-mistakes/pull/4000)
+- Fix unlisted YouTube video embeds in documentation/test sites. [#3649](https://github.com/mmistakes/minimal-mistakes/issues/3649)
+- Fix error in Algolia search script when returning a hit that without `html` and `hightlight.html`. [#3101](https://github.com/mmistakes/minimal-mistakes/issues/3101) [#3102](https://github.com/mmistakes/minimal-mistakes/pull/3102)
+- Fix inline code style not applied to stylized text. [#3253](https://github.com/mmistakes/minimal-mistakes/pull/3253)
+- Fix Keybase icon in author sidebar. [#3221](https://github.com/mmistakes/minimal-mistakes/pull/3221)
+- Fix sort order of Staticman comments when data files aren't named alphabetically. [#3184](https://github.com/mmistakes/minimal-mistakes/pull/3184)
+- Fix `layout: compress` issue with HTML comment in video include. [#3117](https://github.com/mmistakes/minimal-mistakes/pull/3117)
+- Add Magnific Popup class to anchors that only contain an `img` element. [#3111](https://github.com/mmistakes/minimal-mistakes/issues/3111) [#3114](https://github.com/mmistakes/minimal-mistakes/pull/3114)
+- Fix heading level of related posts section from `h4` to `h2` to improve accessibility and SEO. [#3064](https://github.com/mmistakes/minimal-mistakes/pull/3064)
+- Fix grammar error in German localized UI text string. [#3063](https://github.com/mmistakes/minimal-mistakes/pull/3063)
+- Remove site.url from first breadcrumb link. [#3051](https://github.com/mmistakes/minimal-mistakes/pull/3051)
+
+### Enhancements
+
+- Add `site.copyright` and `site.copyright_url` config options [#4313](https://github.com/mmistakes/minimal-mistakes/pull/4313)
+- Lazy-load InstantSearch scripts and stylesheets [#3691](https://github.com/mmistakes/minimal-mistakes/pull/3691)
+- Improve Finnish translations [#4595](https://github.com/mmistakes/minimal-mistakes/pull/4595)
+- Remove redundant downcase from \_layouts/categories.html. [#4531](https://github.com/mmistakes/minimal-mistakes/pull/4531)
+- Load latest Font Awesome package. [#3765](https://github.com/mmistakes/minimal-mistakes/pull/3765)
+- Add missing Polish missing UI text strings. [#3969](https://github.com/mmistakes/minimal-mistakes/pull/3969)
+- Update breadcrumbs conditional to enable/disable them via Front Matter on pages using `layout: single`. [#3096](https://github.com/mmistakes/minimal-mistakes/pull/3096) [#3669](https://github.com/mmistakes/minimal-mistakes/pull/3669)
+- Remove Internet Explorer 9 upgrade notice. [#3666](https://github.com/mmistakes/minimal-mistakes/pull/3666)
+- Add Kiswahili localized UI text strings. [#3489](https://github.com/mmistakes/minimal-mistakes/pull/3489)
+- Exclude `main.scss` from Lunr search index.
+- Allow `site.pages` to be indexed and searched via Lunr. [#3352](https://github.com/mmistakes/minimal-mistakes/pull/3352)
+- Update jQuery to v3.6.0. [#3254](https://github.com/mmistakes/minimal-mistakes/pull/3254)
+- Use notice `<a>` colors for blockquotes that have `notice--` classes applied. [#3140](https://github.com/mmistakes/minimal-mistakes/pull/3140) [#3068](https://github.com/mmistakes/minimal-mistakes/issues/3068)
+- Add sameAs itemprop to author link. [#3087](https://github.com/mmistakes/minimal-mistakes/pull/3087)
+- Update and add missing Brazilian Portuguese translations. [#3204](https://github.com/mmistakes/minimal-mistakes/pull/3204)
+- Add optional label attribute for utterances comments. [#3128](https://github.com/mmistakes/minimal-mistakes/pull/3128)
+- Add missing Danish translations. [#3095](https://github.com/mmistakes/minimal-mistakes/pull/3095)
+- Add ARIA role to search forms. [#3086](https://github.com/mmistakes/minimal-mistakes/pull/3086)
+- Add overflow scroll bar to sticky table of contents that are taller than the viewport's height. [#2874](https://github.com/mmistakes/minimal-mistakes/pull/2874)
+- Add Microformats markup. [#3052](https://github.com/mmistakes/minimal-mistakes/pull/3052)
+
+### Documentation & Maintenance
+
+- Fix links to Font Awesome gallery. [#3599](https://github.com/mmistakes/minimal-mistakes/pull/3599)
+- Fix GreedyNav.js attribution link. [#3553](https://github.com/mmistakes/minimal-mistakes/pull/3553)
+- Fix typo about loading JavaScript in layout documentation. [#3350](https://github.com/mmistakes/minimal-mistakes/pull/3350)
+- Fix documentation typos. [#3232](https://github.com/mmistakes/minimal-mistakes/pull/3232) [#3318](https://github.com/mmistakes/minimal-mistakes/pull/3318)
+- Add link to documentation clarifying how to add plugins. [#3181](https://github.com/mmistakes/minimal-mistakes/pull/3181)
+- Fix broken documentation link and add Baidu site verification to `_config.yml` files. [#3139](https://github.com/mmistakes/minimal-mistakes/pull/3139)
+- Bump path-parse from 1.0.6 to 1.0.7. [#3116](https://github.com/mmistakes/minimal-mistakes/pull/3116)
+- Automatically close invalid PRs using GitHub Actions. [#3313](https://github.com/mmistakes/minimal-mistakes/pull/3313)
+- Add instructions on how to unminify `main.js` for easier browser debugging. [#3055](https://github.com/mmistakes/minimal-mistakes/pull/3055)
+- Consolidate hard-coded version numbers where possible.
+- Add Rakefile for automatically syncing CHANGELOG with history and synched them.
+
+## [4.24.0](https://github.com/mmistakes/minimal-mistakes/releases/tag/4.24.0)
+
+### Bug Fixes
+
+- Fix README text for Gumshoejs license. [#3024](https://github.com/mmistakes/minimal-mistakes/pull/3024)
+- Remove `tabindex="-1"` from `input` elements in `search.html` layout to allow them to be accessible by keyboard. [#2982](https://github.com/mmistakes/minimal-mistakes/issues/2982)
+- Fix broken sidebar image in sample post. [#3013](https://github.com/mmistakes/minimal-mistakes/issues/3013)
+- Fix broken links in Upgrading documentation. [#3004](https://github.com/mmistakes/minimal-mistakes/issues/3004)
+
+### Enhancements
+
+- Remove IE9 flexbox fallback. [#3042](https://github.com/mmistakes/minimal-mistakes/pull/3042)
+- Remove `h2` from skip links navigation as it is not important for site structure. [#3012](https://github.com/mmistakes/minimal-mistakes/pull/3012)
+- Loads Font Awesome asynchronously. [#2967](https://github.com/mmistakes/minimal-mistakes/pull/2967)
+- Replace custom search icon SVG with Font Awesome icon. [#2774](https://github.com/mmistakes/minimal-mistakes/pull/2774)
+- Adds support for giscus comments. [#3022](https://github.com/mmistakes/minimal-mistakes/pull/3022)
+
+## [4.23.0](https://github.com/mmistakes/minimal-mistakes/releases/tag/4.23.0)
+
+### Enhancements
+
+- Add Arabic (عربي) localized UI text strings. [#2936](https://github.com/mmistakes/minimal-mistakes/pull/2936)
+- Update onchange and uglify-js dependencies.
+- Document head and footer `custom.html` includes. [#2815](https://github.com/mmistakes/minimal-mistakes/pull/2815)
+- Color notices based on skin colors instead of fixed values. [#2887](https://github.com/mmistakes/minimal-mistakes/pull/2887)
+- Add configurable datetime format. [#2844](https://github.com/mmistakes/minimal-mistakes/pull/2844)
+- Add Baidu site verification [#2830](https://github.com/mmistakes/minimal-mistakes/pull/2830)
+- Add `alt` attribute to site logo. [#2529](https://github.com/mmistakes/minimal-mistakes/issues/2529) [#2824](https://github.com/mmistakes/minimal-mistakes/issues/2824)
+
+### Bug Fixes
+
+- Fix menu toggle to properly show close icon when open.
+- Fix Jekyll environment note in configuration documentation. [#2912](https://github.com/mmistakes/minimal-mistakes/issues/2912)
+- Fix typo in Helpers documentation. [#2940](https://github.com/mmistakes/minimal-mistakes/pull/2940)
+- Remove all references to official public Staticman API instance. [#2818](https://github.com/mmistakes/minimal-mistakes/issues/2818) [#2831](https://github.com/mmistakes/minimal-mistakes/pull/2831)
+- Remove Google Search CSS. [#2852](https://github.com/mmistakes/minimal-mistakes/issues/2852) [#2855](https://github.com/mmistakes/minimal-mistakes/pull/2855)
+
+## [4.22.0](https://github.com/mmistakes/minimal-mistakes/releases/tag/4.22.0)
+
+### Bug Fixes
+
+- Remove Google Search script from `404.md`. [#2597](https://github.com/mmistakes/minimal-mistakes/issues/2597) [#2737](https://github.com/mmistakes/minimal-mistakes/pull/2737) [#2789](https://github.com/mmistakes/minimal-mistakes/pull/2789)
+- Fix Font Awesome icon color in `contrast`, `dark`, `mint`, `neon`, `plum`, and `sunrise` skins. [#2724](https://github.com/mmistakes/minimal-mistakes/issues/2724)
+
+### Enhancements
+
+- Allow custom sorting for collections. [#2723](https://github.com/mmistakes/minimal-mistakes/pull/2723)
+- Use `sort_natural` instead of custom Liquid logic to sort tags and categories. [#2756](https://github.com/mmistakes/minimal-mistakes/pull/2756)
+- Add configuration option to toggle off RSS feed link in `<head>` and site footer. [#2787](https://github.com/mmistakes/minimal-mistakes/pull/2787)
+- Upgrade Lunrjs to 2.3.9 and switch to `relative_url`. [#2805](https://github.com/mmistakes/minimal-mistakes/pull/2805)
+- Adds `.webp` to list of supported image extensions for the image popup lightbox. [#2788](https://github.com/mmistakes/minimal-mistakes/pull/2788)
+- Add Hebrew localized UI text strings. [#2760](https://github.com/mmistakes/minimal-mistakes/pull/2760)
+- Update documentation to include `toc_sticky` parameter's description. [#2741](https://github.com/mmistakes/minimal-mistakes/pull/2741)
+- Update Indonesian localized UI text strings. [#2731](https://github.com/mmistakes/minimal-mistakes/pull/2731)
+- Update remote theme documentation. [#2734](https://github.com/mmistakes/minimal-mistakes/pull/2734)
+- Update allejo/jekyll-toc to v1.1.0, skip headings without an ID. [#2752](https://github.com/mmistakes/minimal-mistakes/pull/2752)
+- Allow custom gradient for page header overlay. [#2806](https://github.com/mmistakes/minimal-mistakes/pull/2806)
+
+## [4.21.0](https://github.com/mmistakes/minimal-mistakes/releases/tag/4.21.0)
+
+### Bug Fixes
+
+- Fix greedy navigation by improving reliability of remaining space for visible links. [#2664](https://github.com/mmistakes/minimal-mistakes/issues/2664)
+- Collapse white-space in `figure` helper to fix issues when used in Markdown ordered and unordered lists. [#2697](https://github.com/mmistakes/minimal-mistakes/pull/2697)
+- Fix dead link to CI services in documentation. [#2635](https://github.com/mmistakes/minimal-mistakes/issues/2635) [#2692](https://github.com/mmistakes/minimal-mistakes/pull/2692)
+- Fix a small typo in documentation. [#2718](https://github.com/mmistakes/minimal-mistakes/pull/2718)
+
+### Enhancements
+
+- Update jQuery to 3.5.1. [#2713](https://github.com/mmistakes/minimal-mistakes/pull/2713)
+- Add Indonesian localized UI text strings. [#2725](https://github.com/mmistakes/minimal-mistakes/pull/2725)
+- Update Vietnamese localized UI text strings. [#2722](https://github.com/mmistakes/minimal-mistakes/pull/2722)
+- Add Norwegian (Norsk) localized UI text strings. [#2702](https://github.com/mmistakes/minimal-mistakes/pull/2702)
+- Update allejo/jekyll-toc to v1.0.14 [#2700](https://github.com/mmistakes/minimal-mistakes/pull/2700)
+
+## [4.20.2](https://github.com/mmistakes/minimal-mistakes/releases/tag/4.20.2)
+
+### Bug Fixes
+
+- Fix broken link in documentation. [#2677](https://github.com/mmistakes/minimal-mistakes/issues/2677)
+- Fix typo in documentation. [#2678](https://github.com/mmistakes/minimal-mistakes/issues/2678)
+- Remove duplicate CSS definitions. [#2666](https://github.com/mmistakes/minimal-mistakes/pull/2666)
+- Fix `entries_layout: grid` in various layouts. [#2639](https://github.com/mmistakes/minimal-mistakes/issues/2639)
+- Change `fa` to `fas` for Font Awesome 5. [#2649](https://github.com/mmistakes/minimal-mistakes/pull/2649)
+
+### Enhancements
+
+- Refactor page meta include. [#2641](https://github.com/mmistakes/minimal-mistakes/pull/2641)
+- Add `article:author` Open Graph markup. [#2670](https://github.com/mmistakes/minimal-mistakes/pull/2670)
+
 ## [4.20.1](https://github.com/mmistakes/minimal-mistakes/releases/tag/4.20.1)
 
 ### Bug Fixes
@@ -49,7 +312,7 @@ toc: false
 - Strip trailing whitespace in `seo_description`. [#2542](https://github.com/mmistakes/minimal-mistakes/pull/2542)
 - Improve sticky sidebar's appearance with short content. [#2514](https://github.com/mmistakes/minimal-mistakes/pull/2514)
 
-## [4.19.2](https://github.com/mmistakes/minimal-mistakes/releases/tag/4.19.3)
+## [4.19.2](https://github.com/mmistakes/minimal-mistakes/releases/tag/4.19.2)
 
 ### Enhancements
 
@@ -396,7 +659,7 @@ toc: false
 - Style archive links with appropriate link color.
 - Adjust feature row spacing and font-sizes.
 - Use sentence case and increase font-sizes for improved readability in table of contents.
-- Add {% raw %}`{{ content }}`{% endraw %} to `home` layout. [#1775](https://github.com/mmistakes/minimal-mistakes/pull/1775)
+- Add `{{ content }}` to `home` layout. [#1775](https://github.com/mmistakes/minimal-mistakes/pull/1775)
 
 ## [4.12.1](https://github.com/mmistakes/minimal-mistakes/releases/tag/4.12.1)
 
@@ -421,7 +684,7 @@ toc: false
 - Add support for ["sticking" table of contents](https://mmistakes.github.io/minimal-mistakes/layout-table-of-contents-sticky/) to top of page via `toc_sticky: true` YAML Front Matter.
 - Add support for captioning images in feature row helper via `image_caption` YAML Front Matter. [#1440](https://github.com/mmistakes/minimal-mistakes/issues/1440)
 - Add [Google Custom Search Engine](https://cse.google.com/cse) support. [#1652](https://github.com/mmistakes/minimal-mistakes/issues/1652)
-- Update Font Awesome to version [`5.1.13`](https://github.com/FortAwesome/Font-Awesome/blob/master/CHANGELOG.md).
+- Update Font Awesome to version. [`5.1.13`](https://github.com/FortAwesome/Font-Awesome/blob/master/CHANGELOG.md)
 - Add "Pets" sample archive page to documentation site. [#1664](https://github.com/mmistakes/minimal-mistakes/pull/1664)
 - Add GitLab social icon brand color. [#1653](https://github.com/mmistakes/minimal-mistakes/issues/1653)
 - Prevent line breaks between FontAwesome icon and text in footer social links. [#1659](https://github.com/mmistakes/minimal-mistakes/issues/1659)
@@ -439,7 +702,7 @@ toc: false
 
 ### Enhancements
 
-- Update Font Awesome to version `5.0.11`. [#1605](https://github.com/mmistakes/minimal-mistakes/pull/1620)
+- Update Font Awesome to version `5.0.11`. [#1620](https://github.com/mmistakes/minimal-mistakes/pull/1620)
 - Add Slovak localized UI text strings. [#1613](https://github.com/mmistakes/minimal-mistakes/pull/1613)
 - Add option to anonymize IP addresses of hits sent to Google Analytics. [#1636](https://github.com/mmistakes/minimal-mistakes/pull/1636)
 
@@ -457,7 +720,7 @@ toc: false
 
 ### Bug Fixes
 
-- Replace `relative_url` filter with `relative_url` where it makes sense (asset/navigation related paths). [#1588](https://github.com/mmistakes/minimal-mistakes/issues/1588)
+- Replace `absolute_url` filter with `relative_url` where it makes sense (asset/navigation related paths). [#1588](https://github.com/mmistakes/minimal-mistakes/issues/1588)
 - Fix search excerpts that run together because of implied spaces.
 
 ## [4.10.1](https://github.com/mmistakes/minimal-mistakes/releases/tag/4.10.1)
@@ -641,7 +904,7 @@ toc: false
 - Reduce amount of blank pages when printing in Chrome. [#1196](https://github.com/mmistakes/minimal-mistakes/issues/1196)
 - Remove `#disqus_thread` duplicate from `comments-providers/disqus.html` as it is already in `comments.html` include. [#1199](https://github.com/mmistakes/minimal-mistakes/issues/1199)
 - Fix Liquid syntax errors in `tag-list.html` and `category-list.html` includes by removing parenthesis in `assign`s. [#1223](https://github.com/mmistakes/minimal-mistakes/issues/1223)
-- Fix Liquid syntax error: "Expected id but found open_square in {% raw %}`"{{ page.[include.id] }}"`"{% endraw %} in `gallery` and `feature_row` includes.
+- Fix Liquid syntax error: "Expected id but found open_square in `"{{ page.[include.id] }}"`" in `gallery` and `feature_row` includes.
 - Fix Liquid syntax error: "Expected end_of_string but found pipe in `"name in __names | sort"`" in `group-by-array` include.
 
 ## [4.5.1](https://github.com/mmistakes/minimal-mistakes/releases/tag/4.5.1)
@@ -969,18 +1232,18 @@ toc: false
 
 ### Enhancements
 
-- Improve line numbered code block styling when using `{% raw %}{% highlight linenos %}{% endraw %}` tag. [#513](https://github.com/mmistakes/minimal-mistakes/issues/513)
+- Improve line numbered code block styling when using `{% highlight linenos %}` tag. [#513](https://github.com/mmistakes/minimal-mistakes/issues/513)
 - Add English fallback to "Follow" button label. [#496](https://github.com/mmistakes/minimal-mistakes/pull/496)
 
 ### Bug Fixes
 
-- Fix Firefox alignment issues with code blocks generated with the `{% raw %}{% highlight %}{% endraw %}` tag. [#512](https://github.com/mmistakes/minimal-mistakes/issues/512)
+- Fix Firefox alignment issues with code blocks generated with the `{% highlight %}` tag. [#512](https://github.com/mmistakes/minimal-mistakes/issues/512)
 
 ### Maintenance
 
 - Clarified comment for `author.stackoverflow` value used in author sidebar links. [#487](https://github.com/mmistakes/minimal-mistakes/pull/487)
 - Add list of localized text strings. [#488](https://github.com/mmistakes/minimal-mistakes/pull/488)
-- Add `{% raw %}{% highlight %}{% endraw %}` code block examples to demo site.
+- Add `{% highlight %}` code block examples to demo site.
 - Add documentation for using custom sidebar navigation menus. [#476](https://github.com/mmistakes/minimal-mistakes/issues/476)
 
 ## [3.4.4](https://github.com/mmistakes/minimal-mistakes/releases/tag/3.4.4)
@@ -1057,19 +1320,19 @@ toc: false
 
 ### Bug Fixes
 
-- Fix blank `site.teaser` bug [#412](https://github.com/mmistakes/minimal-mistakes/issues/412)
+- Fix blank `site.teaser` bug. [#412](https://github.com/mmistakes/minimal-mistakes/issues/412)
 
 ## [3.3.5](https://github.com/mmistakes/minimal-mistakes/releases/tag/3.3.5)
 
 ### Enhancements
 
-- Add English default text `site.locale` strings [#407](https://github.com/mmistakes/minimal-mistakes/issues/407)
+- Add English default text `site.locale` strings. [#407](https://github.com/mmistakes/minimal-mistakes/issues/407)
 - Add Portuguese localized UI text. [#411](https://github.com/mmistakes/minimal-mistakes/pull/411)
 - Add Italian localized UI text. [#409](https://github.com/mmistakes/minimal-mistakes/pull/409)
 
 ### Maintenance
 
-- Remove unused Google AdSense variables in `_config.yml` [#404](https://github.com/mmistakes/minimal-mistakes/issues/404)
+- Remove unused Google AdSense variables in `_config.yml`. [#404](https://github.com/mmistakes/minimal-mistakes/issues/404)
 - Update `Gemfile` instructions for using `github-pages` vs. native `jekyll` gems.
 - Disable `gems:` in `_config.yml` and enable plugins with Bundler instead.
 - Add `repository` to `_config.yml` to suppress GitHub Pages error `Liquid Exception: No repo name found.`
@@ -1099,18 +1362,6 @@ toc: false
 
 - Set default `lang` to `en`.
 
-### Enhancements
-
-- Make footer stick to the bottom of the page.
-
-### Bug Fixes
-
-- Fix `gallery` size bug [#402](https://github.com/mmistakes/minimal-mistakes/issues/402)
-
-### Maintenance
-
-- Set default `lang` to `en`.
-
 ## [3.3.2](https://github.com/mmistakes/minimal-mistakes/releases/tag/3.3.2)
 
 ### Bug Fixes
@@ -1132,7 +1383,7 @@ toc: false
 
 ## [3.2.13](https://github.com/mmistakes/minimal-mistakes/releases/tag/3.2.13)
 
-### Enhancement
+### Enhancements
 
 - Add English default UI text for Canada, Great Britain, and Australia. [#377](https://github.com/mmistakes/minimal-mistakes/issues/377)
 - Switch default locale from `en-US` to `en`.
@@ -1232,15 +1483,15 @@ toc: false
 
 ## [3.2.3](https://github.com/mmistakes/minimal-mistakes/releases/tag/3.2.3)
 
-### Enhancement
+### Enhancements
 
-- Add [Discourse](https://www.discourse.org/) as a commenting provider [#335](https://github.com/mmistakes/minimal-mistakes/pull/335)
+- Add [Discourse](https://www.discourse.org/) as a commenting provider. [#335](https://github.com/mmistakes/minimal-mistakes/pull/335)
 
 ## [3.2.2](https://github.com/mmistakes/minimal-mistakes/releases/tag/3.2.2)
 
-### Enhancement
+### Enhancements
 
-- Add support for image captions in Magnific Popup overlays via the [`gallery`](https://mmistakes.github.io/minimal-mistakes/docs/helpers/#gallery) helper [#334](https://github.com/mmistakes/minimal-mistakes/issues/334)
+- Add support for image captions in Magnific Popup overlays via the [`gallery`](https://mmistakes.github.io/minimal-mistakes/docs/helpers/#gallery) helper. [#334](https://github.com/mmistakes/minimal-mistakes/issues/334)
 
 ## [3.2.1](https://github.com/mmistakes/minimal-mistakes/releases/tag/3.2.1)
 
@@ -1272,7 +1523,7 @@ toc: false
 
 ## [3.1.7](https://github.com/mmistakes/minimal-mistakes/releases/tag/3.1.7)
 
-### Enhancement
+### Enhancements
 
 - Add translation key for "Recent Posts" used in home page `index.html`. [#316](https://github.com/mmistakes/minimal-mistakes/pull/316)
 
@@ -1315,11 +1566,15 @@ toc: false
 
 ## [3.1.2](https://github.com/mmistakes/minimal-mistakes/releases/tag/3.1.2)
 
-### Enhancement
+### Enhancements
 
 - Explain how to use `nav_list` helper in [documentation](https://mmistakes.github.io/minimal-mistakes/docs/helpers/#navigation-list).
 - Reduce left/right padding on smaller screens to increase width of main content column.
 
+### Bug Fixes
+
+- Fix alignment issues with related posts [#273](https://github.com/mmistakes/minimal-mistakes/issues/273) and "Follow" button in author profile [#274](https://github.com/mmistakes/minimal-mistakes/issues/274).
+
 ## [3.1.1](https://github.com/mmistakes/minimal-mistakes/releases/tag/3.1.1)
 
 ### Bug Fix
@@ -1508,3 +1763,4 @@ toc: false
 - Google Analytics, Google Authorship, webmaster verifies, and Twitter card meta are now optional.
 
 ## [1.0.1](https://github.com/mmistakes/minimal-mistakes/releases/tag/v1.0.1)
+{% endraw %}
diff --git a/docs/_docs/20-docs-2-2.md b/docs/_docs/20-docs-2-2.md
index be5638f1dfc6..bcaa01cfa1b9 100644
--- a/docs/_docs/20-docs-2-2.md
+++ b/docs/_docs/20-docs-2-2.md
@@ -49,7 +49,6 @@ How Minimal Mistakes is organized and what the various files are. All posts, lay
 minimal-mistakes/
 ├── _includes/
 |    ├── author-bio.html        # bio stuff layout. pulls optional owner data from _config.yml
-|    ├── browser-upgrade   # prompt to install a modern browser for < IE9
 |    ├── disqus-comments   # Disqus comments script
 |    ├── footer            # site footer
 |    ├── head              # site head
@@ -297,4 +296,4 @@ To modify the site's JavaScript files I setup a Grunt build script to lint/conca
 npm install
 ```
 
-From the theme's root, use `grunt` concatenate JavaScript files, and optimize .jpg, .png, and .svg files in the `images/` folder. You can also use `grunt dev` in combination with `jekyll build --watch` to watch for updates JS files that Grunt will then automatically re-build as you write your code which will in turn auto-generate your Jekyll site when developing locally.
\ No newline at end of file
+From the theme's root, use `grunt` concatenate JavaScript files, and optimize .jpg, .png, and .svg files in the `images/` folder. You can also use `grunt dev` in combination with `jekyll build --watch` to watch for updates JS files that Grunt will then automatically re-build as you write your code which will in turn auto-generate your Jekyll site when developing locally.
diff --git a/docs/_docs/22-faq.md b/docs/_docs/22-faq.md
new file mode 100644
index 000000000000..f41f7fc14d02
--- /dev/null
+++ b/docs/_docs/22-faq.md
@@ -0,0 +1,18 @@
+---
+title: Frequently Asked Questions
+classes: wide
+permalink: "/docs/faq/"
+sidebar:
+  nav: docs
+last_modified_at: '2024-04-24T00:51:32+08:00'
+toc: false
+---
+
+This page is still under construction. Meanwhile, check out existing [issues](https://github.com/mmistakes/minimal-mistakes/issues) and [discussions](https://github.com/mmistakes/minimal-mistakes/discussions) to see if your question has already been asked before.
+{: .notice--primary }
+
+- `'require': cannot load such file -- webrick (LoadError)`
+  
+  This error occurs when you run `jekyll serve` on Ruby 3.0+. 
+
+  Ruby 3.0 no longer comes with Webrick by default. To fix this, add `gem "webrick"` to your `Gemfile` and run `bundle install`. See [jekyll/jekyll#8523](https://github.com/jekyll/jekyll/issues/8523)
diff --git a/docs/_includes/after-content.html b/docs/_includes/after-content.html
new file mode 100644
index 000000000000..482c530b7931
--- /dev/null
+++ b/docs/_includes/after-content.html
@@ -0,0 +1,8 @@
+<div align="center" style="margin: 1em 0;">
+  <ins class="adsbygoogle"
+        style="display:block; border-bottom: initial;"
+        data-ad-client="ca-pub-7328585512091257"
+        data-ad-slot="3049671934"
+        data-ad-format="auto"
+        data-full-width-responsive="true"></ins>
+</div>
diff --git a/docs/_includes/before-related.html b/docs/_includes/before-related.html
new file mode 100644
index 000000000000..69ea67c544a5
--- /dev/null
+++ b/docs/_includes/before-related.html
@@ -0,0 +1 @@
+{% include after-content.html %}
diff --git a/docs/_includes/comments-providers/scripts.html b/docs/_includes/comments-providers/scripts.html
new file mode 100644
index 000000000000..5617ab8922fa
--- /dev/null
+++ b/docs/_includes/comments-providers/scripts.html
@@ -0,0 +1,11 @@
+{% comment %}
+  Repurposing this file as "after-scripts.html" snippet,
+  since the docs site isn't using comments anyway.
+{% endcomment %}
+<style>
+.google-auto-placed {
+  margin: 2em auto;
+}
+</style>
+<script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
+<script>(adsbygoogle = window.adsbygoogle || []).push({});</script>
diff --git a/docs/_layouts/default.html b/docs/_layouts/default.html
deleted file mode 100644
index bb0c5b8d59c1..000000000000
--- a/docs/_layouts/default.html
+++ /dev/null
@@ -1,53 +0,0 @@
----
----
-
-<!doctype html>
-<!--
-  Minimal Mistakes Jekyll Theme 4.20.1 by Michael Rose
-  Copyright 2013-2020 Michael Rose - mademistakes.com | @mmistakes
-  Free for personal and commercial use under the MIT license
-  https://github.com/mmistakes/minimal-mistakes/blob/master/LICENSE
--->
-<html lang="{{ site.locale | slice: 0,2 | default: "en" }}" class="no-js">
-  <head>
-    {% include head.html %}
-    {% include head/custom.html %}
-  </head>
-
-  <body class="layout--{{ page.layout | default: layout.layout }}{% if page.classes or layout.classes %}{{ page.classes | default: layout.classes | join: ' ' | prepend: ' ' }}{% endif %}">
-    {% include_cached skip-links.html %}
-    {% include browser-upgrade.html %}
-    {% include masthead.html %}
-
-    <div class="initial-content">
-      {{ content }}
-      <script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
-        <div align="center" style="margin: 1em 0;">
-        <ins class="adsbygoogle"
-             style="display:block; border-bottom: initial;"
-             data-ad-client="ca-pub-7328585512091257"
-             data-ad-slot="3049671934"
-             data-ad-format="auto"></ins>
-        </div>
-        <script>
-        (adsbygoogle = window.adsbygoogle || []).push({});
-      </script>
-    </div>
-
-    {% if site.search == true %}
-      <div class="search-content">
-        {% include search/search_form.html %}
-      </div>
-    {% endif %}
-
-    <div class="page__footer">
-      <footer>
-        {% include footer/custom.html %}
-        {% include footer.html %}
-      </footer>
-    </div>
-
-    {% include scripts.html %}
-
-  </body>
-</html>
\ No newline at end of file
diff --git a/docs/_pages/404.md b/docs/_pages/404.md
index 4adbecc66617..b3025a6053b5 100644
--- a/docs/_pages/404.md
+++ b/docs/_pages/404.md
@@ -5,11 +5,4 @@ sitemap: false
 permalink: /404.html
 ---
 
-Sorry, but the page you were trying to view does not exist --- perhaps you can try searching for it below.
-
-<script>
-  var GOOG_FIXURL_LANG = 'en';
-  var GOOG_FIXURL_SITE = '{{ site.url }}'
-</script>
-<script src="https://linkhelp.clients.google.com/tbproxy/lh/wm/fixurl.js">
-</script>
+Sorry, but the page you were trying to view does not exist.
diff --git a/docs/_pages/about.md b/docs/_pages/about.md
index 25bde3d2131f..4a805ceda268 100644
--- a/docs/_pages/about.md
+++ b/docs/_pages/about.md
@@ -12,7 +12,7 @@ layouts_gallery:
   - url: /assets/images/mm-layout-archive.png
     image_path: /assets/images/mm-layout-archive.png
     alt: "archive layout example"
-last_modified_at: 2020-05-01T10:15:22-04:00
+last_modified_at: 2022-05-27T11:59:26-04:00
 toc: true
 ---
 
@@ -31,9 +31,9 @@ Minimal Mistakes is a flexible two-column Jekyll theme. Perfect for hosting your
 - Several responsive layout options (single, archive index, search, splash, and paginated home page).
 - Optimized for search engines with support for [Twitter Cards](https://dev.twitter.com/cards/overview) and [Open Graph](http://ogp.me/) data
 - Optional [header images](https://mmistakes.github.io/minimal-mistakes/docs/layouts/#headers), [custom sidebars](https://mmistakes.github.io/minimal-mistakes/docs/layouts/#sidebars), [table of contents](https://mmistakes.github.io/minimal-mistakes/docs/helpers/#table-of-contents), [galleries](https://mmistakes.github.io/minimal-mistakes/docs/helpers/#gallery), related posts, [breadcrumb links](https://mmistakes.github.io/minimal-mistakes/docs/configuration/#breadcrumb-navigation-beta), [navigation lists](https://mmistakes.github.io/minimal-mistakes/docs/helpers/#navigation-list), and more.
-- Commenting support (powered by [Disqus](https://disqus.com/), [Facebook](https://developers.facebook.com/docs/plugins/comments), [Discourse](https://www.discourse.org/), [utterances](https://utteranc.es/), static-based via [Staticman v1 and v2](https://staticman.net/), and custom).
+- Commenting support (powered by [Disqus](https://disqus.com/), [Facebook](https://developers.facebook.com/docs/plugins/comments), [Discourse](https://www.discourse.org/), [utterances](https://utteranc.es/), [giscus](https://giscus.app/), static-based via [Staticman v1 and v2](https://staticman.net/), and custom).
 - [Google Analytics](https://www.google.com/analytics/) support.
-- UI localized text in English (default), Brazilian Portuguese (Português brasileiro), Catalan, Chinese, Danish, Dutch, Finnish, French (Français), German (Deutsch), Greek, Hindi (हिंदी), Hungarian, Indonesian, Irish (Gaeilge), Italian (Italiano), Japanese, Korean, Malayalam, Myanmar (Burmese), Nepali (Nepalese), Persian (فارسی), Polish, Punjabi (ਪੰਜਾਬੀ), Romanian, Russian, Slovak, Spanish (Español), Swedish, Thai, Turkish (Türkçe), and Vietnamese.
+- UI localized text in English (default), Arabic (عربي), Brazilian Portuguese (Português brasileiro), Bulgarian, Catalan, Chinese, Czech, Danish, Dutch, Finnish, French (Français), German (Deutsch), Greek, Hebrew, Hindi (हिंदी), Hungarian, Indonesian, Irish (Gaeilge), Italian (Italiano), Japanese, Kiswahili, Korean, Malayalam, Myanmar (Burmese), Nepali (Nepalese), Norwegian (Norsk), Persian (فارسی), Polish, Punjabi (ਪੰਜਾਬੀ), Romanian, Russian, Slovak, Spanish (Español), Swedish, Thai, Turkish (Türkçe), and Vietnamese.
 
 ## Demo Pages
 
diff --git a/docs/_pages/home.md b/docs/_pages/home.md
index 0a807a83fad8..d0758fb9258b 100644
--- a/docs/_pages/home.md
+++ b/docs/_pages/home.md
@@ -10,7 +10,7 @@ header:
       url: "/docs/quick-start-guide/"
 excerpt: >
   A flexible two-column Jekyll theme. Perfect for building personal sites, blogs, and portfolios.<br />
-  <small><a href="https://github.com/mmistakes/minimal-mistakes/releases/tag/4.20.1">Latest release v4.20.1</a></small>
+  <small><a href="https://github.com/mmistakes/minimal-mistakes/releases/tag/4.26.2">Latest release v4.26.2</a></small>
 feature_row:
   - image_path: /assets/images/mm-customizable-feature.png
     alt: "customizable"
diff --git a/docs/_pages/page-archive.html b/docs/_pages/page-archive.html
index e2b3fdcba16f..ada3f64fb9ce 100644
--- a/docs/_pages/page-archive.html
+++ b/docs/_pages/page-archive.html
@@ -5,8 +5,7 @@
 author_profile: false
 ---
 
-{% for post in site.pages %}
-  {% unless post.hidden %}
-    {% include archive-single.html %}
-  {% endunless %}
+{% assign posts = site.pages | where_exp: "post", "post.hidden != true" %}
+{% for post in posts %}
+  {% include archive-single.html %}
 {% endfor %}
diff --git a/docs/_posts/2009-10-06-edge-case-broken-highlighting.md b/docs/_posts/2009-10-06-edge-case-broken-highlighting.md
new file mode 100644
index 000000000000..bdf5b0be2715
--- /dev/null
+++ b/docs/_posts/2009-10-06-edge-case-broken-highlighting.md
@@ -0,0 +1,48 @@
+---
+title: "Edge Case: Invalid syntax highlight languages"
+categories:
+  - Edge Case
+tags:
+  - content
+  - css
+  - edge case
+---
+
+Good highlighting:
+
+```ruby
+str = ARGV.first
+if str
+  str = str.b[/\A_(.*)_\z/, 1]
+  if str and Gem::Version.correct?(str)
+    version = str
+    ARGV.shift
+  end
+end
+```
+
+Good (but dumb) highlighting:
+
+```
+str = ARGV.first
+if str
+  str = str.b[/\A_(.*)_\z/, 1]
+  if str and Gem::Version.correct?(str)
+    version = str
+    ARGV.shift
+  end
+end
+```
+
+Bad highlighting:
+
+```invalid
+str = ARGV.first
+if str
+  str = str.b[/\A_(.*)_\z/, 1]
+  if str and Gem::Version.correct?(str)
+    version = str
+    ARGV.shift
+  end
+end
+```
diff --git a/docs/_posts/2010-06-02-post-video-youtube.md b/docs/_posts/2010-06-02-post-video-youtube.md
index 16bc910c38da..686f622b9e70 100644
--- a/docs/_posts/2010-06-02-post-video-youtube.md
+++ b/docs/_posts/2010-06-02-post-video-youtube.md
@@ -8,4 +8,4 @@ tags:
 
 YouTube video embed below.
 
-<iframe width="640" height="360" src="https://www.youtube-nocookie.com/embed/l2Of1-d5E5o?controls=0&amp;showinfo=0" frameborder="0" allowfullscreen></iframe>
\ No newline at end of file
+<iframe width="640" height="360" src="https://www.youtube-nocookie.com/embed/-PVofD2A9t8?controls=0" frameborder="0" allowfullscreen></iframe>
\ No newline at end of file
diff --git a/docs/_posts/2012-03-15-layout-sidebar-custom.md b/docs/_posts/2012-03-15-layout-sidebar-custom.md
index bd1c6105c654..3b3739bc8ce6 100644
--- a/docs/_posts/2012-03-15-layout-sidebar-custom.md
+++ b/docs/_posts/2012-03-15-layout-sidebar-custom.md
@@ -1,10 +1,11 @@
 ---
 title: "Layout: Sidebar Custom"
 excerpt: "A post with custom sidebar content."
+last_modified_at: 2021-06-23T07:53:04-04:00
 author_profile: false
 sidebar:
   - title: "Title"
-    image: http://placehold.it/350x250
+    image: "/assets/images/350x250.png"
     image_alt: "image"
     text: "Some text here."
   - title: "Another Title"
@@ -19,7 +20,7 @@ An example of how that YAML could look is:
 ```yaml
 sidebar:
   - title: "Title"
-    image: http://placehold.it/350x250
+    image: "/assets/images/your-image.jpg"
     image_alt: "image"
     text: "Some text here."
   - title: "Another Title"
diff --git a/docs/_posts/2017-01-23-layout-header-video.md b/docs/_posts/2017-01-23-layout-header-video.md
index 5b45e6c3de71..f1aab7490ca8 100644
--- a/docs/_posts/2017-01-23-layout-header-video.md
+++ b/docs/_posts/2017-01-23-layout-header-video.md
@@ -2,7 +2,7 @@
 title: "Layout: Header Video"
 header:
   video:
-    id: XsxDH4HcOWA
+    id: -PVofD2A9t8
     provider: youtube
 categories:
   - Layout
@@ -23,20 +23,20 @@ This post should display a **header with a responsive video**, if the theme supp
 
 ### YouTube
 
-To embed the following YouTube video at url `https://www.youtube.com/watch?v=XsxDH4HcOWA` (long version) or `https://youtu.be/XsxDH4HcOWA` (short version) into a post or page's main content you'd use: 
+To embed the following YouTube video at url `https://www.youtube.com/watch?v=-PVofD2A9t8` (long version) or `https://youtu.be/-PVofD2A9t8` (short version) into a post or page's main content you'd use: 
 
 ```liquid
-{% raw %}{% include video id="XsxDH4HcOWA" provider="youtube" %}{% endraw %}
+{% raw %}{% include video id="-PVofD2A9t8" provider="youtube" %}{% endraw %}
 ```
 
-{% include video id="XsxDH4HcOWA" provider="youtube" %}
+{% include video id="-PVofD2A9t8" provider="youtube" %}
 
 To embed it as a video header you'd use the following YAML Front Matter
 
 ```yaml
 header:
   video:
-    id: XsxDH4HcOWA
+    id: -PVofD2A9t8
     provider: youtube
 ```
 
diff --git a/docs/assets/images/350x250.png b/docs/assets/images/350x250.png
new file mode 100644
index 000000000000..cb4d5edbe8e7
Binary files /dev/null and b/docs/assets/images/350x250.png differ
diff --git a/docs/assets/images/mm-header-overlay-custom-filter.jpg b/docs/assets/images/mm-header-overlay-custom-filter.jpg
new file mode 100644
index 000000000000..7f0cff974496
Binary files /dev/null and b/docs/assets/images/mm-header-overlay-custom-filter.jpg differ
diff --git a/minimal-mistakes-jekyll.gemspec b/minimal-mistakes-jekyll.gemspec
index 765896ea4b45..e6f14e845094 100644
--- a/minimal-mistakes-jekyll.gemspec
+++ b/minimal-mistakes-jekyll.gemspec
@@ -1,9 +1,11 @@
-# coding: utf-8
+require "json"
+
+package_json = JSON.parse(File.read("package.json"))
 
 Gem::Specification.new do |spec|
   spec.name                    = "minimal-mistakes-jekyll"
-  spec.version                 = "4.20.1"
-  spec.authors                 = ["Michael Rose"]
+  spec.version                 = package_json["version"]
+  spec.authors                 = ["Michael Rose", "iBug"]
 
   spec.summary                 = %q{A flexible two-column Jekyll theme.}
   spec.homepage                = "https://github.com/mmistakes/minimal-mistakes"
diff --git a/package-lock.json b/package-lock.json
index cfd950e3e0f9..10afd583925e 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,659 +1,30 @@
 {
   "name": "minimal-mistakes",
-  "version": "4.19.0",
-  "lockfileVersion": 1,
+  "version": "4.26.1",
+  "lockfileVersion": 3,
   "requires": true,
-  "dependencies": {
-    "@blakeembrey/deque": {
-      "version": "1.0.5",
-      "resolved": "https://registry.npmjs.org/@blakeembrey/deque/-/deque-1.0.5.tgz",
-      "integrity": "sha512-6xnwtvp9DY1EINIKdTfvfeAtCYw4OqBZJhtiqkT3ivjnEfa25VQ3TsKvaFfKm8MyGIEfE95qLe+bNEt3nB0Ylg==",
-      "dev": true
-    },
-    "ansi-styles": {
-      "version": "3.2.1",
-      "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
-      "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
-      "dev": true,
-      "requires": {
-        "color-convert": "^1.9.0"
-      }
-    },
-    "anymatch": {
-      "version": "3.1.1",
-      "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz",
-      "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==",
-      "dev": true,
-      "requires": {
-        "normalize-path": "^3.0.0",
-        "picomatch": "^2.0.4"
-      }
-    },
-    "arrify": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz",
-      "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==",
-      "dev": true
-    },
-    "balanced-match": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
-      "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
-      "dev": true
-    },
-    "binary-extensions": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.0.0.tgz",
-      "integrity": "sha512-Phlt0plgpIIBOGTT/ehfFnbNlfsDEiqmzE2KRXoX1bLIlir4X/MR+zSyBEkL05ffWgnRSf/DXv+WrUAVr93/ow==",
-      "dev": true
-    },
-    "brace-expansion": {
-      "version": "1.1.11",
-      "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
-      "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
-      "dev": true,
-      "requires": {
-        "balanced-match": "^1.0.0",
-        "concat-map": "0.0.1"
-      }
-    },
-    "braces": {
-      "version": "3.0.2",
-      "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
-      "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
-      "dev": true,
-      "requires": {
-        "fill-range": "^7.0.1"
-      }
-    },
-    "chalk": {
-      "version": "2.4.2",
-      "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
-      "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
-      "dev": true,
-      "requires": {
-        "ansi-styles": "^3.2.1",
-        "escape-string-regexp": "^1.0.5",
-        "supports-color": "^5.3.0"
-      }
-    },
-    "chokidar": {
-      "version": "3.3.1",
-      "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.3.1.tgz",
-      "integrity": "sha512-4QYCEWOcK3OJrxwvyyAOxFuhpvOVCYkr33LPfFNBjAD/w3sEzWsp2BUOkI4l9bHvWioAd0rc6NlHUOEaWkTeqg==",
-      "dev": true,
-      "requires": {
-        "anymatch": "~3.1.1",
-        "braces": "~3.0.2",
-        "fsevents": "~2.1.2",
-        "glob-parent": "~5.1.0",
-        "is-binary-path": "~2.1.0",
-        "is-glob": "~4.0.1",
-        "normalize-path": "~3.0.0",
-        "readdirp": "~3.3.0"
-      }
-    },
-    "color-convert": {
-      "version": "1.9.3",
-      "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
-      "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
-      "dev": true,
-      "requires": {
-        "color-name": "1.1.3"
-      }
-    },
-    "color-name": {
-      "version": "1.1.3",
-      "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
-      "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
-      "dev": true
-    },
-    "commander": {
-      "version": "2.20.3",
-      "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
-      "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==",
-      "dev": true
-    },
-    "concat-map": {
-      "version": "0.0.1",
-      "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
-      "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
-      "dev": true
-    },
-    "cross-spawn": {
-      "version": "6.0.5",
-      "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz",
-      "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==",
-      "dev": true,
-      "requires": {
-        "nice-try": "^1.0.4",
-        "path-key": "^2.0.1",
-        "semver": "^5.5.0",
-        "shebang-command": "^1.2.0",
-        "which": "^1.2.9"
-      }
-    },
-    "define-properties": {
-      "version": "1.1.3",
-      "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz",
-      "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==",
-      "dev": true,
-      "requires": {
-        "object-keys": "^1.0.12"
-      }
-    },
-    "error-ex": {
-      "version": "1.3.2",
-      "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
-      "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
-      "dev": true,
-      "requires": {
-        "is-arrayish": "^0.2.1"
-      }
-    },
-    "es-abstract": {
-      "version": "1.13.0",
-      "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.13.0.tgz",
-      "integrity": "sha512-vDZfg/ykNxQVwup/8E1BZhVzFfBxs9NqMzGcvIJrqg5k2/5Za2bWo40dK2J1pgLngZ7c+Shh8lwYtLGyrwPutg==",
-      "dev": true,
-      "requires": {
-        "es-to-primitive": "^1.2.0",
-        "function-bind": "^1.1.1",
-        "has": "^1.0.3",
-        "is-callable": "^1.1.4",
-        "is-regex": "^1.0.4",
-        "object-keys": "^1.0.12"
-      }
-    },
-    "es-to-primitive": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.0.tgz",
-      "integrity": "sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg==",
-      "dev": true,
-      "requires": {
-        "is-callable": "^1.1.4",
-        "is-date-object": "^1.0.1",
-        "is-symbol": "^1.0.2"
-      }
-    },
-    "escape-string-regexp": {
-      "version": "1.0.5",
-      "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
-      "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
-      "dev": true
-    },
-    "fill-range": {
-      "version": "7.0.1",
-      "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
-      "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
-      "dev": true,
-      "requires": {
-        "to-regex-range": "^5.0.1"
-      }
-    },
-    "fsevents": {
-      "version": "2.1.2",
-      "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.2.tgz",
-      "integrity": "sha512-R4wDiBwZ0KzpgOWetKDug1FZcYhqYnUYKtfZYt4mD5SBz76q0KR4Q9o7GIPamsVPGmW3EYPPJ0dOOjvx32ldZA==",
-      "dev": true,
-      "optional": true
-    },
-    "function-bind": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
-      "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
-      "dev": true
-    },
-    "glob-parent": {
-      "version": "5.1.0",
-      "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.0.tgz",
-      "integrity": "sha512-qjtRgnIVmOfnKUE3NJAQEdk+lKrxfw8t5ke7SXtfMTHcjsBfOfWXCQfdb30zfDoZQ2IRSIiidmjtbHZPZ++Ihw==",
-      "dev": true,
-      "requires": {
-        "is-glob": "^4.0.1"
-      }
-    },
-    "graceful-fs": {
-      "version": "4.2.2",
-      "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.2.tgz",
-      "integrity": "sha512-IItsdsea19BoLC7ELy13q1iJFNmd7ofZH5+X/pJr90/nRoPEX0DJo1dHDbgtYWOhJhcCgMDTOw84RZ72q6lB+Q==",
-      "dev": true
-    },
-    "has": {
-      "version": "1.0.3",
-      "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
-      "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
-      "dev": true,
-      "requires": {
-        "function-bind": "^1.1.1"
-      }
-    },
-    "has-flag": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
-      "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
-      "dev": true
-    },
-    "has-symbols": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz",
-      "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=",
-      "dev": true
-    },
-    "hosted-git-info": {
-      "version": "2.8.4",
-      "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.4.tgz",
-      "integrity": "sha512-pzXIvANXEFrc5oFFXRMkbLPQ2rXRoDERwDLyrcUxGhaZhgP54BBSl9Oheh7Vv0T090cszWBxPjkQQ5Sq1PbBRQ==",
-      "dev": true
-    },
-    "ignore": {
-      "version": "5.1.4",
-      "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.4.tgz",
-      "integrity": "sha512-MzbUSahkTW1u7JpKKjY7LCARd1fU5W2rLdxlM4kdkayuCwZImjkpluF9CM1aLewYJguPDqewLam18Y6AU69A8A==",
-      "dev": true
-    },
-    "is-arrayish": {
-      "version": "0.2.1",
-      "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
-      "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=",
-      "dev": true
-    },
-    "is-binary-path": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
-      "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
-      "dev": true,
-      "requires": {
-        "binary-extensions": "^2.0.0"
-      }
-    },
-    "is-callable": {
-      "version": "1.1.4",
-      "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz",
-      "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==",
-      "dev": true
-    },
-    "is-date-object": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz",
-      "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=",
-      "dev": true
-    },
-    "is-extglob": {
-      "version": "2.1.1",
-      "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
-      "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
-      "dev": true
-    },
-    "is-glob": {
-      "version": "4.0.1",
-      "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz",
-      "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==",
-      "dev": true,
-      "requires": {
-        "is-extglob": "^2.1.1"
-      }
-    },
-    "is-number": {
-      "version": "7.0.0",
-      "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
-      "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
-      "dev": true
-    },
-    "is-regex": {
-      "version": "1.0.4",
-      "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz",
-      "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=",
-      "dev": true,
-      "requires": {
-        "has": "^1.0.1"
-      }
-    },
-    "is-symbol": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.2.tgz",
-      "integrity": "sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==",
-      "dev": true,
-      "requires": {
-        "has-symbols": "^1.0.0"
-      }
-    },
-    "isexe": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
-      "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
-      "dev": true
-    },
-    "json-parse-better-errors": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz",
-      "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==",
-      "dev": true
-    },
-    "load-json-file": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz",
-      "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=",
-      "dev": true,
-      "requires": {
-        "graceful-fs": "^4.1.2",
-        "parse-json": "^4.0.0",
-        "pify": "^3.0.0",
-        "strip-bom": "^3.0.0"
-      }
-    },
-    "memorystream": {
-      "version": "0.3.1",
-      "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz",
-      "integrity": "sha1-htcJCzDORV1j+64S3aUaR93K+bI=",
-      "dev": true
-    },
-    "minimatch": {
-      "version": "3.0.4",
-      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
-      "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
-      "dev": true,
-      "requires": {
-        "brace-expansion": "^1.1.7"
-      }
-    },
-    "minimist": {
-      "version": "1.2.5",
-      "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
-      "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==",
-      "dev": true
-    },
-    "nice-try": {
-      "version": "1.0.5",
-      "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz",
-      "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==",
-      "dev": true
-    },
-    "normalize-package-data": {
-      "version": "2.5.0",
-      "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz",
-      "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==",
-      "dev": true,
-      "requires": {
-        "hosted-git-info": "^2.1.4",
-        "resolve": "^1.10.0",
-        "semver": "2 || 3 || 4 || 5",
-        "validate-npm-package-license": "^3.0.1"
-      }
-    },
-    "normalize-path": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
-      "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
-      "dev": true
-    },
-    "npm-run-all": {
-      "version": "4.1.5",
-      "resolved": "https://registry.npmjs.org/npm-run-all/-/npm-run-all-4.1.5.tgz",
-      "integrity": "sha512-Oo82gJDAVcaMdi3nuoKFavkIHBRVqQ1qvMb+9LHk/cF4P6B2m8aP04hGf7oL6wZ9BuGwX1onlLhpuoofSyoQDQ==",
-      "dev": true,
-      "requires": {
-        "ansi-styles": "^3.2.1",
-        "chalk": "^2.4.1",
-        "cross-spawn": "^6.0.5",
-        "memorystream": "^0.3.1",
-        "minimatch": "^3.0.4",
-        "pidtree": "^0.3.0",
-        "read-pkg": "^3.0.0",
-        "shell-quote": "^1.6.1",
-        "string.prototype.padend": "^3.0.0"
-      }
-    },
-    "object-keys": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
-      "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",
-      "dev": true
-    },
-    "onchange": {
-      "version": "6.1.0",
-      "resolved": "https://registry.npmjs.org/onchange/-/onchange-6.1.0.tgz",
-      "integrity": "sha512-T0wvi3yzNd+Lut2ymJp2e6fTiob0TLrXnjqGaiK9MAFB8MYo/k/ZClx6ps7YhTtQ88dDm+hDHmtJXP1nJT5WNA==",
-      "dev": true,
-      "requires": {
-        "@blakeembrey/deque": "^1.0.3",
-        "arrify": "^2.0.0",
-        "chokidar": "^3.0.0",
-        "cross-spawn": "^6.0.0",
-        "ignore": "^5.1.4",
-        "minimist": "^1.2.0",
-        "supports-color": "^7.0.0",
-        "tree-kill": "^1.2.0"
+  "packages": {
+    "": {
+      "name": "minimal-mistakes",
+      "version": "4.26.1",
+      "license": "MIT",
+      "devDependencies": {
+        "uglify-js": "^3.17.4"
       },
-      "dependencies": {
-        "has-flag": {
-          "version": "4.0.0",
-          "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
-          "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
-          "dev": true
-        },
-        "supports-color": {
-          "version": "7.1.0",
-          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz",
-          "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==",
-          "dev": true,
-          "requires": {
-            "has-flag": "^4.0.0"
-          }
-        }
-      }
-    },
-    "parse-json": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz",
-      "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=",
-      "dev": true,
-      "requires": {
-        "error-ex": "^1.3.1",
-        "json-parse-better-errors": "^1.0.1"
+      "engines": {
+        "node": ">= 0.10.0"
       }
     },
-    "path-key": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz",
-      "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=",
-      "dev": true
-    },
-    "path-parse": {
-      "version": "1.0.6",
-      "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz",
-      "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==",
-      "dev": true
-    },
-    "path-type": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz",
-      "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==",
+    "node_modules/uglify-js": {
+      "version": "3.17.4",
+      "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.4.tgz",
+      "integrity": "sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==",
       "dev": true,
-      "requires": {
-        "pify": "^3.0.0"
-      }
-    },
-    "picomatch": {
-      "version": "2.2.1",
-      "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.1.tgz",
-      "integrity": "sha512-ISBaA8xQNmwELC7eOjqFKMESB2VIqt4PPDD0nsS95b/9dZXvVKOlz9keMSnoGGKcOHXfTvDD6WMaRoSc9UuhRA==",
-      "dev": true
-    },
-    "pidtree": {
-      "version": "0.3.0",
-      "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.3.0.tgz",
-      "integrity": "sha512-9CT4NFlDcosssyg8KVFltgokyKZIFjoBxw8CTGy+5F38Y1eQWrt8tRayiUOXE+zVKQnYu5BR8JjCtvK3BcnBhg==",
-      "dev": true
-    },
-    "pify": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
-      "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
-      "dev": true
-    },
-    "read-pkg": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz",
-      "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=",
-      "dev": true,
-      "requires": {
-        "load-json-file": "^4.0.0",
-        "normalize-package-data": "^2.3.2",
-        "path-type": "^3.0.0"
-      }
-    },
-    "readdirp": {
-      "version": "3.3.0",
-      "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.3.0.tgz",
-      "integrity": "sha512-zz0pAkSPOXXm1viEwygWIPSPkcBYjW1xU5j/JBh5t9bGCJwa6f9+BJa6VaB2g+b55yVrmXzqkyLf4xaWYM0IkQ==",
-      "dev": true,
-      "requires": {
-        "picomatch": "^2.0.7"
-      }
-    },
-    "resolve": {
-      "version": "1.12.0",
-      "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.12.0.tgz",
-      "integrity": "sha512-B/dOmuoAik5bKcD6s6nXDCjzUKnaDvdkRyAk6rsmsKLipWj4797iothd7jmmUhWTfinVMU+wc56rYKsit2Qy4w==",
-      "dev": true,
-      "requires": {
-        "path-parse": "^1.0.6"
-      }
-    },
-    "semver": {
-      "version": "5.7.1",
-      "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
-      "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
-      "dev": true
-    },
-    "shebang-command": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
-      "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=",
-      "dev": true,
-      "requires": {
-        "shebang-regex": "^1.0.0"
-      }
-    },
-    "shebang-regex": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz",
-      "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=",
-      "dev": true
-    },
-    "shell-quote": {
-      "version": "1.7.1",
-      "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.1.tgz",
-      "integrity": "sha512-2kUqeAGnMAu6YrTPX4E3LfxacH9gKljzVjlkUeSqY0soGwK4KLl7TURXCem712tkhBCeeaFP9QK4dKn88s3Icg==",
-      "dev": true
-    },
-    "source-map": {
-      "version": "0.6.1",
-      "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
-      "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
-      "dev": true
-    },
-    "spdx-correct": {
-      "version": "3.1.0",
-      "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz",
-      "integrity": "sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q==",
-      "dev": true,
-      "requires": {
-        "spdx-expression-parse": "^3.0.0",
-        "spdx-license-ids": "^3.0.0"
-      }
-    },
-    "spdx-exceptions": {
-      "version": "2.2.0",
-      "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz",
-      "integrity": "sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA==",
-      "dev": true
-    },
-    "spdx-expression-parse": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz",
-      "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==",
-      "dev": true,
-      "requires": {
-        "spdx-exceptions": "^2.1.0",
-        "spdx-license-ids": "^3.0.0"
-      }
-    },
-    "spdx-license-ids": {
-      "version": "3.0.5",
-      "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz",
-      "integrity": "sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q==",
-      "dev": true
-    },
-    "string.prototype.padend": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/string.prototype.padend/-/string.prototype.padend-3.0.0.tgz",
-      "integrity": "sha1-86rvfBcZ8XDF6rHDK/eA2W4h8vA=",
-      "dev": true,
-      "requires": {
-        "define-properties": "^1.1.2",
-        "es-abstract": "^1.4.3",
-        "function-bind": "^1.0.2"
-      }
-    },
-    "strip-bom": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
-      "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=",
-      "dev": true
-    },
-    "supports-color": {
-      "version": "5.5.0",
-      "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
-      "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
-      "dev": true,
-      "requires": {
-        "has-flag": "^3.0.0"
-      }
-    },
-    "to-regex-range": {
-      "version": "5.0.1",
-      "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
-      "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
-      "dev": true,
-      "requires": {
-        "is-number": "^7.0.0"
-      }
-    },
-    "tree-kill": {
-      "version": "1.2.2",
-      "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz",
-      "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==",
-      "dev": true
-    },
-    "uglify-js": {
-      "version": "3.8.0",
-      "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.8.0.tgz",
-      "integrity": "sha512-ugNSTT8ierCsDHso2jkBHXYrU8Y5/fY2ZUprfrJUiD7YpuFvV4jODLFmb3h4btQjqr5Nh4TX4XtgDfCU1WdioQ==",
-      "dev": true,
-      "requires": {
-        "commander": "~2.20.3",
-        "source-map": "~0.6.1"
-      }
-    },
-    "validate-npm-package-license": {
-      "version": "3.0.4",
-      "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz",
-      "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==",
-      "dev": true,
-      "requires": {
-        "spdx-correct": "^3.0.0",
-        "spdx-expression-parse": "^3.0.0"
-      }
-    },
-    "which": {
-      "version": "1.3.1",
-      "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
-      "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
-      "dev": true,
-      "requires": {
-        "isexe": "^2.0.0"
+      "bin": {
+        "uglifyjs": "bin/uglifyjs"
+      },
+      "engines": {
+        "node": ">=0.8.0"
       }
     }
   }
diff --git a/package.json b/package.json
index a669318760d5..a1557ee0ef7a 100644
--- a/package.json
+++ b/package.json
@@ -1,10 +1,11 @@
 {
   "name": "minimal-mistakes",
-  "version": "4.20.1",
+  "private": true,
+  "version": "4.26.2",
   "description": "Minimal Mistakes 2 column Jekyll theme.",
   "repository": {
     "type": "git",
-    "url": "git://github.com/mmistakes/minimal-mistakes.git"
+    "url": "https://github.com/mmistakes/minimal-mistakes.git"
   },
   "keywords": [
     "jekyll",
@@ -21,14 +22,6 @@
     "node": ">= 0.10.0"
   },
   "devDependencies": {
-    "npm-run-all": "^4.1.5",
-    "onchange": "^6.1.0",
-    "uglify-js": "^3.8.0"
-  },
-  "scripts": {
-    "uglify": "uglifyjs assets/js/vendor/jquery/jquery-3.4.1.js assets/js/plugins/jquery.fitvids.js assets/js/plugins/jquery.greedy-navigation.js assets/js/plugins/jquery.magnific-popup.js assets/js/plugins/jquery.ba-throttle-debounce.js assets/js/plugins/smooth-scroll.js assets/js/plugins/gumshoe.js assets/js/_main.js -c -m -o assets/js/main.min.js",
-    "add-banner": "node banner.js",
-    "watch:js": "onchange \"assets/js/**/*.js\" -e \"assets/js/main.min.js\" -- npm run build:js",
-    "build:js": "npm run uglify && npm run add-banner"
+    "uglify-js": "^3.17.4"
   }
 }
diff --git a/staticman.yml b/staticman.yml
index a4f161b7609b..61b95925167f 100644
--- a/staticman.yml
+++ b/staticman.yml
@@ -3,7 +3,7 @@
 # For example, you can have one property to handle comment submission and
 # another one to handle posts.
 # To encrypt strings use the following endpoint:
-# https://api.staticman.net/v2/encrypt/{TEXT TO BE ENCRYPTED}
+# https://{your Staticman API URL}/v[2|3]/encrypt/{TEXT TO BE ENCRYPTED}
 
 comments:
   # (*) REQUIRED
diff --git a/test/Gemfile b/test/Gemfile
index eb18fabd7192..635ea6c0f660 100644
--- a/test/Gemfile
+++ b/test/Gemfile
@@ -6,4 +6,5 @@ group :jekyll_plugins do
   gem 'jekyll-algolia', '~> 1.0'
 end
 
-gem "wdm", "~> 0.1.0" if Gem.win_platform?
\ No newline at end of file
+gem "wdm", "~> 0.1.0" if Gem.win_platform?
+gem "webrick"
\ No newline at end of file
diff --git a/test/_config.yml b/test/_config.yml
index a97378940dfc..9656a3764878 100644
--- a/test/_config.yml
+++ b/test/_config.yml
@@ -24,7 +24,7 @@ masthead_title           : "Custom Title" # overrides the website title displaye
 # breadcrumbs            : false # true, false (default)
 words_per_minute         : 200
 comments:
-  provider               : # false (default), "disqus", "discourse", "facebook", "staticman", "utterances", "custom"
+  provider               : # false (default), "disqus", "discourse", "facebook", "staticman", "utterances", "giscus", "custom"
   disqus:
     shortname            : # https://help.disqus.com/customer/portal/articles/466208-what-s-a-shortname-
   discourse:
@@ -37,6 +37,13 @@ comments:
   utterances:
     theme                : # "github-light" (default), "github-dark"
     issue_term           : # "pathname" (default)
+  giscus:
+    repo_id              : # Shown during giscus setup at https://giscus.app
+    category_name        : # Full text name of the category
+    category_id          : # Shown during giscus setup at https://giscus.app
+    discussion_term      : # "pathname" (default), "url", "title", "og:title"
+    reactions_enabled    : # '1' for enabled (default), '0' for disabled
+    theme                : # "light" (default), "dark", "dark_dimmed", "transparent_dark", "preferred_color_scheme"
   staticman:
     branch               : # "master"
     endpoint             : # "https://{your Staticman v3 API}/v3/entry/github/"
@@ -45,6 +52,8 @@ atom_feed:
 search                   : true # true, false (default)
 search_full_content      : true # true, false (default)
 search_provider          : "lunr"
+lunr:
+  search_within_pages    : true
 algolia:
   application_id         : "QB6HVGBSBA"
   index_name             : "dev_minimal-mistakes"
diff --git a/test/_pages/404.md b/test/_pages/404.md
index 9d0f86066123..b3025a6053b5 100644
--- a/test/_pages/404.md
+++ b/test/_pages/404.md
@@ -5,12 +5,4 @@ sitemap: false
 permalink: /404.html
 ---
 
-Sorry, but the page you were trying to view does not exist --- perhaps you can try searching for it below.
-
-<script type="text/javascript">
-  var GOOG_FIXURL_LANG = 'en';
-  var GOOG_FIXURL_SITE = '{{ site.url }}'
-</script>
-<script type="text/javascript"
-  src="//linkhelp.clients.google.com/tbproxy/lh/wm/fixurl.js">
-</script>
+Sorry, but the page you were trying to view does not exist.
diff --git a/test/_pages/category-archive-grid.md b/test/_pages/category-archive-grid.md
new file mode 100644
index 000000000000..3558be0a0db9
--- /dev/null
+++ b/test/_pages/category-archive-grid.md
@@ -0,0 +1,7 @@
+---
+title: "Posts by Category (grid view)"
+layout: categories
+permalink: /categories-grid/
+entries_layout: grid
+author_profile: true
+---
diff --git a/test/_pages/collection-archive-grid.html b/test/_pages/collection-archive-grid.html
new file mode 100644
index 000000000000..3280bf7bdf79
--- /dev/null
+++ b/test/_pages/collection-archive-grid.html
@@ -0,0 +1,28 @@
+---
+layout: archive
+title: "Posts by Collection (grid view)"
+permalink: /collection-archive-grid/
+entries_layout: grid
+author_profile: true
+---
+
+{% assign entries_layout = page.entries_layout | default: 'list' %}
+{% capture written_label %}'None'{% endcapture %}
+
+{% for collection in site.collections %}
+  {% unless collection.output == false or collection.label == "posts" %}
+    <section class="taxonomy__section">
+      {% capture label %}{{ collection.label }}{% endcapture %}
+      {% if label != written_label %}
+        <h2 id="{{ label | slugify }}" class="archive__subtitle">{{ label }}</h2>
+        {% capture written_label %}{{ label }}{% endcapture %}
+      {% endif %}
+      <div class="entries-{{ entries_layout }}">
+        {% for post in collection.docs %}
+          {% include archive-single.html type=entries_layout %}
+        {% endfor %}
+      </div>
+      <a href="#page-title" class="back-to-top">{{ site.data.ui-text[site.locale].back_to_top | default: 'Back to Top' }} &uarr;</a>
+    </section>
+  {% endunless %}
+{% endfor %}
diff --git a/test/_pages/collection-archive.html b/test/_pages/collection-archive.html
index 80d281642917..219592b6d8e9 100644
--- a/test/_pages/collection-archive.html
+++ b/test/_pages/collection-archive.html
@@ -17,7 +17,7 @@ <h2 id="{{ label | slugify }}" class="archive__subtitle">{{ label }}</h2>
   {% endunless %}
   {% for post in collection.docs %}
     {% unless collection.output == false or collection.label == "posts" %}
-      {% include archive-single.html %}
+      {% include archive-single.html type=page.entries_layout %}
     {% endunless %}
   {% endfor %}
-{% endfor %}
\ No newline at end of file
+{% endfor %}
diff --git a/test/_pages/edge-case-grid.md b/test/_pages/edge-case-grid.md
new file mode 100644
index 000000000000..c2f73e5a2a93
--- /dev/null
+++ b/test/_pages/edge-case-grid.md
@@ -0,0 +1,9 @@
+---
+title: Edge Case (grid view)
+layout: category
+permalink: /categories/edge-case-grid/
+taxonomy: Edge Case
+entries_layout: grid
+---
+
+Sample post listing for the category `Edge Case`.
diff --git a/test/_pages/markup-grid.md b/test/_pages/markup-grid.md
new file mode 100644
index 000000000000..7ebf0badbdd7
--- /dev/null
+++ b/test/_pages/markup-grid.md
@@ -0,0 +1,9 @@
+---
+title: Markup (grid view)
+layout: tag
+permalink: /tags/markup-grid/
+taxonomy: markup
+entries_layout: grid
+---
+
+Sample post listing for the tag `markup`.
diff --git a/test/_pages/page-archive-grid.html b/test/_pages/page-archive-grid.html
new file mode 100644
index 000000000000..269dc2a16403
--- /dev/null
+++ b/test/_pages/page-archive-grid.html
@@ -0,0 +1,16 @@
+---
+layout: archive
+title: "Page Archive"
+permalink: /page-archive-grid/
+entries_layout: grid
+author_profile: false
+---
+
+{% assign entries_layout = page.entries_layout | default: 'list' %}
+<section class="taxonomy__section">
+  <div class="entries-{{ entries_layout }}">
+    {% for post in site.pages %}
+      {% include archive-single.html type=entries_layout %}
+    {% endfor %}
+  </div>
+</section>
diff --git a/test/_pages/page-archive.html b/test/_pages/page-archive.html
index a4e515abc721..ce11172ed489 100644
--- a/test/_pages/page-archive.html
+++ b/test/_pages/page-archive.html
@@ -7,4 +7,4 @@
 
 {% for post in site.pages %}
   {% include archive-single.html %}
-{% endfor %}
\ No newline at end of file
+{% endfor %}
diff --git a/test/_pages/tag-archive-grid.md b/test/_pages/tag-archive-grid.md
new file mode 100644
index 000000000000..fa4df8137729
--- /dev/null
+++ b/test/_pages/tag-archive-grid.md
@@ -0,0 +1,7 @@
+---
+title: "Posts by Tag (grid view)"
+permalink: /tags-grid/
+layout: tags
+entries_layout: grid
+author_profile: true
+---
diff --git a/test/_pages/year-archive-grid.md b/test/_pages/year-archive-grid.md
new file mode 100644
index 000000000000..5029212cd32d
--- /dev/null
+++ b/test/_pages/year-archive-grid.md
@@ -0,0 +1,7 @@
+---
+title: "Posts by Year (grid view)"
+permalink: /year-archive-grid/
+layout: posts
+entries_layout: grid
+author_profile: true
+---
diff --git a/test/_posts/2010-06-02-post-video-youtube.md b/test/_posts/2010-06-02-post-video-youtube.md
index 16bc910c38da..686f622b9e70 100644
--- a/test/_posts/2010-06-02-post-video-youtube.md
+++ b/test/_posts/2010-06-02-post-video-youtube.md
@@ -8,4 +8,4 @@ tags:
 
 YouTube video embed below.
 
-<iframe width="640" height="360" src="https://www.youtube-nocookie.com/embed/l2Of1-d5E5o?controls=0&amp;showinfo=0" frameborder="0" allowfullscreen></iframe>
\ No newline at end of file
+<iframe width="640" height="360" src="https://www.youtube-nocookie.com/embed/-PVofD2A9t8?controls=0" frameborder="0" allowfullscreen></iframe>
\ No newline at end of file
diff --git a/test/_posts/2013-01-11-markup-html-tags-and-formatting.md b/test/_posts/2013-01-11-markup-html-tags-and-formatting.md
index f7d9437a1f5d..1fdc6dbdcd75 100644
--- a/test/_posts/2013-01-11-markup-html-tags-and-formatting.md
+++ b/test/_posts/2013-01-11-markup-html-tags-and-formatting.md
@@ -11,6 +11,7 @@ tags:
   - html
   - markup
 toc: true
+toc_sticky: true
 ---
 
 A variety of common markup showing how the theme styles them.
diff --git a/test/_posts/2017-01-23-layout-header-video.md b/test/_posts/2017-01-23-layout-header-video.md
index 5b45e6c3de71..f1aab7490ca8 100644
--- a/test/_posts/2017-01-23-layout-header-video.md
+++ b/test/_posts/2017-01-23-layout-header-video.md
@@ -2,7 +2,7 @@
 title: "Layout: Header Video"
 header:
   video:
-    id: XsxDH4HcOWA
+    id: -PVofD2A9t8
     provider: youtube
 categories:
   - Layout
@@ -23,20 +23,20 @@ This post should display a **header with a responsive video**, if the theme supp
 
 ### YouTube
 
-To embed the following YouTube video at url `https://www.youtube.com/watch?v=XsxDH4HcOWA` (long version) or `https://youtu.be/XsxDH4HcOWA` (short version) into a post or page's main content you'd use: 
+To embed the following YouTube video at url `https://www.youtube.com/watch?v=-PVofD2A9t8` (long version) or `https://youtu.be/-PVofD2A9t8` (short version) into a post or page's main content you'd use: 
 
 ```liquid
-{% raw %}{% include video id="XsxDH4HcOWA" provider="youtube" %}{% endraw %}
+{% raw %}{% include video id="-PVofD2A9t8" provider="youtube" %}{% endraw %}
 ```
 
-{% include video id="XsxDH4HcOWA" provider="youtube" %}
+{% include video id="-PVofD2A9t8" provider="youtube" %}
 
 To embed it as a video header you'd use the following YAML Front Matter
 
 ```yaml
 header:
   video:
-    id: XsxDH4HcOWA
+    id: -PVofD2A9t8
     provider: youtube
 ```