]> git.maquefel.me Git - brevno-suite/hugo/commitdiff
Merge commit '41bc6f702aa54200530efbf4267e5c823df3028d'
authorBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Tue, 20 Dec 2022 10:04:41 +0000 (11:04 +0100)
committerBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Tue, 20 Dec 2022 10:04:41 +0000 (11:04 +0100)
70 files changed:
1  2 
docs/_vendor/github.com/gohugoio/gohugoioTheme/assets/css/_code.css
docs/_vendor/github.com/gohugoio/gohugoioTheme/assets/index.js
docs/_vendor/github.com/gohugoio/gohugoioTheme/assets/output/css/app.css
docs/_vendor/github.com/gohugoio/gohugoioTheme/assets/output/js/app.js
docs/_vendor/modules.txt
docs/content/en/about/benefits.md
docs/content/en/about/features.md
docs/content/en/about/what-is-hugo.md
docs/content/en/content-management/archetypes.md
docs/content/en/content-management/comments.md
docs/content/en/content-management/front-matter.md
docs/content/en/content-management/multilingual.md
docs/content/en/content-management/organization/index.md
docs/content/en/content-management/sections.md
docs/content/en/content-management/shortcodes.md
docs/content/en/content-management/static-files.md
docs/content/en/content-management/summaries.md
docs/content/en/content-management/taxonomies.md
docs/content/en/content-management/toc.md
docs/content/en/content-management/urls.md
docs/content/en/contribute/development.md
docs/content/en/contribute/documentation.md
docs/content/en/functions/GetPage.md
docs/content/en/functions/after.md
docs/content/en/functions/apply.md
docs/content/en/functions/format.md
docs/content/en/functions/len.md
docs/content/en/functions/markdownify.md
docs/content/en/functions/param.md
docs/content/en/functions/partialCached.md
docs/content/en/functions/render.md
docs/content/en/functions/safeURL.md
docs/content/en/functions/seq.md
docs/content/en/functions/slice.md
docs/content/en/functions/time.md
docs/content/en/getting-started/_index.md
docs/content/en/getting-started/configuration.md
docs/content/en/getting-started/directory-structure.md
docs/content/en/getting-started/quick-start.md
docs/content/en/hosting-and-deployment/hosting-on-aws-amplify.md
docs/content/en/hosting-and-deployment/hosting-on-azure.md
docs/content/en/hosting-and-deployment/hosting-on-firebase.md
docs/content/en/hosting-and-deployment/hosting-on-github.md
docs/content/en/hosting-and-deployment/hosting-on-netlify.md
docs/content/en/hosting-and-deployment/hosting-on-render.md
docs/content/en/hosting-and-deployment/hugo-deploy.md
docs/content/en/hugo-modules/theme-components.md
docs/content/en/hugo-pipes/postcss.md
docs/content/en/installation/bsd.md
docs/content/en/readfiles/dateformatting.md
docs/content/en/templates/data-templates.md
docs/content/en/templates/homepage.md
docs/content/en/templates/internal.md
docs/content/en/templates/introduction.md
docs/content/en/templates/lists.md
docs/content/en/templates/output-formats.md
docs/content/en/templates/pagination.md
docs/content/en/templates/partials.md
docs/content/en/templates/shortcode-templates.md
docs/content/en/templates/single-page-templates.md
docs/content/en/templates/taxonomy-templates.md
docs/content/en/templates/template-debugging.md
docs/content/en/tools/starter-kits.md
docs/content/en/variables/page.md
docs/content/en/variables/site.md
docs/content/en/variables/taxonomy.md
docs/content/zh/templates/base.md
docs/go.mod
docs/go.sum
docs/netlify.toml

index 66a2fc24693254044928b66ce3d37bbb9520c195,0000000000000000000000000000000000000000..c82e77ee7766acca04b86a4bc497a53363c4d99e
mode 100644,000000..100644
--- /dev/null
@@@ -1,89 -1,0 +1,89 @@@
-   .full-width, pre.expand:hover
 +.chroma .lntable pre {
 +  padding: 0;
 +  margin: 0;
 +  border: 0;
 +}
 +
 +.chroma .lntable pre code  {
 +  padding: 0;
 +  margin: 0;
 +}
 +
 +code {
 +    padding: 0.2em;
 +    margin: 0;
 +    font-size: 85%;
 +    background-color: rgba(27,31,35,0.05);
 +    border-radius: 3px;
 +}
 +
 +pre code {
 +  display: block;
 +  padding: 1.5em 1.5em;
 +  font-size: .875rem;
 +  line-height: 2;
 +  overflow-x: auto;
 +}
 +
 +pre {
 +  background-color: #fff;
 +  color: #333;
 +  white-space: pre;
 +  hyphens: none;
 +  position: relative;
 +  border-width: 1px;
 +  border-color: #ccc;
 +  border-style: solid;
 +}
 +
 +/* The Pygments highlighter comes with its own styles. */
 +.highlight pre {
 +  background-color: inherit;
 +  color: inherit;
 +  padding: 0.5em;
 +  font-size: .875rem;
 +}
 +
 +
 +/*We are adding the copy button content here so we can change it with javascript. See the "Clipboard scripts"*/
 +.copy:after {
 +  content: "Copy"
 +}
 +.copied:after {
 +  content: "Copied"
 +}
 +
 +@media (--breakpoint-large) {
++  .full-width
 +  {
 +  /*width: 100vw;
 +  position: relative;
 +  left: 50%;
 +  right: 50%;
 +  margin-left: -50vw;
 +  margin-right: -50vw;*/
 +  /*width: 60vw;*/
 +  /*position: relative;
 +  left: 50%;
 +  right: 50%;*/
 +  /*margin-left: -30vw;*/
 +  margin-right: -30vw;
 +  max-width: 100vw;
 +  }
 +}
 +
 +.code-block .line-numbers-rows {
 +    background: #2f3a46;
 +    border: none;
 +    bottom: -50px;
 +    color: #98a4b3;
 +    left: -178px;
 +    padding: 50px 0;
 +    top: -50px;
 +    width: 138px
 +}
 +
 +.code-block .line-numbers-rows>span:before {
 +    color: inherit;
 +    padding-right: 30px
 +}
index 11b320d7487f77b49a72ca6107f8b2c9792e25ec,0000000000000000000000000000000000000000..c89af041bee55c7e6928db1fc0c3a06a9306e872
mode 100644,000000..100644
--- /dev/null
@@@ -1,11 -1,0 +1,10 @@@
- import './js/codeblocks.js';
 +require('typeface-muli');
 +import styles from './css/main.css';
 +import './js/clipboardjs.js';
 +import './js/docsearch.js';
 +import './js/lazysizes.js';
 +import './js/menutoggle.js';
 +import './js/scrolldir.js';
 +import './js/smoothscroll.js';
 +import './js/tabs.js';
 +import './js/nojs.js';
index f5d56e95acac702a80c4b4dd1ac1dca0db15bfe6,0000000000000000000000000000000000000000..8b0c8c1918149f2e35ce0d4b4569b81836e8a046
mode 100644,000000..100644
--- /dev/null
@@@ -1,5278 -1,0 +1,5278 @@@
-   .full-width, pre.expand:hover
 +/* muli-200normal - latin */
 +@font-face {
 +  font-family: 'Muli';
 +  font-style: normal;
 +  font-display: swap;
 +  font-weight: 200;
 +  src:
 +    local('Muli Extra Light '),
 +    local('Muli-Extra Light'),
 +    url(/fonts/muli-latin-200.woff2) format('woff2'), 
 +    url(/fonts/muli-latin-200.woff) format('woff'); /* Modern Browsers */
 +}
 +/* muli-200italic - latin */
 +@font-face {
 +  font-family: 'Muli';
 +  font-style: italic;
 +  font-display: swap;
 +  font-weight: 200;
 +  src:
 +    local('Muli Extra Light italic'),
 +    local('Muli-Extra Lightitalic'),
 +    url(/fonts/muli-latin-200italic.woff2) format('woff2'), 
 +    url(/fonts/muli-latin-200italic.woff) format('woff'); /* Modern Browsers */
 +}
 +/* muli-300normal - latin */
 +@font-face {
 +  font-family: 'Muli';
 +  font-style: normal;
 +  font-display: swap;
 +  font-weight: 300;
 +  src:
 +    local('Muli Light '),
 +    local('Muli-Light'),
 +    url(/fonts/muli-latin-300.woff2) format('woff2'), 
 +    url(/fonts/muli-latin-300.woff) format('woff'); /* Modern Browsers */
 +}
 +/* muli-300italic - latin */
 +@font-face {
 +  font-family: 'Muli';
 +  font-style: italic;
 +  font-display: swap;
 +  font-weight: 300;
 +  src:
 +    local('Muli Light italic'),
 +    local('Muli-Lightitalic'),
 +    url(/fonts/muli-latin-300italic.woff2) format('woff2'), 
 +    url(/fonts/muli-latin-300italic.woff) format('woff'); /* Modern Browsers */
 +}
 +/* muli-400normal - latin */
 +@font-face {
 +  font-family: 'Muli';
 +  font-style: normal;
 +  font-display: swap;
 +  font-weight: 400;
 +  src:
 +    local('Muli Regular '),
 +    local('Muli-Regular'),
 +    url(/fonts/muli-latin-400.woff2) format('woff2'), 
 +    url(/fonts/muli-latin-400.woff) format('woff'); /* Modern Browsers */
 +}
 +/* muli-400italic - latin */
 +@font-face {
 +  font-family: 'Muli';
 +  font-style: italic;
 +  font-display: swap;
 +  font-weight: 400;
 +  src:
 +    local('Muli Regular italic'),
 +    local('Muli-Regularitalic'),
 +    url(/fonts/muli-latin-400italic.woff2) format('woff2'), 
 +    url(/fonts/muli-latin-400italic.woff) format('woff'); /* Modern Browsers */
 +}
 +/* muli-600normal - latin */
 +@font-face {
 +  font-family: 'Muli';
 +  font-style: normal;
 +  font-display: swap;
 +  font-weight: 600;
 +  src:
 +    local('Muli SemiBold '),
 +    local('Muli-SemiBold'),
 +    url(/fonts/muli-latin-600.woff2) format('woff2'), 
 +    url(/fonts/muli-latin-600.woff) format('woff'); /* Modern Browsers */
 +}
 +/* muli-600italic - latin */
 +@font-face {
 +  font-family: 'Muli';
 +  font-style: italic;
 +  font-display: swap;
 +  font-weight: 600;
 +  src:
 +    local('Muli SemiBold italic'),
 +    local('Muli-SemiBolditalic'),
 +    url(/fonts/muli-latin-600italic.woff2) format('woff2'), 
 +    url(/fonts/muli-latin-600italic.woff) format('woff'); /* Modern Browsers */
 +}
 +/* muli-700normal - latin */
 +@font-face {
 +  font-family: 'Muli';
 +  font-style: normal;
 +  font-display: swap;
 +  font-weight: 700;
 +  src:
 +    local('Muli Bold '),
 +    local('Muli-Bold'),
 +    url(/fonts/muli-latin-700.woff2) format('woff2'), 
 +    url(/fonts/muli-latin-700.woff) format('woff'); /* Modern Browsers */
 +}
 +/* muli-700italic - latin */
 +@font-face {
 +  font-family: 'Muli';
 +  font-style: italic;
 +  font-display: swap;
 +  font-weight: 700;
 +  src:
 +    local('Muli Bold italic'),
 +    local('Muli-Bolditalic'),
 +    url(/fonts/muli-latin-700italic.woff2) format('woff2'), 
 +    url(/fonts/muli-latin-700italic.woff) format('woff'); /* Modern Browsers */
 +}
 +/* muli-800normal - latin */
 +@font-face {
 +  font-family: 'Muli';
 +  font-style: normal;
 +  font-display: swap;
 +  font-weight: 800;
 +  src:
 +    local('Muli ExtraBold '),
 +    local('Muli-ExtraBold'),
 +    url(/fonts/muli-latin-800.woff2) format('woff2'), 
 +    url(/fonts/muli-latin-800.woff) format('woff'); /* Modern Browsers */
 +}
 +/* muli-800italic - latin */
 +@font-face {
 +  font-family: 'Muli';
 +  font-style: italic;
 +  font-display: swap;
 +  font-weight: 800;
 +  src:
 +    local('Muli ExtraBold italic'),
 +    local('Muli-ExtraBolditalic'),
 +    url(/fonts/muli-latin-800italic.woff2) format('woff2'), 
 +    url(/fonts/muli-latin-800italic.woff) format('woff'); /* Modern Browsers */
 +}
 +/* muli-900normal - latin */
 +@font-face {
 +  font-family: 'Muli';
 +  font-style: normal;
 +  font-display: swap;
 +  font-weight: 900;
 +  src:
 +    local('Muli Black '),
 +    local('Muli-Black'),
 +    url(/fonts/muli-latin-900.woff2) format('woff2'), 
 +    url(/fonts/muli-latin-900.woff) format('woff'); /* Modern Browsers */
 +}
 +/* muli-900italic - latin */
 +@font-face {
 +  font-family: 'Muli';
 +  font-style: italic;
 +  font-display: swap;
 +  font-weight: 900;
 +  src:
 +    local('Muli Black italic'),
 +    local('Muli-Blackitalic'),
 +    url(/fonts/muli-latin-900italic.woff2) format('woff2'), 
 +    url(/fonts/muli-latin-900italic.woff) format('woff'); /* Modern Browsers */
 +}
 +
 +
 +/*Base Styles*/
 +/*! TACHYONS v4.7.0 | http://tachyons.io */
 +/*
 + * NOTE: The Tachyons folder is for backup/reference only. This file references the module
 + *      ________            ______
 + *      ___  __/_____ _________  /______  ______________________
 + *      __  /  _  __ `/  ___/_  __ \_  / / /  __ \_  __ \_  ___/
 + *      _  /   / /_/ // /__ _  / / /  /_/ // /_/ /  / / /(__  )
 + *      /_/    \__,_/ \___/ /_/ /_/_\__, / \____//_/ /_//____/
 + *                                 /____/
 + *
 + *    TABLE OF CONTENTS
 + *
 + *    1. External Library Includes
 + *       - Normalize.css | http://normalize.css.github.io
 + *    2. Tachyons Modules
 + *    3. Variables
 + *       - Media Queries
 + *       - Colors
 + *    4. Debugging
 + *       - Debug all
 + *       - Debug children
 + *
 + */
 +/* External Library Includes */
 +/*! normalize.css v8.0.0 | MIT License | github.com/necolas/normalize.css */
 +/* Document
 +   ========================================================================== */
 +/**
 + * 1. Correct the line height in all browsers.
 + * 2. Prevent adjustments of font size after orientation changes in iOS.
 + */
 +html {
 +  line-height: 1.15; /* 1 */
 +  -webkit-text-size-adjust: 100%; /* 2 */
 +}
 +/* Sections
 +   ========================================================================== */
 +/**
 + * Remove the margin in all browsers.
 + */
 +body {
 +  margin: 0;
 +}
 +/**
 + * Correct the font size and margin on `h1` elements within `section` and
 + * `article` contexts in Chrome, Firefox, and Safari.
 + */
 +h1 {
 +  font-size: 2em;
 +  margin: 0.67em 0;
 +}
 +/* Grouping content
 +   ========================================================================== */
 +/**
 + * 1. Add the correct box sizing in Firefox.
 + * 2. Show the overflow in Edge and IE.
 + */
 +hr {
 +  -webkit-box-sizing: content-box;
 +          box-sizing: content-box; /* 1 */
 +  height: 0; /* 1 */
 +  overflow: visible; /* 2 */
 +}
 +/**
 + * 1. Correct the inheritance and scaling of font size in all browsers.
 + * 2. Correct the odd `em` font sizing in all browsers.
 + */
 +pre {
 +  font-family: monospace, monospace; /* 1 */
 +  font-size: 1em; /* 2 */
 +}
 +/* Text-level semantics
 +   ========================================================================== */
 +/**
 + * Remove the gray background on active links in IE 10.
 + */
 +a {
 +  background-color: transparent;
 +}
 +/**
 + * 1. Remove the bottom border in Chrome 57-
 + * 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari.
 + */
 +abbr[title] {
 +  border-bottom: none; /* 1 */
 +  text-decoration: underline; /* 2 */
 +  -webkit-text-decoration: underline dotted;
 +          text-decoration: underline dotted; /* 2 */
 +}
 +/**
 + * Add the correct font weight in Chrome, Edge, and Safari.
 + */
 +b,
 +strong {
 +  font-weight: bolder;
 +}
 +/**
 + * 1. Correct the inheritance and scaling of font size in all browsers.
 + * 2. Correct the odd `em` font sizing in all browsers.
 + */
 +code,
 +kbd,
 +samp {
 +  font-family: monospace, monospace; /* 1 */
 +  font-size: 1em; /* 2 */
 +}
 +/**
 + * Add the correct font size in all browsers.
 + */
 +small {
 +  font-size: 80%;
 +}
 +/**
 + * Prevent `sub` and `sup` elements from affecting the line height in
 + * all browsers.
 + */
 +sub,
 +sup {
 +  font-size: 75%;
 +  line-height: 0;
 +  position: relative;
 +  vertical-align: baseline;
 +}
 +sub {
 +  bottom: -0.25em;
 +}
 +sup {
 +  top: -0.5em;
 +}
 +/* Embedded content
 +   ========================================================================== */
 +/**
 + * Remove the border on images inside links in IE 10.
 + */
 +img {
 +  border-style: none;
 +}
 +/* Forms
 +   ========================================================================== */
 +/**
 + * 1. Change the font styles in all browsers.
 + * 2. Remove the margin in Firefox and Safari.
 + */
 +button,
 +input,
 +optgroup,
 +select,
 +textarea {
 +  font-family: inherit; /* 1 */
 +  font-size: 100%; /* 1 */
 +  line-height: 1.15; /* 1 */
 +  margin: 0; /* 2 */
 +}
 +/**
 + * Show the overflow in IE.
 + * 1. Show the overflow in Edge.
 + */
 +button,
 +input { /* 1 */
 +  overflow: visible;
 +}
 +/**
 + * Remove the inheritance of text transform in Edge, Firefox, and IE.
 + * 1. Remove the inheritance of text transform in Firefox.
 + */
 +button,
 +select { /* 1 */
 +  text-transform: none;
 +}
 +/**
 + * Correct the inability to style clickable types in iOS and Safari.
 + */
 +button,
 +[type="button"],
 +[type="reset"],
 +[type="submit"] {
 +  -webkit-appearance: button;
 +}
 +/**
 + * Remove the inner border and padding in Firefox.
 + */
 +button::-moz-focus-inner,
 +[type="button"]::-moz-focus-inner,
 +[type="reset"]::-moz-focus-inner,
 +[type="submit"]::-moz-focus-inner {
 +  border-style: none;
 +  padding: 0;
 +}
 +/**
 + * Restore the focus styles unset by the previous rule.
 + */
 +button:-moz-focusring,
 +[type="button"]:-moz-focusring,
 +[type="reset"]:-moz-focusring,
 +[type="submit"]:-moz-focusring {
 +  outline: 1px dotted ButtonText;
 +}
 +/**
 + * Correct the padding in Firefox.
 + */
 +fieldset {
 +  padding: 0.35em 0.75em 0.625em;
 +}
 +/**
 + * 1. Correct the text wrapping in Edge and IE.
 + * 2. Correct the color inheritance from `fieldset` elements in IE.
 + * 3. Remove the padding so developers are not caught out when they zero out
 + *    `fieldset` elements in all browsers.
 + */
 +legend {
 +  -webkit-box-sizing: border-box;
 +          box-sizing: border-box; /* 1 */
 +  color: inherit; /* 2 */
 +  display: table; /* 1 */
 +  max-width: 100%; /* 1 */
 +  padding: 0; /* 3 */
 +  white-space: normal; /* 1 */
 +}
 +/**
 + * Add the correct vertical alignment in Chrome, Firefox, and Opera.
 + */
 +progress {
 +  vertical-align: baseline;
 +}
 +/**
 + * Remove the default vertical scrollbar in IE 10+.
 + */
 +textarea {
 +  overflow: auto;
 +}
 +/**
 + * 1. Add the correct box sizing in IE 10.
 + * 2. Remove the padding in IE 10.
 + */
 +[type="checkbox"],
 +[type="radio"] {
 +  -webkit-box-sizing: border-box;
 +          box-sizing: border-box; /* 1 */
 +  padding: 0; /* 2 */
 +}
 +/**
 + * Correct the cursor style of increment and decrement buttons in Chrome.
 + */
 +[type="number"]::-webkit-inner-spin-button,
 +[type="number"]::-webkit-outer-spin-button {
 +  height: auto;
 +}
 +/**
 + * 1. Correct the odd appearance in Chrome and Safari.
 + * 2. Correct the outline style in Safari.
 + */
 +[type="search"] {
 +  -webkit-appearance: textfield; /* 1 */
 +  outline-offset: -2px; /* 2 */
 +}
 +/**
 + * Remove the inner padding in Chrome and Safari on macOS.
 + */
 +[type="search"]::-webkit-search-decoration {
 +  -webkit-appearance: none;
 +}
 +/**
 + * 1. Correct the inability to style clickable types in iOS and Safari.
 + * 2. Change font properties to `inherit` in Safari.
 + */
 +::-webkit-file-upload-button {
 +  -webkit-appearance: button; /* 1 */
 +  font: inherit; /* 2 */
 +}
 +/* Interactive
 +   ========================================================================== */
 +/*
 + * Add the correct display in Edge, IE 10+, and Firefox.
 + */
 +details {
 +  display: block;
 +}
 +/*
 + * Add the correct display in all browsers.
 + */
 +summary {
 +  display: list-item;
 +}
 +/* Misc
 +   ========================================================================== */
 +/**
 + * Add the correct display in IE 10+.
 + */
 +template {
 +  display: none;
 +}
 +/**
 + * Add the correct display in IE 10.
 + */
 +[hidden] {
 +  display: none;
 +}
 +/* Modules */
 +/*
 + 
 +  BOX SIZING
 +
 +*/
 +html,
 +body,
 +div,
 +article,
 +aside,
 +section,
 +main,
 +nav,
 +footer,
 +header,
 +form,
 +fieldset,
 +legend,
 +pre,
 +code,
 +a,
 +h1,h2,h3,h4,h5,h6,
 +p,
 +ul,
 +ol,
 +li,
 +dl,
 +dt,
 +dd,
 +blockquote,
 +figcaption,
 +figure,
 +textarea,
 +table, 
 +td,
 +th,
 +tr,
 +input[type="email"],
 +input[type="number"],
 +input[type="password"],
 +input[type="tel"],
 +input[type="text"],
 +input[type="url"],
 +.border-box {
 +  -webkit-box-sizing: border-box;
 +          box-sizing: border-box;
 +}
 +/*@import 'tachyons/src/_aspect-ratios';*/
 +/*
 +
 +   IMAGES
 +   Docs: http://tachyons.io/docs/elements/images/
 +
 +*/
 +/* Responsive images! */
 +img { max-width: 100%; }
 +/*
 +
 +   BACKGROUND SIZE
 +   Docs: http://tachyons.io/docs/themes/background-size/
 +
 +   Media Query Extensions:
 +     -ns = not-small
 +     -m  = medium
 +     -l  = large
 +
 +*/
 +/*
 +  Often used in combination with background image set as an inline style
 +  on an html element.
 +*/
 +.cover { background-size: cover!important; }
 +.contain { background-size: contain!important; }
 +@media screen and (min-width: 30em) {
 +  .cover-ns { background-size: cover!important; }
 +  .contain-ns { background-size: contain!important; }
 +}
 +@media screen and (min-width: 30em) and (max-width: 60em) {
 +  .cover-m { background-size: cover!important; }
 +  .contain-m { background-size: contain!important; }
 +}
 +@media screen and (min-width: 60em) {
 +  .cover-l { background-size: cover!important; }
 +  .contain-l { background-size: contain!important; }
 +}
 +/*
 +
 +    BACKGROUND POSITION
 +
 +    Base:
 +    bg = background
 +
 +    Modifiers:
 +    -center = center center
 +    -top = top center
 +    -right = center right
 +    -bottom = bottom center
 +    -left = center left
 +
 +    Media Query Extensions:
 +      -ns = not-small
 +      -m  = medium
 +      -l  = large
 +
 + */
 +.bg-center { 
 +  background-repeat: no-repeat;
 +  background-position: center center; 
 +}
 +.bg-top {    
 +  background-repeat: no-repeat; 
 +  background-position: top center;    
 +}
 +.bg-right {  
 +  background-repeat: no-repeat; 
 +  background-position: center right;  
 +}
 +.bg-bottom { 
 +  background-repeat: no-repeat; 
 +  background-position: bottom center; 
 +}
 +.bg-left {   
 +  background-repeat: no-repeat; 
 +  background-position: center left;   
 +}
 +@media screen and (min-width: 30em) {
 +  .bg-center-ns { 
 +    background-repeat: no-repeat;
 +    background-position: center center; 
 +  }
 +
 +  .bg-top-ns {    
 +    background-repeat: no-repeat; 
 +    background-position: top center;    
 +  }
 +
 +  .bg-right-ns {  
 +    background-repeat: no-repeat; 
 +    background-position: center right;  
 +  }
 +
 +  .bg-bottom-ns { 
 +    background-repeat: no-repeat; 
 +    background-position: bottom center; 
 +  }
 +
 +  .bg-left-ns {   
 +    background-repeat: no-repeat; 
 +    background-position: center left;   
 +  }
 +}
 +@media screen and (min-width: 30em) and (max-width: 60em) {
 +  .bg-center-m { 
 +    background-repeat: no-repeat;
 +    background-position: center center; 
 +  }
 +
 +  .bg-top-m {    
 +    background-repeat: no-repeat; 
 +    background-position: top center;    
 +  }
 +
 +  .bg-right-m {  
 +    background-repeat: no-repeat; 
 +    background-position: center right;  
 +  }
 +
 +  .bg-bottom-m { 
 +    background-repeat: no-repeat; 
 +    background-position: bottom center; 
 +  }
 +
 +  .bg-left-m {   
 +    background-repeat: no-repeat; 
 +    background-position: center left;   
 +  }
 +}
 +@media screen and (min-width: 60em) {
 +  .bg-center-l { 
 +    background-repeat: no-repeat;
 +    background-position: center center; 
 +  }
 +
 +  .bg-top-l {    
 +    background-repeat: no-repeat; 
 +    background-position: top center;    
 +  }
 +
 +  .bg-right-l {  
 +    background-repeat: no-repeat; 
 +    background-position: center right;  
 +  }
 +
 +  .bg-bottom-l { 
 +    background-repeat: no-repeat; 
 +    background-position: bottom center; 
 +  }
 +
 +  .bg-left-l {   
 +    background-repeat: no-repeat; 
 +    background-position: center left;   
 +  }
 +}
 +/*@import 'tachyons/src/_outlines';*/
 +/*
 +
 +    BORDERS
 +    Docs: http://tachyons.io/docs/themes/borders/
 +
 +    Base:
 +      b = border
 +
 +    Modifiers:
 +      a = all
 +      t = top
 +      r = right
 +      b = bottom
 +      l = left
 +      n = none
 +
 +   Media Query Extensions:
 +     -ns = not-small
 +     -m  = medium
 +     -l  = large
 +
 +*/
 +.ba { border-style: solid; border-width: 1px; }
 +.bt { border-top-style: solid; border-top-width: 1px; }
 +.br { border-right-style: solid; border-right-width: 1px; }
 +.bb { border-bottom-style: solid; border-bottom-width: 1px; }
 +.bl { border-left-style: solid; border-left-width: 1px; }
 +.bn { border-style: none; border-width: 0; }
 +@media screen and (min-width: 30em) {
 +  .ba-ns { border-style: solid; border-width: 1px; }
 +  .bt-ns { border-top-style: solid; border-top-width: 1px; }
 +  .br-ns { border-right-style: solid; border-right-width: 1px; }
 +  .bb-ns { border-bottom-style: solid; border-bottom-width: 1px; }
 +  .bl-ns { border-left-style: solid; border-left-width: 1px; }
 +  .bn-ns { border-style: none; border-width: 0; }
 +}
 +@media screen and (min-width: 30em) and (max-width: 60em) {
 +  .ba-m { border-style: solid; border-width: 1px; }
 +  .bt-m { border-top-style: solid; border-top-width: 1px; }
 +  .br-m { border-right-style: solid; border-right-width: 1px; }
 +  .bb-m { border-bottom-style: solid; border-bottom-width: 1px; }
 +  .bl-m { border-left-style: solid; border-left-width: 1px; }
 +  .bn-m { border-style: none; border-width: 0; }
 +}
 +@media screen and (min-width: 60em) {
 +  .ba-l { border-style: solid; border-width: 1px; }
 +  .bt-l { border-top-style: solid; border-top-width: 1px; }
 +  .br-l { border-right-style: solid; border-right-width: 1px; }
 +  .bb-l { border-bottom-style: solid; border-bottom-width: 1px; }
 +  .bl-l { border-left-style: solid; border-left-width: 1px; }
 +  .bn-l { border-style: none; border-width: 0; }
 +}
 +/*
 +
 +   BORDER COLORS
 +   Docs: http://tachyons.io/docs/themes/borders/
 +
 +   Border colors can be used to extend the base
 +   border classes ba,bt,bb,br,bl found in the _borders.css file.
 +
 +   The base border class by default will set the color of the border
 +   to that of the current text color. These classes are for the cases
 +   where you desire for the text and border colors to be different.
 +
 +   Base:
 +     b = border
 +
 +   Modifiers:
 +   --color-name = each color variable name is also a border color name
 +
 +*/
 +.b--black {        border-color: #000; }
 +.b--near-black {   border-color: #111; }
 +.b--dark-gray {    border-color: #333; }
 +.b--mid-gray {     border-color: #555; }
 +.b--gray {         border-color: #777; }
 +.b--silver {       border-color: #999; }
 +.b--light-silver { border-color: #aaa; }
 +.b--moon-gray {    border-color: #ccc; }
 +.b--light-gray {   border-color: #eee; }
 +.b--near-white {   border-color: #f4f4f4; }
 +.b--white {        border-color: #fff; }
 +.b--white-90 {   border-color: rgba(255, 255, 255, .9); }
 +.b--white-80 {   border-color: rgba(255, 255, 255, .8); }
 +.b--white-70 {   border-color: rgba(255, 255, 255, .7); }
 +.b--white-60 {   border-color: rgba(255, 255, 255, .6); }
 +.b--white-50 {   border-color: rgba(255, 255, 255, .5); }
 +.b--white-40 {   border-color: rgba(255, 255, 255, .4); }
 +.b--white-30 {   border-color: rgba(255, 255, 255, .3); }
 +.b--white-20 {   border-color: rgba(255, 255, 255, .2); }
 +.b--white-10 {   border-color: rgba(255, 255, 255, .1); }
 +.b--white-05 {   border-color: rgba(255, 255, 255, .05); }
 +.b--white-025 {   border-color: rgba(255, 255, 255, .025); }
 +.b--white-0125 {   border-color: rgba(255, 255, 255, .0125); }
 +.b--black-90 {   border-color: rgba(0, 0, 0, .9); }
 +.b--black-80 {   border-color: rgba(0, 0, 0, .8); }
 +.b--black-70 {   border-color: rgba(0, 0, 0, .7); }
 +.b--black-60 {   border-color: rgba(0, 0, 0, .6); }
 +.b--black-50 {   border-color: rgba(0, 0, 0, .5); }
 +.b--black-40 {   border-color: rgba(0, 0, 0, .4); }
 +.b--black-30 {   border-color: rgba(0, 0, 0, .3); }
 +.b--black-20 {   border-color: rgba(0, 0, 0, .2); }
 +.b--black-10 {   border-color: rgba(0, 0, 0, .1); }
 +.b--black-05 {   border-color: rgba(0, 0, 0, .05); }
 +.b--black-025 {   border-color: rgba(0, 0, 0, .025); }
 +.b--black-0125 {   border-color: rgba(0, 0, 0, .0125); }
 +.b--dark-red { border-color: #e7040f; }
 +.b--red { border-color: #ff4136; }
 +.b--light-red { border-color: #ff725c; }
 +.b--orange { border-color: #ff6300; }
 +.b--gold { border-color: #ffb700; }
 +.b--yellow { border-color: #ffd700; }
 +.b--light-yellow { border-color: #fbf1a9; }
 +.b--purple { border-color: #5e2ca5; }
 +.b--light-purple { border-color: #a463f2; }
 +.b--dark-pink { border-color: #d5008f; }
 +.b--hot-pink { border-color: #ff41b4; }
 +.b--pink { border-color: #ff80cc; }
 +.b--light-pink { border-color: #ffa3d7; }
 +.b--dark-green { border-color: #137752; }
 +.b--green { border-color: #19a974; }
 +.b--light-green { border-color: #9eebcf; }
 +.b--navy { border-color: #001b44; }
 +.b--dark-blue { border-color: #00449e; }
 +.b--blue { border-color: #0594CB; }
 +.b--light-blue { border-color: #96ccff; }
 +.b--lightest-blue { border-color: #cdecff; }
 +.b--washed-blue { border-color: #f6fffe; }
 +.b--washed-green { border-color: #e8fdf5; }
 +.b--washed-yellow { border-color: #fffceb; }
 +.b--washed-red { border-color: #ffdfdf; }
 +.b--transparent { border-color: transparent; }
 +.b--inherit { border-color: inherit; }
 +/*
 +
 +   BORDER RADIUS
 +   Docs: http://tachyons.io/docs/themes/border-radius/
 +
 +   Base:
 +     br   = border-radius
 +
 +   Modifiers:
 +     0    = 0/none
 +     1    = 1st step in scale
 +     2    = 2nd step in scale
 +     3    = 3rd step in scale
 +     4    = 4th step in scale
 +
 +   Literal values:
 +     -100 = 100%
 +     -pill = 9999px
 +
 +   Media Query Extensions:
 +     -ns = not-small
 +     -m  = medium
 +     -l  = large
 +
 +*/
 +.br0 {        border-radius: 0; }
 +.br1 {        border-radius: .125rem; }
 +.br2 {        border-radius: .25rem; }
 +.br3 {        border-radius: .5rem; }
 +.br4 {        border-radius: 1rem; }
 +.br-100 {     border-radius: 100%; }
 +.br-pill {    border-radius: 9999px; }
 +.br--bottom {
 +      border-top-left-radius: 0;
 +      border-top-right-radius: 0;
 +  }
 +.br--top {
 +      border-bottom-left-radius: 0;
 +      border-bottom-right-radius: 0;
 +  }
 +.br--right {
 +      border-top-left-radius: 0;
 +      border-bottom-left-radius: 0;
 +  }
 +.br--left {
 +      border-top-right-radius: 0;
 +      border-bottom-right-radius: 0;
 +  }
 +@media screen and (min-width: 30em) {
 +  .br0-ns {     border-radius: 0; }
 +  .br1-ns {     border-radius: .125rem; }
 +  .br2-ns {     border-radius: .25rem; }
 +  .br3-ns {     border-radius: .5rem; }
 +  .br4-ns {     border-radius: 1rem; }
 +  .br-100-ns {  border-radius: 100%; }
 +  .br-pill-ns { border-radius: 9999px; }
 +  .br--bottom-ns {
 +      border-top-left-radius: 0;
 +      border-top-right-radius: 0;
 +  }
 +  .br--top-ns {
 +      border-bottom-left-radius: 0;
 +      border-bottom-right-radius: 0;
 +  }
 +  .br--right-ns {
 +      border-top-left-radius: 0;
 +      border-bottom-left-radius: 0;
 +  }
 +  .br--left-ns {
 +      border-top-right-radius: 0;
 +      border-bottom-right-radius: 0;
 +  }
 +}
 +@media screen and (min-width: 30em) and (max-width: 60em) {
 +  .br0-m {     border-radius: 0; }
 +  .br1-m {     border-radius: .125rem; }
 +  .br2-m {     border-radius: .25rem; }
 +  .br3-m {     border-radius: .5rem; }
 +  .br4-m {     border-radius: 1rem; }
 +  .br-100-m {  border-radius: 100%; }
 +  .br-pill-m { border-radius: 9999px; }
 +  .br--bottom-m {
 +      border-top-left-radius: 0;
 +      border-top-right-radius: 0;
 +  }
 +  .br--top-m {
 +      border-bottom-left-radius: 0;
 +      border-bottom-right-radius: 0;
 +  }
 +  .br--right-m {
 +      border-top-left-radius: 0;
 +      border-bottom-left-radius: 0;
 +  }
 +  .br--left-m {
 +      border-top-right-radius: 0;
 +      border-bottom-right-radius: 0;
 +  }
 +}
 +@media screen and (min-width: 60em) {
 +  .br0-l {     border-radius: 0; }
 +  .br1-l {     border-radius: .125rem; }
 +  .br2-l {     border-radius: .25rem; }
 +  .br3-l {     border-radius: .5rem; }
 +  .br4-l {     border-radius: 1rem; }
 +  .br-100-l {  border-radius: 100%; }
 +  .br-pill-l { border-radius: 9999px; }
 +  .br--bottom-l {
 +      border-top-left-radius: 0;
 +      border-top-right-radius: 0;
 +  }
 +  .br--top-l {
 +      border-bottom-left-radius: 0;
 +      border-bottom-right-radius: 0;
 +  }
 +  .br--right-l {
 +      border-top-left-radius: 0;
 +      border-bottom-left-radius: 0;
 +  }
 +  .br--left-l {
 +      border-top-right-radius: 0;
 +      border-bottom-right-radius: 0;
 +  }
 +}
 +/*
 +
 +   BORDER STYLES
 +   Docs: http://tachyons.io/docs/themes/borders/
 +
 +   Depends on base border module in _borders.css
 +
 +   Base:
 +     b = border-style
 +
 +   Modifiers:
 +     --none   = none
 +     --dotted = dotted
 +     --dashed = dashed
 +     --solid  = solid
 +
 +   Media Query Extensions:
 +     -ns = not-small
 +     -m  = medium
 +     -l  = large
 +
 + */
 +.b--dotted { border-style: dotted; }
 +.b--dashed { border-style: dashed; }
 +.b--solid {  border-style: solid; }
 +.b--none {   border-style: none; }
 +@media screen and (min-width: 30em) {
 +  .b--dotted-ns { border-style: dotted; }
 +  .b--dashed-ns { border-style: dashed; }
 +  .b--solid-ns {  border-style: solid; }
 +  .b--none-ns {   border-style: none; }
 +}
 +@media screen and (min-width: 30em) and (max-width: 60em) {
 +  .b--dotted-m { border-style: dotted; }
 +  .b--dashed-m { border-style: dashed; }
 +  .b--solid-m {  border-style: solid; }
 +  .b--none-m {   border-style: none; }
 +}
 +@media screen and (min-width: 60em) {
 +  .b--dotted-l { border-style: dotted; }
 +  .b--dashed-l { border-style: dashed; }
 +  .b--solid-l {  border-style: solid; }
 +  .b--none-l {   border-style: none; }
 +}
 +/*
 +
 +   BORDER WIDTHS
 +   Docs: http://tachyons.io/docs/themes/borders/
 +
 +   Base:
 +     bw = border-width
 +
 +   Modifiers:
 +     0 = 0 width border
 +     1 = 1st step in border-width scale
 +     2 = 2nd step in border-width scale
 +     3 = 3rd step in border-width scale
 +     4 = 4th step in border-width scale
 +     5 = 5th step in border-width scale
 +
 +   Media Query Extensions:
 +     -ns = not-small
 +     -m  = medium
 +     -l  = large
 +
 +*/
 +.bw0 { border-width: 0; }
 +.bw1 { border-width: .125rem; }
 +.bw2 { border-width: .25rem; }
 +.bw3 { border-width: .5rem; }
 +.bw4 { border-width: 1rem; }
 +.bw5 { border-width: 2rem; }
 +/* Resets */
 +.bt-0 { border-top-width: 0; }
 +.br-0 { border-right-width: 0; }
 +.bb-0 { border-bottom-width: 0; }
 +.bl-0 { border-left-width: 0; }
 +@media screen and (min-width: 30em) {
 +  .bw0-ns { border-width: 0; }
 +  .bw1-ns { border-width: .125rem; }
 +  .bw2-ns { border-width: .25rem; }
 +  .bw3-ns { border-width: .5rem; }
 +  .bw4-ns { border-width: 1rem; }
 +  .bw5-ns { border-width: 2rem; }
 +  .bt-0-ns { border-top-width: 0; }
 +  .br-0-ns { border-right-width: 0; }
 +  .bb-0-ns { border-bottom-width: 0; }
 +  .bl-0-ns { border-left-width: 0; }
 +}
 +@media screen and (min-width: 30em) and (max-width: 60em) {
 +  .bw0-m { border-width: 0; }
 +  .bw1-m { border-width: .125rem; }
 +  .bw2-m { border-width: .25rem; }
 +  .bw3-m { border-width: .5rem; }
 +  .bw4-m { border-width: 1rem; }
 +  .bw5-m { border-width: 2rem; }
 +  .bt-0-m { border-top-width: 0; }
 +  .br-0-m { border-right-width: 0; }
 +  .bb-0-m { border-bottom-width: 0; }
 +  .bl-0-m { border-left-width: 0; }
 +}
 +@media screen and (min-width: 60em) {
 +  .bw0-l { border-width: 0; }
 +  .bw1-l { border-width: .125rem; }
 +  .bw2-l { border-width: .25rem; }
 +  .bw3-l { border-width: .5rem; }
 +  .bw4-l { border-width: 1rem; }
 +  .bw5-l { border-width: 2rem; }
 +  .bt-0-l { border-top-width: 0; }
 +  .br-0-l { border-right-width: 0; }
 +  .bb-0-l { border-bottom-width: 0; }
 +  .bl-0-l { border-left-width: 0; }
 +}
 +/*
 +
 +  BOX-SHADOW
 +  Docs: http://tachyons.io/docs/themes/box-shadow/
 +
 +  Media Query Extensions:
 +   -ns = not-small
 +   -m  = medium
 +   -l  = large
 +
 + */
 +.shadow-1 { -webkit-box-shadow: 0px 0px 4px 2px rgba(0, 0, 0, .2); box-shadow: 0px 0px 4px 2px rgba(0, 0, 0, .2); }
 +.shadow-2 { -webkit-box-shadow: 0px 0px 8px 2px rgba(0, 0, 0, .2); box-shadow: 0px 0px 8px 2px rgba(0, 0, 0, .2); }
 +.shadow-3 { -webkit-box-shadow: 2px 2px 4px 2px rgba(0, 0, 0, .2); box-shadow: 2px 2px 4px 2px rgba(0, 0, 0, .2); }
 +.shadow-4 { -webkit-box-shadow: 2px 2px 8px 0px rgba(0, 0, 0, .2); box-shadow: 2px 2px 8px 0px rgba(0, 0, 0, .2); }
 +.shadow-5 { -webkit-box-shadow: 4px 4px 8px 0px rgba(0, 0, 0, .2); box-shadow: 4px 4px 8px 0px rgba(0, 0, 0, .2); }
 +@media screen and (min-width: 30em) {
 +  .shadow-1-ns { -webkit-box-shadow: 0px 0px 4px 2px rgba(0, 0, 0, .2); box-shadow: 0px 0px 4px 2px rgba(0, 0, 0, .2); }
 +  .shadow-2-ns { -webkit-box-shadow: 0px 0px 8px 2px rgba(0, 0, 0, .2); box-shadow: 0px 0px 8px 2px rgba(0, 0, 0, .2); }
 +  .shadow-3-ns { -webkit-box-shadow: 2px 2px 4px 2px rgba(0, 0, 0, .2); box-shadow: 2px 2px 4px 2px rgba(0, 0, 0, .2); }
 +  .shadow-4-ns { -webkit-box-shadow: 2px 2px 8px 0px rgba(0, 0, 0, .2); box-shadow: 2px 2px 8px 0px rgba(0, 0, 0, .2); }
 +  .shadow-5-ns { -webkit-box-shadow: 4px 4px 8px 0px rgba(0, 0, 0, .2); box-shadow: 4px 4px 8px 0px rgba(0, 0, 0, .2); }
 +}
 +@media screen and (min-width: 30em) and (max-width: 60em) {
 +  .shadow-1-m { -webkit-box-shadow: 0px 0px 4px 2px rgba(0, 0, 0, .2); box-shadow: 0px 0px 4px 2px rgba(0, 0, 0, .2); }
 +  .shadow-2-m { -webkit-box-shadow: 0px 0px 8px 2px rgba(0, 0, 0, .2); box-shadow: 0px 0px 8px 2px rgba(0, 0, 0, .2); }
 +  .shadow-3-m { -webkit-box-shadow: 2px 2px 4px 2px rgba(0, 0, 0, .2); box-shadow: 2px 2px 4px 2px rgba(0, 0, 0, .2); }
 +  .shadow-4-m { -webkit-box-shadow: 2px 2px 8px 0px rgba(0, 0, 0, .2); box-shadow: 2px 2px 8px 0px rgba(0, 0, 0, .2); }
 +  .shadow-5-m { -webkit-box-shadow: 4px 4px 8px 0px rgba(0, 0, 0, .2); box-shadow: 4px 4px 8px 0px rgba(0, 0, 0, .2); }
 +}
 +@media screen and (min-width: 60em) {
 +  .shadow-1-l { -webkit-box-shadow: 0px 0px 4px 2px rgba(0, 0, 0, .2); box-shadow: 0px 0px 4px 2px rgba(0, 0, 0, .2); }
 +  .shadow-2-l { -webkit-box-shadow: 0px 0px 8px 2px rgba(0, 0, 0, .2); box-shadow: 0px 0px 8px 2px rgba(0, 0, 0, .2); }
 +  .shadow-3-l { -webkit-box-shadow: 2px 2px 4px 2px rgba(0, 0, 0, .2); box-shadow: 2px 2px 4px 2px rgba(0, 0, 0, .2); }
 +  .shadow-4-l { -webkit-box-shadow: 2px 2px 8px 0px rgba(0, 0, 0, .2); box-shadow: 2px 2px 8px 0px rgba(0, 0, 0, .2); }
 +  .shadow-5-l { -webkit-box-shadow: 4px 4px 8px 0px rgba(0, 0, 0, .2); box-shadow: 4px 4px 8px 0px rgba(0, 0, 0, .2); }
 +}
 +/*@import 'tachyons/src/_code';*/
 +/*
 +
 +   COORDINATES
 +   Docs: http://tachyons.io/docs/layout/position/
 +
 +   Use in combination with the position module.
 +
 +   Base:
 +     top
 +     bottom
 +     right
 +     left
 +
 +   Modifiers:
 +     -0  = literal value 0
 +     -1  = literal value 1
 +     -2  = literal value 2
 +     --1 = literal value -1
 +     --2 = literal value -2
 +
 +   Media Query Extensions:
 +     -ns = not-small
 +     -m  = medium
 +     -l  = large
 +
 +*/
 +.top-0    { top:    0; }
 +.right-0  { right:  0; }
 +.bottom-0 { bottom: 0; }
 +.left-0   { left:   0; }
 +.top-1    { top:    1rem; }
 +.right-1  { right:  1rem; }
 +.bottom-1 { bottom: 1rem; }
 +.left-1   { left:   1rem; }
 +.top-2    { top:    2rem; }
 +.right-2  { right:  2rem; }
 +.bottom-2 { bottom: 2rem; }
 +.left-2   { left:   2rem; }
 +.top--1    { top:    -1rem; }
 +.right--1  { right:  -1rem; }
 +.bottom--1 { bottom: -1rem; }
 +.left--1   { left:   -1rem; }
 +.top--2    { top:    -2rem; }
 +.right--2  { right:  -2rem; }
 +.bottom--2 { bottom: -2rem; }
 +.left--2   { left:   -2rem; }
 +.absolute--fill {
 +  top: 0;
 +  right: 0;
 +  bottom: 0;
 +  left: 0;
 +}
 +@media screen and (min-width: 30em) {
 +  .top-0-ns     { top:   0; }
 +  .left-0-ns    { left:  0; }
 +  .right-0-ns   { right: 0; }
 +  .bottom-0-ns  { bottom: 0; }
 +  .top-1-ns     { top:   1rem; }
 +  .left-1-ns    { left:  1rem; }
 +  .right-1-ns   { right: 1rem; }
 +  .bottom-1-ns  { bottom: 1rem; }
 +  .top-2-ns     { top:   2rem; }
 +  .left-2-ns    { left:  2rem; }
 +  .right-2-ns   { right: 2rem; }
 +  .bottom-2-ns  { bottom: 2rem; }
 +  .top--1-ns    { top:    -1rem; }
 +  .right--1-ns  { right:  -1rem; }
 +  .bottom--1-ns { bottom: -1rem; }
 +  .left--1-ns   { left:   -1rem; }
 +  .top--2-ns    { top:    -2rem; }
 +  .right--2-ns  { right:  -2rem; }
 +  .bottom--2-ns { bottom: -2rem; }
 +  .left--2-ns   { left:   -2rem; }
 +  .absolute--fill-ns {
 +    top: 0;
 +    right: 0;
 +    bottom: 0;
 +    left: 0;
 +  }
 +}
 +@media screen and (min-width: 30em) and (max-width: 60em) {
 +  .top-0-m     { top:   0; }
 +  .left-0-m    { left:  0; }
 +  .right-0-m   { right: 0; }
 +  .bottom-0-m  { bottom: 0; }
 +  .top-1-m     { top:   1rem; }
 +  .left-1-m    { left:  1rem; }
 +  .right-1-m   { right: 1rem; }
 +  .bottom-1-m  { bottom: 1rem; }
 +  .top-2-m     { top:   2rem; }
 +  .left-2-m    { left:  2rem; }
 +  .right-2-m   { right: 2rem; }
 +  .bottom-2-m  { bottom: 2rem; }
 +  .top--1-m    { top:    -1rem; }
 +  .right--1-m  { right:  -1rem; }
 +  .bottom--1-m { bottom: -1rem; }
 +  .left--1-m   { left:   -1rem; }
 +  .top--2-m    { top:    -2rem; }
 +  .right--2-m  { right:  -2rem; }
 +  .bottom--2-m { bottom: -2rem; }
 +  .left--2-m   { left:   -2rem; }
 +  .absolute--fill-m {
 +    top: 0;
 +    right: 0;
 +    bottom: 0;
 +    left: 0;
 +  }
 +}
 +@media screen and (min-width: 60em) {
 +  .top-0-l     { top:   0; }
 +  .left-0-l    { left:  0; }
 +  .right-0-l   { right: 0; }
 +  .bottom-0-l  { bottom: 0; }
 +  .top-1-l     { top:   1rem; }
 +  .left-1-l    { left:  1rem; }
 +  .right-1-l   { right: 1rem; }
 +  .bottom-1-l  { bottom: 1rem; }
 +  .top-2-l     { top:   2rem; }
 +  .left-2-l    { left:  2rem; }
 +  .right-2-l   { right: 2rem; }
 +  .bottom-2-l  { bottom: 2rem; }
 +  .top--1-l    { top:    -1rem; }
 +  .right--1-l  { right:  -1rem; }
 +  .bottom--1-l { bottom: -1rem; }
 +  .left--1-l   { left:   -1rem; }
 +  .top--2-l    { top:    -2rem; }
 +  .right--2-l  { right:  -2rem; }
 +  .bottom--2-l { bottom: -2rem; }
 +  .left--2-l   { left:   -2rem; }
 +  .absolute--fill-l {
 +    top: 0;
 +    right: 0;
 +    bottom: 0;
 +    left: 0;
 +  }
 +}
 +/*
 +
 +   CLEARFIX
 +   http://tachyons.io/docs/layout/clearfix/
 +
 +*/
 +/* Nicolas Gallaghers Clearfix solution
 +   Ref: http://nicolasgallagher.com/micro-clearfix-hack/ */
 +.cf:before,
 +.cf:after { content: " "; display: table; }
 +.cf:after { clear: both; }
 +.cf {       *zoom: 1; }
 +.cl { clear: left; }
 +.cr { clear: right; }
 +.cb { clear: both; }
 +.cn { clear: none; }
 +@media screen and (min-width: 30em) {
 +  .cl-ns { clear: left; }
 +  .cr-ns { clear: right; }
 +  .cb-ns { clear: both; }
 +  .cn-ns { clear: none; }
 +}
 +@media screen and (min-width: 30em) and (max-width: 60em) {
 +  .cl-m { clear: left; }
 +  .cr-m { clear: right; }
 +  .cb-m { clear: both; }
 +  .cn-m { clear: none; }
 +}
 +@media screen and (min-width: 60em) {
 +  .cl-l { clear: left; }
 +  .cr-l { clear: right; }
 +  .cb-l { clear: both; }
 +  .cn-l { clear: none; }
 +}
 +/*
 +
 +   DISPLAY
 +   Docs: http://tachyons.io/docs/layout/display
 +
 +   Base:
 +    d = display
 +
 +   Modifiers:
 +    n     = none
 +    b     = block
 +    ib    = inline-block
 +    it    = inline-table
 +    t     = table
 +    tc    = table-cell
 +    t-row          = table-row
 +    t-columm       = table-column
 +    t-column-group = table-column-group
 +
 +   Media Query Extensions:
 +     -ns = not-small
 +     -m  = medium
 +     -l  = large
 +
 +*/
 +.dn {              display: none; }
 +.di {              display: inline; }
 +.db {              display: block; }
 +.dib {             display: inline-block; }
 +.dit {             display: inline-table; }
 +.dt {              display: table; }
 +.dtc {             display: table-cell; }
 +.dt-row {          display: table-row; }
 +.dt-row-group {    display: table-row-group; }
 +.dt-column {       display: table-column; }
 +.dt-column-group { display: table-column-group; }
 +/*
 +  This will set table to full width and then
 +  all cells will be equal width
 +*/
 +.dt--fixed {
 +  table-layout: fixed;
 +  width: 100%;
 +}
 +@media screen and (min-width: 30em) {
 +  .dn-ns {              display: none; }
 +  .di-ns {              display: inline; }
 +  .db-ns {              display: block; }
 +  .dib-ns {             display: inline-block; }
 +  .dit-ns {             display: inline-table; }
 +  .dt-ns {              display: table; }
 +  .dtc-ns {             display: table-cell; }
 +  .dt-row-ns {          display: table-row; }
 +  .dt-row-group-ns {    display: table-row-group; }
 +  .dt-column-ns {       display: table-column; }
 +  .dt-column-group-ns { display: table-column-group; }
 +
 +  .dt--fixed-ns {
 +    table-layout: fixed;
 +    width: 100%;
 +  }
 +}
 +@media screen and (min-width: 30em) and (max-width: 60em) {
 +  .dn-m {              display: none; }
 +  .di-m {              display: inline; }
 +  .db-m {              display: block; }
 +  .dib-m {             display: inline-block; }
 +  .dit-m {             display: inline-table; }
 +  .dt-m {              display: table; }
 +  .dtc-m {             display: table-cell; }
 +  .dt-row-m {          display: table-row; }
 +  .dt-row-group-m {    display: table-row-group; }
 +  .dt-column-m {       display: table-column; }
 +  .dt-column-group-m { display: table-column-group; }
 +
 +  .dt--fixed-m {
 +    table-layout: fixed;
 +    width: 100%;
 +  }
 +}
 +@media screen and (min-width: 60em) {
 +  .dn-l {              display: none; }
 +  .di-l {              display: inline; }
 +  .db-l {              display: block; }
 +  .dib-l {             display: inline-block; }
 +  .dit-l {             display: inline-table; }
 +  .dt-l {              display: table; }
 +  .dtc-l {             display: table-cell; }
 +  .dt-row-l {          display: table-row; }
 +  .dt-row-group-l {    display: table-row-group; }
 +  .dt-column-l {       display: table-column; }
 +  .dt-column-group-l { display: table-column-group; }
 +
 +  .dt--fixed-l {
 +    table-layout: fixed;
 +    width: 100%;
 +  }
 +}
 +/*
 +
 +  FLEXBOX
 +
 +  Media Query Extensions:
 +   -ns = not-small
 +   -m  = medium
 +   -l  = large
 +
 +*/
 +.flex { display: -webkit-box; display: -ms-flexbox; display: flex; }
 +.inline-flex { display: -webkit-inline-box; display: -ms-inline-flexbox; display: inline-flex; }
 +/* 1. Fix for Chrome 44 bug.
 + * https://code.google.com/p/chromium/issues/detail?id=506893 */
 +.flex-auto {
 +  -webkit-box-flex: 1;
 +      -ms-flex: 1 1 auto;
 +          flex: 1 1 auto;
 +  min-width: 0; /* 1 */
 +  min-height: 0; /* 1 */
 +}
 +.flex-none { -webkit-box-flex: 0; -ms-flex: none; flex: none; }
 +.flex-column  { -webkit-box-orient: vertical; -webkit-box-direction: normal; -ms-flex-direction: column; flex-direction: column; }
 +.flex-row     { -webkit-box-orient: horizontal; -webkit-box-direction: normal; -ms-flex-direction: row; flex-direction: row; }
 +.flex-wrap    { -ms-flex-wrap: wrap; flex-wrap: wrap; }
 +.flex-nowrap    { -ms-flex-wrap: nowrap; flex-wrap: nowrap; }
 +.flex-wrap-reverse    { -ms-flex-wrap: wrap-reverse; flex-wrap: wrap-reverse; }
 +.flex-column-reverse  { -webkit-box-orient: vertical; -webkit-box-direction: reverse; -ms-flex-direction: column-reverse; flex-direction: column-reverse; }
 +.flex-row-reverse     { -webkit-box-orient: horizontal; -webkit-box-direction: reverse; -ms-flex-direction: row-reverse; flex-direction: row-reverse; }
 +.items-start    { -webkit-box-align: start; -ms-flex-align: start; align-items: flex-start; }
 +.items-end      { -webkit-box-align: end; -ms-flex-align: end; align-items: flex-end; }
 +.items-center   { -webkit-box-align: center; -ms-flex-align: center; align-items: center; }
 +.items-baseline { -webkit-box-align: baseline; -ms-flex-align: baseline; align-items: baseline; }
 +.items-stretch  { -webkit-box-align: stretch; -ms-flex-align: stretch; align-items: stretch; }
 +.self-start    { -ms-flex-item-align: start; align-self: flex-start; }
 +.self-end      { -ms-flex-item-align: end; align-self: flex-end; }
 +.self-center   { -ms-flex-item-align: center; align-self: center; }
 +.self-baseline { -ms-flex-item-align: baseline; align-self: baseline; }
 +.self-stretch  { -ms-flex-item-align: stretch; align-self: stretch; }
 +.justify-start   { -webkit-box-pack: start; -ms-flex-pack: start; justify-content: flex-start; }
 +.justify-end     { -webkit-box-pack: end; -ms-flex-pack: end; justify-content: flex-end; }
 +.justify-center  { -webkit-box-pack: center; -ms-flex-pack: center; justify-content: center; }
 +.justify-between { -webkit-box-pack: justify; -ms-flex-pack: justify; justify-content: space-between; }
 +.justify-around  { -ms-flex-pack: distribute; justify-content: space-around; }
 +.content-start   { -ms-flex-line-pack: start; align-content: flex-start; }
 +.content-end     { -ms-flex-line-pack: end; align-content: flex-end; }
 +.content-center  { -ms-flex-line-pack: center; align-content: center; }
 +.content-between { -ms-flex-line-pack: justify; align-content: space-between; }
 +.content-around  { -ms-flex-line-pack: distribute; align-content: space-around; }
 +.content-stretch { -ms-flex-line-pack: stretch; align-content: stretch; }
 +.order-0 { -webkit-box-ordinal-group: 1; -ms-flex-order: 0; order: 0; }
 +.order-1 { -webkit-box-ordinal-group: 2; -ms-flex-order: 1; order: 1; }
 +.order-2 { -webkit-box-ordinal-group: 3; -ms-flex-order: 2; order: 2; }
 +.order-3 { -webkit-box-ordinal-group: 4; -ms-flex-order: 3; order: 3; }
 +.order-4 { -webkit-box-ordinal-group: 5; -ms-flex-order: 4; order: 4; }
 +.order-5 { -webkit-box-ordinal-group: 6; -ms-flex-order: 5; order: 5; }
 +.order-6 { -webkit-box-ordinal-group: 7; -ms-flex-order: 6; order: 6; }
 +.order-7 { -webkit-box-ordinal-group: 8; -ms-flex-order: 7; order: 7; }
 +.order-8 { -webkit-box-ordinal-group: 9; -ms-flex-order: 8; order: 8; }
 +.order-last { -webkit-box-ordinal-group: 100000; -ms-flex-order: 99999; order: 99999; }
 +.flex-grow-0 { -webkit-box-flex: 0; -ms-flex-positive: 0; flex-grow: 0; }
 +.flex-grow-1 { -webkit-box-flex: 1; -ms-flex-positive: 1; flex-grow: 1; }
 +.flex-shrink-0 { -ms-flex-negative: 0; flex-shrink: 0; }
 +.flex-shrink-1 { -ms-flex-negative: 1; flex-shrink: 1; }
 +@media screen and (min-width: 30em) {
 +  .flex-ns { display: -webkit-box; display: -ms-flexbox; display: flex; }
 +  .inline-flex-ns { display: -webkit-inline-box; display: -ms-inline-flexbox; display: inline-flex; }
 +  .flex-auto-ns {
 +    -webkit-box-flex: 1;
 +        -ms-flex: 1 1 auto;
 +            flex: 1 1 auto;
 +    min-width: 0; /* 1 */
 +    min-height: 0; /* 1 */
 +  }
 +  .flex-none-ns { -webkit-box-flex: 0; -ms-flex: none; flex: none; }
 +  .flex-column-ns { -webkit-box-orient: vertical; -webkit-box-direction: normal; -ms-flex-direction: column; flex-direction: column; }
 +  .flex-row-ns { -webkit-box-orient: horizontal; -webkit-box-direction: normal; -ms-flex-direction: row; flex-direction: row; }
 +  .flex-wrap-ns { -ms-flex-wrap: wrap; flex-wrap: wrap; }
 +  .flex-nowrap-ns { -ms-flex-wrap: nowrap; flex-wrap: nowrap; }
 +  .flex-wrap-reverse-ns { -ms-flex-wrap: wrap-reverse; flex-wrap: wrap-reverse; }
 +  .flex-column-reverse-ns { -webkit-box-orient: vertical; -webkit-box-direction: reverse; -ms-flex-direction: column-reverse; flex-direction: column-reverse; }
 +  .flex-row-reverse-ns { -webkit-box-orient: horizontal; -webkit-box-direction: reverse; -ms-flex-direction: row-reverse; flex-direction: row-reverse; }
 +  .items-start-ns { -webkit-box-align: start; -ms-flex-align: start; align-items: flex-start; }
 +  .items-end-ns { -webkit-box-align: end; -ms-flex-align: end; align-items: flex-end; }
 +  .items-center-ns { -webkit-box-align: center; -ms-flex-align: center; align-items: center; }
 +  .items-baseline-ns { -webkit-box-align: baseline; -ms-flex-align: baseline; align-items: baseline; }
 +  .items-stretch-ns { -webkit-box-align: stretch; -ms-flex-align: stretch; align-items: stretch; }
 +
 +  .self-start-ns { -ms-flex-item-align: start; align-self: flex-start; }
 +  .self-end-ns { -ms-flex-item-align: end; align-self: flex-end; }
 +  .self-center-ns { -ms-flex-item-align: center; align-self: center; }
 +  .self-baseline-ns { -ms-flex-item-align: baseline; align-self: baseline; }
 +  .self-stretch-ns { -ms-flex-item-align: stretch; align-self: stretch; }
 +
 +  .justify-start-ns { -webkit-box-pack: start; -ms-flex-pack: start; justify-content: flex-start; }
 +  .justify-end-ns { -webkit-box-pack: end; -ms-flex-pack: end; justify-content: flex-end; }
 +  .justify-center-ns { -webkit-box-pack: center; -ms-flex-pack: center; justify-content: center; }
 +  .justify-between-ns { -webkit-box-pack: justify; -ms-flex-pack: justify; justify-content: space-between; }
 +  .justify-around-ns { -ms-flex-pack: distribute; justify-content: space-around; }
 +
 +  .content-start-ns { -ms-flex-line-pack: start; align-content: flex-start; }
 +  .content-end-ns { -ms-flex-line-pack: end; align-content: flex-end; }
 +  .content-center-ns { -ms-flex-line-pack: center; align-content: center; }
 +  .content-between-ns { -ms-flex-line-pack: justify; align-content: space-between; }
 +  .content-around-ns { -ms-flex-line-pack: distribute; align-content: space-around; }
 +  .content-stretch-ns { -ms-flex-line-pack: stretch; align-content: stretch; }
 +
 +  .order-0-ns { -webkit-box-ordinal-group: 1; -ms-flex-order: 0; order: 0; }
 +  .order-1-ns { -webkit-box-ordinal-group: 2; -ms-flex-order: 1; order: 1; }
 +  .order-2-ns { -webkit-box-ordinal-group: 3; -ms-flex-order: 2; order: 2; }
 +  .order-3-ns { -webkit-box-ordinal-group: 4; -ms-flex-order: 3; order: 3; }
 +  .order-4-ns { -webkit-box-ordinal-group: 5; -ms-flex-order: 4; order: 4; }
 +  .order-5-ns { -webkit-box-ordinal-group: 6; -ms-flex-order: 5; order: 5; }
 +  .order-6-ns { -webkit-box-ordinal-group: 7; -ms-flex-order: 6; order: 6; }
 +  .order-7-ns { -webkit-box-ordinal-group: 8; -ms-flex-order: 7; order: 7; }
 +  .order-8-ns { -webkit-box-ordinal-group: 9; -ms-flex-order: 8; order: 8; }
 +  .order-last-ns { -webkit-box-ordinal-group: 100000; -ms-flex-order: 99999; order: 99999; }
 +
 +  .flex-grow-0-ns { -webkit-box-flex: 0; -ms-flex-positive: 0; flex-grow: 0; }
 +  .flex-grow-1-ns { -webkit-box-flex: 1; -ms-flex-positive: 1; flex-grow: 1; }
 +
 +  .flex-shrink-0-ns { -ms-flex-negative: 0; flex-shrink: 0; }
 +  .flex-shrink-1-ns { -ms-flex-negative: 1; flex-shrink: 1; }
 +}
 +@media screen and (min-width: 30em) and (max-width: 60em) {
 +  .flex-m { display: -webkit-box; display: -ms-flexbox; display: flex; }
 +  .inline-flex-m { display: -webkit-inline-box; display: -ms-inline-flexbox; display: inline-flex; }
 +  .flex-auto-m {
 +    -webkit-box-flex: 1;
 +        -ms-flex: 1 1 auto;
 +            flex: 1 1 auto;
 +    min-width: 0; /* 1 */
 +    min-height: 0; /* 1 */
 +  }
 +  .flex-none-m { -webkit-box-flex: 0; -ms-flex: none; flex: none; }
 +  .flex-column-m { -webkit-box-orient: vertical; -webkit-box-direction: normal; -ms-flex-direction: column; flex-direction: column; }
 +  .flex-row-m     { -webkit-box-orient: horizontal; -webkit-box-direction: normal; -ms-flex-direction: row; flex-direction: row; }
 +  .flex-wrap-m { -ms-flex-wrap: wrap; flex-wrap: wrap; }
 +  .flex-nowrap-m { -ms-flex-wrap: nowrap; flex-wrap: nowrap; }
 +  .flex-wrap-reverse-m { -ms-flex-wrap: wrap-reverse; flex-wrap: wrap-reverse; }
 +  .flex-column-reverse-m { -webkit-box-orient: vertical; -webkit-box-direction: reverse; -ms-flex-direction: column-reverse; flex-direction: column-reverse; }
 +  .flex-row-reverse-m { -webkit-box-orient: horizontal; -webkit-box-direction: reverse; -ms-flex-direction: row-reverse; flex-direction: row-reverse; }
 +  .items-start-m { -webkit-box-align: start; -ms-flex-align: start; align-items: flex-start; }
 +  .items-end-m { -webkit-box-align: end; -ms-flex-align: end; align-items: flex-end; }
 +  .items-center-m { -webkit-box-align: center; -ms-flex-align: center; align-items: center; }
 +  .items-baseline-m { -webkit-box-align: baseline; -ms-flex-align: baseline; align-items: baseline; }
 +  .items-stretch-m { -webkit-box-align: stretch; -ms-flex-align: stretch; align-items: stretch; }
 +
 +  .self-start-m { -ms-flex-item-align: start; align-self: flex-start; }
 +  .self-end-m { -ms-flex-item-align: end; align-self: flex-end; }
 +  .self-center-m { -ms-flex-item-align: center; align-self: center; }
 +  .self-baseline-m { -ms-flex-item-align: baseline; align-self: baseline; }
 +  .self-stretch-m { -ms-flex-item-align: stretch; align-self: stretch; }
 +
 +  .justify-start-m { -webkit-box-pack: start; -ms-flex-pack: start; justify-content: flex-start; }
 +  .justify-end-m { -webkit-box-pack: end; -ms-flex-pack: end; justify-content: flex-end; }
 +  .justify-center-m { -webkit-box-pack: center; -ms-flex-pack: center; justify-content: center; }
 +  .justify-between-m { -webkit-box-pack: justify; -ms-flex-pack: justify; justify-content: space-between; }
 +  .justify-around-m { -ms-flex-pack: distribute; justify-content: space-around; }
 +
 +  .content-start-m { -ms-flex-line-pack: start; align-content: flex-start; }
 +  .content-end-m { -ms-flex-line-pack: end; align-content: flex-end; }
 +  .content-center-m { -ms-flex-line-pack: center; align-content: center; }
 +  .content-between-m { -ms-flex-line-pack: justify; align-content: space-between; }
 +  .content-around-m { -ms-flex-line-pack: distribute; align-content: space-around; }
 +  .content-stretch-m { -ms-flex-line-pack: stretch; align-content: stretch; }
 +
 +  .order-0-m { -webkit-box-ordinal-group: 1; -ms-flex-order: 0; order: 0; }
 +  .order-1-m { -webkit-box-ordinal-group: 2; -ms-flex-order: 1; order: 1; }
 +  .order-2-m { -webkit-box-ordinal-group: 3; -ms-flex-order: 2; order: 2; }
 +  .order-3-m { -webkit-box-ordinal-group: 4; -ms-flex-order: 3; order: 3; }
 +  .order-4-m { -webkit-box-ordinal-group: 5; -ms-flex-order: 4; order: 4; }
 +  .order-5-m { -webkit-box-ordinal-group: 6; -ms-flex-order: 5; order: 5; }
 +  .order-6-m { -webkit-box-ordinal-group: 7; -ms-flex-order: 6; order: 6; }
 +  .order-7-m { -webkit-box-ordinal-group: 8; -ms-flex-order: 7; order: 7; }
 +  .order-8-m { -webkit-box-ordinal-group: 9; -ms-flex-order: 8; order: 8; }
 +  .order-last-m { -webkit-box-ordinal-group: 100000; -ms-flex-order: 99999; order: 99999; }
 +
 +  .flex-grow-0-m { -webkit-box-flex: 0; -ms-flex-positive: 0; flex-grow: 0; }
 +  .flex-grow-1-m { -webkit-box-flex: 1; -ms-flex-positive: 1; flex-grow: 1; }
 +
 +  .flex-shrink-0-m { -ms-flex-negative: 0; flex-shrink: 0; }
 +  .flex-shrink-1-m { -ms-flex-negative: 1; flex-shrink: 1; }
 +}
 +@media screen and (min-width: 60em) {
 +  .flex-l { display: -webkit-box; display: -ms-flexbox; display: flex; }
 +  .inline-flex-l { display: -webkit-inline-box; display: -ms-inline-flexbox; display: inline-flex; }
 +  .flex-auto-l {
 +    -webkit-box-flex: 1;
 +        -ms-flex: 1 1 auto;
 +            flex: 1 1 auto;
 +    min-width: 0; /* 1 */
 +    min-height: 0; /* 1 */
 +  }
 +  .flex-none-l { -webkit-box-flex: 0; -ms-flex: none; flex: none; }
 +  .flex-column-l { -webkit-box-orient: vertical; -webkit-box-direction: normal; -ms-flex-direction: column; flex-direction: column; }
 +  .flex-row-l { -webkit-box-orient: horizontal; -webkit-box-direction: normal; -ms-flex-direction: row; flex-direction: row; }
 +  .flex-wrap-l { -ms-flex-wrap: wrap; flex-wrap: wrap; }
 +  .flex-nowrap-l { -ms-flex-wrap: nowrap; flex-wrap: nowrap; }
 +  .flex-wrap-reverse-l { -ms-flex-wrap: wrap-reverse; flex-wrap: wrap-reverse; }
 +  .flex-column-reverse-l { -webkit-box-orient: vertical; -webkit-box-direction: reverse; -ms-flex-direction: column-reverse; flex-direction: column-reverse; }
 +  .flex-row-reverse-l { -webkit-box-orient: horizontal; -webkit-box-direction: reverse; -ms-flex-direction: row-reverse; flex-direction: row-reverse; }
 +
 +  .items-start-l { -webkit-box-align: start; -ms-flex-align: start; align-items: flex-start; }
 +  .items-end-l { -webkit-box-align: end; -ms-flex-align: end; align-items: flex-end; }
 +  .items-center-l { -webkit-box-align: center; -ms-flex-align: center; align-items: center; }
 +  .items-baseline-l { -webkit-box-align: baseline; -ms-flex-align: baseline; align-items: baseline; }
 +  .items-stretch-l { -webkit-box-align: stretch; -ms-flex-align: stretch; align-items: stretch; }
 +
 +  .self-start-l { -ms-flex-item-align: start; align-self: flex-start; }
 +  .self-end-l { -ms-flex-item-align: end; align-self: flex-end; }
 +  .self-center-l { -ms-flex-item-align: center; align-self: center; }
 +  .self-baseline-l { -ms-flex-item-align: baseline; align-self: baseline; }
 +  .self-stretch-l { -ms-flex-item-align: stretch; align-self: stretch; }
 +
 +  .justify-start-l { -webkit-box-pack: start; -ms-flex-pack: start; justify-content: flex-start; }
 +  .justify-end-l { -webkit-box-pack: end; -ms-flex-pack: end; justify-content: flex-end; }
 +  .justify-center-l { -webkit-box-pack: center; -ms-flex-pack: center; justify-content: center; }
 +  .justify-between-l { -webkit-box-pack: justify; -ms-flex-pack: justify; justify-content: space-between; }
 +  .justify-around-l { -ms-flex-pack: distribute; justify-content: space-around; }
 +
 +  .content-start-l { -ms-flex-line-pack: start; align-content: flex-start; }
 +  .content-end-l { -ms-flex-line-pack: end; align-content: flex-end; }
 +  .content-center-l { -ms-flex-line-pack: center; align-content: center; }
 +  .content-between-l { -ms-flex-line-pack: justify; align-content: space-between; }
 +  .content-around-l { -ms-flex-line-pack: distribute; align-content: space-around; }
 +  .content-stretch-l { -ms-flex-line-pack: stretch; align-content: stretch; }
 +
 +  .order-0-l { -webkit-box-ordinal-group: 1; -ms-flex-order: 0; order: 0; }
 +  .order-1-l { -webkit-box-ordinal-group: 2; -ms-flex-order: 1; order: 1; }
 +  .order-2-l { -webkit-box-ordinal-group: 3; -ms-flex-order: 2; order: 2; }
 +  .order-3-l { -webkit-box-ordinal-group: 4; -ms-flex-order: 3; order: 3; }
 +  .order-4-l { -webkit-box-ordinal-group: 5; -ms-flex-order: 4; order: 4; }
 +  .order-5-l { -webkit-box-ordinal-group: 6; -ms-flex-order: 5; order: 5; }
 +  .order-6-l { -webkit-box-ordinal-group: 7; -ms-flex-order: 6; order: 6; }
 +  .order-7-l { -webkit-box-ordinal-group: 8; -ms-flex-order: 7; order: 7; }
 +  .order-8-l { -webkit-box-ordinal-group: 9; -ms-flex-order: 8; order: 8; }
 +  .order-last-l { -webkit-box-ordinal-group: 100000; -ms-flex-order: 99999; order: 99999; }
 +
 +  .flex-grow-0-l { -webkit-box-flex: 0; -ms-flex-positive: 0; flex-grow: 0; }
 +  .flex-grow-1-l { -webkit-box-flex: 1; -ms-flex-positive: 1; flex-grow: 1; }
 +
 +  .flex-shrink-0-l { -ms-flex-negative: 0; flex-shrink: 0; }
 +  .flex-shrink-1-l { -ms-flex-negative: 1; flex-shrink: 1; }
 +}
 +/*
 +
 +   FLOATS
 +   http://tachyons.io/docs/layout/floats/
 +
 +   1. Floated elements are automatically rendered as block level elements.
 +      Setting floats to display inline will fix the double margin bug in
 +      ie6. You know... just in case.
 +
 +   2. Don't forget to clearfix your floats with .cf
 +
 +   Base:
 +     f = float
 +
 +   Modifiers:
 +     l = left
 +     r = right
 +     n = none
 +
 +   Media Query Extensions:
 +     -ns = not-small
 +     -m  = medium
 +     -l  = large
 +
 +*/
 +.fl { float: left;  _display: inline; }
 +.fr { float: right; _display: inline; }
 +.fn { float: none; }
 +@media screen and (min-width: 30em) {
 +  .fl-ns { float: left; _display: inline; }
 +  .fr-ns { float: right; _display: inline; }
 +  .fn-ns { float: none; }
 +}
 +@media screen and (min-width: 30em) and (max-width: 60em) {
 +  .fl-m { float: left; _display: inline; }
 +  .fr-m { float: right; _display: inline; }
 +  .fn-m { float: none; }
 +}
 +@media screen and (min-width: 60em) {
 +  .fl-l { float: left; _display: inline; }
 +  .fr-l { float: right; _display: inline; }
 +  .fn-l { float: none; }
 +}
 +/*@import 'tachyons/src/_font-family';*/
 +/*
 +
 +   FONT STYLE
 +   Docs: http://tachyons.io/docs/typography/font-style/
 +
 +   Media Query Extensions:
 +     -ns = not-small
 +     -m  = medium
 +     -l  = large
 +
 +*/
 +.i         { font-style: italic; }
 +.fs-normal { font-style: normal; }
 +@media screen and (min-width: 30em) {
 +  .i-ns       { font-style: italic; }
 +  .fs-normal-ns     { font-style: normal; }
 +}
 +@media screen and (min-width: 30em) and (max-width: 60em) {
 +  .i-m       { font-style: italic; }
 +  .fs-normal-m     { font-style: normal; }
 +}
 +@media screen and (min-width: 60em) {
 +  .i-l       { font-style: italic; }
 +  .fs-normal-l     { font-style: normal; }
 +}
 +/*
 +
 +   FONT WEIGHT
 +   Docs: http://tachyons.io/docs/typography/font-weight/
 +
 +   Base
 +     fw = font-weight
 +
 +   Modifiers:
 +     1 = literal value 100
 +     2 = literal value 200
 +     3 = literal value 300
 +     4 = literal value 400
 +     5 = literal value 500
 +     6 = literal value 600
 +     7 = literal value 700
 +     8 = literal value 800
 +     9 = literal value 900
 +
 +   Media Query Extensions:
 +     -ns = not-small
 +     -m  = medium
 +     -l  = large
 +
 +*/
 +.normal { font-weight: normal; }
 +.b      { font-weight: bold; }
 +.fw1    { font-weight: 100; }
 +.fw2    { font-weight: 200; }
 +.fw3    { font-weight: 300; }
 +.fw4    { font-weight: 400; }
 +.fw5    { font-weight: 500; }
 +.fw6    { font-weight: 600; }
 +.fw7    { font-weight: 700; }
 +.fw8    { font-weight: 800; }
 +.fw9    { font-weight: 900; }
 +@media screen and (min-width: 30em) {
 +  .normal-ns { font-weight: normal; }
 +  .b-ns      { font-weight: bold; }
 +  .fw1-ns    { font-weight: 100; }
 +  .fw2-ns    { font-weight: 200; }
 +  .fw3-ns    { font-weight: 300; }
 +  .fw4-ns    { font-weight: 400; }
 +  .fw5-ns    { font-weight: 500; }
 +  .fw6-ns    { font-weight: 600; }
 +  .fw7-ns    { font-weight: 700; }
 +  .fw8-ns    { font-weight: 800; }
 +  .fw9-ns    { font-weight: 900; }
 +}
 +@media screen and (min-width: 30em) and (max-width: 60em) {
 +  .normal-m { font-weight: normal; }
 +  .b-m      { font-weight: bold; }
 +  .fw1-m    { font-weight: 100; }
 +  .fw2-m    { font-weight: 200; }
 +  .fw3-m    { font-weight: 300; }
 +  .fw4-m    { font-weight: 400; }
 +  .fw5-m    { font-weight: 500; }
 +  .fw6-m    { font-weight: 600; }
 +  .fw7-m    { font-weight: 700; }
 +  .fw8-m    { font-weight: 800; }
 +  .fw9-m    { font-weight: 900; }
 +}
 +@media screen and (min-width: 60em) {
 +  .normal-l { font-weight: normal; }
 +  .b-l      { font-weight: bold; }
 +  .fw1-l    { font-weight: 100; }
 +  .fw2-l    { font-weight: 200; }
 +  .fw3-l    { font-weight: 300; }
 +  .fw4-l    { font-weight: 400; }
 +  .fw5-l    { font-weight: 500; }
 +  .fw6-l    { font-weight: 600; }
 +  .fw7-l    { font-weight: 700; }
 +  .fw8-l    { font-weight: 800; }
 +  .fw9-l    { font-weight: 900; }
 +}
 +/*
 +
 +   FORMS
 +   
 +*/
 +.input-reset {
 +  -webkit-appearance: none;
 +  -moz-appearance: none;
 +}
 +.button-reset::-moz-focus-inner,
 +.input-reset::-moz-focus-inner {
 +  border: 0;
 +  padding: 0;
 +}
 +/*
 +
 +   HEIGHTS
 +   Docs: http://tachyons.io/docs/layout/heights/
 +
 +   Base:
 +     h = height
 +     min-h = min-height
 +     min-vh = min-height vertical screen height
 +     vh = vertical screen height
 +
 +   Modifiers
 +     1 = 1st step in height scale
 +     2 = 2nd step in height scale
 +     3 = 3rd step in height scale
 +     4 = 4th step in height scale
 +     5 = 5th step in height scale
 +
 +     -25   = literal value 25%
 +     -50   = literal value 50%
 +     -75   = literal value 75%
 +     -100  = literal value 100%
 +
 +     -auto = string value of auto
 +     -inherit = string value of inherit
 +
 +   Media Query Extensions:
 +     -ns = not-small
 +     -m  = medium
 +     -l  = large
 +
 +*/
 +/* Height Scale */
 +.h1 { height: 1rem; }
 +.h2 { height: 2rem; }
 +.h3 { height: 4rem; }
 +.h4 { height: 8rem; }
 +.h5 { height: 16rem; }
 +/* Height Percentages - Based off of height of parent */
 +.h-25 {  height:  25%; }
 +.h-50 {  height:  50%; }
 +.h-75 {  height:  75%; }
 +.h-100 { height: 100%; }
 +.min-h-100 { min-height: 100%; }
 +/* Screen Height Percentage */
 +.vh-25 {  height:  25vh; }
 +.vh-50 {  height:  50vh; }
 +.vh-75 {  height:  75vh; }
 +.vh-100 { height: 100vh; }
 +.min-vh-100 { min-height: 100vh; }
 +/* String Properties */
 +.h-auto {     height: auto; }
 +.h-inherit {  height: inherit; }
 +@media screen and (min-width: 30em) {
 +  .h1-ns {  height: 1rem; }
 +  .h2-ns {  height: 2rem; }
 +  .h3-ns {  height: 4rem; }
 +  .h4-ns {  height: 8rem; }
 +  .h5-ns {  height: 16rem; }
 +  .h-25-ns { height: 25%; }
 +  .h-50-ns { height: 50%; }
 +  .h-75-ns { height: 75%; }
 +  .h-100-ns { height: 100%; }
 +  .min-h-100-ns { min-height: 100%; }
 +  .vh-25-ns {  height:  25vh; }
 +  .vh-50-ns {  height:  50vh; }
 +  .vh-75-ns {  height:  75vh; }
 +  .vh-100-ns { height: 100vh; }
 +  .min-vh-100-ns { min-height: 100vh; }
 +  .h-auto-ns { height: auto; }
 +  .h-inherit-ns { height: inherit; }
 +}
 +@media screen and (min-width: 30em) and (max-width: 60em) {
 +  .h1-m { height: 1rem; }
 +  .h2-m { height: 2rem; }
 +  .h3-m { height: 4rem; }
 +  .h4-m { height: 8rem; }
 +  .h5-m { height: 16rem; }
 +  .h-25-m { height: 25%; }
 +  .h-50-m { height: 50%; }
 +  .h-75-m { height: 75%; }
 +  .h-100-m { height: 100%; }
 +  .min-h-100-m { min-height: 100%; }
 +  .vh-25-m {  height:  25vh; }
 +  .vh-50-m {  height:  50vh; }
 +  .vh-75-m {  height:  75vh; }
 +  .vh-100-m { height: 100vh; }
 +  .min-vh-100-m { min-height: 100vh; }
 +  .h-auto-m { height: auto; }
 +  .h-inherit-m { height: inherit; }
 +}
 +@media screen and (min-width: 60em) {
 +  .h1-l { height: 1rem; }
 +  .h2-l { height: 2rem; }
 +  .h3-l { height: 4rem; }
 +  .h4-l { height: 8rem; }
 +  .h5-l { height: 16rem; }
 +  .h-25-l { height: 25%; }
 +  .h-50-l { height: 50%; }
 +  .h-75-l { height: 75%; }
 +  .h-100-l { height: 100%; }
 +  .min-h-100-l { min-height: 100%; }
 +  .vh-25-l {  height:  25vh; }
 +  .vh-50-l {  height:  50vh; }
 +  .vh-75-l {  height:  75vh; }
 +  .vh-100-l { height: 100vh; }
 +  .min-vh-100-l { min-height: 100vh; }
 +  .h-auto-l { height: auto; }
 +  .h-inherit-l { height: inherit; }
 +}
 +/*
 +
 +   LETTER SPACING
 +   Docs: http://tachyons.io/docs/typography/tracking/
 +
 +   Media Query Extensions:
 +     -ns = not-small
 +     -m  = medium
 +     -l  = large
 +
 +*/
 +.tracked       { letter-spacing:  .1em; }
 +.tracked-tight { letter-spacing: -.05em; }
 +.tracked-mega  { letter-spacing:  .25em; }
 +@media screen and (min-width: 30em) {
 +  .tracked-ns       { letter-spacing:  .1em; }
 +  .tracked-tight-ns { letter-spacing: -.05em; }
 +  .tracked-mega-ns  { letter-spacing:  .25em; }
 +}
 +@media screen and (min-width: 30em) and (max-width: 60em) {
 +  .tracked-m       { letter-spacing:  .1em; }
 +  .tracked-tight-m { letter-spacing: -.05em; }
 +  .tracked-mega-m  { letter-spacing:  .25em; }
 +}
 +@media screen and (min-width: 60em) {
 +  .tracked-l       { letter-spacing:  .1em; }
 +  .tracked-tight-l { letter-spacing: -.05em; }
 +  .tracked-mega-l  { letter-spacing:  .25em; }
 +}
 +/*
 +
 +   LINE HEIGHT / LEADING
 +   Docs: http://tachyons.io/docs/typography/line-height
 +
 +   Media Query Extensions:
 +     -ns = not-small
 +     -m  = medium
 +     -l  = large
 +
 +*/
 +.lh-solid { line-height: 1; }
 +.lh-title { line-height: 1.25; }
 +.lh-copy  { line-height: 1.5; }
 +@media screen and (min-width: 30em) {
 +  .lh-solid-ns { line-height: 1; }
 +  .lh-title-ns { line-height: 1.25; }
 +  .lh-copy-ns  { line-height: 1.5; }
 +}
 +@media screen and (min-width: 30em) and (max-width: 60em) {
 +  .lh-solid-m { line-height: 1; }
 +  .lh-title-m { line-height: 1.25; }
 +  .lh-copy-m  { line-height: 1.5; }
 +}
 +@media screen and (min-width: 60em) {
 +  .lh-solid-l { line-height: 1; }
 +  .lh-title-l { line-height: 1.25; }
 +  .lh-copy-l  { line-height: 1.5; }
 +}
 +/*
 +
 +   LINKS
 +   Docs: http://tachyons.io/docs/elements/links/
 +
 +*/
 +.link {
 +  text-decoration: none;
 +  -webkit-transition: color .15s ease-in;
 +  transition: color .15s ease-in;
 +}
 +.link:link,
 +.link:visited {
 +  -webkit-transition: color .15s ease-in;
 +  transition: color .15s ease-in;
 +}
 +.link:hover   {
 +  -webkit-transition: color .15s ease-in;
 +  transition: color .15s ease-in;
 +}
 +.link:active  {
 +  -webkit-transition: color .15s ease-in;
 +  transition: color .15s ease-in;
 +}
 +.link:focus   {
 +  -webkit-transition: color .15s ease-in;
 +  transition: color .15s ease-in;
 +  outline: 1px dotted currentColor;
 +}
 +/*
 +
 +   LISTS
 +   http://tachyons.io/docs/elements/lists/
 +
 +*/
 +.list {         list-style-type: none; }
 +/*
 +
 +   MAX WIDTHS
 +   Docs: http://tachyons.io/docs/layout/max-widths/
 +
 +   Base:
 +     mw = max-width
 +
 +   Modifiers
 +     1 = 1st step in width scale
 +     2 = 2nd step in width scale
 +     3 = 3rd step in width scale
 +     4 = 4th step in width scale
 +     5 = 5th step in width scale
 +     6 = 6st step in width scale
 +     7 = 7nd step in width scale
 +     8 = 8rd step in width scale
 +     9 = 9th step in width scale
 +
 +     -100 = literal value 100%
 +
 +     -none  = string value none
 +
 +
 +   Media Query Extensions:
 +     -ns = not-small
 +     -m  = medium
 +     -l  = large
 +
 +*/
 +/* Max Width Percentages */
 +.mw-100  { max-width: 100%; }
 +/* Max Width Scale */
 +.mw1  {  max-width: 1rem; }
 +.mw2  {  max-width: 2rem; }
 +.mw3  {  max-width: 4rem; }
 +.mw4  {  max-width: 8rem; }
 +.mw5  {  max-width: 16rem; }
 +.mw6  {  max-width: 32rem; }
 +.mw7  {  max-width: 48rem; }
 +.mw8  {  max-width: 64rem; }
 +.mw9  {  max-width: 96rem; }
 +/* Max Width String Properties */
 +.mw-none { max-width: none; }
 +@media screen and (min-width: 30em) {
 +  .mw-100-ns  { max-width: 100%; }
 +
 +  .mw1-ns  {  max-width: 1rem; }
 +  .mw2-ns  {  max-width: 2rem; }
 +  .mw3-ns  {  max-width: 4rem; }
 +  .mw4-ns  {  max-width: 8rem; }
 +  .mw5-ns  {  max-width: 16rem; }
 +  .mw6-ns  {  max-width: 32rem; }
 +  .mw7-ns  {  max-width: 48rem; }
 +  .mw8-ns  {  max-width: 64rem; }
 +  .mw9-ns  {  max-width: 96rem; }
 +
 +  .mw-none-ns { max-width: none; }
 +}
 +@media screen and (min-width: 30em) and (max-width: 60em) {
 +  .mw-100-m  { max-width: 100%; }
 +
 +  .mw1-m  {  max-width: 1rem; }
 +  .mw2-m  {  max-width: 2rem; }
 +  .mw3-m  {  max-width: 4rem; }
 +  .mw4-m  {  max-width: 8rem; }
 +  .mw5-m  {  max-width: 16rem; }
 +  .mw6-m  {  max-width: 32rem; }
 +  .mw7-m  {  max-width: 48rem; }
 +  .mw8-m  {  max-width: 64rem; }
 +  .mw9-m  {  max-width: 96rem; }
 +
 +  .mw-none-m { max-width: none; }
 +}
 +@media screen and (min-width: 60em) {
 +  .mw-100-l  { max-width: 100%; }
 +
 +  .mw1-l  {  max-width: 1rem; }
 +  .mw2-l  {  max-width: 2rem; }
 +  .mw3-l  {  max-width: 4rem; }
 +  .mw4-l  {  max-width: 8rem; }
 +  .mw5-l  {  max-width: 16rem; }
 +  .mw6-l  {  max-width: 32rem; }
 +  .mw7-l  {  max-width: 48rem; }
 +  .mw8-l  {  max-width: 64rem; }
 +  .mw9-l  {  max-width: 96rem; }
 +
 +  .mw-none-l { max-width: none; }
 +}
 +/*
 +
 +   WIDTHS
 +   Docs: http://tachyons.io/docs/layout/widths/
 +
 +   Base:
 +     w = width
 +
 +   Modifiers
 +     1 = 1st step in width scale
 +     2 = 2nd step in width scale
 +     3 = 3rd step in width scale
 +     4 = 4th step in width scale
 +     5 = 5th step in width scale
 +
 +     -10  = literal value 10%
 +     -20  = literal value 20%
 +     -25  = literal value 25%
 +     -30  = literal value 30%
 +     -33  = literal value 33%
 +     -34  = literal value 34%
 +     -40  = literal value 40%
 +     -50  = literal value 50%
 +     -60  = literal value 60%
 +     -70  = literal value 70%
 +     -75  = literal value 75%
 +     -80  = literal value 80%
 +     -90  = literal value 90%
 +     -100 = literal value 100%
 +
 +     -third      = 100% / 3 (Not supported in opera mini or IE8)
 +     -two-thirds = 100% / 1.5 (Not supported in opera mini or IE8)
 +     -auto       = string value auto
 +
 +
 +   Media Query Extensions:
 +     -ns = not-small
 +     -m  = medium
 +     -l  = large
 +
 +*/
 +/* Width Scale */
 +.w1 {    width: 1rem; }
 +.w2 {    width: 2rem; }
 +.w3 {    width: 4rem; }
 +.w4 {    width: 8rem; }
 +.w5 {    width: 16rem; }
 +.w-10 {  width:  10%; }
 +.w-20 {  width:  20%; }
 +.w-25 {  width:  25%; }
 +.w-30 {  width:  30%; }
 +.w-33 {  width:  33%; }
 +.w-34 {  width:  34%; }
 +.w-40 {  width:  40%; }
 +.w-50 {  width:  50%; }
 +.w-60 {  width:  60%; }
 +.w-70 {  width:  70%; }
 +.w-75 {  width:  75%; }
 +.w-80 {  width:  80%; }
 +.w-90 {  width:  90%; }
 +.w-100 { width: 100%; }
 +.w-third { width: 33.33333%; }
 +.w-two-thirds { width: 66.66667%; }
 +.w-auto { width: auto; }
 +@media screen and (min-width: 30em) {
 +  .w1-ns {  width: 1rem; }
 +  .w2-ns {  width: 2rem; }
 +  .w3-ns {  width: 4rem; }
 +  .w4-ns {  width: 8rem; }
 +  .w5-ns {  width: 16rem; }
 +  .w-10-ns { width:  10%; }
 +  .w-20-ns { width:  20%; }
 +  .w-25-ns { width:  25%; }
 +  .w-30-ns { width:  30%; }
 +  .w-33-ns { width:  33%; }
 +  .w-34-ns { width:  34%; }
 +  .w-40-ns { width:  40%; }
 +  .w-50-ns { width:  50%; }
 +  .w-60-ns { width:  60%; }
 +  .w-70-ns { width:  70%; }
 +  .w-75-ns { width:  75%; }
 +  .w-80-ns { width:  80%; }
 +  .w-90-ns { width:  90%; }
 +  .w-100-ns { width: 100%; }
 +  .w-third-ns { width: 33.33333%; }
 +  .w-two-thirds-ns { width: 66.66667%; }
 +  .w-auto-ns { width: auto; }
 +}
 +@media screen and (min-width: 30em) and (max-width: 60em) {
 +  .w1-m {      width: 1rem; }
 +  .w2-m {      width: 2rem; }
 +  .w3-m {      width: 4rem; }
 +  .w4-m {      width: 8rem; }
 +  .w5-m {      width: 16rem; }
 +  .w-10-m { width:  10%; }
 +  .w-20-m { width:  20%; }
 +  .w-25-m { width:  25%; }
 +  .w-30-m { width:  30%; }
 +  .w-33-m { width:  33%; }
 +  .w-34-m { width:  34%; }
 +  .w-40-m { width:  40%; }
 +  .w-50-m { width:  50%; }
 +  .w-60-m { width:  60%; }
 +  .w-70-m { width:  70%; }
 +  .w-75-m { width:  75%; }
 +  .w-80-m { width:  80%; }
 +  .w-90-m { width:  90%; }
 +  .w-100-m { width: 100%; }
 +  .w-third-m { width: 33.33333%; }
 +  .w-two-thirds-m { width: 66.66667%; }
 +  .w-auto-m {    width: auto; }
 +}
 +@media screen and (min-width: 60em) {
 +  .w1-l {      width: 1rem; }
 +  .w2-l {      width: 2rem; }
 +  .w3-l {      width: 4rem; }
 +  .w4-l {      width: 8rem; }
 +  .w5-l {      width: 16rem; }
 +  .w-10-l {    width:  10%; }
 +  .w-20-l {    width:  20%; }
 +  .w-25-l {    width:  25%; }
 +  .w-30-l {    width:  30%; }
 +  .w-33-l {    width:  33%; }
 +  .w-34-l {    width:  34%; }
 +  .w-40-l {    width:  40%; }
 +  .w-50-l {    width:  50%; }
 +  .w-60-l {    width:  60%; }
 +  .w-70-l {    width:  70%; }
 +  .w-75-l {    width:  75%; }
 +  .w-80-l {    width:  80%; }
 +  .w-90-l {    width:  90%; }
 +  .w-100-l {   width: 100%; }
 +  .w-third-l { width: 33.33333%; }
 +  .w-two-thirds-l { width: 66.66667%; }
 +  .w-auto-l {    width: auto; }
 +}
 +/*
 +
 +    OVERFLOW
 +
 +    Media Query Extensions:
 +      -ns = not-small
 +      -m  = medium
 +      -l  = large
 +
 + */
 +.overflow-visible { overflow: visible; }
 +.overflow-hidden { overflow: hidden; }
 +.overflow-scroll { overflow: scroll; }
 +.overflow-auto { overflow: auto; }
 +.overflow-x-visible { overflow-x: visible; }
 +.overflow-x-hidden { overflow-x: hidden; }
 +.overflow-x-scroll { overflow-x: scroll; }
 +.overflow-x-auto { overflow-x: auto; }
 +.overflow-y-visible { overflow-y: visible; }
 +.overflow-y-hidden { overflow-y: hidden; }
 +.overflow-y-scroll { overflow-y: scroll; }
 +.overflow-y-auto { overflow-y: auto; }
 +@media screen and (min-width: 30em) {
 +  .overflow-visible-ns { overflow: visible; }
 +  .overflow-hidden-ns { overflow: hidden; }
 +  .overflow-scroll-ns { overflow: scroll; }
 +  .overflow-auto-ns { overflow: auto; }
 +  .overflow-x-visible-ns { overflow-x: visible; }
 +  .overflow-x-hidden-ns { overflow-x: hidden; }
 +  .overflow-x-scroll-ns { overflow-x: scroll; }
 +  .overflow-x-auto-ns { overflow-x: auto; }
 +
 +  .overflow-y-visible-ns { overflow-y: visible; }
 +  .overflow-y-hidden-ns { overflow-y: hidden; }
 +  .overflow-y-scroll-ns { overflow-y: scroll; }
 +  .overflow-y-auto-ns { overflow-y: auto; }
 +}
 +@media screen and (min-width: 30em) and (max-width: 60em) {
 +  .overflow-visible-m { overflow: visible; }
 +  .overflow-hidden-m { overflow: hidden; }
 +  .overflow-scroll-m { overflow: scroll; }
 +  .overflow-auto-m { overflow: auto; }
 +
 +  .overflow-x-visible-m { overflow-x: visible; }
 +  .overflow-x-hidden-m { overflow-x: hidden; }
 +  .overflow-x-scroll-m { overflow-x: scroll; }
 +  .overflow-x-auto-m { overflow-x: auto; }
 +
 +  .overflow-y-visible-m { overflow-y: visible; }
 +  .overflow-y-hidden-m { overflow-y: hidden; }
 +  .overflow-y-scroll-m { overflow-y: scroll; }
 +  .overflow-y-auto-m { overflow-y: auto; }
 +}
 +@media screen and (min-width: 60em) {
 +  .overflow-visible-l { overflow: visible; }
 +  .overflow-hidden-l { overflow: hidden; }
 +  .overflow-scroll-l { overflow: scroll; }
 +  .overflow-auto-l { overflow: auto; }
 +
 +  .overflow-x-visible-l { overflow-x: visible; }
 +  .overflow-x-hidden-l { overflow-x: hidden; }
 +  .overflow-x-scroll-l { overflow-x: scroll; }
 +  .overflow-x-auto-l { overflow-x: auto; }
 +
 +  .overflow-y-visible-l { overflow-y: visible; }
 +  .overflow-y-hidden-l { overflow-y: hidden; }
 +  .overflow-y-scroll-l { overflow-y: scroll; }
 +  .overflow-y-auto-l { overflow-y: auto; }
 +}
 +/*
 +
 +   POSITIONING
 +   Docs: http://tachyons.io/docs/layout/position/
 +
 +   Media Query Extensions:
 +     -ns = not-small
 +     -m  = medium
 +     -l  = large
 +
 +*/
 +.static { position: static; }
 +.relative  { position: relative; }
 +.absolute  { position: absolute; }
 +.fixed  { position: fixed; }
 +@media screen and (min-width: 30em) {
 +  .static-ns { position: static; }
 +  .relative-ns  { position: relative; }
 +  .absolute-ns  { position: absolute; }
 +  .fixed-ns  { position: fixed; }
 +}
 +@media screen and (min-width: 30em) and (max-width: 60em) {
 +  .static-m { position: static; }
 +  .relative-m  { position: relative; }
 +  .absolute-m  { position: absolute; }
 +  .fixed-m  { position: fixed; }
 +}
 +@media screen and (min-width: 60em) {
 +  .static-l { position: static; }
 +  .relative-l  { position: relative; }
 +  .absolute-l  { position: absolute; }
 +  .fixed-l  { position: fixed; }
 +}
 +/*
 +
 +    OPACITY
 +    Docs: http://tachyons.io/docs/themes/opacity/
 +
 +*/
 +.o-100 { opacity: 1;    }
 +.o-90  { opacity: .9;   }
 +.o-80  { opacity: .8;   }
 +.o-70  { opacity: .7;   }
 +.o-60  { opacity: .6;   }
 +.o-50  { opacity: .5;   }
 +.o-40  { opacity: .4;   }
 +.o-30  { opacity: .3;   }
 +.o-20  { opacity: .2;   }
 +.o-10  { opacity: .1;   }
 +.o-05  { opacity: .05;  }
 +.o-025 { opacity: .025; }
 +.o-0   { opacity: 0; }
 +/*@import 'tachyons/src/_rotations';*/
 +/*
 +
 +   SKINS
 +   Docs: http://tachyons.io/docs/themes/skins/
 +
 +   Classes for setting foreground and background colors on elements.
 +   If you haven't declared a border color, but set border on an element, it will 
 +   be set to the current text color. 
 +
 +*/
 +/* Text colors */
 +.black-90 {         color: rgba(0, 0, 0, .9); }
 +.black-80 {         color: rgba(0, 0, 0, .8); }
 +.black-70 {         color: rgba(0, 0, 0, .7); }
 +.black-60 {         color: rgba(0, 0, 0, .6); }
 +.black-50 {         color: rgba(0, 0, 0, .5); }
 +.black-40 {         color: rgba(0, 0, 0, .4); }
 +.black-30 {         color: rgba(0, 0, 0, .3); }
 +.black-20 {         color: rgba(0, 0, 0, .2); }
 +.black-10 {         color: rgba(0, 0, 0, .1); }
 +.black-05 {         color: rgba(0, 0, 0, .05); }
 +.white-90 {         color: rgba(255, 255, 255, .9); }
 +.white-80 {         color: rgba(255, 255, 255, .8); }
 +.white-70 {         color: rgba(255, 255, 255, .7); }
 +.white-60 {         color: rgba(255, 255, 255, .6); }
 +.white-50 {         color: rgba(255, 255, 255, .5); }
 +.white-40 {         color: rgba(255, 255, 255, .4); }
 +.white-30 {         color: rgba(255, 255, 255, .3); }
 +.white-20 {         color: rgba(255, 255, 255, .2); }
 +.white-10 {         color: rgba(255, 255, 255, .1); }
 +.black {         color: #000; }
 +.near-black {    color: #111; }
 +.dark-gray {     color: #333; }
 +.mid-gray {      color: #555; }
 +.gray {          color: #777; }
 +.silver  {       color: #999; }
 +.light-silver {  color: #aaa; }
 +.moon-gray {     color: #ccc; }
 +.light-gray {    color: #eee; }
 +.near-white {    color: #f4f4f4; }
 +.white {         color: #fff; }
 +.dark-red { color: #e7040f; }
 +.red { color: #ff4136; }
 +.light-red { color: #ff725c; }
 +.orange { color: #ff6300; }
 +.gold { color: #ffb700; }
 +.yellow { color: #ffd700; }
 +.light-yellow { color: #fbf1a9; }
 +.purple { color: #5e2ca5; }
 +.light-purple { color: #a463f2; }
 +.dark-pink { color: #d5008f; }
 +.hot-pink { color: #ff41b4; }
 +.pink { color: #ff80cc; }
 +.light-pink { color: #ffa3d7; }
 +.dark-green { color: #137752; }
 +.green { color: #19a974; }
 +.light-green { color: #9eebcf; }
 +.navy { color: #001b44; }
 +.dark-blue { color: #00449e; }
 +.blue { color: #0594CB; }
 +.light-blue { color: #96ccff; }
 +.lightest-blue { color: #cdecff; }
 +.washed-blue { color: #f6fffe; }
 +.washed-green { color: #e8fdf5; }
 +.washed-yellow { color: #fffceb; }
 +.washed-red { color: #ffdfdf; }
 +.color-inherit { color: inherit; }
 +.bg-black-90 {         background-color: rgba(0, 0, 0, .9); }
 +.bg-black-80 {         background-color: rgba(0, 0, 0, .8); }
 +.bg-black-70 {         background-color: rgba(0, 0, 0, .7); }
 +.bg-black-60 {         background-color: rgba(0, 0, 0, .6); }
 +.bg-black-50 {         background-color: rgba(0, 0, 0, .5); }
 +.bg-black-40 {         background-color: rgba(0, 0, 0, .4); }
 +.bg-black-30 {         background-color: rgba(0, 0, 0, .3); }
 +.bg-black-20 {         background-color: rgba(0, 0, 0, .2); }
 +.bg-black-10 {         background-color: rgba(0, 0, 0, .1); }
 +.bg-black-05 {         background-color: rgba(0, 0, 0, .05); }
 +.bg-white-90 {        background-color: rgba(255, 255, 255, .9); }
 +.bg-white-80 {        background-color: rgba(255, 255, 255, .8); }
 +.bg-white-70 {        background-color: rgba(255, 255, 255, .7); }
 +.bg-white-60 {        background-color: rgba(255, 255, 255, .6); }
 +.bg-white-50 {        background-color: rgba(255, 255, 255, .5); }
 +.bg-white-40 {        background-color: rgba(255, 255, 255, .4); }
 +.bg-white-30 {        background-color: rgba(255, 255, 255, .3); }
 +.bg-white-20 {        background-color: rgba(255, 255, 255, .2); }
 +.bg-white-10 {        background-color: rgba(255, 255, 255, .1); }
 +/* Background colors */
 +.bg-black {         background-color: #000; }
 +.bg-near-black {    background-color: #111; }
 +.bg-dark-gray {     background-color: #333; }
 +.bg-mid-gray {      background-color: #555; }
 +.bg-gray {          background-color: #777; }
 +.bg-silver  {       background-color: #999; }
 +.bg-light-silver {  background-color: #aaa; }
 +.bg-moon-gray {     background-color: #ccc; }
 +.bg-light-gray {    background-color: #eee; }
 +.bg-near-white {    background-color: #f4f4f4; }
 +.bg-white {         background-color: #fff; }
 +.bg-transparent {   background-color: transparent; }
 +.bg-dark-red { background-color: #e7040f; }
 +.bg-red { background-color: #ff4136; }
 +.bg-light-red { background-color: #ff725c; }
 +.bg-orange { background-color: #ff6300; }
 +.bg-gold { background-color: #ffb700; }
 +.bg-yellow { background-color: #ffd700; }
 +.bg-light-yellow { background-color: #fbf1a9; }
 +.bg-purple { background-color: #5e2ca5; }
 +.bg-light-purple { background-color: #a463f2; }
 +.bg-dark-pink { background-color: #d5008f; }
 +.bg-hot-pink { background-color: #ff41b4; }
 +.bg-pink { background-color: #ff80cc; }
 +.bg-light-pink { background-color: #ffa3d7; }
 +.bg-dark-green { background-color: #137752; }
 +.bg-green { background-color: #19a974; }
 +.bg-light-green { background-color: #9eebcf; }
 +.bg-navy { background-color: #001b44; }
 +.bg-dark-blue { background-color: #00449e; }
 +.bg-blue { background-color: #0594CB; }
 +.bg-light-blue { background-color: #96ccff; }
 +.bg-lightest-blue { background-color: #cdecff; }
 +.bg-washed-blue { background-color: #f6fffe; }
 +.bg-washed-green { background-color: #e8fdf5; }
 +.bg-washed-yellow { background-color: #fffceb; }
 +.bg-washed-red { background-color: #ffdfdf; }
 +.bg-inherit { background-color: inherit; }
 +/* 
 +  
 +   SKINS:PSEUDO
 +
 +   Customize the color of an element when
 +   it is focused or hovered over.
 + 
 + */
 +.hover-black:hover, 
 +.hover-black:focus { color: #000; }
 +.hover-near-black:hover, 
 +.hover-near-black:focus { color: #111; }
 +.hover-dark-gray:hover, 
 +.hover-dark-gray:focus { color: #333; }
 +.hover-mid-gray:hover, 
 +.hover-mid-gray:focus { color: #555; }
 +.hover-gray:hover, 
 +.hover-gray:focus { color: #777; }
 +.hover-silver:hover, 
 +.hover-silver:focus { color: #999; }
 +.hover-light-silver:hover, 
 +.hover-light-silver:focus { color: #aaa; }
 +.hover-moon-gray:hover, 
 +.hover-moon-gray:focus { color: #ccc; }
 +.hover-light-gray:hover, 
 +.hover-light-gray:focus { color: #eee; }
 +.hover-near-white:hover, 
 +.hover-near-white:focus { color: #f4f4f4; }
 +.hover-white:hover, 
 +.hover-white:focus { color: #fff; }
 +.hover-black-90:hover,
 +.hover-black-90:focus { color: rgba(0, 0, 0, .9); }
 +.hover-black-80:hover,
 +.hover-black-80:focus { color: rgba(0, 0, 0, .8); }
 +.hover-black-70:hover,
 +.hover-black-70:focus { color: rgba(0, 0, 0, .7); }
 +.hover-black-60:hover,
 +.hover-black-60:focus { color: rgba(0, 0, 0, .6); }
 +.hover-black-50:hover,
 +.hover-black-50:focus { color: rgba(0, 0, 0, .5); }
 +.hover-black-40:hover,
 +.hover-black-40:focus { color: rgba(0, 0, 0, .4); }
 +.hover-black-30:hover,
 +.hover-black-30:focus { color: rgba(0, 0, 0, .3); }
 +.hover-black-20:hover,
 +.hover-black-20:focus { color: rgba(0, 0, 0, .2); }
 +.hover-black-10:hover,
 +.hover-black-10:focus { color: rgba(0, 0, 0, .1); }
 +.hover-white-90:hover,
 +.hover-white-90:focus { color: rgba(255, 255, 255, .9); }
 +.hover-white-80:hover,
 +.hover-white-80:focus { color: rgba(255, 255, 255, .8); }
 +.hover-white-70:hover,
 +.hover-white-70:focus { color: rgba(255, 255, 255, .7); }
 +.hover-white-60:hover,
 +.hover-white-60:focus { color: rgba(255, 255, 255, .6); }
 +.hover-white-50:hover,
 +.hover-white-50:focus { color: rgba(255, 255, 255, .5); }
 +.hover-white-40:hover,
 +.hover-white-40:focus { color: rgba(255, 255, 255, .4); }
 +.hover-white-30:hover,
 +.hover-white-30:focus { color: rgba(255, 255, 255, .3); }
 +.hover-white-20:hover,
 +.hover-white-20:focus { color: rgba(255, 255, 255, .2); }
 +.hover-white-10:hover,
 +.hover-white-10:focus { color: rgba(255, 255, 255, .1); }
 +.hover-inherit:hover,
 +.hover-inherit:focus { color: inherit; }
 +.hover-bg-black:hover, 
 +.hover-bg-black:focus { background-color: #000; }
 +.hover-bg-near-black:hover, 
 +.hover-bg-near-black:focus { background-color: #111; }
 +.hover-bg-dark-gray:hover, 
 +.hover-bg-dark-gray:focus { background-color: #333; }
 +.hover-bg-mid-gray:hover, 
 +.hover-bg-mid-gray:focus { background-color: #555; }
 +.hover-bg-gray:hover, 
 +.hover-bg-gray:focus { background-color: #777; }
 +.hover-bg-silver:hover, 
 +.hover-bg-silver:focus { background-color: #999; }
 +.hover-bg-light-silver:hover, 
 +.hover-bg-light-silver:focus { background-color: #aaa; }
 +.hover-bg-moon-gray:hover, 
 +.hover-bg-moon-gray:focus { background-color: #ccc; }
 +.hover-bg-light-gray:hover, 
 +.hover-bg-light-gray:focus { background-color: #eee; }
 +.hover-bg-near-white:hover, 
 +.hover-bg-near-white:focus { background-color: #f4f4f4; }
 +.hover-bg-white:hover, 
 +.hover-bg-white:focus { background-color: #fff; }
 +.hover-bg-transparent:hover, 
 +.hover-bg-transparent:focus { background-color: transparent; }
 +.hover-bg-black-90:hover,
 +.hover-bg-black-90:focus { background-color: rgba(0, 0, 0, .9); }
 +.hover-bg-black-80:hover,
 +.hover-bg-black-80:focus { background-color: rgba(0, 0, 0, .8); }
 +.hover-bg-black-70:hover,
 +.hover-bg-black-70:focus { background-color: rgba(0, 0, 0, .7); }
 +.hover-bg-black-60:hover,
 +.hover-bg-black-60:focus { background-color: rgba(0, 0, 0, .6); }
 +.hover-bg-black-50:hover,
 +.hover-bg-black-50:focus { background-color: rgba(0, 0, 0, .5); }
 +.hover-bg-black-40:hover,
 +.hover-bg-black-40:focus { background-color: rgba(0, 0, 0, .4); }
 +.hover-bg-black-30:hover,
 +.hover-bg-black-30:focus { background-color: rgba(0, 0, 0, .3); }
 +.hover-bg-black-20:hover,
 +.hover-bg-black-20:focus { background-color: rgba(0, 0, 0, .2); }
 +.hover-bg-black-10:hover,
 +.hover-bg-black-10:focus { background-color: rgba(0, 0, 0, .1); }
 +.hover-bg-white-90:hover,
 +.hover-bg-white-90:focus { background-color: rgba(255, 255, 255, .9); }
 +.hover-bg-white-80:hover,
 +.hover-bg-white-80:focus { background-color: rgba(255, 255, 255, .8); }
 +.hover-bg-white-70:hover,
 +.hover-bg-white-70:focus { background-color: rgba(255, 255, 255, .7); }
 +.hover-bg-white-60:hover,
 +.hover-bg-white-60:focus { background-color: rgba(255, 255, 255, .6); }
 +.hover-bg-white-50:hover,
 +.hover-bg-white-50:focus { background-color: rgba(255, 255, 255, .5); }
 +.hover-bg-white-40:hover,
 +.hover-bg-white-40:focus { background-color: rgba(255, 255, 255, .4); }
 +.hover-bg-white-30:hover,
 +.hover-bg-white-30:focus { background-color: rgba(255, 255, 255, .3); }
 +.hover-bg-white-20:hover,
 +.hover-bg-white-20:focus { background-color: rgba(255, 255, 255, .2); }
 +.hover-bg-white-10:hover,
 +.hover-bg-white-10:focus { background-color: rgba(255, 255, 255, .1); }
 +.hover-dark-red:hover,
 +.hover-dark-red:focus { color: #e7040f; }
 +.hover-red:hover,
 +.hover-red:focus { color: #ff4136; }
 +.hover-light-red:hover,
 +.hover-light-red:focus { color: #ff725c; }
 +.hover-orange:hover,
 +.hover-orange:focus { color: #ff6300; }
 +.hover-gold:hover,
 +.hover-gold:focus { color: #ffb700; }
 +.hover-yellow:hover,
 +.hover-yellow:focus { color: #ffd700; }
 +.hover-light-yellow:hover,
 +.hover-light-yellow:focus { color: #fbf1a9; }
 +.hover-purple:hover,
 +.hover-purple:focus { color: #5e2ca5; }
 +.hover-light-purple:hover,
 +.hover-light-purple:focus { color: #a463f2; }
 +.hover-dark-pink:hover,
 +.hover-dark-pink:focus { color: #d5008f; }
 +.hover-hot-pink:hover,
 +.hover-hot-pink:focus { color: #ff41b4; }
 +.hover-pink:hover,
 +.hover-pink:focus { color: #ff80cc; }
 +.hover-light-pink:hover,
 +.hover-light-pink:focus { color: #ffa3d7; }
 +.hover-dark-green:hover,
 +.hover-dark-green:focus { color: #137752; }
 +.hover-green:hover,
 +.hover-green:focus { color: #19a974; }
 +.hover-light-green:hover,
 +.hover-light-green:focus { color: #9eebcf; }
 +.hover-navy:hover,
 +.hover-navy:focus { color: #001b44; }
 +.hover-dark-blue:hover,
 +.hover-dark-blue:focus { color: #00449e; }
 +.hover-blue:hover,
 +.hover-blue:focus { color: #0594CB; }
 +.hover-light-blue:hover,
 +.hover-light-blue:focus { color: #96ccff; }
 +.hover-lightest-blue:hover,
 +.hover-lightest-blue:focus { color: #cdecff; }
 +.hover-washed-blue:hover,
 +.hover-washed-blue:focus { color: #f6fffe; }
 +.hover-washed-green:hover,
 +.hover-washed-green:focus { color: #e8fdf5; }
 +.hover-washed-yellow:hover,
 +.hover-washed-yellow:focus { color: #fffceb; }
 +.hover-washed-red:hover,
 +.hover-washed-red:focus { color: #ffdfdf; }
 +.hover-bg-dark-red:hover,
 +.hover-bg-dark-red:focus { background-color: #e7040f; }
 +.hover-bg-red:hover,
 +.hover-bg-red:focus { background-color: #ff4136; }
 +.hover-bg-light-red:hover,
 +.hover-bg-light-red:focus { background-color: #ff725c; }
 +.hover-bg-orange:hover,
 +.hover-bg-orange:focus { background-color: #ff6300; }
 +.hover-bg-gold:hover,
 +.hover-bg-gold:focus { background-color: #ffb700; }
 +.hover-bg-yellow:hover,
 +.hover-bg-yellow:focus { background-color: #ffd700; }
 +.hover-bg-light-yellow:hover,
 +.hover-bg-light-yellow:focus { background-color: #fbf1a9; }
 +.hover-bg-purple:hover,
 +.hover-bg-purple:focus { background-color: #5e2ca5; }
 +.hover-bg-light-purple:hover,
 +.hover-bg-light-purple:focus { background-color: #a463f2; }
 +.hover-bg-dark-pink:hover,
 +.hover-bg-dark-pink:focus { background-color: #d5008f; }
 +.hover-bg-hot-pink:hover,
 +.hover-bg-hot-pink:focus { background-color: #ff41b4; }
 +.hover-bg-pink:hover,
 +.hover-bg-pink:focus { background-color: #ff80cc; }
 +.hover-bg-light-pink:hover,
 +.hover-bg-light-pink:focus { background-color: #ffa3d7; }
 +.hover-bg-dark-green:hover,
 +.hover-bg-dark-green:focus { background-color: #137752; }
 +.hover-bg-green:hover,
 +.hover-bg-green:focus { background-color: #19a974; }
 +.hover-bg-light-green:hover,
 +.hover-bg-light-green:focus { background-color: #9eebcf; }
 +.hover-bg-navy:hover,
 +.hover-bg-navy:focus { background-color: #001b44; }
 +.hover-bg-dark-blue:hover,
 +.hover-bg-dark-blue:focus { background-color: #00449e; }
 +.hover-bg-blue:hover,
 +.hover-bg-blue:focus { background-color: #0594CB; }
 +.hover-bg-light-blue:hover,
 +.hover-bg-light-blue:focus { background-color: #96ccff; }
 +.hover-bg-lightest-blue:hover,
 +.hover-bg-lightest-blue:focus { background-color: #cdecff; }
 +.hover-bg-washed-blue:hover,
 +.hover-bg-washed-blue:focus { background-color: #f6fffe; }
 +.hover-bg-washed-green:hover,
 +.hover-bg-washed-green:focus { background-color: #e8fdf5; }
 +.hover-bg-washed-yellow:hover,
 +.hover-bg-washed-yellow:focus { background-color: #fffceb; }
 +.hover-bg-washed-red:hover,
 +.hover-bg-washed-red:focus { background-color: #ffdfdf; }
 +.hover-bg-inherit:hover,
 +.hover-bg-inherit:focus { background-color: inherit; }
 +/* Variables */
 +/*
 +   SPACING
 +   Docs: http://tachyons.io/docs/layout/spacing/
 +
 +   An eight step powers of two scale ranging from 0 to 16rem.
 +
 +   Base:
 +     p = padding
 +     m = margin
 +
 +   Modifiers:
 +     a = all
 +     h = horizontal
 +     v = vertical
 +     t = top
 +     r = right
 +     b = bottom
 +     l = left
 +
 +     0 = none
 +     1 = 1st step in spacing scale
 +     2 = 2nd step in spacing scale
 +     3 = 3rd step in spacing scale
 +     4 = 4th step in spacing scale
 +     5 = 5th step in spacing scale
 +     6 = 6th step in spacing scale
 +     7 = 7th step in spacing scale
 +
 +   Media Query Extensions:
 +     -ns = not-small
 +     -m  = medium
 +     -l  = large
 +
 +*/
 +.pa0 { padding: 0; }
 +.pa1 { padding: .25rem; }
 +.pa2 { padding: .5rem; }
 +.pa3 { padding: 1rem; }
 +.pa4 { padding: 2rem; }
 +.pa5 { padding: 4rem; }
 +.pa6 { padding: 8rem; }
 +.pa7 { padding: 16rem; }
 +.pl0 { padding-left: 0; }
 +.pl1 { padding-left: .25rem; }
 +.pl2 { padding-left: .5rem; }
 +.pl3 { padding-left: 1rem; }
 +.pl4 { padding-left: 2rem; }
 +.pl5 { padding-left: 4rem; }
 +.pl6 { padding-left: 8rem; }
 +.pl7 { padding-left: 16rem; }
 +.pr0 { padding-right: 0; }
 +.pr1 { padding-right: .25rem; }
 +.pr2 { padding-right: .5rem; }
 +.pr3 { padding-right: 1rem; }
 +.pr4 { padding-right: 2rem; }
 +.pr5 { padding-right: 4rem; }
 +.pr6 { padding-right: 8rem; }
 +.pr7 { padding-right: 16rem; }
 +.pb0 { padding-bottom: 0; }
 +.pb1 { padding-bottom: .25rem; }
 +.pb2 { padding-bottom: .5rem; }
 +.pb3 { padding-bottom: 1rem; }
 +.pb4 { padding-bottom: 2rem; }
 +.pb5 { padding-bottom: 4rem; }
 +.pb6 { padding-bottom: 8rem; }
 +.pb7 { padding-bottom: 16rem; }
 +.pt0 { padding-top: 0; }
 +.pt1 { padding-top: .25rem; }
 +.pt2 { padding-top: .5rem; }
 +.pt3 { padding-top: 1rem; }
 +.pt4 { padding-top: 2rem; }
 +.pt5 { padding-top: 4rem; }
 +.pt6 { padding-top: 8rem; }
 +.pt7 { padding-top: 16rem; }
 +.pv0 {
 +  padding-top: 0;
 +  padding-bottom: 0;
 +}
 +.pv1 {
 +  padding-top: .25rem;
 +  padding-bottom: .25rem;
 +}
 +.pv2 {
 +  padding-top: .5rem;
 +  padding-bottom: .5rem;
 +}
 +.pv3 {
 +  padding-top: 1rem;
 +  padding-bottom: 1rem;
 +}
 +.pv4 {
 +  padding-top: 2rem;
 +  padding-bottom: 2rem;
 +}
 +.pv5 {
 +  padding-top: 4rem;
 +  padding-bottom: 4rem;
 +}
 +.pv6 {
 +  padding-top: 8rem;
 +  padding-bottom: 8rem;
 +}
 +.pv7 {
 +  padding-top: 16rem;
 +  padding-bottom: 16rem;
 +}
 +.ph0 {
 +  padding-left: 0;
 +  padding-right: 0;
 +}
 +.ph1 {
 +  padding-left: .25rem;
 +  padding-right: .25rem;
 +}
 +.ph2 {
 +  padding-left: .5rem;
 +  padding-right: .5rem;
 +}
 +.ph3 {
 +  padding-left: 1rem;
 +  padding-right: 1rem;
 +}
 +.ph4 {
 +  padding-left: 2rem;
 +  padding-right: 2rem;
 +}
 +.ph5 {
 +  padding-left: 4rem;
 +  padding-right: 4rem;
 +}
 +.ph6 {
 +  padding-left: 8rem;
 +  padding-right: 8rem;
 +}
 +.ph7 {
 +  padding-left: 16rem;
 +  padding-right: 16rem;
 +}
 +.ma0  {  margin: 0; }
 +.ma1 {  margin: .25rem; }
 +.ma2  {  margin: .5rem; }
 +.ma3  {  margin: 1rem; }
 +.ma4  {  margin: 2rem; }
 +.ma5  {  margin: 4rem; }
 +.ma6 {  margin: 8rem; }
 +.ma7 { margin: 16rem; }
 +.ml0  {  margin-left: 0; }
 +.ml1 {  margin-left: .25rem; }
 +.ml2  {  margin-left: .5rem; }
 +.ml3  {  margin-left: 1rem; }
 +.ml4  {  margin-left: 2rem; }
 +.ml5  {  margin-left: 4rem; }
 +.ml6 {  margin-left: 8rem; }
 +.ml7 { margin-left: 16rem; }
 +.mr0  {  margin-right: 0; }
 +.mr1 {  margin-right: .25rem; }
 +.mr2  {  margin-right: .5rem; }
 +.mr3  {  margin-right: 1rem; }
 +.mr4  {  margin-right: 2rem; }
 +.mr5  {  margin-right: 4rem; }
 +.mr6 {  margin-right: 8rem; }
 +.mr7 { margin-right: 16rem; }
 +.mb0  {  margin-bottom: 0; }
 +.mb1 {  margin-bottom: .25rem; }
 +.mb2  {  margin-bottom: .5rem; }
 +.mb3  {  margin-bottom: 1rem; }
 +.mb4  {  margin-bottom: 2rem; }
 +.mb5  {  margin-bottom: 4rem; }
 +.mb6 {  margin-bottom: 8rem; }
 +.mb7 { margin-bottom: 16rem; }
 +.mt0  {  margin-top: 0; }
 +.mt1 {  margin-top: .25rem; }
 +.mt2  {  margin-top: .5rem; }
 +.mt3  {  margin-top: 1rem; }
 +.mt4  {  margin-top: 2rem; }
 +.mt5  {  margin-top: 4rem; }
 +.mt6 {  margin-top: 8rem; }
 +.mt7 { margin-top: 16rem; }
 +.mv0   {
 +  margin-top: 0;
 +  margin-bottom: 0;
 +}
 +.mv1  {
 +  margin-top: .25rem;
 +  margin-bottom: .25rem;
 +}
 +.mv2   {
 +  margin-top: .5rem;
 +  margin-bottom: .5rem;
 +}
 +.mv3   {
 +  margin-top: 1rem;
 +  margin-bottom: 1rem;
 +}
 +.mv4   {
 +  margin-top: 2rem;
 +  margin-bottom: 2rem;
 +}
 +.mv5   {
 +  margin-top: 4rem;
 +  margin-bottom: 4rem;
 +}
 +.mv6  {
 +  margin-top: 8rem;
 +  margin-bottom: 8rem;
 +}
 +.mv7  {
 +  margin-top: 16rem;
 +  margin-bottom: 16rem;
 +}
 +.mh0   {
 +  margin-left: 0;
 +  margin-right: 0;
 +}
 +.mh1   {
 +  margin-left: .25rem;
 +  margin-right: .25rem;
 +}
 +.mh2   {
 +  margin-left: .5rem;
 +  margin-right: .5rem;
 +}
 +.mh3   {
 +  margin-left: 1rem;
 +  margin-right: 1rem;
 +}
 +.mh4   {
 +  margin-left: 2rem;
 +  margin-right: 2rem;
 +}
 +.mh5   {
 +  margin-left: 4rem;
 +  margin-right: 4rem;
 +}
 +.mh6  {
 +  margin-left: 8rem;
 +  margin-right: 8rem;
 +}
 +.mh7  {
 +  margin-left: 16rem;
 +  margin-right: 16rem;
 +}
 +@media screen and (min-width: 30em) {
 +  .pa0-ns  {  padding: 0; }
 +  .pa1-ns {  padding: .25rem; }
 +  .pa2-ns  {  padding: .5rem; }
 +  .pa3-ns  {  padding: 1rem; }
 +  .pa4-ns  {  padding: 2rem; }
 +  .pa5-ns  {  padding: 4rem; }
 +  .pa6-ns {  padding: 8rem; }
 +  .pa7-ns { padding: 16rem; }
 +
 +  .pl0-ns  {  padding-left: 0; }
 +  .pl1-ns {  padding-left: .25rem; }
 +  .pl2-ns  {  padding-left: .5rem; }
 +  .pl3-ns  {  padding-left: 1rem; }
 +  .pl4-ns  {  padding-left: 2rem; }
 +  .pl5-ns  {  padding-left: 4rem; }
 +  .pl6-ns {  padding-left: 8rem; }
 +  .pl7-ns { padding-left: 16rem; }
 +
 +  .pr0-ns  {  padding-right: 0; }
 +  .pr1-ns {  padding-right: .25rem; }
 +  .pr2-ns  {  padding-right: .5rem; }
 +  .pr3-ns  {  padding-right: 1rem; }
 +  .pr4-ns  {  padding-right: 2rem; }
 +  .pr5-ns {   padding-right: 4rem; }
 +  .pr6-ns {  padding-right: 8rem; }
 +  .pr7-ns { padding-right: 16rem; }
 +
 +  .pb0-ns  {  padding-bottom: 0; }
 +  .pb1-ns {  padding-bottom: .25rem; }
 +  .pb2-ns  {  padding-bottom: .5rem; }
 +  .pb3-ns  {  padding-bottom: 1rem; }
 +  .pb4-ns  {  padding-bottom: 2rem; }
 +  .pb5-ns  {  padding-bottom: 4rem; }
 +  .pb6-ns {  padding-bottom: 8rem; }
 +  .pb7-ns { padding-bottom: 16rem; }
 +
 +  .pt0-ns  {  padding-top: 0; }
 +  .pt1-ns {  padding-top: .25rem; }
 +  .pt2-ns  {  padding-top: .5rem; }
 +  .pt3-ns  {  padding-top: 1rem; }
 +  .pt4-ns  {  padding-top: 2rem; }
 +  .pt5-ns  {  padding-top: 4rem; }
 +  .pt6-ns {  padding-top: 8rem; }
 +  .pt7-ns { padding-top: 16rem; }
 +
 +  .pv0-ns {
 +    padding-top: 0;
 +    padding-bottom: 0;
 +  }
 +  .pv1-ns {
 +    padding-top: .25rem;
 +    padding-bottom: .25rem;
 +  }
 +  .pv2-ns {
 +    padding-top: .5rem;
 +    padding-bottom: .5rem;
 +  }
 +  .pv3-ns {
 +    padding-top: 1rem;
 +    padding-bottom: 1rem;
 +  }
 +  .pv4-ns {
 +    padding-top: 2rem;
 +    padding-bottom: 2rem;
 +  }
 +  .pv5-ns {
 +    padding-top: 4rem;
 +    padding-bottom: 4rem;
 +  }
 +  .pv6-ns {
 +    padding-top: 8rem;
 +    padding-bottom: 8rem;
 +  }
 +  .pv7-ns {
 +    padding-top: 16rem;
 +    padding-bottom: 16rem;
 +  }
 +  .ph0-ns {
 +    padding-left: 0;
 +    padding-right: 0;
 +  }
 +  .ph1-ns {
 +    padding-left: .25rem;
 +    padding-right: .25rem;
 +  }
 +  .ph2-ns {
 +    padding-left: .5rem;
 +    padding-right: .5rem;
 +  }
 +  .ph3-ns {
 +    padding-left: 1rem;
 +    padding-right: 1rem;
 +  }
 +  .ph4-ns {
 +    padding-left: 2rem;
 +    padding-right: 2rem;
 +  }
 +  .ph5-ns {
 +    padding-left: 4rem;
 +    padding-right: 4rem;
 +  }
 +  .ph6-ns {
 +    padding-left: 8rem;
 +    padding-right: 8rem;
 +  }
 +  .ph7-ns {
 +    padding-left: 16rem;
 +    padding-right: 16rem;
 +  }
 +
 +  .ma0-ns  {  margin: 0; }
 +  .ma1-ns {  margin: .25rem; }
 +  .ma2-ns  {  margin: .5rem; }
 +  .ma3-ns  {  margin: 1rem; }
 +  .ma4-ns  {  margin: 2rem; }
 +  .ma5-ns  {  margin: 4rem; }
 +  .ma6-ns {  margin: 8rem; }
 +  .ma7-ns { margin: 16rem; }
 +
 +  .ml0-ns  {  margin-left: 0; }
 +  .ml1-ns {  margin-left: .25rem; }
 +  .ml2-ns  {  margin-left: .5rem; }
 +  .ml3-ns  {  margin-left: 1rem; }
 +  .ml4-ns  {  margin-left: 2rem; }
 +  .ml5-ns  {  margin-left: 4rem; }
 +  .ml6-ns {  margin-left: 8rem; }
 +  .ml7-ns { margin-left: 16rem; }
 +
 +  .mr0-ns  {  margin-right: 0; }
 +  .mr1-ns {  margin-right: .25rem; }
 +  .mr2-ns  {  margin-right: .5rem; }
 +  .mr3-ns  {  margin-right: 1rem; }
 +  .mr4-ns  {  margin-right: 2rem; }
 +  .mr5-ns  {  margin-right: 4rem; }
 +  .mr6-ns {  margin-right: 8rem; }
 +  .mr7-ns { margin-right: 16rem; }
 +
 +  .mb0-ns  {  margin-bottom: 0; }
 +  .mb1-ns {  margin-bottom: .25rem; }
 +  .mb2-ns  {  margin-bottom: .5rem; }
 +  .mb3-ns  {  margin-bottom: 1rem; }
 +  .mb4-ns  {  margin-bottom: 2rem; }
 +  .mb5-ns  {  margin-bottom: 4rem; }
 +  .mb6-ns {  margin-bottom: 8rem; }
 +  .mb7-ns { margin-bottom: 16rem; }
 +
 +  .mt0-ns  {  margin-top: 0; }
 +  .mt1-ns {  margin-top: .25rem; }
 +  .mt2-ns  {  margin-top: .5rem; }
 +  .mt3-ns  {  margin-top: 1rem; }
 +  .mt4-ns  {  margin-top: 2rem; }
 +  .mt5-ns  {  margin-top: 4rem; }
 +  .mt6-ns {  margin-top: 8rem; }
 +  .mt7-ns { margin-top: 16rem; }
 +
 +  .mv0-ns   {
 +    margin-top: 0;
 +    margin-bottom: 0;
 +  }
 +  .mv1-ns  {
 +    margin-top: .25rem;
 +    margin-bottom: .25rem;
 +  }
 +  .mv2-ns   {
 +    margin-top: .5rem;
 +    margin-bottom: .5rem;
 +  }
 +  .mv3-ns   {
 +    margin-top: 1rem;
 +    margin-bottom: 1rem;
 +  }
 +  .mv4-ns   {
 +    margin-top: 2rem;
 +    margin-bottom: 2rem;
 +  }
 +  .mv5-ns   {
 +    margin-top: 4rem;
 +    margin-bottom: 4rem;
 +  }
 +  .mv6-ns  {
 +    margin-top: 8rem;
 +    margin-bottom: 8rem;
 +  }
 +  .mv7-ns  {
 +    margin-top: 16rem;
 +    margin-bottom: 16rem;
 +  }
 +
 +  .mh0-ns   {
 +    margin-left: 0;
 +    margin-right: 0;
 +  }
 +  .mh1-ns   {
 +    margin-left: .25rem;
 +    margin-right: .25rem;
 +  }
 +  .mh2-ns   {
 +    margin-left: .5rem;
 +    margin-right: .5rem;
 +  }
 +  .mh3-ns   {
 +    margin-left: 1rem;
 +    margin-right: 1rem;
 +  }
 +  .mh4-ns   {
 +    margin-left: 2rem;
 +    margin-right: 2rem;
 +  }
 +  .mh5-ns   {
 +    margin-left: 4rem;
 +    margin-right: 4rem;
 +  }
 +  .mh6-ns  {
 +    margin-left: 8rem;
 +    margin-right: 8rem;
 +  }
 +  .mh7-ns  {
 +    margin-left: 16rem;
 +    margin-right: 16rem;
 +  }
 +
 +}
 +@media screen and (min-width: 30em) and (max-width: 60em) {
 +  .pa0-m  {  padding: 0; }
 +  .pa1-m {  padding: .25rem; }
 +  .pa2-m  {  padding: .5rem; }
 +  .pa3-m  {  padding: 1rem; }
 +  .pa4-m  {  padding: 2rem; }
 +  .pa5-m  {  padding: 4rem; }
 +  .pa6-m {  padding: 8rem; }
 +  .pa7-m { padding: 16rem; }
 +
 +  .pl0-m  {  padding-left: 0; }
 +  .pl1-m {  padding-left: .25rem; }
 +  .pl2-m  {  padding-left: .5rem; }
 +  .pl3-m  {  padding-left: 1rem; }
 +  .pl4-m  {  padding-left: 2rem; }
 +  .pl5-m  {  padding-left: 4rem; }
 +  .pl6-m {  padding-left: 8rem; }
 +  .pl7-m { padding-left: 16rem; }
 +
 +  .pr0-m  {  padding-right: 0; }
 +  .pr1-m {  padding-right: .25rem; }
 +  .pr2-m  {  padding-right: .5rem; }
 +  .pr3-m  {  padding-right: 1rem; }
 +  .pr4-m  {  padding-right: 2rem; }
 +  .pr5-m  {  padding-right: 4rem; }
 +  .pr6-m {  padding-right: 8rem; }
 +  .pr7-m { padding-right: 16rem; }
 +
 +  .pb0-m  {  padding-bottom: 0; }
 +  .pb1-m {  padding-bottom: .25rem; }
 +  .pb2-m  {  padding-bottom: .5rem; }
 +  .pb3-m  {  padding-bottom: 1rem; }
 +  .pb4-m  {  padding-bottom: 2rem; }
 +  .pb5-m  {  padding-bottom: 4rem; }
 +  .pb6-m {  padding-bottom: 8rem; }
 +  .pb7-m { padding-bottom: 16rem; }
 +
 +  .pt0-m  {  padding-top: 0; }
 +  .pt1-m {  padding-top: .25rem; }
 +  .pt2-m  {  padding-top: .5rem; }
 +  .pt3-m  {  padding-top: 1rem; }
 +  .pt4-m  {  padding-top: 2rem; }
 +  .pt5-m  {  padding-top: 4rem; }
 +  .pt6-m {  padding-top: 8rem; }
 +  .pt7-m { padding-top: 16rem; }
 +
 +  .pv0-m {
 +    padding-top: 0;
 +    padding-bottom: 0;
 +  }
 +  .pv1-m {
 +    padding-top: .25rem;
 +    padding-bottom: .25rem;
 +  }
 +  .pv2-m {
 +    padding-top: .5rem;
 +    padding-bottom: .5rem;
 +  }
 +  .pv3-m {
 +    padding-top: 1rem;
 +    padding-bottom: 1rem;
 +  }
 +  .pv4-m {
 +    padding-top: 2rem;
 +    padding-bottom: 2rem;
 +  }
 +  .pv5-m {
 +    padding-top: 4rem;
 +    padding-bottom: 4rem;
 +  }
 +  .pv6-m {
 +    padding-top: 8rem;
 +    padding-bottom: 8rem;
 +  }
 +  .pv7-m {
 +    padding-top: 16rem;
 +    padding-bottom: 16rem;
 +  }
 +
 +  .ph0-m {
 +    padding-left: 0;
 +    padding-right: 0;
 +  }
 +  .ph1-m {
 +    padding-left: .25rem;
 +    padding-right: .25rem;
 +  }
 +  .ph2-m {
 +    padding-left: .5rem;
 +    padding-right: .5rem;
 +  }
 +  .ph3-m {
 +    padding-left: 1rem;
 +    padding-right: 1rem;
 +  }
 +  .ph4-m {
 +    padding-left: 2rem;
 +    padding-right: 2rem;
 +  }
 +  .ph5-m {
 +    padding-left: 4rem;
 +    padding-right: 4rem;
 +  }
 +  .ph6-m {
 +    padding-left: 8rem;
 +    padding-right: 8rem;
 +  }
 +  .ph7-m {
 +    padding-left: 16rem;
 +    padding-right: 16rem;
 +  }
 +
 +  .ma0-m  {  margin: 0; }
 +  .ma1-m {  margin: .25rem; }
 +  .ma2-m  {  margin: .5rem; }
 +  .ma3-m  {  margin: 1rem; }
 +  .ma4-m  {  margin: 2rem; }
 +  .ma5-m  {  margin: 4rem; }
 +  .ma6-m {  margin: 8rem; }
 +  .ma7-m { margin: 16rem; }
 +
 +  .ml0-m  {  margin-left: 0; }
 +  .ml1-m {  margin-left: .25rem; }
 +  .ml2-m  {  margin-left: .5rem; }
 +  .ml3-m  {  margin-left: 1rem; }
 +  .ml4-m  {  margin-left: 2rem; }
 +  .ml5-m  {  margin-left: 4rem; }
 +  .ml6-m {  margin-left: 8rem; }
 +  .ml7-m { margin-left: 16rem; }
 +
 +  .mr0-m  {  margin-right: 0; }
 +  .mr1-m {  margin-right: .25rem; }
 +  .mr2-m  {  margin-right: .5rem; }
 +  .mr3-m  {  margin-right: 1rem; }
 +  .mr4-m  {  margin-right: 2rem; }
 +  .mr5-m  {  margin-right: 4rem; }
 +  .mr6-m {  margin-right: 8rem; }
 +  .mr7-m { margin-right: 16rem; }
 +
 +  .mb0-m  {  margin-bottom: 0; }
 +  .mb1-m {  margin-bottom: .25rem; }
 +  .mb2-m  {  margin-bottom: .5rem; }
 +  .mb3-m  {  margin-bottom: 1rem; }
 +  .mb4-m  {  margin-bottom: 2rem; }
 +  .mb5-m  {  margin-bottom: 4rem; }
 +  .mb6-m {  margin-bottom: 8rem; }
 +  .mb7-m { margin-bottom: 16rem; }
 +
 +  .mt0-m  {  margin-top: 0; }
 +  .mt1-m {  margin-top: .25rem; }
 +  .mt2-m  {  margin-top: .5rem; }
 +  .mt3-m  {  margin-top: 1rem; }
 +  .mt4-m  {  margin-top: 2rem; }
 +  .mt5-m  {  margin-top: 4rem; }
 +  .mt6-m {  margin-top: 8rem; }
 +  .mt7-m { margin-top: 16rem; }
 +
 +  .mv0-m {
 +    margin-top: 0;
 +    margin-bottom: 0;
 +  }
 +  .mv1-m {
 +    margin-top: .25rem;
 +    margin-bottom: .25rem;
 +  }
 +  .mv2-m {
 +    margin-top: .5rem;
 +    margin-bottom: .5rem;
 +  }
 +  .mv3-m {
 +    margin-top: 1rem;
 +    margin-bottom: 1rem;
 +  }
 +  .mv4-m {
 +    margin-top: 2rem;
 +    margin-bottom: 2rem;
 +  }
 +  .mv5-m {
 +    margin-top: 4rem;
 +    margin-bottom: 4rem;
 +  }
 +  .mv6-m {
 +    margin-top: 8rem;
 +    margin-bottom: 8rem;
 +  }
 +  .mv7-m {
 +    margin-top: 16rem;
 +    margin-bottom: 16rem;
 +  }
 +
 +  .mh0-m {
 +    margin-left: 0;
 +    margin-right: 0;
 +  }
 +  .mh1-m {
 +    margin-left: .25rem;
 +    margin-right: .25rem;
 +  }
 +  .mh2-m {
 +    margin-left: .5rem;
 +    margin-right: .5rem;
 +  }
 +  .mh3-m {
 +    margin-left: 1rem;
 +    margin-right: 1rem;
 +  }
 +  .mh4-m {
 +    margin-left: 2rem;
 +    margin-right: 2rem;
 +  }
 +  .mh5-m {
 +    margin-left: 4rem;
 +    margin-right: 4rem;
 +  }
 +  .mh6-m {
 +    margin-left: 8rem;
 +    margin-right: 8rem;
 +  }
 +  .mh7-m {
 +    margin-left: 16rem;
 +    margin-right: 16rem;
 +  }
 +
 +}
 +@media screen and (min-width: 60em) {
 +  .pa0-l  {  padding: 0; }
 +  .pa1-l {  padding: .25rem; }
 +  .pa2-l  {  padding: .5rem; }
 +  .pa3-l  {  padding: 1rem; }
 +  .pa4-l  {  padding: 2rem; }
 +  .pa5-l  {  padding: 4rem; }
 +  .pa6-l {  padding: 8rem; }
 +  .pa7-l { padding: 16rem; }
 +
 +  .pl0-l  {  padding-left: 0; }
 +  .pl1-l {  padding-left: .25rem; }
 +  .pl2-l  {  padding-left: .5rem; }
 +  .pl3-l  {  padding-left: 1rem; }
 +  .pl4-l  {  padding-left: 2rem; }
 +  .pl5-l  {  padding-left: 4rem; }
 +  .pl6-l {  padding-left: 8rem; }
 +  .pl7-l { padding-left: 16rem; }
 +
 +  .pr0-l  {  padding-right: 0; }
 +  .pr1-l {  padding-right: .25rem; }
 +  .pr2-l  {  padding-right: .5rem; }
 +  .pr3-l  {  padding-right: 1rem; }
 +  .pr4-l  {  padding-right: 2rem; }
 +  .pr5-l  {  padding-right: 4rem; }
 +  .pr6-l {  padding-right: 8rem; }
 +  .pr7-l { padding-right: 16rem; }
 +
 +  .pb0-l  {  padding-bottom: 0; }
 +  .pb1-l {  padding-bottom: .25rem; }
 +  .pb2-l  {  padding-bottom: .5rem; }
 +  .pb3-l  {  padding-bottom: 1rem; }
 +  .pb4-l  {  padding-bottom: 2rem; }
 +  .pb5-l  {  padding-bottom: 4rem; }
 +  .pb6-l {  padding-bottom: 8rem; }
 +  .pb7-l { padding-bottom: 16rem; }
 +
 +  .pt0-l  {  padding-top: 0; }
 +  .pt1-l {  padding-top: .25rem; }
 +  .pt2-l  {  padding-top: .5rem; }
 +  .pt3-l  {  padding-top: 1rem; }
 +  .pt4-l  {  padding-top: 2rem; }
 +  .pt5-l  {  padding-top: 4rem; }
 +  .pt6-l {  padding-top: 8rem; }
 +  .pt7-l { padding-top: 16rem; }
 +
 +  .pv0-l {
 +    padding-top: 0;
 +    padding-bottom: 0;
 +  }
 +  .pv1-l {
 +    padding-top: .25rem;
 +    padding-bottom: .25rem;
 +  }
 +  .pv2-l {
 +    padding-top: .5rem;
 +    padding-bottom: .5rem;
 +  }
 +  .pv3-l {
 +    padding-top: 1rem;
 +    padding-bottom: 1rem;
 +  }
 +  .pv4-l {
 +    padding-top: 2rem;
 +    padding-bottom: 2rem;
 +  }
 +  .pv5-l {
 +    padding-top: 4rem;
 +    padding-bottom: 4rem;
 +  }
 +  .pv6-l {
 +    padding-top: 8rem;
 +    padding-bottom: 8rem;
 +  }
 +  .pv7-l {
 +    padding-top: 16rem;
 +    padding-bottom: 16rem;
 +  }
 +
 +  .ph0-l {
 +    padding-left: 0;
 +    padding-right: 0;
 +  }
 +  .ph1-l {
 +    padding-left: .25rem;
 +    padding-right: .25rem;
 +  }
 +  .ph2-l {
 +    padding-left: .5rem;
 +    padding-right: .5rem;
 +  }
 +  .ph3-l {
 +    padding-left: 1rem;
 +    padding-right: 1rem;
 +  }
 +  .ph4-l {
 +    padding-left: 2rem;
 +    padding-right: 2rem;
 +  }
 +  .ph5-l {
 +    padding-left: 4rem;
 +    padding-right: 4rem;
 +  }
 +  .ph6-l {
 +    padding-left: 8rem;
 +    padding-right: 8rem;
 +  }
 +  .ph7-l {
 +    padding-left: 16rem;
 +    padding-right: 16rem;
 +  }
 +
 +  .ma0-l  {  margin: 0; }
 +  .ma1-l {  margin: .25rem; }
 +  .ma2-l  {  margin: .5rem; }
 +  .ma3-l  {  margin: 1rem; }
 +  .ma4-l  {  margin: 2rem; }
 +  .ma5-l  {  margin: 4rem; }
 +  .ma6-l {  margin: 8rem; }
 +  .ma7-l { margin: 16rem; }
 +
 +  .ml0-l  {  margin-left: 0; }
 +  .ml1-l {  margin-left: .25rem; }
 +  .ml2-l  {  margin-left: .5rem; }
 +  .ml3-l  {  margin-left: 1rem; }
 +  .ml4-l  {  margin-left: 2rem; }
 +  .ml5-l  {  margin-left: 4rem; }
 +  .ml6-l {  margin-left: 8rem; }
 +  .ml7-l { margin-left: 16rem; }
 +
 +  .mr0-l  {  margin-right: 0; }
 +  .mr1-l {  margin-right: .25rem; }
 +  .mr2-l  {  margin-right: .5rem; }
 +  .mr3-l  {  margin-right: 1rem; }
 +  .mr4-l  {  margin-right: 2rem; }
 +  .mr5-l  {  margin-right: 4rem; }
 +  .mr6-l {  margin-right: 8rem; }
 +  .mr7-l { margin-right: 16rem; }
 +
 +  .mb0-l  {  margin-bottom: 0; }
 +  .mb1-l {  margin-bottom: .25rem; }
 +  .mb2-l  {  margin-bottom: .5rem; }
 +  .mb3-l  {  margin-bottom: 1rem; }
 +  .mb4-l  {  margin-bottom: 2rem; }
 +  .mb5-l  {  margin-bottom: 4rem; }
 +  .mb6-l {  margin-bottom: 8rem; }
 +  .mb7-l { margin-bottom: 16rem; }
 +
 +  .mt0-l  {  margin-top: 0; }
 +  .mt1-l {  margin-top: .25rem; }
 +  .mt2-l  {  margin-top: .5rem; }
 +  .mt3-l  {  margin-top: 1rem; }
 +  .mt4-l  {  margin-top: 2rem; }
 +  .mt5-l  {  margin-top: 4rem; }
 +  .mt6-l {  margin-top: 8rem; }
 +  .mt7-l { margin-top: 16rem; }
 +
 +  .mv0-l {
 +    margin-top: 0;
 +    margin-bottom: 0;
 +  }
 +  .mv1-l {
 +    margin-top: .25rem;
 +    margin-bottom: .25rem;
 +  }
 +  .mv2-l {
 +    margin-top: .5rem;
 +    margin-bottom: .5rem;
 +  }
 +  .mv3-l {
 +    margin-top: 1rem;
 +    margin-bottom: 1rem;
 +  }
 +  .mv4-l {
 +    margin-top: 2rem;
 +    margin-bottom: 2rem;
 +  }
 +  .mv5-l {
 +    margin-top: 4rem;
 +    margin-bottom: 4rem;
 +  }
 +  .mv6-l {
 +    margin-top: 8rem;
 +    margin-bottom: 8rem;
 +  }
 +  .mv7-l {
 +    margin-top: 16rem;
 +    margin-bottom: 16rem;
 +  }
 +
 +  .mh0-l {
 +    margin-left: 0;
 +    margin-right: 0;
 +  }
 +  .mh1-l {
 +    margin-left: .25rem;
 +    margin-right: .25rem;
 +  }
 +  .mh2-l {
 +    margin-left: .5rem;
 +    margin-right: .5rem;
 +  }
 +  .mh3-l {
 +    margin-left: 1rem;
 +    margin-right: 1rem;
 +  }
 +  .mh4-l {
 +    margin-left: 2rem;
 +    margin-right: 2rem;
 +  }
 +  .mh5-l {
 +    margin-left: 4rem;
 +    margin-right: 4rem;
 +  }
 +  .mh6-l {
 +    margin-left: 8rem;
 +    margin-right: 8rem;
 +  }
 +  .mh7-l {
 +    margin-left: 16rem;
 +    margin-right: 16rem;
 +  }
 +}
 +/*
 +   NEGATIVE MARGINS
 +
 +   Base:
 +     n = negative
 +
 +   Modifiers:
 +     a = all
 +     t = top
 +     r = right
 +     b = bottom
 +     l = left
 +
 +     1 = 1st step in spacing scale
 +     2 = 2nd step in spacing scale
 +     3 = 3rd step in spacing scale
 +     4 = 4th step in spacing scale
 +     5 = 5th step in spacing scale
 +     6 = 6th step in spacing scale
 +     7 = 7th step in spacing scale
 +
 +   Media Query Extensions:
 +     -ns = not-small
 +     -m  = medium
 +     -l  = large
 +
 +*/
 +.na1 { margin: -0.25rem; }
 +.na2 { margin: -0.5rem; }
 +.na3 { margin: -1rem; }
 +.na4 { margin: -2rem; }
 +.na5 { margin: -4rem; }
 +.na6 { margin: -8rem; }
 +.na7 { margin: -16rem; }
 +.nl1 { margin-left: -0.25rem; }
 +.nl2 { margin-left: -0.5rem; }
 +.nl3 { margin-left: -1rem; }
 +.nl4 { margin-left: -2rem; }
 +.nl5 { margin-left: -4rem; }
 +.nl6 { margin-left: -8rem; }
 +.nl7 { margin-left: -16rem; }
 +.nr1 { margin-right: -0.25rem; }
 +.nr2 { margin-right: -0.5rem; }
 +.nr3 { margin-right: -1rem; }
 +.nr4 { margin-right: -2rem; }
 +.nr5 { margin-right: -4rem; }
 +.nr6 { margin-right: -8rem; }
 +.nr7 { margin-right: -16rem; }
 +.nb1 { margin-bottom: -0.25rem; }
 +.nb2 { margin-bottom: -0.5rem; }
 +.nb3 { margin-bottom: -1rem; }
 +.nb4 { margin-bottom: -2rem; }
 +.nb5 { margin-bottom: -4rem; }
 +.nb6 { margin-bottom: -8rem; }
 +.nb7 { margin-bottom: -16rem; }
 +.nt1 { margin-top: -0.25rem; }
 +.nt2 { margin-top: -0.5rem; }
 +.nt3 { margin-top: -1rem; }
 +.nt4 { margin-top: -2rem; }
 +.nt5 { margin-top: -4rem; }
 +.nt6 { margin-top: -8rem; }
 +.nt7 { margin-top: -16rem; }
 +@media screen and (min-width: 30em) {
 +
 +  .na1-ns { margin: -0.25rem; }
 +  .na2-ns { margin: -0.5rem; }
 +  .na3-ns { margin: -1rem; }
 +  .na4-ns { margin: -2rem; }
 +  .na5-ns { margin: -4rem; }
 +  .na6-ns { margin: -8rem; }
 +  .na7-ns { margin: -16rem; }
 +
 +  .nl1-ns { margin-left: -0.25rem; }
 +  .nl2-ns { margin-left: -0.5rem; }
 +  .nl3-ns { margin-left: -1rem; }
 +  .nl4-ns { margin-left: -2rem; }
 +  .nl5-ns { margin-left: -4rem; }
 +  .nl6-ns { margin-left: -8rem; }
 +  .nl7-ns { margin-left: -16rem; }
 +
 +  .nr1-ns { margin-right: -0.25rem; }
 +  .nr2-ns { margin-right: -0.5rem; }
 +  .nr3-ns { margin-right: -1rem; }
 +  .nr4-ns { margin-right: -2rem; }
 +  .nr5-ns { margin-right: -4rem; }
 +  .nr6-ns { margin-right: -8rem; }
 +  .nr7-ns { margin-right: -16rem; }
 +
 +  .nb1-ns { margin-bottom: -0.25rem; }
 +  .nb2-ns { margin-bottom: -0.5rem; }
 +  .nb3-ns { margin-bottom: -1rem; }
 +  .nb4-ns { margin-bottom: -2rem; }
 +  .nb5-ns { margin-bottom: -4rem; }
 +  .nb6-ns { margin-bottom: -8rem; }
 +  .nb7-ns { margin-bottom: -16rem; }
 +
 +  .nt1-ns { margin-top: -0.25rem; }
 +  .nt2-ns { margin-top: -0.5rem; }
 +  .nt3-ns { margin-top: -1rem; }
 +  .nt4-ns { margin-top: -2rem; }
 +  .nt5-ns { margin-top: -4rem; }
 +  .nt6-ns { margin-top: -8rem; }
 +  .nt7-ns { margin-top: -16rem; }
 +
 +}
 +@media screen and (min-width: 30em) and (max-width: 60em) {
 +  .na1-m { margin: -0.25rem; }
 +  .na2-m { margin: -0.5rem; }
 +  .na3-m { margin: -1rem; }
 +  .na4-m { margin: -2rem; }
 +  .na5-m { margin: -4rem; }
 +  .na6-m { margin: -8rem; }
 +  .na7-m { margin: -16rem; }
 +
 +  .nl1-m { margin-left: -0.25rem; }
 +  .nl2-m { margin-left: -0.5rem; }
 +  .nl3-m { margin-left: -1rem; }
 +  .nl4-m { margin-left: -2rem; }
 +  .nl5-m { margin-left: -4rem; }
 +  .nl6-m { margin-left: -8rem; }
 +  .nl7-m { margin-left: -16rem; }
 +
 +  .nr1-m { margin-right: -0.25rem; }
 +  .nr2-m { margin-right: -0.5rem; }
 +  .nr3-m { margin-right: -1rem; }
 +  .nr4-m { margin-right: -2rem; }
 +  .nr5-m { margin-right: -4rem; }
 +  .nr6-m { margin-right: -8rem; }
 +  .nr7-m { margin-right: -16rem; }
 +
 +  .nb1-m { margin-bottom: -0.25rem; }
 +  .nb2-m { margin-bottom: -0.5rem; }
 +  .nb3-m { margin-bottom: -1rem; }
 +  .nb4-m { margin-bottom: -2rem; }
 +  .nb5-m { margin-bottom: -4rem; }
 +  .nb6-m { margin-bottom: -8rem; }
 +  .nb7-m { margin-bottom: -16rem; }
 +
 +  .nt1-m { margin-top: -0.25rem; }
 +  .nt2-m { margin-top: -0.5rem; }
 +  .nt3-m { margin-top: -1rem; }
 +  .nt4-m { margin-top: -2rem; }
 +  .nt5-m { margin-top: -4rem; }
 +  .nt6-m { margin-top: -8rem; }
 +  .nt7-m { margin-top: -16rem; }
 +
 +}
 +@media screen and (min-width: 60em) {
 +  .na1-l { margin: -0.25rem; }
 +  .na2-l { margin: -0.5rem; }
 +  .na3-l { margin: -1rem; }
 +  .na4-l { margin: -2rem; }
 +  .na5-l { margin: -4rem; }
 +  .na6-l { margin: -8rem; }
 +  .na7-l { margin: -16rem; }
 +
 +  .nl1-l { margin-left: -0.25rem; }
 +  .nl2-l { margin-left: -0.5rem; }
 +  .nl3-l { margin-left: -1rem; }
 +  .nl4-l { margin-left: -2rem; }
 +  .nl5-l { margin-left: -4rem; }
 +  .nl6-l { margin-left: -8rem; }
 +  .nl7-l { margin-left: -16rem; }
 +
 +  .nr1-l { margin-right: -0.25rem; }
 +  .nr2-l { margin-right: -0.5rem; }
 +  .nr3-l { margin-right: -1rem; }
 +  .nr4-l { margin-right: -2rem; }
 +  .nr5-l { margin-right: -4rem; }
 +  .nr6-l { margin-right: -8rem; }
 +  .nr7-l { margin-right: -16rem; }
 +
 +  .nb1-l { margin-bottom: -0.25rem; }
 +  .nb2-l { margin-bottom: -0.5rem; }
 +  .nb3-l { margin-bottom: -1rem; }
 +  .nb4-l { margin-bottom: -2rem; }
 +  .nb5-l { margin-bottom: -4rem; }
 +  .nb6-l { margin-bottom: -8rem; }
 +  .nb7-l { margin-bottom: -16rem; }
 +
 +  .nt1-l { margin-top: -0.25rem; }
 +  .nt2-l { margin-top: -0.5rem; }
 +  .nt3-l { margin-top: -1rem; }
 +  .nt4-l { margin-top: -2rem; }
 +  .nt5-l { margin-top: -4rem; }
 +  .nt6-l { margin-top: -8rem; }
 +  .nt7-l { margin-top: -16rem; }
 +}
 +/*
 +
 +  TABLES
 +  Docs: http://tachyons.io/docs/elements/tables/
 +
 +*/
 +.collapse {
 +    border-collapse: collapse;
 +    border-spacing: 0;
 +}
 +.striped--light-silver:nth-child(odd) {
 +  background-color: #aaa;
 +}
 +.striped--moon-gray:nth-child(odd) {
 +  background-color: #ccc;
 +}
 +.striped--light-gray:nth-child(odd) {
 +  background-color: #eee;
 +}
 +.striped--near-white:nth-child(odd) {
 +  background-color: #f4f4f4;
 +}
 +.stripe-light:nth-child(odd) {
 +  background-color: rgba(255, 255, 255, .1);
 +}
 +.stripe-dark:nth-child(odd) {
 +  background-color: rgba(0, 0, 0, .1);
 +}
 +/*
 +
 +   TEXT DECORATION
 +   Docs: http://tachyons.io/docs/typography/text-decoration/
 +
 +
 +   Media Query Extensions:
 +     -ns = not-small
 +     -m  = medium
 +     -l  = large
 +
 +*/
 +.strike       { text-decoration: line-through; }
 +.underline    { text-decoration: underline; }
 +.no-underline { text-decoration: none; }
 +@media screen and (min-width: 30em) {
 +  .strike-ns       { text-decoration: line-through; }
 +  .underline-ns    { text-decoration: underline; }
 +  .no-underline-ns { text-decoration: none; }
 +}
 +@media screen and (min-width: 30em) and (max-width: 60em) {
 +  .strike-m       { text-decoration: line-through; }
 +  .underline-m    { text-decoration: underline; }
 +  .no-underline-m { text-decoration: none; }
 +}
 +@media screen and (min-width: 60em) {
 +  .strike-l       { text-decoration: line-through; }
 +  .underline-l {    text-decoration: underline; }
 +  .no-underline-l { text-decoration: none; }
 +}
 +/*
 +
 +  TEXT ALIGN
 +  Docs: http://tachyons.io/docs/typography/text-align/
 +
 +  Base
 +    t = text-align
 +
 +  Modifiers
 +    l = left
 +    r = right
 +    c = center
 +    j = justify
 +
 +  Media Query Extensions:
 +    -ns = not-small
 +    -m  = medium
 +    -l  = large
 +
 +*/
 +.tl  { text-align: left; }
 +.tr  { text-align: right; }
 +.tc  { text-align: center; }
 +.tj  { text-align: justify; }
 +@media screen and (min-width: 30em) {
 +  .tl-ns  { text-align: left; }
 +  .tr-ns  { text-align: right; }
 +  .tc-ns  { text-align: center; }
 +  .tj-ns  { text-align: justify; }
 +}
 +@media screen and (min-width: 30em) and (max-width: 60em) {
 +  .tl-m  { text-align: left; }
 +  .tr-m  { text-align: right; }
 +  .tc-m  { text-align: center; }
 +  .tj-m  { text-align: justify; }
 +}
 +@media screen and (min-width: 60em) {
 +  .tl-l  { text-align: left; }
 +  .tr-l  { text-align: right; }
 +  .tc-l  { text-align: center; }
 +  .tj-l  { text-align: justify; }
 +}
 +/*
 +
 +   TEXT TRANSFORM
 +   Docs: http://tachyons.io/docs/typography/text-transform/
 +
 +   Base:
 +     tt = text-transform
 +
 +   Modifiers
 +     c = capitalize
 +     l = lowercase
 +     u = uppercase
 +     n = none
 +
 +   Media Query Extensions:
 +     -ns = not-small
 +     -m  = medium
 +     -l  = large
 +
 +*/
 +.ttc { text-transform: capitalize; }
 +.ttl { text-transform: lowercase; }
 +.ttu { text-transform: uppercase; }
 +.ttn { text-transform: none; }
 +@media screen and (min-width: 30em) {
 +  .ttc-ns { text-transform: capitalize; }
 +  .ttl-ns { text-transform: lowercase; }
 +  .ttu-ns { text-transform: uppercase; }
 +  .ttn-ns { text-transform: none; }
 +}
 +@media screen and (min-width: 30em) and (max-width: 60em) {
 +  .ttc-m { text-transform: capitalize; }
 +  .ttl-m { text-transform: lowercase; }
 +  .ttu-m { text-transform: uppercase; }
 +  .ttn-m { text-transform: none; }
 +}
 +@media screen and (min-width: 60em) {
 +  .ttc-l { text-transform: capitalize; }
 +  .ttl-l { text-transform: lowercase; }
 +  .ttu-l { text-transform: uppercase; }
 +  .ttn-l { text-transform: none; }
 +}
 +/*
 +
 +   TYPE SCALE
 +   Docs: http://tachyons.io/docs/typography/scale/
 +
 +   Base:
 +    f = font-size
 +
 +   Modifiers
 +     1 = 1st step in size scale
 +     2 = 2nd step in size scale
 +     3 = 3rd step in size scale
 +     4 = 4th step in size scale
 +     5 = 5th step in size scale
 +     6 = 6th step in size scale
 +     7 = 7th step in size scale
 +
 +   Media Query Extensions:
 +     -ns = not-small
 +     -m  = medium
 +     -l  = large
 +*/
 +/*
 + * For Hero/Marketing Titles
 + *
 + * These generally are too large for mobile
 + * so be careful using them on smaller screens.
 + * */
 +.f-6,
 +.f-headline {
 +  font-size: 6rem;
 +}
 +.f-5,
 +.f-subheadline {
 +  font-size: 5rem;
 +}
 +/* Type Scale */
 +.f1 { font-size: 3rem; }
 +.f2 { font-size: 2.25rem; }
 +.f3 { font-size: 1.5rem; }
 +.f4 { font-size: 1.25rem; }
 +.f5 { font-size: 1rem; }
 +.f6 { font-size: .875rem; }
 +.f7 { font-size: .75rem; }
 +/* Small and hard to read for many people so use with extreme caution */
 +@media screen and (min-width: 30em){
 +  .f-6-ns,
 +  .f-headline-ns { font-size: 6rem; }
 +  .f-5-ns,
 +  .f-subheadline-ns { font-size: 5rem; }
 +  .f1-ns { font-size: 3rem; }
 +  .f2-ns { font-size: 2.25rem; }
 +  .f3-ns { font-size: 1.5rem; }
 +  .f4-ns { font-size: 1.25rem; }
 +  .f5-ns { font-size: 1rem; }
 +  .f6-ns { font-size: .875rem; }
 +  .f7-ns { font-size: .75rem; }
 +}
 +@media screen and (min-width: 30em) and (max-width: 60em) {
 +  .f-6-m,
 +  .f-headline-m { font-size: 6rem; }
 +  .f-5-m,
 +  .f-subheadline-m { font-size: 5rem; }
 +  .f1-m { font-size: 3rem; }
 +  .f2-m { font-size: 2.25rem; }
 +  .f3-m { font-size: 1.5rem; }
 +  .f4-m { font-size: 1.25rem; }
 +  .f5-m { font-size: 1rem; }
 +  .f6-m { font-size: .875rem; }
 +  .f7-m { font-size: .75rem; }
 +}
 +@media screen and (min-width: 60em) {
 +  .f-6-l,
 +  .f-headline-l {
 +    font-size: 6rem;
 +  }
 +  .f-5-l,
 +  .f-subheadline-l {
 +    font-size: 5rem;
 +  }
 +  .f1-l { font-size: 3rem; }
 +  .f2-l { font-size: 2.25rem; }
 +  .f3-l { font-size: 1.5rem; }
 +  .f4-l { font-size: 1.25rem; }
 +  .f5-l { font-size: 1rem; }
 +  .f6-l { font-size: .875rem; }
 +  .f7-l { font-size: .75rem; }
 +}
 +/*
 +
 +   TYPOGRAPHY
 +   http://tachyons.io/docs/typography/measure/
 +
 +   Media Query Extensions:
 +     -ns = not-small
 +     -m  = medium
 +     -l  = large
 +
 +*/
 +/* Measure is limited to ~66 characters */
 +.measure {
 +  max-width: 30em;
 +}
 +/* Measure is limited to ~80 characters */
 +.measure-wide {
 +  max-width: 34em;
 +}
 +/* Measure is limited to ~45 characters */
 +.measure-narrow {
 +  max-width: 20em;
 +}
 +/* Book paragraph style - paragraphs are indented with no vertical spacing. */
 +.indent {
 +  text-indent: 1em;
 +  margin-top: 0;
 +  margin-bottom: 0;
 +}
 +.small-caps {
 +  -webkit-font-feature-settings: "c2sc";
 +          font-feature-settings: "c2sc";
 +  font-variant: small-caps;
 +}
 +/* Combine this class with a width to truncate text (or just leave as is to truncate at width of containing element. */
 +.truncate {
 +  white-space: nowrap;
 +  overflow: hidden;
 +  text-overflow: ellipsis;
 +}
 +@media screen and (min-width: 30em) {
 +  .measure-ns  {
 +    max-width: 30em;
 +  }
 +  .measure-wide-ns {
 +    max-width: 34em;
 +  }
 +  .measure-narrow-ns {
 +    max-width: 20em;
 +  }
 +  .indent-ns {
 +    text-indent: 1em;
 +    margin-top: 0;
 +    margin-bottom: 0;
 +  }
 +  .small-caps-ns {
 +    -webkit-font-feature-settings: "c2sc";
 +            font-feature-settings: "c2sc";
 +    font-variant: small-caps;
 +  }
 +  .truncate-ns {
 +    white-space: nowrap;
 +    overflow: hidden;
 +    text-overflow: ellipsis;
 +  }
 +}
 +@media screen and (min-width: 30em) and (max-width: 60em) {
 +  .measure-m {
 +    max-width: 30em;
 +  }
 +  .measure-wide-m {
 +    max-width: 34em;
 +  }
 +  .measure-narrow-m {
 +    max-width: 20em;
 +  }
 +  .indent-m {
 +    text-indent: 1em;
 +    margin-top: 0;
 +    margin-bottom: 0;
 +  }
 +  .small-caps-m {
 +    -webkit-font-feature-settings: "c2sc";
 +            font-feature-settings: "c2sc";
 +    font-variant: small-caps;
 +  }
 +  .truncate-m {
 +    white-space: nowrap;
 +    overflow: hidden;
 +    text-overflow: ellipsis;
 +  }
 +}
 +@media screen and (min-width: 60em) {
 +  .measure-l {
 +    max-width: 30em;
 +  }
 +  .measure-wide-l {
 +    max-width: 34em;
 +  }
 +  .measure-narrow-l {
 +    max-width: 20em;
 +  }
 +  .indent-l {
 +    text-indent: 1em;
 +    margin-top: 0;
 +    margin-bottom: 0;
 +  }
 +  .small-caps-l {
 +    -webkit-font-feature-settings: "c2sc";
 +            font-feature-settings: "c2sc";
 +    font-variant: small-caps;
 +  }
 +  .truncate-l {
 +    white-space: nowrap;
 +    overflow: hidden;
 +    text-overflow: ellipsis;
 +  }
 +}
 +/*
 +
 +   UTILITIES
 +
 +   Media Query Extensions:
 +     -ns = not-small
 +     -m  = medium
 +     -l  = large
 +
 +*/
 +/* Equivalent to .overflow-y-scroll */
 +.overflow-container {
 +  overflow-y: scroll;
 +}
 +.center {
 +  margin-right: auto;
 +  margin-left: auto;
 +}
 +.mr-auto { margin-right: auto; }
 +.ml-auto { margin-left:  auto; }
 +@media screen and (min-width: 30em){
 +  .center-ns {
 +    margin-right: auto;
 +    margin-left: auto;
 +  }
 +  .mr-auto-ns { margin-right: auto; }
 +  .ml-auto-ns { margin-left:  auto; }
 +}
 +@media screen and (min-width: 30em) and (max-width: 60em){
 +  .center-m {
 +    margin-right: auto;
 +    margin-left: auto;
 +  }
 +  .mr-auto-m { margin-right: auto; }
 +  .ml-auto-m { margin-left:  auto; }
 +}
 +@media screen and (min-width: 60em){
 +  .center-l {
 +    margin-right: auto;
 +    margin-left: auto;
 +  }
 +  .mr-auto-l { margin-right: auto; }
 +  .ml-auto-l { margin-left:  auto; }
 +}
 +/*
 +
 +   VISIBILITY
 +
 +   Media Query Extensions:
 +     -ns = not-small
 +     -m  = medium
 +     -l  = large
 +
 +*/
 +/*
 +    Text that is hidden but accessible
 +    Ref: http://snook.ca/archives/html_and_css/hiding-content-for-accessibility
 +*/
 +.clip {
 +  position: fixed !important;
 +  _position: absolute !important;
 +  clip: rect(1px 1px 1px 1px); /* IE6, IE7 */
 +  clip: rect(1px, 1px, 1px, 1px);
 +}
 +@media screen and (min-width: 30em) {
 +  .clip-ns {
 +    position: fixed !important;
 +    _position: absolute !important;
 +    clip: rect(1px 1px 1px 1px); /* IE6, IE7 */
 +    clip: rect(1px, 1px, 1px, 1px);
 +  }
 +}
 +@media screen and (min-width: 30em) and (max-width: 60em) {
 +  .clip-m {
 +    position: fixed !important;
 +    _position: absolute !important;
 +    clip: rect(1px 1px 1px 1px); /* IE6, IE7 */
 +    clip: rect(1px, 1px, 1px, 1px);
 +  }
 +}
 +@media screen and (min-width: 60em) {
 +  .clip-l {
 +    position: fixed !important;
 +    _position: absolute !important;
 +    clip: rect(1px 1px 1px 1px); /* IE6, IE7 */
 +    clip: rect(1px, 1px, 1px, 1px);
 +  }
 +}
 +/*
 +
 +   WHITE SPACE
 +
 +   Media Query Extensions:
 +     -ns = not-small
 +     -m  = medium
 +     -l  = large
 +
 +*/
 +.ws-normal { white-space: normal; }
 +.nowrap { white-space: nowrap; }
 +.pre { white-space: pre; }
 +@media screen and (min-width: 30em) {
 +  .ws-normal-ns { white-space: normal; }
 +  .nowrap-ns { white-space: nowrap; }
 +  .pre-ns { white-space: pre; }
 +}
 +@media screen and (min-width: 30em) and (max-width: 60em) {
 +  .ws-normal-m { white-space: normal; }
 +  .nowrap-m { white-space: nowrap; }
 +  .pre-m { white-space: pre; }
 +}
 +@media screen and (min-width: 60em) {
 +  .ws-normal-l { white-space: normal; }
 +  .nowrap-l { white-space: nowrap; }
 +  .pre-l { white-space: pre; }
 +}
 +/*
 +
 +   VERTICAL ALIGN
 +
 +   Media Query Extensions:
 +     -ns = not-small
 +     -m  = medium
 +     -l  = large
 +
 +*/
 +.v-base     { vertical-align: baseline; }
 +.v-mid      { vertical-align: middle; }
 +.v-top      { vertical-align: top; }
 +.v-btm      { vertical-align: bottom; }
 +@media screen and (min-width: 30em) {
 +  .v-base-ns     { vertical-align: baseline; }
 +  .v-mid-ns      { vertical-align: middle; }
 +  .v-top-ns      { vertical-align: top; }
 +  .v-btm-ns      { vertical-align: bottom; }
 +}
 +@media screen and (min-width: 30em) and (max-width: 60em) {
 +  .v-base-m     { vertical-align: baseline; }
 +  .v-mid-m      { vertical-align: middle; }
 +  .v-top-m      { vertical-align: top; }
 +  .v-btm-m      { vertical-align: bottom; }
 +}
 +@media screen and (min-width: 60em) {
 +  .v-base-l     { vertical-align: baseline; }
 +  .v-mid-l      { vertical-align: middle; }
 +  .v-top-l      { vertical-align: top; }
 +  .v-btm-l      { vertical-align: bottom; }
 +}
 +/*
 +
 +  HOVER EFFECTS
 +  Docs: http://tachyons.io/docs/themes/hovers/
 +
 +    - Dim
 +    - Glow
 +    - Hide Child
 +    - Underline text
 +    - Grow
 +    - Pointer
 +    - Shadow
 +
 +*/
 +/*
 +
 +  Dim element on hover by adding the dim class.
 +
 +*/
 +.dim {
 +  opacity: 1;
 +  -webkit-transition: opacity .15s ease-in;
 +  transition: opacity .15s ease-in;
 +}
 +.dim:hover,
 +.dim:focus {
 +  opacity: .5;
 +  -webkit-transition: opacity .15s ease-in;
 +  transition: opacity .15s ease-in;
 +}
 +.dim:active {
 +  opacity: .8; -webkit-transition: opacity .15s ease-out; transition: opacity .15s ease-out;
 +}
 +/*
 +
 +  Animate opacity to 100% on hover by adding the glow class.
 +
 +*/
 +.glow {
 +  -webkit-transition: opacity .15s ease-in;
 +  transition: opacity .15s ease-in;
 +}
 +.glow:hover,
 +.glow:focus {
 +  opacity: 1;
 +  -webkit-transition: opacity .15s ease-in;
 +  transition: opacity .15s ease-in;
 +}
 +/*
 +
 +  Hide child & reveal on hover:
 +
 +  Put the hide-child class on a parent element and any nested element with the
 +  child class will be hidden and displayed on hover or focus.
 +
 +  <div class="hide-child">
 +    <div class="child"> Hidden until hover or focus </div>
 +    <div class="child"> Hidden until hover or focus </div>
 +    <div class="child"> Hidden until hover or focus </div>
 +    <div class="child"> Hidden until hover or focus </div>
 +  </div>
 +*/
 +.hide-child .child {
 +  opacity: 0;
 +  -webkit-transition: opacity .15s ease-in;
 +  transition: opacity .15s ease-in;
 +}
 +.hide-child:hover  .child,
 +.hide-child:focus  .child,
 +.hide-child:active .child {
 +  opacity: 1;
 +  -webkit-transition: opacity .15s ease-in;
 +  transition: opacity .15s ease-in;
 +}
 +.underline-hover:hover,
 +.underline-hover:focus {
 +  text-decoration: underline;
 +}
 +/* Can combine this with overflow-hidden to make background images grow on hover
 + * even if you are using background-size: cover */
 +.grow {
 +  -moz-osx-font-smoothing: grayscale;
 +  -webkit-backface-visibility: hidden;
 +          backface-visibility: hidden;
 +  -webkit-transform: translateZ(0);
 +          transform: translateZ(0);
 +  -webkit-transition: -webkit-transform 0.25s ease-out;
 +  transition: -webkit-transform 0.25s ease-out;
 +  transition: transform 0.25s ease-out;
 +  transition: transform 0.25s ease-out, -webkit-transform 0.25s ease-out;
 +}
 +.grow:hover,
 +.grow:focus {
 +  -webkit-transform: scale(1.05);
 +          transform: scale(1.05);
 +}
 +.grow:active {
 +  -webkit-transform: scale(.90);
 +          transform: scale(.90);
 +}
 +.grow-large {
 +  -moz-osx-font-smoothing: grayscale;
 +  -webkit-backface-visibility: hidden;
 +          backface-visibility: hidden;
 +  -webkit-transform: translateZ(0);
 +          transform: translateZ(0);
 +  -webkit-transition: -webkit-transform .25s ease-in-out;
 +  transition: -webkit-transform .25s ease-in-out;
 +  transition: transform .25s ease-in-out;
 +  transition: transform .25s ease-in-out, -webkit-transform .25s ease-in-out;
 +}
 +.grow-large:hover,
 +.grow-large:focus {
 +  -webkit-transform: scale(1.2);
 +          transform: scale(1.2);
 +}
 +.grow-large:active {
 +  -webkit-transform: scale(.95);
 +          transform: scale(.95);
 +}
 +/* Add pointer on hover */
 +.pointer:hover {
 +  cursor: pointer;
 +}
 +/* 
 +   Add shadow on hover.
 +
 +   Performant box-shadow animation pattern from 
 +   http://tobiasahlin.com/blog/how-to-animate-box-shadow/ 
 +*/
 +.shadow-hover {
 +  cursor: pointer;
 +  position: relative;
 +  -webkit-transition: all 0.5s cubic-bezier(0.165, 0.84, 0.44, 1);
 +  transition: all 0.5s cubic-bezier(0.165, 0.84, 0.44, 1);
 +}
 +.shadow-hover::after {
 +  content: '';
 +  -webkit-box-shadow: 0px 0px 16px 2px rgba(0, 0, 0, .2);
 +          box-shadow: 0px 0px 16px 2px rgba(0, 0, 0, .2);
 +  border-radius: inherit;
 +  opacity: 0;
 +  position: absolute;
 +  top: 0;
 +  left: 0;
 +  width: 100%;
 +  height: 100%;
 +  z-index: -1;
 +  -webkit-transition: opacity 0.5s cubic-bezier(0.165, 0.84, 0.44, 1);
 +  transition: opacity 0.5s cubic-bezier(0.165, 0.84, 0.44, 1);
 +}
 +.shadow-hover:hover::after,
 +.shadow-hover:focus::after {
 +  opacity: 1;
 +}
 +/* Combine with classes in skins and skins-pseudo for 
 + * many different transition possibilities. */
 +.bg-animate,
 +.bg-animate:hover,
 +.bg-animate:focus {
 +  -webkit-transition: background-color .15s ease-in-out;
 +  transition: background-color .15s ease-in-out; 
 +}
 +/*
 +
 +  Z-INDEX
 +
 +  Base
 +    z = z-index
 +
 +  Modifiers
 +    -0 = literal value 0
 +    -1 = literal value 1
 +    -2 = literal value 2
 +    -3 = literal value 3
 +    -4 = literal value 4
 +    -5 = literal value 5
 +    -999 = literal value 999
 +    -9999 = literal value 9999
 +
 +    -max = largest accepted z-index value as integer
 +
 +    -inherit = string value inherit
 +    -initial = string value initial
 +    -unset = string value unset
 +
 +  MDN: https://developer.mozilla.org/en/docs/Web/CSS/z-index
 +  Spec: http://www.w3.org/TR/CSS2/zindex.html
 +  Articles:
 +    https://philipwalton.com/articles/what-no-one-told-you-about-z-index/
 +
 +  Tips on extending:
 +  There might be a time worth using negative z-index values.
 +  Or if you are using tachyons with another project, you might need to
 +  adjust these values to suit your needs.
 +
 +*/
 +.z-0 { z-index: 0; }
 +.z-1 { z-index: 1; }
 +.z-2 { z-index: 2; }
 +.z-3 { z-index: 3; }
 +.z-4 { z-index: 4; }
 +.z-5 { z-index: 5; }
 +.z-999 { z-index: 999; }
 +.z-9999 { z-index: 9999; }
 +.z-max {
 +  z-index: 2147483647;
 +}
 +.z-inherit { z-index: inherit; }
 +.z-initial { z-index: auto; z-index: initial; }
 +.z-unset { z-index: unset; }
 +/*
 +
 +    NESTED
 +    Tachyons module for styling nested elements
 +    that are generated by a cms.
 +
 +*/
 +.nested-copy-line-height p,
 +.nested-copy-line-height ul,
 +.nested-copy-line-height ol {
 +  line-height: 1.5;
 +}
 +.nested-headline-line-height h1,
 +.nested-headline-line-height h2,
 +.nested-headline-line-height h3,
 +.nested-headline-line-height h4,
 +.nested-headline-line-height h5,
 +.nested-headline-line-height h6 {
 +  line-height: 1.25;
 +}
 +.nested-list-reset ul,
 +.nested-list-reset ol {
 +  padding-left: 0;
 +  margin-left: 0;
 +  list-style-type: none;
 +}
 +.nested-copy-indent p+p {
 +  text-indent: 1em;
 +  margin-top: 0;
 +  margin-bottom: 0;
 +}
 +.nested-copy-separator p+p {
 +  margin-top: 1.5em;
 +}
 +.nested-img img {
 +  width: 100%;
 +  max-width: 100%;
 +  display: block;
 +}
 +.nested-links a {
 +  color: #0594CB;
 +  -webkit-transition: color .15s ease-in;
 +  transition: color .15s ease-in;
 +}
 +.nested-links a:hover,
 +.nested-links a:focus {
 +  color: #96ccff;
 +  -webkit-transition: color .15s ease-in;
 +  transition: color .15s ease-in;
 +}
 +/*@import 'tachyons/src/_styles';*/
 +/* Variables */
 +/* Importing here will allow you to override any variables in the modules */
 +/*
 +
 +   Tachyons
 +   COLOR VARIABLES
 +
 +   Grayscale
 +   - Solids
 +   - Transparencies
 +   Colors
 +
 +*/
 +/*
 +
 +  CUSTOM MEDIA QUERIES
 +
 +  Media query values can be changed to fit your own content.
 +  There are no magic bullets when it comes to media query width values.
 +  They should be declared in em units - and they should be set to meet
 +  the needs of your content. You can also add additional media queries,
 +  or remove some of the existing ones.
 +
 +  These media queries can be referenced like so:
 +
 +  @media (--breakpoint-not-small) {
 +    .medium-and-larger-specific-style {
 +      background-color: red;
 +    }
 +  }
 +
 +  @media (--breakpoint-medium) {
 +    .medium-screen-specific-style {
 +      background-color: red;
 +    }
 +  }
 +
 +  @media (--breakpoint-large) {
 +    .large-and-larger-screen-specific-style {
 +      background-color: red;
 +    }
 +  }
 +
 +*/
 +/* Media Queries */
 +/* Debugging */
 +/*@import 'tachyons/src/_debug-children';
 +@import 'tachyons/src/_debug-grid';*/
 +/* Uncomment out the line below to help debug layout issues */
 +/* @import 'tachyons/src/_debug'; */
 +/* purgecss start ignore */
 +.header-link:after {
 +  position: relative;
 +  left: 0.5em;
 +  opacity: 0;
 +  font-size: 0.8em;
 +  -moz-transition: opacity 0.2s ease-in-out 0.1s;
 +  -ms-transition: opacity 0.2s ease-in-out 0.1s;
 +}
 +h2:hover .header-link,
 +h3:hover .header-link,
 +h4:hover .header-link,
 +h5:hover .header-link,
 +h6:hover .header-link {
 +  opacity: 1;
 +}
 +.animated {
 +  -webkit-animation-duration: .5s;
 +          animation-duration: .5s;
 +  -webkit-animation-fill-mode: forwards;
 +          animation-fill-mode: forwards;
 +  -webkit-animation-timing-function: ease-in-out;
 +          animation-timing-function: ease-in-out;
 +}
 +@-webkit-keyframes fadeIn {
 +  from {
 +    opacity: 0;
 +  }
 +
 +  to {
 +    opacity: 1;
 +  }
 +}
 +@keyframes fadeIn {
 +  from {
 +    opacity: 0;
 +  }
 +
 +  to {
 +    opacity: 1;
 +  }
 +}
 +.fadeIn {
 +  -webkit-animation-name: fadeIn;
 +          animation-name: fadeIn;
 +}
 +.animated-delay-1 {
 +  -webkit-animation-delay: 0.5s;
 +          animation-delay: 0.5s;
 +}
 +.note,
 +.warning {
 +
 +  border-left-width: 4px;
 +  border-left-style: solid;
 +  position: relative;
 +  border-color: #0594CB;
 +
 +  display: block;
 +}
 +.note #exclamation-icon,
 +.warning #exclamation-icon {
 +
 +  fill: #0594CB;
 +  position: absolute;
 +  top: 35%;
 +  left: -12px;
 +  /*background-color: white;*/
 +}
 +.admonition-content {
 +    display: block;
 +    margin: 0px;
 +    padding: .125em 1em;
 +    /*margin-left: 1em;*/
 +    margin-top: 2em;
 +    margin-bottom: 2em;
 +    overflow-x: auto;
 +    /*font-size: .9375em;*/
 +    background-color: rgba(0, 0, 0, .05);
 +  }
 +.hide-child-menu .child-menu {
 +    display: none;
 +  }
 +.hide-child-menu:hover  .child-menu,
 +  .hide-child-menu:focus  .child-menu,
 +  .hide-child-menu:active .child-menu {
 +  display: block;
 +  }
 +/*documentation-copy headings exaggerate spacing and size to chunk content */
 +.documentation-copy h2 {
 +    margin-top: 3em
 +  }
 +.documentation-copy h2.minor {
 +  font-size: inherit;
 +  margin-top: inherit;
 +  border-bottom: none;
 +}
 +.searchbox{display:inline-block;position:relative;width:200px;height:32px!important;white-space:nowrap;-webkit-box-sizing:border-box;box-sizing:border-box;visibility:visible!important}
 +.searchbox .algolia-autocomplete{display:block;width:100%;height:100%}
 +.searchbox__wrapper{width:100%;height:100%;z-index:999;position:relative}
 +.searchbox__input{display:inline-block;-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-transition:background .4s ease,-webkit-box-shadow .4s ease;transition:background .4s ease,-webkit-box-shadow .4s ease;transition:box-shadow .4s ease,background .4s ease;transition:box-shadow .4s ease,background .4s ease,-webkit-box-shadow .4s ease;border:0;border-radius:16px;-webkit-box-shadow:inset 0 0 0 1px #ccc;box-shadow:inset 0 0 0 1px #ccc;background:#fff!important;padding:0 26px 0 32px;width:100%;height:100%;vertical-align:middle;white-space:normal;font-size:12px;-webkit-appearance:none;-moz-appearance:none;appearance:none}
 +.searchbox__input::-webkit-search-cancel-button,.searchbox__input::-webkit-search-decoration,.searchbox__input::-webkit-search-results-button,.searchbox__input::-webkit-search-results-decoration{display:none}
 +.searchbox__input:hover{-webkit-box-shadow:inset 0 0 0 1px #b3b3b3;box-shadow:inset 0 0 0 1px #b3b3b3}
 +.searchbox__input:active,.searchbox__input:focus{outline:0;-webkit-box-shadow:inset 0 0 0 1px #aaa;box-shadow:inset 0 0 0 1px #aaa;background:#fff}
 +.searchbox__input::-webkit-input-placeholder{color:#aaa}
 +.searchbox__input:-ms-input-placeholder{color:#aaa}
 +.searchbox__input::-ms-input-placeholder{color:#aaa}
 +.searchbox__input::placeholder{color:#aaa}
 +.searchbox__submit{position:absolute;top:0;margin:0;border:0;border-radius:16px 0 0 16px;background-color:rgba(69, 142, 225, 0);padding:0;width:32px;height:100%;vertical-align:middle;text-align:center;font-size:inherit;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;right:inherit;left:0}
 +.searchbox__submit:before{display:inline-block;margin-right:-4px;height:100%;vertical-align:middle;content:""}
 +.searchbox__submit:active,.searchbox__submit:hover{cursor:pointer}
 +.searchbox__submit:focus{outline:0}
 +.searchbox__submit svg{width:14px;height:14px;vertical-align:middle;fill:#6d7e96}
 +.searchbox__reset{display:block;position:absolute;top:8px;right:8px;margin:0;border:0;background:none;cursor:pointer;padding:0;font-size:inherit;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;fill:rgba(0, 0, 0, .5)}
 +.searchbox__reset.hide{display:none}
 +.searchbox__reset:focus{outline:0}
 +.searchbox__reset svg{display:block;margin:4px;width:8px;height:8px}
 +.searchbox__input:valid~.searchbox__reset{display:block;-webkit-animation-name:sbx-reset-in;animation-name:sbx-reset-in;-webkit-animation-duration:.15s;animation-duration:.15s}
 +@-webkit-keyframes sbx-reset-in{0%{-webkit-transform:translate3d(-20%,0,0);transform:translate3d(-20%,0,0);opacity:0}to{-webkit-transform:none;transform:none;opacity:1}}
 +@keyframes sbx-reset-in{0%{-webkit-transform:translate3d(-20%,0,0);transform:translate3d(-20%,0,0);opacity:0}to{-webkit-transform:none;transform:none;opacity:1}}
 +.algolia-autocomplete.algolia-autocomplete-right .ds-dropdown-menu{right:0!important;left:inherit!important}
 +.algolia-autocomplete.algolia-autocomplete-right .ds-dropdown-menu:before{right:48px}
 +.algolia-autocomplete.algolia-autocomplete-left .ds-dropdown-menu{left:0!important;right:inherit!important}
 +.algolia-autocomplete.algolia-autocomplete-left .ds-dropdown-menu:before{left:48px}
 +.algolia-autocomplete .ds-dropdown-menu{top:-6px;border-radius:4px;margin:6px 0 0;padding:0;text-align:left;height:auto;position:relative;background:transparent;border:none;z-index:999;max-width:600px;min-width:500px;-webkit-box-shadow:0 1px 0 0 rgba(0, 0, 0, .2),0 2px 3px 0 rgba(0, 0, 0, .1);box-shadow:0 1px 0 0 rgba(0, 0, 0, .2),0 2px 3px 0 rgba(0, 0, 0, .1)}
 +.algolia-autocomplete .ds-dropdown-menu:before{display:block;position:absolute;content:"";width:14px;height:14px;background:#fff;z-index:1000;top:-7px;border-top:1px solid #d9d9d9;border-right:1px solid #d9d9d9;-webkit-transform:rotate(-45deg);transform:rotate(-45deg);border-radius:2px}
 +.algolia-autocomplete .ds-dropdown-menu .ds-suggestions{position:relative;z-index:1000;margin-top:8px}
 +.algolia-autocomplete .ds-dropdown-menu .ds-suggestions a:hover{text-decoration:none}
 +.algolia-autocomplete .ds-dropdown-menu .ds-suggestion{cursor:pointer}
 +.algolia-autocomplete .ds-dropdown-menu .ds-suggestion.ds-cursor .algolia-docsearch-suggestion.suggestion-layout-simple,.algolia-autocomplete .ds-dropdown-menu .ds-suggestion.ds-cursor .algolia-docsearch-suggestion:not(.suggestion-layout-simple) .algolia-docsearch-suggestion--content{background-color:rgba(69, 142, 225, .05)}
 +.algolia-autocomplete .ds-dropdown-menu [class^=ds-dataset-]{position:relative;border:1px solid #d9d9d9;background:#fff;border-radius:4px;overflow:auto;padding:0 8px 8px}
 +.algolia-autocomplete .ds-dropdown-menu *{-webkit-box-sizing:border-box;box-sizing:border-box}
 +.algolia-autocomplete .algolia-docsearch-suggestion{display:block;position:relative;padding:0 8px;background:#fff;color:#02060c;overflow:hidden}
 +.algolia-autocomplete .algolia-docsearch-suggestion--highlight{color:#174d8c;background:rgba(143, 187, 237, .1);padding:.1em .05em}
 +.algolia-autocomplete .algolia-docsearch-suggestion--category-header .algolia-docsearch-suggestion--category-header-lvl0 .algolia-docsearch-suggestion--highlight,.algolia-autocomplete .algolia-docsearch-suggestion--category-header .algolia-docsearch-suggestion--category-header-lvl1 .algolia-docsearch-suggestion--highlight,.algolia-autocomplete .algolia-docsearch-suggestion--text .algolia-docsearch-suggestion--highlight{padding:0 0 1px;background:inherit;-webkit-box-shadow:inset 0 -2px 0 0 rgba(69, 142, 225, .8);box-shadow:inset 0 -2px 0 0 rgba(69, 142, 225, .8);color:inherit}
 +.algolia-autocomplete .algolia-docsearch-suggestion--content{display:block;float:right;width:70%;position:relative;padding:5.33333px 0 5.33333px 10.66667px;cursor:pointer}
 +.algolia-autocomplete .algolia-docsearch-suggestion--content:before{content:"";position:absolute;display:block;top:0;height:100%;width:1px;background:#ddd;left:-1px}
 +.algolia-autocomplete .algolia-docsearch-suggestion--category-header{position:relative;border-bottom:1px solid #ddd;display:none;margin-top:8px;padding:4px 0;font-size:1em;color:#33363d}
 +.algolia-autocomplete .algolia-docsearch-suggestion--wrapper{width:100%;float:left;padding:8px 0 0}
 +.algolia-autocomplete .algolia-docsearch-suggestion--subcategory-column{float:left;width:30%;text-align:right;position:relative;padding:5.33333px 10.66667px;color:#a4a7ae;font-size:.9em;word-wrap:break-word}
 +.algolia-autocomplete .algolia-docsearch-suggestion--subcategory-column:before{content:"";position:absolute;display:block;top:0;height:100%;width:1px;background:#ddd;right:0}
 +.algolia-autocomplete .algolia-docsearch-suggestion--subcategory-inline{display:none}
 +.algolia-autocomplete .algolia-docsearch-suggestion--title{margin-bottom:4px;color:#02060c;font-size:.9em;font-weight:700}
 +.algolia-autocomplete .algolia-docsearch-suggestion--text{display:block;line-height:1.2em;font-size:.85em;color:#63676d}
 +.algolia-autocomplete .algolia-docsearch-suggestion--no-results{width:100%;padding:8px 0;text-align:center;font-size:1.2em}
 +.algolia-autocomplete .algolia-docsearch-suggestion--no-results:before{display:none}
 +.algolia-autocomplete .algolia-docsearch-suggestion code{padding:1px 5px;font-size:90%;border:none;color:#222;background-color:#ebebeb;border-radius:3px;font-family:Menlo,Monaco,Consolas,Courier New,monospace}
 +.algolia-autocomplete .algolia-docsearch-suggestion code .algolia-docsearch-suggestion--highlight{background:none}
 +.algolia-autocomplete .algolia-docsearch-suggestion.algolia-docsearch-suggestion__main .algolia-docsearch-suggestion--category-header,.algolia-autocomplete .algolia-docsearch-suggestion.algolia-docsearch-suggestion__secondary{display:block}
 +@media (min-width:768px){.algolia-autocomplete .algolia-docsearch-suggestion .algolia-docsearch-suggestion--subcategory-column{display:block}}
 +@media (max-width:768px){.algolia-autocomplete .algolia-docsearch-suggestion .algolia-docsearch-suggestion--subcategory-column{display:inline-block;width:auto;float:left;padding:0;color:#02060c;font-size:.9em;font-weight:700;text-align:left;opacity:.5}.algolia-autocomplete .algolia-docsearch-suggestion .algolia-docsearch-suggestion--subcategory-column:before{display:none}.algolia-autocomplete .algolia-docsearch-suggestion .algolia-docsearch-suggestion--subcategory-column:after{content:"|"}.algolia-autocomplete .algolia-docsearch-suggestion .algolia-docsearch-suggestion--content{display:inline-block;width:auto;text-align:left;float:left;padding:0}.algolia-autocomplete .algolia-docsearch-suggestion .algolia-docsearch-suggestion--content:before{display:none}}
 +.algolia-autocomplete .suggestion-layout-simple.algolia-docsearch-suggestion{border-bottom:1px solid #eee;padding:8px;margin:0}
 +.algolia-autocomplete .suggestion-layout-simple .algolia-docsearch-suggestion--content{width:100%;padding:0}
 +.algolia-autocomplete .suggestion-layout-simple .algolia-docsearch-suggestion--content:before{display:none}
 +.algolia-autocomplete .suggestion-layout-simple .algolia-docsearch-suggestion--category-header{margin:0;padding:0;display:block;width:100%;border:none}
 +.algolia-autocomplete .suggestion-layout-simple .algolia-docsearch-suggestion--category-header-lvl0,.algolia-autocomplete .suggestion-layout-simple .algolia-docsearch-suggestion--category-header-lvl1{opacity:.6;font-size:.85em}
 +.algolia-autocomplete .suggestion-layout-simple .algolia-docsearch-suggestion--category-header-lvl1:before{background-image:url('data:image/svg+xml;utf8,<svg width="10" height="10" viewBox="0 0 20 38" xmlns="http://www.w3.org/2000/svg"><path d="M1.49 4.31l14 16.126.002-2.624-14 16.074-1.314 1.51 3.017 2.626 1.313-1.508 14-16.075 1.142-1.313-1.14-1.313-14-16.125L3.2.18.18 2.8l1.31 1.51z" fill-rule="evenodd" fill="%231D3657" /></svg>');content:"";width:10px;height:10px;display:inline-block}
 +.algolia-autocomplete .suggestion-layout-simple .algolia-docsearch-suggestion--wrapper{width:100%;float:left;margin:0;padding:0}
 +.algolia-autocomplete .suggestion-layout-simple .algolia-docsearch-suggestion--duplicate-content,.algolia-autocomplete .suggestion-layout-simple .algolia-docsearch-suggestion--subcategory-inline{display:none!important}
 +.algolia-autocomplete .suggestion-layout-simple .algolia-docsearch-suggestion--title{margin:0;color:#458ee1;font-size:.9em;font-weight:400}
 +.algolia-autocomplete .suggestion-layout-simple .algolia-docsearch-suggestion--title:before{content:"#";font-weight:700;color:#458ee1;display:inline-block}
 +.algolia-autocomplete .suggestion-layout-simple .algolia-docsearch-suggestion--text{margin:4px 0 0;display:block;line-height:1.4em;padding:5.33333px 8px;background:#f8f8f8;font-size:.85em;opacity:.8}
 +.algolia-autocomplete .suggestion-layout-simple .algolia-docsearch-suggestion--text .algolia-docsearch-suggestion--highlight{color:#3f4145;font-weight:700;-webkit-box-shadow:none;box-shadow:none}
 +.algolia-autocomplete .algolia-docsearch-footer{width:134px;height:20px;z-index:2000;margin-top:10.66667px;float:right;font-size:0;line-height:0}
 +.algolia-autocomplete .algolia-docsearch-footer--logo{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='168' height='24' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='none' fill-rule='evenodd'%3E%3Cpath d='M78.988.938h16.594a2.968 2.968 0 0 1 2.966 2.966V20.5a2.967 2.967 0 0 1-2.966 2.964H78.988a2.967 2.967 0 0 1-2.966-2.964V3.897A2.961 2.961 0 0 1 78.988.938zm41.937 17.866c-4.386.02-4.386-3.54-4.386-4.106l-.007-13.336 2.675-.424v13.254c0 .322 0 2.358 1.718 2.364v2.248zm-10.846-2.18c.821 0 1.43-.047 1.855-.129v-2.719a6.334 6.334 0 0 0-1.574-.199 5.7 5.7 0 0 0-.897.069 2.699 2.699 0 0 0-.814.24c-.24.116-.439.28-.582.491-.15.212-.219.335-.219.656 0 .628.219.991.616 1.23s.938.362 1.615.362zm-.233-9.7c.883 0 1.629.109 2.231.328.602.218 1.088.525 1.444.915.363.396.609.922.76 1.483.157.56.232 1.175.232 1.85v6.874a32.5 32.5 0 0 1-1.868.314c-.834.123-1.772.185-2.813.185-.69 0-1.327-.069-1.895-.198a4.001 4.001 0 0 1-1.471-.636 3.085 3.085 0 0 1-.951-1.134c-.226-.465-.343-1.12-.343-1.803 0-.656.13-1.073.384-1.525a3.24 3.24 0 0 1 1.047-1.106c.445-.287.95-.492 1.532-.615a8.8 8.8 0 0 1 1.82-.185 8.404 8.404 0 0 1 1.972.24v-.438c0-.307-.035-.6-.11-.874a1.88 1.88 0 0 0-.384-.73 1.784 1.784 0 0 0-.724-.493 3.164 3.164 0 0 0-1.143-.205c-.616 0-1.177.075-1.69.164a7.735 7.735 0 0 0-1.26.307l-.321-2.192c.335-.117.834-.233 1.478-.349a10.98 10.98 0 0 1 2.073-.178zm52.842 9.626c.822 0 1.43-.048 1.854-.13V13.7a6.347 6.347 0 0 0-1.574-.199c-.294 0-.595.021-.896.069a2.7 2.7 0 0 0-.814.24 1.46 1.46 0 0 0-.582.491c-.15.212-.218.335-.218.656 0 .628.218.991.615 1.23.404.245.938.362 1.615.362zm-.226-9.694c.883 0 1.629.108 2.231.327.602.219 1.088.526 1.444.915.355.39.609.923.759 1.483a6.8 6.8 0 0 1 .233 1.852v6.873c-.41.088-1.034.19-1.868.314-.834.123-1.772.184-2.813.184-.69 0-1.327-.068-1.895-.198a4.001 4.001 0 0 1-1.471-.635 3.085 3.085 0 0 1-.951-1.134c-.226-.465-.343-1.12-.343-1.804 0-.656.13-1.073.384-1.524.26-.45.608-.82 1.047-1.107.445-.286.95-.491 1.532-.614a8.803 8.803 0 0 1 2.751-.13c.329.034.671.096 1.04.185v-.437a3.3 3.3 0 0 0-.109-.875 1.873 1.873 0 0 0-.384-.731 1.784 1.784 0 0 0-.724-.492 3.165 3.165 0 0 0-1.143-.205c-.616 0-1.177.075-1.69.164a7.75 7.75 0 0 0-1.26.307l-.321-2.193c.335-.116.834-.232 1.478-.348a11.633 11.633 0 0 1 2.073-.177zm-8.034-1.271a1.626 1.626 0 0 1-1.628-1.62c0-.895.725-1.62 1.628-1.62.904 0 1.63.725 1.63 1.62 0 .895-.733 1.62-1.63 1.62zm1.348 13.22h-2.689V7.27l2.69-.423v11.956zm-4.714 0c-4.386.02-4.386-3.54-4.386-4.107l-.008-13.336 2.676-.424v13.254c0 .322 0 2.358 1.718 2.364v2.248zm-8.698-5.903c0-1.156-.253-2.119-.746-2.788-.493-.677-1.183-1.01-2.067-1.01-.882 0-1.574.333-2.065 1.01-.493.676-.733 1.632-.733 2.788 0 1.168.246 1.953.74 2.63.492.683 1.183 1.018 2.066 1.018.882 0 1.574-.342 2.067-1.019.492-.683.738-1.46.738-2.63zm2.737-.007c0 .902-.13 1.584-.397 2.33a5.52 5.52 0 0 1-1.128 1.906 4.986 4.986 0 0 1-1.752 1.223c-.685.286-1.739.45-2.265.45-.528-.006-1.574-.157-2.252-.45a5.096 5.096 0 0 1-1.744-1.223c-.487-.527-.863-1.162-1.137-1.906a6.345 6.345 0 0 1-.41-2.33c0-.902.123-1.77.397-2.508a5.554 5.554 0 0 1 1.15-1.892 5.133 5.133 0 0 1 1.75-1.216c.679-.287 1.425-.423 2.232-.423.808 0 1.553.142 2.237.423a4.88 4.88 0 0 1 1.753 1.216 5.644 5.644 0 0 1 1.135 1.892c.287.738.431 1.606.431 2.508zm-20.138 0c0 1.12.246 2.363.738 2.882.493.52 1.13.78 1.91.78.424 0 .828-.062 1.204-.178.377-.116.677-.253.917-.417V9.33a10.476 10.476 0 0 0-1.766-.226c-.971-.028-1.71.37-2.23 1.004-.513.636-.773 1.75-.773 2.788zm7.438 5.274c0 1.824-.466 3.156-1.404 4.004-.936.846-2.367 1.27-4.296 1.27-.705 0-2.17-.137-3.34-.396l.431-2.118c.98.205 2.272.26 2.95.26 1.074 0 1.84-.219 2.299-.656.459-.437.684-1.086.684-1.948v-.437a8.07 8.07 0 0 1-1.047.397c-.43.13-.93.198-1.492.198-.739 0-1.41-.116-2.018-.349a4.206 4.206 0 0 1-1.567-1.025c-.431-.45-.774-1.017-1.013-1.694-.24-.677-.363-1.885-.363-2.773 0-.834.13-1.88.384-2.577.26-.696.629-1.298 1.129-1.796.493-.498 1.095-.881 1.8-1.162a6.605 6.605 0 0 1 2.428-.457c.87 0 1.67.109 2.45.24.78.129 1.444.265 1.985.415V18.17z' fill='%235468FF'/%3E%3Cpath d='M6.972 6.677v1.627c-.712-.446-1.52-.67-2.425-.67-.585 0-1.045.13-1.38.391a1.24 1.24 0 0 0-.502 1.03c0 .425.164.765.494 1.02.33.256.835.532 1.516.83.447.192.795.356 1.045.495.25.138.537.332.862.582.324.25.563.548.718.894.154.345.23.741.23 1.188 0 .947-.334 1.691-1.004 2.234-.67.542-1.537.814-2.601.814-1.18 0-2.16-.229-2.936-.686v-1.708c.84.628 1.814.942 2.92.942.585 0 1.048-.136 1.388-.407.34-.271.51-.646.51-1.125 0-.287-.1-.55-.302-.79-.203-.24-.42-.42-.655-.542-.234-.123-.585-.29-1.053-.503a61.27 61.27 0 0 1-.582-.271 13.67 13.67 0 0 1-.55-.287 4.275 4.275 0 0 1-.567-.351 6.92 6.92 0 0 1-.455-.4c-.18-.17-.31-.34-.39-.51-.08-.17-.155-.37-.224-.598a2.553 2.553 0 0 1-.104-.742c0-.915.333-1.638.998-2.17.664-.532 1.523-.798 2.576-.798.968 0 1.793.17 2.473.51zm7.468 5.696v-.287c-.022-.607-.187-1.088-.495-1.444-.309-.357-.75-.535-1.324-.535-.532 0-.99.194-1.373.583-.382.388-.622.949-.717 1.683h3.909zm1.005 2.792v1.404c-.596.34-1.383.51-2.362.51-1.255 0-2.255-.377-3-1.132-.744-.755-1.116-1.744-1.116-2.968 0-1.297.34-2.316 1.021-3.055.68-.74 1.548-1.11 2.6-1.11 1.033 0 1.852.323 2.458.966.606.644.91 1.572.91 2.784 0 .33-.033.676-.096 1.038h-5.314c.107.702.405 1.239.894 1.611.49.372 1.106.558 1.85.558.862 0 1.58-.202 2.155-.606zm6.605-1.77h-1.212c-.596 0-1.045.116-1.349.35-.303.234-.454.532-.454.894 0 .372.117.664.35.877.235.213.575.32 1.022.32.51 0 .912-.142 1.204-.424.293-.281.44-.651.44-1.108v-.91zm-4.068-2.554V9.325c.627-.361 1.457-.542 2.489-.542 2.116 0 3.175 1.026 3.175 3.08V17h-1.548v-.957c-.415.68-1.143 1.02-2.186 1.02-.766 0-1.38-.22-1.843-.661-.462-.442-.694-1.003-.694-1.684 0-.776.293-1.38.878-1.81.585-.431 1.404-.647 2.457-.647h1.34V11.8c0-.554-.133-.971-.399-1.253-.266-.282-.707-.423-1.324-.423a4.07 4.07 0 0 0-2.345.718zm9.333-1.93v1.42c.394-1 1.101-1.5 2.123-1.5.148 0 .313.016.494.048v1.531a1.885 1.885 0 0 0-.75-.143c-.542 0-.989.24-1.34.718-.351.479-.527 1.048-.527 1.707V17h-1.563V8.91h1.563zm5.01 4.084c.022.82.272 1.492.75 2.019.479.526 1.15.79 2.01.79.639 0 1.235-.176 1.788-.527v1.404c-.521.319-1.186.479-1.995.479-1.265 0-2.276-.4-3.031-1.197-.755-.798-1.133-1.792-1.133-2.984 0-1.16.38-2.151 1.14-2.975.761-.825 1.79-1.237 3.088-1.237.702 0 1.346.149 1.93.447v1.436a3.242 3.242 0 0 0-1.77-.495c-.84 0-1.513.266-2.019.798-.505.532-.758 1.213-.758 2.042zM40.24 5.72v4.579c.458-1 1.293-1.5 2.505-1.5.787 0 1.42.245 1.899.734.479.49.718 1.17.718 2.042V17h-1.564v-5.106c0-.553-.14-.98-.422-1.284-.282-.303-.652-.455-1.11-.455-.531 0-1.002.202-1.411.606-.41.405-.615 1.022-.615 1.851V17h-1.563V5.72h1.563zm14.966 10.02c.596 0 1.096-.253 1.5-.758.404-.506.606-1.157.606-1.955 0-.915-.202-1.62-.606-2.114-.404-.495-.92-.742-1.548-.742-.553 0-1.05.224-1.491.67-.442.447-.662 1.133-.662 2.058 0 .958.212 1.67.638 2.138.425.469.946.703 1.563.703zM53.004 5.72v4.42c.574-.894 1.388-1.341 2.44-1.341 1.022 0 1.857.383 2.506 1.149.649.766.973 1.781.973 3.047 0 1.138-.309 2.109-.925 2.912-.617.803-1.463 1.205-2.537 1.205-1.075 0-1.894-.447-2.457-1.34V17h-1.58V5.72h1.58zm9.908 11.104l-3.223-7.913h1.739l1.005 2.632 1.26 3.415c.096-.32.48-1.458 1.15-3.415l.909-2.632h1.66l-2.92 7.866c-.777 2.074-1.963 3.11-3.559 3.11a2.92 2.92 0 0 1-.734-.079v-1.34c.17.042.351.064.543.064 1.032 0 1.755-.57 2.17-1.708z' fill='%235D6494'/%3E%3Cpath d='M89.632 5.967v-.772a.978.978 0 0 0-.978-.977h-2.28a.978.978 0 0 0-.978.977v.793c0 .088.082.15.171.13a7.127 7.127 0 0 1 1.984-.28c.65 0 1.295.088 1.917.259.082.02.164-.04.164-.13m-6.248 1.01l-.39-.389a.977.977 0 0 0-1.382 0l-.465.465a.973.973 0 0 0 0 1.38l.383.383c.062.061.15.047.205-.014.226-.307.472-.601.746-.874.281-.28.568-.526.883-.751.068-.042.075-.137.02-.2m4.16 2.453v3.341c0 .096.104.165.192.117l2.97-1.537c.068-.034.089-.117.055-.184a3.695 3.695 0 0 0-3.08-1.866c-.068 0-.136.054-.136.13m0 8.048a4.489 4.489 0 0 1-4.49-4.482 4.488 4.488 0 0 1 4.49-4.482 4.488 4.488 0 0 1 4.489 4.482 4.484 4.484 0 0 1-4.49 4.482m0-10.85a6.363 6.363 0 1 0 0 12.729 6.37 6.37 0 0 0 6.372-6.368 6.358 6.358 0 0 0-6.371-6.36' fill='%23FFF'/%3E%3C/g%3E%3C/svg%3E");background-repeat:no-repeat;background-position:50%;background-size:100%;overflow:hidden;text-indent:-9000px;padding:0!important;width:100%;height:100%;display:block}
 +/* These styles enhance the home page carousel, located here: themes/gohugoioTheme/layouts/partials/home-page-sections/showcase.html */
 +.overflow-x-scroll{
 +  -webkit-overflow-scrolling: touch;
 +}
 +.row {
 +  -webkit-transition: 450ms -webkit-transform;
 +  transition: 450ms -webkit-transform;
 +  transition: 450ms transform;
 +  transition: 450ms transform, 450ms -webkit-transform;
 +  font-size: 0;
 +}
 +.tile {
 +  -webkit-transition: 450ms all;
 +  transition: 450ms all;
 +}
 +.details {
 +  background: -webkit-gradient(linear, left bottom, left top, from(rgba(0, 0, 0, .9)), to(rgba(0, 0, 0, 0)));
 +  background: linear-gradient(to top, rgba(0, 0, 0, .9) 0%, rgba(0, 0, 0, 0) 100%);
 +  -webkit-transition: 450ms opacity;
 +  transition: 450ms opacity;
 +}
 +.tile:hover .details {
 +  opacity: 1;
 +}
 +.row:hover .tile {
 +  opacity: 0.3;
 +}
 +.row:hover .tile:hover {
 +  opacity: 1;
 +}
 +.chroma .lntable pre {
 +  padding: 0;
 +  margin: 0;
 +  border: 0;
 +}
 +.chroma .lntable pre code  {
 +  padding: 0;
 +  margin: 0;
 +}
 +code {
 +    padding: 0.2em;
 +    margin: 0;
 +    font-size: 85%;
 +    background-color: rgba(27, 31, 35, .05);
 +    border-radius: 3px;
 +}
 +pre code {
 +  display: block;
 +  padding: 1.5em 1.5em;
 +  font-size: .875rem;
 +  line-height: 2;
 +  overflow-x: auto;
 +}
 +pre {
 +  background-color: #fff;
 +  color: #333;
 +  white-space: pre;
 +  -webkit-hyphens: none;
 +      -ms-hyphens: none;
 +          hyphens: none;
 +  position: relative;
 +  border-width: 1px;
 +  border-color: #ccc;
 +  border-style: solid;
 +}
 +/* The Pygments highlighter comes with its own styles. */
 +.highlight pre {
 +  background-color: inherit;
 +  color: inherit;
 +  padding: 0.5em;
 +  font-size: .875rem;
 +}
 +/*We are adding the copy button content here so we can change it with javascript. See the "Clipboard scripts"*/
 +.copy:after {
 +  content: "Copy"
 +}
 +.copied:after {
 +  content: "Copied"
 +}
 +@media screen and (min-width: 60em) {
++  .full-width
 +  {
 +  /*width: 100vw;
 +  position: relative;
 +  left: 50%;
 +  right: 50%;
 +  margin-left: -50vw;
 +  margin-right: -50vw;*/
 +  /*width: 60vw;*/
 +  /*position: relative;
 +  left: 50%;
 +  right: 50%;*/
 +  /*margin-left: -30vw;*/
 +  margin-right: -30vw;
 +  max-width: 100vw;
 +  }
 +}
 +.code-block .line-numbers-rows {
 +    background: #2f3a46;
 +    border: none;
 +    bottom: -50px;
 +    color: #98a4b3;
 +    left: -178px;
 +    padding: 50px 0;
 +    top: -50px;
 +    width: 138px
 +}
 +.code-block .line-numbers-rows>span:before {
 +    color: inherit;
 +    padding-right: 30px
 +}
 +.tab-button{
 +      margin-bottom:1px;
 +      position: relative;
 +      z-index: 1;
 +      color:#333;
 +      border-color:#ccc;
 +      outline: none;
 +      background-color:white;
 +}
 +.tab-pane code{
 +      background:#f1f2f2;
 +      border-radius:0;
 +}
 +.tab-pane .chroma{
 +      background:none;
 +      padding:0;
 +}
 +.tab-button.active{
 +      border-bottom-color:#f1f2f2;
 +      background-color: #f1f2f2;
 +}
 +.tab-content .tab-pane{
 +      display: none;
 +}
 +.tab-content .tab-pane.active{
 +      display: block;
 +}
 +/* Treatment of copy buttons inside a tab module */
 +.tab-content .copy, .tab-content .copied{
 +      display: none;
 +}
 +.tab-content .tab-pane.active + .copy, .tab-content .tab-pane.active + .copied{
 +      display: block;
 +}
 +.primary-color                      {color: #0594CB}
 +.bg-primary-color                   {background-color: #0594CB}
 +.hover-bg-primary-color:hover       {background-color: #0594CB}
 +.primary-color-dark                  {color: #0A1922}
 +.bg-primary-color-dark               {background-color: #0A1922}
 +.hover-bg-primary-color-dark:hover   {background-color: #0A1922}
 +.primary-color-light                  {color: #f9f9f9}
 +.bg-primary-color-light               {background-color: #f9f9f9}
 +.hover-bg-primary-color-light:hover   {background-color: #f9f9f9}
 +.accent-color                         {color: #EBB951}
 +.bg-accent-color                      {background-color: #EBB951}
 +.hover-bg-accent-color:hover          {background-color: #EBB951}
 +.accent-color-light                   {color: #FF4088}
 +.hover-accent-color-light:hover                   {color: #FF4088}
 +.bg-accent-color-light                {background-color: #FF4088}
 +.hover-bg-accent-color-light:hover    {background-color: #FF4088}
 +.accent-color-dark                    {color: #33ba91}
 +.bg-accent-color-dark                 {background-color: #33ba91}
 +.hover-bg-accent-color-dark:hover     {background-color: #33ba91}
 +.text-color-primary    {color: #373737}
 +.text-on-primary-color {color: #fff}
 +.text-color-secondary  {color: #ccc}
 +.text-color-disabled   {color: #F7f7f7}
 +.divider-color         {color: #f6f6f6}
 +.warn-color            {color: red}
 +.nested-links a {
 +  color: #0594CB;
 +  text-decoration: none;
 +
 +}
 +.column-count-2 {-webkit-column-count: 1;column-count: 1}
 +.column-gap-1 {-webkit-column-gap: 0;column-gap: 0}
 +.break-inside-avoid {-webkit-column-break-inside: auto;break-inside: auto}
 +@media screen and (min-width: 60em) {
 +  .column-count-3-l {-webkit-column-count: 3;column-count: 3}
 +  .column-count-2-l {-webkit-column-count: 2;column-count: 2}
 +  .column-gap-1-l {-webkit-column-gap: 1;column-gap: 1}
 +  .break-inside-avoid-l {-webkit-column-break-inside: avoid;break-inside: avoid}
 +}
 +.prose ul, .prose ol {
 +  margin-bottom: 2em;
 +}
 +.prose ul li, .prose  ol li {
 +  margin-bottom: .5em;
 +}
 +.prose li:hover {
 +  background-color: #eee
 +}
 +.prose ::selection {
 +  background: #0594CB; /* WebKit/Blink Browsers */
 +  color: white;
 +}
 +body {
 +
 +line-height: 1.45;
 +
 +}
 +p {margin-bottom: 1.3em;}
 +h1, h2, h3, h4 {
 +margin: 1.414em 0 0.5em;
 +
 +line-height: 1.2;
 +}
 +h1 {
 +margin-top: 0;
 +font-size: 2.441em;
 +}
 +h2 {font-size: 1.953em;}
 +h3 {font-size: 1.563em;}
 +h4 {font-size: 1.25em;}
 +small, .font_small {font-size: 0.8em;}
 +.prose table {
 +    width: 100%;
 +    margin-bottom: 3em;
 +    border-collapse: collapse;
 +    border-spacing: 0;
 +    font-size: 1em;
 +    border: 1px solid #eee
 +
 +}
 +.prose table th {
 +  background-color: #0594CB;
 +  border-bottom: 1px solid #0594CB;
 +  color: white;
 +  font-weight: 400;
 +  text-align: left;
 +  padding: .375em .5em;
 +}
 +.prose table td, .prose table tc {
 +  padding: .75em .5em;
 +  text-align: left;
 +  border-right: 1px solid #eee;
 +}
 +.prose table tr:nth-child(even) {
 +  background-color: #eee;
 +}
 +dl dt {
 +  font-weight: bold;
 +  font-size: 1.125rem;
 +}
 +dd {
 +  margin: .5em 0 2em 0;
 +  padding: 0;
 +}
 +.f2-fluid {
 +  font-size: 2.25rem;
 +}
 +@media screen and (min-width: 60em) {
 +  .f2-fluid {
 +    font-size: 1.25rem;
 +    font-size: calc(0.70833rem + 0.83333vw);
 +  }
 +}
 +/* From https://www.cssfontstack.com */
 +code, .code, pre code, .highlight pre  {
 +  font-family: 'inconsolata',Menlo,Monaco,'Courier New',monospace;
 +}
 +.sans-serif {
 +  font-family: 'Muli',
 +              avenir,
 +               'helvetica neue', helvetica,
 +               ubuntu,
 +               roboto, noto,
 +               'segoe ui', arial,
 +               sans-serif;
 +}
 +.serif {
 +  font-family: Palatino,"Palatino Linotype","Palatino LT STD","Book Antiqua",Georgia,serif;
 +}
 +/* Monospaced Typefaces (for code) */
 +.courier {
 +  font-family: 'Courier Next',
 +               courier,
 +               monospace;
 +}
 +/* Sans-Serif Typefaces */
 +.helvetica {
 +  font-family: 'helvetica neue', helvetica,
 +               sans-serif;
 +}
 +.avenir {
 +  font-family: 'avenir next', avenir,
 +               sans-serif;
 +}
 +/* Serif Typefaces */
 +.athelas {
 +  font-family: athelas,
 +               georgia,
 +               serif;
 +}
 +.georgia {
 +  font-family: georgia,
 +               serif;
 +}
 +.times {
 +  font-family: times,
 +               serif;
 +}
 +.bodoni {
 +  font-family: "Bodoni MT",
 +                serif;
 +}
 +.calisto {
 +  font-family: "Calisto MT",
 +                serif;
 +}
 +.garamond {
 +  font-family: garamond,
 +               serif;
 +}
 +.baskerville {
 +  font-family: baskerville,
 +               serif;
 +}
 +/* pagination.html: https://github.com/gohugoio/hugo/blob/master/tpl/tplimpl/template_embedded.go#L117 */
 +.pagination {
 +  margin: 3rem 0;
 +}
 +.pagination li {
 +  display: inline-block;
 +  margin-right: .375rem;
 +  font-size: .875rem;
 +  margin-bottom: 2.5em;
 +}
 +.pagination li a {
 +  padding: .5rem .625rem;
 +  background-color: white;
 +  color: #333;
 +  border: 1px solid #ddd;
 +  border-radius: 3px;
 +  text-decoration: none;
 +}
 +.pagination li.disabled {
 +  display: none;
 +}
 +.pagination li.active a:link,
 +.pagination li.active a:active,
 +.pagination li.active a:visited {
 +  background-color: #ddd;
 +}
 +/* Hides non-meaningful TOC items*/
 +#TableOfContents ul li ul li ul li{
 +    display: none;
 +  }
 +#TableOfContents ul li {
 +  color: black;
 +  display: block;
 +  margin-bottom: .375em;
 +  line-height: 1.375;
 +}
 +#TableOfContents ul li a{
 +  width: 100%;
 +  padding: .25em .375em;
 +  margin-left: -.375em;
 +
 +}
 +#TableOfContents ul li a:hover {
 +  background-color: #999;
 +  color: white;
 +
 +}
 +.no-js .needs-js {
 +  opacity: 0
 +}
 +.js .needs-js {
 +  opacity: 1;
 +  -webkit-transition: opacity .15s ease-in;
 +  transition: opacity .15s ease-in;
 +}
 +.facebook, .twitter, .instagram, .youtube {
 +  fill: #BABABA;
 +}
 +.facebook:hover {
 +  fill: #3b5998;
 +}
 +.twitter {
 +  fill: #55acee;
 +}
 +.twitter:hover {
 +  fill: #BABABA;
 +}
 +.instagram:hover {
 +  fill: #e95950;
 +}
 +.youtube:hover {
 +  fill: #bb0000;
 +}
 +@media (min-width: 75em) {
 +  
 +  [data-scrolldir="down"] .sticky {
 +    position: fixed;
 +    top:100px;
 +    right:0;
 +  }
 +
 +  [data-scrolldir="up"] .sticky {
 +    position: fixed;
 +    top:100px;
 +    right:0;
 +  }
 +}
 +.fill-current { fill: currentColor; }
 +/* Background */
 +.chroma { background-color: #ffffff }
 +/* Error */
 +.chroma .err { color: #a61717; background-color: #e3d2d2 }
 +/* LineTableTD */
 +.chroma .lntd { vertical-align: top; padding: 0; margin: 0; border: 0; }
 +/* LineTable */
 +.chroma .lntable { border-spacing: 0; padding: 0; margin: 0; border: 0; width: auto; overflow: auto; display: block; }
 +/* LineHighlight */
 +.chroma .hl { display: block; width: 100%;background-color: #ffffcc }
 +/* LineNumbersTable */
 +.chroma .lnt { margin-right: 0.4em; padding: 0 0.4em 0 0.4em; }
 +/* LineNumbers */
 +.chroma .ln { margin-right: 0.4em; padding: 0 0.4em 0 0.4em; }
 +/* Keyword */
 +.chroma .k { font-weight: bold }
 +/* KeywordConstant */
 +.chroma .kc { font-weight: bold }
 +/* KeywordDeclaration */
 +.chroma .kd { font-weight: bold }
 +/* KeywordNamespace */
 +.chroma .kn { font-weight: bold }
 +/* KeywordPseudo */
 +.chroma .kp { font-weight: bold }
 +/* KeywordReserved */
 +.chroma .kr { font-weight: bold }
 +/* KeywordType */
 +.chroma .kt { color: #445588; font-weight: bold }
 +/* NameAttribute */
 +.chroma .na { color: #008080 }
 +/* NameBuiltin */
 +.chroma .nb { color: #999999 }
 +/* NameClass */
 +.chroma .nc { color: #445588; font-weight: bold }
 +/* NameConstant */
 +.chroma .no { color: #008080 }
 +/* NameEntity */
 +.chroma .ni { color: #800080 }
 +/* NameException */
 +.chroma .ne { color: #990000; font-weight: bold }
 +/* NameFunction */
 +.chroma .nf { color: #990000; font-weight: bold }
 +/* NameNamespace */
 +.chroma .nn { color: #555555 }
 +/* NameTag */
 +.chroma .nt { color: #000080 }
 +/* NameVariable */
 +.chroma .nv { color: #008080 }
 +/* LiteralString */
 +.chroma .s { color: #bb8844 }
 +/* LiteralStringAffix */
 +.chroma .sa { color: #bb8844 }
 +/* LiteralStringBacktick */
 +.chroma .sb { color: #bb8844 }
 +/* LiteralStringChar */
 +.chroma .sc { color: #bb8844 }
 +/* LiteralStringDelimiter */
 +.chroma .dl { color: #bb8844 }
 +/* LiteralStringDoc */
 +.chroma .sd { color: #bb8844 }
 +/* LiteralStringDouble */
 +.chroma .s2 { color: #bb8844 }
 +/* LiteralStringEscape */
 +.chroma .se { color: #bb8844 }
 +/* LiteralStringHeredoc */
 +.chroma .sh { color: #bb8844 }
 +/* LiteralStringInterpol */
 +.chroma .si { color: #bb8844 }
 +/* LiteralStringOther */
 +.chroma .sx { color: #bb8844 }
 +/* LiteralStringRegex */
 +.chroma .sr { color: #808000 }
 +/* LiteralStringSingle */
 +.chroma .s1 { color: #bb8844 }
 +/* LiteralStringSymbol */
 +.chroma .ss { color: #bb8844 }
 +/* LiteralNumber */
 +.chroma .m { color: #009999 }
 +/* LiteralNumberBin */
 +.chroma .mb { color: #009999 }
 +/* LiteralNumberFloat */
 +.chroma .mf { color: #009999 }
 +/* LiteralNumberHex */
 +.chroma .mh { color: #009999 }
 +/* LiteralNumberInteger */
 +.chroma .mi { color: #009999 }
 +/* LiteralNumberIntegerLong */
 +.chroma .il { color: #009999 }
 +/* LiteralNumberOct */
 +.chroma .mo { color: #009999 }
 +/* Operator */
 +.chroma .o { font-weight: bold }
 +/* OperatorWord */
 +.chroma .ow { font-weight: bold }
 +/* Comment */
 +.chroma .c { color: #999988; font-style: italic }
 +/* CommentHashbang */
 +.chroma .ch { color: #999988; font-style: italic }
 +/* CommentMultiline */
 +.chroma .cm { color: #999988; font-style: italic }
 +/* CommentSingle */
 +.chroma .c1 { color: #999988; font-style: italic }
 +/* CommentSpecial */
 +.chroma .cs { color: #999999; font-weight: bold; font-style: italic }
 +/* CommentPreproc */
 +.chroma .cp { color: #999999; font-weight: bold }
 +/* CommentPreprocFile */
 +.chroma .cpf { color: #999999; font-weight: bold }
 +/* GenericDeleted */
 +.chroma .gd { color: #000000; background-color: #ffdddd }
 +/* GenericEmph */
 +.chroma .ge { font-style: italic }
 +/* GenericError */
 +.chroma .gr { color: #aa0000 }
 +/* GenericHeading */
 +.chroma .gh { color: #999999 }
 +/* GenericInserted */
 +.chroma .gi { color: #000000; background-color: #ddffdd }
 +/* GenericOutput */
 +.chroma .go { color: #888888 }
 +/* GenericPrompt */
 +.chroma .gp { color: #555555 }
 +/* GenericStrong */
 +.chroma .gs { font-weight: bold }
 +/* GenericSubheading */
 +.chroma .gu { color: #aaaaaa }
 +/* GenericTraceback */
 +.chroma .gt { color: #aa0000 }
 +/* TextWhitespace */
 +.chroma .w { color: #bbbbbb }
 +.nested-blockquote blockquote {
 +  border-left: 4px solid #0594CB;
 +  padding-left: 1em;
 +  /*margin: 0;*/
 +}
 +.mw-90 {
 +  max-width:90%;
 +}
 +/* purgecss end ignore */
 +
index 0e9598b81dd9761ae9e587a13b8f84236bdd67db,0000000000000000000000000000000000000000..a3e1801f8b040197231b968295a63c90fd48584e
mode 100644,000000..100644
--- /dev/null
@@@ -1,17 -1,0 +1,17 @@@
- !function(t){var e={};function n(r){if(e[r])return e[r].exports;var i=e[r]={i:r,l:!1,exports:{}};return t[r].call(i.exports,i,i.exports,n),i.l=!0,i.exports}n.m=t,n.c=e,n.d=function(t,e,r){n.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:r})},n.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},n.t=function(t,e){if(1&e&&(t=n(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var i in t)n.d(r,i,function(e){return t[e]}.bind(null,i));return r},n.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return n.d(e,"a",e),e},n.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},n.p="",n(n.s=1)}([function(t,e,n){!function(e,n){var r=function(t,e,n){"use strict";var r,i;if(function(){var e,n={lazyClass:"lazyload",loadedClass:"lazyloaded",loadingClass:"lazyloading",preloadClass:"lazypreload",errorClass:"lazyerror",autosizesClass:"lazyautosizes",fastLoadedClass:"ls-is-cached",iframeLoadMode:0,srcAttr:"data-src",srcsetAttr:"data-srcset",sizesAttr:"data-sizes",minSize:40,customMedia:{},init:!0,expFactor:1.5,hFac:.8,loadMode:2,loadHidden:!0,ricTimeout:0,throttleDelay:125};for(e in i=t.lazySizesConfig||t.lazysizesConfig||{},n)e in i||(i[e]=n[e])}(),!e||!e.getElementsByClassName)return{init:function(){},cfg:i,noSupport:!0};var o=e.documentElement,s=t.HTMLPictureElement,a=t.addEventListener.bind(t),u=t.setTimeout,c=t.requestAnimationFrame||u,l=t.requestIdleCallback,h=/^picture$/i,f=["load","error","lazyincluded","_lazyloaded"],d={},p=Array.prototype.forEach,g=function(t,e){return d[e]||(d[e]=new RegExp("(\\s|^)"+e+"(\\s|$)")),d[e].test(t.getAttribute("class")||"")&&d[e]},m=function(t,e){g(t,e)||t.setAttribute("class",(t.getAttribute("class")||"").trim()+" "+e)},y=function(t,e){var n;(n=g(t,e))&&t.setAttribute("class",(t.getAttribute("class")||"").replace(n," "))},v=function(t,e,n){var r=n?"addEventListener":"removeEventListener";n&&v(t,e),f.forEach((function(n){t[r](n,e)}))},b=function(t,n,i,o,s){var a=e.createEvent("Event");return i||(i={}),i.instance=r,a.initEvent(n,!o,!s),a.detail=i,t.dispatchEvent(a),a},w=function(e,n){var r;!s&&(r=t.picturefill||i.pf)?(n&&n.src&&!e.getAttribute("srcset")&&e.setAttribute("srcset",n.src),r({reevaluate:!0,elements:[e]})):n&&n.src&&(e.src=n.src)},_=function(t,e){return(getComputedStyle(t,null)||{})[e]},x=function(t,e,n){for(n=n||t.offsetWidth;n<i.minSize&&e&&!t._lazysizesWidth;)n=e.offsetWidth,e=e.parentNode;return n},S=(dt=[],pt=[],gt=dt,mt=function(){var t=gt;for(gt=dt.length?pt:dt,ht=!0,ft=!1;t.length;)t.shift()();ht=!1},yt=function(t,n){ht&&!n?t.apply(this,arguments):(gt.push(t),ft||(ft=!0,(e.hidden?u:c)(mt)))},yt._lsFlush=mt,yt),C=function(t,e){return e?function(){S(t)}:function(){var e=this,n=arguments;S((function(){t.apply(e,n)}))}},A=function(t){var e,r,i=function(){e=null,t()},o=function(){var t=n.now()-r;t<99?u(o,99-t):(l||i)(i)};return function(){r=n.now(),e||(e=u(o,99))}},E=(V=/^img$/i,K=/^iframe$/i,J="onscroll"in t&&!/(gle|ing)bot/.test(navigator.userAgent),W=0,Q=0,X=-1,G=function(t){Q--,(!t||Q<0||!t.target)&&(Q=0)},Z=function(t){return null==U&&(U="hidden"==_(e.body,"visibility")),U||!("hidden"==_(t.parentNode,"visibility")&&"hidden"==_(t,"visibility"))},Y=function(t,n){var r,i=t,s=Z(t);for(H-=n,B+=n,F-=n,z+=n;s&&(i=i.offsetParent)&&i!=e.body&&i!=o;)(s=(_(i,"opacity")||1)>0)&&"visible"!=_(i,"overflow")&&(r=i.getBoundingClientRect(),s=z>r.left&&F<r.right&&B>r.top-1&&H<r.bottom+1);return s},tt=function(){var t,n,s,a,u,c,l,h,f,d,p,g,m=r.elements;if((D=i.loadMode)&&Q<8&&(t=m.length)){for(n=0,X++;n<t;n++)if(m[n]&&!m[n]._lazyRace)if(!J||r.prematureUnveil&&r.prematureUnveil(m[n]))at(m[n]);else if((h=m[n].getAttribute("data-expand"))&&(c=1*h)||(c=W),d||(d=!i.expand||i.expand<1?o.clientHeight>500&&o.clientWidth>500?500:370:i.expand,r._defEx=d,p=d*i.expFactor,g=i.hFac,U=null,W<p&&Q<1&&X>2&&D>2&&!e.hidden?(W=p,X=0):W=D>1&&X>1&&Q<6?d:0),f!==c&&($=innerWidth+c*g,M=innerHeight+c,l=-1*c,f=c),s=m[n].getBoundingClientRect(),(B=s.bottom)>=l&&(H=s.top)<=M&&(z=s.right)>=l*g&&(F=s.left)<=$&&(B||z||F||H)&&(i.loadHidden||Z(m[n]))&&(R&&Q<3&&!h&&(D<3||X<4)||Y(m[n],c))){if(at(m[n]),u=!0,Q>9)break}else!u&&R&&!a&&Q<4&&X<4&&D>2&&(L[0]||i.preloadAfterLoad)&&(L[0]||!h&&(B||z||F||H||"auto"!=m[n].getAttribute(i.sizesAttr)))&&(a=L[0]||m[n]);a&&!u&&at(a)}},et=function(t){var e,r=0,o=i.throttleDelay,s=i.ricTimeout,a=function(){e=!1,r=n.now(),t()},c=l&&s>49?function(){l(a,{timeout:s}),s!==i.ricTimeout&&(s=i.ricTimeout)}:C((function(){u(a)}),!0);return function(t){var i;(t=!0===t)&&(s=33),e||(e=!0,(i=o-(n.now()-r))<0&&(i=0),t||i<9?c():u(c,i))}}(tt),nt=function(t){var e=t.target;e._lazyCache?delete e._lazyCache:(G(t),m(e,i.loadedClass),y(e,i.loadingClass),v(e,it),b(e,"lazyloaded"))},rt=C(nt),it=function(t){rt({target:t.target})},ot=function(t){var e,n=t.getAttribute(i.srcsetAttr);(e=i.customMedia[t.getAttribute("data-media")||t.getAttribute("media")])&&t.setAttribute("media",e),n&&t.setAttribute("srcset",n)},st=C((function(t,e,n,r,o){var s,a,c,l,f,d;(f=b(t,"lazybeforeunveil",e)).defaultPrevented||(r&&(n?m(t,i.autosizesClass):t.setAttribute("sizes",r)),a=t.getAttribute(i.srcsetAttr),s=t.getAttribute(i.srcAttr),o&&(l=(c=t.parentNode)&&h.test(c.nodeName||"")),d=e.firesLoad||"src"in t&&(a||s||l),f={target:t},m(t,i.loadingClass),d&&(clearTimeout(P),P=u(G,2500),v(t,it,!0)),l&&p.call(c.getElementsByTagName("source"),ot),a?t.setAttribute("srcset",a):s&&!l&&(K.test(t.nodeName)?function(t,e){var n=t.getAttribute("data-load-mode")||i.iframeLoadMode;0==n?t.contentWindow.location.replace(e):1==n&&(t.src=e)}(t,s):t.src=s),o&&(a||l)&&w(t,{src:s})),t._lazyRace&&delete t._lazyRace,y(t,i.lazyClass),S((function(){var e=t.complete&&t.naturalWidth>1;d&&!e||(e&&m(t,i.fastLoadedClass),nt(f),t._lazyCache=!0,u((function(){"_lazyCache"in t&&delete t._lazyCache}),9)),"lazy"==t.loading&&Q--}),!0)})),at=function(t){if(!t._lazyRace){var e,n=V.test(t.nodeName),r=n&&(t.getAttribute(i.sizesAttr)||t.getAttribute("sizes")),o="auto"==r;(!o&&R||!n||!t.getAttribute("src")&&!t.srcset||t.complete||g(t,i.errorClass)||!g(t,i.lazyClass))&&(e=b(t,"lazyunveilread").detail,o&&T.updateElem(t,!0,t.offsetWidth),t._lazyRace=!0,Q++,st(t,e,o,r,n))}},ut=A((function(){i.loadMode=3,et()})),ct=function(){3==i.loadMode&&(i.loadMode=2),ut()},lt=function(){R||(n.now()-q<999?u(lt,999):(R=!0,i.loadMode=3,et(),a("scroll",ct,!0)))},{_:function(){q=n.now(),r.elements=e.getElementsByClassName(i.lazyClass),L=e.getElementsByClassName(i.lazyClass+" "+i.preloadClass),a("scroll",et,!0),a("resize",et,!0),a("pageshow",(function(t){if(t.persisted){var n=e.querySelectorAll("."+i.loadingClass);n.length&&n.forEach&&c((function(){n.forEach((function(t){t.complete&&at(t)}))}))}})),t.MutationObserver?new MutationObserver(et).observe(o,{childList:!0,subtree:!0,attributes:!0}):(o.addEventListener("DOMNodeInserted",et,!0),o.addEventListener("DOMAttrModified",et,!0),setInterval(et,999)),a("hashchange",et,!0),["focus","mouseover","click","load","transitionend","animationend"].forEach((function(t){e.addEventListener(t,et,!0)})),/d$|^c/.test(e.readyState)?lt():(a("load",lt),e.addEventListener("DOMContentLoaded",et),u(lt,2e4)),r.elements.length?(tt(),S._lsFlush()):et()},checkElems:et,unveil:at,_aLSL:ct}),T=(N=C((function(t,e,n,r){var i,o,s;if(t._lazysizesWidth=r,r+="px",t.setAttribute("sizes",r),h.test(e.nodeName||""))for(o=0,s=(i=e.getElementsByTagName("source")).length;o<s;o++)i[o].setAttribute("sizes",r);n.detail.dataAttr||w(t,n.detail)})),j=function(t,e,n){var r,i=t.parentNode;i&&(n=x(t,i,n),(r=b(t,"lazybeforesizes",{width:n,dataAttr:!!e})).defaultPrevented||(n=r.detail.width)&&n!==t._lazysizesWidth&&N(t,i,r,n))},I=A((function(){var t,e=O.length;if(e)for(t=0;t<e;t++)j(O[t])})),{_:function(){O=e.getElementsByClassName(i.autosizesClass),a("resize",I)},checkElems:I,updateElem:j}),k=function(){!k.i&&e.getElementsByClassName&&(k.i=!0,T._(),E._())};var O,N,j,I;var L,R,P,D,q,$,M,H,F,z,B,U,V,K,J,W,Q,X,G,Z,Y,tt,et,nt,rt,it,ot,st,at,ut,ct,lt;var ht,ft,dt,pt,gt,mt,yt;return u((function(){i.init&&k()})),r={cfg:i,autoSizer:T,loader:E,init:k,uP:w,aC:m,rC:y,hC:g,fire:b,gW:x,rAF:S}}(e,e.document,Date);e.lazySizes=r,t.exports&&(t.exports=r)}("undefined"!=typeof window?window:{})},function(t,e,n){"use strict";n.r(e);n(3),n(4),n(6),n(7),n(9),n(11),n(12),n(14),n(15),n(16);n(2)},function(t,e,n){},function(t,e,n){},function(t,e,n){function r(t,e){t.setAttribute("class","copied bg-primary-color-dark f6 absolute top-0 right-0 lh-solid hover-bg-primary-color-dark bn white ph3 pv2"),t.setAttribute("aria-label",e)}new(n(5))(".copy",{target:function(t){return t.classList.contains("copy-toggle")?t.previousElementSibling:t.nextElementSibling}}).on("success",(function(t){r(t.trigger,"Copied!"),t.clearSelection()})).on("error",(function(t){r(t.trigger,function(t,e){var n="",r="cut"===e?"X":"C";n=isMac?"Press ⌘-"+r:"Press Ctrl-"+r;return n}(t.action))}))},function(t,e,n){
++!function(t){var e={};function n(r){if(e[r])return e[r].exports;var i=e[r]={i:r,l:!1,exports:{}};return t[r].call(i.exports,i,i.exports,n),i.l=!0,i.exports}n.m=t,n.c=e,n.d=function(t,e,r){n.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:r})},n.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},n.t=function(t,e){if(1&e&&(t=n(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var i in t)n.d(r,i,function(e){return t[e]}.bind(null,i));return r},n.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return n.d(e,"a",e),e},n.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},n.p="",n(n.s=1)}([function(t,e,n){!function(e,n){var r=function(t,e,n){"use strict";var r,i;if(function(){var e,n={lazyClass:"lazyload",loadedClass:"lazyloaded",loadingClass:"lazyloading",preloadClass:"lazypreload",errorClass:"lazyerror",autosizesClass:"lazyautosizes",fastLoadedClass:"ls-is-cached",iframeLoadMode:0,srcAttr:"data-src",srcsetAttr:"data-srcset",sizesAttr:"data-sizes",minSize:40,customMedia:{},init:!0,expFactor:1.5,hFac:.8,loadMode:2,loadHidden:!0,ricTimeout:0,throttleDelay:125};for(e in i=t.lazySizesConfig||t.lazysizesConfig||{},n)e in i||(i[e]=n[e])}(),!e||!e.getElementsByClassName)return{init:function(){},cfg:i,noSupport:!0};var o=e.documentElement,s=t.HTMLPictureElement,a=t.addEventListener.bind(t),u=t.setTimeout,c=t.requestAnimationFrame||u,l=t.requestIdleCallback,h=/^picture$/i,f=["load","error","lazyincluded","_lazyloaded"],d={},p=Array.prototype.forEach,g=function(t,e){return d[e]||(d[e]=new RegExp("(\\s|^)"+e+"(\\s|$)")),d[e].test(t.getAttribute("class")||"")&&d[e]},m=function(t,e){g(t,e)||t.setAttribute("class",(t.getAttribute("class")||"").trim()+" "+e)},y=function(t,e){var n;(n=g(t,e))&&t.setAttribute("class",(t.getAttribute("class")||"").replace(n," "))},v=function(t,e,n){var r=n?"addEventListener":"removeEventListener";n&&v(t,e),f.forEach((function(n){t[r](n,e)}))},b=function(t,n,i,o,s){var a=e.createEvent("Event");return i||(i={}),i.instance=r,a.initEvent(n,!o,!s),a.detail=i,t.dispatchEvent(a),a},w=function(e,n){var r;!s&&(r=t.picturefill||i.pf)?(n&&n.src&&!e.getAttribute("srcset")&&e.setAttribute("srcset",n.src),r({reevaluate:!0,elements:[e]})):n&&n.src&&(e.src=n.src)},_=function(t,e){return(getComputedStyle(t,null)||{})[e]},x=function(t,e,n){for(n=n||t.offsetWidth;n<i.minSize&&e&&!t._lazysizesWidth;)n=e.offsetWidth,e=e.parentNode;return n},S=(dt=[],pt=[],gt=dt,mt=function(){var t=gt;for(gt=dt.length?pt:dt,ht=!0,ft=!1;t.length;)t.shift()();ht=!1},yt=function(t,n){ht&&!n?t.apply(this,arguments):(gt.push(t),ft||(ft=!0,(e.hidden?u:c)(mt)))},yt._lsFlush=mt,yt),C=function(t,e){return e?function(){S(t)}:function(){var e=this,n=arguments;S((function(){t.apply(e,n)}))}},A=function(t){var e,r,i=function(){e=null,t()},o=function(){var t=n.now()-r;t<99?u(o,99-t):(l||i)(i)};return function(){r=n.now(),e||(e=u(o,99))}},E=(V=/^img$/i,K=/^iframe$/i,J="onscroll"in t&&!/(gle|ing)bot/.test(navigator.userAgent),W=0,Q=0,X=-1,G=function(t){Q--,(!t||Q<0||!t.target)&&(Q=0)},Z=function(t){return null==U&&(U="hidden"==_(e.body,"visibility")),U||!("hidden"==_(t.parentNode,"visibility")&&"hidden"==_(t,"visibility"))},Y=function(t,n){var r,i=t,s=Z(t);for(H-=n,B+=n,F-=n,z+=n;s&&(i=i.offsetParent)&&i!=e.body&&i!=o;)(s=(_(i,"opacity")||1)>0)&&"visible"!=_(i,"overflow")&&(r=i.getBoundingClientRect(),s=z>r.left&&F<r.right&&B>r.top-1&&H<r.bottom+1);return s},tt=function(){var t,n,s,a,u,c,l,h,f,d,p,g,m=r.elements;if((D=i.loadMode)&&Q<8&&(t=m.length)){for(n=0,X++;n<t;n++)if(m[n]&&!m[n]._lazyRace)if(!J||r.prematureUnveil&&r.prematureUnveil(m[n]))at(m[n]);else if((h=m[n].getAttribute("data-expand"))&&(c=1*h)||(c=W),d||(d=!i.expand||i.expand<1?o.clientHeight>500&&o.clientWidth>500?500:370:i.expand,r._defEx=d,p=d*i.expFactor,g=i.hFac,U=null,W<p&&Q<1&&X>2&&D>2&&!e.hidden?(W=p,X=0):W=D>1&&X>1&&Q<6?d:0),f!==c&&($=innerWidth+c*g,M=innerHeight+c,l=-1*c,f=c),s=m[n].getBoundingClientRect(),(B=s.bottom)>=l&&(H=s.top)<=M&&(z=s.right)>=l*g&&(F=s.left)<=$&&(B||z||F||H)&&(i.loadHidden||Z(m[n]))&&(R&&Q<3&&!h&&(D<3||X<4)||Y(m[n],c))){if(at(m[n]),u=!0,Q>9)break}else!u&&R&&!a&&Q<4&&X<4&&D>2&&(L[0]||i.preloadAfterLoad)&&(L[0]||!h&&(B||z||F||H||"auto"!=m[n].getAttribute(i.sizesAttr)))&&(a=L[0]||m[n]);a&&!u&&at(a)}},et=function(t){var e,r=0,o=i.throttleDelay,s=i.ricTimeout,a=function(){e=!1,r=n.now(),t()},c=l&&s>49?function(){l(a,{timeout:s}),s!==i.ricTimeout&&(s=i.ricTimeout)}:C((function(){u(a)}),!0);return function(t){var i;(t=!0===t)&&(s=33),e||(e=!0,(i=o-(n.now()-r))<0&&(i=0),t||i<9?c():u(c,i))}}(tt),nt=function(t){var e=t.target;e._lazyCache?delete e._lazyCache:(G(t),m(e,i.loadedClass),y(e,i.loadingClass),v(e,it),b(e,"lazyloaded"))},rt=C(nt),it=function(t){rt({target:t.target})},ot=function(t){var e,n=t.getAttribute(i.srcsetAttr);(e=i.customMedia[t.getAttribute("data-media")||t.getAttribute("media")])&&t.setAttribute("media",e),n&&t.setAttribute("srcset",n)},st=C((function(t,e,n,r,o){var s,a,c,l,f,d;(f=b(t,"lazybeforeunveil",e)).defaultPrevented||(r&&(n?m(t,i.autosizesClass):t.setAttribute("sizes",r)),a=t.getAttribute(i.srcsetAttr),s=t.getAttribute(i.srcAttr),o&&(l=(c=t.parentNode)&&h.test(c.nodeName||"")),d=e.firesLoad||"src"in t&&(a||s||l),f={target:t},m(t,i.loadingClass),d&&(clearTimeout(P),P=u(G,2500),v(t,it,!0)),l&&p.call(c.getElementsByTagName("source"),ot),a?t.setAttribute("srcset",a):s&&!l&&(K.test(t.nodeName)?function(t,e){var n=t.getAttribute("data-load-mode")||i.iframeLoadMode;0==n?t.contentWindow.location.replace(e):1==n&&(t.src=e)}(t,s):t.src=s),o&&(a||l)&&w(t,{src:s})),t._lazyRace&&delete t._lazyRace,y(t,i.lazyClass),S((function(){var e=t.complete&&t.naturalWidth>1;d&&!e||(e&&m(t,i.fastLoadedClass),nt(f),t._lazyCache=!0,u((function(){"_lazyCache"in t&&delete t._lazyCache}),9)),"lazy"==t.loading&&Q--}),!0)})),at=function(t){if(!t._lazyRace){var e,n=V.test(t.nodeName),r=n&&(t.getAttribute(i.sizesAttr)||t.getAttribute("sizes")),o="auto"==r;(!o&&R||!n||!t.getAttribute("src")&&!t.srcset||t.complete||g(t,i.errorClass)||!g(t,i.lazyClass))&&(e=b(t,"lazyunveilread").detail,o&&T.updateElem(t,!0,t.offsetWidth),t._lazyRace=!0,Q++,st(t,e,o,r,n))}},ut=A((function(){i.loadMode=3,et()})),ct=function(){3==i.loadMode&&(i.loadMode=2),ut()},lt=function(){R||(n.now()-q<999?u(lt,999):(R=!0,i.loadMode=3,et(),a("scroll",ct,!0)))},{_:function(){q=n.now(),r.elements=e.getElementsByClassName(i.lazyClass),L=e.getElementsByClassName(i.lazyClass+" "+i.preloadClass),a("scroll",et,!0),a("resize",et,!0),a("pageshow",(function(t){if(t.persisted){var n=e.querySelectorAll("."+i.loadingClass);n.length&&n.forEach&&c((function(){n.forEach((function(t){t.complete&&at(t)}))}))}})),t.MutationObserver?new MutationObserver(et).observe(o,{childList:!0,subtree:!0,attributes:!0}):(o.addEventListener("DOMNodeInserted",et,!0),o.addEventListener("DOMAttrModified",et,!0),setInterval(et,999)),a("hashchange",et,!0),["focus","mouseover","click","load","transitionend","animationend"].forEach((function(t){e.addEventListener(t,et,!0)})),/d$|^c/.test(e.readyState)?lt():(a("load",lt),e.addEventListener("DOMContentLoaded",et),u(lt,2e4)),r.elements.length?(tt(),S._lsFlush()):et()},checkElems:et,unveil:at,_aLSL:ct}),T=(N=C((function(t,e,n,r){var i,o,s;if(t._lazysizesWidth=r,r+="px",t.setAttribute("sizes",r),h.test(e.nodeName||""))for(o=0,s=(i=e.getElementsByTagName("source")).length;o<s;o++)i[o].setAttribute("sizes",r);n.detail.dataAttr||w(t,n.detail)})),j=function(t,e,n){var r,i=t.parentNode;i&&(n=x(t,i,n),(r=b(t,"lazybeforesizes",{width:n,dataAttr:!!e})).defaultPrevented||(n=r.detail.width)&&n!==t._lazysizesWidth&&N(t,i,r,n))},I=A((function(){var t,e=O.length;if(e)for(t=0;t<e;t++)j(O[t])})),{_:function(){O=e.getElementsByClassName(i.autosizesClass),a("resize",I)},checkElems:I,updateElem:j}),k=function(){!k.i&&e.getElementsByClassName&&(k.i=!0,T._(),E._())};var O,N,j,I;var L,R,P,D,q,$,M,H,F,z,B,U,V,K,J,W,Q,X,G,Z,Y,tt,et,nt,rt,it,ot,st,at,ut,ct,lt;var ht,ft,dt,pt,gt,mt,yt;return u((function(){i.init&&k()})),r={cfg:i,autoSizer:T,loader:E,init:k,uP:w,aC:m,rC:y,hC:g,fire:b,gW:x,rAF:S}}(e,e.document,Date);e.lazySizes=r,t.exports&&(t.exports=r)}("undefined"!=typeof window?window:{})},function(t,e,n){"use strict";n.r(e);n(3),n(4),n(6),n(8),n(10),n(11),n(13),n(14),n(15);n(2)},function(t,e,n){},function(t,e,n){},function(t,e,n){function r(t,e){t.setAttribute("class","copied bg-primary-color-dark f6 absolute top-0 right-0 lh-solid hover-bg-primary-color-dark bn white ph3 pv2"),t.setAttribute("aria-label",e)}new(n(5))(".copy",{target:function(t){return t.classList.contains("copy-toggle")?t.previousElementSibling:t.nextElementSibling}}).on("success",(function(t){r(t.trigger,"Copied!"),t.clearSelection()})).on("error",(function(t){r(t.trigger,function(t,e){var n="",r="cut"===e?"X":"C";n=isMac?"Press ⌘-"+r:"Press Ctrl-"+r;return n}(t.action))}))},function(t,e,n){
 +/*!
 + * clipboard.js v2.0.4
 + * https://zenorocha.github.io/clipboard.js
 + * 
 + * Licensed MIT © Zeno Rocha
 + */
- var r;r=function(){return function(t){var e={};function n(r){if(e[r])return e[r].exports;var i=e[r]={i:r,l:!1,exports:{}};return t[r].call(i.exports,i,i.exports,n),i.l=!0,i.exports}return n.m=t,n.c=e,n.d=function(t,e,r){n.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:r})},n.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},n.t=function(t,e){if(1&e&&(t=n(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var i in t)n.d(r,i,function(e){return t[e]}.bind(null,i));return r},n.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return n.d(e,"a",e),e},n.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},n.p="",n(n.s=0)}([function(t,e,n){"use strict";var r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},i=function(){function t(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}return function(e,n,r){return n&&t(e.prototype,n),r&&t(e,r),e}}(),o=u(n(1)),s=u(n(3)),a=u(n(4));function u(t){return t&&t.__esModule?t:{default:t}}var c=function(t){function e(t,n){!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,e);var r=function(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}(this,(e.__proto__||Object.getPrototypeOf(e)).call(this));return r.resolveOptions(n),r.listenClick(t),r}return function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}(e,t),i(e,[{key:"resolveOptions",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this.action="function"==typeof t.action?t.action:this.defaultAction,this.target="function"==typeof t.target?t.target:this.defaultTarget,this.text="function"==typeof t.text?t.text:this.defaultText,this.container="object"===r(t.container)?t.container:document.body}},{key:"listenClick",value:function(t){var e=this;this.listener=(0,a.default)(t,"click",(function(t){return e.onClick(t)}))}},{key:"onClick",value:function(t){var e=t.delegateTarget||t.currentTarget;this.clipboardAction&&(this.clipboardAction=null),this.clipboardAction=new o.default({action:this.action(e),target:this.target(e),text:this.text(e),container:this.container,trigger:e,emitter:this})}},{key:"defaultAction",value:function(t){return l("action",t)}},{key:"defaultTarget",value:function(t){var e=l("target",t);if(e)return document.querySelector(e)}},{key:"defaultText",value:function(t){return l("text",t)}},{key:"destroy",value:function(){this.listener.destroy(),this.clipboardAction&&(this.clipboardAction.destroy(),this.clipboardAction=null)}}],[{key:"isSupported",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:["copy","cut"],e="string"==typeof t?[t]:t,n=!!document.queryCommandSupported;return e.forEach((function(t){n=n&&!!document.queryCommandSupported(t)})),n}}]),e}(s.default);function l(t,e){var n="data-clipboard-"+t;if(e.hasAttribute(n))return e.getAttribute(n)}t.exports=c},function(t,e,n){"use strict";var r,i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},o=function(){function t(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}return function(e,n,r){return n&&t(e.prototype,n),r&&t(e,r),e}}(),s=n(2),a=(r=s)&&r.__esModule?r:{default:r},u=function(){function t(e){!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),this.resolveOptions(e),this.initSelection()}return o(t,[{key:"resolveOptions",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this.action=t.action,this.container=t.container,this.emitter=t.emitter,this.target=t.target,this.text=t.text,this.trigger=t.trigger,this.selectedText=""}},{key:"initSelection",value:function(){this.text?this.selectFake():this.target&&this.selectTarget()}},{key:"selectFake",value:function(){var t=this,e="rtl"==document.documentElement.getAttribute("dir");this.removeFake(),this.fakeHandlerCallback=function(){return t.removeFake()},this.fakeHandler=this.container.addEventListener("click",this.fakeHandlerCallback)||!0,this.fakeElem=document.createElement("textarea"),this.fakeElem.style.fontSize="12pt",this.fakeElem.style.border="0",this.fakeElem.style.padding="0",this.fakeElem.style.margin="0",this.fakeElem.style.position="absolute",this.fakeElem.style[e?"right":"left"]="-9999px";var n=window.pageYOffset||document.documentElement.scrollTop;this.fakeElem.style.top=n+"px",this.fakeElem.setAttribute("readonly",""),this.fakeElem.value=this.text,this.container.appendChild(this.fakeElem),this.selectedText=(0,a.default)(this.fakeElem),this.copyText()}},{key:"removeFake",value:function(){this.fakeHandler&&(this.container.removeEventListener("click",this.fakeHandlerCallback),this.fakeHandler=null,this.fakeHandlerCallback=null),this.fakeElem&&(this.container.removeChild(this.fakeElem),this.fakeElem=null)}},{key:"selectTarget",value:function(){this.selectedText=(0,a.default)(this.target),this.copyText()}},{key:"copyText",value:function(){var t=void 0;try{t=document.execCommand(this.action)}catch(e){t=!1}this.handleResult(t)}},{key:"handleResult",value:function(t){this.emitter.emit(t?"success":"error",{action:this.action,text:this.selectedText,trigger:this.trigger,clearSelection:this.clearSelection.bind(this)})}},{key:"clearSelection",value:function(){this.trigger&&this.trigger.focus(),window.getSelection().removeAllRanges()}},{key:"destroy",value:function(){this.removeFake()}},{key:"action",set:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"copy";if(this._action=t,"copy"!==this._action&&"cut"!==this._action)throw new Error('Invalid "action" value, use either "copy" or "cut"')},get:function(){return this._action}},{key:"target",set:function(t){if(void 0!==t){if(!t||"object"!==(void 0===t?"undefined":i(t))||1!==t.nodeType)throw new Error('Invalid "target" value, use a valid Element');if("copy"===this.action&&t.hasAttribute("disabled"))throw new Error('Invalid "target" attribute. Please use "readonly" instead of "disabled" attribute');if("cut"===this.action&&(t.hasAttribute("readonly")||t.hasAttribute("disabled")))throw new Error('Invalid "target" attribute. You can\'t cut text from elements with "readonly" or "disabled" attributes');this._target=t}},get:function(){return this._target}}]),t}();t.exports=u},function(t,e){t.exports=function(t){var e;if("SELECT"===t.nodeName)t.focus(),e=t.value;else if("INPUT"===t.nodeName||"TEXTAREA"===t.nodeName){var n=t.hasAttribute("readonly");n||t.setAttribute("readonly",""),t.select(),t.setSelectionRange(0,t.value.length),n||t.removeAttribute("readonly"),e=t.value}else{t.hasAttribute("contenteditable")&&t.focus();var r=window.getSelection(),i=document.createRange();i.selectNodeContents(t),r.removeAllRanges(),r.addRange(i),e=r.toString()}return e}},function(t,e){function n(){}n.prototype={on:function(t,e,n){var r=this.e||(this.e={});return(r[t]||(r[t]=[])).push({fn:e,ctx:n}),this},once:function(t,e,n){var r=this;function i(){r.off(t,i),e.apply(n,arguments)}return i._=e,this.on(t,i,n)},emit:function(t){for(var e=[].slice.call(arguments,1),n=((this.e||(this.e={}))[t]||[]).slice(),r=0,i=n.length;r<i;r++)n[r].fn.apply(n[r].ctx,e);return this},off:function(t,e){var n=this.e||(this.e={}),r=n[t],i=[];if(r&&e)for(var o=0,s=r.length;o<s;o++)r[o].fn!==e&&r[o].fn._!==e&&i.push(r[o]);return i.length?n[t]=i:delete n[t],this}},t.exports=n},function(t,e,n){var r=n(5),i=n(6);t.exports=function(t,e,n){if(!t&&!e&&!n)throw new Error("Missing required arguments");if(!r.string(e))throw new TypeError("Second argument must be a String");if(!r.fn(n))throw new TypeError("Third argument must be a Function");if(r.node(t))return function(t,e,n){return t.addEventListener(e,n),{destroy:function(){t.removeEventListener(e,n)}}}(t,e,n);if(r.nodeList(t))return function(t,e,n){return Array.prototype.forEach.call(t,(function(t){t.addEventListener(e,n)})),{destroy:function(){Array.prototype.forEach.call(t,(function(t){t.removeEventListener(e,n)}))}}}(t,e,n);if(r.string(t))return function(t,e,n){return i(document.body,t,e,n)}(t,e,n);throw new TypeError("First argument must be a String, HTMLElement, HTMLCollection, or NodeList")}},function(t,e){e.node=function(t){return void 0!==t&&t instanceof HTMLElement&&1===t.nodeType},e.nodeList=function(t){var n=Object.prototype.toString.call(t);return void 0!==t&&("[object NodeList]"===n||"[object HTMLCollection]"===n)&&"length"in t&&(0===t.length||e.node(t[0]))},e.string=function(t){return"string"==typeof t||t instanceof String},e.fn=function(t){return"[object Function]"===Object.prototype.toString.call(t)}},function(t,e,n){var r=n(7);function i(t,e,n,r,i){var s=o.apply(this,arguments);return t.addEventListener(n,s,i),{destroy:function(){t.removeEventListener(n,s,i)}}}function o(t,e,n,i){return function(n){n.delegateTarget=r(n.target,e),n.delegateTarget&&i.call(t,n)}}t.exports=function(t,e,n,r,o){return"function"==typeof t.addEventListener?i.apply(null,arguments):"function"==typeof n?i.bind(null,document).apply(null,arguments):("string"==typeof t&&(t=document.querySelectorAll(t)),Array.prototype.map.call(t,(function(t){return i(t,e,n,r,o)})))}},function(t,e){if("undefined"!=typeof Element&&!Element.prototype.matches){var n=Element.prototype;n.matches=n.matchesSelector||n.mozMatchesSelector||n.msMatchesSelector||n.oMatchesSelector||n.webkitMatchesSelector}t.exports=function(t,e){for(;t&&9!==t.nodeType;){if("function"==typeof t.matches&&t.matches(e))return t;t=t.parentNode}}}])},t.exports=r()},function(t,e){let n=document.getElementById("prose");if(n){let t=n.getElementsByTagName("code");for(let[e,n]of Object.entries(t)){n.scrollWidth-n.clientWidth>0&&n.parentNode.classList.add("expand")}}},function(t,e,n){n(8)({appId:"D1BPLZHGYQ",apiKey:"6df94e1e5d55d258c56f60d974d10314",indexName:"hugodocs",inputSelector:"#search-input",debug:!0})},function(t,e,n){
++var r;r=function(){return function(t){var e={};function n(r){if(e[r])return e[r].exports;var i=e[r]={i:r,l:!1,exports:{}};return t[r].call(i.exports,i,i.exports,n),i.l=!0,i.exports}return n.m=t,n.c=e,n.d=function(t,e,r){n.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:r})},n.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},n.t=function(t,e){if(1&e&&(t=n(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var i in t)n.d(r,i,function(e){return t[e]}.bind(null,i));return r},n.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return n.d(e,"a",e),e},n.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},n.p="",n(n.s=0)}([function(t,e,n){"use strict";var r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},i=function(){function t(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}return function(e,n,r){return n&&t(e.prototype,n),r&&t(e,r),e}}(),o=u(n(1)),s=u(n(3)),a=u(n(4));function u(t){return t&&t.__esModule?t:{default:t}}var c=function(t){function e(t,n){!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,e);var r=function(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}(this,(e.__proto__||Object.getPrototypeOf(e)).call(this));return r.resolveOptions(n),r.listenClick(t),r}return function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}(e,t),i(e,[{key:"resolveOptions",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this.action="function"==typeof t.action?t.action:this.defaultAction,this.target="function"==typeof t.target?t.target:this.defaultTarget,this.text="function"==typeof t.text?t.text:this.defaultText,this.container="object"===r(t.container)?t.container:document.body}},{key:"listenClick",value:function(t){var e=this;this.listener=(0,a.default)(t,"click",(function(t){return e.onClick(t)}))}},{key:"onClick",value:function(t){var e=t.delegateTarget||t.currentTarget;this.clipboardAction&&(this.clipboardAction=null),this.clipboardAction=new o.default({action:this.action(e),target:this.target(e),text:this.text(e),container:this.container,trigger:e,emitter:this})}},{key:"defaultAction",value:function(t){return l("action",t)}},{key:"defaultTarget",value:function(t){var e=l("target",t);if(e)return document.querySelector(e)}},{key:"defaultText",value:function(t){return l("text",t)}},{key:"destroy",value:function(){this.listener.destroy(),this.clipboardAction&&(this.clipboardAction.destroy(),this.clipboardAction=null)}}],[{key:"isSupported",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:["copy","cut"],e="string"==typeof t?[t]:t,n=!!document.queryCommandSupported;return e.forEach((function(t){n=n&&!!document.queryCommandSupported(t)})),n}}]),e}(s.default);function l(t,e){var n="data-clipboard-"+t;if(e.hasAttribute(n))return e.getAttribute(n)}t.exports=c},function(t,e,n){"use strict";var r,i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},o=function(){function t(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}return function(e,n,r){return n&&t(e.prototype,n),r&&t(e,r),e}}(),s=n(2),a=(r=s)&&r.__esModule?r:{default:r},u=function(){function t(e){!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),this.resolveOptions(e),this.initSelection()}return o(t,[{key:"resolveOptions",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this.action=t.action,this.container=t.container,this.emitter=t.emitter,this.target=t.target,this.text=t.text,this.trigger=t.trigger,this.selectedText=""}},{key:"initSelection",value:function(){this.text?this.selectFake():this.target&&this.selectTarget()}},{key:"selectFake",value:function(){var t=this,e="rtl"==document.documentElement.getAttribute("dir");this.removeFake(),this.fakeHandlerCallback=function(){return t.removeFake()},this.fakeHandler=this.container.addEventListener("click",this.fakeHandlerCallback)||!0,this.fakeElem=document.createElement("textarea"),this.fakeElem.style.fontSize="12pt",this.fakeElem.style.border="0",this.fakeElem.style.padding="0",this.fakeElem.style.margin="0",this.fakeElem.style.position="absolute",this.fakeElem.style[e?"right":"left"]="-9999px";var n=window.pageYOffset||document.documentElement.scrollTop;this.fakeElem.style.top=n+"px",this.fakeElem.setAttribute("readonly",""),this.fakeElem.value=this.text,this.container.appendChild(this.fakeElem),this.selectedText=(0,a.default)(this.fakeElem),this.copyText()}},{key:"removeFake",value:function(){this.fakeHandler&&(this.container.removeEventListener("click",this.fakeHandlerCallback),this.fakeHandler=null,this.fakeHandlerCallback=null),this.fakeElem&&(this.container.removeChild(this.fakeElem),this.fakeElem=null)}},{key:"selectTarget",value:function(){this.selectedText=(0,a.default)(this.target),this.copyText()}},{key:"copyText",value:function(){var t=void 0;try{t=document.execCommand(this.action)}catch(e){t=!1}this.handleResult(t)}},{key:"handleResult",value:function(t){this.emitter.emit(t?"success":"error",{action:this.action,text:this.selectedText,trigger:this.trigger,clearSelection:this.clearSelection.bind(this)})}},{key:"clearSelection",value:function(){this.trigger&&this.trigger.focus(),window.getSelection().removeAllRanges()}},{key:"destroy",value:function(){this.removeFake()}},{key:"action",set:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"copy";if(this._action=t,"copy"!==this._action&&"cut"!==this._action)throw new Error('Invalid "action" value, use either "copy" or "cut"')},get:function(){return this._action}},{key:"target",set:function(t){if(void 0!==t){if(!t||"object"!==(void 0===t?"undefined":i(t))||1!==t.nodeType)throw new Error('Invalid "target" value, use a valid Element');if("copy"===this.action&&t.hasAttribute("disabled"))throw new Error('Invalid "target" attribute. Please use "readonly" instead of "disabled" attribute');if("cut"===this.action&&(t.hasAttribute("readonly")||t.hasAttribute("disabled")))throw new Error('Invalid "target" attribute. You can\'t cut text from elements with "readonly" or "disabled" attributes');this._target=t}},get:function(){return this._target}}]),t}();t.exports=u},function(t,e){t.exports=function(t){var e;if("SELECT"===t.nodeName)t.focus(),e=t.value;else if("INPUT"===t.nodeName||"TEXTAREA"===t.nodeName){var n=t.hasAttribute("readonly");n||t.setAttribute("readonly",""),t.select(),t.setSelectionRange(0,t.value.length),n||t.removeAttribute("readonly"),e=t.value}else{t.hasAttribute("contenteditable")&&t.focus();var r=window.getSelection(),i=document.createRange();i.selectNodeContents(t),r.removeAllRanges(),r.addRange(i),e=r.toString()}return e}},function(t,e){function n(){}n.prototype={on:function(t,e,n){var r=this.e||(this.e={});return(r[t]||(r[t]=[])).push({fn:e,ctx:n}),this},once:function(t,e,n){var r=this;function i(){r.off(t,i),e.apply(n,arguments)}return i._=e,this.on(t,i,n)},emit:function(t){for(var e=[].slice.call(arguments,1),n=((this.e||(this.e={}))[t]||[]).slice(),r=0,i=n.length;r<i;r++)n[r].fn.apply(n[r].ctx,e);return this},off:function(t,e){var n=this.e||(this.e={}),r=n[t],i=[];if(r&&e)for(var o=0,s=r.length;o<s;o++)r[o].fn!==e&&r[o].fn._!==e&&i.push(r[o]);return i.length?n[t]=i:delete n[t],this}},t.exports=n},function(t,e,n){var r=n(5),i=n(6);t.exports=function(t,e,n){if(!t&&!e&&!n)throw new Error("Missing required arguments");if(!r.string(e))throw new TypeError("Second argument must be a String");if(!r.fn(n))throw new TypeError("Third argument must be a Function");if(r.node(t))return function(t,e,n){return t.addEventListener(e,n),{destroy:function(){t.removeEventListener(e,n)}}}(t,e,n);if(r.nodeList(t))return function(t,e,n){return Array.prototype.forEach.call(t,(function(t){t.addEventListener(e,n)})),{destroy:function(){Array.prototype.forEach.call(t,(function(t){t.removeEventListener(e,n)}))}}}(t,e,n);if(r.string(t))return function(t,e,n){return i(document.body,t,e,n)}(t,e,n);throw new TypeError("First argument must be a String, HTMLElement, HTMLCollection, or NodeList")}},function(t,e){e.node=function(t){return void 0!==t&&t instanceof HTMLElement&&1===t.nodeType},e.nodeList=function(t){var n=Object.prototype.toString.call(t);return void 0!==t&&("[object NodeList]"===n||"[object HTMLCollection]"===n)&&"length"in t&&(0===t.length||e.node(t[0]))},e.string=function(t){return"string"==typeof t||t instanceof String},e.fn=function(t){return"[object Function]"===Object.prototype.toString.call(t)}},function(t,e,n){var r=n(7);function i(t,e,n,r,i){var s=o.apply(this,arguments);return t.addEventListener(n,s,i),{destroy:function(){t.removeEventListener(n,s,i)}}}function o(t,e,n,i){return function(n){n.delegateTarget=r(n.target,e),n.delegateTarget&&i.call(t,n)}}t.exports=function(t,e,n,r,o){return"function"==typeof t.addEventListener?i.apply(null,arguments):"function"==typeof n?i.bind(null,document).apply(null,arguments):("string"==typeof t&&(t=document.querySelectorAll(t)),Array.prototype.map.call(t,(function(t){return i(t,e,n,r,o)})))}},function(t,e){if("undefined"!=typeof Element&&!Element.prototype.matches){var n=Element.prototype;n.matches=n.matchesSelector||n.mozMatchesSelector||n.msMatchesSelector||n.oMatchesSelector||n.webkitMatchesSelector}t.exports=function(t,e){for(;t&&9!==t.nodeType;){if("function"==typeof t.matches&&t.matches(e))return t;t=t.parentNode}}}])},t.exports=r()},function(t,e,n){n(7)({appId:"D1BPLZHGYQ",apiKey:"6df94e1e5d55d258c56f60d974d10314",indexName:"hugodocs",inputSelector:"#search-input",debug:!0})},function(t,e,n){
 +/*! docsearch 2.6.1 | © Algolia | github.com/algolia/docsearch */
 +var r;"undefined"!=typeof self&&self,r=function(){return function(t){var e={};function n(r){if(e[r])return e[r].exports;var i=e[r]={i:r,l:!1,exports:{}};return t[r].call(i.exports,i,i.exports,n),i.l=!0,i.exports}return n.m=t,n.c=e,n.d=function(t,e,r){n.o(t,e)||Object.defineProperty(t,e,{configurable:!1,enumerable:!0,get:r})},n.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return n.d(e,"a",e),e},n.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},n.p="",n(n.s=22)}([function(t,e,n){"use strict";var r,i=n(1);function o(t){return t.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&")}t.exports={isArray:null,isFunction:null,isObject:null,bind:null,each:null,map:null,mixin:null,isMsie:function(t){if(void 0===t&&(t=navigator.userAgent),/(msie|trident)/i.test(t)){var e=t.match(/(msie |rv:)(\d+(.\d+)?)/i);if(e)return e[2]}return!1},escapeRegExChars:function(t){return t.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&")},isNumber:function(t){return"number"==typeof t},toStr:function(t){return null==t?"":t+""},cloneDeep:function(t){var e=this.mixin({},t),n=this;return this.each(e,(function(t,r){t&&(n.isArray(t)?e[r]=[].concat(t):n.isObject(t)&&(e[r]=n.cloneDeep(t)))})),e},error:function(t){throw new Error(t)},every:function(t,e){var n=!0;return t?(this.each(t,(function(r,i){if(!(n=e.call(null,r,i,t)))return!1})),!!n):n},any:function(t,e){var n=!1;return t?(this.each(t,(function(r,i){if(e.call(null,r,i,t))return n=!0,!1})),n):n},getUniqueId:(r=0,function(){return r++}),templatify:function(t){if(this.isFunction(t))return t;var e=i.element(t);return"SCRIPT"===e.prop("tagName")?function(){return e.text()}:function(){return String(t)}},defer:function(t){setTimeout(t,0)},noop:function(){},formatPrefix:function(t,e){return e?"":t+"-"},className:function(t,e,n){return(n?"":".")+t+e},escapeHighlightedString:function(t,e,n){e=e||"<em>";var r=document.createElement("div");r.appendChild(document.createTextNode(e)),n=n||"</em>";var i=document.createElement("div");i.appendChild(document.createTextNode(n));var s=document.createElement("div");return s.appendChild(document.createTextNode(t)),s.innerHTML.replace(RegExp(o(r.innerHTML),"g"),e).replace(RegExp(o(i.innerHTML),"g"),n)}}},function(t,e,n){"use strict";t.exports={element:null}},function(t,e){var n=Object.prototype.hasOwnProperty,r=Object.prototype.toString;t.exports=function(t,e,i){if("[object Function]"!==r.call(e))throw new TypeError("iterator must be a function");var o=t.length;if(o===+o)for(var s=0;s<o;s++)e.call(i,t[s],s,t);else for(var a in t)n.call(t,a)&&e.call(i,t[a],a,t)}},function(t,e){t.exports=function(t){return JSON.parse(JSON.stringify(t))}},function(t,e){var n;n=function(){return this}();try{n=n||Function("return this")()||(0,eval)("this")}catch(t){"object"==typeof window&&(n=window)}t.exports=n},function(t,e,n){"use strict";var r=n(12);function i(t,e){var r=n(2),i=this;"function"==typeof Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):i.stack=(new Error).stack||"Cannot get a stacktrace, browser is too old",this.name="AlgoliaSearchError",this.message=t||"Unknown error",e&&r(e,(function(t,e){i[e]=t}))}function o(t,e){function n(){var n=Array.prototype.slice.call(arguments,0);"string"!=typeof n[0]&&n.unshift(e),i.apply(this,n),this.name="AlgoliaSearch"+t+"Error"}return r(n,i),n}r(i,Error),t.exports={AlgoliaSearchError:i,UnparsableJSON:o("UnparsableJSON","Could not parse the incoming response as JSON, see err.more for details"),RequestTimeout:o("RequestTimeout","Request timedout before getting a response"),Network:o("Network","Network issue, see err.more for details"),JSONPScriptFail:o("JSONPScriptFail","<script> was loaded but did not call our provided callback"),JSONPScriptError:o("JSONPScriptError","<script> unable to load due to an `error` event on it"),Unknown:o("Unknown","Unknown error occured")}},function(t,e){var n={}.toString;t.exports=Array.isArray||function(t){return"[object Array]"==n.call(t)}},function(t,e,n){var r=n(2);t.exports=function(t,e){var n=[];return r(t,(function(r,i){n.push(e(r,i,t))})),n}},function(t,e,n){(function(r){function i(){var t;try{t=e.storage.debug}catch(t){}return!t&&void 0!==r&&"env"in r&&(t=Object({NODE_ENV:"production"}).DEBUG),t}(e=t.exports=n(39)).log=function(){return"object"==typeof console&&console.log&&Function.prototype.apply.call(console.log,console,arguments)},e.formatArgs=function(t){var n=this.useColors;if(t[0]=(n?"%c":"")+this.namespace+(n?" %c":" ")+t[0]+(n?"%c ":" ")+"+"+e.humanize(this.diff),n){var r="color: "+this.color;t.splice(1,0,r,"color: inherit");var i=0,o=0;t[0].replace(/%[a-zA-Z%]/g,(function(t){"%%"!==t&&(i++,"%c"===t&&(o=i))})),t.splice(o,0,r)}},e.save=function(t){try{null==t?e.storage.removeItem("debug"):e.storage.debug=t}catch(t){}},e.load=i,e.useColors=function(){return!("undefined"==typeof window||!window.process||"renderer"!==window.process.type)||("undefined"!=typeof document&&document.documentElement&&document.documentElement.style&&document.documentElement.style.WebkitAppearance||"undefined"!=typeof window&&window.console&&(window.console.firebug||window.console.exception&&window.console.table)||"undefined"!=typeof navigator&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/)&&parseInt(RegExp.$1,10)>=31||"undefined"!=typeof navigator&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/))},e.storage="undefined"!=typeof chrome&&void 0!==chrome.storage?chrome.storage.local:function(){try{return window.localStorage}catch(t){}}(),e.colors=["lightseagreen","forestgreen","goldenrod","dodgerblue","darkorchid","crimson"],e.formatters.j=function(t){try{return JSON.stringify(t)}catch(t){return"[UnexpectedJSONParseError]: "+t.message}},e.enable(i())}).call(e,n(9))},function(t,e){var n,r,i=t.exports={};function o(){throw new Error("setTimeout has not been defined")}function s(){throw new Error("clearTimeout has not been defined")}function a(t){if(n===setTimeout)return setTimeout(t,0);if((n===o||!n)&&setTimeout)return n=setTimeout,setTimeout(t,0);try{return n(t,0)}catch(e){try{return n.call(null,t,0)}catch(e){return n.call(this,t,0)}}}!function(){try{n="function"==typeof setTimeout?setTimeout:o}catch(t){n=o}try{r="function"==typeof clearTimeout?clearTimeout:s}catch(t){r=s}}();var u,c=[],l=!1,h=-1;function f(){l&&u&&(l=!1,u.length?c=u.concat(c):h=-1,c.length&&d())}function d(){if(!l){var t=a(f);l=!0;for(var e=c.length;e;){for(u=c,c=[];++h<e;)u&&u[h].run();h=-1,e=c.length}u=null,l=!1,function(t){if(r===clearTimeout)return clearTimeout(t);if((r===s||!r)&&clearTimeout)return r=clearTimeout,clearTimeout(t);try{r(t)}catch(e){try{return r.call(null,t)}catch(e){return r.call(this,t)}}}(t)}}function p(t,e){this.fun=t,this.array=e}function g(){}i.nextTick=function(t){var e=new Array(arguments.length-1);if(arguments.length>1)for(var n=1;n<arguments.length;n++)e[n-1]=arguments[n];c.push(new p(t,e)),1!==c.length||l||a(d)},p.prototype.run=function(){this.fun.apply(null,this.array)},i.title="browser",i.browser=!0,i.env={},i.argv=[],i.version="",i.versions={},i.on=g,i.addListener=g,i.once=g,i.off=g,i.removeListener=g,i.removeAllListeners=g,i.emit=g,i.prependListener=g,i.prependOnceListener=g,i.listeners=function(t){return[]},i.binding=function(t){throw new Error("process.binding is not supported")},i.cwd=function(){return"/"},i.chdir=function(t){throw new Error("process.chdir is not supported")},i.umask=function(){return 0}},function(t,e,n){"use strict";var r=n(53),i=/\s+/;function o(t,e,n,r){var o;if(!n)return this;for(e=e.split(i),n=r?function(t,e){return t.bind?t.bind(e):function(){t.apply(e,[].slice.call(arguments,0))}}(n,r):n,this._callbacks=this._callbacks||{};o=e.shift();)this._callbacks[o]=this._callbacks[o]||{sync:[],async:[]},this._callbacks[o][t].push(n);return this}function s(t,e,n){return function(){for(var r,i=0,o=t.length;!r&&i<o;i+=1)r=!1===t[i].apply(e,n);return!r}}t.exports={onSync:function(t,e,n){return o.call(this,"sync",t,e,n)},onAsync:function(t,e,n){return o.call(this,"async",t,e,n)},off:function(t){var e;if(!this._callbacks)return this;for(t=t.split(i);e=t.shift();)delete this._callbacks[e];return this},trigger:function(t){var e,n,o,a,u;if(!this._callbacks)return this;for(t=t.split(i),o=[].slice.call(arguments,1);(e=t.shift())&&(n=this._callbacks[e]);)a=s(n.sync,this,[e].concat(o)),u=s(n.async,this,[e].concat(o)),a()&&r(u);return this}}},function(t,e,n){"use strict";var r=n(0),i={wrapper:{position:"relative",display:"inline-block"},hint:{position:"absolute",top:"0",left:"0",borderColor:"transparent",boxShadow:"none",opacity:"1"},input:{position:"relative",verticalAlign:"top",backgroundColor:"transparent"},inputWithNoHint:{position:"relative",verticalAlign:"top"},dropdown:{position:"absolute",top:"100%",left:"0",zIndex:"100",display:"none"},suggestions:{display:"block"},suggestion:{whiteSpace:"nowrap",cursor:"pointer"},suggestionChild:{whiteSpace:"normal"},ltr:{left:"0",right:"auto"},rtl:{left:"auto",right:"0"},defaultClasses:{root:"algolia-autocomplete",prefix:"aa",noPrefix:!1,dropdownMenu:"dropdown-menu",input:"input",hint:"hint",suggestions:"suggestions",suggestion:"suggestion",cursor:"cursor",dataset:"dataset",empty:"empty"},appendTo:{wrapper:{position:"absolute",zIndex:"100",display:"none"},input:{},inputWithNoHint:{},dropdown:{display:"block"}}};r.isMsie()&&r.mixin(i.input,{backgroundImage:"url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)"}),r.isMsie()&&r.isMsie()<=7&&r.mixin(i.input,{marginTop:"-1px"}),t.exports=i},function(t,e){"function"==typeof Object.create?t.exports=function(t,e){t.super_=e,t.prototype=Object.create(e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}})}:t.exports=function(t,e){t.super_=e;var n=function(){};n.prototype=e.prototype,t.prototype=new n,t.prototype.constructor=t}},function(t,e,n){t.exports=function(t,e){return function(n,i,o){if("function"==typeof n&&"object"==typeof i||"object"==typeof o)throw new r.AlgoliaSearchError("index.search usage is index.search(query, params, cb)");0===arguments.length||"function"==typeof n?(o=n,n=""):1!==arguments.length&&"function"!=typeof i||(o=i,i=void 0),"object"==typeof n&&null!==n?(i=n,n=void 0):null==n&&(n="");var s,a="";return void 0!==n&&(a+=t+"="+encodeURIComponent(n)),void 0!==i&&(i.additionalUA&&(s=i.additionalUA,delete i.additionalUA),a=this.as._getSearchParams(i,a)),this._search(a,e,o,s)}};var r=n(5)},function(t,e,n){t.exports=function(t,e){var r=n(36),i=n(2),o={};return i(r(t),(function(n){!0!==e(n)&&(o[n]=t[n])})),o}},function(t,e){var n;n=window,t.exports=function(t){var e,n,r=function(){var e,n,r,i,o,s=[],a=s.concat,u=s.filter,c=s.slice,l=t.document,h={},f={},d={"column-count":1,columns:1,"font-weight":1,"line-height":1,opacity:1,"z-index":1,zoom:1},p=/^\s*<(\w+|!)[^>]*>/,g=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,m=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,y=/^(?:body|html)$/i,v=/([A-Z])/g,b=["val","css","html","text","data","width","height","offset"],w=l.createElement("table"),_=l.createElement("tr"),x={tr:l.createElement("tbody"),tbody:w,thead:w,tfoot:w,td:_,th:_,"*":l.createElement("div")},S=/complete|loaded|interactive/,C=/^[\w-]*$/,A={},E=A.toString,T={},k=l.createElement("div"),O={tabindex:"tabIndex",readonly:"readOnly",for:"htmlFor",class:"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},N=Array.isArray||function(t){return t instanceof Array};function j(t){return null==t?String(t):A[E.call(t)]||"object"}function I(t){return"function"==j(t)}function L(t){return null!=t&&t==t.window}function R(t){return null!=t&&t.nodeType==t.DOCUMENT_NODE}function P(t){return"object"==j(t)}function D(t){return P(t)&&!L(t)&&Object.getPrototypeOf(t)==Object.prototype}function q(t){var e=!!t&&"length"in t&&t.length,r=n.type(t);return"function"!=r&&!L(t)&&("array"==r||0===e||"number"==typeof e&&e>0&&e-1 in t)}function $(t){return t.replace(/::/g,"/").replace(/([A-Z]+)([A-Z][a-z])/g,"$1_$2").replace(/([a-z\d])([A-Z])/g,"$1_$2").replace(/_/g,"-").toLowerCase()}function M(t){return t in f?f[t]:f[t]=new RegExp("(^|\\s)"+t+"(\\s|$)")}function H(t,e){return"number"!=typeof e||d[$(t)]?e:e+"px"}function F(t){return"children"in t?c.call(t.children):n.map(t.childNodes,(function(t){if(1==t.nodeType)return t}))}function z(t,e){var n,r=t?t.length:0;for(n=0;n<r;n++)this[n]=t[n];this.length=r,this.selector=e||""}function B(t,n,r){for(e in n)r&&(D(n[e])||N(n[e]))?(D(n[e])&&!D(t[e])&&(t[e]={}),N(n[e])&&!N(t[e])&&(t[e]=[]),B(t[e],n[e],r)):void 0!==n[e]&&(t[e]=n[e])}function U(t,e){return null==e?n(t):n(t).filter(e)}function V(t,e,n,r){return I(e)?e.call(t,n,r):e}function K(t,e,n){null==n?t.removeAttribute(e):t.setAttribute(e,n)}function J(t,e){var n=t.className||"",r=n&&void 0!==n.baseVal;if(void 0===e)return r?n.baseVal:n;r?n.baseVal=e:t.className=e}function W(t){try{return t?"true"==t||"false"!=t&&("null"==t?null:+t+""==t?+t:/^[\[\{]/.test(t)?n.parseJSON(t):t):t}catch(e){return t}}function Q(t,e){e(t);for(var n=0,r=t.childNodes.length;n<r;n++)Q(t.childNodes[n],e)}return T.matches=function(t,e){if(!e||!t||1!==t.nodeType)return!1;var n=t.matches||t.webkitMatchesSelector||t.mozMatchesSelector||t.oMatchesSelector||t.matchesSelector;if(n)return n.call(t,e);var r,i=t.parentNode,o=!i;return o&&(i=k).appendChild(t),r=~T.qsa(i,e).indexOf(t),o&&k.removeChild(t),r},i=function(t){return t.replace(/-+(.)?/g,(function(t,e){return e?e.toUpperCase():""}))},o=function(t){return u.call(t,(function(e,n){return t.indexOf(e)==n}))},T.fragment=function(t,e,r){var i,o,s;return g.test(t)&&(i=n(l.createElement(RegExp.$1))),i||(t.replace&&(t=t.replace(m,"<$1></$2>")),void 0===e&&(e=p.test(t)&&RegExp.$1),e in x||(e="*"),(s=x[e]).innerHTML=""+t,i=n.each(c.call(s.childNodes),(function(){s.removeChild(this)}))),D(r)&&(o=n(i),n.each(r,(function(t,e){b.indexOf(t)>-1?o[t](e):o.attr(t,e)}))),i},T.Z=function(t,e){return new z(t,e)},T.isZ=function(t){return t instanceof T.Z},T.init=function(t,e){var r,i;if(!t)return T.Z();if("string"==typeof t)if("<"==(t=t.trim())[0]&&p.test(t))r=T.fragment(t,RegExp.$1,e),t=null;else{if(void 0!==e)return n(e).find(t);r=T.qsa(l,t)}else{if(I(t))return n(l).ready(t);if(T.isZ(t))return t;if(N(t))i=t,r=u.call(i,(function(t){return null!=t}));else if(P(t))r=[t],t=null;else if(p.test(t))r=T.fragment(t.trim(),RegExp.$1,e),t=null;else{if(void 0!==e)return n(e).find(t);r=T.qsa(l,t)}}return T.Z(r,t)},(n=function(t,e){return T.init(t,e)}).extend=function(t){var e,n=c.call(arguments,1);return"boolean"==typeof t&&(e=t,t=n.shift()),n.forEach((function(n){B(t,n,e)})),t},T.qsa=function(t,e){var n,r="#"==e[0],i=!r&&"."==e[0],o=r||i?e.slice(1):e,s=C.test(o);return t.getElementById&&s&&r?(n=t.getElementById(o))?[n]:[]:1!==t.nodeType&&9!==t.nodeType&&11!==t.nodeType?[]:c.call(s&&!r&&t.getElementsByClassName?i?t.getElementsByClassName(o):t.getElementsByTagName(e):t.querySelectorAll(e))},n.contains=l.documentElement.contains?function(t,e){return t!==e&&t.contains(e)}:function(t,e){for(;e&&(e=e.parentNode);)if(e===t)return!0;return!1},n.type=j,n.isFunction=I,n.isWindow=L,n.isArray=N,n.isPlainObject=D,n.isEmptyObject=function(t){var e;for(e in t)return!1;return!0},n.isNumeric=function(t){var e=Number(t),n=typeof t;return null!=t&&"boolean"!=n&&("string"!=n||t.length)&&!isNaN(e)&&isFinite(e)||!1},n.inArray=function(t,e,n){return s.indexOf.call(e,t,n)},n.camelCase=i,n.trim=function(t){return null==t?"":String.prototype.trim.call(t)},n.uuid=0,n.support={},n.expr={},n.noop=function(){},n.map=function(t,e){var r,i,o,s,a=[];if(q(t))for(i=0;i<t.length;i++)null!=(r=e(t[i],i))&&a.push(r);else for(o in t)null!=(r=e(t[o],o))&&a.push(r);return(s=a).length>0?n.fn.concat.apply([],s):s},n.each=function(t,e){var n,r;if(q(t)){for(n=0;n<t.length;n++)if(!1===e.call(t[n],n,t[n]))return t}else for(r in t)if(!1===e.call(t[r],r,t[r]))return t;return t},n.grep=function(t,e){return u.call(t,e)},t.JSON&&(n.parseJSON=JSON.parse),n.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),(function(t,e){A["[object "+e+"]"]=e.toLowerCase()})),n.fn={constructor:T.Z,length:0,forEach:s.forEach,reduce:s.reduce,push:s.push,sort:s.sort,splice:s.splice,indexOf:s.indexOf,concat:function(){var t,e,n=[];for(t=0;t<arguments.length;t++)e=arguments[t],n[t]=T.isZ(e)?e.toArray():e;return a.apply(T.isZ(this)?this.toArray():this,n)},map:function(t){return n(n.map(this,(function(e,n){return t.call(e,n,e)})))},slice:function(){return n(c.apply(this,arguments))},ready:function(t){return S.test(l.readyState)&&l.body?t(n):l.addEventListener("DOMContentLoaded",(function(){t(n)}),!1),this},get:function(t){return void 0===t?c.call(this):this[t>=0?t:t+this.length]},toArray:function(){return this.get()},size:function(){return this.length},remove:function(){return this.each((function(){null!=this.parentNode&&this.parentNode.removeChild(this)}))},each:function(t){return s.every.call(this,(function(e,n){return!1!==t.call(e,n,e)})),this},filter:function(t){return I(t)?this.not(this.not(t)):n(u.call(this,(function(e){return T.matches(e,t)})))},add:function(t,e){return n(o(this.concat(n(t,e))))},is:function(t){return this.length>0&&T.matches(this[0],t)},not:function(t){var e=[];if(I(t)&&void 0!==t.call)this.each((function(n){t.call(this,n)||e.push(this)}));else{var r="string"==typeof t?this.filter(t):q(t)&&I(t.item)?c.call(t):n(t);this.forEach((function(t){r.indexOf(t)<0&&e.push(t)}))}return n(e)},has:function(t){return this.filter((function(){return P(t)?n.contains(this,t):n(this).find(t).size()}))},eq:function(t){return-1===t?this.slice(t):this.slice(t,+t+1)},first:function(){var t=this[0];return t&&!P(t)?t:n(t)},last:function(){var t=this[this.length-1];return t&&!P(t)?t:n(t)},find:function(t){var e=this;return t?"object"==typeof t?n(t).filter((function(){var t=this;return s.some.call(e,(function(e){return n.contains(e,t)}))})):1==this.length?n(T.qsa(this[0],t)):this.map((function(){return T.qsa(this,t)})):n()},closest:function(t,e){var r=[],i="object"==typeof t&&n(t);return this.each((function(n,o){for(;o&&!(i?i.indexOf(o)>=0:T.matches(o,t));)o=o!==e&&!R(o)&&o.parentNode;o&&r.indexOf(o)<0&&r.push(o)})),n(r)},parents:function(t){for(var e=[],r=this;r.length>0;)r=n.map(r,(function(t){if((t=t.parentNode)&&!R(t)&&e.indexOf(t)<0)return e.push(t),t}));return U(e,t)},parent:function(t){return U(o(this.pluck("parentNode")),t)},children:function(t){return U(this.map((function(){return F(this)})),t)},contents:function(){return this.map((function(){return this.contentDocument||c.call(this.childNodes)}))},siblings:function(t){return U(this.map((function(t,e){return u.call(F(e.parentNode),(function(t){return t!==e}))})),t)},empty:function(){return this.each((function(){this.innerHTML=""}))},pluck:function(t){return n.map(this,(function(e){return e[t]}))},show:function(){return this.each((function(){var t,e,n;"none"==this.style.display&&(this.style.display=""),"none"==getComputedStyle(this,"").getPropertyValue("display")&&(this.style.display=(t=this.nodeName,h[t]||(e=l.createElement(t),l.body.appendChild(e),n=getComputedStyle(e,"").getPropertyValue("display"),e.parentNode.removeChild(e),"none"==n&&(n="block"),h[t]=n),h[t]))}))},replaceWith:function(t){return this.before(t).remove()},wrap:function(t){var e=I(t);if(this[0]&&!e)var r=n(t).get(0),i=r.parentNode||this.length>1;return this.each((function(o){n(this).wrapAll(e?t.call(this,o):i?r.cloneNode(!0):r)}))},wrapAll:function(t){if(this[0]){var e;for(n(this[0]).before(t=n(t));(e=t.children()).length;)t=e.first();n(t).append(this)}return this},wrapInner:function(t){var e=I(t);return this.each((function(r){var i=n(this),o=i.contents(),s=e?t.call(this,r):t;o.length?o.wrapAll(s):i.append(s)}))},unwrap:function(){return this.parent().each((function(){n(this).replaceWith(n(this).children())})),this},clone:function(){return this.map((function(){return this.cloneNode(!0)}))},hide:function(){return this.css("display","none")},toggle:function(t){return this.each((function(){var e=n(this);(void 0===t?"none"==e.css("display"):t)?e.show():e.hide()}))},prev:function(t){return n(this.pluck("previousElementSibling")).filter(t||"*")},next:function(t){return n(this.pluck("nextElementSibling")).filter(t||"*")},html:function(t){return 0 in arguments?this.each((function(e){var r=this.innerHTML;n(this).empty().append(V(this,t,e,r))})):0 in this?this[0].innerHTML:null},text:function(t){return 0 in arguments?this.each((function(e){var n=V(this,t,e,this.textContent);this.textContent=null==n?"":""+n})):0 in this?this.pluck("textContent").join(""):null},attr:function(t,n){var r;return"string"!=typeof t||1 in arguments?this.each((function(r){if(1===this.nodeType)if(P(t))for(e in t)K(this,e,t[e]);else K(this,t,V(this,n,r,this.getAttribute(t)))})):0 in this&&1==this[0].nodeType&&null!=(r=this[0].getAttribute(t))?r:void 0},removeAttr:function(t){return this.each((function(){1===this.nodeType&&t.split(" ").forEach((function(t){K(this,t)}),this)}))},prop:function(t,e){return t=O[t]||t,1 in arguments?this.each((function(n){this[t]=V(this,e,n,this[t])})):this[0]&&this[0][t]},removeProp:function(t){return t=O[t]||t,this.each((function(){delete this[t]}))},data:function(t,e){var n="data-"+t.replace(v,"-$1").toLowerCase(),r=1 in arguments?this.attr(n,e):this.attr(n);return null!==r?W(r):void 0},val:function(t){return 0 in arguments?(null==t&&(t=""),this.each((function(e){this.value=V(this,t,e,this.value)}))):this[0]&&(this[0].multiple?n(this[0]).find("option").filter((function(){return this.selected})).pluck("value"):this[0].value)},offset:function(e){if(e)return this.each((function(t){var r=n(this),i=V(this,e,t,r.offset()),o=r.offsetParent().offset(),s={top:i.top-o.top,left:i.left-o.left};"static"==r.css("position")&&(s.position="relative"),r.css(s)}));if(!this.length)return null;if(l.documentElement!==this[0]&&!n.contains(l.documentElement,this[0]))return{top:0,left:0};var r=this[0].getBoundingClientRect();return{left:r.left+t.pageXOffset,top:r.top+t.pageYOffset,width:Math.round(r.width),height:Math.round(r.height)}},css:function(t,r){if(arguments.length<2){var o=this[0];if("string"==typeof t){if(!o)return;return o.style[i(t)]||getComputedStyle(o,"").getPropertyValue(t)}if(N(t)){if(!o)return;var s={},a=getComputedStyle(o,"");return n.each(t,(function(t,e){s[e]=o.style[i(e)]||a.getPropertyValue(e)})),s}}var u="";if("string"==j(t))r||0===r?u=$(t)+":"+H(t,r):this.each((function(){this.style.removeProperty($(t))}));else for(e in t)t[e]||0===t[e]?u+=$(e)+":"+H(e,t[e])+";":this.each((function(){this.style.removeProperty($(e))}));return this.each((function(){this.style.cssText+=";"+u}))},index:function(t){return t?this.indexOf(n(t)[0]):this.parent().children().indexOf(this[0])},hasClass:function(t){return!!t&&s.some.call(this,(function(t){return this.test(J(t))}),M(t))},addClass:function(t){return t?this.each((function(e){if("className"in this){r=[];var i=J(this);V(this,t,e,i).split(/\s+/g).forEach((function(t){n(this).hasClass(t)||r.push(t)}),this),r.length&&J(this,i+(i?" ":"")+r.join(" "))}})):this},removeClass:function(t){return this.each((function(e){if("className"in this){if(void 0===t)return J(this,"");r=J(this),V(this,t,e,r).split(/\s+/g).forEach((function(t){r=r.replace(M(t)," ")})),J(this,r.trim())}}))},toggleClass:function(t,e){return t?this.each((function(r){var i=n(this);V(this,t,r,J(this)).split(/\s+/g).forEach((function(t){(void 0===e?!i.hasClass(t):e)?i.addClass(t):i.removeClass(t)}))})):this},scrollTop:function(t){if(this.length){var e="scrollTop"in this[0];return void 0===t?e?this[0].scrollTop:this[0].pageYOffset:this.each(e?function(){this.scrollTop=t}:function(){this.scrollTo(this.scrollX,t)})}},scrollLeft:function(t){if(this.length){var e="scrollLeft"in this[0];return void 0===t?e?this[0].scrollLeft:this[0].pageXOffset:this.each(e?function(){this.scrollLeft=t}:function(){this.scrollTo(t,this.scrollY)})}},position:function(){if(this.length){var t=this[0],e=this.offsetParent(),r=this.offset(),i=y.test(e[0].nodeName)?{top:0,left:0}:e.offset();return r.top-=parseFloat(n(t).css("margin-top"))||0,r.left-=parseFloat(n(t).css("margin-left"))||0,i.top+=parseFloat(n(e[0]).css("border-top-width"))||0,i.left+=parseFloat(n(e[0]).css("border-left-width"))||0,{top:r.top-i.top,left:r.left-i.left}}},offsetParent:function(){return this.map((function(){for(var t=this.offsetParent||l.body;t&&!y.test(t.nodeName)&&"static"==n(t).css("position");)t=t.offsetParent;return t}))}},n.fn.detach=n.fn.remove,["width","height"].forEach((function(t){var e=t.replace(/./,(function(t){return t[0].toUpperCase()}));n.fn[t]=function(r){var i,o=this[0];return void 0===r?L(o)?o["inner"+e]:R(o)?o.documentElement["scroll"+e]:(i=this.offset())&&i[t]:this.each((function(e){(o=n(this)).css(t,V(this,r,e,o[t]()))}))}})),["after","prepend","before","append"].forEach((function(e,r){var i=r%2;n.fn[e]=function(){var e,o,s=n.map(arguments,(function(t){var r=[];return"array"==(e=j(t))?(t.forEach((function(t){return void 0!==t.nodeType?r.push(t):n.zepto.isZ(t)?r=r.concat(t.get()):void(r=r.concat(T.fragment(t)))})),r):"object"==e||null==t?t:T.fragment(t)})),a=this.length>1;return s.length<1?this:this.each((function(e,u){o=i?u:u.parentNode,u=0==r?u.nextSibling:1==r?u.firstChild:2==r?u:null;var c=n.contains(l.documentElement,o);s.forEach((function(e){if(a)e=e.cloneNode(!0);else if(!o)return n(e).remove();o.insertBefore(e,u),c&&Q(e,(function(e){if(!(null==e.nodeName||"SCRIPT"!==e.nodeName.toUpperCase()||e.type&&"text/javascript"!==e.type||e.src)){var n=e.ownerDocument?e.ownerDocument.defaultView:t;n.eval.call(n,e.innerHTML)}}))}))}))},n.fn[i?e+"To":"insert"+(r?"Before":"After")]=function(t){return n(t)[e](this),this}})),T.Z.prototype=z.prototype=n.fn,T.uniq=o,T.deserializeValue=W,n.zepto=T,n}();return function(e){var n=1,r=Array.prototype.slice,i=e.isFunction,o=function(t){return"string"==typeof t},s={},a={},u="onfocusin"in t,c={focus:"focusin",blur:"focusout"},l={mouseenter:"mouseover",mouseleave:"mouseout"};function h(t){return t._zid||(t._zid=n++)}function f(t,e,n,r){if((e=d(e)).ns)var i=(o=e.ns,new RegExp("(?:^| )"+o.replace(" "," .* ?")+"(?: |$)"));var o;return(s[h(t)]||[]).filter((function(t){return t&&(!e.e||t.e==e.e)&&(!e.ns||i.test(t.ns))&&(!n||h(t.fn)===h(n))&&(!r||t.sel==r)}))}function d(t){var e=(""+t).split(".");return{e:e[0],ns:e.slice(1).sort().join(" ")}}function p(t,e){return t.del&&!u&&t.e in c||!!e}function g(t){return l[t]||u&&c[t]||t}function m(t,n,r,i,o,a,u){var c=h(t),f=s[c]||(s[c]=[]);n.split(/\s/).forEach((function(n){if("ready"==n)return e(document).ready(r);var s=d(n);s.fn=r,s.sel=o,s.e in l&&(r=function(t){var n=t.relatedTarget;if(!n||n!==this&&!e.contains(this,n))return s.fn.apply(this,arguments)}),s.del=a;var c=a||r;s.proxy=function(e){if(!(e=x(e)).isImmediatePropagationStopped()){try{var n=Object.getOwnPropertyDescriptor(e,"data");n&&!n.writable||(e.data=i)}catch(e){}var r=c.apply(t,null==e._args?[e]:[e].concat(e._args));return!1===r&&(e.preventDefault(),e.stopPropagation()),r}},s.i=f.length,f.push(s),"addEventListener"in t&&t.addEventListener(g(s.e),s.proxy,p(s,u))}))}function y(t,e,n,r,i){var o=h(t);(e||"").split(/\s/).forEach((function(e){f(t,e,n,r).forEach((function(e){delete s[o][e.i],"removeEventListener"in t&&t.removeEventListener(g(e.e),e.proxy,p(e,i))}))}))}a.click=a.mousedown=a.mouseup=a.mousemove="MouseEvents",e.event={add:m,remove:y},e.proxy=function(t,n){var s=2 in arguments&&r.call(arguments,2);if(i(t)){var a=function(){return t.apply(n,s?s.concat(r.call(arguments)):arguments)};return a._zid=h(t),a}if(o(n))return s?(s.unshift(t[n],t),e.proxy.apply(null,s)):e.proxy(t[n],t);throw new TypeError("expected function")},e.fn.bind=function(t,e,n){return this.on(t,e,n)},e.fn.unbind=function(t,e){return this.off(t,e)},e.fn.one=function(t,e,n,r){return this.on(t,e,n,r,1)};var v=function(){return!0},b=function(){return!1},w=/^([A-Z]|returnValue$|layer[XY]$|webkitMovement[XY]$)/,_={preventDefault:"isDefaultPrevented",stopImmediatePropagation:"isImmediatePropagationStopped",stopPropagation:"isPropagationStopped"};function x(t,n){return!n&&t.isDefaultPrevented||(n||(n=t),e.each(_,(function(e,r){var i=n[e];t[e]=function(){return this[r]=v,i&&i.apply(n,arguments)},t[r]=b})),t.timeStamp||(t.timeStamp=Date.now()),(void 0!==n.defaultPrevented?n.defaultPrevented:"returnValue"in n?!1===n.returnValue:n.getPreventDefault&&n.getPreventDefault())&&(t.isDefaultPrevented=v)),t}function S(t){var e,n={originalEvent:t};for(e in t)w.test(e)||void 0===t[e]||(n[e]=t[e]);return x(n,t)}e.fn.delegate=function(t,e,n){return this.on(e,t,n)},e.fn.undelegate=function(t,e,n){return this.off(e,t,n)},e.fn.live=function(t,n){return e(document.body).delegate(this.selector,t,n),this},e.fn.die=function(t,n){return e(document.body).undelegate(this.selector,t,n),this},e.fn.on=function(t,n,s,a,u){var c,l,h=this;return t&&!o(t)?(e.each(t,(function(t,e){h.on(t,n,s,e,u)})),h):(o(n)||i(a)||!1===a||(a=s,s=n,n=void 0),void 0!==a&&!1!==s||(a=s,s=void 0),!1===a&&(a=b),h.each((function(i,o){u&&(c=function(t){return y(o,t.type,a),a.apply(this,arguments)}),n&&(l=function(t){var i,s=e(t.target).closest(n,o).get(0);if(s&&s!==o)return i=e.extend(S(t),{currentTarget:s,liveFired:o}),(c||a).apply(s,[i].concat(r.call(arguments,1)))}),m(o,t,a,s,n,l||c)})))},e.fn.off=function(t,n,r){var s=this;return t&&!o(t)?(e.each(t,(function(t,e){s.off(t,n,e)})),s):(o(n)||i(r)||!1===r||(r=n,n=void 0),!1===r&&(r=b),s.each((function(){y(this,t,r,n)})))},e.fn.trigger=function(t,n){return(t=o(t)||e.isPlainObject(t)?e.Event(t):x(t))._args=n,this.each((function(){t.type in c&&"function"==typeof this[t.type]?this[t.type]():"dispatchEvent"in this?this.dispatchEvent(t):e(this).triggerHandler(t,n)}))},e.fn.triggerHandler=function(t,n){var r,i;return this.each((function(s,a){(r=S(o(t)?e.Event(t):t))._args=n,r.target=a,e.each(f(a,t.type||t),(function(t,e){if(i=e.proxy(r),r.isImmediatePropagationStopped())return!1}))})),i},"focusin focusout focus blur load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select keydown keypress keyup error".split(" ").forEach((function(t){e.fn[t]=function(e){return 0 in arguments?this.bind(t,e):this.trigger(t)}})),e.Event=function(t,e){o(t)||(t=(e=t).type);var n=document.createEvent(a[t]||"Events"),r=!0;if(e)for(var i in e)"bubbles"==i?r=!!e[i]:n[i]=e[i];return n.initEvent(t,r,!0),x(n)}}(r),n=[],r.fn.remove=function(){return this.each((function(){this.parentNode&&("IMG"===this.tagName&&(n.push(this),this.src="data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs=",e&&clearTimeout(e),e=setTimeout((function(){n=[]}),6e4)),this.parentNode.removeChild(this))}))},function(t){var e={},n=t.fn.data,r=t.camelCase,i=t.expando="Zepto"+ +new Date,o=[];function s(n,s,a){var u=n[i]||(n[i]=++t.uuid),c=e[u]||(e[u]=function(e){var n={};return t.each(e.attributes||o,(function(e,i){0==i.name.indexOf("data-")&&(n[r(i.name.replace("data-",""))]=t.zepto.deserializeValue(i.value))})),n}(n));return void 0!==s&&(c[r(s)]=a),c}t.fn.data=function(o,a){return void 0===a?t.isPlainObject(o)?this.each((function(e,n){t.each(o,(function(t,e){s(n,t,e)}))})):0 in this?function(o,a){var u=o[i],c=u&&e[u];if(void 0===a)return c||s(o);if(c){if(a in c)return c[a];var l=r(a);if(l in c)return c[l]}return n.call(t(o),a)}(this[0],o):void 0:this.each((function(){s(this,o,a)}))},t.data=function(e,n,r){return t(e).data(n,r)},t.hasData=function(n){var r=n[i],o=r&&e[r];return!!o&&!t.isEmptyObject(o)},t.fn.removeData=function(n){return"string"==typeof n&&(n=n.split(/\s+/)),this.each((function(){var o=this[i],s=o&&e[o];s&&t.each(n||s,(function(t){delete s[n?r(this):t]}))}))},["remove","empty"].forEach((function(e){var n=t.fn[e];t.fn[e]=function(){var t=this.find("*");return"remove"===e&&(t=t.add(this)),t.removeData(),n.call(this)}}))}(r),r}(n)},function(t,e,n){"use strict";var r=n(0),i=n(1);function o(t){t&&t.el||r.error("EventBus initialized without el"),this.$el=i.element(t.el)}r.mixin(o.prototype,{trigger:function(t){var e=[].slice.call(arguments,1),n=r.Event("autocomplete:"+t);return this.$el.trigger(n,e),n}}),t.exports=o},function(t,e,n){"use strict";t.exports={wrapper:'<span class="%ROOT%"></span>',dropdown:'<span class="%PREFIX%%DROPDOWN_MENU%"></span>',dataset:'<div class="%PREFIX%%DATASET%-%CLASS%"></div>',suggestions:'<span class="%PREFIX%%SUGGESTIONS%"></span>',suggestion:'<div class="%PREFIX%%SUGGESTION%"></div>'}},function(t,e){t.exports="0.32.0"},function(t,e,n){"use strict";t.exports=function(t){var e=t.match(/Algolia for vanilla JavaScript (\d+\.)(\d+\.)(\d+)/);if(e)return[e[1],e[2],e[3]]}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r,i=n(15),o=(r=i)&&r.__esModule?r:{default:r};e.default=o.default},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default="2.6.1"},function(t,e,n){"use strict";var r,i=n(23),o=(r=i)&&r.__esModule?r:{default:r};t.exports=o.default},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=s(n(24)),i=s(n(25)),o=s(n(21));function s(t){return t&&t.__esModule?t:{default:t}}var a=(0,r.default)(i.default);a.version=o.default,e.default=a},function(t,e,n){"use strict";var r=Function.prototype.bind;t.exports=function(t){var e=function(){for(var e=arguments.length,n=Array(e),i=0;i<e;i++)n[i]=arguments[i];return new(r.apply(t,[null].concat(n)))};return e.__proto__=t,e.prototype=t.prototype,e}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=Object.assign||function(t){for(var e=1;e<arguments.length;e++){var n=arguments[e];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(t[r]=n[r])}return t},i=function(){function t(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}return function(e,n,r){return n&&t(e.prototype,n),r&&t(e,r),e}}(),o=f(n(26)),s=f(n(29)),a=f(n(49)),u=f(n(64)),c=f(n(65)),l=f(n(21)),h=f(n(20));function f(t){return t&&t.__esModule?t:{default:t}}var d=function(){function t(e){var n=e.apiKey,i=e.indexName,o=e.inputSelector,c=e.appId,f=void 0===c?"BH4D9OD16A":c,d=e.debug,p=void 0!==d&&d,g=e.algoliaOptions,m=void 0===g?{}:g,y=e.autocompleteOptions,v=void 0===y?{debug:!1,hint:!1,autoselect:!0}:y,b=e.transformData,w=void 0!==b&&b,_=e.queryHook,x=void 0!==_&&_,S=e.handleSelected,C=void 0!==S&&S,A=e.enhancedSearchInput,E=void 0!==A&&A,T=e.layout,k=void 0===T?"collumns":T;!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),t.checkArguments({apiKey:n,indexName:i,inputSelector:o,debug:p,algoliaOptions:m,autocompleteOptions:v,transformData:w,queryHook:x,handleSelected:C,enhancedSearchInput:E,layout:k}),this.apiKey=n,this.appId=f,this.indexName=i,this.input=t.getInputFromSelector(o),this.algoliaOptions=r({hitsPerPage:5},m);var O=!(!v||!v.debug)&&v.debug;v.debug=p||O,this.autocompleteOptions=v,this.autocompleteOptions.cssClasses=this.autocompleteOptions.cssClasses||{},this.autocompleteOptions.cssClasses.prefix=this.autocompleteOptions.cssClasses.prefix||"ds",C=C||this.handleSelected,this.isSimpleLayout="simple"===k,this.client=(0,s.default)(this.appId,this.apiKey),this.client.addAlgoliaAgent("docsearch.js "+l.default),E&&(this.input=t.injectSearchBox(this.input)),this.autocomplete=(0,a.default)(this.input,v,[{source:this.getAutocompleteSource(w,x),templates:{suggestion:t.getSuggestionTemplate(this.isSimpleLayout),footer:u.default.footer,empty:t.getEmptyTemplate()}}]),C&&(0,h.default)(".algolia-autocomplete").on("click",".ds-suggestions a",(function(t){t.preventDefault()})),this.autocomplete.on("autocomplete:selected",C.bind(null,this.autocomplete.autocomplete)),this.autocomplete.on("autocomplete:shown",this.handleShown.bind(null,this.input)),E&&t.bindSearchBoxEvent()}return i(t,[{key:"getAutocompleteSource",value:function(e,n){var r=this;return function(i,o){n&&(i=n(i)||i),r.client.search([{indexName:r.indexName,query:i,params:r.algoliaOptions}]).then((function(n){var r=n.results[0].hits;e&&(r=e(r)||r),o(t.formatHits(r))}))}}},{key:"handleSelected",value:function(t,e,n){t.setVal(""),window.location.assign(n.url)}},{key:"handleShown",value:function(t){var e=t.offset().left+t.width()/2,n=(0,h.default)(document).width()/2;isNaN(n)&&(n=900);var r=e-n>=0?"algolia-autocomplete-right":"algolia-autocomplete-left",i=e-n<0?"algolia-autocomplete-right":"algolia-autocomplete-left",o=(0,h.default)(".algolia-autocomplete");o.hasClass(r)||o.addClass(r),o.hasClass(i)&&o.removeClass(i)}}],[{key:"checkArguments",value:function(e){if(!e.apiKey||!e.indexName)throw new Error("Usage:\n  documentationSearch({\n  apiKey,\n  indexName,\n  inputSelector,\n  [ appId ],\n  [ algoliaOptions.{hitsPerPage} ]\n  [ autocompleteOptions.{hint,debug} ]\n})");if("string"!=typeof e.inputSelector)throw new Error("Error: inputSelector:"+e.inputSelector+"  must be a string. Each selector must match only one element and separated by ','");if(!t.getInputFromSelector(e.inputSelector))throw new Error("Error: No input element in the page matches "+e.inputSelector)}},{key:"injectSearchBox",value:function(t){t.before(u.default.searchBox);var e=t.prev().prev().find("input");return t.remove(),e}},{key:"bindSearchBoxEvent",value:function(){(0,h.default)('.searchbox [type="reset"]').on("click",(function(){(0,h.default)("input#docsearch").focus(),(0,h.default)(this).addClass("hide"),a.default.autocomplete.setVal("")})),(0,h.default)("input#docsearch").on("keyup",(function(){var t=document.querySelector("input#docsearch"),e=document.querySelector('.searchbox [type="reset"]');e.className="searchbox__reset",0===t.value.length&&(e.className+=" hide")}))}},{key:"getInputFromSelector",value:function(t){var e=(0,h.default)(t).filter("input");return e.length?(0,h.default)(e[0]):null}},{key:"formatHits",value:function(e){var n=c.default.deepClone(e).map((function(t){return t._highlightResult&&(t._highlightResult=c.default.mergeKeyWithParent(t._highlightResult,"hierarchy")),c.default.mergeKeyWithParent(t,"hierarchy")})),r=c.default.groupBy(n,"lvl0");return h.default.each(r,(function(t,e){var n=c.default.groupBy(e,"lvl1"),i=c.default.flattenAndFlagFirst(n,"isSubCategoryHeader");r[t]=i})),(r=c.default.flattenAndFlagFirst(r,"isCategoryHeader")).map((function(e){var n=t.formatURL(e),r=c.default.getHighlightedValue(e,"lvl0"),i=c.default.getHighlightedValue(e,"lvl1")||r,o=c.default.compact([c.default.getHighlightedValue(e,"lvl2")||i,c.default.getHighlightedValue(e,"lvl3"),c.default.getHighlightedValue(e,"lvl4"),c.default.getHighlightedValue(e,"lvl5"),c.default.getHighlightedValue(e,"lvl6")]).join('<span class="aa-suggestion-title-separator" aria-hidden="true"> › </span>'),s=c.default.getSnippetedValue(e,"content"),a=i&&""!==i||o&&""!==o,u=o&&""!==o&&o!==i,l=!u&&i&&""!==i&&i!==r;return{isLvl0:!l&&!u,isLvl1:l,isLvl2:u,isLvl1EmptyOrDuplicate:!i||""===i||i===r,isCategoryHeader:e.isCategoryHeader,isSubCategoryHeader:e.isSubCategoryHeader,isTextOrSubcategoryNonEmpty:a,category:r,subcategory:i,title:o,text:s,url:n}}))}},{key:"formatURL",value:function(t){var e=t.url,n=t.anchor;return e?-1!==e.indexOf("#")?e:n?t.url+"#"+t.anchor:e:n?"#"+t.anchor:(console.warn("no anchor nor url for : ",JSON.stringify(t)),null)}},{key:"getEmptyTemplate",value:function(){return function(t){return o.default.compile(u.default.empty).render(t)}}},{key:"getSuggestionTemplate",value:function(t){var e=t?u.default.suggestionSimple:u.default.suggestion,n=o.default.compile(e);return function(t){return n.render(t)}}}]),t}();e.default=d},function(t,e,n){var r=n(27);r.Template=n(28).Template,r.template=r.Template,t.exports=r},function(t,e,n){!function(t){var e=/\S/,n=/\"/g,r=/\n/g,i=/\r/g,o=/\\/g,s=/\u2028/,a=/\u2029/;function u(t){return t.trim?t.trim():t.replace(/^\s*|\s*$/g,"")}function c(t,e,n){if(e.charAt(n)!=t.charAt(0))return!1;for(var r=1,i=t.length;r<i;r++)if(e.charAt(n+r)!=t.charAt(r))return!1;return!0}t.tags={"#":1,"^":2,"<":3,$:4,"/":5,"!":6,">":7,"=":8,_v:9,"{":10,"&":11,_t:12},t.scan=function(n,r){var i,o=n.length,s=0,a=null,l=null,h="",f=[],d=!1,p=0,g=0,m="{{",y="}}";function v(){h.length>0&&(f.push({tag:"_t",text:new String(h)}),h="")}function b(n,r){if(v(),n&&function(){for(var n=!0,r=g;r<f.length;r++)if(!(n=t.tags[f[r].tag]<t.tags._v||"_t"==f[r].tag&&null===f[r].text.match(e)))return!1;return n}())for(var i,o=g;o<f.length;o++)f[o].text&&((i=f[o+1])&&">"==i.tag&&(i.indent=f[o].text.toString()),f.splice(o,1));else r||f.push({tag:"\n"});d=!1,g=f.length}function w(t,e){var n="="+y,r=t.indexOf(n,e),i=u(t.substring(t.indexOf("=",e)+1,r)).split(" ");return m=i[0],y=i[i.length-1],r+n.length-1}for(r&&(r=r.split(" "),m=r[0],y=r[1]),p=0;p<o;p++)0==s?c(m,n,p)?(--p,v(),s=1):"\n"==n.charAt(p)?b(d):h+=n.charAt(p):1==s?(p+=m.length-1,"="==(a=(l=t.tags[n.charAt(p+1)])?n.charAt(p+1):"_v")?(p=w(n,p),s=0):(l&&p++,s=2),d=p):c(y,n,p)?(f.push({tag:a,n:u(h),otag:m,ctag:y,i:"/"==a?d-m.length:p+y.length}),h="",p+=y.length-1,s=0,"{"==a&&("}}"==y?p++:"}"===(i=f[f.length-1]).n.substr(i.n.length-1)&&(i.n=i.n.substring(0,i.n.length-1)))):h+=n.charAt(p);return b(d,!0),f};var l={_t:!0,"\n":!0,$:!0,"/":!0};function h(t,e){for(var n=0,r=e.length;n<r;n++)if(e[n].o==t.n)return t.tag="#",!0}function f(t,e,n){for(var r=0,i=n.length;r<i;r++)if(n[r].c==t&&n[r].o==e)return!0}function d(t){var e=[];for(var n in t.partials)e.push('"'+g(n)+'":{name:"'+g(t.partials[n].name)+'", '+d(t.partials[n])+"}");return"partials: {"+e.join(",")+"}, subs: "+function(t){var e=[];for(var n in t)e.push('"'+g(n)+'": function(c,p,t,i) {'+t[n]+"}");return"{ "+e.join(",")+" }"}(t.subs)}t.stringify=function(e,n,r){return"{code: function (c,p,i) { "+t.wrapMain(e.code)+" },"+d(e)+"}"};var p=0;function g(t){return t.replace(o,"\\\\").replace(n,'\\"').replace(r,"\\n").replace(i,"\\r").replace(s,"\\u2028").replace(a,"\\u2029")}function m(t){return~t.indexOf(".")?"d":"f"}function y(t,e){var n="<"+(e.prefix||"")+t.n+p++;return e.partials[n]={name:t.n,partials:{}},e.code+='t.b(t.rp("'+g(n)+'",c,p,"'+(t.indent||"")+'"));',n}function v(t,e){e.code+="t.b(t.t(t."+m(t.n)+'("'+g(t.n)+'",c,p,0)));'}function b(t){return"t.b("+t+");"}t.generate=function(e,n,r){p=0;var i={code:"",subs:{},partials:{}};return t.walk(e,i),r.asString?this.stringify(i,n,r):this.makeTemplate(i,n,r)},t.wrapMain=function(t){return'var t=this;t.b(i=i||"");'+t+"return t.fl();"},t.template=t.Template,t.makeTemplate=function(t,e,n){var r=this.makePartials(t);return r.code=new Function("c","p","i",this.wrapMain(t.code)),new this.template(r,e,this,n)},t.makePartials=function(t){var e,n={subs:{},partials:t.partials,name:t.name};for(e in n.partials)n.partials[e]=this.makePartials(n.partials[e]);for(e in t.subs)n.subs[e]=new Function("c","p","t","i",t.subs[e]);return n},t.codegen={"#":function(e,n){n.code+="if(t.s(t."+m(e.n)+'("'+g(e.n)+'",c,p,1),c,p,0,'+e.i+","+e.end+',"'+e.otag+" "+e.ctag+'")){t.rs(c,p,function(c,p,t){',t.walk(e.nodes,n),n.code+="});c.pop();}"},"^":function(e,n){n.code+="if(!t.s(t."+m(e.n)+'("'+g(e.n)+'",c,p,1),c,p,1,0,0,"")){',t.walk(e.nodes,n),n.code+="};"},">":y,"<":function(e,n){var r={partials:{},code:"",subs:{},inPartial:!0};t.walk(e.nodes,r);var i=n.partials[y(e,n)];i.subs=r.subs,i.partials=r.partials},$:function(e,n){var r={subs:{},code:"",partials:n.partials,prefix:e.n};t.walk(e.nodes,r),n.subs[e.n]=r.code,n.inPartial||(n.code+='t.sub("'+g(e.n)+'",c,p,i);')},"\n":function(t,e){e.code+=b('"\\n"'+(t.last?"":" + i"))},_v:function(t,e){e.code+="t.b(t.v(t."+m(t.n)+'("'+g(t.n)+'",c,p,0)));'},_t:function(t,e){e.code+=b('"'+g(t.text)+'"')},"{":v,"&":v},t.walk=function(e,n){for(var r,i=0,o=e.length;i<o;i++)(r=t.codegen[e[i].tag])&&r(e[i],n);return n},t.parse=function(e,n,r){return function e(n,r,i,o){var s,a=[],u=null,c=null;for(s=i[i.length-1];n.length>0;){if(c=n.shift(),s&&"<"==s.tag&&!(c.tag in l))throw new Error("Illegal content in < super tag.");if(t.tags[c.tag]<=t.tags.$||h(c,o))i.push(c),c.nodes=e(n,c.tag,i,o);else{if("/"==c.tag){if(0===i.length)throw new Error("Closing tag without opener: /"+c.n);if(u=i.pop(),c.n!=u.n&&!f(c.n,u.n,o))throw new Error("Nesting error: "+u.n+" vs. "+c.n);return u.end=c.i,a}"\n"==c.tag&&(c.last=0==n.length||"\n"==n[0].tag)}a.push(c)}if(i.length>0)throw new Error("missing closing tag: "+i.pop().n);return a}(e,0,[],(r=r||{}).sectionTags||[])},t.cache={},t.cacheKey=function(t,e){return[t,!!e.asString,!!e.disableLambda,e.delimiters,!!e.modelGet].join("||")},t.compile=function(e,n){n=n||{};var r=t.cacheKey(e,n),i=this.cache[r];if(i){var o=i.partials;for(var s in o)delete o[s].instance;return i}return i=this.generate(this.parse(this.scan(e,n.delimiters),e,n),e,n),this.cache[r]=i}}(e)},function(t,e,n){!function(t){function e(t,e,n){var r;return e&&"object"==typeof e&&(void 0!==e[t]?r=e[t]:n&&e.get&&"function"==typeof e.get&&(r=e.get(t))),r}t.Template=function(t,e,n,r){t=t||{},this.r=t.code||this.r,this.c=n,this.options=r||{},this.text=e||"",this.partials=t.partials||{},this.subs=t.subs||{},this.buf=""},t.Template.prototype={r:function(t,e,n){return""},v:function(t){return t=u(t),a.test(t)?t.replace(n,"&amp;").replace(r,"&lt;").replace(i,"&gt;").replace(o,"&#39;").replace(s,"&quot;"):t},t:u,render:function(t,e,n){return this.ri([t],e||{},n)},ri:function(t,e,n){return this.r(t,e,n)},ep:function(t,e){var n=this.partials[t],r=e[n.name];if(n.instance&&n.base==r)return n.instance;if("string"==typeof r){if(!this.c)throw new Error("No compiler available.");r=this.c.compile(r,this.options)}if(!r)return null;if(this.partials[t].base=r,n.subs){for(key in e.stackText||(e.stackText={}),n.subs)e.stackText[key]||(e.stackText[key]=void 0!==this.activeSub&&e.stackText[this.activeSub]?e.stackText[this.activeSub]:this.text);r=function(t,e,n,r,i,o){function s(){}function a(){}var u;s.prototype=t,a.prototype=t.subs;var c=new s;for(u in c.subs=new a,c.subsText={},c.buf="",r=r||{},c.stackSubs=r,c.subsText=o,e)r[u]||(r[u]=e[u]);for(u in r)c.subs[u]=r[u];for(u in i=i||{},c.stackPartials=i,n)i[u]||(i[u]=n[u]);for(u in i)c.partials[u]=i[u];return c}(r,n.subs,n.partials,this.stackSubs,this.stackPartials,e.stackText)}return this.partials[t].instance=r,r},rp:function(t,e,n,r){var i=this.ep(t,n);return i?i.ri(e,n,r):""},rs:function(t,e,n){var r=t[t.length-1];if(c(r))for(var i=0;i<r.length;i++)t.push(r[i]),n(t,e,this),t.pop();else n(t,e,this)},s:function(t,e,n,r,i,o,s){var a;return(!c(t)||0!==t.length)&&("function"==typeof t&&(t=this.ms(t,e,n,r,i,o,s)),a=!!t,!r&&a&&e&&e.push("object"==typeof t?t:e[e.length-1]),a)},d:function(t,n,r,i){var o,s=t.split("."),a=this.f(s[0],n,r,i),u=this.options.modelGet,l=null;if("."===t&&c(n[n.length-2]))a=n[n.length-1];else for(var h=1;h<s.length;h++)void 0!==(o=e(s[h],a,u))?(l=a,a=o):a="";return!(i&&!a)&&(i||"function"!=typeof a||(n.push(l),a=this.mv(a,n,r),n.pop()),a)},f:function(t,n,r,i){for(var o=!1,s=!1,a=this.options.modelGet,u=n.length-1;u>=0;u--)if(void 0!==(o=e(t,n[u],a))){s=!0;break}return s?(i||"function"!=typeof o||(o=this.mv(o,n,r)),o):!i&&""},ls:function(t,e,n,r,i){var o=this.options.delimiters;return this.options.delimiters=i,this.b(this.ct(u(t.call(e,r)),e,n)),this.options.delimiters=o,!1},ct:function(t,e,n){if(this.options.disableLambda)throw new Error("Lambda features disabled.");return this.c.compile(t,this.options).render(e,n)},b:function(t){this.buf+=t},fl:function(){var t=this.buf;return this.buf="",t},ms:function(t,e,n,r,i,o,s){var a,u=e[e.length-1],c=t.call(u);return"function"==typeof c?!!r||(a=this.activeSub&&this.subsText&&this.subsText[this.activeSub]?this.subsText[this.activeSub]:this.text,this.ls(c,u,n,a.substring(i,o),s)):c},mv:function(t,e,n){var r=e[e.length-1],i=t.call(r);return"function"==typeof i?this.ct(u(i.call(r)),r,n):i},sub:function(t,e,n,r){var i=this.subs[t];i&&(this.activeSub=t,i(e,n,this,r),this.activeSub=!1)}};var n=/&/g,r=/</g,i=/>/g,o=/\'/g,s=/\"/g,a=/[&<>\"\']/;function u(t){return String(null==t?"":t)}var c=Array.isArray||function(t){return"[object Array]"===Object.prototype.toString.call(t)}}(e)},function(t,e,n){"use strict";var r=n(30),i=n(41);t.exports=i(r,"(lite) ")},function(t,e,n){t.exports=u;var r=n(5),i=n(31),o=n(32),s=n(38),a=Object({NODE_ENV:"production"}).RESET_APP_DATA_TIMER&&parseInt(Object({NODE_ENV:"production"}).RESET_APP_DATA_TIMER,10)||12e4;function u(t,e,i){var o=n(8)("algoliasearch"),s=n(3),a=n(6),u=n(7),l="Usage: algoliasearch(applicationID, apiKey, opts)";if(!0!==i._allowEmptyCredentials&&!t)throw new r.AlgoliaSearchError("Please provide an application ID. "+l);if(!0!==i._allowEmptyCredentials&&!e)throw new r.AlgoliaSearchError("Please provide an API key. "+l);this.applicationID=t,this.apiKey=e,this.hosts={read:[],write:[]},i=i||{},this._timeouts=i.timeouts||{connect:1e3,read:2e3,write:3e4},i.timeout&&(this._timeouts.connect=this._timeouts.read=this._timeouts.write=i.timeout);var h=i.protocol||"https:";if(/:$/.test(h)||(h+=":"),"http:"!==h&&"https:"!==h)throw new r.AlgoliaSearchError("protocol must be `http:` or `https:` (was `"+i.protocol+"`)");if(this._checkAppIdData(),i.hosts)a(i.hosts)?(this.hosts.read=s(i.hosts),this.hosts.write=s(i.hosts)):(this.hosts.read=s(i.hosts.read),this.hosts.write=s(i.hosts.write));else{var f=u(this._shuffleResult,(function(e){return t+"-"+e+".algolianet.com"})),d=(!1===i.dsn?"":"-dsn")+".algolia.net";this.hosts.read=[this.applicationID+d].concat(f),this.hosts.write=[this.applicationID+".algolia.net"].concat(f)}this.hosts.read=u(this.hosts.read,c(h)),this.hosts.write=u(this.hosts.write,c(h)),this.extraHeaders={},this.cache=i._cache||{},this._ua=i._ua,this._useCache=!(void 0!==i._useCache&&!i._cache)||i._useCache,this._useRequestCache=this._useCache&&i._useRequestCache,this._useFallback=void 0===i.useFallback||i.useFallback,this._setTimeout=i._setTimeout,o("init done, %j",this)}function c(t){return function(e){return t+"//"+e.toLowerCase()}}function l(t){if(void 0===Array.prototype.toJSON)return JSON.stringify(t);var e=Array.prototype.toJSON;delete Array.prototype.toJSON;var n=JSON.stringify(t);return Array.prototype.toJSON=e,n}function h(t){var e={};for(var n in t){var r;Object.prototype.hasOwnProperty.call(t,n)&&(r="x-algolia-api-key"===n||"x-algolia-application-id"===n?"**hidden for security purposes**":t[n],e[n]=r)}return e}u.prototype.initIndex=function(t){return new o(this,t)},u.prototype.setExtraHeader=function(t,e){this.extraHeaders[t.toLowerCase()]=e},u.prototype.getExtraHeader=function(t){return this.extraHeaders[t.toLowerCase()]},u.prototype.unsetExtraHeader=function(t){delete this.extraHeaders[t.toLowerCase()]},u.prototype.addAlgoliaAgent=function(t){-1===this._ua.indexOf(";"+t)&&(this._ua+=";"+t)},u.prototype._jsonRequest=function(t){this._checkAppIdData();var e,o,s,a=n(8)("algoliasearch:"+t.url),u=t.additionalUA||"",c=t.cache,f=this,d=0,p=!1,g=f._useFallback&&f._request.fallback&&t.fallback;this.apiKey.length>500&&void 0!==t.body&&(void 0!==t.body.params||void 0!==t.body.requests)?(t.body.apiKey=this.apiKey,s=this._computeRequestHeaders({additionalUA:u,withApiKey:!1,headers:t.headers})):s=this._computeRequestHeaders({additionalUA:u,headers:t.headers}),void 0!==t.body&&(e=l(t.body)),a("request start");var m=[];function y(t,e,n){return f._useCache&&t&&e&&void 0!==e[n]}function v(e,n){if(y(f._useRequestCache,c,o)&&e.catch((function(){delete c[o]})),"function"!=typeof t.callback)return e.then(n);e.then((function(e){i((function(){t.callback(null,n(e))}),f._setTimeout||setTimeout)}),(function(e){i((function(){t.callback(e)}),f._setTimeout||setTimeout)}))}if(f._useCache&&f._useRequestCache&&(o=t.url),f._useCache&&f._useRequestCache&&e&&(o+="_body_"+e),y(f._useRequestCache,c,o)){a("serving request from cache");var b=c[o];return v("function"!=typeof b.then?f._promise.resolve({responseText:b}):b,(function(t){return JSON.parse(t.responseText)}))}var w=function n(i,v){f._checkAppIdData();var b=new Date;if(f._useCache&&!f._useRequestCache&&(o=t.url),f._useCache&&!f._useRequestCache&&e&&(o+="_body_"+v.body),y(!f._useRequestCache,c,o)){a("serving response from cache");var w=c[o];return f._promise.resolve({body:JSON.parse(w),responseText:w})}if(d>=f.hosts[t.hostType].length)return!g||p?(a("could not get any response"),f._promise.reject(new r.AlgoliaSearchError("Cannot connect to the AlgoliaSearch API. Send an email to support@algolia.com to report and resolve the issue. Application id was: "+f.applicationID,{debugData:m}))):(a("switching to fallback"),d=0,v.method=t.fallback.method,v.url=t.fallback.url,v.jsonBody=t.fallback.body,v.jsonBody&&(v.body=l(v.jsonBody)),s=f._computeRequestHeaders({additionalUA:u,headers:t.headers}),v.timeouts=f._getTimeoutsForRequest(t.hostType),f._setHostIndexByType(0,t.hostType),p=!0,n(f._request.fallback,v));var _=f._getHostByType(t.hostType),x=_+v.url,S={body:v.body,jsonBody:v.jsonBody,method:v.method,headers:s,timeouts:v.timeouts,debug:a,forceAuthHeaders:v.forceAuthHeaders};return a("method: %s, url: %s, headers: %j, timeouts: %d",S.method,x,S.headers,S.timeouts),i===f._request.fallback&&a("using fallback"),i.call(f,x,S).then((function(t){var n=t&&t.body&&t.body.message&&t.body.status||t.statusCode||t&&t.body&&200;a("received response: statusCode: %s, computed statusCode: %d, headers: %j",t.statusCode,n,t.headers);var i=2===Math.floor(n/100),u=new Date;if(m.push({currentHost:_,headers:h(s),content:e||null,contentLength:void 0!==e?e.length:null,method:v.method,timeouts:v.timeouts,url:v.url,startTime:b,endTime:u,duration:u-b,statusCode:n}),i)return f._useCache&&!f._useRequestCache&&c&&(c[o]=t.responseText),{responseText:t.responseText,body:t.body};if(4!==Math.floor(n/100))return d+=1,C();a("unrecoverable error");var l=new r.AlgoliaSearchError(t.body&&t.body.message,{debugData:m,statusCode:n});return f._promise.reject(l)}),(function(o){a("error: %s, stack: %s",o.message,o.stack);var u=new Date;return m.push({currentHost:_,headers:h(s),content:e||null,contentLength:void 0!==e?e.length:null,method:v.method,timeouts:v.timeouts,url:v.url,startTime:b,endTime:u,duration:u-b}),o instanceof r.AlgoliaSearchError||(o=new r.Unknown(o&&o.message,o)),d+=1,o instanceof r.Unknown||o instanceof r.UnparsableJSON||d>=f.hosts[t.hostType].length&&(p||!g)?(o.debugData=m,f._promise.reject(o)):o instanceof r.RequestTimeout?(a("retrying request with higher timeout"),f._incrementHostIndex(t.hostType),f._incrementTimeoutMultipler(),v.timeouts=f._getTimeoutsForRequest(t.hostType),n(i,v)):C()}));function C(){return a("retrying request"),f._incrementHostIndex(t.hostType),n(i,v)}}(f._request,{url:t.url,method:t.method,body:e,jsonBody:t.body,timeouts:f._getTimeoutsForRequest(t.hostType),forceAuthHeaders:t.forceAuthHeaders});return f._useCache&&f._useRequestCache&&c&&(c[o]=w),v(w,(function(t){return t.body}))},u.prototype._getSearchParams=function(t,e){if(null==t)return e;for(var n in t)null!==n&&void 0!==t[n]&&t.hasOwnProperty(n)&&(e+=""===e?"":"&",e+=n+"="+encodeURIComponent("[object Array]"===Object.prototype.toString.call(t[n])?l(t[n]):t[n]));return e},u.prototype._computeRequestHeaders=function(t){var e=n(2),r={"x-algolia-agent":t.additionalUA?this._ua+";"+t.additionalUA:this._ua,"x-algolia-application-id":this.applicationID};return!1!==t.withApiKey&&(r["x-algolia-api-key"]=this.apiKey),this.userToken&&(r["x-algolia-usertoken"]=this.userToken),this.securityTags&&(r["x-algolia-tagfilters"]=this.securityTags),e(this.extraHeaders,(function(t,e){r[e]=t})),t.headers&&e(t.headers,(function(t,e){r[e]=t})),r},u.prototype.search=function(t,e,r){var i=n(6),o=n(7);if(!i(t))throw new Error("Usage: client.search(arrayOfQueries[, callback])");"function"==typeof e?(r=e,e={}):void 0===e&&(e={});var s=this,a={requests:o(t,(function(t){var e="";return void 0!==t.query&&(e+="query="+encodeURIComponent(t.query)),{indexName:t.indexName,params:s._getSearchParams(t.params,e)}}))},u=o(a.requests,(function(t,e){return e+"="+encodeURIComponent("/1/indexes/"+encodeURIComponent(t.indexName)+"?"+t.params)})).join("&");return void 0!==e.strategy&&(a.strategy=e.strategy),this._jsonRequest({cache:this.cache,method:"POST",url:"/1/indexes/*/queries",body:a,hostType:"read",fallback:{method:"GET",url:"/1/indexes/*",body:{params:u}},callback:r})},u.prototype.searchForFacetValues=function(t){var e=n(6),r=n(7),i="Usage: client.searchForFacetValues([{indexName, params: {facetName, facetQuery, ...params}}, ...queries])";if(!e(t))throw new Error(i);var o=this;return o._promise.all(r(t,(function(t){if(!t||void 0===t.indexName||void 0===t.params.facetName||void 0===t.params.facetQuery)throw new Error(i);var e=n(3),r=n(14),s=t.indexName,a=t.params,u=a.facetName,c=r(e(a),(function(t){return"facetName"===t})),l=o._getSearchParams(c,"");return o._jsonRequest({cache:o.cache,method:"POST",url:"/1/indexes/"+encodeURIComponent(s)+"/facets/"+encodeURIComponent(u)+"/query",hostType:"read",body:{params:l}})})))},u.prototype.setSecurityTags=function(t){if("[object Array]"===Object.prototype.toString.call(t)){for(var e=[],n=0;n<t.length;++n)if("[object Array]"===Object.prototype.toString.call(t[n])){for(var r=[],i=0;i<t[n].length;++i)r.push(t[n][i]);e.push("("+r.join(",")+")")}else e.push(t[n]);t=e.join(",")}this.securityTags=t},u.prototype.setUserToken=function(t){this.userToken=t},u.prototype.clearCache=function(){this.cache={}},u.prototype.setRequestTimeout=function(t){t&&(this._timeouts.connect=this._timeouts.read=this._timeouts.write=t)},u.prototype.setTimeouts=function(t){this._timeouts=t},u.prototype.getTimeouts=function(){return this._timeouts},u.prototype._getAppIdData=function(){var t=s.get(this.applicationID);return null!==t&&this._cacheAppIdData(t),t},u.prototype._setAppIdData=function(t){return t.lastChange=(new Date).getTime(),this._cacheAppIdData(t),s.set(this.applicationID,t)},u.prototype._checkAppIdData=function(){var t=this._getAppIdData(),e=(new Date).getTime();return null===t||e-t.lastChange>a?this._resetInitialAppIdData(t):t},u.prototype._resetInitialAppIdData=function(t){var e=t||{};return e.hostIndexes={read:0,write:0},e.timeoutMultiplier=1,e.shuffleResult=e.shuffleResult||function(t){for(var e,n,r=t.length;0!==r;)n=Math.floor(Math.random()*r),e=t[r-=1],t[r]=t[n],t[n]=e;return t}([1,2,3]),this._setAppIdData(e)},u.prototype._cacheAppIdData=function(t){this._hostIndexes=t.hostIndexes,this._timeoutMultiplier=t.timeoutMultiplier,this._shuffleResult=t.shuffleResult},u.prototype._partialAppIdDataUpdate=function(t){var e=n(2),r=this._getAppIdData();return e(t,(function(t,e){r[e]=t})),this._setAppIdData(r)},u.prototype._getHostByType=function(t){return this.hosts[t][this._getHostIndexByType(t)]},u.prototype._getTimeoutMultiplier=function(){return this._timeoutMultiplier},u.prototype._getHostIndexByType=function(t){return this._hostIndexes[t]},u.prototype._setHostIndexByType=function(t,e){var r=n(3)(this._hostIndexes);return r[e]=t,this._partialAppIdDataUpdate({hostIndexes:r}),t},u.prototype._incrementHostIndex=function(t){return this._setHostIndexByType((this._getHostIndexByType(t)+1)%this.hosts[t].length,t)},u.prototype._incrementTimeoutMultipler=function(){var t=Math.max(this._timeoutMultiplier+1,4);return this._partialAppIdDataUpdate({timeoutMultiplier:t})},u.prototype._getTimeoutsForRequest=function(t){return{connect:this._timeouts.connect*this._timeoutMultiplier,complete:this._timeouts[t]*this._timeoutMultiplier}}},function(t,e){t.exports=function(t,e){e(t,0)}},function(t,e,n){var r=n(13),i=n(33),o=n(34);function s(t,e){this.indexName=e,this.as=t,this.typeAheadArgs=null,this.typeAheadValueOption=null,this.cache={}}t.exports=s,s.prototype.clearCache=function(){this.cache={}},s.prototype.search=r("query"),s.prototype.similarSearch=r("similarQuery"),s.prototype.browse=function(t,e,r){var i,o,s=n(35),a=this;0===arguments.length||1===arguments.length&&"function"==typeof arguments[0]?(i=0,r=arguments[0],t=void 0):"number"==typeof arguments[0]?(i=arguments[0],"number"==typeof arguments[1]?o=arguments[1]:"function"==typeof arguments[1]&&(r=arguments[1],o=void 0),t=void 0,e=void 0):"object"==typeof arguments[0]?("function"==typeof arguments[1]&&(r=arguments[1]),e=arguments[0],t=void 0):"string"==typeof arguments[0]&&"function"==typeof arguments[1]&&(r=arguments[1],e=void 0),e=s({},e||{},{page:i,hitsPerPage:o,query:t});var u=this.as._getSearchParams(e,"");return this.as._jsonRequest({method:"POST",url:"/1/indexes/"+encodeURIComponent(a.indexName)+"/browse",body:{params:u},hostType:"read",callback:r})},s.prototype.browseFrom=function(t,e){return this.as._jsonRequest({method:"POST",url:"/1/indexes/"+encodeURIComponent(this.indexName)+"/browse",body:{cursor:t},hostType:"read",callback:e})},s.prototype.searchForFacetValues=function(t,e){var r=n(3),i=n(14);if(void 0===t.facetName||void 0===t.facetQuery)throw new Error("Usage: index.searchForFacetValues({facetName, facetQuery, ...params}[, callback])");var o=t.facetName,s=i(r(t),(function(t){return"facetName"===t})),a=this.as._getSearchParams(s,"");return this.as._jsonRequest({method:"POST",url:"/1/indexes/"+encodeURIComponent(this.indexName)+"/facets/"+encodeURIComponent(o)+"/query",hostType:"read",body:{params:a},callback:e})},s.prototype.searchFacet=i((function(t,e){return this.searchForFacetValues(t,e)}),o("index.searchFacet(params[, callback])","index.searchForFacetValues(params[, callback])")),s.prototype._search=function(t,e,n,r){return this.as._jsonRequest({cache:this.cache,method:"POST",url:e||"/1/indexes/"+encodeURIComponent(this.indexName)+"/query",body:{params:t},hostType:"read",fallback:{method:"GET",url:"/1/indexes/"+encodeURIComponent(this.indexName),body:{params:t}},callback:n,additionalUA:r})},s.prototype.getObject=function(t,e,n){var r=this;1!==arguments.length&&"function"!=typeof e||(n=e,e=void 0);var i="";if(void 0!==e){i="?attributes=";for(var o=0;o<e.length;++o)0!==o&&(i+=","),i+=e[o]}return this.as._jsonRequest({method:"GET",url:"/1/indexes/"+encodeURIComponent(r.indexName)+"/"+encodeURIComponent(t)+i,hostType:"read",callback:n})},s.prototype.getObjects=function(t,e,r){var i=n(6),o=n(7),s="Usage: index.getObjects(arrayOfObjectIDs[, callback])";if(!i(t))throw new Error(s);var a=this;1!==arguments.length&&"function"!=typeof e||(r=e,e=void 0);var u={requests:o(t,(function(t){var n={indexName:a.indexName,objectID:t};return e&&(n.attributesToRetrieve=e.join(",")),n}))};return this.as._jsonRequest({method:"POST",url:"/1/indexes/*/objects",hostType:"read",body:u,callback:r})},s.prototype.as=null,s.prototype.indexName=null,s.prototype.typeAheadArgs=null,s.prototype.typeAheadValueOption=null},function(t,e){t.exports=function(t,e){var n=!1;return function(){return n||(console.warn(e),n=!0),t.apply(this,arguments)}}},function(t,e){t.exports=function(t,e){var n=t.toLowerCase().replace(/[\.\(\)]/g,"");return"algoliasearch: `"+t+"` was replaced by `"+e+"`. Please see https://github.com/algolia/algoliasearch-client-javascript/wiki/Deprecated#"+n}},function(t,e,n){var r=n(2);t.exports=function t(e){var n=Array.prototype.slice.call(arguments);return r(n,(function(n){for(var r in n)n.hasOwnProperty(r)&&("object"==typeof e[r]&&"object"==typeof n[r]?e[r]=t({},e[r],n[r]):void 0!==n[r]&&(e[r]=n[r]))})),e}},function(t,e,n){"use strict";var r=Object.prototype.hasOwnProperty,i=Object.prototype.toString,o=Array.prototype.slice,s=n(37),a=Object.prototype.propertyIsEnumerable,u=!a.call({toString:null},"toString"),c=a.call((function(){}),"prototype"),l=["toString","toLocaleString","valueOf","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","constructor"],h=function(t){var e=t.constructor;return e&&e.prototype===t},f={$applicationCache:!0,$console:!0,$external:!0,$frame:!0,$frameElement:!0,$frames:!0,$innerHeight:!0,$innerWidth:!0,$outerHeight:!0,$outerWidth:!0,$pageXOffset:!0,$pageYOffset:!0,$parent:!0,$scrollLeft:!0,$scrollTop:!0,$scrollX:!0,$scrollY:!0,$self:!0,$webkitIndexedDB:!0,$webkitStorageInfo:!0,$window:!0},d=function(){if("undefined"==typeof window)return!1;for(var t in window)try{if(!f["$"+t]&&r.call(window,t)&&null!==window[t]&&"object"==typeof window[t])try{h(window[t])}catch(t){return!0}}catch(t){return!0}return!1}(),p=function(t){var e=null!==t&&"object"==typeof t,n="[object Function]"===i.call(t),o=s(t),a=e&&"[object String]"===i.call(t),f=[];if(!e&&!n&&!o)throw new TypeError("Object.keys called on a non-object");var p=c&&n;if(a&&t.length>0&&!r.call(t,0))for(var g=0;g<t.length;++g)f.push(String(g));if(o&&t.length>0)for(var m=0;m<t.length;++m)f.push(String(m));else for(var y in t)p&&"prototype"===y||!r.call(t,y)||f.push(String(y));if(u)for(var v=function(t){if("undefined"==typeof window||!d)return h(t);try{return h(t)}catch(t){return!1}}(t),b=0;b<l.length;++b)v&&"constructor"===l[b]||!r.call(t,l[b])||f.push(l[b]);return f};p.shim=function(){if(Object.keys){if(!function(){return 2===(Object.keys(arguments)||"").length}(1,2)){var t=Object.keys;Object.keys=function(e){return s(e)?t(o.call(e)):t(e)}}}else Object.keys=p;return Object.keys||p},t.exports=p},function(t,e,n){"use strict";var r=Object.prototype.toString;t.exports=function(t){var e=r.call(t),n="[object Arguments]"===e;return n||(n="[object Array]"!==e&&null!==t&&"object"==typeof t&&"number"==typeof t.length&&t.length>=0&&"[object Function]"===r.call(t.callee)),n}},function(t,e,n){(function(e){var r,i=n(8)("algoliasearch:src/hostIndexState.js"),o={state:{},set:function(t,e){return this.state[t]=e,this.state[t]},get:function(t){return this.state[t]||null}},s={set:function(t,n){o.set(t,n);try{var r=JSON.parse(e.localStorage["algoliasearch-client-js"]);return r[t]=n,e.localStorage["algoliasearch-client-js"]=JSON.stringify(r),r[t]}catch(e){return a(t,e)}},get:function(t){try{return JSON.parse(e.localStorage["algoliasearch-client-js"])[t]||null}catch(e){return a(t,e)}}};function a(t,n){return i("localStorage failed with",n),function(){try{e.localStorage.removeItem("algoliasearch-client-js")}catch(t){}}(),(r=o).get(t)}function u(t,e){return 1===arguments.length?r.get(t):r.set(t,e)}function c(){try{return"localStorage"in e&&null!==e.localStorage&&(e.localStorage["algoliasearch-client-js"]||e.localStorage.setItem("algoliasearch-client-js",JSON.stringify({})),!0)}catch(t){return!1}}r=c()?s:o,t.exports={get:u,set:u,supportsLocalStorage:c}}).call(e,n(4))},function(t,e,n){var r;function i(t){function n(){if(n.enabled){var t=n,i=+new Date,o=i-(r||i);t.diff=o,t.prev=r,t.curr=i,r=i;for(var s=new Array(arguments.length),a=0;a<s.length;a++)s[a]=arguments[a];s[0]=e.coerce(s[0]),"string"!=typeof s[0]&&s.unshift("%O");var u=0;s[0]=s[0].replace(/%([a-zA-Z%])/g,(function(n,r){if("%%"===n)return n;u++;var i=e.formatters[r];if("function"==typeof i){var o=s[u];n=i.call(t,o),s.splice(u,1),u--}return n})),e.formatArgs.call(t,s);var c=n.log||e.log||console.log.bind(console);c.apply(t,s)}}return n.namespace=t,n.enabled=e.enabled(t),n.useColors=e.useColors(),n.color=function(t){var n,r=0;for(n in t)r=(r<<5)-r+t.charCodeAt(n),r|=0;return e.colors[Math.abs(r)%e.colors.length]}(t),"function"==typeof e.init&&e.init(n),n}(e=t.exports=i.debug=i.default=i).coerce=function(t){return t instanceof Error?t.stack||t.message:t},e.disable=function(){e.enable("")},e.enable=function(t){e.save(t),e.names=[],e.skips=[];for(var n=("string"==typeof t?t:"").split(/[\s,]+/),r=n.length,i=0;i<r;i++)n[i]&&("-"===(t=n[i].replace(/\*/g,".*?"))[0]?e.skips.push(new RegExp("^"+t.substr(1)+"$")):e.names.push(new RegExp("^"+t+"$")))},e.enabled=function(t){var n,r;for(n=0,r=e.skips.length;n<r;n++)if(e.skips[n].test(t))return!1;for(n=0,r=e.names.length;n<r;n++)if(e.names[n].test(t))return!0;return!1},e.humanize=n(40),e.names=[],e.skips=[],e.formatters={}},function(t,e){var n=1e3,r=6e4,i=60*r,o=24*i;function s(t,e,n){if(!(t<e))return t<1.5*e?Math.floor(t/e)+" "+n:Math.ceil(t/e)+" "+n+"s"}t.exports=function(t,e){e=e||{};var a,u=typeof t;if("string"===u&&t.length>0)return function(t){if(!((t=String(t)).length>100)){var e=/^((?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|years?|yrs?|y)?$/i.exec(t);if(e){var s=parseFloat(e[1]);switch((e[2]||"ms").toLowerCase()){case"years":case"year":case"yrs":case"yr":case"y":return 315576e5*s;case"days":case"day":case"d":return s*o;case"hours":case"hour":case"hrs":case"hr":case"h":return s*i;case"minutes":case"minute":case"mins":case"min":case"m":return s*r;case"seconds":case"second":case"secs":case"sec":case"s":return s*n;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return s;default:return}}}}(t);if("number"===u&&!1===isNaN(t))return e.long?s(a=t,o,"day")||s(a,i,"hour")||s(a,r,"minute")||s(a,n,"second")||a+" ms":function(t){return t>=o?Math.round(t/o)+"d":t>=i?Math.round(t/i)+"h":t>=r?Math.round(t/r)+"m":t>=n?Math.round(t/n)+"s":t+"ms"}(t);throw new Error("val is not a non-empty string or a valid number. val="+JSON.stringify(t))}},function(t,e,n){"use strict";var r=n(42),i=r.Promise||n(43).Promise;t.exports=function(t,e){var o=n(12),s=n(5),a=n(44),u=n(46),c=n(47);function l(t,e,r){return(r=n(3)(r||{}))._ua=r._ua||l.ua,new f(t,e,r)}e=e||"",l.version=n(48),l.ua="Algolia for vanilla JavaScript "+e+l.version,l.initPlaces=c(l),r.__algolia={debug:n(8),algoliasearch:l};var h={hasXMLHttpRequest:"XMLHttpRequest"in r,hasXDomainRequest:"XDomainRequest"in r};function f(){t.apply(this,arguments)}return h.hasXMLHttpRequest&&(h.cors="withCredentials"in new XMLHttpRequest),o(f,t),f.prototype._request=function(t,e){return new i((function(n,r){if(h.cors||h.hasXDomainRequest){t=a(t,e.headers);var i,o,u=e.body,c=h.cors?new XMLHttpRequest:new XDomainRequest,l=!1;i=setTimeout(f,e.timeouts.connect),c.onprogress=function(){l||d()},"onreadystatechange"in c&&(c.onreadystatechange=function(){!l&&c.readyState>1&&d()}),c.onload=function(){if(!o){var t;clearTimeout(i);try{t={body:JSON.parse(c.responseText),responseText:c.responseText,statusCode:c.status,headers:c.getAllResponseHeaders&&c.getAllResponseHeaders()||{}}}catch(e){t=new s.UnparsableJSON({more:c.responseText})}t instanceof s.UnparsableJSON?r(t):n(t)}},c.onerror=function(t){o||(clearTimeout(i),r(new s.Network({more:t})))},c instanceof XMLHttpRequest?(c.open(e.method,t,!0),e.forceAuthHeaders&&(c.setRequestHeader("x-algolia-application-id",e.headers["x-algolia-application-id"]),c.setRequestHeader("x-algolia-api-key",e.headers["x-algolia-api-key"]))):c.open(e.method,t),h.cors&&(u&&("POST"===e.method?c.setRequestHeader("content-type","application/x-www-form-urlencoded"):c.setRequestHeader("content-type","application/json")),c.setRequestHeader("accept","application/json")),u?c.send(u):c.send()}else r(new s.Network("CORS not supported"));function f(){o=!0,c.abort(),r(new s.RequestTimeout)}function d(){l=!0,clearTimeout(i),i=setTimeout(f,e.timeouts.complete)}}))},f.prototype._request.fallback=function(t,e){return t=a(t,e.headers),new i((function(n,r){u(t,e,(function(t,e){t?r(t):n(e)}))}))},f.prototype._promise={reject:function(t){return i.reject(t)},resolve:function(t){return i.resolve(t)},delay:function(t){return new i((function(e){setTimeout(e,t)}))},all:function(t){return i.all(t)}},l}},function(t,e,n){(function(e){var n;n="undefined"!=typeof window?window:void 0!==e?e:"undefined"!=typeof self?self:{},t.exports=n}).call(e,n(4))},function(t,e,n){(function(e,n){
 +/*!
 + * @overview es6-promise - a tiny implementation of Promises/A+.
 + * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald)
 + * @license   Licensed under MIT license
 + *            See https://raw.githubusercontent.com/stefanpenner/es6-promise/master/LICENSE
 + * @version   v4.2.4+314e4831
-  */var r;r=function(){"use strict";function t(t){return"function"==typeof t}var r=Array.isArray?Array.isArray:function(t){return"[object Array]"===Object.prototype.toString.call(t)},i=0,o=void 0,s=void 0,a=function(t,e){p[i]=t,p[i+1]=e,2===(i+=2)&&(s?s(g):w())},u="undefined"!=typeof window?window:void 0,c=u||{},l=c.MutationObserver||c.WebKitMutationObserver,h="undefined"==typeof self&&void 0!==e&&"[object process]"==={}.toString.call(e),f="undefined"!=typeof Uint8ClampedArray&&"undefined"!=typeof importScripts&&"undefined"!=typeof MessageChannel;function d(){var t=setTimeout;return function(){return t(g,1)}}var p=new Array(1e3);function g(){for(var t=0;t<i;t+=2)(0,p[t])(p[t+1]),p[t]=void 0,p[t+1]=void 0;i=0}var m,y,v,b,w=void 0;function _(t,e){var n=this,r=new this.constructor(C);void 0===r[S]&&D(r);var i=n._state;if(i){var o=arguments[i-1];a((function(){return R(i,r,o,n._result)}))}else I(n,r,t,e);return r}function x(t){if(t&&"object"==typeof t&&t.constructor===this)return t;var e=new this(C);return k(e,t),e}h?w=function(){return e.nextTick(g)}:l?(y=0,v=new l(g),b=document.createTextNode(""),v.observe(b,{characterData:!0}),w=function(){b.data=y=++y%2}):f?((m=new MessageChannel).port1.onmessage=g,w=function(){return m.port2.postMessage(0)}):w=void 0===u?function(){try{var t=Function("return this")().require("vertx");return void 0!==(o=t.runOnLoop||t.runOnContext)?function(){o(g)}:d()}catch(t){return d()}}():d();var S=Math.random().toString(36).substring(2);function C(){}var A={error:null};function E(t){try{return t.then}catch(t){return A.error=t,A}}function T(e,n,r){n.constructor===e.constructor&&r===_&&n.constructor.resolve===x?function(t,e){1===e._state?N(t,e._result):2===e._state?j(t,e._result):I(e,void 0,(function(e){return k(t,e)}),(function(e){return j(t,e)}))}(e,n):r===A?(j(e,A.error),A.error=null):void 0===r?N(e,n):t(r)?function(t,e,n){a((function(t){var r=!1,i=function(t,e,n,r){try{t.call(e,n,r)}catch(t){return t}}(n,e,(function(n){r||(r=!0,e!==n?k(t,n):N(t,n))}),(function(e){r||(r=!0,j(t,e))}),t._label);!r&&i&&(r=!0,j(t,i))}),t)}(e,n,r):N(e,n)}function k(t,e){var n,r;t===e?j(t,new TypeError("You cannot resolve a promise with itself")):(r=typeof(n=e),null===n||"object"!==r&&"function"!==r?N(t,e):T(t,e,E(e)))}function O(t){t._onerror&&t._onerror(t._result),L(t)}function N(t,e){void 0===t._state&&(t._result=e,t._state=1,0!==t._subscribers.length&&a(L,t))}function j(t,e){void 0===t._state&&(t._state=2,t._result=e,a(O,t))}function I(t,e,n,r){var i=t._subscribers,o=i.length;t._onerror=null,i[o]=e,i[o+1]=n,i[o+2]=r,0===o&&t._state&&a(L,t)}function L(t){var e=t._subscribers,n=t._state;if(0!==e.length){for(var r=void 0,i=void 0,o=t._result,s=0;s<e.length;s+=3)r=e[s],i=e[s+n],r?R(n,r,i,o):i(o);t._subscribers.length=0}}function R(e,n,r,i){var o=t(r),s=void 0,a=void 0,u=void 0,c=void 0;if(o){if((s=function(t,e){try{return t(e)}catch(t){return A.error=t,A}}(r,i))===A?(c=!0,a=s.error,s.error=null):u=!0,n===s)return void j(n,new TypeError("A promises callback cannot return that same promise."))}else s=i,u=!0;void 0!==n._state||(o&&u?k(n,s):c?j(n,a):1===e?N(n,s):2===e&&j(n,s))}var P=0;function D(t){t[S]=P++,t._state=void 0,t._result=void 0,t._subscribers=[]}var q=function(){function t(t,e){this._instanceConstructor=t,this.promise=new t(C),this.promise[S]||D(this.promise),r(e)?(this.length=e.length,this._remaining=e.length,this._result=new Array(this.length),0===this.length?N(this.promise,this._result):(this.length=this.length||0,this._enumerate(e),0===this._remaining&&N(this.promise,this._result))):j(this.promise,new Error("Array Methods must be provided an Array"))}return t.prototype._enumerate=function(t){for(var e=0;void 0===this._state&&e<t.length;e++)this._eachEntry(t[e],e)},t.prototype._eachEntry=function(t,e){var n=this._instanceConstructor,r=n.resolve;if(r===x){var i=E(t);if(i===_&&void 0!==t._state)this._settledAt(t._state,e,t._result);else if("function"!=typeof i)this._remaining--,this._result[e]=t;else if(n===$){var o=new n(C);T(o,t,i),this._willSettleAt(o,e)}else this._willSettleAt(new n((function(e){return e(t)})),e)}else this._willSettleAt(r(t),e)},t.prototype._settledAt=function(t,e,n){var r=this.promise;void 0===r._state&&(this._remaining--,2===t?j(r,n):this._result[e]=n),0===this._remaining&&N(r,this._result)},t.prototype._willSettleAt=function(t,e){var n=this;I(t,void 0,(function(t){return n._settledAt(1,e,t)}),(function(t){return n._settledAt(2,e,t)}))},t}(),$=function(){function t(e){this[S]=P++,this._result=this._state=void 0,this._subscribers=[],C!==e&&("function"!=typeof e&&function(){throw new TypeError("You must pass a resolver function as the first argument to the promise constructor")}(),this instanceof t?function(t,e){try{e((function(e){k(t,e)}),(function(e){j(t,e)}))}catch(e){j(t,e)}}(this,e):function(){throw new TypeError("Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.")}())}return t.prototype.catch=function(t){return this.then(null,t)},t.prototype.finally=function(t){var e=this.constructor;return this.then((function(n){return e.resolve(t()).then((function(){return n}))}),(function(n){return e.resolve(t()).then((function(){throw n}))}))},t}();return $.prototype.then=_,$.all=function(t){return new q(this,t).promise},$.race=function(t){var e=this;return r(t)?new e((function(n,r){for(var i=t.length,o=0;o<i;o++)e.resolve(t[o]).then(n,r)})):new e((function(t,e){return e(new TypeError("You must pass an array to race."))}))},$.resolve=x,$.reject=function(t){var e=new this(C);return j(e,t),e},$._setScheduler=function(t){s=t},$._setAsap=function(t){a=t},$._asap=a,$.polyfill=function(){var t=void 0;if(void 0!==n)t=n;else if("undefined"!=typeof self)t=self;else try{t=Function("return this")()}catch(t){throw new Error("polyfill failed because global object is unavailable in this environment")}var e=t.Promise;if(e){var r=null;try{r=Object.prototype.toString.call(e.resolve())}catch(t){}if("[object Promise]"===r&&!e.cast)return}t.Promise=$},$.Promise=$,$},t.exports=r()}).call(e,n(9),n(4))},function(t,e,n){"use strict";t.exports=function(t,e){return/\?/.test(t)?t+="&":t+="?",t+r(e)};var r=n(45)},function(t,e,n){"use strict";var r=function(t){switch(typeof t){case"string":return t;case"boolean":return t?"true":"false";case"number":return isFinite(t)?t:"";default:return""}};t.exports=function(t,e,n,a){return e=e||"&",n=n||"=",null===t&&(t=void 0),"object"==typeof t?o(s(t),(function(s){var a=encodeURIComponent(r(s))+n;return i(t[s])?o(t[s],(function(t){return a+encodeURIComponent(r(t))})).join(e):a+encodeURIComponent(r(t[s]))})).join(e):a?encodeURIComponent(r(a))+n+encodeURIComponent(r(t)):""};var i=Array.isArray||function(t){return"[object Array]"===Object.prototype.toString.call(t)};function o(t,e){if(t.map)return t.map(e);for(var n=[],r=0;r<t.length;r++)n.push(e(t[r],r));return n}var s=Object.keys||function(t){var e=[];for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&e.push(n);return e}},function(t,e,n){"use strict";t.exports=function(t,e,n){if("GET"===e.method){e.debug("JSONP: start");var o=!1,s=!1;i+=1;var a=document.getElementsByTagName("head")[0],u=document.createElement("script"),c="algoliaJSONP_"+i,l=!1;window[c]=function(t){!function(){try{delete window[c],delete window[c+"_loaded"]}catch(t){window[c]=window[c+"_loaded"]=void 0}}(),s?e.debug("JSONP: Late answer, ignoring"):(o=!0,d(),n(null,{body:t,responseText:JSON.stringify(t)}))},t+="&callback="+c,e.jsonBody&&e.jsonBody.params&&(t+="&"+e.jsonBody.params);var h=setTimeout((function(){e.debug("JSONP: Script timeout"),s=!0,d(),n(new r.RequestTimeout)}),e.timeouts.complete);u.onreadystatechange=function(){"loaded"!==this.readyState&&"complete"!==this.readyState||f()},u.onload=f,u.onerror=function(){e.debug("JSONP: Script error"),l||s||(d(),n(new r.JSONPScriptError))},u.async=!0,u.defer=!0,u.src=t,a.appendChild(u)}else n(new Error("Method "+e.method+" "+t+" is not supported by JSONP."));function f(){e.debug("JSONP: success"),l||s||(l=!0,o||(e.debug("JSONP: Fail. Script loaded but did not call the callback"),d(),n(new r.JSONPScriptFail)))}function d(){clearTimeout(h),u.onload=null,u.onreadystatechange=null,u.onerror=null,a.removeChild(u)}};var r=n(5),i=0},function(t,e,n){t.exports=function(t){return function(e,i,o){var s=n(3);(o=o&&s(o)||{}).hosts=o.hosts||["places-dsn.algolia.net","places-1.algolianet.com","places-2.algolianet.com","places-3.algolianet.com"],0!==arguments.length&&"object"!=typeof e&&void 0!==e||(e="",i="",o._allowEmptyCredentials=!0);var a=t(e,i,o),u=a.initIndex("places");return u.search=r("query","/1/places/query"),u.getObject=function(t,e){return this.as._jsonRequest({method:"GET",url:"/1/places/"+encodeURIComponent(t),hostType:"read",callback:e})},u}};var r=n(13)},function(t,e,n){"use strict";t.exports="3.30.0"},function(t,e,n){"use strict";t.exports=n(50)},function(t,e,n){"use strict";var r=n(15);n(1).element=r;var i=n(0);i.isArray=r.isArray,i.isFunction=r.isFunction,i.isObject=r.isPlainObject,i.bind=r.proxy,i.each=function(t,e){r.each(t,(function(t,n){return e(n,t)}))},i.map=r.map,i.mixin=r.extend,i.Event=r.Event;var o=n(51),s=n(16);function a(t,e,n,a){n=i.isArray(n)?n:[].slice.call(arguments,2);var u=r(t).each((function(t,i){var u=r(i),c=new s({el:u}),l=a||new o({input:u,eventBus:c,dropdownMenuContainer:e.dropdownMenuContainer,hint:void 0===e.hint||!!e.hint,minLength:e.minLength,autoselect:e.autoselect,autoselectOnBlur:e.autoselectOnBlur,tabAutocomplete:e.tabAutocomplete,openOnFocus:e.openOnFocus,templates:e.templates,debug:e.debug,clearOnSelected:e.clearOnSelected,cssClasses:e.cssClasses,datasets:n,keyboardShortcuts:e.keyboardShortcuts,appendTo:e.appendTo,autoWidth:e.autoWidth});u.data("aaAutocomplete",l)}));return u.autocomplete={},i.each(["open","close","getVal","setVal","destroy","getWrapper"],(function(t){u.autocomplete[t]=function(){var e,n=arguments;return u.each((function(i,o){var s=r(o).data("aaAutocomplete");e=s[t].apply(s,n)})),e}})),u}a.sources=o.sources,a.escapeHighlightedString=i.escapeHighlightedString;var u="autocomplete"in window,c=window.autocomplete;a.noConflict=function(){return u?window.autocomplete=c:delete window.autocomplete,a},t.exports=a},function(t,e,n){"use strict";var r=n(0),i=n(1),o=n(16),s=n(52),a=n(59),u=n(17),c=n(11);function l(t){var e,n;if((t=t||{}).input||r.error("missing input"),this.isActivated=!1,this.debug=!!t.debug,this.autoselect=!!t.autoselect,this.autoselectOnBlur=!!t.autoselectOnBlur,this.openOnFocus=!!t.openOnFocus,this.minLength=r.isNumber(t.minLength)?t.minLength:1,this.autoWidth=void 0===t.autoWidth||!!t.autoWidth,this.clearOnSelected=!!t.clearOnSelected,this.tabAutocomplete=void 0===t.tabAutocomplete||!!t.tabAutocomplete,t.hint=!!t.hint,t.hint&&t.appendTo)throw new Error("[autocomplete.js] hint and appendTo options can't be used at the same time");this.css=t.css=r.mixin({},c,t.appendTo?c.appendTo:{}),this.cssClasses=t.cssClasses=r.mixin({},c.defaultClasses,t.cssClasses||{}),this.cssClasses.prefix=t.cssClasses.formattedPrefix=r.formatPrefix(this.cssClasses.prefix,this.cssClasses.noPrefix),this.listboxId=t.listboxId=[this.cssClasses.root,"listbox",r.getUniqueId()].join("-");var s=function(t){var e,n,o,s;e=i.element(t.input),n=i.element(u.wrapper.replace("%ROOT%",t.cssClasses.root)).css(t.css.wrapper),t.appendTo||"block"!==e.css("display")||"table"!==e.parent().css("display")||n.css("display","table-cell");var a,c=u.dropdown.replace("%PREFIX%",t.cssClasses.prefix).replace("%DROPDOWN_MENU%",t.cssClasses.dropdownMenu);o=i.element(c).css(t.css.dropdown).attr({role:"listbox",id:t.listboxId}),t.templates&&t.templates.dropdownMenu&&o.html(r.templatify(t.templates.dropdownMenu)()),(s=e.clone().css(t.css.hint).css((a=e,{backgroundAttachment:a.css("background-attachment"),backgroundClip:a.css("background-clip"),backgroundColor:a.css("background-color"),backgroundImage:a.css("background-image"),backgroundOrigin:a.css("background-origin"),backgroundPosition:a.css("background-position"),backgroundRepeat:a.css("background-repeat"),backgroundSize:a.css("background-size")}))).val("").addClass(r.className(t.cssClasses.prefix,t.cssClasses.hint,!0)).removeAttr("id name placeholder required").prop("readonly",!0).attr({"aria-hidden":"true",autocomplete:"off",spellcheck:"false",tabindex:-1}),s.removeData&&s.removeData(),e.data("aaAttrs",{"aria-autocomplete":e.attr("aria-autocomplete"),"aria-expanded":e.attr("aria-expanded"),"aria-owns":e.attr("aria-owns"),autocomplete:e.attr("autocomplete"),dir:e.attr("dir"),role:e.attr("role"),spellcheck:e.attr("spellcheck"),style:e.attr("style"),type:e.attr("type")}),e.addClass(r.className(t.cssClasses.prefix,t.cssClasses.input,!0)).attr({autocomplete:"off",spellcheck:!1,role:"combobox","aria-autocomplete":t.datasets&&t.datasets[0]&&t.datasets[0].displayKey?"both":"list","aria-expanded":"false","aria-label":t.ariaLabel,"aria-owns":t.listboxId}).css(t.hint?t.css.input:t.css.inputWithNoHint);try{e.attr("dir")||e.attr("dir","auto")}catch(t){}return(n=t.appendTo?n.appendTo(i.element(t.appendTo).eq(0)).eq(0):e.wrap(n).parent()).prepend(t.hint?s:null).append(o),{wrapper:n,input:e,hint:s,menu:o}}(t);this.$node=s.wrapper;var a=this.$input=s.input;e=s.menu,n=s.hint,t.dropdownMenuContainer&&i.element(t.dropdownMenuContainer).css("position","relative").append(e.css("top","0")),a.on("blur.aa",(function(t){var n=document.activeElement;r.isMsie()&&(e[0]===n||e[0].contains(n))&&(t.preventDefault(),t.stopImmediatePropagation(),r.defer((function(){a.focus()})))})),e.on("mousedown.aa",(function(t){t.preventDefault()})),this.eventBus=t.eventBus||new o({el:a}),this.dropdown=new l.Dropdown({appendTo:t.appendTo,wrapper:this.$node,menu:e,datasets:t.datasets,templates:t.templates,cssClasses:t.cssClasses,minLength:this.minLength}).onSync("suggestionClicked",this._onSuggestionClicked,this).onSync("cursorMoved",this._onCursorMoved,this).onSync("cursorRemoved",this._onCursorRemoved,this).onSync("opened",this._onOpened,this).onSync("closed",this._onClosed,this).onSync("shown",this._onShown,this).onSync("empty",this._onEmpty,this).onSync("redrawn",this._onRedrawn,this).onAsync("datasetRendered",this._onDatasetRendered,this),this.input=new l.Input({input:a,hint:n}).onSync("focused",this._onFocused,this).onSync("blurred",this._onBlurred,this).onSync("enterKeyed",this._onEnterKeyed,this).onSync("tabKeyed",this._onTabKeyed,this).onSync("escKeyed",this._onEscKeyed,this).onSync("upKeyed",this._onUpKeyed,this).onSync("downKeyed",this._onDownKeyed,this).onSync("leftKeyed",this._onLeftKeyed,this).onSync("rightKeyed",this._onRightKeyed,this).onSync("queryChanged",this._onQueryChanged,this).onSync("whitespaceChanged",this._onWhitespaceChanged,this),this._bindKeyboardShortcuts(t),this._setLanguageDirection()}r.mixin(l.prototype,{_bindKeyboardShortcuts:function(t){if(t.keyboardShortcuts){var e=this.$input,n=[];r.each(t.keyboardShortcuts,(function(t){"string"==typeof t&&(t=t.toUpperCase().charCodeAt(0)),n.push(t)})),i.element(document).keydown((function(t){var r=t.target||t.srcElement,i=r.tagName;if(!r.isContentEditable&&"INPUT"!==i&&"SELECT"!==i&&"TEXTAREA"!==i){var o=t.which||t.keyCode;-1!==n.indexOf(o)&&(e.focus(),t.stopPropagation(),t.preventDefault())}}))}},_onSuggestionClicked:function(t,e){var n;(n=this.dropdown.getDatumForSuggestion(e))&&this._select(n)},_onCursorMoved:function(t,e){var n=this.dropdown.getDatumForCursor(),r=this.dropdown.getCurrentCursor().attr("id");this.input.setActiveDescendant(r),n&&(e&&this.input.setInputValue(n.value,!0),this.eventBus.trigger("cursorchanged",n.raw,n.datasetName))},_onCursorRemoved:function(){this.input.resetInputValue(),this._updateHint(),this.eventBus.trigger("cursorremoved")},_onDatasetRendered:function(){this._updateHint(),this.eventBus.trigger("updated")},_onOpened:function(){this._updateHint(),this.input.expand(),this.eventBus.trigger("opened")},_onEmpty:function(){this.eventBus.trigger("empty")},_onRedrawn:function(){this.$node.css("top","0px"),this.$node.css("left","0px");var t=this.$input[0].getBoundingClientRect();this.autoWidth&&this.$node.css("width",t.width+"px");var e=this.$node[0].getBoundingClientRect(),n=t.bottom-e.top;this.$node.css("top",n+"px");var r=t.left-e.left;this.$node.css("left",r+"px"),this.eventBus.trigger("redrawn")},_onShown:function(){this.eventBus.trigger("shown"),this.autoselect&&this.dropdown.cursorTopSuggestion()},_onClosed:function(){this.input.clearHint(),this.input.removeActiveDescendant(),this.input.collapse(),this.eventBus.trigger("closed")},_onFocused:function(){if(this.isActivated=!0,this.openOnFocus){var t=this.input.getQuery();t.length>=this.minLength?this.dropdown.update(t):this.dropdown.empty(),this.dropdown.open()}},_onBlurred:function(){var t,e;t=this.dropdown.getDatumForCursor(),e=this.dropdown.getDatumForTopSuggestion(),this.debug||(this.autoselectOnBlur&&t?this._select(t):this.autoselectOnBlur&&e?this._select(e):(this.isActivated=!1,this.dropdown.empty(),this.dropdown.close()))},_onEnterKeyed:function(t,e){var n,r;n=this.dropdown.getDatumForCursor(),r=this.dropdown.getDatumForTopSuggestion(),n?(this._select(n),e.preventDefault()):this.autoselect&&r&&(this._select(r),e.preventDefault())},_onTabKeyed:function(t,e){var n;this.tabAutocomplete?(n=this.dropdown.getDatumForCursor())?(this._select(n),e.preventDefault()):this._autocomplete(!0):this.dropdown.close()},_onEscKeyed:function(){this.dropdown.close(),this.input.resetInputValue()},_onUpKeyed:function(){var t=this.input.getQuery();this.dropdown.isEmpty&&t.length>=this.minLength?this.dropdown.update(t):this.dropdown.moveCursorUp(),this.dropdown.open()},_onDownKeyed:function(){var t=this.input.getQuery();this.dropdown.isEmpty&&t.length>=this.minLength?this.dropdown.update(t):this.dropdown.moveCursorDown(),this.dropdown.open()},_onLeftKeyed:function(){"rtl"===this.dir&&this._autocomplete()},_onRightKeyed:function(){"ltr"===this.dir&&this._autocomplete()},_onQueryChanged:function(t,e){this.input.clearHintIfInvalid(),e.length>=this.minLength?this.dropdown.update(e):this.dropdown.empty(),this.dropdown.open(),this._setLanguageDirection()},_onWhitespaceChanged:function(){this._updateHint(),this.dropdown.open()},_setLanguageDirection:function(){var t=this.input.getLanguageDirection();this.dir!==t&&(this.dir=t,this.$node.css("direction",t),this.dropdown.setLanguageDirection(t))},_updateHint:function(){var t,e,n,i,o;(t=this.dropdown.getDatumForTopSuggestion())&&this.dropdown.isVisible()&&!this.input.hasOverflow()?(e=this.input.getInputValue(),n=s.normalizeQuery(e),i=r.escapeRegExChars(n),(o=new RegExp("^(?:"+i+")(.+$)","i").exec(t.value))?this.input.setHint(e+o[1]):this.input.clearHint()):this.input.clearHint()},_autocomplete:function(t){var e,n,r,i;e=this.input.getHint(),n=this.input.getQuery(),r=t||this.input.isCursorAtEnd(),e&&n!==e&&r&&((i=this.dropdown.getDatumForTopSuggestion())&&this.input.setInputValue(i.value),this.eventBus.trigger("autocompleted",i.raw,i.datasetName))},_select:function(t){void 0!==t.value&&this.input.setQuery(t.value),this.clearOnSelected?this.setVal(""):this.input.setInputValue(t.value,!0),this._setLanguageDirection(),!1===this.eventBus.trigger("selected",t.raw,t.datasetName).isDefaultPrevented()&&(this.dropdown.close(),r.defer(r.bind(this.dropdown.empty,this.dropdown)))},open:function(){if(!this.isActivated){var t=this.input.getInputValue();t.length>=this.minLength?this.dropdown.update(t):this.dropdown.empty()}this.dropdown.open()},close:function(){this.dropdown.close()},setVal:function(t){t=r.toStr(t),this.isActivated?this.input.setInputValue(t):(this.input.setQuery(t),this.input.setInputValue(t,!0)),this._setLanguageDirection()},getVal:function(){return this.input.getQuery()},destroy:function(){var t,e,n;this.input.destroy(),this.dropdown.destroy(),t=this.$node,e=this.cssClasses,n=t.find(r.className(e.prefix,e.input)),r.each(n.data("aaAttrs"),(function(t,e){void 0===t?n.removeAttr(e):n.attr(e,t)})),n.detach().removeClass(r.className(e.prefix,e.input,!0)).insertAfter(t),n.removeData&&n.removeData("aaAttrs"),t.remove(),this.$node=null},getWrapper:function(){return this.dropdown.$container[0]}}),l.Dropdown=a,l.Input=s,l.sources=n(61),t.exports=l},function(t,e,n){"use strict";var r;r={9:"tab",27:"esc",37:"left",39:"right",13:"enter",38:"up",40:"down"};var i=n(0),o=n(1),s=n(10);function a(t){var e,n,s,a,u,c=this;(t=t||{}).input||i.error("input is missing"),e=i.bind(this._onBlur,this),n=i.bind(this._onFocus,this),s=i.bind(this._onKeydown,this),a=i.bind(this._onInput,this),this.$hint=o.element(t.hint),this.$input=o.element(t.input).on("blur.aa",e).on("focus.aa",n).on("keydown.aa",s),0===this.$hint.length&&(this.setHint=this.getHint=this.clearHint=this.clearHintIfInvalid=i.noop),i.isMsie()?this.$input.on("keydown.aa keypress.aa cut.aa paste.aa",(function(t){r[t.which||t.keyCode]||i.defer(i.bind(c._onInput,c,t))})):this.$input.on("input.aa",a),this.query=this.$input.val(),this.$overflowHelper=(u=this.$input,o.element('<pre aria-hidden="true"></pre>').css({position:"absolute",visibility:"hidden",whiteSpace:"pre",fontFamily:u.css("font-family"),fontSize:u.css("font-size"),fontStyle:u.css("font-style"),fontVariant:u.css("font-variant"),fontWeight:u.css("font-weight"),wordSpacing:u.css("word-spacing"),letterSpacing:u.css("letter-spacing"),textIndent:u.css("text-indent"),textRendering:u.css("text-rendering"),textTransform:u.css("text-transform")}).insertAfter(u))}function u(t){return t.altKey||t.ctrlKey||t.metaKey||t.shiftKey}a.normalizeQuery=function(t){return(t||"").replace(/^\s*/g,"").replace(/\s{2,}/g," ")},i.mixin(a.prototype,s,{_onBlur:function(){this.resetInputValue(),this.$input.removeAttr("aria-activedescendant"),this.trigger("blurred")},_onFocus:function(){this.trigger("focused")},_onKeydown:function(t){var e=r[t.which||t.keyCode];this._managePreventDefault(e,t),e&&this._shouldTrigger(e,t)&&this.trigger(e+"Keyed",t)},_onInput:function(){this._checkInputValue()},_managePreventDefault:function(t,e){var n,r,i;switch(t){case"tab":r=this.getHint(),i=this.getInputValue(),n=r&&r!==i&&!u(e);break;case"up":case"down":n=!u(e);break;default:n=!1}n&&e.preventDefault()},_shouldTrigger:function(t,e){var n;switch(t){case"tab":n=!u(e);break;default:n=!0}return n},_checkInputValue:function(){var t,e,n,r,i;t=this.getInputValue(),r=t,i=this.query,n=!(!(e=a.normalizeQuery(r)===a.normalizeQuery(i))||!this.query)&&this.query.length!==t.length,this.query=t,e?n&&this.trigger("whitespaceChanged",this.query):this.trigger("queryChanged",this.query)},focus:function(){this.$input.focus()},blur:function(){this.$input.blur()},getQuery:function(){return this.query},setQuery:function(t){this.query=t},getInputValue:function(){return this.$input.val()},setInputValue:function(t,e){void 0===t&&(t=this.query),this.$input.val(t),e?this.clearHint():this._checkInputValue()},expand:function(){this.$input.attr("aria-expanded","true")},collapse:function(){this.$input.attr("aria-expanded","false")},setActiveDescendant:function(t){this.$input.attr("aria-activedescendant",t)},removeActiveDescendant:function(){this.$input.removeAttr("aria-activedescendant")},resetInputValue:function(){this.setInputValue(this.query,!0)},getHint:function(){return this.$hint.val()},setHint:function(t){this.$hint.val(t)},clearHint:function(){this.setHint("")},clearHintIfInvalid:function(){var t,e,n;n=(t=this.getInputValue())!==(e=this.getHint())&&0===e.indexOf(t),""!==t&&n&&!this.hasOverflow()||this.clearHint()},getLanguageDirection:function(){return(this.$input.css("direction")||"ltr").toLowerCase()},hasOverflow:function(){var t=this.$input.width()-2;return this.$overflowHelper.text(this.getInputValue()),this.$overflowHelper.width()>=t},isCursorAtEnd:function(){var t,e,n;return t=this.$input.val().length,e=this.$input[0].selectionStart,i.isNumber(e)?e===t:!document.selection||((n=document.selection.createRange()).moveStart("character",-t),t===n.text.length)},destroy:function(){this.$hint.off(".aa"),this.$input.off(".aa"),this.$hint=this.$input=this.$overflowHelper=null}}),t.exports=a},function(t,e,n){"use strict";var r,i,o,s=[n(54),n(55),n(56),n(57),n(58)],a=-1,u=[],c=!1;function l(){r&&i&&(r=!1,i.length?u=i.concat(u):a=-1,u.length&&h())}function h(){if(!r){c=!1,r=!0;for(var t=u.length,e=setTimeout(l);t;){for(i=u,u=[];i&&++a<t;)i[a].run();a=-1,t=u.length}i=null,a=-1,r=!1,clearTimeout(e)}}for(var f=-1,d=s.length;++f<d;)if(s[f]&&s[f].test&&s[f].test()){o=s[f].install(h);break}function p(t,e){this.fun=t,this.array=e}p.prototype.run=function(){var t=this.fun,e=this.array;switch(e.length){case 0:return t();case 1:return t(e[0]);case 2:return t(e[0],e[1]);case 3:return t(e[0],e[1],e[2]);default:return t.apply(null,e)}},t.exports=function(t){var e=new Array(arguments.length-1);if(arguments.length>1)for(var n=1;n<arguments.length;n++)e[n-1]=arguments[n];u.push(new p(t,e)),c||r||(c=!0,o())}},function(t,e,n){"use strict";(function(t){e.test=function(){return void 0!==t&&!t.browser},e.install=function(e){return function(){t.nextTick(e)}}}).call(e,n(9))},function(t,e,n){"use strict";(function(t){var n=t.MutationObserver||t.WebKitMutationObserver;e.test=function(){return n},e.install=function(e){var r=0,i=new n(e),o=t.document.createTextNode("");return i.observe(o,{characterData:!0}),function(){o.data=r=++r%2}}}).call(e,n(4))},function(t,e,n){"use strict";(function(t){e.test=function(){return!t.setImmediate&&void 0!==t.MessageChannel},e.install=function(e){var n=new t.MessageChannel;return n.port1.onmessage=e,function(){n.port2.postMessage(0)}}}).call(e,n(4))},function(t,e,n){"use strict";(function(t){e.test=function(){return"document"in t&&"onreadystatechange"in t.document.createElement("script")},e.install=function(e){return function(){var n=t.document.createElement("script");return n.onreadystatechange=function(){e(),n.onreadystatechange=null,n.parentNode.removeChild(n),n=null},t.document.documentElement.appendChild(n),e}}}).call(e,n(4))},function(t,e,n){"use strict";e.test=function(){return!0},e.install=function(t){return function(){setTimeout(t,0)}}},function(t,e,n){"use strict";var r=n(0),i=n(1),o=n(10),s=n(60),a=n(11);function u(t){var e,n,o,s=this;(t=t||{}).menu||r.error("menu is required"),r.isArray(t.datasets)||r.isObject(t.datasets)||r.error("1 or more datasets required"),t.datasets||r.error("datasets is required"),this.isOpen=!1,this.isEmpty=!0,this.minLength=t.minLength||0,this.templates={},this.appendTo=t.appendTo||!1,this.css=r.mixin({},a,t.appendTo?a.appendTo:{}),this.cssClasses=t.cssClasses=r.mixin({},a.defaultClasses,t.cssClasses||{}),this.cssClasses.prefix=t.cssClasses.formattedPrefix||r.formatPrefix(this.cssClasses.prefix,this.cssClasses.noPrefix),e=r.bind(this._onSuggestionClick,this),n=r.bind(this._onSuggestionMouseEnter,this),o=r.bind(this._onSuggestionMouseLeave,this);var c=r.className(this.cssClasses.prefix,this.cssClasses.suggestion);this.$menu=i.element(t.menu).on("mouseenter.aa",c,n).on("mouseleave.aa",c,o).on("click.aa",c,e),this.$container=t.appendTo?t.wrapper:this.$menu,t.templates&&t.templates.header&&(this.templates.header=r.templatify(t.templates.header),this.$menu.prepend(this.templates.header())),t.templates&&t.templates.empty&&(this.templates.empty=r.templatify(t.templates.empty),this.$empty=i.element('<div class="'+r.className(this.cssClasses.prefix,this.cssClasses.empty,!0)+'"></div>'),this.$menu.append(this.$empty),this.$empty.hide()),this.datasets=r.map(t.datasets,(function(e){return function(t,e,n){return new u.Dataset(r.mixin({$menu:t,cssClasses:n},e))}(s.$menu,e,t.cssClasses)})),r.each(this.datasets,(function(t){var e=t.getRoot();e&&0===e.parent().length&&s.$menu.append(e),t.onSync("rendered",s._onRendered,s)})),t.templates&&t.templates.footer&&(this.templates.footer=r.templatify(t.templates.footer),this.$menu.append(this.templates.footer()));var l=this;i.element(window).resize((function(){l._redraw()}))}r.mixin(u.prototype,o,{_onSuggestionClick:function(t){this.trigger("suggestionClicked",i.element(t.currentTarget))},_onSuggestionMouseEnter:function(t){var e=i.element(t.currentTarget);if(!e.hasClass(r.className(this.cssClasses.prefix,this.cssClasses.cursor,!0))){this._removeCursor();var n=this;setTimeout((function(){n._setCursor(e,!1)}),0)}},_onSuggestionMouseLeave:function(t){t.relatedTarget&&i.element(t.relatedTarget).closest("."+r.className(this.cssClasses.prefix,this.cssClasses.cursor,!0)).length>0||(this._removeCursor(),this.trigger("cursorRemoved"))},_onRendered:function(t,e){if(this.isEmpty=r.every(this.datasets,(function(t){return t.isEmpty()})),this.isEmpty)if(e.length>=this.minLength&&this.trigger("empty"),this.$empty)if(e.length<this.minLength)this._hide();else{var n=this.templates.empty({query:this.datasets[0]&&this.datasets[0].query});this.$empty.html(n),this.$empty.show(),this._show()}else r.any(this.datasets,(function(t){return t.templates&&t.templates.empty}))?e.length<this.minLength?this._hide():this._show():this._hide();else this.isOpen&&(this.$empty&&(this.$empty.empty(),this.$empty.hide()),e.length>=this.minLength?this._show():this._hide());this.trigger("datasetRendered")},_hide:function(){this.$container.hide()},_show:function(){this.$container.css("display","block"),this._redraw(),this.trigger("shown")},_redraw:function(){this.isOpen&&this.appendTo&&this.trigger("redrawn")},_getSuggestions:function(){return this.$menu.find(r.className(this.cssClasses.prefix,this.cssClasses.suggestion))},_getCursor:function(){return this.$menu.find(r.className(this.cssClasses.prefix,this.cssClasses.cursor)).first()},_setCursor:function(t,e){t.first().addClass(r.className(this.cssClasses.prefix,this.cssClasses.cursor,!0)).attr("aria-selected","true"),this.trigger("cursorMoved",e)},_removeCursor:function(){this._getCursor().removeClass(r.className(this.cssClasses.prefix,this.cssClasses.cursor,!0)).removeAttr("aria-selected")},_moveCursor:function(t){var e,n,r,i;this.isOpen&&(n=this._getCursor(),e=this._getSuggestions(),this._removeCursor(),-1!=(r=((r=e.index(n)+t)+1)%(e.length+1)-1)?(r<-1&&(r=e.length-1),this._setCursor(i=e.eq(r),!0),this._ensureVisible(i)):this.trigger("cursorRemoved"))},_ensureVisible:function(t){var e,n,r,i;n=(e=t.position().top)+t.height()+parseInt(t.css("margin-top"),10)+parseInt(t.css("margin-bottom"),10),r=this.$menu.scrollTop(),i=this.$menu.height()+parseInt(this.$menu.css("padding-top"),10)+parseInt(this.$menu.css("padding-bottom"),10),e<0?this.$menu.scrollTop(r+e):i<n&&this.$menu.scrollTop(r+(n-i))},close:function(){this.isOpen&&(this.isOpen=!1,this._removeCursor(),this._hide(),this.trigger("closed"))},open:function(){this.isOpen||(this.isOpen=!0,this.isEmpty||this._show(),this.trigger("opened"))},setLanguageDirection:function(t){this.$menu.css("ltr"===t?this.css.ltr:this.css.rtl)},moveCursorUp:function(){this._moveCursor(-1)},moveCursorDown:function(){this._moveCursor(1)},getDatumForSuggestion:function(t){var e=null;return t.length&&(e={raw:s.extractDatum(t),value:s.extractValue(t),datasetName:s.extractDatasetName(t)}),e},getCurrentCursor:function(){return this._getCursor().first()},getDatumForCursor:function(){return this.getDatumForSuggestion(this._getCursor().first())},getDatumForTopSuggestion:function(){return this.getDatumForSuggestion(this._getSuggestions().first())},cursorTopSuggestion:function(){this._setCursor(this._getSuggestions().first(),!1)},update:function(t){r.each(this.datasets,(function(e){e.update(t)}))},empty:function(){r.each(this.datasets,(function(t){t.clear()})),this.isEmpty=!0},isVisible:function(){return this.isOpen&&!this.isEmpty},destroy:function(){this.$menu.off(".aa"),this.$menu=null,r.each(this.datasets,(function(t){t.destroy()}))}}),u.Dataset=s,t.exports=u},function(t,e,n){"use strict";var r=n(0),i=n(1),o=n(17),s=n(11),a=n(10);function u(t){var e,n,a,u;(t=t||{}).templates=t.templates||{},t.source||r.error("missing source"),t.name&&(e=t.name,!/^[_a-zA-Z0-9-]+$/.test(e))&&r.error("invalid dataset name: "+t.name),this.query=null,this._isEmpty=!0,this.highlight=!!t.highlight,this.name=void 0===t.name||null===t.name?r.getUniqueId():t.name,this.source=t.source,this.displayFn=(n=(n=t.display||t.displayKey)||"value",r.isFunction(n)?n:function(t){return t[n]}),this.debounce=t.debounce,this.cache=!1!==t.cache,this.templates=(a=t.templates,u=this.displayFn,{empty:a.empty&&r.templatify(a.empty),header:a.header&&r.templatify(a.header),footer:a.footer&&r.templatify(a.footer),suggestion:a.suggestion||function(t){return"<p>"+u(t)+"</p>"}}),this.css=r.mixin({},s,t.appendTo?s.appendTo:{}),this.cssClasses=t.cssClasses=r.mixin({},s.defaultClasses,t.cssClasses||{}),this.cssClasses.prefix=t.cssClasses.formattedPrefix||r.formatPrefix(this.cssClasses.prefix,this.cssClasses.noPrefix);var c=r.className(this.cssClasses.prefix,this.cssClasses.dataset);this.$el=t.$menu&&t.$menu.find(c+"-"+this.name).length>0?i.element(t.$menu.find(c+"-"+this.name)[0]):i.element(o.dataset.replace("%CLASS%",this.name).replace("%PREFIX%",this.cssClasses.prefix).replace("%DATASET%",this.cssClasses.dataset)),this.$menu=t.$menu,this.clearCachedSuggestions()}u.extractDatasetName=function(t){return i.element(t).data("aaDataset")},u.extractValue=function(t){return i.element(t).data("aaValue")},u.extractDatum=function(t){var e=i.element(t).data("aaDatum");return"string"==typeof e&&(e=JSON.parse(e)),e},r.mixin(u.prototype,a,{_render:function(t,e){if(this.$el){var n,s=this,a=[].slice.call(arguments,2);if(this.$el.empty(),n=e&&e.length,this._isEmpty=!n,!n&&this.templates.empty)this.$el.html(u.apply(this,a)).prepend(s.templates.header?l.apply(this,a):null).append(s.templates.footer?h.apply(this,a):null);else if(n)this.$el.html(c.apply(this,a)).prepend(s.templates.header?l.apply(this,a):null).append(s.templates.footer?h.apply(this,a):null);else if(e&&!Array.isArray(e))throw new TypeError("suggestions must be an array");this.$menu&&this.$menu.addClass(this.cssClasses.prefix+(n?"with":"without")+"-"+this.name).removeClass(this.cssClasses.prefix+(n?"without":"with")+"-"+this.name),this.trigger("rendered",t)}function u(){var e=[].slice.call(arguments,0);return e=[{query:t,isEmpty:!0}].concat(e),s.templates.empty.apply(this,e)}function c(){var t,n,a=[].slice.call(arguments,0),u=this,c=o.suggestions.replace("%PREFIX%",this.cssClasses.prefix).replace("%SUGGESTIONS%",this.cssClasses.suggestions);return t=i.element(c).css(this.css.suggestions),n=r.map(e,l),t.append.apply(t,n),t;function l(t){var e,n=o.suggestion.replace("%PREFIX%",u.cssClasses.prefix).replace("%SUGGESTION%",u.cssClasses.suggestion);return(e=i.element(n).attr({role:"option",id:["option",Math.floor(1e8*Math.random())].join("-")}).append(s.templates.suggestion.apply(this,[t].concat(a)))).data("aaDataset",s.name),e.data("aaValue",s.displayFn(t)||void 0),e.data("aaDatum",JSON.stringify(t)),e.children().each((function(){i.element(this).css(u.css.suggestionChild)})),e}}function l(){var e=[].slice.call(arguments,0);return e=[{query:t,isEmpty:!n}].concat(e),s.templates.header.apply(this,e)}function h(){var e=[].slice.call(arguments,0);return e=[{query:t,isEmpty:!n}].concat(e),s.templates.footer.apply(this,e)}},getRoot:function(){return this.$el},update:function(t){function e(e){if(!this.canceled&&t===this.query){var n=[].slice.call(arguments,1);this.cacheSuggestions(t,e,n),this._render.apply(this,[t,e].concat(n))}}if(this.query=t,this.canceled=!1,this.shouldFetchFromCache(t))e.apply(this,[this.cachedSuggestions].concat(this.cachedRenderExtraArgs));else{var n=this,r=function(){n.canceled||n.source(t,e.bind(n))};this.debounce?(clearTimeout(this.debounceTimeout),this.debounceTimeout=setTimeout((function(){n.debounceTimeout=null,r()}),this.debounce)):r()}},cacheSuggestions:function(t,e,n){this.cachedQuery=t,this.cachedSuggestions=e,this.cachedRenderExtraArgs=n},shouldFetchFromCache:function(t){return this.cache&&this.cachedQuery===t&&this.cachedSuggestions&&this.cachedSuggestions.length},clearCachedSuggestions:function(){delete this.cachedQuery,delete this.cachedSuggestions,delete this.cachedRenderExtraArgs},cancel:function(){this.canceled=!0},clear:function(){this.cancel(),this.$el.empty(),this.trigger("rendered","")},isEmpty:function(){return this._isEmpty},destroy:function(){this.clearCachedSuggestions(),this.$el=null}}),t.exports=u},function(t,e,n){"use strict";t.exports={hits:n(62),popularIn:n(63)}},function(t,e,n){"use strict";var r=n(0),i=n(18),o=n(19);t.exports=function(t,e){var n=o(t.as._ua);return n&&n[0]>=3&&n[1]>20&&((e=e||{}).additionalUA="autocomplete.js "+i),function(n,i){t.search(n,e,(function(t,e){t?r.error(t.message):i(e.hits,e)}))}}},function(t,e,n){"use strict";var r=n(0),i=n(18),o=n(19);t.exports=function(t,e,n,s){var a=o(t.as._ua);if(a&&a[0]>=3&&a[1]>20&&((e=e||{}).additionalUA="autocomplete.js "+i),!n.source)return r.error("Missing 'source' key");var u=r.isFunction(n.source)?n.source:function(t){return t[n.source]};if(!n.index)return r.error("Missing 'index' key");var c=n.index;return s=s||{},function(a,l){t.search(a,e,(function(t,a){if(t)r.error(t.message);else{if(a.hits.length>0){var h=a.hits[0],f=r.mixin({hitsPerPage:0},n);delete f.source,delete f.index;var d=o(c.as._ua);return d&&d[0]>=3&&d[1]>20&&(e.additionalUA="autocomplete.js "+i),void c.search(u(h),f,(function(t,e){if(t)r.error(t.message);else{var n=[];if(s.includeAll){var i=s.allTitle||"All departments";n.push(r.mixin({facet:{value:i,count:e.nbHits}},r.cloneDeep(h)))}r.each(e.facets,(function(t,e){r.each(t,(function(t,i){n.push(r.mixin({facet:{facet:e,value:i,count:t}},r.cloneDeep(h)))}))}));for(var o=1;o<a.hits.length;++o)n.push(a.hits[o]);l(n,a)}}))}l([])}}))}}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r="algolia-docsearch-suggestion",i={suggestion:'\n  <a class="'+r+"\n    {{#isCategoryHeader}}"+r+"__main{{/isCategoryHeader}}\n    {{#isSubCategoryHeader}}"+r+'__secondary{{/isSubCategoryHeader}}\n    "\n    aria-label="Link to the result"\n    href="{{{url}}}"\n    >\n    <div class="'+r+'--category-header">\n        <span class="'+r+'--category-header-lvl0">{{{category}}}</span>\n    </div>\n    <div class="'+r+'--wrapper">\n      <div class="'+r+'--subcategory-column">\n        <span class="'+r+'--subcategory-column-text">{{{subcategory}}}</span>\n      </div>\n      {{#isTextOrSubcategoryNonEmpty}}\n      <div class="'+r+'--content">\n        <div class="'+r+'--subcategory-inline">{{{subcategory}}}</div>\n        <div class="'+r+'--title">{{{title}}}</div>\n        {{#text}}<div class="'+r+'--text">{{{text}}}</div>{{/text}}\n      </div>\n      {{/isTextOrSubcategoryNonEmpty}}\n    </div>\n  </a>\n  ',suggestionSimple:'\n  <div class="'+r+"\n    {{#isCategoryHeader}}"+r+"__main{{/isCategoryHeader}}\n    {{#isSubCategoryHeader}}"+r+'__secondary{{/isSubCategoryHeader}}\n    suggestion-layout-simple\n  ">\n    <div class="'+r+'--category-header">\n        {{^isLvl0}}\n        <span class="'+r+"--category-header-lvl0 "+r+'--category-header-item">{{{category}}}</span>\n          {{^isLvl1}}\n          {{^isLvl1EmptyOrDuplicate}}\n          <span class="'+r+"--category-header-lvl1 "+r+'--category-header-item">\n              {{{subcategory}}}\n          </span>\n          {{/isLvl1EmptyOrDuplicate}}\n          {{/isLvl1}}\n        {{/isLvl0}}\n        <div class="'+r+"--title "+r+'--category-header-item">\n            {{#isLvl2}}\n                {{{title}}}\n            {{/isLvl2}}\n            {{#isLvl1}}\n                {{{subcategory}}}\n            {{/isLvl1}}\n            {{#isLvl0}}\n                {{{category}}}\n            {{/isLvl0}}\n        </div>\n    </div>\n    <div class="'+r+'--wrapper">\n      {{#text}}\n      <div class="'+r+'--content">\n        <div class="'+r+'--text">{{{text}}}</div>\n      </div>\n      {{/text}}\n    </div>\n  </div>\n  ',footer:'\n    <div class="algolia-docsearch-footer">\n      Search by <a class="algolia-docsearch-footer--logo" href="https://www.algolia.com/docsearch">Algolia</a>\n    </div>\n  ',empty:'\n  <div class="'+r+'">\n    <div class="'+r+'--wrapper">\n        <div class="'+r+"--content "+r+'--no-results">\n            <div class="'+r+'--title">\n                <div class="'+r+'--text">\n                    No results found for query <b>"{{query}}"</b>\n                </div>\n            </div>\n        </div>\n    </div>\n  </div>\n  ',searchBox:'\n  <form novalidate="novalidate" onsubmit="return false;" class="searchbox">\n    <div role="search" class="searchbox__wrapper">\n      <input id="docsearch" type="search" name="search" placeholder="Search the docs" autocomplete="off" required="required" class="searchbox__input"/>\n      <button type="submit" title="Submit your search query." class="searchbox__submit" >\n        <svg width=12 height=12 role="img" aria-label="Search">\n          <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#sbx-icon-search-13"></use>\n        </svg>\n      </button>\n      <button type="reset" title="Clear the search query." class="searchbox__reset hide">\n        <svg width=12 height=12 role="img" aria-label="Reset">\n          <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#sbx-icon-clear-3"></use>\n        </svg>\n      </button>\n    </div>\n</form>\n\n<div class="svg-icons" style="height: 0; width: 0; position: absolute; visibility: hidden">\n  <svg xmlns="http://www.w3.org/2000/svg">\n    <symbol id="sbx-icon-clear-3" viewBox="0 0 40 40"><path d="M16.228 20L1.886 5.657 0 3.772 3.772 0l1.885 1.886L20 16.228 34.343 1.886 36.228 0 40 3.772l-1.886 1.885L23.772 20l14.342 14.343L40 36.228 36.228 40l-1.885-1.886L20 23.772 5.657 38.114 3.772 40 0 36.228l1.886-1.885L16.228 20z" fill-rule="evenodd"></symbol>\n    <symbol id="sbx-icon-search-13" viewBox="0 0 40 40"><path d="M26.806 29.012a16.312 16.312 0 0 1-10.427 3.746C7.332 32.758 0 25.425 0 16.378 0 7.334 7.333 0 16.38 0c9.045 0 16.378 7.333 16.378 16.38 0 3.96-1.406 7.593-3.746 10.426L39.547 37.34c.607.608.61 1.59-.004 2.203a1.56 1.56 0 0 1-2.202.004L26.807 29.012zm-10.427.627c7.322 0 13.26-5.938 13.26-13.26 0-7.324-5.938-13.26-13.26-13.26-7.324 0-13.26 5.936-13.26 13.26 0 7.322 5.936 13.26 13.26 13.26z" fill-rule="evenodd"></symbol>\n  </svg>\n</div>\n  '};e.default=i},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r,i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},o=n(20),s=(r=o)&&r.__esModule?r:{default:r},a={mergeKeyWithParent:function(t,e){if(void 0===t[e])return t;if("object"!==i(t[e]))return t;var n=s.default.extend({},t,t[e]);return delete n[e],n},groupBy:function(t,e){var n={};return s.default.each(t,(function(t,r){if(void 0===r[e])throw new Error("[groupBy]: Object has no key "+e);var i=r[e];"string"==typeof i&&(i=i.toLowerCase()),Object.prototype.hasOwnProperty.call(n,i)||(n[i]=[]),n[i].push(r)})),n},values:function(t){return Object.keys(t).map((function(e){return t[e]}))},flatten:function(t){var e=[];return t.forEach((function(t){Array.isArray(t)?t.forEach((function(t){e.push(t)})):e.push(t)})),e},flattenAndFlagFirst:function(t,e){var n=this.values(t).map((function(t){return t.map((function(t,n){return t[e]=0===n,t}))}));return this.flatten(n)},compact:function(t){var e=[];return t.forEach((function(t){t&&e.push(t)})),e},getHighlightedValue:function(t,e){return t._highlightResult&&t._highlightResult.hierarchy_camel&&t._highlightResult.hierarchy_camel[e]&&t._highlightResult.hierarchy_camel[e].matchLevel&&"none"!==t._highlightResult.hierarchy_camel[e].matchLevel&&t._highlightResult.hierarchy_camel[e].value?t._highlightResult.hierarchy_camel[e].value:t._highlightResult&&t._highlightResult&&t._highlightResult[e]&&t._highlightResult[e].value?t._highlightResult[e].value:t[e]},getSnippetedValue:function(t,e){if(!t._snippetResult||!t._snippetResult[e]||!t._snippetResult[e].value)return t[e];var n=t._snippetResult[e].value;return n[0]!==n[0].toUpperCase()&&(n="…"+n),-1===[".","!","?"].indexOf(n[n.length-1])&&(n+="…"),n},deepClone:function(t){return JSON.parse(JSON.stringify(t))}};e.default=a}])},t.exports=r()},function(t,e,n){n(0),n(10)},function(t,e,n){var r,i,o;!function(s,a){a=a.bind(null,s,s.document),t.exports?a(n(0)):(i=[n(0)],void 0===(o="function"==typeof(r=a)?r.apply(e,i):r)||(t.exports=o))}(window,(function(t,e,n){"use strict";var r,i,o={};function s(t,n,r){if(!o[t]){var i=e.createElement(n?"link":"script"),s=e.getElementsByTagName("script")[0];n?(i.rel="stylesheet",i.href=t):(i.onload=function(){i.onerror=null,i.onload=null,r()},i.onerror=i.onload,i.src=t),o[t]=!0,o[i.src||i.href]=!0,s.parentNode.insertBefore(i,s)}}e.addEventListener&&(i=/\(|\)|\s|'/,r=function(t,n){var r=e.createElement("img");r.onload=function(){r.onload=null,r.onerror=null,r=null,n()},r.onerror=r.onload,r.src=t,r&&r.complete&&r.onload&&r.onload()},addEventListener("lazybeforeunveil",(function(t){var e,o,a;if(t.detail.instance==n&&!t.defaultPrevented){var u=t.target;if("none"==u.preload&&(u.preload=u.getAttribute("data-preload")||"auto"),null!=u.getAttribute("data-autoplay"))if(u.getAttribute("data-expand")&&!u.autoplay)try{u.play()}catch(t){}else requestAnimationFrame((function(){u.setAttribute("data-expand","-10"),n.aC(u,n.cfg.lazyClass)}));(e=u.getAttribute("data-link"))&&s(e,!0),(e=u.getAttribute("data-script"))&&(t.detail.firesLoad=!0,s(e,null,(function(){t.detail.firesLoad=!1,n.fire(u,"_lazyloaded",{},!0,!0)}))),(e=u.getAttribute("data-require"))&&(n.cfg.requireJs?n.cfg.requireJs([e]):s(e)),(o=u.getAttribute("data-bg"))&&(t.detail.firesLoad=!0,r(o,(function(){u.style.backgroundImage="url("+(i.test(o)?JSON.stringify(o):o)+")",t.detail.firesLoad=!1,n.fire(u,"_lazyloaded",{},!0,!0)}))),(a=u.getAttribute("data-poster"))&&(t.detail.firesLoad=!0,r(a,(function(){u.poster=a,t.detail.firesLoad=!1,n.fire(u,"_lazyloaded",{},!0,!0)})))}}),!1))}))},function(t,e){for(var n=document.getElementsByClassName("js-toggle"),r=0;r<n.length;r++)n[r].addEventListener("click",i,!1);function i(){for(var t=this.dataset.target.split(" "),e=document.querySelector(".mobilemenu:not(.dn)"),n=document.querySelector(".desktopmenu:not(.dn)"),r=document.querySelector(".desktopmenu:not(.dn)"),i=0;i<t.length;i++){var o=document.querySelectorAll(t[i]);[].forEach.call(o,(function(t){return t.classList.contains("dn")?t.classList.remove("dn"):t.classList.add("dn"),!1})),e&&e.classList.add("dn"),n&&n.classList.add("dn"),r&&r.classList.remove("db")}}},function(t,e,n){n(13)},function(t,e,n){!function(){"use strict";var t,e,n="data-scrolldir",r="down",i=document.documentElement,o=window,s=document.body,a=Array(32),u=0;function c(){var c=o.scrollY||o.pageYOffset,l=t.timeStamp,h="down"===r?Math.max:Math.min,f=s.scrollHeight-o.innerHeight;if(c=Math.max(0,c),c=Math.min(f,c),a.unshift({y:c,t:l}),a.pop(),c===h(e,c))return u=l,void(e=c);var d=l-512;if(u<d){e=c;for(var p=0;p<32&&a[p]&&!(a[p].t<d);p+=1)e=h(e,a[p].y)}Math.abs(c-e)>64&&(e=c,u=l,r="down"===r?"up":"down",i.setAttribute(n,r))}function l(e){return t=e,o.requestAnimationFrame(c)}e=o.scrollY||o.pageYOffset,i.setAttribute(n,r),o.addEventListener("scroll",l)}()},function(t,e){!function(){"use strict";if("querySelector"in document&&"addEventListener"in window&&Array.prototype.forEach){var t=document.querySelectorAll("#TableOfContents ul li a");[].forEach.call(t,(function(t){t.addEventListener("click",(function(e){e.preventDefault();var n=t.getAttribute("href"),r=document.querySelector(n),i=t.getAttribute("data-speed");r&&function(t,e){var n,r=window.pageYOffset,i=t.offsetTop,o=(i-r)/(e/16);n=o>=0?function(){var t=window.pageYOffset;(t>=i-o||window.innerHeight+t>=document.body.offsetHeight)&&clearInterval(s)}:function(){window.pageYOffset<=(i||0)&&clearInterval(s)};var s=setInterval((function(){window.scrollBy(0,o),n()}),16)}(r,i||500)}),!1)}))}}()},function(t,e){var n,r=document.querySelectorAll("[data-toggle-tab]"),i=document.querySelectorAll("[data-pane]");function o(t){if(t.target){t.preventDefault();var e=t.currentTarget.getAttribute("data-toggle-tab")}else e=t;window.localStorage&&window.localStorage.setItem("configLangPref",e);for(var n=document.querySelectorAll("[data-toggle-tab='"+e+"']"),o=document.querySelectorAll("[data-pane='"+e+"']"),s=0;s<r.length;s++)r[s].classList.remove("active"),i[s].classList.remove("active");for(s=0;s<n.length;s++)n[s].classList.add("active"),o[s].classList.add("active")}for(n=0;n<r.length;n++)r[n].addEventListener("click",o);window.localStorage.getItem("configLangPref")&&o(window.localStorage.getItem("configLangPref"))},function(t,e){document.documentElement.className=document.documentElement.className.replace(/\bno-js\b/,"js")}]);
++ */var r;r=function(){"use strict";function t(t){return"function"==typeof t}var r=Array.isArray?Array.isArray:function(t){return"[object Array]"===Object.prototype.toString.call(t)},i=0,o=void 0,s=void 0,a=function(t,e){p[i]=t,p[i+1]=e,2===(i+=2)&&(s?s(g):w())},u="undefined"!=typeof window?window:void 0,c=u||{},l=c.MutationObserver||c.WebKitMutationObserver,h="undefined"==typeof self&&void 0!==e&&"[object process]"==={}.toString.call(e),f="undefined"!=typeof Uint8ClampedArray&&"undefined"!=typeof importScripts&&"undefined"!=typeof MessageChannel;function d(){var t=setTimeout;return function(){return t(g,1)}}var p=new Array(1e3);function g(){for(var t=0;t<i;t+=2)(0,p[t])(p[t+1]),p[t]=void 0,p[t+1]=void 0;i=0}var m,y,v,b,w=void 0;function _(t,e){var n=this,r=new this.constructor(C);void 0===r[S]&&D(r);var i=n._state;if(i){var o=arguments[i-1];a((function(){return R(i,r,o,n._result)}))}else I(n,r,t,e);return r}function x(t){if(t&&"object"==typeof t&&t.constructor===this)return t;var e=new this(C);return k(e,t),e}h?w=function(){return e.nextTick(g)}:l?(y=0,v=new l(g),b=document.createTextNode(""),v.observe(b,{characterData:!0}),w=function(){b.data=y=++y%2}):f?((m=new MessageChannel).port1.onmessage=g,w=function(){return m.port2.postMessage(0)}):w=void 0===u?function(){try{var t=Function("return this")().require("vertx");return void 0!==(o=t.runOnLoop||t.runOnContext)?function(){o(g)}:d()}catch(t){return d()}}():d();var S=Math.random().toString(36).substring(2);function C(){}var A={error:null};function E(t){try{return t.then}catch(t){return A.error=t,A}}function T(e,n,r){n.constructor===e.constructor&&r===_&&n.constructor.resolve===x?function(t,e){1===e._state?N(t,e._result):2===e._state?j(t,e._result):I(e,void 0,(function(e){return k(t,e)}),(function(e){return j(t,e)}))}(e,n):r===A?(j(e,A.error),A.error=null):void 0===r?N(e,n):t(r)?function(t,e,n){a((function(t){var r=!1,i=function(t,e,n,r){try{t.call(e,n,r)}catch(t){return t}}(n,e,(function(n){r||(r=!0,e!==n?k(t,n):N(t,n))}),(function(e){r||(r=!0,j(t,e))}),t._label);!r&&i&&(r=!0,j(t,i))}),t)}(e,n,r):N(e,n)}function k(t,e){var n,r;t===e?j(t,new TypeError("You cannot resolve a promise with itself")):(r=typeof(n=e),null===n||"object"!==r&&"function"!==r?N(t,e):T(t,e,E(e)))}function O(t){t._onerror&&t._onerror(t._result),L(t)}function N(t,e){void 0===t._state&&(t._result=e,t._state=1,0!==t._subscribers.length&&a(L,t))}function j(t,e){void 0===t._state&&(t._state=2,t._result=e,a(O,t))}function I(t,e,n,r){var i=t._subscribers,o=i.length;t._onerror=null,i[o]=e,i[o+1]=n,i[o+2]=r,0===o&&t._state&&a(L,t)}function L(t){var e=t._subscribers,n=t._state;if(0!==e.length){for(var r=void 0,i=void 0,o=t._result,s=0;s<e.length;s+=3)r=e[s],i=e[s+n],r?R(n,r,i,o):i(o);t._subscribers.length=0}}function R(e,n,r,i){var o=t(r),s=void 0,a=void 0,u=void 0,c=void 0;if(o){if((s=function(t,e){try{return t(e)}catch(t){return A.error=t,A}}(r,i))===A?(c=!0,a=s.error,s.error=null):u=!0,n===s)return void j(n,new TypeError("A promises callback cannot return that same promise."))}else s=i,u=!0;void 0!==n._state||(o&&u?k(n,s):c?j(n,a):1===e?N(n,s):2===e&&j(n,s))}var P=0;function D(t){t[S]=P++,t._state=void 0,t._result=void 0,t._subscribers=[]}var q=function(){function t(t,e){this._instanceConstructor=t,this.promise=new t(C),this.promise[S]||D(this.promise),r(e)?(this.length=e.length,this._remaining=e.length,this._result=new Array(this.length),0===this.length?N(this.promise,this._result):(this.length=this.length||0,this._enumerate(e),0===this._remaining&&N(this.promise,this._result))):j(this.promise,new Error("Array Methods must be provided an Array"))}return t.prototype._enumerate=function(t){for(var e=0;void 0===this._state&&e<t.length;e++)this._eachEntry(t[e],e)},t.prototype._eachEntry=function(t,e){var n=this._instanceConstructor,r=n.resolve;if(r===x){var i=E(t);if(i===_&&void 0!==t._state)this._settledAt(t._state,e,t._result);else if("function"!=typeof i)this._remaining--,this._result[e]=t;else if(n===$){var o=new n(C);T(o,t,i),this._willSettleAt(o,e)}else this._willSettleAt(new n((function(e){return e(t)})),e)}else this._willSettleAt(r(t),e)},t.prototype._settledAt=function(t,e,n){var r=this.promise;void 0===r._state&&(this._remaining--,2===t?j(r,n):this._result[e]=n),0===this._remaining&&N(r,this._result)},t.prototype._willSettleAt=function(t,e){var n=this;I(t,void 0,(function(t){return n._settledAt(1,e,t)}),(function(t){return n._settledAt(2,e,t)}))},t}(),$=function(){function t(e){this[S]=P++,this._result=this._state=void 0,this._subscribers=[],C!==e&&("function"!=typeof e&&function(){throw new TypeError("You must pass a resolver function as the first argument to the promise constructor")}(),this instanceof t?function(t,e){try{e((function(e){k(t,e)}),(function(e){j(t,e)}))}catch(e){j(t,e)}}(this,e):function(){throw new TypeError("Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.")}())}return t.prototype.catch=function(t){return this.then(null,t)},t.prototype.finally=function(t){var e=this.constructor;return this.then((function(n){return e.resolve(t()).then((function(){return n}))}),(function(n){return e.resolve(t()).then((function(){throw n}))}))},t}();return $.prototype.then=_,$.all=function(t){return new q(this,t).promise},$.race=function(t){var e=this;return r(t)?new e((function(n,r){for(var i=t.length,o=0;o<i;o++)e.resolve(t[o]).then(n,r)})):new e((function(t,e){return e(new TypeError("You must pass an array to race."))}))},$.resolve=x,$.reject=function(t){var e=new this(C);return j(e,t),e},$._setScheduler=function(t){s=t},$._setAsap=function(t){a=t},$._asap=a,$.polyfill=function(){var t=void 0;if(void 0!==n)t=n;else if("undefined"!=typeof self)t=self;else try{t=Function("return this")()}catch(t){throw new Error("polyfill failed because global object is unavailable in this environment")}var e=t.Promise;if(e){var r=null;try{r=Object.prototype.toString.call(e.resolve())}catch(t){}if("[object Promise]"===r&&!e.cast)return}t.Promise=$},$.Promise=$,$},t.exports=r()}).call(e,n(9),n(4))},function(t,e,n){"use strict";t.exports=function(t,e){return/\?/.test(t)?t+="&":t+="?",t+r(e)};var r=n(45)},function(t,e,n){"use strict";var r=function(t){switch(typeof t){case"string":return t;case"boolean":return t?"true":"false";case"number":return isFinite(t)?t:"";default:return""}};t.exports=function(t,e,n,a){return e=e||"&",n=n||"=",null===t&&(t=void 0),"object"==typeof t?o(s(t),(function(s){var a=encodeURIComponent(r(s))+n;return i(t[s])?o(t[s],(function(t){return a+encodeURIComponent(r(t))})).join(e):a+encodeURIComponent(r(t[s]))})).join(e):a?encodeURIComponent(r(a))+n+encodeURIComponent(r(t)):""};var i=Array.isArray||function(t){return"[object Array]"===Object.prototype.toString.call(t)};function o(t,e){if(t.map)return t.map(e);for(var n=[],r=0;r<t.length;r++)n.push(e(t[r],r));return n}var s=Object.keys||function(t){var e=[];for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&e.push(n);return e}},function(t,e,n){"use strict";t.exports=function(t,e,n){if("GET"===e.method){e.debug("JSONP: start");var o=!1,s=!1;i+=1;var a=document.getElementsByTagName("head")[0],u=document.createElement("script"),c="algoliaJSONP_"+i,l=!1;window[c]=function(t){!function(){try{delete window[c],delete window[c+"_loaded"]}catch(t){window[c]=window[c+"_loaded"]=void 0}}(),s?e.debug("JSONP: Late answer, ignoring"):(o=!0,d(),n(null,{body:t,responseText:JSON.stringify(t)}))},t+="&callback="+c,e.jsonBody&&e.jsonBody.params&&(t+="&"+e.jsonBody.params);var h=setTimeout((function(){e.debug("JSONP: Script timeout"),s=!0,d(),n(new r.RequestTimeout)}),e.timeouts.complete);u.onreadystatechange=function(){"loaded"!==this.readyState&&"complete"!==this.readyState||f()},u.onload=f,u.onerror=function(){e.debug("JSONP: Script error"),l||s||(d(),n(new r.JSONPScriptError))},u.async=!0,u.defer=!0,u.src=t,a.appendChild(u)}else n(new Error("Method "+e.method+" "+t+" is not supported by JSONP."));function f(){e.debug("JSONP: success"),l||s||(l=!0,o||(e.debug("JSONP: Fail. Script loaded but did not call the callback"),d(),n(new r.JSONPScriptFail)))}function d(){clearTimeout(h),u.onload=null,u.onreadystatechange=null,u.onerror=null,a.removeChild(u)}};var r=n(5),i=0},function(t,e,n){t.exports=function(t){return function(e,i,o){var s=n(3);(o=o&&s(o)||{}).hosts=o.hosts||["places-dsn.algolia.net","places-1.algolianet.com","places-2.algolianet.com","places-3.algolianet.com"],0!==arguments.length&&"object"!=typeof e&&void 0!==e||(e="",i="",o._allowEmptyCredentials=!0);var a=t(e,i,o),u=a.initIndex("places");return u.search=r("query","/1/places/query"),u.getObject=function(t,e){return this.as._jsonRequest({method:"GET",url:"/1/places/"+encodeURIComponent(t),hostType:"read",callback:e})},u}};var r=n(13)},function(t,e,n){"use strict";t.exports="3.30.0"},function(t,e,n){"use strict";t.exports=n(50)},function(t,e,n){"use strict";var r=n(15);n(1).element=r;var i=n(0);i.isArray=r.isArray,i.isFunction=r.isFunction,i.isObject=r.isPlainObject,i.bind=r.proxy,i.each=function(t,e){r.each(t,(function(t,n){return e(n,t)}))},i.map=r.map,i.mixin=r.extend,i.Event=r.Event;var o=n(51),s=n(16);function a(t,e,n,a){n=i.isArray(n)?n:[].slice.call(arguments,2);var u=r(t).each((function(t,i){var u=r(i),c=new s({el:u}),l=a||new o({input:u,eventBus:c,dropdownMenuContainer:e.dropdownMenuContainer,hint:void 0===e.hint||!!e.hint,minLength:e.minLength,autoselect:e.autoselect,autoselectOnBlur:e.autoselectOnBlur,tabAutocomplete:e.tabAutocomplete,openOnFocus:e.openOnFocus,templates:e.templates,debug:e.debug,clearOnSelected:e.clearOnSelected,cssClasses:e.cssClasses,datasets:n,keyboardShortcuts:e.keyboardShortcuts,appendTo:e.appendTo,autoWidth:e.autoWidth});u.data("aaAutocomplete",l)}));return u.autocomplete={},i.each(["open","close","getVal","setVal","destroy","getWrapper"],(function(t){u.autocomplete[t]=function(){var e,n=arguments;return u.each((function(i,o){var s=r(o).data("aaAutocomplete");e=s[t].apply(s,n)})),e}})),u}a.sources=o.sources,a.escapeHighlightedString=i.escapeHighlightedString;var u="autocomplete"in window,c=window.autocomplete;a.noConflict=function(){return u?window.autocomplete=c:delete window.autocomplete,a},t.exports=a},function(t,e,n){"use strict";var r=n(0),i=n(1),o=n(16),s=n(52),a=n(59),u=n(17),c=n(11);function l(t){var e,n;if((t=t||{}).input||r.error("missing input"),this.isActivated=!1,this.debug=!!t.debug,this.autoselect=!!t.autoselect,this.autoselectOnBlur=!!t.autoselectOnBlur,this.openOnFocus=!!t.openOnFocus,this.minLength=r.isNumber(t.minLength)?t.minLength:1,this.autoWidth=void 0===t.autoWidth||!!t.autoWidth,this.clearOnSelected=!!t.clearOnSelected,this.tabAutocomplete=void 0===t.tabAutocomplete||!!t.tabAutocomplete,t.hint=!!t.hint,t.hint&&t.appendTo)throw new Error("[autocomplete.js] hint and appendTo options can't be used at the same time");this.css=t.css=r.mixin({},c,t.appendTo?c.appendTo:{}),this.cssClasses=t.cssClasses=r.mixin({},c.defaultClasses,t.cssClasses||{}),this.cssClasses.prefix=t.cssClasses.formattedPrefix=r.formatPrefix(this.cssClasses.prefix,this.cssClasses.noPrefix),this.listboxId=t.listboxId=[this.cssClasses.root,"listbox",r.getUniqueId()].join("-");var s=function(t){var e,n,o,s;e=i.element(t.input),n=i.element(u.wrapper.replace("%ROOT%",t.cssClasses.root)).css(t.css.wrapper),t.appendTo||"block"!==e.css("display")||"table"!==e.parent().css("display")||n.css("display","table-cell");var a,c=u.dropdown.replace("%PREFIX%",t.cssClasses.prefix).replace("%DROPDOWN_MENU%",t.cssClasses.dropdownMenu);o=i.element(c).css(t.css.dropdown).attr({role:"listbox",id:t.listboxId}),t.templates&&t.templates.dropdownMenu&&o.html(r.templatify(t.templates.dropdownMenu)()),(s=e.clone().css(t.css.hint).css((a=e,{backgroundAttachment:a.css("background-attachment"),backgroundClip:a.css("background-clip"),backgroundColor:a.css("background-color"),backgroundImage:a.css("background-image"),backgroundOrigin:a.css("background-origin"),backgroundPosition:a.css("background-position"),backgroundRepeat:a.css("background-repeat"),backgroundSize:a.css("background-size")}))).val("").addClass(r.className(t.cssClasses.prefix,t.cssClasses.hint,!0)).removeAttr("id name placeholder required").prop("readonly",!0).attr({"aria-hidden":"true",autocomplete:"off",spellcheck:"false",tabindex:-1}),s.removeData&&s.removeData(),e.data("aaAttrs",{"aria-autocomplete":e.attr("aria-autocomplete"),"aria-expanded":e.attr("aria-expanded"),"aria-owns":e.attr("aria-owns"),autocomplete:e.attr("autocomplete"),dir:e.attr("dir"),role:e.attr("role"),spellcheck:e.attr("spellcheck"),style:e.attr("style"),type:e.attr("type")}),e.addClass(r.className(t.cssClasses.prefix,t.cssClasses.input,!0)).attr({autocomplete:"off",spellcheck:!1,role:"combobox","aria-autocomplete":t.datasets&&t.datasets[0]&&t.datasets[0].displayKey?"both":"list","aria-expanded":"false","aria-label":t.ariaLabel,"aria-owns":t.listboxId}).css(t.hint?t.css.input:t.css.inputWithNoHint);try{e.attr("dir")||e.attr("dir","auto")}catch(t){}return(n=t.appendTo?n.appendTo(i.element(t.appendTo).eq(0)).eq(0):e.wrap(n).parent()).prepend(t.hint?s:null).append(o),{wrapper:n,input:e,hint:s,menu:o}}(t);this.$node=s.wrapper;var a=this.$input=s.input;e=s.menu,n=s.hint,t.dropdownMenuContainer&&i.element(t.dropdownMenuContainer).css("position","relative").append(e.css("top","0")),a.on("blur.aa",(function(t){var n=document.activeElement;r.isMsie()&&(e[0]===n||e[0].contains(n))&&(t.preventDefault(),t.stopImmediatePropagation(),r.defer((function(){a.focus()})))})),e.on("mousedown.aa",(function(t){t.preventDefault()})),this.eventBus=t.eventBus||new o({el:a}),this.dropdown=new l.Dropdown({appendTo:t.appendTo,wrapper:this.$node,menu:e,datasets:t.datasets,templates:t.templates,cssClasses:t.cssClasses,minLength:this.minLength}).onSync("suggestionClicked",this._onSuggestionClicked,this).onSync("cursorMoved",this._onCursorMoved,this).onSync("cursorRemoved",this._onCursorRemoved,this).onSync("opened",this._onOpened,this).onSync("closed",this._onClosed,this).onSync("shown",this._onShown,this).onSync("empty",this._onEmpty,this).onSync("redrawn",this._onRedrawn,this).onAsync("datasetRendered",this._onDatasetRendered,this),this.input=new l.Input({input:a,hint:n}).onSync("focused",this._onFocused,this).onSync("blurred",this._onBlurred,this).onSync("enterKeyed",this._onEnterKeyed,this).onSync("tabKeyed",this._onTabKeyed,this).onSync("escKeyed",this._onEscKeyed,this).onSync("upKeyed",this._onUpKeyed,this).onSync("downKeyed",this._onDownKeyed,this).onSync("leftKeyed",this._onLeftKeyed,this).onSync("rightKeyed",this._onRightKeyed,this).onSync("queryChanged",this._onQueryChanged,this).onSync("whitespaceChanged",this._onWhitespaceChanged,this),this._bindKeyboardShortcuts(t),this._setLanguageDirection()}r.mixin(l.prototype,{_bindKeyboardShortcuts:function(t){if(t.keyboardShortcuts){var e=this.$input,n=[];r.each(t.keyboardShortcuts,(function(t){"string"==typeof t&&(t=t.toUpperCase().charCodeAt(0)),n.push(t)})),i.element(document).keydown((function(t){var r=t.target||t.srcElement,i=r.tagName;if(!r.isContentEditable&&"INPUT"!==i&&"SELECT"!==i&&"TEXTAREA"!==i){var o=t.which||t.keyCode;-1!==n.indexOf(o)&&(e.focus(),t.stopPropagation(),t.preventDefault())}}))}},_onSuggestionClicked:function(t,e){var n;(n=this.dropdown.getDatumForSuggestion(e))&&this._select(n)},_onCursorMoved:function(t,e){var n=this.dropdown.getDatumForCursor(),r=this.dropdown.getCurrentCursor().attr("id");this.input.setActiveDescendant(r),n&&(e&&this.input.setInputValue(n.value,!0),this.eventBus.trigger("cursorchanged",n.raw,n.datasetName))},_onCursorRemoved:function(){this.input.resetInputValue(),this._updateHint(),this.eventBus.trigger("cursorremoved")},_onDatasetRendered:function(){this._updateHint(),this.eventBus.trigger("updated")},_onOpened:function(){this._updateHint(),this.input.expand(),this.eventBus.trigger("opened")},_onEmpty:function(){this.eventBus.trigger("empty")},_onRedrawn:function(){this.$node.css("top","0px"),this.$node.css("left","0px");var t=this.$input[0].getBoundingClientRect();this.autoWidth&&this.$node.css("width",t.width+"px");var e=this.$node[0].getBoundingClientRect(),n=t.bottom-e.top;this.$node.css("top",n+"px");var r=t.left-e.left;this.$node.css("left",r+"px"),this.eventBus.trigger("redrawn")},_onShown:function(){this.eventBus.trigger("shown"),this.autoselect&&this.dropdown.cursorTopSuggestion()},_onClosed:function(){this.input.clearHint(),this.input.removeActiveDescendant(),this.input.collapse(),this.eventBus.trigger("closed")},_onFocused:function(){if(this.isActivated=!0,this.openOnFocus){var t=this.input.getQuery();t.length>=this.minLength?this.dropdown.update(t):this.dropdown.empty(),this.dropdown.open()}},_onBlurred:function(){var t,e;t=this.dropdown.getDatumForCursor(),e=this.dropdown.getDatumForTopSuggestion(),this.debug||(this.autoselectOnBlur&&t?this._select(t):this.autoselectOnBlur&&e?this._select(e):(this.isActivated=!1,this.dropdown.empty(),this.dropdown.close()))},_onEnterKeyed:function(t,e){var n,r;n=this.dropdown.getDatumForCursor(),r=this.dropdown.getDatumForTopSuggestion(),n?(this._select(n),e.preventDefault()):this.autoselect&&r&&(this._select(r),e.preventDefault())},_onTabKeyed:function(t,e){var n;this.tabAutocomplete?(n=this.dropdown.getDatumForCursor())?(this._select(n),e.preventDefault()):this._autocomplete(!0):this.dropdown.close()},_onEscKeyed:function(){this.dropdown.close(),this.input.resetInputValue()},_onUpKeyed:function(){var t=this.input.getQuery();this.dropdown.isEmpty&&t.length>=this.minLength?this.dropdown.update(t):this.dropdown.moveCursorUp(),this.dropdown.open()},_onDownKeyed:function(){var t=this.input.getQuery();this.dropdown.isEmpty&&t.length>=this.minLength?this.dropdown.update(t):this.dropdown.moveCursorDown(),this.dropdown.open()},_onLeftKeyed:function(){"rtl"===this.dir&&this._autocomplete()},_onRightKeyed:function(){"ltr"===this.dir&&this._autocomplete()},_onQueryChanged:function(t,e){this.input.clearHintIfInvalid(),e.length>=this.minLength?this.dropdown.update(e):this.dropdown.empty(),this.dropdown.open(),this._setLanguageDirection()},_onWhitespaceChanged:function(){this._updateHint(),this.dropdown.open()},_setLanguageDirection:function(){var t=this.input.getLanguageDirection();this.dir!==t&&(this.dir=t,this.$node.css("direction",t),this.dropdown.setLanguageDirection(t))},_updateHint:function(){var t,e,n,i,o;(t=this.dropdown.getDatumForTopSuggestion())&&this.dropdown.isVisible()&&!this.input.hasOverflow()?(e=this.input.getInputValue(),n=s.normalizeQuery(e),i=r.escapeRegExChars(n),(o=new RegExp("^(?:"+i+")(.+$)","i").exec(t.value))?this.input.setHint(e+o[1]):this.input.clearHint()):this.input.clearHint()},_autocomplete:function(t){var e,n,r,i;e=this.input.getHint(),n=this.input.getQuery(),r=t||this.input.isCursorAtEnd(),e&&n!==e&&r&&((i=this.dropdown.getDatumForTopSuggestion())&&this.input.setInputValue(i.value),this.eventBus.trigger("autocompleted",i.raw,i.datasetName))},_select:function(t){void 0!==t.value&&this.input.setQuery(t.value),this.clearOnSelected?this.setVal(""):this.input.setInputValue(t.value,!0),this._setLanguageDirection(),!1===this.eventBus.trigger("selected",t.raw,t.datasetName).isDefaultPrevented()&&(this.dropdown.close(),r.defer(r.bind(this.dropdown.empty,this.dropdown)))},open:function(){if(!this.isActivated){var t=this.input.getInputValue();t.length>=this.minLength?this.dropdown.update(t):this.dropdown.empty()}this.dropdown.open()},close:function(){this.dropdown.close()},setVal:function(t){t=r.toStr(t),this.isActivated?this.input.setInputValue(t):(this.input.setQuery(t),this.input.setInputValue(t,!0)),this._setLanguageDirection()},getVal:function(){return this.input.getQuery()},destroy:function(){var t,e,n;this.input.destroy(),this.dropdown.destroy(),t=this.$node,e=this.cssClasses,n=t.find(r.className(e.prefix,e.input)),r.each(n.data("aaAttrs"),(function(t,e){void 0===t?n.removeAttr(e):n.attr(e,t)})),n.detach().removeClass(r.className(e.prefix,e.input,!0)).insertAfter(t),n.removeData&&n.removeData("aaAttrs"),t.remove(),this.$node=null},getWrapper:function(){return this.dropdown.$container[0]}}),l.Dropdown=a,l.Input=s,l.sources=n(61),t.exports=l},function(t,e,n){"use strict";var r;r={9:"tab",27:"esc",37:"left",39:"right",13:"enter",38:"up",40:"down"};var i=n(0),o=n(1),s=n(10);function a(t){var e,n,s,a,u,c=this;(t=t||{}).input||i.error("input is missing"),e=i.bind(this._onBlur,this),n=i.bind(this._onFocus,this),s=i.bind(this._onKeydown,this),a=i.bind(this._onInput,this),this.$hint=o.element(t.hint),this.$input=o.element(t.input).on("blur.aa",e).on("focus.aa",n).on("keydown.aa",s),0===this.$hint.length&&(this.setHint=this.getHint=this.clearHint=this.clearHintIfInvalid=i.noop),i.isMsie()?this.$input.on("keydown.aa keypress.aa cut.aa paste.aa",(function(t){r[t.which||t.keyCode]||i.defer(i.bind(c._onInput,c,t))})):this.$input.on("input.aa",a),this.query=this.$input.val(),this.$overflowHelper=(u=this.$input,o.element('<pre aria-hidden="true"></pre>').css({position:"absolute",visibility:"hidden",whiteSpace:"pre",fontFamily:u.css("font-family"),fontSize:u.css("font-size"),fontStyle:u.css("font-style"),fontVariant:u.css("font-variant"),fontWeight:u.css("font-weight"),wordSpacing:u.css("word-spacing"),letterSpacing:u.css("letter-spacing"),textIndent:u.css("text-indent"),textRendering:u.css("text-rendering"),textTransform:u.css("text-transform")}).insertAfter(u))}function u(t){return t.altKey||t.ctrlKey||t.metaKey||t.shiftKey}a.normalizeQuery=function(t){return(t||"").replace(/^\s*/g,"").replace(/\s{2,}/g," ")},i.mixin(a.prototype,s,{_onBlur:function(){this.resetInputValue(),this.$input.removeAttr("aria-activedescendant"),this.trigger("blurred")},_onFocus:function(){this.trigger("focused")},_onKeydown:function(t){var e=r[t.which||t.keyCode];this._managePreventDefault(e,t),e&&this._shouldTrigger(e,t)&&this.trigger(e+"Keyed",t)},_onInput:function(){this._checkInputValue()},_managePreventDefault:function(t,e){var n,r,i;switch(t){case"tab":r=this.getHint(),i=this.getInputValue(),n=r&&r!==i&&!u(e);break;case"up":case"down":n=!u(e);break;default:n=!1}n&&e.preventDefault()},_shouldTrigger:function(t,e){var n;switch(t){case"tab":n=!u(e);break;default:n=!0}return n},_checkInputValue:function(){var t,e,n,r,i;t=this.getInputValue(),r=t,i=this.query,n=!(!(e=a.normalizeQuery(r)===a.normalizeQuery(i))||!this.query)&&this.query.length!==t.length,this.query=t,e?n&&this.trigger("whitespaceChanged",this.query):this.trigger("queryChanged",this.query)},focus:function(){this.$input.focus()},blur:function(){this.$input.blur()},getQuery:function(){return this.query},setQuery:function(t){this.query=t},getInputValue:function(){return this.$input.val()},setInputValue:function(t,e){void 0===t&&(t=this.query),this.$input.val(t),e?this.clearHint():this._checkInputValue()},expand:function(){this.$input.attr("aria-expanded","true")},collapse:function(){this.$input.attr("aria-expanded","false")},setActiveDescendant:function(t){this.$input.attr("aria-activedescendant",t)},removeActiveDescendant:function(){this.$input.removeAttr("aria-activedescendant")},resetInputValue:function(){this.setInputValue(this.query,!0)},getHint:function(){return this.$hint.val()},setHint:function(t){this.$hint.val(t)},clearHint:function(){this.setHint("")},clearHintIfInvalid:function(){var t,e,n;n=(t=this.getInputValue())!==(e=this.getHint())&&0===e.indexOf(t),""!==t&&n&&!this.hasOverflow()||this.clearHint()},getLanguageDirection:function(){return(this.$input.css("direction")||"ltr").toLowerCase()},hasOverflow:function(){var t=this.$input.width()-2;return this.$overflowHelper.text(this.getInputValue()),this.$overflowHelper.width()>=t},isCursorAtEnd:function(){var t,e,n;return t=this.$input.val().length,e=this.$input[0].selectionStart,i.isNumber(e)?e===t:!document.selection||((n=document.selection.createRange()).moveStart("character",-t),t===n.text.length)},destroy:function(){this.$hint.off(".aa"),this.$input.off(".aa"),this.$hint=this.$input=this.$overflowHelper=null}}),t.exports=a},function(t,e,n){"use strict";var r,i,o,s=[n(54),n(55),n(56),n(57),n(58)],a=-1,u=[],c=!1;function l(){r&&i&&(r=!1,i.length?u=i.concat(u):a=-1,u.length&&h())}function h(){if(!r){c=!1,r=!0;for(var t=u.length,e=setTimeout(l);t;){for(i=u,u=[];i&&++a<t;)i[a].run();a=-1,t=u.length}i=null,a=-1,r=!1,clearTimeout(e)}}for(var f=-1,d=s.length;++f<d;)if(s[f]&&s[f].test&&s[f].test()){o=s[f].install(h);break}function p(t,e){this.fun=t,this.array=e}p.prototype.run=function(){var t=this.fun,e=this.array;switch(e.length){case 0:return t();case 1:return t(e[0]);case 2:return t(e[0],e[1]);case 3:return t(e[0],e[1],e[2]);default:return t.apply(null,e)}},t.exports=function(t){var e=new Array(arguments.length-1);if(arguments.length>1)for(var n=1;n<arguments.length;n++)e[n-1]=arguments[n];u.push(new p(t,e)),c||r||(c=!0,o())}},function(t,e,n){"use strict";(function(t){e.test=function(){return void 0!==t&&!t.browser},e.install=function(e){return function(){t.nextTick(e)}}}).call(e,n(9))},function(t,e,n){"use strict";(function(t){var n=t.MutationObserver||t.WebKitMutationObserver;e.test=function(){return n},e.install=function(e){var r=0,i=new n(e),o=t.document.createTextNode("");return i.observe(o,{characterData:!0}),function(){o.data=r=++r%2}}}).call(e,n(4))},function(t,e,n){"use strict";(function(t){e.test=function(){return!t.setImmediate&&void 0!==t.MessageChannel},e.install=function(e){var n=new t.MessageChannel;return n.port1.onmessage=e,function(){n.port2.postMessage(0)}}}).call(e,n(4))},function(t,e,n){"use strict";(function(t){e.test=function(){return"document"in t&&"onreadystatechange"in t.document.createElement("script")},e.install=function(e){return function(){var n=t.document.createElement("script");return n.onreadystatechange=function(){e(),n.onreadystatechange=null,n.parentNode.removeChild(n),n=null},t.document.documentElement.appendChild(n),e}}}).call(e,n(4))},function(t,e,n){"use strict";e.test=function(){return!0},e.install=function(t){return function(){setTimeout(t,0)}}},function(t,e,n){"use strict";var r=n(0),i=n(1),o=n(10),s=n(60),a=n(11);function u(t){var e,n,o,s=this;(t=t||{}).menu||r.error("menu is required"),r.isArray(t.datasets)||r.isObject(t.datasets)||r.error("1 or more datasets required"),t.datasets||r.error("datasets is required"),this.isOpen=!1,this.isEmpty=!0,this.minLength=t.minLength||0,this.templates={},this.appendTo=t.appendTo||!1,this.css=r.mixin({},a,t.appendTo?a.appendTo:{}),this.cssClasses=t.cssClasses=r.mixin({},a.defaultClasses,t.cssClasses||{}),this.cssClasses.prefix=t.cssClasses.formattedPrefix||r.formatPrefix(this.cssClasses.prefix,this.cssClasses.noPrefix),e=r.bind(this._onSuggestionClick,this),n=r.bind(this._onSuggestionMouseEnter,this),o=r.bind(this._onSuggestionMouseLeave,this);var c=r.className(this.cssClasses.prefix,this.cssClasses.suggestion);this.$menu=i.element(t.menu).on("mouseenter.aa",c,n).on("mouseleave.aa",c,o).on("click.aa",c,e),this.$container=t.appendTo?t.wrapper:this.$menu,t.templates&&t.templates.header&&(this.templates.header=r.templatify(t.templates.header),this.$menu.prepend(this.templates.header())),t.templates&&t.templates.empty&&(this.templates.empty=r.templatify(t.templates.empty),this.$empty=i.element('<div class="'+r.className(this.cssClasses.prefix,this.cssClasses.empty,!0)+'"></div>'),this.$menu.append(this.$empty),this.$empty.hide()),this.datasets=r.map(t.datasets,(function(e){return function(t,e,n){return new u.Dataset(r.mixin({$menu:t,cssClasses:n},e))}(s.$menu,e,t.cssClasses)})),r.each(this.datasets,(function(t){var e=t.getRoot();e&&0===e.parent().length&&s.$menu.append(e),t.onSync("rendered",s._onRendered,s)})),t.templates&&t.templates.footer&&(this.templates.footer=r.templatify(t.templates.footer),this.$menu.append(this.templates.footer()));var l=this;i.element(window).resize((function(){l._redraw()}))}r.mixin(u.prototype,o,{_onSuggestionClick:function(t){this.trigger("suggestionClicked",i.element(t.currentTarget))},_onSuggestionMouseEnter:function(t){var e=i.element(t.currentTarget);if(!e.hasClass(r.className(this.cssClasses.prefix,this.cssClasses.cursor,!0))){this._removeCursor();var n=this;setTimeout((function(){n._setCursor(e,!1)}),0)}},_onSuggestionMouseLeave:function(t){t.relatedTarget&&i.element(t.relatedTarget).closest("."+r.className(this.cssClasses.prefix,this.cssClasses.cursor,!0)).length>0||(this._removeCursor(),this.trigger("cursorRemoved"))},_onRendered:function(t,e){if(this.isEmpty=r.every(this.datasets,(function(t){return t.isEmpty()})),this.isEmpty)if(e.length>=this.minLength&&this.trigger("empty"),this.$empty)if(e.length<this.minLength)this._hide();else{var n=this.templates.empty({query:this.datasets[0]&&this.datasets[0].query});this.$empty.html(n),this.$empty.show(),this._show()}else r.any(this.datasets,(function(t){return t.templates&&t.templates.empty}))?e.length<this.minLength?this._hide():this._show():this._hide();else this.isOpen&&(this.$empty&&(this.$empty.empty(),this.$empty.hide()),e.length>=this.minLength?this._show():this._hide());this.trigger("datasetRendered")},_hide:function(){this.$container.hide()},_show:function(){this.$container.css("display","block"),this._redraw(),this.trigger("shown")},_redraw:function(){this.isOpen&&this.appendTo&&this.trigger("redrawn")},_getSuggestions:function(){return this.$menu.find(r.className(this.cssClasses.prefix,this.cssClasses.suggestion))},_getCursor:function(){return this.$menu.find(r.className(this.cssClasses.prefix,this.cssClasses.cursor)).first()},_setCursor:function(t,e){t.first().addClass(r.className(this.cssClasses.prefix,this.cssClasses.cursor,!0)).attr("aria-selected","true"),this.trigger("cursorMoved",e)},_removeCursor:function(){this._getCursor().removeClass(r.className(this.cssClasses.prefix,this.cssClasses.cursor,!0)).removeAttr("aria-selected")},_moveCursor:function(t){var e,n,r,i;this.isOpen&&(n=this._getCursor(),e=this._getSuggestions(),this._removeCursor(),-1!=(r=((r=e.index(n)+t)+1)%(e.length+1)-1)?(r<-1&&(r=e.length-1),this._setCursor(i=e.eq(r),!0),this._ensureVisible(i)):this.trigger("cursorRemoved"))},_ensureVisible:function(t){var e,n,r,i;n=(e=t.position().top)+t.height()+parseInt(t.css("margin-top"),10)+parseInt(t.css("margin-bottom"),10),r=this.$menu.scrollTop(),i=this.$menu.height()+parseInt(this.$menu.css("padding-top"),10)+parseInt(this.$menu.css("padding-bottom"),10),e<0?this.$menu.scrollTop(r+e):i<n&&this.$menu.scrollTop(r+(n-i))},close:function(){this.isOpen&&(this.isOpen=!1,this._removeCursor(),this._hide(),this.trigger("closed"))},open:function(){this.isOpen||(this.isOpen=!0,this.isEmpty||this._show(),this.trigger("opened"))},setLanguageDirection:function(t){this.$menu.css("ltr"===t?this.css.ltr:this.css.rtl)},moveCursorUp:function(){this._moveCursor(-1)},moveCursorDown:function(){this._moveCursor(1)},getDatumForSuggestion:function(t){var e=null;return t.length&&(e={raw:s.extractDatum(t),value:s.extractValue(t),datasetName:s.extractDatasetName(t)}),e},getCurrentCursor:function(){return this._getCursor().first()},getDatumForCursor:function(){return this.getDatumForSuggestion(this._getCursor().first())},getDatumForTopSuggestion:function(){return this.getDatumForSuggestion(this._getSuggestions().first())},cursorTopSuggestion:function(){this._setCursor(this._getSuggestions().first(),!1)},update:function(t){r.each(this.datasets,(function(e){e.update(t)}))},empty:function(){r.each(this.datasets,(function(t){t.clear()})),this.isEmpty=!0},isVisible:function(){return this.isOpen&&!this.isEmpty},destroy:function(){this.$menu.off(".aa"),this.$menu=null,r.each(this.datasets,(function(t){t.destroy()}))}}),u.Dataset=s,t.exports=u},function(t,e,n){"use strict";var r=n(0),i=n(1),o=n(17),s=n(11),a=n(10);function u(t){var e,n,a,u;(t=t||{}).templates=t.templates||{},t.source||r.error("missing source"),t.name&&(e=t.name,!/^[_a-zA-Z0-9-]+$/.test(e))&&r.error("invalid dataset name: "+t.name),this.query=null,this._isEmpty=!0,this.highlight=!!t.highlight,this.name=void 0===t.name||null===t.name?r.getUniqueId():t.name,this.source=t.source,this.displayFn=(n=(n=t.display||t.displayKey)||"value",r.isFunction(n)?n:function(t){return t[n]}),this.debounce=t.debounce,this.cache=!1!==t.cache,this.templates=(a=t.templates,u=this.displayFn,{empty:a.empty&&r.templatify(a.empty),header:a.header&&r.templatify(a.header),footer:a.footer&&r.templatify(a.footer),suggestion:a.suggestion||function(t){return"<p>"+u(t)+"</p>"}}),this.css=r.mixin({},s,t.appendTo?s.appendTo:{}),this.cssClasses=t.cssClasses=r.mixin({},s.defaultClasses,t.cssClasses||{}),this.cssClasses.prefix=t.cssClasses.formattedPrefix||r.formatPrefix(this.cssClasses.prefix,this.cssClasses.noPrefix);var c=r.className(this.cssClasses.prefix,this.cssClasses.dataset);this.$el=t.$menu&&t.$menu.find(c+"-"+this.name).length>0?i.element(t.$menu.find(c+"-"+this.name)[0]):i.element(o.dataset.replace("%CLASS%",this.name).replace("%PREFIX%",this.cssClasses.prefix).replace("%DATASET%",this.cssClasses.dataset)),this.$menu=t.$menu,this.clearCachedSuggestions()}u.extractDatasetName=function(t){return i.element(t).data("aaDataset")},u.extractValue=function(t){return i.element(t).data("aaValue")},u.extractDatum=function(t){var e=i.element(t).data("aaDatum");return"string"==typeof e&&(e=JSON.parse(e)),e},r.mixin(u.prototype,a,{_render:function(t,e){if(this.$el){var n,s=this,a=[].slice.call(arguments,2);if(this.$el.empty(),n=e&&e.length,this._isEmpty=!n,!n&&this.templates.empty)this.$el.html(u.apply(this,a)).prepend(s.templates.header?l.apply(this,a):null).append(s.templates.footer?h.apply(this,a):null);else if(n)this.$el.html(c.apply(this,a)).prepend(s.templates.header?l.apply(this,a):null).append(s.templates.footer?h.apply(this,a):null);else if(e&&!Array.isArray(e))throw new TypeError("suggestions must be an array");this.$menu&&this.$menu.addClass(this.cssClasses.prefix+(n?"with":"without")+"-"+this.name).removeClass(this.cssClasses.prefix+(n?"without":"with")+"-"+this.name),this.trigger("rendered",t)}function u(){var e=[].slice.call(arguments,0);return e=[{query:t,isEmpty:!0}].concat(e),s.templates.empty.apply(this,e)}function c(){var t,n,a=[].slice.call(arguments,0),u=this,c=o.suggestions.replace("%PREFIX%",this.cssClasses.prefix).replace("%SUGGESTIONS%",this.cssClasses.suggestions);return t=i.element(c).css(this.css.suggestions),n=r.map(e,l),t.append.apply(t,n),t;function l(t){var e,n=o.suggestion.replace("%PREFIX%",u.cssClasses.prefix).replace("%SUGGESTION%",u.cssClasses.suggestion);return(e=i.element(n).attr({role:"option",id:["option",Math.floor(1e8*Math.random())].join("-")}).append(s.templates.suggestion.apply(this,[t].concat(a)))).data("aaDataset",s.name),e.data("aaValue",s.displayFn(t)||void 0),e.data("aaDatum",JSON.stringify(t)),e.children().each((function(){i.element(this).css(u.css.suggestionChild)})),e}}function l(){var e=[].slice.call(arguments,0);return e=[{query:t,isEmpty:!n}].concat(e),s.templates.header.apply(this,e)}function h(){var e=[].slice.call(arguments,0);return e=[{query:t,isEmpty:!n}].concat(e),s.templates.footer.apply(this,e)}},getRoot:function(){return this.$el},update:function(t){function e(e){if(!this.canceled&&t===this.query){var n=[].slice.call(arguments,1);this.cacheSuggestions(t,e,n),this._render.apply(this,[t,e].concat(n))}}if(this.query=t,this.canceled=!1,this.shouldFetchFromCache(t))e.apply(this,[this.cachedSuggestions].concat(this.cachedRenderExtraArgs));else{var n=this,r=function(){n.canceled||n.source(t,e.bind(n))};this.debounce?(clearTimeout(this.debounceTimeout),this.debounceTimeout=setTimeout((function(){n.debounceTimeout=null,r()}),this.debounce)):r()}},cacheSuggestions:function(t,e,n){this.cachedQuery=t,this.cachedSuggestions=e,this.cachedRenderExtraArgs=n},shouldFetchFromCache:function(t){return this.cache&&this.cachedQuery===t&&this.cachedSuggestions&&this.cachedSuggestions.length},clearCachedSuggestions:function(){delete this.cachedQuery,delete this.cachedSuggestions,delete this.cachedRenderExtraArgs},cancel:function(){this.canceled=!0},clear:function(){this.cancel(),this.$el.empty(),this.trigger("rendered","")},isEmpty:function(){return this._isEmpty},destroy:function(){this.clearCachedSuggestions(),this.$el=null}}),t.exports=u},function(t,e,n){"use strict";t.exports={hits:n(62),popularIn:n(63)}},function(t,e,n){"use strict";var r=n(0),i=n(18),o=n(19);t.exports=function(t,e){var n=o(t.as._ua);return n&&n[0]>=3&&n[1]>20&&((e=e||{}).additionalUA="autocomplete.js "+i),function(n,i){t.search(n,e,(function(t,e){t?r.error(t.message):i(e.hits,e)}))}}},function(t,e,n){"use strict";var r=n(0),i=n(18),o=n(19);t.exports=function(t,e,n,s){var a=o(t.as._ua);if(a&&a[0]>=3&&a[1]>20&&((e=e||{}).additionalUA="autocomplete.js "+i),!n.source)return r.error("Missing 'source' key");var u=r.isFunction(n.source)?n.source:function(t){return t[n.source]};if(!n.index)return r.error("Missing 'index' key");var c=n.index;return s=s||{},function(a,l){t.search(a,e,(function(t,a){if(t)r.error(t.message);else{if(a.hits.length>0){var h=a.hits[0],f=r.mixin({hitsPerPage:0},n);delete f.source,delete f.index;var d=o(c.as._ua);return d&&d[0]>=3&&d[1]>20&&(e.additionalUA="autocomplete.js "+i),void c.search(u(h),f,(function(t,e){if(t)r.error(t.message);else{var n=[];if(s.includeAll){var i=s.allTitle||"All departments";n.push(r.mixin({facet:{value:i,count:e.nbHits}},r.cloneDeep(h)))}r.each(e.facets,(function(t,e){r.each(t,(function(t,i){n.push(r.mixin({facet:{facet:e,value:i,count:t}},r.cloneDeep(h)))}))}));for(var o=1;o<a.hits.length;++o)n.push(a.hits[o]);l(n,a)}}))}l([])}}))}}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r="algolia-docsearch-suggestion",i={suggestion:'\n  <a class="'+r+"\n    {{#isCategoryHeader}}"+r+"__main{{/isCategoryHeader}}\n    {{#isSubCategoryHeader}}"+r+'__secondary{{/isSubCategoryHeader}}\n    "\n    aria-label="Link to the result"\n    href="{{{url}}}"\n    >\n    <div class="'+r+'--category-header">\n        <span class="'+r+'--category-header-lvl0">{{{category}}}</span>\n    </div>\n    <div class="'+r+'--wrapper">\n      <div class="'+r+'--subcategory-column">\n        <span class="'+r+'--subcategory-column-text">{{{subcategory}}}</span>\n      </div>\n      {{#isTextOrSubcategoryNonEmpty}}\n      <div class="'+r+'--content">\n        <div class="'+r+'--subcategory-inline">{{{subcategory}}}</div>\n        <div class="'+r+'--title">{{{title}}}</div>\n        {{#text}}<div class="'+r+'--text">{{{text}}}</div>{{/text}}\n      </div>\n      {{/isTextOrSubcategoryNonEmpty}}\n    </div>\n  </a>\n  ',suggestionSimple:'\n  <div class="'+r+"\n    {{#isCategoryHeader}}"+r+"__main{{/isCategoryHeader}}\n    {{#isSubCategoryHeader}}"+r+'__secondary{{/isSubCategoryHeader}}\n    suggestion-layout-simple\n  ">\n    <div class="'+r+'--category-header">\n        {{^isLvl0}}\n        <span class="'+r+"--category-header-lvl0 "+r+'--category-header-item">{{{category}}}</span>\n          {{^isLvl1}}\n          {{^isLvl1EmptyOrDuplicate}}\n          <span class="'+r+"--category-header-lvl1 "+r+'--category-header-item">\n              {{{subcategory}}}\n          </span>\n          {{/isLvl1EmptyOrDuplicate}}\n          {{/isLvl1}}\n        {{/isLvl0}}\n        <div class="'+r+"--title "+r+'--category-header-item">\n            {{#isLvl2}}\n                {{{title}}}\n            {{/isLvl2}}\n            {{#isLvl1}}\n                {{{subcategory}}}\n            {{/isLvl1}}\n            {{#isLvl0}}\n                {{{category}}}\n            {{/isLvl0}}\n        </div>\n    </div>\n    <div class="'+r+'--wrapper">\n      {{#text}}\n      <div class="'+r+'--content">\n        <div class="'+r+'--text">{{{text}}}</div>\n      </div>\n      {{/text}}\n    </div>\n  </div>\n  ',footer:'\n    <div class="algolia-docsearch-footer">\n      Search by <a class="algolia-docsearch-footer--logo" href="https://www.algolia.com/docsearch">Algolia</a>\n    </div>\n  ',empty:'\n  <div class="'+r+'">\n    <div class="'+r+'--wrapper">\n        <div class="'+r+"--content "+r+'--no-results">\n            <div class="'+r+'--title">\n                <div class="'+r+'--text">\n                    No results found for query <b>"{{query}}"</b>\n                </div>\n            </div>\n        </div>\n    </div>\n  </div>\n  ',searchBox:'\n  <form novalidate="novalidate" onsubmit="return false;" class="searchbox">\n    <div role="search" class="searchbox__wrapper">\n      <input id="docsearch" type="search" name="search" placeholder="Search the docs" autocomplete="off" required="required" class="searchbox__input"/>\n      <button type="submit" title="Submit your search query." class="searchbox__submit" >\n        <svg width=12 height=12 role="img" aria-label="Search">\n          <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#sbx-icon-search-13"></use>\n        </svg>\n      </button>\n      <button type="reset" title="Clear the search query." class="searchbox__reset hide">\n        <svg width=12 height=12 role="img" aria-label="Reset">\n          <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#sbx-icon-clear-3"></use>\n        </svg>\n      </button>\n    </div>\n</form>\n\n<div class="svg-icons" style="height: 0; width: 0; position: absolute; visibility: hidden">\n  <svg xmlns="http://www.w3.org/2000/svg">\n    <symbol id="sbx-icon-clear-3" viewBox="0 0 40 40"><path d="M16.228 20L1.886 5.657 0 3.772 3.772 0l1.885 1.886L20 16.228 34.343 1.886 36.228 0 40 3.772l-1.886 1.885L23.772 20l14.342 14.343L40 36.228 36.228 40l-1.885-1.886L20 23.772 5.657 38.114 3.772 40 0 36.228l1.886-1.885L16.228 20z" fill-rule="evenodd"></symbol>\n    <symbol id="sbx-icon-search-13" viewBox="0 0 40 40"><path d="M26.806 29.012a16.312 16.312 0 0 1-10.427 3.746C7.332 32.758 0 25.425 0 16.378 0 7.334 7.333 0 16.38 0c9.045 0 16.378 7.333 16.378 16.38 0 3.96-1.406 7.593-3.746 10.426L39.547 37.34c.607.608.61 1.59-.004 2.203a1.56 1.56 0 0 1-2.202.004L26.807 29.012zm-10.427.627c7.322 0 13.26-5.938 13.26-13.26 0-7.324-5.938-13.26-13.26-13.26-7.324 0-13.26 5.936-13.26 13.26 0 7.322 5.936 13.26 13.26 13.26z" fill-rule="evenodd"></symbol>\n  </svg>\n</div>\n  '};e.default=i},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r,i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},o=n(20),s=(r=o)&&r.__esModule?r:{default:r},a={mergeKeyWithParent:function(t,e){if(void 0===t[e])return t;if("object"!==i(t[e]))return t;var n=s.default.extend({},t,t[e]);return delete n[e],n},groupBy:function(t,e){var n={};return s.default.each(t,(function(t,r){if(void 0===r[e])throw new Error("[groupBy]: Object has no key "+e);var i=r[e];"string"==typeof i&&(i=i.toLowerCase()),Object.prototype.hasOwnProperty.call(n,i)||(n[i]=[]),n[i].push(r)})),n},values:function(t){return Object.keys(t).map((function(e){return t[e]}))},flatten:function(t){var e=[];return t.forEach((function(t){Array.isArray(t)?t.forEach((function(t){e.push(t)})):e.push(t)})),e},flattenAndFlagFirst:function(t,e){var n=this.values(t).map((function(t){return t.map((function(t,n){return t[e]=0===n,t}))}));return this.flatten(n)},compact:function(t){var e=[];return t.forEach((function(t){t&&e.push(t)})),e},getHighlightedValue:function(t,e){return t._highlightResult&&t._highlightResult.hierarchy_camel&&t._highlightResult.hierarchy_camel[e]&&t._highlightResult.hierarchy_camel[e].matchLevel&&"none"!==t._highlightResult.hierarchy_camel[e].matchLevel&&t._highlightResult.hierarchy_camel[e].value?t._highlightResult.hierarchy_camel[e].value:t._highlightResult&&t._highlightResult&&t._highlightResult[e]&&t._highlightResult[e].value?t._highlightResult[e].value:t[e]},getSnippetedValue:function(t,e){if(!t._snippetResult||!t._snippetResult[e]||!t._snippetResult[e].value)return t[e];var n=t._snippetResult[e].value;return n[0]!==n[0].toUpperCase()&&(n="…"+n),-1===[".","!","?"].indexOf(n[n.length-1])&&(n+="…"),n},deepClone:function(t){return JSON.parse(JSON.stringify(t))}};e.default=a}])},t.exports=r()},function(t,e,n){n(0),n(9)},function(t,e,n){var r,i,o;!function(s,a){a=a.bind(null,s,s.document),t.exports?a(n(0)):(i=[n(0)],void 0===(o="function"==typeof(r=a)?r.apply(e,i):r)||(t.exports=o))}(window,(function(t,e,n){"use strict";var r,i,o={};function s(t,n,r){if(!o[t]){var i=e.createElement(n?"link":"script"),s=e.getElementsByTagName("script")[0];n?(i.rel="stylesheet",i.href=t):(i.onload=function(){i.onerror=null,i.onload=null,r()},i.onerror=i.onload,i.src=t),o[t]=!0,o[i.src||i.href]=!0,s.parentNode.insertBefore(i,s)}}e.addEventListener&&(i=/\(|\)|\s|'/,r=function(t,n){var r=e.createElement("img");r.onload=function(){r.onload=null,r.onerror=null,r=null,n()},r.onerror=r.onload,r.src=t,r&&r.complete&&r.onload&&r.onload()},addEventListener("lazybeforeunveil",(function(t){var e,o,a;if(t.detail.instance==n&&!t.defaultPrevented){var u=t.target;if("none"==u.preload&&(u.preload=u.getAttribute("data-preload")||"auto"),null!=u.getAttribute("data-autoplay"))if(u.getAttribute("data-expand")&&!u.autoplay)try{u.play()}catch(t){}else requestAnimationFrame((function(){u.setAttribute("data-expand","-10"),n.aC(u,n.cfg.lazyClass)}));(e=u.getAttribute("data-link"))&&s(e,!0),(e=u.getAttribute("data-script"))&&(t.detail.firesLoad=!0,s(e,null,(function(){t.detail.firesLoad=!1,n.fire(u,"_lazyloaded",{},!0,!0)}))),(e=u.getAttribute("data-require"))&&(n.cfg.requireJs?n.cfg.requireJs([e]):s(e)),(o=u.getAttribute("data-bg"))&&(t.detail.firesLoad=!0,r(o,(function(){u.style.backgroundImage="url("+(i.test(o)?JSON.stringify(o):o)+")",t.detail.firesLoad=!1,n.fire(u,"_lazyloaded",{},!0,!0)}))),(a=u.getAttribute("data-poster"))&&(t.detail.firesLoad=!0,r(a,(function(){u.poster=a,t.detail.firesLoad=!1,n.fire(u,"_lazyloaded",{},!0,!0)})))}}),!1))}))},function(t,e){for(var n=document.getElementsByClassName("js-toggle"),r=0;r<n.length;r++)n[r].addEventListener("click",i,!1);function i(){for(var t=this.dataset.target.split(" "),e=document.querySelector(".mobilemenu:not(.dn)"),n=document.querySelector(".desktopmenu:not(.dn)"),r=document.querySelector(".desktopmenu:not(.dn)"),i=0;i<t.length;i++){var o=document.querySelectorAll(t[i]);[].forEach.call(o,(function(t){return t.classList.contains("dn")?t.classList.remove("dn"):t.classList.add("dn"),!1})),e&&e.classList.add("dn"),n&&n.classList.add("dn"),r&&r.classList.remove("db")}}},function(t,e,n){n(12)},function(t,e,n){!function(){"use strict";var t,e,n="data-scrolldir",r="down",i=document.documentElement,o=window,s=document.body,a=Array(32),u=0;function c(){var c=o.scrollY||o.pageYOffset,l=t.timeStamp,h="down"===r?Math.max:Math.min,f=s.scrollHeight-o.innerHeight;if(c=Math.max(0,c),c=Math.min(f,c),a.unshift({y:c,t:l}),a.pop(),c===h(e,c))return u=l,void(e=c);var d=l-512;if(u<d){e=c;for(var p=0;p<32&&a[p]&&!(a[p].t<d);p+=1)e=h(e,a[p].y)}Math.abs(c-e)>64&&(e=c,u=l,r="down"===r?"up":"down",i.setAttribute(n,r))}function l(e){return t=e,o.requestAnimationFrame(c)}e=o.scrollY||o.pageYOffset,i.setAttribute(n,r),o.addEventListener("scroll",l)}()},function(t,e){!function(){"use strict";if("querySelector"in document&&"addEventListener"in window&&Array.prototype.forEach){var t=document.querySelectorAll("#TableOfContents ul li a");[].forEach.call(t,(function(t){t.addEventListener("click",(function(e){e.preventDefault();var n=t.getAttribute("href"),r=document.querySelector(n),i=t.getAttribute("data-speed");r&&function(t,e){var n,r=window.pageYOffset,i=t.offsetTop,o=(i-r)/(e/16);n=o>=0?function(){var t=window.pageYOffset;(t>=i-o||window.innerHeight+t>=document.body.offsetHeight)&&clearInterval(s)}:function(){window.pageYOffset<=(i||0)&&clearInterval(s)};var s=setInterval((function(){window.scrollBy(0,o),n()}),16)}(r,i||500)}),!1)}))}}()},function(t,e){var n,r=document.querySelectorAll("[data-toggle-tab]"),i=document.querySelectorAll("[data-pane]");function o(t){if(t.target){t.preventDefault();var e=t.currentTarget.getAttribute("data-toggle-tab")}else e=t;window.localStorage&&window.localStorage.setItem("configLangPref",e);for(var n=document.querySelectorAll("[data-toggle-tab='"+e+"']"),o=document.querySelectorAll("[data-pane='"+e+"']"),s=0;s<r.length;s++)r[s].classList.remove("active"),i[s].classList.remove("active");for(s=0;s<n.length;s++)n[s].classList.add("active"),o[s].classList.add("active")}for(n=0;n<r.length;n++)r[n].addEventListener("click",o);window.localStorage.getItem("configLangPref")&&o(window.localStorage.getItem("configLangPref"))},function(t,e){document.documentElement.className=document.documentElement.className.replace(/\bno-js\b/,"js")}]);
index b6aebdf38bb85a13f8688f64097bf3a81f8f0917,0000000000000000000000000000000000000000..787da8ac20627f3aeb2c34228f6d45fe900592d2
mode 100644,000000..100644
--- /dev/null
@@@ -1,1 -1,0 +1,1 @@@
- # github.com/gohugoio/gohugoioTheme v0.0.0-20221206093948-1408550ab675
++# github.com/gohugoio/gohugoioTheme v0.0.0-20221217122332-1c1752ad8f14
index e4fec5bb2936800bb2742fa96f2a9307420266ea,0000000000000000000000000000000000000000..925da17324f7600d3440a25e973597264e39ca60
mode 100644,000000..100644
--- /dev/null
@@@ -1,42 -1,0 +1,42 @@@
- * ["An Introduction to Static Site Generators", David Walsh][]
 +---
 +title: The Benefits of Static Site Generators
 +linktitle: The Benefits of Static
 +description: Improved performance, security and ease of use are just a few of the reasons static site generators are so appealing.
 +date: 2017-02-01
 +publishdate: 2017-02-01
 +lastmod: 2017-02-01
 +keywords: [ssg,static,performance,security]
 +menu:
 +  docs:
 +    parent: "about"
 +    weight: 30
 +weight: 30
 +sections_weight: 30
 +draft: false
 +aliases: []
 +toc: false
 +---
 +
 +The purpose of website generators is to render content into HTML files. Most are "dynamic site generators." That means the HTTP server---i.e., the program that sends files to the browser to be viewed---runs the generator to create a new HTML file every time an end user requests a page.
 +
 +Over time, dynamic site generators were programmed to cache their HTML files to prevent unnecessary delays in delivering pages to end users. A cached page is a static version of a web page.
 +
 +Hugo takes caching a step further and all HTML files are rendered on your computer. You can review the files locally before copying them to the computer hosting the HTTP server. Since the HTML files aren't generated dynamically, we say that Hugo is a *static site generator*.
 +
 +This has many benefits. The most noticeable is performance. HTTP servers are *very* good at sending files---so good, in fact, that you can effectively serve the same number of pages with a fraction of the memory and CPU needed for a dynamic site.
 +
 +## More on Static Site Generators
 +
- * ["Static Site Generators", O'Reilly][]
- * [StaticGen: Top Open-Source Static Site Generators (GitHub Stars)][]
- * ["Top 10 Static Website Generators", Netlify blog][]
++* ["An Introduction to Static Site Generators", David Walsh]
 +* ["Hugo vs. WordPress page load speed comparison: Hugo leaves WordPress in its dust", GettingThingsTech][hugovwordpress]
++* ["Static Site Generators", O'Reilly]
++* [StaticGen: Top Open-Source Static Site Generators (GitHub Stars)]
++* ["Top 10 Static Website Generators", Netlify blog]
 +* ["The Resurgence of Static", dotCMS][dotcms]
 +
 +["An Introduction to Static Site Generators", David Walsh]: https://davidwalsh.name/introduction-static-site-generators
 +["Static Site Generators", O'Reilly]: https://github.com/gohugoio/hugoDocs/files/1242701/static-site-generators.pdf
 +["Top 10 Static Website Generators", Netlify blog]: https://www.netlify.com/blog/2016/05/02/top-ten-static-website-generators/
 +[hugovwordpress]: https://gettingthingstech.com/hugo-vs.-wordpress-page-load-speed-comparison-hugo-leaves-wordpress-in-its-dust/
 +[StaticGen: Top Open-Source Static Site Generators (GitHub Stars)]: https://www.staticgen.com/
 +[dotcms]: https://dotcms.com/blog/post/the-resurgence-of-static
index 5e94de38c598ca9a098e7e4050319a5d36890278,0000000000000000000000000000000000000000..fc3d5a030444bda2e4641b9dcc4833c80c800430
mode 100644,000000..100644
--- /dev/null
@@@ -1,84 -1,0 +1,84 @@@
- * [Extremely fast][] build times (&lt; 1 ms per page)
 +---
 +title: Hugo Features
 +linktitle: Hugo Features
 +description: Hugo boasts blistering speed, robust content management, and a powerful templating language making it a great fit for all kinds of static websites.
 +date: 2017-02-01
 +publishdate: 2017-02-01
 +lastmod: 2017-02-01
 +menu:
 +  docs:
 +    parent: "about"
 +    weight: 20
 +weight: 20
 +sections_weight: 20
 +draft: false
 +toc: true
 +---
 +
 +## General
 +
- * Renders changes on the fly with [LiveReload][] as you develop
- * [Powerful theming][]
++* [Extremely fast] build times (&lt; 1 ms per page)
 +* Completely cross platform, with [easy installation][install] on macOS, Linux, Windows, and more
- * Straightforward [organization for your projects][], including website sections
- * Customizable [URLs][]
- * Support for configurable [taxonomies][], including categories and tags
- * [Sort content][] as you desire through powerful template [functions][]
- * Automatic [table of contents][] generation
- * [Dynamic menu][] creation
- * [Pretty URLs][] support
- * [Permalink][] pattern support
- * Redirects via [aliases][]
++* Renders changes on the fly with [LiveReload] as you develop
++* [Powerful theming]
 +* [Host your site anywhere][hostanywhere]
 +
 +## Organization
 +
- * Native Markdown and Emacs Org-Mode support, as well as other languages via *external helpers* (see [supported formats][])
- * TOML, YAML, and JSON metadata support in [front matter][]
- * Customizable [homepage][]
- * Multiple [content types][]
- * Automatic and user defined [content summaries][]
- * [Shortcodes][] to enable rich content inside of Markdown
++* Straightforward [organization for your projects], including website sections
++* Customizable [URLs]
++* Support for configurable [taxonomies], including categories and tags
++* [Sort content] as you desire through powerful template [functions]
++* Automatic [table of contents] generation
++* [Dynamic menu] creation
++* [Pretty URLs] support
++* [Permalink] pattern support
++* Redirects via [aliases]
 +
 +## Content
 +
- * Integrated [Disqus][] comment support
- * Integrated [Google Analytics][] support
- * Automatic [RSS][] creation
- * Support for [Go][] HTML templates
- * [Syntax highlighting][] powered by [Chroma][]
++* Native Markdown and Emacs Org-Mode support, as well as other languages via *external helpers* (see [supported formats])
++* TOML, YAML, and JSON metadata support in [front matter]
++* Customizable [homepage]
++* Multiple [content types]
++* Automatic and user defined [content summaries]
++* [Shortcodes] to enable rich content inside of Markdown
 +* ["Minutes to Read"][pagevars] functionality
 +* ["WordCount"][pagevars] functionality
 +
 +## Additional Features
 +
++* Integrated [Disqus] comment support
++* Integrated [Google Analytics] support
++* Automatic [RSS] creation
++* Support for [Go] HTML templates
++* [Syntax highlighting] powered by [Chroma]
 +
 +[aliases]: /content-management/urls/#aliases
 +[Chroma]: https://github.com/alecthomas/chroma
 +[content summaries]: /content-management/summaries/
 +[content types]: /content-management/types/
 +[Disqus]: https://disqus.com/
 +[Dynamic menu]: /templates/menu-templates/
 +[Extremely fast]: https://github.com/bep/hugo-benchmark
 +[front matter]: /content-management/front-matter/
 +[functions]: /functions/
 +[Go]: https://pkg.go.dev/html/template
 +[Google Analytics]: https://google-analytics.com/
 +[homepage]: /templates/homepage/
 +[hostanywhere]: /hosting-and-deployment/
 +[install]: /installation/
 +[LiveReload]: /getting-started/usage/
 +[organization for your projects]: /getting-started/directory-structure/
 +[pagevars]: /variables/page/
 +[Permalink]: /content-management/urls/#permalinks
 +[Powerful theming]: /hugo-modules/theme-components/
 +[Pretty URLs]: /content-management/urls/
 +[RSS]: /templates/rss/
 +[Shortcodes]: /content-management/shortcodes/
 +[sort content]: /templates/
 +[supported formats]: /content-management/formats/
 +[Syntax highlighting]: /content-management/syntax-highlighting/
 +[table of contents]: /content-management/toc/
 +[taxonomies]: /content-management/taxonomies/
 +[URLs]: /content-management/urls/
index 01fac90c8fd8ddd60f137de2b6b9048e92d6b58e,0000000000000000000000000000000000000000..d61f821cdd6f387c3245d767ef5c526e95903bfb
mode 100644,000000..100644
--- /dev/null
@@@ -1,62 -1,0 +1,62 @@@
- Hugo is a general-purpose website framework. Technically speaking, Hugo is a [static site generator][]. Unlike systems that dynamically build a page with each visitor request, Hugo builds pages when you create or update your content. Since websites are viewed far more often than they are edited, Hugo is designed to provide an optimal viewing experience for your website's end users and an ideal writing experience for website authors.
 +---
 +title: What is Hugo
 +linktitle: What is Hugo
 +description: Hugo is a fast and modern static site generator written in Go, and designed to make website creation fun again.
 +date: 2017-02-01
 +publishdate: 2017-02-01
 +lastmod: 2017-02-01
 +layout: single
 +menu:
 +  docs:
 +    parent: "about"
 +    weight: 10
 +weight: 10
 +sections_weight: 10
 +draft: false
 +aliases: [/overview/introduction/,/about/why-i-built-hugo/]
 +toc: true
 +---
 +
- Websites built with Hugo are extremely fast and secure. Hugo sites can be hosted anywhere, including [Netlify][], [Heroku][], [GoDaddy][], [DreamHost][], [GitHub Pages][], [GitLab Pages][], [Surge][], [Firebase][], [Google Cloud Storage][], [Amazon S3][], [Rackspace][], [Azure][], and [CloudFront][] and work well with CDNs. Hugo sites run without the need for a database or dependencies on expensive runtimes like Ruby, Python, or PHP.
++Hugo is a general-purpose website framework. Technically speaking, Hugo is a [static site generator]. Unlike systems that dynamically build a page with each visitor request, Hugo builds pages when you create or update your content. Since websites are viewed far more often than they are edited, Hugo is designed to provide an optimal viewing experience for your website's end users and an ideal writing experience for website authors.
 +
++Websites built with Hugo are extremely fast and secure. Hugo sites can be hosted anywhere, including [Netlify], [Heroku], [GoDaddy], [DreamHost], [GitHub Pages], [GitLab Pages], [Surge], [Firebase], [Google Cloud Storage], [Amazon S3], [Rackspace], [Azure], and [CloudFront] and work well with CDNs. Hugo sites run without the need for a database or dependencies on expensive runtimes like Ruby, Python, or PHP.
 +
 +We think of Hugo as the ideal website creation tool with nearly instant build times, able to rebuild whenever a change is made.
 +
 +## How Fast is Hugo?
 +
 +{{< youtube "CdiDYZ51a2o" >}}
 +
 +## What Does Hugo Do?
 +
 +In technical terms, Hugo takes a source directory of files and templates and uses these as input to create a complete website.
 +
 +## Who Should Use Hugo?
 +
 +Hugo is for people that prefer writing in a text editor over a browser.
 +
 +Hugo is for people who want to hand code their own website without worrying about setting up complicated runtimes, dependencies and databases.
 +
 +Hugo is for people building a blog, a company site, a portfolio site, documentation, a single landing page, or a website with thousands of pages.
 +
 +[@spf13]: https://twitter.com/spf13
 +[Amazon S3]: https://aws.amazon.com/s3/
 +[Azure]: https://docs.microsoft.com/en-us/azure/storage/blobs/storage-blob-static-website
 +[CloudFront]: https://aws.amazon.com/cloudfront/ "Amazon CloudFront"
 +[DreamHost]: https://www.dreamhost.com/
 +[Firebase]: https://firebase.google.com/docs/hosting/ "Firebase static hosting"
 +[GitHub Pages]: https://pages.github.com/
 +[GitLab Pages]: https://about.gitlab.com/features/pages/
 +[Go language]: https://go.dev/
 +[GoDaddy]: https://www.godaddy.com/ "GoDaddy.com Hosting"
 +[Google Cloud Storage]: https://cloud.google.com/storage/
 +[Heroku]: https://www.heroku.com/
 +[Jekyll]: https://jekyllrb.com/
 +[Middleman]: https://middlemanapp.com/
 +[Nanoc]: https://nanoc.ws/
 +[Netlify]: https://netlify.com
 +[Rackspace]: https://www.rackspace.com/cloud/files
 +[Surge]: https://surge.sh
 +[contributing to it]: https://github.com/gohugoio/hugo
 +[rackspace]: https://www.rackspace.com/openstack/public/files
 +[static site generator]: /about/benefits/
index 31e22983828be37648a575b80e841e301cad5296,0000000000000000000000000000000000000000..1d2ba317937be49631461f2b25946a7eb5e97a53
mode 100644,000000..100644
--- /dev/null
@@@ -1,91 -1,0 +1,91 @@@
- **Archetypes** are content template files in the [archetypes directory][] of your project that contain preconfigured [front matter][] and possibly also a content disposition for your website's [content types][]. These will be used when you run `hugo new`.
 +---
 +title: Archetypes
 +linkTitle: Archetypes
 +description: Archetypes are templates used when creating new content.
 +keywords: [archetypes,generators,metadata,front matter]
 +categories: [content management]
 +menu:
 +  docs:
 +    parent: content-management
 +    weight: 140
 +  quicklinks:
 +toc: true
 +weight: 140
 +aliases: [/content/archetypes/]
 +---
 +
 +## What are Archetypes?
 +
++**Archetypes** are content template files in the [archetypes directory] of your project that contain preconfigured [front matter] and possibly also a content disposition for your website's [content types]. These will be used when you run `hugo new`.
 +
 +
 +The `hugo new` uses the `content-section` to find the most suitable archetype template in your project. If your project does not contain any archetype files, it will also look in the theme.
 +
 +{{< code file="archetype-example.sh" >}}
 +hugo new posts/my-first-post.md
 +{{< /code >}}
 +
 +The above will create a new content file in `content/posts/my-first-post.md` using the first archetype file found of these:
 +
 +1. `archetypes/posts.md`
 +2. `archetypes/default.md`
 +3. `themes/my-theme/archetypes/posts.md`
 +4. `themes/my-theme/archetypes/default.md`
 +
 +The last two list items are only applicable if you use a theme and it uses the `my-theme` theme name as an example.
 +
 +## Create a New Archetype Template
 +
 +A fictional example for the section `newsletter` and the archetype file `archetypes/newsletter.md`. Create a new file in `archetypes/newsletter.md` and open it in a text editor.
 +
 +{{< code file="archetypes/newsletter.md" >}}
 +---
 +title: "{{ replace .Name "-" " " | title }}"
 +date: {{ .Date }}
 +draft: true
 +---
 +
 +**Insert Lead paragraph here.**
 +
 +## New Cool Posts
 +
 +{{ range first 10 ( where .Site.RegularPages "Type" "cool" ) }}
 +* {{ .Title }}
 +{{ end }}
 +{{< /code >}}
 +
 +When you create a new newsletter with:
 +
 +```bash
 +hugo new newsletter/the-latest-cool.stuff.md
 +```
 +
 +It will create a new newsletter type of content file based on the archetype template.
 +
 +**Note:** the site will only be built if the `.Site` is in use in the archetype file, and this can be time consuming for big sites.
 +
 +The above _newsletter type archetype_ illustrates the possibilities: The full Hugo `.Site` and all of Hugo&#39;s template funcs can be used in the archetype file.
 +
 +## Directory based archetypes
 +
 +Since Hugo `0.49` you can use complete directories as archetype templates. Given this archetype directory:
 +
 +```bash
 +archetypes
 +├── default.md
 +└── post-bundle
 +    ├── bio.md
 +    ├── images
 +    │   └── featured.jpg
 +    └── index.md
 +```
 +
 +```bash
 +hugo new --kind post-bundle posts/my-post
 +```
 +
 +Will create a new folder in `/content/posts/my-post` with the same set of files as in the `post-bundle` archetypes folder. All content files (`index.md` etc.) can contain template logic, and will receive the correct `.Site` for the content's language.
 +
 +[archetypes directory]: /getting-started/directory-structure/
 +[content types]: /content-management/types/
 +[front matter]: /content-management/front-matter/
index bb6a8d6ce88c02649c5d1b143dfe1314731ecc97,0000000000000000000000000000000000000000..e49711e7c70dd4772ae831044843b8f6d85144d2
mode 100644,000000..100644
--- /dev/null
@@@ -1,72 -1,0 +1,72 @@@
- For many websites, this is enough configuration. However, you also have the option to set the following in the [front matter][] of a single content file:
 +---
 +title: Comments
 +linkTitle: Comments
 +description: Hugo ships with an internal Disqus template, but this isn't the only commenting system that will work with your new Hugo website.
 +keywords: [sections,content,organization]
 +categories: [project organization, fundamentals]
 +menu:
 +  docs:
 +    parent: content-management
 +    weight: 220
 +toc: true
 +weight: 220
 +aliases: [/extras/comments/]
 +---
 +
 +Hugo ships with support for [Disqus](https://disqus.com/), a third-party service that provides comment and community capabilities to websites via JavaScript.
 +
 +Your theme may already support Disqus, but if not, it is easy to add to your templates via [Hugo's built-in Disqus partial][disquspartial].
 +
 +## Add Disqus
 +
 +Hugo comes with all the code you need to load Disqus into your templates. Before adding Disqus to your site, you'll need to [set up an account][disqussetup].
 +
 +### Configure Disqus
 +
 +Disqus comments require you set a single value in your [site's configuration file][configuration] like so:
 +
 +{{< code-toggle copy="false" >}}
 +disqusShortname = "yourDisqusShortname"
 +{{</ code-toggle >}}
 +
++For many websites, this is enough configuration. However, you also have the option to set the following in the [front matter] of a single content file:
 +
 +* `disqus_identifier`
 +* `disqus_title`
 +* `disqus_url`
 +
 +### Render Hugo's Built-in Disqus Partial Template
 +
 +Disqus has its own [internal template](https://gohugo.io/templates/internal/#disqus) available, to render it add the following code where you want comments to appear:
 +
 +```go-html-template
 +{{ template "_internal/disqus.html" . }}
 +```
 +
 +## Alternatives
 +
 +These are some alternatives to Disqus:
 +
 +* [Cactus Comments](https://cactus.chat/docs/integrations/hugo/) (Open Source, Matrix appservice, Docker install)
 +* [Commento](https://commento.io/) (Open Source, available as a service, local install, or docker image)
 +* [Graph Comment](https://graphcomment.com/)
 +* [Hyvor Talk](https://talk.hyvor.com/) (Available as a service)
 +* [IntenseDebate](https://intensedebate.com/)
 +* [Isso](https://isso-comments.de/) (Self-hosted, Python) ([tutorial][issotutorial])
 +* [Muut](https://muut.com/)
 +* [Remark42](https://remark42.com/) (Open source, Golang, Easy to run docker)
 +* [ReplyBox](https://getreplybox.com/)
 +* [Staticman](https://staticman.net/)
 +* [Talkyard](https://blog-comments.talkyard.io/) (Open source, & serverless hosting)
 +* [Utterances](https://utteranc.es/) (Open source, GitHub comments widget built on GitHub issues)
 +
 +[configuration]: /getting-started/configuration/
 +[disquspartial]: /templates/internal/#disqus
 +[disqussetup]: https://disqus.com/profile/signup/
 +[forum]: https://discourse.gohugo.io
 +[front matter]: /content-management/front-matter/
 +[kaijuissue]: https://github.com/spf13/kaiju/issues/new
 +[issotutorial]: https://stiobhart.net/2017-02-24-isso-comments/
 +[partials]: /templates/partials/
 +[MongoDB]: https://www.mongodb.com/
 +[tweet]: https://twitter.com/spf13
index 71e6e36eaadccaae8039b017242154316a3a0f61,0000000000000000000000000000000000000000..bf530518fdfcca60441082b701e675f0349c8b83
mode 100644,000000..100644
--- /dev/null
@@@ -1,241 -1,0 +1,241 @@@
- **Front matter** allows you to keep metadata attached to an instance of a [content type][]---i.e., embedded inside a content file---and is one of the many features that gives Hugo its strength.
 +---
 +title: Front Matter
 +linkTitle: Front Matter
 +description: Hugo allows you to add front matter in yaml, toml, or json to your content files.
 +lastmod: 2017-02-24
 +categories: [content management]
 +keywords: ["front matter", "yaml", "toml", "json", "metadata", "archetypes"]
 +menu:
 +  docs:
 +    parent: content-management
 +    weight: 60
 +toc: true
 +weight: 60
 +aliases: [/content/front-matter/]
 +---
 +
- : the type of the content; this value will be automatically derived from the directory (i.e., the [section][]) if not specified in front matter.
++**Front matter** allows you to keep metadata attached to an instance of a [content type]---i.e., embedded inside a content file---and is one of the many features that gives Hugo its strength.
 +
 +{{< youtube Yh2xKRJGff4 >}}
 +
 +## Front Matter Formats
 +
 +Hugo supports four formats for front matter, each with their own identifying tokens.
 +
 +TOML
 +: identified by opening and closing `+++`.
 +
 +YAML
 +: identified by opening and closing `---`.
 +
 +JSON
 +: a single JSON object surrounded by '`{`' and '`}`', followed by a new line.
 +
 +ORG
 +: a group of Org mode keywords in the format '`#+KEY: VALUE`'. Any line that does not start with `#+` ends the front matter section.
 +  Keyword values can be either strings (`#+KEY: VALUE`) or a whitespace separated list of strings (`#+KEY[]: VALUE_1 VALUE_2`).
 +
 +### Example
 +
 +{{< code-toggle >}}
 +title = "spf13-vim 3.0 release and new website"
 +description = "spf13-vim is a cross platform distribution of vim plugins and resources for Vim."
 +tags = [ ".vimrc", "plugins", "spf13-vim", "vim" ]
 +date = "2012-04-06"
 +categories = [
 +  "Development",
 +  "VIM"
 +]
 +slug = "spf13-vim-3-0-release-and-new-website"
 +{{< /code-toggle >}}
 +
 +## Front Matter Variables
 +
 +### Predefined
 +
 +There are a few predefined variables that Hugo is aware of. See [Page Variables][pagevars] for how to call many of these predefined variables in your templates.
 +
 +aliases
 +: an array of one or more aliases (e.g., old published paths of renamed content) that will be created in the output directory structure . See [Aliases][aliases] for details.
 +
 +audio
 +: an array of paths to audio files related to the page; used by the `opengraph` [internal template](/templates/internal) to populate `og:audio`.
 +
 +cascade
 +: a map of Front Matter keys whose values are passed down to the page's descendants unless overwritten by self or a closer ancestor's cascade. See [Front Matter Cascade](#front-matter-cascade) for details.
 +
 +date
 +: the datetime assigned to this page. This is usually fetched from the `date` field in front matter, but this behavior is configurable.
 +
 +description
 +: the description for the content.
 +
 +draft
 +: if `true`, the content will not be rendered unless the `--buildDrafts` flag is passed to the `hugo` command.
 +
 +expiryDate
 +: the datetime at which the content should no longer be published by Hugo; expired content will not be rendered unless the `--buildExpired` flag is passed to the `hugo` command.
 +
 +headless
 +: if `true`, sets a leaf bundle to be [headless][headless-bundle].
 +
 +images
 +: an array of paths to images related to the page; used by [internal templates](/templates/internal) such as `_internal/twitter_cards.html`.
 +
 +isCJKLanguage
 +: if `true`, Hugo will explicitly treat the content as a CJK language; both `.Summary` and `.WordCount` work properly in CJK languages.
 +
 +keywords
 +: the meta keywords for the content.
 +
 +layout
 +: the layout Hugo should select from the [lookup order][lookup] when rendering the content. If a `type` is not specified in the front matter, Hugo will look for the layout of the same name in the layout directory that corresponds with a content's section. See [Content Types][content type].
 +
 +lastmod
 +: the datetime at which the content was last modified.
 +
 +linkTitle
 +: used for creating links to content; if set, Hugo defaults to using the `linktitle` before the `title`. Hugo can also [order lists of content by `linktitle`][bylinktitle].
 +
 +markup
 +: **experimental**; specify `"rst"` for reStructuredText (requires`rst2html`) or `"md"` (default) for Markdown.
 +
 +outputs
 +: allows you to specify output formats specific to the content. See [output formats][outputs].
 +
 +publishDate
 +: if in the future, content will not be rendered unless the `--buildFuture` flag is passed to `hugo`.
 +
 +resources
 +: used for configuring page bundle resources. See [Page Resources][page-resources].
 +
 +series
 +: an array of series this page belongs to, as a subset of the `series` [taxonomy](/content-management/taxonomies/); used by the `opengraph` [internal template](/templates/internal) to populate `og:see_also`.
 +
 +slug
 +: appears as the tail of the output URL. A value specified in front matter will override the segment of the URL based on the filename.
 +
 +summary
 +: text used when providing a summary of the article in the `.Summary` page variable; details available in the [content-summaries](/content-management/summaries/) section.
 +
 +title
 +: the title for the content.
 +
 +type
- The following fields can be accessed via `.Params.include_toc` and `.Params.show_comments`, respectively. The [Variables][] section provides more information on using Hugo's page- and site-level variables in your templates.
++: the type of the content; this value will be automatically derived from the directory (i.e., the [section]) if not specified in front matter.
 +
 +url
 +: the full path to the content from the web root. It makes no assumptions about the path of the content file. See [URL Management](/content-management/urls/#set-url-in-front-matter).
 +
 +videos
 +: an array of paths to videos related to the page; used by the `opengraph` [internal template](/templates/internal) to populate `og:video`.
 +
 +weight
 +: used for [ordering your content in lists][ordering]. Lower weight gets higher precedence. So content with lower weight will come first. If set, weights should be non-zero, as 0 is interpreted as an *unset* weight.
 +
 +\<taxonomies\>
 +: field name of the *plural* form of the index. See `tags` and `categories` in the above front matter examples. *Note that the plural form of user-defined taxonomies cannot be the same as any of the predefined front matter variables.*
 +
 +{{% note "Hugo's Default URL Destinations" %}}
 +If neither `slug` nor `url` is present and [permalinks are not configured otherwise in your site `config` file](/content-management/urls/#permalinks), Hugo will use the filename of your content to create the output URL. See [Content Organization](/content-management/organization) for an explanation of paths in Hugo and [URL Management](/content-management/urls/) for ways to customize Hugo's default behaviors.
 +{{% /note %}}
 +
 +### User-Defined
 +
 +You can add fields to your front matter arbitrarily to meet your needs. These user-defined key-values are placed into a single `.Params` variable for use in your templates.
 +
++The following fields can be accessed via `.Params.include_toc` and `.Params.show_comments`, respectively. The [Variables] section provides more information on using Hugo's page- and site-level variables in your templates.
 +
 +{{< code-toggle copy="false" >}}
 +include_toc: true
 +show_comments: false
 +{{</ code-toggle >}}
 +
 +## Front Matter Cascade
 +
 +Any node or section can pass down to descendants a set of Front Matter values as long as defined underneath the reserved `cascade` Front Matter key.
 +
 +### Target Specific Pages
 +
 +The `cascade` block can be a slice with a optional `_target` keyword, allowing for multiple `cascade` values targeting different page sets.
 +
 +{{< code-toggle copy="false" >}}
 +title ="Blog"
 +[[cascade]]
 +background = "yosemite.jpg"
 +[cascade._target]
 +path="/blog/**"
 +lang="en"
 +kind="page"
 +[[cascade]]
 +background = "goldenbridge.jpg"
 +[cascade._target]
 +kind="section"
 +{{</ code-toggle >}}
 +
 +Keywords available for `_target`:
 +
 +path
 +: A [Glob](https://github.com/gobwas/glob) pattern matching the content path below /content. Expects Unix-styled slashes. Note that this is the virtual path, so it starts at the mount root. The matching supports double-asterisks so you can match for patterns like `/blog/*/**` to match anything from the third level and down.
 +
 +kind
 +: A Glob pattern matching the Page's Kind(s), e.g. "{home,section}".
 +
 +lang
 +: A Glob pattern matching the Page's language, e.g. "{en,sv}".
 +
 +environment
 +: A Glob pattern matching the build environment, e.g. "{production,development}"
 +
 +Any of the above can be omitted.
 +
 +### Example
 +
 +In `content/blog/_index.md`
 +
 +{{< code-toggle copy="false" >}}
 +title: Blog
 +cascade:
 +  banner: images/typewriter.jpg
 +{{</ code-toggle >}}
 +
 +With the above example the Blog section page and its descendants will return `images/typewriter.jpg` when `.Params.banner` is invoked unless:
 +
 +- Said descendant has its own `banner` value set
 +- Or a closer ancestor node has its own `cascade.banner` value set.
 +
 +## Order Content Through Front Matter
 +
 +You can assign content-specific `weight` in the front matter of your content. These values are especially useful for [ordering][ordering] in list views. You can use `weight` for ordering of content and the convention of [`<TAXONOMY>_weight`][taxweight] for ordering content within a taxonomy. See [Ordering and Grouping Hugo Lists][lists] to see how `weight` can be used to organize your content in list views.
 +
 +## Override Global Markdown Configuration
 +
 +It's possible to set some options for Markdown rendering in a content's front matter as an override to the [Rendering options set in your project configuration][config].
 +
 +## Front Matter Format Specs
 +
 +- [TOML Spec][toml]
 +- [YAML Spec][yaml]
 +- [JSON Spec][json]
 +
 +[variables]: /variables/
 +[aliases]: /content-management/urls/#aliases
 +[archetype]: /content-management/archetypes/
 +[bylinktitle]: /templates/lists/#by-link-title
 +[config]: /getting-started/configuration/ "Hugo documentation for site configuration"
 +[content type]: /content-management/types/
 +[contentorg]: /content-management/organization/
 +[headless-bundle]: /content-management/page-bundles/#headless-bundle
 +[json]: https://www.ecma-international.org/publications/files/ECMA-ST/ECMA-404.pdf "Specification for JSON, JavaScript Object Notation"
 +[lists]: /templates/lists/#order-content "See how to order content in list pages; for example, templates that look to specific _index.md for content and front matter."
 +[lookup]: /templates/lookup-order/ "Hugo traverses your templates in a specific order when rendering content to allow for DRYer templating."
 +[ordering]: /templates/lists/ "Hugo provides multiple ways to sort and order your content in list templates"
 +[outputs]: /templates/output-formats/ "With the release of v22, you can output your content to any text format using Hugo's familiar templating"
 +[page-resources]: /content-management/page-resources/
 +[pagevars]: /variables/page/
 +[section]: /content-management/sections/
 +[taxweight]: /content-management/taxonomies/
 +[toml]: https://github.com/toml-lang/toml "Specification for TOML, Tom's Obvious Minimal Language"
 +[urls]: /content-management/urls/
 +[variables]: /variables/
 +[yaml]: https://yaml.org/spec/ "Specification for YAML, YAML Ain't Markup Language"
index 4e4eba46eabf4ddc7aabf12a37a6bc452e06ea9e,0000000000000000000000000000000000000000..5eb5506d9397d25cd738215b91143babd4ab2087
mode 100644,000000..100644
--- /dev/null
@@@ -1,604 -1,0 +1,600 @@@
- {{% note %}}
- If using `url`, remember to include the language part as well: `/fr/compagnie/a-propos/`.
- {{%/ note %}}
 +---
 +title: Multilingual Mode
 +linkTitle: Multilingual
 +description: Hugo supports the creation of websites with multiple languages side by side.
 +categories: [content management]
 +keywords: [multilingual,i18n, internationalization]
 +menu:
 +  docs:
 +    parent: content-management
 +    weight: 230
 +toc: true
 +weight: 230
 +aliases: [/content/multilingual/,/tutorials/create-a-multilingual-site/]
 +---
 +
 +You should define the available languages in a `languages` section in your site configuration.
 +
 +> Also See [Hugo Multilingual Part 1: Content translation]
 +
 +## Configure Languages
 +
 +The following is an example of a site configuration for a multilingual Hugo project:
 +
 +{{< code-toggle file="config" >}}
 +defaultContentLanguage = "en"
 +copyright = "Everything is mine"
 +
 +[params]
 +[params.navigation]
 +help  = "Help"
 +
 +[languages]
 +[languages.en]
 +title = "My blog"
 +weight = 1
 +[languages.en.params]
 +linkedin = "https://linkedin.com/whoever"
 +
 +[languages.fr]
 +title = "Mon blogue"
 +weight = 2
 +[languages.fr.params]
 +linkedin = "https://linkedin.com/fr/whoever"
 +[languages.fr.params.navigation]
 +help  = "Aide"
 +
 +[languages.ar]
 +title = "مدونتي"
 +weight = 2
 +languagedirection = "rtl"
 +
 +[languages.pt-pt]
 +title = "O meu blog"
 +weight = 3
 +{{< /code-toggle >}}
 +
 +Anything not defined in a `languages` block will fall back to the global value for that key (e.g., `copyright` for the English `en` language). This also works for `params`, as demonstrated with `help` above: You will get the value `Aide` in French and `Help` in all the languages without this parameter set.
 +
 +With the configuration above, all content, sitemap, RSS feeds, pagination,
 +and taxonomy pages will be rendered below `/` in English (your default content language) and then below `/fr` in French.
 +
 +When working with front matter `Params` in [single page templates], omit the `params` in the key for the translation.
 +
 +`defaultContentLanguage` sets the project's default language. If not set, the default language will be `en`.
 +
 +If the default language needs to be rendered below its own language code (`/en`) like the others, set `defaultContentLanguageInSubdir: true`.
 +
 +Only the obvious non-global options can be overridden per language. Examples of global options are `baseURL`, `buildDrafts`, etc.
 +
 +**Please note:** use lowercase language codes, even when using regional languages (ie. use pt-pt instead of pt-PT). Currently Hugo language internals lowercase language codes, which can cause conflicts with settings like `defaultContentLanguage` which are not lowercased. Please track the evolution of this issue in [Hugo repository issue tracker](https://github.com/gohugoio/hugo/issues/7344)
 +
 +### Disable a Language
 +
 +You can disable one or more languages. This can be useful when working on a new translation.
 +
 +{{< code-toggle file="config" >}}
 +disableLanguages = ["fr", "ja"]
 +{{< /code-toggle >}}
 +
 +Note that you cannot disable the default content language.
 +
 +We kept this as a standalone setting to make it easier to set via [OS environment]:
 +
 +```bash
 +HUGO_DISABLELANGUAGES="fr ja" hugo
 +```
 +
 +If you have already a list of disabled languages in `config.toml`, you can enable them in development like this:
 +
 +```bash
 +HUGO_DISABLELANGUAGES=" " hugo server
 +```
 +
 +### Configure Multilingual Multihost
 +
 +From **Hugo 0.31** we support multiple languages in a multihost configuration. See [this issue](https://github.com/gohugoio/hugo/issues/4027) for details.
 +
 +This means that you can now configure a `baseURL` per `language`:
 +
 +> If a `baseURL` is set on the `language` level, then all languages must have one and they must all be different.
 +
 +Example:
 +
 +{{< code-toggle file="config" >}}
 +[languages]
 +[languages.fr]
 +baseURL = "https://example.fr"
 +languageName = "Français"
 +weight = 1
 +title = "En Français"
 +
 +[languages.en]
 +baseURL = "https://example.com"
 +languageName = "English"
 +weight = 2
 +title = "In English"
 +{{</ code-toggle >}}
 +
 +With the above, the two sites will be generated into `public` with their own root:
 +
 +```text
 +public
 +├── en
 +└── fr
 +```
 +
 +**All URLs (i.e `.Permalink` etc.) will be generated from that root. So the English home page above will have its `.Permalink` set to `https://example.com/`.**
 +
 +When you run `hugo server` we will start multiple HTTP servers. You will typically see something like this in the console:
 +
 +```text
 +Web Server is available at 127.0.0.1:1313 (bind address 127.0.0.1)
 +Web Server is available at 127.0.0.1:1314 (bind address 127.0.0.1)
 +Press Ctrl+C to stop
 +```
 +
 +Live reload and `--navigateToChanged` between the servers work as expected.
 +
 +
 +## Translate Your Content
 +
 +There are two ways to manage your content translations. Both ensure each page is assigned a language and is linked to its counterpart translations.
 +
 +### Translation by filename
 +
 +Considering the following example:
 +
 +1. `/content/about.en.md`
 +2. `/content/about.fr.md`
 +
 +The first file is assigned the English language and is linked to the second.
 +The second file is assigned the French language and is linked to the first.
 +
 +Their language is __assigned__ according to the language code added as a __suffix to the filename__.
 +
 +By having the same **path and base filename**, the content pieces are __linked__ together as translated pages.
 +
 +{{< note >}}
 +If a file has no language code, it will be assigned the default language.
 +{{</ note >}}
 +
 +### Translation by content directory
 +
 +This system uses different content directories for each of the languages. Each language's content directory is set using the `contentDir` param.
 +
 +{{< code-toggle file="config" >}}
 +languages:
 +  en:
 +    weight: 10
 +    languageName: "English"
 +    contentDir: "content/english"
 +  fr:
 +    weight: 20
 +    languageName: "Français"
 +    contentDir: "content/french"
 +{{< /code-toggle >}}
 +
 +The value of `contentDir` can be any valid path -- even absolute path references. The only restriction is that the content directories cannot overlap.
 +
 +Considering the following example in conjunction with the configuration above:
 +
 +1. `/content/english/about.md`
 +2. `/content/french/about.md`
 +
 +The first file is assigned the English language and is linked to the second.
 +The second file is assigned the French language and is linked to the first.
 +
 +Their language is __assigned__ according to the content directory they are __placed__ in.
 +
 +By having the same **path and basename** (relative to their language content directory), the content pieces are __linked__ together as translated pages.
 +
 +### Bypassing default linking
 +
 +Any pages sharing the same `translationKey` set in front matter will be linked as translated pages regardless of basename or location.
 +
 +Considering the following example:
 +
 +1. `/content/about-us.en.md`
 +2. `/content/om.nn.md`
 +3. `/content/presentation/a-propos.fr.md`
 +
 +{{< code-toggle >}}
 +translationKey: "about"
 +{{< /code-toggle >}}
 +
 +By setting the `translationKey` front matter param to `about` in all three pages, they will be __linked__ as translated pages.
 +
 +### Localizing permalinks
 +
 +Because paths and filenames are used to handle linking, all translated pages will share the same URL (apart from the language subdirectory).
 +
 +To localize the URLs, the [`slug`]({{< ref "/content-management/organization/index.md#slug" >}}) or [`url`]({{< ref "/content-management/organization/index.md#url" >}}) front matter param can be set in any of the non-default language file.
 +
 +For example, a French translation (`content/about.fr.md`) can have its own localized slug.
 +
 +{{< code-toggle >}}
 +Title: A Propos
 +slug: "a-propos"
 +{{< /code-toggle >}}
 +
 +At render, Hugo will build both `/about/` and `/fr/a-propos/` while maintaining their translation linking.
 +
 +### Page Bundles
 +
 +To avoid the burden of having to duplicate files, each Page Bundle inherits the resources of its linked translated pages' bundles except for the content files (Markdown files, HTML files etc...).
 +
 +Therefore, from within a template, the page will have access to the files from all linked pages' bundles.
 +
 +If, across the linked bundles, two or more files share the same basename, only one will be included and chosen as follows:
 +
 +* File from current language bundle, if present.
 +* First file found across bundles by order of language `Weight`.
 +
 +{{% note %}}
 +Page Bundle resources follow the same language assignment logic as content files, both by filename (`image.jpg`, `image.fr.jpg`) and by directory (`english/about/header.jpg`, `french/about/header.jpg`).
 +{{%/ note %}}
 +
 +## Reference the Translated Content
 +
 +To create a list of links to translated content, use a template similar to the following:
 +
 +{{< code file="layouts/partials/i18nlist.html" >}}
 +{{ if .IsTranslated }}
 +<h4>{{ i18n "translations" }}</h4>
 +<ul>
 +  {{ range .Translations }}
 +  <li>
 +    <a href="{{ .Permalink }}">{{ .Lang }}: {{ .Title }}{{ if .IsPage }} ({{ i18n "wordCount" . }}){{ end }}</a>
 +  </li>
 +  {{ end }}
 +</ul>
 +{{ end }}
 +{{< /code >}}
 +
 +The above can be put in a `partial` (i.e., inside `layouts/partials/`) and included in any template, whether a [single content page][contenttemplate] or the [homepage]. It will not print anything if there are no translations for a given page.
 +
 +The above also uses the [`i18n` function][i18func] described in the next section.
 +
 +### List All Available Languages
 +
 +`.AllTranslations` on a `Page` can be used to list all translations, including the page itself. On the home page it can be used to build a language navigator:
 +
 +{{< code file="layouts/partials/allLanguages.html" >}}
 +<ul>
 +{{ range $.Site.Home.AllTranslations }}
 +<li><a href="{{ .Permalink }}">{{ .Language.LanguageName }}</a></li>
 +{{ end }}
 +</ul>
 +{{< /code >}}
 +
 +## Translation of Strings
 +
 +Hugo uses [go-i18n] to support string translations. [See the project's source repository][go-i18n-source] to find tools that will help you manage your translation workflows.
 +
 +Translations are collected from the `themes/<THEME>/i18n/` folder (built into the theme), as well as translations present in `i18n/` at the root of your project. In the `i18n`, the translations will be merged and take precedence over what is in the theme folder. Language files should be named according to [RFC 5646] with names such as `en-US.toml`, `fr.toml`, etc.
 +
 +Artificial languages with private use subtags as defined in [RFC 5646 &#167; 2.2.7](https://datatracker.ietf.org/doc/html/rfc5646#section-2.2.7) are also supported. You may omit the `art-x-` prefix for brevity. For example:
 +
 +```text
 +art-x-hugolang
 +hugolang
 +```
 +
 +Private use subtags must not exceed 8 alphanumeric characters.
 +
 +### Query basic translation
 +
 +From within your templates, use the `i18n` function like this:
 +
 +```go-html-template
 +{{ i18n "home" }}
 +```
 +
 +The function will search for the `"home"` id:
 +
 +{{< code-toggle file="i18n/en-US" >}}
 +[home]
 +other = "Home"
 +{{< /code-toggle >}}
 +
 +The result will be
 +
 +```text
 +Home
 +```
 +
 +### Query a flexible translation with variables
 +
 +Often you will want to use the page variables in the translation strings. To do so, pass the `.` context when calling `i18n`:
 +
 +```go-html-template
 +{{ i18n "wordCount" . }}
 +```
 +
 +The function will pass the `.` context to the `"wordCount"` id:
 +
 +{{< code-toggle file="i18n/en-US" >}}
 +[wordCount]
 +other = "This article has {{ .WordCount }} words."
 +{{< /code-toggle >}}
 +
 +Assume `.WordCount` in the context has value is 101. The result will be:
 +
 +```text
 +This article has 101 words.
 +```
 +
 +### Query a singular/plural translation
 +
 +In other to meet singular/plural requirement, you must pass a dictionary (map) with a numeric `.Count` property to the `i18n` function. The below example uses `.ReadingTime` variable which has a built-in `.Count` property.
 +
 +```go-html-template
 +{{ i18n "readingTime" .ReadingTime }}
 +```
 +
 +The function will read `.Count` from `.ReadingTime` and evaluate whether the number is singular (`one`) or plural (`other`). After that, it will pass to `readingTime` id in `i18n/en-US.toml` file:
 +
 +{{< code-toggle file="i18n/en-US" >}}
 +[readingTime]
 +one = "One minute to read"
 +other = "{{.Count}} minutes to read"
 +{{< /code-toggle >}}
 +
 +Assuming `.ReadingTime.Count` in the context has value is 525600. The result will be:
 +
 +```text
 +525600 minutes to read
 +```
 +
 +If `.ReadingTime.Count` in the context has value is 1. The result is:
 +
 +```text
 +One minute to read
 +```
 +
 +In case you need to pass a custom data: (`(dict "Count" numeric_value_only)` is minimum requirement)
 +
 +```go-html-template
 +{{ i18n "readingTime" (dict "Count" 25 "FirstArgument" true "SecondArgument" false "Etc" "so on, so far") }}
 +```
 +
 +## Localization
 +
 +The following localization examples assume your site's primary language is English, with translations to French and German.
 +
 +{{< code-toggle file="config" >}}
 +defaultContentLanguage = 'en'
 +
 +[languages]
 +[languages.en]
 +contentDir = 'content/en'
 +languageName = 'English'
 +weight = 1
 +[languages.fr]
 +contentDir = 'content/fr'
 +languageName = 'Français'
 +weight = 2
 +[languages.de]
 +contentDir = 'content/de'
 +languageName = 'Deutsch'
 +weight = 3
 +
 +{{< /code-toggle >}}
 +
 +### Dates
 +
 +With this front matter:
 +
 +{{< code-toggle >}}
 +date = 2021-11-03T12:34:56+01:00
 +{{< /code-toggle >}}
 +
 +And this template code:
 +
 +```go-html-template
 +{{ .Date | time.Format ":date_full" }}
 +```
 +
 +The rendered page displays:
 +
 +Language|Value
 +:--|:--
 +English|Wednesday, November 3, 2021
 +Français|mercredi 3 novembre 2021
 +Deutsch|Mittwoch, 3. November 2021
 +
 +See [time.Format] for details.
 +
 +### Currency
 +
 +With this template code:
 +
 +```go-html-template
 +{{ 512.5032 | lang.FormatCurrency 2 "USD" }}
 +```
 +
 +The rendered page displays:
 +
 +Language|Value
 +:--|:--
 +English|$512.50
 +Français|512,50 $US
 +Deutsch|512,50 $
 +
 +See [lang.FormatCurrency] and [lang.FormatAccounting] for details.
 +
 +### Numbers
 +
 +With this template code:
 +
 +```go-html-template
 +{{ 512.5032 | lang.FormatNumber 2 }}
 +```
 +
 +The rendered page displays:
 +
 +Language|Value
 +:--|:--
 +English|512.50
 +Français|512,50
 +Deutsch|512,50
 +
 +See [lang.FormatNumber] and [lang.FormatNumberCustom] for details.
 +
 +### Percentages
 +
 +With this template code:
 +
 +```go-html-template
 +{{ 512.5032 | lang.FormatPercent 2 }} ---> 512.50%
 +```
 +
 +The rendered page displays:
 +
 +Language|Value
 +:--|:--
 +English|512.50%
 +Français|512,50 %
 +Deutsch|512,50 %
 +
 +See [lang.FormatPercent] for details.
 +
 +## Menus
 +
 +You can define your menus for each language independently. Creating multilingual menus works just like [creating regular menus][menus], except they're defined in language-specific blocks in the configuration file:
 +
 +{{< code-toggle file="config" >}}
 +defaultContentLanguage = "en"
 +
 +[languages.en]
 +weight = 0
 +languageName = "English"
 +
 +[[languages.en.menu.main]]
 +url    = "/"
 +name   = "Home"
 +weight = 0
 +
 +[languages.de]
 +weight = 10
 +languageName = "Deutsch"
 +
 +[[languages.de.menu.main]]
 +url    = "/"
 +name   = "Startseite"
 +weight = 0
 +{{< /code-toggle >}}
 +
 +The rendering of the main navigation works as usual. `.Site.Menus` will just contain the menu in the current language. Note that `absLangURL` below will link to the correct locale of your website. Without it, menu entries in all languages would link to the English version, since it's the default content language that resides in the root directory.
 +
 +```go-html-template
 +<ul>
 +    {{- $currentPage := . -}}
 +    {{ range .Site.Menus.main -}}
 +    <li class="{{ if $currentPage.IsMenuCurrent "main" . }}active{{ end }}">
 +        <a href="{{ .URL | absLangURL }}">{{ .Name }}</a>
 +    </li>
 +    {{- end }}
 +</ul>
 +```
 +
 +### Dynamically localizing menus with i18n
 +
 +While customizing menus per language is useful, your config file can become hard to maintain if you have a lot of languages
 +
 +If your menus are the same in all languages (ie. if the only thing that changes is the translated name) you can use the `.Identifier` as a translation key for the menu name:
 +
 +{{< code-toggle file="config" >}}
 +[[menu.main]]
 +name = "About me"
 +url = "about"
 +weight = 1
 +identifier = "about"
 +{{< /code-toggle >}}
 +
 +You now need to specify the translations for the menu keys in the i18n files:
 +
 +{{< code file="i18n/pt.toml" >}}
 +[about]
 +other="Sobre mim"
 +{{< /code >}}
 +
 +And do the appropriate changes in the menu code to use the `i18n` tag with the `.Identifier` as a key. You will also note that here we are using a `default` to fall back to `.Name`, in case the `.Identifier` key is also not present in the language specified in the `defaultContentLanguage` configuration.
 +
 +{{< code file="layouts/partials/menu.html" >}}
 +<ul>
 +    {{- $currentPage := . -}}
 +    {{ range .Site.Menus.main -}}
 +    <li class="{{ if $currentPage.IsMenuCurrent "main" . }}active{{ end }}">
 +        <a href="{{ .URL | absLangURL }}">{{ i18n .Identifier | default .Name}}</a>
 +    </li>
 +    {{- end }}
 +</ul>
 +{{< /code >}}
 +
 +## Missing Translations
 +
 +If a string does not have a translation for the current language, Hugo will use the value from the default language. If no default value is set, an empty string will be shown.
 +
 +While translating a Hugo website, it can be handy to have a visual indicator of missing translations. The [`enableMissingTranslationPlaceholders` configuration option][config] will flag all untranslated strings with the placeholder `[i18n] identifier`, where `identifier` is the id of the missing translation.
 +
 +{{% note %}}
 +Hugo will generate your website with these missing translation placeholders. It might not be suitable for production environments.
 +{{% /note %}}
 +
 +For merging of content from other languages (i.e. missing content translations), see [lang.Merge].
 +
 +To track down missing translation strings, run Hugo with the `--printI18nWarnings` flag:
 +
 +```bash
 +hugo --printI18nWarnings | grep i18n
 +i18n|MISSING_TRANSLATION|en|wordCount
 +```
 +
 +## Multilingual Themes support
 +
 +To support Multilingual mode in your themes, some considerations must be taken for the URLs in the templates. If there is more than one language, URLs must meet the following criteria:
 +
 +* Come from the built-in `.Permalink` or `.RelPermalink`
 +* Be constructed with the [`relLangURL` template function][rellangurl] or the [`absLangURL` template function][abslangurl] **OR** be prefixed with `{{ .LanguagePrefix }}`
 +
 +If there is more than one language defined, the `LanguagePrefix` variable will equal `/en` (or whatever your `CurrentLanguage` is). If not enabled, it will be an empty string (and is therefore harmless for single-language Hugo websites).
 +
 +
 +## Generate multilingual content with `hugo new`
 +
 +If you organize content with translations in the same directory:
 +
 +```text
 +hugo new post/test.en.md
 +hugo new post/test.de.md
 +```
 +
 +If you organize content with translations in different directories:
 +
 +```text
 +hugo new content/en/post/test.md
 +hugo new content/de/post/test.md
 +```
 +
 +[abslangurl]: /functions/abslangurl
 +[config]: /getting-started/configuration/
 +[contenttemplate]: /templates/single-page-templates/
 +[go-i18n-source]: https://github.com/nicksnyder/go-i18n
 +[go-i18n]: https://github.com/nicksnyder/go-i18n
 +[homepage]: /templates/homepage/
 +[Hugo Multilingual Part 1: Content translation]: https://regisphilibert.com/blog/2018/08/hugo-multilingual-part-1-managing-content-translation/
 +[i18func]: /functions/i18n/
 +[lang.FormatAccounting]: /functions/lang/#langformataccounting
 +[lang.FormatCurrency]: /functions/lang/#langformatcurrency
 +[lang.FormatNumber]: /functions/lang/#langformatnumber
 +[lang.FormatNumberCustom]: /functions/lang/#langformatnumbercustom
 +[lang.FormatPercent]: /functions/lang/#langformatpercent
 +[lang.Merge]: /functions/lang.merge/
 +[menus]: /content-management/menus/
 +[OS environment]: /getting-started/configuration/#configure-with-environment-variables
 +[rellangurl]: /functions/rellangurl
 +[RFC 5646]: https://tools.ietf.org/html/rfc5646
 +[single page templates]: /templates/single-page-templates/
 +[time.Format]: /functions/dateformat
index b677d8c188fa11eb4fc2b9f96f598a67efb93f05,0000000000000000000000000000000000000000..94c0cfd5a35cbbb72cefc37e72b6e62d1e3fc073
mode 100644,000000..100644
--- /dev/null
@@@ -1,235 -1,0 +1,235 @@@
- While Hugo supports content nested at any level, the top levels (i.e. `content/<DIRECTORIES>`) are special in Hugo and are considered the content type used to determine layouts etc. To read more about sections, including how to nest them, see [sections][].
 +---
 +title: Content Organization
 +linkTitle: Organization
 +description: Hugo assumes that the same structure that works to organize your source content is used to organize the rendered site.
 +categories: [content management,fundamentals]
 +keywords: [sections,content,organization,bundle,resources]
 +menu:
 +  docs:
 +    parent: content-management
 +    weight: 20
 +toc: true
 +weight: 20
 +aliases: [/content/sections/]
 +---
 +
 +## Page Bundles
 +
 +Hugo `0.32` announced page-relative images and other resources packaged into `Page Bundles`.
 +
 +These terms are connected, and you also need to read about [Page Resources]({{< relref "/content-management/page-resources" >}}) and [Image Processing]({{< relref "/content-management/image-processing" >}}) to get the full picture.
 +
 +{{< imgproc 1-featured Resize "300x" >}}
 +The illustration shows three bundles. Note that the home page bundle cannot contain other content pages, although other files (images etc.) are allowed.
 +{{< /imgproc >}}
 +
 +
 +{{% note %}}
 +The bundle documentation is a **work in progress**. We will publish more comprehensive docs about this soon.
 +{{% /note %}}
 +
 +
 +## Organization of Content Source
 +
 +In Hugo, your content should be organized in a manner that reflects the rendered website.
 +
- `_index.md` has a special role in Hugo. It allows you to add front matter and content to your [list templates][lists]. These templates include those for [section templates][], [taxonomy templates][], [taxonomy terms templates][], and your [homepage template][].
++While Hugo supports content nested at any level, the top levels (i.e. `content/<DIRECTORIES>`) are special in Hugo and are considered the content type used to determine layouts etc. To read more about sections, including how to nest them, see [sections].
 +
 +Without any additional configuration, the following will automatically work:
 +
 +```txt
 +.
 +└── content
 +    └── about
 +    |   └── index.md  // <- https://example.com/about/
 +    ├── posts
 +    |   ├── firstpost.md   // <- https://example.com/posts/firstpost/
 +    |   ├── happy
 +    |   |   └── ness.md  // <- https://example.com/posts/happy/ness/
 +    |   └── secondpost.md  // <- https://example.com/posts/secondpost/
 +    └── quote
 +        ├── first.md       // <- https://example.com/quote/first/
 +        └── second.md      // <- https://example.com/quote/second/
 +```
 +
 +## Path Breakdown in Hugo
 +
 +
 +The following demonstrates the relationships between your content organization and the output URL structure for your Hugo website when it renders. These examples assume you are [using pretty URLs][pretty], which is the default behavior for Hugo. The examples also assume a key-value of `baseURL = "https://example.com"` in your [site's configuration file][config].
 +
 +### Index Pages: `_index.md`
 +
++`_index.md` has a special role in Hugo. It allows you to add front matter and content to your [list templates][lists]. These templates include those for [section templates], [taxonomy templates], [taxonomy terms templates], and your [homepage template].
 +
 +{{% note %}}
 +**Tip:** You can get a reference to the content and metadata in `_index.md` using the [`.Site.GetPage` function](/functions/getpage/).
 +{{% /note %}}
 +
 +You can create one `_index.md` for your homepage and one in each of your content sections, taxonomies, and taxonomy terms. The following shows typical placement of an `_index.md` that would contain content and front matter for a `posts` section list page on a Hugo website:
 +
 +
 +```txt
 +.         url
 +.       ⊢--^-⊣
 +.        path    slug
 +.       ⊢--^-⊣⊢---^---⊣
 +.           filepath
 +.       ⊢------^------⊣
 +content/posts/_index.md
 +```
 +
 +At build, this will output to the following destination with the associated values:
 +
 +```txt
 +
 +                     url ("/posts/")
 +                    ⊢-^-⊣
 +       baseurl      section ("posts")
 +⊢--------^---------⊣⊢-^-⊣
 +        permalink
 +⊢----------^-------------⊣
 +https://example.com/posts/index.html
 +```
 +
 +The [sections] can be nested as deeply as you want. The important thing to understand is that to make the section tree fully navigational, at least the lower-most section must include a content file. (i.e. `_index.md`).
 +
 +
 +### Single Pages in Sections
 +
 +Single content files in each of your sections will be rendered as [single page templates][singles]. Here is an example of a single `post` within `posts`:
 +
 +
 +```txt
 +                   path ("posts/my-first-hugo-post.md")
 +.       ⊢-----------^------------⊣
 +.      section        slug
 +.       ⊢-^-⊣⊢--------^----------⊣
 +content/posts/my-first-hugo-post.md
 +```
 +
 +When Hugo builds your site, the content will be output to the following destination:
 +
 +```txt
 +
 +                               url ("/posts/my-first-hugo-post/")
 +                   ⊢------------^----------⊣
 +       baseurl     section     slug
 +⊢--------^--------⊣⊢-^--⊣⊢-------^---------⊣
 +                 permalink
 +⊢--------------------^---------------------⊣
 +https://example.com/posts/my-first-hugo-post/index.html
 +```
 +
 +
 +## Paths Explained
 +
 +The following concepts provide more insight into the relationship between your project's organization and the default Hugo behavior when building output for the website.
 +
 +### `section`
 +
 +A default content type is determined by the section in which a content item is stored. `section` is determined by the location within the project's `content` directory. `section` *cannot* be specified or overridden in front matter.
 +
 +### `slug`
 +
 +A content's `slug` is either `name.extension` or `name/`. The value for `slug` is determined by
 +
 +* the name of the content file (e.g., `lollapalooza.md`) OR
 +* front matter overrides
 +
 +### `path`
 +
 +A content's `path` is determined by the section's path to the file. The file `path`
 +
 +* is based on the path to the content's location AND
 +* does not include the slug
 +
 +### `url`
 +
 +The `url` is the relative URL for the piece of content. The `url`
 +
 +* is based on the content item's location within the directory structure OR
 +* is defined in front matter, in which case it *overrides all the above*
 +
 +## Override Destination Paths via Front Matter
 +
 +Hugo assumes that your content is organized with a purpose. The same structure that you use to organize your source content is used to organize the rendered site. As displayed above, the organization of the source content will be mirrored at the destination.
 +
 +There are times when you may need more fine-grained control over the content organization. In such cases, the front matter field can be used to determine the destination of a specific piece of content.
 +
 +The following items are defined in a specific order for a reason: items explained lower down in the list override higher items. Note that not all items can be defined in front matter.
 +
 +### `filename`
 +
 +`filename` is not a front matter field. It is the actual file name, minus the extension. This will be the name of the file in the destination (e.g., `content/posts/my-post.md` becomes `example.com/posts/my-post/`).
 +
 +### `slug`
 +
 +When defined in the front matter, the `slug` can take the place of the filename in the destination.
 +
 +{{< code file="content/posts/old-post.md" >}}
 +---
 +title: A new post with the filename old-post.md
 +slug: "new-post"
 +---
 +{{< /code >}}
 +
 +This will render to the following destination according to Hugo's default behavior:
 +
 +```txt
 +example.com/posts/new-post/
 +```
 +
 +### `section`
 +
 +`section` is determined by a content item's location on disk and *cannot* be specified in the front matter. See [sections] for more information.
 +
 +### `type`
 +
 +A content item's `type` is also determined by its location on disk but, unlike `section`, it *can* be specified in the front matter. See [types]. This can come in especially handy when you want a piece of content to render using a different layout. In the following example, you can create a layout at `layouts/new/mylayout.html` that Hugo will use to render this piece of content, even in the midst of many other posts.
 +
 +{{< code file="content/posts/my-post.md" >}}
 +---
 +title: My Post
 +type: new
 +layout: mylayout
 +---
 +{{< /code >}}
 +<!-- See https://discourse.gohugo.io/t/path-not-works/6387 -->
 +<!-- ### `path`-->
 +
 +<!--`path` can be provided in the front matter. This will replace the actual path to the file on disk. Destination will create the destination with the same path, including the section. -->
 +
 +### `url`
 +
 +A complete URL can be provided. This will override all the above as it pertains to the end destination. This must be the path from the baseURL (starting with a `/`). `url` will be used exactly as it is defined in the front matter, and will ignore the `--uglyURLs` setting in your site configuration:
 +
 +{{< code file="content/posts/old-url.md" >}}
 +---
 +title: Old URL
 +url: /blog/new-url/
 +---
 +{{< /code >}}
 +
 +Assuming your `baseURL` is [configured][config] to `https://example.com`, the addition of `url` to the front matter will make `old-url.md` render to the following destination:
 +
 +```txt
 +https://example.com/blog/new-url/
 +```
 +
 +You can see more information on how to control output paths in [URL Management][urls].
 +
 +[config]: /getting-started/configuration/
 +[formats]: /content-management/formats/
 +[front matter]: /content-management/front-matter/
 +[getpage]: /functions/getpage/
 +[homepage template]: /templates/homepage/
 +[homepage]: /templates/homepage/
 +[lists]: /templates/lists/
 +[pretty]: /content-management/urls/#pretty-urls
 +[section templates]: /templates/section-templates/
 +[sections]: /content-management/sections/
 +[singles]: /templates/single-page-templates/
 +[taxonomy templates]: /templates/taxonomy-templates/
 +[taxonomy terms templates]: /templates/taxonomy-templates/
 +[types]: /content-management/types/
 +[urls]: /content-management/urls/
index 4335f137d669a123148f12db09d4e37214445e60,0000000000000000000000000000000000000000..5ff8846108d92815bd90f309d957303aca87a1a3
mode 100644,000000..100644
--- /dev/null
@@@ -1,100 -1,0 +1,100 @@@
- Hugo will automatically create a page for each *root section* that lists all the content in that section. See the documentation on [section templates][] for details on customizing the way these pages are rendered.
 +---
 +title: Content Sections
 +linkTitle: Sections
 +description: Hugo generates a **section tree** that matches your content.
 +date: 2017-02-01
 +publishdate: 2017-02-01
 +lastmod: 2017-02-01
 +categories: [content management]
 +keywords: [lists,sections,content types,organization]
 +menu:
 +  docs:
 +    parent: content-management
 +    weight: 120
 +toc: true
 +weight: 120
 +aliases: [/content/sections/]
 +---
 +
 +A **Section** is a collection of pages that gets defined based on the
 +organization structure under the `content/` directory.
 +
 +By default, all the **first-level** directories under `content/` form their own
 +sections (**root sections**) provided they constitute [Branch Bundles][branch bundles].
 +Directories which are just [Leaf Bundles][leaf bundles] do *not* form
 +their own sections, despite being first-level directories.
 +
 +If a user needs to define a section `foo` at a deeper level, they need to create
 +a directory named `foo` with an `_index.md` file (see [Branch Bundles][branch bundles]
 +for more information).
 +
 +
 +{{% note %}}
 +A **section** cannot be defined or overridden by a front matter parameter -- it
 +is strictly derived from the content organization structure.
 +{{% /note %}}
 +
 +## Nested Sections
 +
 +The sections can be nested as deeply as you need.
 +
 +```bash
 +content
 +└── blog        <-- Section, because first-level dir under content/
 +    ├── funny-cats
 +    │   ├── mypost.md
 +    │   └── kittens         <-- Section, because contains _index.md
 +    │       └── _index.md
 +    └── tech                <-- Section, because contains _index.md
 +        └── _index.md
 +```
 +
 +**The important part to understand is, that to make the section tree fully navigational, at least the lower-most section needs a content file. (e.g. `_index.md`).**
 +
 +{{% note %}}
 +When we talk about a **section** in correlation with template selection, it is
 +currently always the *root section* only (`/blog/funny-cats/mypost/ => blog`).
 +
 +If you need a specific template for a sub-section, you need to adjust either the `type` or `layout` in front matter.
 +{{% /note %}}
 +
 +## Example: Breadcrumb Navigation
 +
 +With the available [section variables and methods](#section-page-variables-and-methods) you can build powerful navigation. One common example would be a partial to show Breadcrumb navigation:
 +
 +{{< code file="layouts/partials/breadcrumb.html" download="breadcrumb.html" >}}
 +<ol  class="nav navbar-nav">
 +  {{ template "breadcrumbnav" (dict "p1" . "p2" .) }}
 +</ol>
 +{{ define "breadcrumbnav" }}
 +{{ if .p1.Parent }}
 +{{ template "breadcrumbnav" (dict "p1" .p1.Parent "p2" .p2 )  }}
 +{{ else if not .p1.IsHome }}
 +{{ template "breadcrumbnav" (dict "p1" .p1.Site.Home "p2" .p2 )  }}
 +{{ end }}
 +<li{{ if eq .p1 .p2 }} class="active" aria-current="page" {{ end }}>
 +  <a href="{{ .p1.Permalink }}">{{ .p1.Title }}</a>
 +</li>
 +{{ end }}
 +{{< /code >}}
 +
 +## Section Page Variables and Methods
 +
 +Also see [Page Variables](/variables/page/).
 +
 +{{< readfile file="/content/en/readfiles/sectionvars.md" markdown="true" >}}
 +
 +## Content Section Lists
 +
- By default, everything created within a section will use the [content `type`][content type] that matches the *root section* name. For example, Hugo will assume that `posts/post-1.md` has a `posts` content `type`. If you are using an [archetype][] for your `posts` section, Hugo will generate front matter according to what it finds in `archetypes/posts.md`.
++Hugo will automatically create a page for each *root section* that lists all the content in that section. See the documentation on [section templates] for details on customizing the way these pages are rendered.
 +
 +## Content *Section* vs Content *Type*
 +
++By default, everything created within a section will use the [content `type`][content type] that matches the *root section* name. For example, Hugo will assume that `posts/post-1.md` has a `posts` content `type`. If you are using an [archetype] for your `posts` section, Hugo will generate front matter according to what it finds in `archetypes/posts.md`.
 +
 +[archetype]: /content-management/archetypes/
 +[content type]: /content-management/types/
 +[directory structure]: /getting-started/directory-structure/
 +[section templates]: /templates/section-templates/
 +[leaf bundles]: /content-management/page-bundles/#leaf-bundles
 +[branch bundles]: /content-management/page-bundles/#branch-bundles
index 4bc425ff338c50aea5101809f4925d12c60a8c45,0000000000000000000000000000000000000000..6344446842fedf973f3e13dc9175af7cd3880719
mode 100644,000000..100644
--- /dev/null
@@@ -1,434 -1,0 +1,434 @@@
- If you'd like to embed a photo from [Instagram][], you only need the photo's ID. You can discern an Instagram photo ID from the URL:
 +---
 +title: Shortcodes
 +linkTitle: Shortcodes
 +description: Shortcodes are simple snippets inside your content files calling built-in or custom templates.
 +categories: [content management]
 +keywords: [markdown,content,shortcodes]
 +menu:
 +  docs:
 +    parent: content-management
 +    weight: 100
 +toc: true
 +weight: 100
 +aliases: [/extras/shortcodes/]
 +testparam: "Hugo Rocks!"
 +---
 +
 +## What a Shortcode is
 +
 +Hugo loves Markdown because of its simple content format, but there are times when Markdown falls short. Often, content authors are forced to add raw HTML (e.g., video `<iframe>`'s) to Markdown content. We think this contradicts the beautiful simplicity of Markdown's syntax.
 +
 +Hugo created **shortcodes** to circumvent these limitations.
 +
 +A shortcode is a simple snippet inside a content file that Hugo will render using a predefined template. Note that shortcodes will not work in template files. If you need the type of drop-in functionality that shortcodes provide but in a template, you most likely want a [partial template][partials] instead.
 +
 +In addition to cleaner Markdown, shortcodes can be updated any time to reflect new classes, techniques, or standards. At the point of site generation, Hugo shortcodes will easily merge in your changes. You avoid a possibly complicated search and replace operation.
 +
 +## Use Shortcodes
 +
 +{{< youtube 2xkNJL4gJ9E >}}
 +
 +In your content files, a shortcode can be called by calling `{{%/* shortcodename parameters */%}}`. Shortcode parameters are space delimited, and parameters with internal spaces can be quoted.
 +
 +The first word in the shortcode declaration is always the name of the shortcode. Parameters follow the name. Depending upon how the shortcode is defined, the parameters may be named, positional, or both, although you can't mix parameter types in a single call. The format for named parameters models that of HTML with the format `name="value"`.
 +
 +Some shortcodes use or require closing shortcodes. Again like HTML, the opening and closing shortcodes match (name only) with the closing declaration, which is prepended with a slash.
 +
 +Here are two examples of paired shortcodes:
 +
 +```go-html-template
 +{{%/* mdshortcode */%}}Stuff to `process` in the *center*.{{%/* /mdshortcode */%}}
 +```
 +
 +```go-html-template
 +{{</* highlight go */>}} A bunch of code here {{</* /highlight */>}}
 +```
 +
 +The examples above use two different delimiters, the difference being the `%` character in the first and the `<>` characters in the second.
 +
 +### Shortcodes with raw string parameters
 +
 +You can pass multiple lines as parameters to a shortcode by using raw string literals:
 +
 +```go-html-template
 +{{</*  myshortcode `This is some <b>HTML</b>,
 +and a new line with a "quoted string".` */>}}
 +```
 +
 +### Shortcodes with Markdown
 +
 +In Hugo `0.55` we changed how the `%` delimiter works. Shortcodes using the `%` as the outer-most delimiter will now be fully rendered when sent to the content renderer. They can be part of the generated table of contents, footnotes, etc.
 +
 +If you want the old behavior, you can put the following line in the start of your shortcode template:
 +
 +```go-html-template
 +{{ $_hugo_config := `{ "version": 1 }` }}
 +```
 +
 +### Shortcodes Without Markdown
 +
 +The `<` character indicates that the shortcode's inner content does *not* need further rendering. Often shortcodes without Markdown include internal HTML:
 +
 +```go-html-template
 +{{</* myshortcode */>}}<p>Hello <strong>World!</strong></p>{{</* /myshortcode */>}}
 +```
 +
 +### Nested Shortcodes
 +
 +You can call shortcodes within other shortcodes by creating your own templates that leverage the `.Parent` variable. `.Parent` allows you to check the context in which the shortcode is being called. See [Shortcode templates][sctemps].
 +
 +## Use Hugo's Built-in Shortcodes
 +
 +Hugo ships with a set of predefined shortcodes that represent very common usage. These shortcodes are provided for author convenience and to keep your Markdown content clean.
 +
 +### `figure`
 +
 +`figure` is an extension of the image syntax in Markdown, which does not provide a shorthand for the more semantic [HTML5 `<figure>` element][figureelement].
 +
 +The `figure` shortcode can use the following named parameters:
 +
 +src
 +: URL of the image to be displayed.
 +
 +link
 +: If the image needs to be hyperlinked, URL of the destination.
 +
 +target
 +: Optional `target` attribute for the URL if `link` parameter is set.
 +
 +rel
 +: Optional `rel` attribute for the URL if `link` parameter is set.
 +
 +alt
 +: Alternate text for the image if the image cannot be displayed.
 +
 +title
 +: Image title.
 +
 +caption
 +: Image caption.  Markdown within the value of `caption` will be rendered.
 +
 +class
 +: `class` attribute of the HTML `figure` tag.
 +
 +height
 +: `height` attribute of the image.
 +
 +width
 +: `width` attribute of the image.
 +
 +attr
 +: Image attribution text. Markdown within the value of `attr` will be rendered.
 +
 +attrlink
 +: If the attribution text needs to be hyperlinked, URL of the destination.
 +
 +#### Example `figure` Input
 +
 +{{< code file="figure-input-example.md" >}}
 +{{</* figure src="/media/spf13.jpg" title="Steve Francia" */>}}
 +{{< /code >}}
 +
 +#### Example `figure` Output
 +
 +{{< output file="figure-output-example.html" >}}
 +<figure>
 +  <img src="/media/spf13.jpg"  />
 +  <figcaption>
 +      <h4>Steve Francia</h4>
 +  </figcaption>
 +</figure>
 +{{< /output >}}
 +
 +### `gist`
 +
 +Bloggers often want to include GitHub gists when writing posts. Let's suppose we want to use the [gist at the following url][examplegist]:
 +
 +```txt
 +https://gist.github.com/spf13/7896402
 +```
 +
 +We can embed the gist in our content via username and gist ID pulled from the URL:
 +
 +```go-html-template
 +{{</* gist spf13 7896402 */>}}
 +```
 +
 +#### Example `gist` Input
 +
 +If the gist contains several files and you want to quote just one of them, you can pass the filename (quoted) as an optional third argument:
 +
 +{{< code file="gist-input.md" >}}
 +{{</* gist spf13 7896402 "img.html" */>}}
 +{{< /code >}}
 +
 +#### Example `gist` Output
 +
 +{{< output file="gist-output.html" >}}
 +{{< gist spf13 7896402 >}}
 +{{< /output >}}
 +
 +#### Example `gist` Display
 +
 +To demonstrate the remarkable efficiency of Hugo's shortcode feature, we have embedded the `spf13` `gist` example in this page. The following simulates the experience for visitors to your website. Naturally, the final display will depend on your stylesheets and surrounding markup.
 +
 +{{< gist spf13 7896402 >}}
 +
 +### `highlight`
 +
 +This shortcode will convert the source code provided into syntax-highlighted HTML. Read more on [highlighting](/content-management/syntax-highlighting/). `highlight` takes exactly one required `language` parameter and requires a closing shortcode.
 +
 +#### Example `highlight` Input
 +
 +{{< code file="content/tutorials/learn-html.md" >}}
 +{{</* highlight html */>}}
 +<section id="main">
 +  <div>
 +   <h1 id="title">{{ .Title }}</h1>
 +    {{ range .Pages }}
 +        {{ .Render "summary"}}
 +    {{ end }}
 +  </div>
 +</section>
 +{{</* /highlight */>}}
 +{{< /code >}}
 +
 +#### Example `highlight` Output
 +
 +The `highlight` shortcode example above would produce the following HTML when the site is rendered:
 +
 +{{< output file="tutorials/learn-html/index.html" >}}
 +<span style="color: #f92672">&lt;section</span> <span style="color: #a6e22e">id=</span><span style="color: #e6db74">&quot;main&quot;</span><span style="color: #f92672">&gt;</span>
 +  <span style="color: #f92672">&lt;div&gt;</span>
 +   <span style="color: #f92672">&lt;h1</span> <span style="color: #a6e22e">id=</span><span style="color: #e6db74">&quot;title&quot;</span><span style="color: #f92672">&gt;</span>{{ .Title }}<span style="color: #f92672">&lt;/h1&gt;</span>
 +    {{ range .Pages }}
 +        {{ .Render &quot;summary&quot;}}
 +    {{ end }}
 +  <span style="color: #f92672">&lt;/div&gt;</span>
 +<span style="color: #f92672">&lt;/section&gt;</span>
 +{{< /output >}}
 +
 +{{% note "More on Syntax Highlighting" %}}
 +To see even more options for adding syntax-highlighted code blocks to your website, see [Syntax Highlighting in Developer Tools](/tools/syntax-highlighting/).
 +{{% /note %}}
 +
 +### `instagram`
 +
- Adding a video from [Vimeo][] is equivalent to the [YouTube Input shortcode][].
++If you'd like to embed a photo from [Instagram], you only need the photo's ID. You can discern an Instagram photo ID from the URL:
 +
 +```txt
 +https://www.instagram.com/p/BWNjjyYFxVx/
 +```
 +
 +#### Example `instagram` Input
 +
 +{{< code file="instagram-input.md" >}}
 +{{</* instagram BWNjjyYFxVx */>}}
 +{{< /code >}}
 +
 +You also have the option to hide the caption:
 +
 +{{< code file="instagram-input-hide-caption.md" >}}
 +{{</* instagram BWNjjyYFxVx hidecaption */>}}
 +{{< /code >}}
 +
 +#### Example `instagram` Output
 +
 +By adding the preceding `hidecaption` example, the following HTML will be added to your rendered website's markup:
 +
 +{{< output file="instagram-hide-caption-output.html" >}}
 +{{< instagram BWNjjyYFxVx hidecaption >}}
 +{{< /output >}}
 +
 +#### Example `instagram` Display
 +
 +Using the preceding `instagram` with `hidecaption` example above, the following simulates the displayed experience for visitors to your website. Naturally, the final display will be contingent on your style sheets and surrounding markup.
 +
 +{{< instagram BWNjjyYFxVx hidecaption >}}
 +
 +
 +{{% note %}}
 +The `instagram`-shortcode refers an endpoint of Instagram's API, that's deprecated since October 24th, 2020. Thus, no images can be fetched from this API endpoint, resulting in an error when the `instagram`-shortcode is used. For more information please have a look at GitHub issue [#7879](https://github.com/gohugoio/hugo/issues/7879).
 +{{% /note %}}
 +
 +### `param`
 +
 +Gets a value from the current `Page's` params set in front matter, with a fallback to the site param value. It will log an `ERROR` if the param with the given key could not be found in either.
 +
 +```bash
 +{{</* param testparam */>}}
 +```
 +
 +Since `testparam` is a param defined in front matter of this page with the value `Hugo Rocks!`, the above will print:
 +
 +{{< param testparam >}}
 +
 +To access deeply nested params, use "dot syntax", e.g:
 +
 +```bash
 +{{</* param "my.nested.param" */>}}
 +```
 +
 +### `ref` and `relref`
 +
 +These shortcodes will look up the pages by their relative path (e.g., `blog/post.md`) or their logical name (`post.md`) and return the permalink (`ref`) or relative permalink (`relref`) for the found page.
 +
 +`ref` and `relref` also make it possible to make fragmentary links that work for the header links generated by Hugo.
 +
 +{{% note "More on Cross References" %}}
 +Read a more extensive description of `ref` and `relref` in the [cross references](/content-management/cross-references/) documentation.
 +{{% /note %}}
 +
 +`ref` and `relref` take exactly one required parameter of _reference_, quoted and in position `0`.
 +
 +#### Example `ref` and `relref` Input
 +
 +```go-html-template
 +[Neat]({{</* ref "blog/neat.md" */>}})
 +[Who]({{</* relref "about.md#who" */>}})
 +```
 +
 +#### Example `ref` and `relref` Output
 +
 +Assuming that standard Hugo pretty URLs are turned on.
 +
 +```html
 +<a href="https://example.com/blog/neat">Neat</a>
 +<a href="/about/#who">Who</a>
 +```
 +
 +### `tweet`
 +
 +You want to include a single tweet into your blog post? Everything you need is the URL of the tweet:
 +
 +```txt
 +https://twitter.com/SanDiegoZoo/status/1453110110599868418
 +```
 +
 +#### Example `tweet` Input
 +
 +Pass the tweet's user (case-insensitive) and ID from the URL as parameters to the `tweet` shortcode.
 +
 +{{< code file="example-tweet-input.md" >}}
 +{{</* tweet user="SanDiegoZoo" id="1453110110599868418" */>}}
 +{{< /code >}}
 +
 +#### Example `tweet` Output
 +
 +Using the preceding `tweet` example, the following HTML will be added to your rendered website's markup:
 +
 +{{< output file="example-tweet-output.html" >}}
 +{{< tweet user="SanDiegoZoo" id="1453110110599868418" >}}
 +{{< /output >}}
 +
 +#### Example `tweet` Display
 +
 +Using the preceding `tweet` example, the following simulates the displayed experience for visitors to your website. Naturally, the final display will be contingent on your stylesheets and surrounding markup.
 +
 +{{< tweet user="SanDiegoZoo" id="1453110110599868418" >}}
 +
 +### `vimeo`
 +
- The `youtube` shortcode embeds a responsive video player for [YouTube videos][]. Only the ID of the video is required, e.g.:
++Adding a video from [Vimeo] is equivalent to the [YouTube Input shortcode].
 +
 +```txt
 +https://vimeo.com/channels/staffpicks/146022717
 +```
 +
 +#### Example `vimeo` Input
 +
 +Extract the ID from the video's URL and pass it to the `vimeo` shortcode:
 +
 +{{< code file="example-vimeo-input.md" >}}
 +{{</* vimeo 146022717 */>}}
 +{{< /code >}}
 +
 +#### Example `vimeo` Output
 +
 +Using the preceding `vimeo` example, the following HTML will be added to your rendered website's markup:
 +
 +{{< output file="example-vimeo-output.html" >}}
 +{{< vimeo 146022717 >}}
 +{{< /output >}}
 +
 +{{% tip %}}
 +If you want to further customize the visual styling of the YouTube or Vimeo output, add a `class` named parameter when calling the shortcode. The new `class` will be added to the `<div>` that wraps the `<iframe>` *and* will remove the inline styles. Note that you will need to call the `id` as a named parameter as well. You can also give the vimeo video a descriptive title with `title`.
 +
 +```go
 +{{</* vimeo id="146022717" class="my-vimeo-wrapper-class" title="My vimeo video" */>}}
 +```
 +{{% /tip %}}
 +
 +#### Example `vimeo` Display
 +
 +Using the preceding `vimeo` example, the following simulates the displayed experience for visitors to your website. Naturally, the final display will be contingent on your stylesheets and surrounding markup.
 +
 +{{< vimeo 146022717 >}}
 +
 +### `youtube`
 +
- To learn how to configure your Hugo site to meet the new EU privacy regulation, see [Hugo and the GDPR][].
++The `youtube` shortcode embeds a responsive video player for [YouTube videos]. Only the ID of the video is required, e.g.:
 +
 +```txt
 +https://www.youtube.com/watch?v=w7Ft2ymGmfc
 +```
 +
 +#### Example `youtube` Input
 +
 +Copy the YouTube video ID that follows `v=` in the video's URL and pass it to the `youtube` shortcode:
 +
 +{{< code file="example-youtube-input.md" >}}
 +{{</* youtube w7Ft2ymGmfc */>}}
 +{{< /code >}}
 +
 +Furthermore, you can automatically start playback of the embedded video by setting the `autoplay` parameter to `true`. Remember that you can't mix named and unnamed parameters, so you'll need to assign the yet unnamed video ID to the parameter `id`:
 +
 +
 +{{< code file="example-youtube-input-with-autoplay.md" >}}
 +{{</* youtube id="w7Ft2ymGmfc" autoplay="true" */>}}
 +{{< /code >}}
 +
 +For [accessibility reasons](https://dequeuniversity.com/tips/provide-iframe-titles), it's best to provide a title for your YouTube video.  You  can do this using the shortcode by providing a `title` parameter. If no title is provided, a default of "YouTube Video" will be used.
 +
 +{{< code file="example-youtube-input-with-title.md" >}}
 +{{</* youtube id="w7Ft2ymGmfc" title="A New Hugo Site in Under Two Minutes" */>}}
 +{{< /code >}}
 +
 +#### Example `youtube` Output
 +
 +Using the preceding `youtube` example, the following HTML will be added to your rendered website's markup:
 +
 +{{< code file="example-youtube-output.html" >}}
 +{{< youtube id="w7Ft2ymGmfc" autoplay="true" >}}
 +{{< /code >}}
 +
 +#### Example `youtube` Display
 +
 +Using the preceding `youtube` example (without `autoplay="true"`), the following simulates the displayed experience for visitors to your website. Naturally, the final display will be contingent on your style sheets and surrounding markup. The video is also include in the [Quick Start of the Hugo documentation][quickstart].
 +
 +{{< youtube w7Ft2ymGmfc >}}
 +
 +## Privacy Config
 +
- To learn more about creating custom shortcodes, see the [shortcode template documentation][].
++To learn how to configure your Hugo site to meet the new EU privacy regulation, see [Hugo and the GDPR].
 +
 +## Create Custom Shortcodes
 +
++To learn more about creating custom shortcodes, see the [shortcode template documentation].
 +
 +[`figure` shortcode]: #figure
 +[contentmanagementsection]: /content-management/formats/
 +[examplegist]: https://gist.github.com/spf13/7896402
 +[figureelement]: https://html5doctor.com/the-figure-figcaption-elements/ "An article from HTML5 doctor discussing the fig and figcaption elements."
 +[Hugo and the GDPR]: /about/hugo-and-gdpr/
 +[Instagram]: https://www.instagram.com/
 +[pagevariables]: /variables/page/
 +[partials]: /templates/partials/
 +[quickstart]: /getting-started/quick-start/
 +[sctemps]: /templates/shortcode-templates/
 +[scvars]: /variables/shortcodes/
 +[shortcode template documentation]: /templates/shortcode-templates/
 +[templatessection]: /templates/
 +[Vimeo]: https://vimeo.com/
 +[YouTube Videos]: https://www.youtube.com/
 +[YouTube Input shortcode]: #youtube
index 946919f0a4c4412d1807902d6f9969834df97af5,0000000000000000000000000000000000000000..20a1442e652853e9c14d435cb5e939524f146df6
mode 100644,000000..100644
--- /dev/null
@@@ -1,69 -1,0 +1,69 @@@
- `staticDir` parameter in the [site config][]. All the files in all the
 +---
 +title: Static Files
 +linkTitle: Static Files
 +description: Files that get served **statically** (as-is, no modification) on the site root.
 +categories: [content management]
 +keywords: [source, directories]
 +menu:
 +  docs:
 +    parent: content-management
 +    weight: 200
 +toc: true
 +weight: 200
 +aliases: [/static-files]
 +---
 +
 +By default, the `static/` directory in the site project is used for
 +all **static files** (e.g. stylesheets, JavaScript, images). The static files are served on the site root path (eg. if you have the file `static/image.png` you can access it using `http://{server-url}/image.png`, to include it in a document you can use `![Example image](/image.png) )`.
 +
 +Hugo can be configured to look into a different directory, or even
 +**multiple directories** for such static files by configuring the
- : The example above is a [multihost setup][]. In a regular setup, all
++`staticDir` parameter in the [site config]. All the files in all the
 +static directories will form a union filesystem.
 +
 +This union filesystem will be served from your site root. So a file
 +`<SITE PROJECT>/static/me.png` will be accessible as
 +`<MY_BASEURL>/me.png`.
 +
 +Here's an example of setting `staticDir` and `staticDir2` for a
 +multi-language site:
 +
 +{{< code-toggle copy="false" file="config" >}}
 +staticDir = ["static1", "static2"]
 +
 +[languages]
 +[languages.en]
 +staticDir2 = "static_en"
 +baseURL = "https://example.com"
 +languageName = "English"
 +weight = 2
 +title = "In English"
 +[languages.no]
 +staticDir = ["staticDir_override", "static_no"]
 +baseURL = "https://example.no"
 +languageName = "Norsk"
 +weight = 1
 +title = "På norsk"
 +{{</ code-toggle >}}
 +
 +In the above, with no theme used:
 +
 +- The English site will get its static files as a union of "static1",
 +  "static2" and "static_en". On file duplicates, the right-most
 +  version will win.
 +- The Norwegian site will get its static files as a union of
 +  "staticDir_override" and "static_no".
 +
 +Note 1
 +: The **2** (can be a number between 0 and 10) in `staticDir2` is
 +  added to tell Hugo that you want to **add** this directory to the
 +  global set of static directories defined using `staticDir`. Using
 +  `staticDir` on the language level would replace the global value (as
 +  can be seen in the Norwegian site case).
 +
 +Note 2
++: The example above is a [multihost setup]. In a regular setup, all
 +  the static directories will be available to all sites.
 +
 +[site config]: /getting-started/configuration/#all-configuration-settings
 +[multihost setup]: /content-management/multilingual/#configure-multilingual-multihost
index 010e55dcd304054707fa64aa11b9b7cb2b869c51,0000000000000000000000000000000000000000..345e2f74892c41a0c4c20667bcc92a87ca97821f
mode 100644,000000..100644
--- /dev/null
@@@ -1,108 -1,0 +1,108 @@@
- You can show content summaries with the following code. You could use the following snippet, for example, in a [section template][].
 +---
 +title: Content Summaries
 +linkTitle: Summaries
 +description: Hugo generates summaries of your content.
 +categories: [content management]
 +keywords: [summaries,abstracts,read more]
 +menu:
 +  docs:
 +    parent: content-management
 +    weight: 160
 +toc: true
 +weight: 160
 +aliases: [/content/summaries/,/content-management/content-summaries/]
 +---
 +
 +With the use of the `.Summary` [page variable][pagevariables], Hugo generates summaries of content to use as a short version in summary views.
 +
 +## Summary Splitting Options
 +
 +* Automatic Summary Split
 +* Manual Summary Split
 +* Front Matter Summary
 +
 +It is natural to accompany the summary with links to the original content, and a common design pattern is to see this link in the form of a "Read More ..." button. See the `.RelPermalink`, `.Permalink`, and `.Truncated` [page variables][pagevariables].
 +
 +### Automatic Summary Splitting
 +
 +By default, Hugo automatically takes the first 70 words of your content as its summary and stores it into the `.Summary` page variable for use in your templates. You may customize the summary length by setting `summaryLength` in your [site configuration](/getting-started/configuration/).
 +
 +{{% note %}}
 +You can customize how HTML tags in the summary are loaded using functions such as `plainify` and `safeHTML`.
 +{{% /note %}}
 +
 +{{% note %}}
 +The Hugo-defined summaries are set to use word count calculated by splitting the text by one or more consecutive whitespace characters. If you are creating content in a `CJK` language and want to use Hugo's automatic summary splitting, set `hasCJKLanguage` to `true` in your [site configuration](/getting-started/configuration/).
 +{{% /note %}}
 +
 +### Manual Summary Splitting
 +
 +Alternatively, you may add the <code>&#60;&#33;&#45;&#45;more&#45;&#45;&#62;</code> summary divider where you want to split the article.
 +
 +For [Org mode content][org], use `# more` where you want to split the article.
 +
 +Content that comes before the summary divider will be used as that content's summary and stored in the `.Summary` page variable with all HTML formatting intact.
 +
 +{{% note "Summary Divider"%}}
 +The concept of a *summary divider* is not unique to Hugo. It is also called the "more tag" or "excerpt separator" in other literature.
 +{{% /note %}}
 +
 +Pros
 +: Freedom, precision, and improved rendering.  All HTML tags and formatting are preserved.
 +
 +Cons
 +: Extra work for content authors, since they need to remember to type <code>&#60;&#33;&#45;&#45;more&#45;&#45;&#62;</code> (or `# more` for [org content][org]) in each content file. This can be automated by adding the summary divider below the front matter of an [archetype](/content-management/archetypes/).
 +
 +{{% warning "Be Precise with the Summary Divider" %}}
 +Be careful to enter <code>&#60;&#33;&#45;&#45;more&#45;&#45;&#62;</code> exactly; i.e., all lowercase and with no whitespace.
 +{{% /warning %}}
 +
 +### Front Matter Summary
 +
 +You might want your summary to be something other than the text that starts the article.  In this case you can provide a separate summary in the `summary` variable of the article front matter.
 +
 +Pros
 +: Complete freedom of text independent of the content of the article.  Markup can be used within the summary.
 +
 +Cons
 +: Extra work for content authors as they need to write an entirely separate piece of text as the summary of the article.
 +
 +## Summary Selection Order
 +
 +Because there are multiple ways in which a summary can be specified it is useful to understand the order of selection Hugo follows when deciding on the text to be returned by `.Summary`.  It is as follows:
 +
 +1. If there is a <code>&#60;&#33;&#45;&#45;more&#45;&#45;&#62;</code> summary divider present in the article the text up to the divider will be provided as per the manual summary split method
 +2. If there is a `summary` variable in the article front matter the value of the variable will be provided as per the front matter summary method
 +3. The text at the start of the article will be provided as per the automatic summary split method
 +
 +{{% warning "Competing selections" %}}
 +Hugo uses the _first_ of the above steps that returns text.  So if, for example, your article has both `summary` variable in its front matter and a <code>&#60;&#33;&#45;&#45;more&#45;&#45;&#62;</code> summary divider Hugo will use the manual summary split method.
 +{{% /warning %}}
 +
 +## Example: First 10 Articles with Summaries
 +
++You can show content summaries with the following code. You could use the following snippet, for example, in a [section template].
 +
 +{{< code file="page-list-with-summaries.html" >}}
 +{{ range first 10 .Pages }}
 +    <article>
 +      <!-- this <div> includes the title summary -->
 +      <div>
 +        <h2><a href="{{ .RelPermalink }}">{{ .Title }}</a></h2>
 +        {{ .Summary }}
 +      </div>
 +      {{ if .Truncated }}
 +      <!-- This <div> includes a read more link, but only if the summary is truncated... -->
 +      <div>
 +        <a href="{{ .RelPermalink }}">Read More…</a>
 +      </div>
 +      {{ end }}
 +    </article>
 +{{ end }}
 +{{< /code >}}
 +
 +Note how the `.Truncated` boolean variable value may be used to hide the "Read More..." link when the content is not truncated; i.e., when the summary contains the entire article.
 +
 +[org]: /content-management/formats/
 +[pagevariables]: /variables/page/
 +[section template]: /templates/section-templates/
index 6253472032c4b468a5d550a1ae7ef5557ab6b622,0000000000000000000000000000000000000000..f5960367f5540c13db9104b0ca047b4dd426551f
mode 100644,000000..100644
--- /dev/null
@@@ -1,210 -1,0 +1,210 @@@
- Then, in each of the movies, you would specify terms for each of these taxonomies (i.e., in the [front matter][] of each of your movie content files). From these terms, Hugo would automatically create pages for each Actor, Director, Studio, Genre, Year, and Award, with each listing all of the Movies that matched that specific Actor, Director, Studio, Genre, Year, and Award.
 +---
 +title: Taxonomies
 +linkTitle: Taxonomies
 +description: Hugo includes support for user-defined taxonomies.
 +keywords: [taxonomies,metadata,front matter,terms]
 +categories: [content management]
 +menu:
 +  docs:
 +    parent: content-management
 +    weight: 150
 +toc: true
 +weight: 150
 +aliases: [/taxonomies/overview/,/taxonomies/usage/,/indexes/overview/,/doc/indexes/,/extras/indexes]
 +---
 +
 +## What is a Taxonomy?
 +
 +Hugo includes support for user-defined groupings of content called **taxonomies**. Taxonomies are classifications of logical relationships between content.
 +
 +### Definitions
 +
 +Taxonomy
 +: a categorization that can be used to classify content
 +
 +Term
 +: a key within the taxonomy
 +
 +Value
 +: a piece of content assigned to a term
 +
 +
 +## Example Taxonomy: Movie Website
 +
 +Let's assume you are making a website about movies. You may want to include the following taxonomies:
 +
 +* Actors
 +* Directors
 +* Studios
 +* Genre
 +* Year
 +* Awards
 +
- When taxonomies are used---and [taxonomy templates][] are provided---Hugo will automatically create both a page listing all the taxonomy's terms and individual pages with lists of content associated with each term. For example, a `categories` taxonomy declared in your configuration and used in your content front matter will create the following pages:
++Then, in each of the movies, you would specify terms for each of these taxonomies (i.e., in the [front matter] of each of your movie content files). From these terms, Hugo would automatically create pages for each Actor, Director, Studio, Genre, Year, and Award, with each listing all of the Movies that matched that specific Actor, Director, Studio, Genre, Year, and Award.
 +
 +### Movie Taxonomy Organization
 +
 +To continue with the example of a movie site, the following demonstrates content relationships from the perspective of the taxonomy:
 +
 +```txt
 +Actor                    <- Taxonomy
 +    Bruce Willis         <- Term
 +        The Sixth Sense  <- Value
 +        Unbreakable      <- Value
 +        Moonrise Kingdom <- Value
 +    Samuel L. Jackson    <- Term
 +        Unbreakable      <- Value
 +        The Avengers     <- Value
 +        xXx              <- Value
 +```
 +
 +From the perspective of the content, the relationships would appear differently, although the data and labels used are the same:
 +
 +```txt
 +Unbreakable                 <- Value
 +    Actors                  <- Taxonomy
 +        Bruce Willis        <- Term
 +        Samuel L. Jackson   <- Term
 +    Director                <- Taxonomy
 +        M. Night Shyamalan  <- Term
 +    ...
 +Moonrise Kingdom            <- Value
 +    Actors                  <- Taxonomy
 +        Bruce Willis        <- Term
 +        Bill Murray         <- Term
 +    Director                <- Taxonomy
 +        Wes Anderson        <- Term
 +    ...
 +```
 +
 +## Hugo Taxonomy Defaults {#default-taxonomies}
 +
 +Hugo natively supports taxonomies.
 +
 +Without adding a single line to your [site config][config] file, Hugo will automatically create taxonomies for `tags` and `categories`. That would be the same as manually [configuring your taxonomies](#configure-taxonomies) as below:
 +
 +{{< code-toggle copy="false" >}}
 +[taxonomies]
 +  tag = "tags"
 +  category = "categories"
 +{{</ code-toggle >}}
 +
 +If you do not want Hugo to create any taxonomies, set `disableKinds` in your [site config][config] to the following:
 +
 +{{< code-toggle copy="false" >}}
 +disableKinds = ["taxonomy","term"]
 +{{</ code-toggle >}}
 +
 +{{% page-kinds %}}
 +
 +### Default Destinations
 +
- * A single page at `example.com/categories/` that lists all the [terms within the taxonomy][]
- * [Individual taxonomy list pages][taxonomy templates] (e.g., `/categories/development/`) for each of the terms that shows a listing of all pages marked as part of that taxonomy within any content file's [front matter][]
++When taxonomies are used---and [taxonomy templates] are provided---Hugo will automatically create both a page listing all the taxonomy's terms and individual pages with lists of content associated with each term. For example, a `categories` taxonomy declared in your configuration and used in your content front matter will create the following pages:
 +
- Once a taxonomy is defined at the site level, any piece of content can be assigned to it, regardless of [content type][] or [content section][].
++* A single page at `example.com/categories/` that lists all the [terms within the taxonomy]
++* [Individual taxonomy list pages][taxonomy templates] (e.g., `/categories/development/`) for each of the terms that shows a listing of all pages marked as part of that taxonomy within any content file's [front matter]
 +
 +## Configure Taxonomies
 +
 +Custom taxonomies other than the [defaults]({{< relref "taxonomies.md#default-taxonomies" >}}) must be defined in your [site config][config] before they can be used throughout the site. You need to provide both the plural and singular labels for each taxonomy. For example, `singular key = "plural value"` for TOML and `singular key: "plural value"` for YAML.
 +
 +### Example: Adding a custom taxonomy named "series"
 +
 +{{% note %}}
 +While adding custom taxonomies, you need to put in the default taxonomies too, _if you want to keep them_.
 +{{% /note %}}
 +
 +{{< code-toggle copy="false" >}}
 +[taxonomies]
 +  tag = "tags"
 +  category = "categories"
 +  series = "series"
 +{{</ code-toggle >}}
 +
 +### Example: Removing default taxonomies
 +
 +If you want to have just the default `tags` taxonomy, and remove the `categories` taxonomy for your site, you can do so by modifying the `taxonomies` value in your [site config][config].
 +
 +{{< code-toggle copy="false" >}}
 +[taxonomies]
 +  tag = "tags"
 +{{</ code-toggle >}}
 +
 +If you want to disable all taxonomies altogether, see the use of `disableKinds` in [Hugo Taxonomy Defaults]({{< relref "taxonomies.md#default-taxonomies" >}}).
 +
 +{{% note %}}
 +You can add content and front matter to your taxonomy list and taxonomy terms pages. See [Content Organization](/content-management/organization/) for more information on how to add an `_index.md` for this purpose.
 +
 +Much like regular pages, taxonomy list [permalinks](/content-management/urls/) are configurable, but taxonomy term page permalinks are not.
 +{{% /note %}}
 +
 +{{% warning %}}
 +The configuration option `preserveTaxonomyNames` was removed in Hugo 0.55.
 +
 +You can now use `.Page.Title` on the relevant taxonomy node to get the original value.
 +{{% /warning %}}
 +
 +## Add Taxonomies to Content
 +
- Assigning content to a taxonomy is done in the [front matter][]. Simply create a variable with the *plural* name of the taxonomy and assign all terms you want to apply to the instance of the content type.
++Once a taxonomy is defined at the site level, any piece of content can be assigned to it, regardless of [content type] or [content section].
 +
- A content file can assign weight for each of its associate taxonomies. Taxonomic weight can be used for sorting or ordering content in [taxonomy list templates][] and is declared in a content file's [front matter][]. The convention for declaring taxonomic weight is `taxonomyname_weight`.
++Assigning content to a taxonomy is done in the [front matter]. Simply create a variable with the *plural* name of the taxonomy and assign all terms you want to apply to the instance of the content type.
 +
 +{{% note %}}
 +If you would like the ability to quickly generate content files with preconfigured taxonomies or terms, read the docs on [Hugo archetypes](/content-management/archetypes/).
 +{{% /note %}}
 +
 +### Example: Front Matter with Taxonomies
 +
 +{{< code-toggle copy="false">}}
 +title = "Hugo: A fast and flexible static site generator"
 +tags = [ "Development", "Go", "fast", "Blogging" ]
 +categories = [ "Development" ]
 +series = [ "Go Web Dev" ]
 +slug = "hugo"
 +project_url = "https://github.com/gohugoio/hugo"
 +{{</ code-toggle >}}
 +
 +## Order Taxonomies
 +
++A content file can assign weight for each of its associate taxonomies. Taxonomic weight can be used for sorting or ordering content in [taxonomy list templates] and is declared in a content file's [front matter]. The convention for declaring taxonomic weight is `taxonomyname_weight`.
 +
 +The following show a piece of content that has a weight of 22, which can be used for ordering purposes when rendering the pages assigned to the "a", "b" and "c" values of the `tags` taxonomy. It has also been assigned the weight of 44 when rendering the "d" category page.
 +
 +### Example: Taxonomic `weight`
 +
 +{{< code-toggle copy="false" >}}
 +title = "foo"
 +tags = [ "a", "b", "c" ]
 +tags_weight = 22
 +categories = ["d"]
 +categories_weight = 44
 +{{</ code-toggle >}}
 +
 +By using taxonomic weight, the same piece of content can appear in different positions in different taxonomies.
 +
 +{{% note "Limits to Ordering Taxonomies" %}}
 +Currently taxonomies only support the [default `weight => date` ordering of list content](/templates/lists/#default-weight--date--linktitle--filepath). For more information, see the documentation on [taxonomy templates](/templates/taxonomy-templates/).
 +{{% /note %}}
 +
 +## Add custom metadata to a Taxonomy or Term
 +
 +If you need to add custom metadata to your taxonomy terms, you will need to create a page for that term at `/content/<TAXONOMY>/<TERM>/_index.md` and add your metadata in its front matter. Continuing with our 'Actors' example, let's say you want to add a Wikipedia page link to each actor. Your terms pages would be something like this:
 +
 +{{< code file="/content/actors/bruce-willis/_index.md" >}}
 +---
 +title: "Bruce Willis"
 +wikipedia: "https://en.wikipedia.org/wiki/Bruce_Willis"
 +---
 +{{< /code >}}
 +
 +
 +[`urlize` template function]: /functions/urlize/
 +[content section]: /content-management/sections/
 +[content type]: /content-management/types/
 +[documentation on archetypes]: /content-management/archetypes/
 +[front matter]: /content-management/front-matter/
 +[taxonomy list templates]: /templates/taxonomy-templates/#taxonomy-list-templates
 +[taxonomy templates]: /templates/taxonomy-templates/
 +[terms within the taxonomy]: /templates/taxonomy-templates/#taxonomy-terms-templates "See how to order terms associated with a taxonomy"
 +[config]: /getting-started/configuration/
index 6cb8e55bffbc6495682959c144c636806dedb9cd,0000000000000000000000000000000000000000..d136972cc263afab2ae291a44e98bc4b2063c91b
mode 100644,000000..100644
--- /dev/null
@@@ -1,117 -1,0 +1,117 @@@
- The following is an example of a very basic [single page template][]:
 +---
 +title: Table of Contents
 +linkTitle: Table of Contents
 +description: Hugo can automatically parse Markdown content and create a Table of Contents you can use in your templates.
 +categories: [content management]
 +keywords: [table of contents, toc]
 +menu:
 +  docs:
 +    parent: content-management
 +    weight: 210
 +toc: true
 +weight: 210
 +aliases: [/extras/toc/]
 +---
 +
 +{{% note "TOC Heading Levels are Fixed" %}}
 +
 +Previously, there was no out-of-the-box way to specify which heading levels you want the TOC to render. [See the related GitHub discussion (#1778)](https://github.com/gohugoio/hugo/issues/1778). As such, the resulting `<nav id="TableOfContents"><ul></ul></nav>` was going to start at `<h1>` when pulling from `{{.Content}}`.
 +
 +Hugo [v0.60.0](https://github.com/gohugoio/hugo/releases/tag/v0.60.0) made a switch to [Goldmark](https://github.com/yuin/goldmark/) as the default library for Markdown which has improved and configurable implementation of TOC. Take a look at [how to configure TOC](/getting-started/configuration-markup/#table-of-contents) for Goldmark renderer.
 +
 +{{% /note %}}
 +
 +## Usage
 +
 +Create your Markdown the way you normally would with the appropriate headings. Here is some example content:
 +
 +```md
 +<!-- Your front matter up here -->
 +
 +## Introduction
 +
 +One morning, when Gregor Samsa woke from troubled dreams, he found himself transformed in his bed into a horrible vermin.
 +
 +## My Heading
 +
 +He lay on his armour-like back, and if he lifted his head a little he could see his brown belly, slightly domed and divided by arches into stiff sections. The bedding was hardly able to cover it and seemed ready to slide off any moment.
 +
 +### My Subheading
 +
 +A collection of textile samples lay spread out on the table - Samsa was a travelling salesman - and above it there hung a picture that he had recently cut out of an illustrated magazine and housed in a nice, gilded frame. It showed a lady fitted out with a fur hat and fur boa who sat upright, raising a heavy fur muff that covered the whole of her lower arm towards the viewer. Gregor then turned to look out the window at the dull weather. Drops
 +```
 +
 +Hugo will take this Markdown and create a table of contents from `## Introduction`, `## My Heading`, and `### My Subheading` and then store it in the [page variable][pagevars]`.TableOfContents`.
 +
 +The built-in `.TableOfContents` variables outputs a `<nav id="TableOfContents">` element with a child `<ul>`, whose child `<li>` elements begin with appropriate HTML headings. See [the available settings](/getting-started/configuration-markup/#table-of-contents) to configure what heading levels you want to include in TOC.
 +
 +## Template Example: Basic TOC
 +
- The following is a [partial template][partials] that adds slightly more logic for page-level control over your table of contents. It assumes you are using a `toc` field in your content's [front matter][] that, unless specifically set to `false`, will add a TOC to any page with a `.WordCount` (see [Page Variables][pagevars]) greater than 400. This example also demonstrates how to use [conditionals][] in your templating:
++The following is an example of a very basic [single page template]:
 +
 +{{< code file="layout/_default/single.html" download="single.html" >}}
 +{{ define "main" }}
 +<main>
 +    <article>
 +    <header>
 +        <h1>{{ .Title }}</h1>
 +    </header>
 +        {{ .Content }}
 +    </article>
 +    <aside>
 +        {{ .TableOfContents }}
 +    </aside>
 +</main>
 +{{ end }}
 +{{< /code >}}
 +
 +## Template Example: TOC Partial
 +
++The following is a [partial template][partials] that adds slightly more logic for page-level control over your table of contents. It assumes you are using a `toc` field in your content's [front matter] that, unless specifically set to `false`, will add a TOC to any page with a `.WordCount` (see [Page Variables][pagevars]) greater than 400. This example also demonstrates how to use [conditionals] in your templating:
 +
 +{{< code file="layouts/partials/toc.html" download="toc.html" >}}
 +{{ if and (gt .WordCount 400 ) (.Params.toc) }}
 +<aside>
 +    <header>
 +    <h2>{{.Title}}</h2>
 +    </header>
 +    {{.TableOfContents}}
 +</aside>
 +{{ end }}
 +{{< /code >}}
 +
 +{{% note %}}
 +With the preceding example, even pages with > 400 words *and* `toc` not set to `false` will not render a table of contents if there are no headings in the page for the `{{.TableOfContents}}` variable to pull from.
 +{{% /note %}}
 +
 +## Usage with AsciiDoc
 +
 +Hugo supports table of contents with AsciiDoc content format.
 +
 +In the header of your content file, specify the AsciiDoc TOC directives necessary to ensure that the table of contents is generated. Hugo will use the generated TOC to populate the page variable `.TableOfContents` in the same way as described for Markdown. See example below:
 +
 +```asciidoc
 +// <!-- Your front matter up here -->
 +:toc:
 +// Set toclevels to be at least your hugo [markup.tableOfContents.endLevel] config key
 +:toclevels: 4
 +
 +== Introduction
 +
 +One morning, when Gregor Samsa woke from troubled dreams, he found himself transformed in his bed into a horrible vermin.
 +
 +== My Heading
 +
 +He lay on his armour-like back, and if he lifted his head a little he could see his brown belly, slightly domed and divided by arches into stiff sections. The bedding was hardly able to cover it and seemed ready to slide off any moment.
 +
 +=== My Subheading
 +
 +A collection of textile samples lay spread out on the table - Samsa was a travelling salesman - and above it there hung a picture that he had recently cut out of an illustrated magazine and housed in a nice, gilded frame. It showed a lady fitted out with a fur hat and fur boa who sat upright, raising a heavy fur muff that covered the whole of her lower arm towards the viewer. Gregor then turned to look out the window at the dull weather. Drops
 +```
 +Hugo will take this AsciiDoc and create a table of contents store it in the page variable `.TableOfContents`, in the same as described for Markdown.
 +
 +[conditionals]: /templates/introduction/#conditionals
 +[front matter]: /content-management/front-matter/
 +[pagevars]: /variables/page/
 +[partials]: /templates/partials/
 +[single page template]: /templates/single-page-templates/
index 6b12f3a2e007e1553acaf364d39264e1bdacded8,0000000000000000000000000000000000000000..739c9c390657cc4ae993ae0006c4cb92c95fa2ab
mode 100644,000000..100644
--- /dev/null
@@@ -1,311 -1,0 +1,311 @@@
- For example, if one of your [sections][] is called `posts` and you want to adjust the canonical path to be hierarchical based on the year, month, and post title, you could set up the following configurations in YAML and TOML, respectively.
 +---
 +title: URL Management
 +linkTitle: URL Management
 +description: Hugo supports permalinks, aliases, link canonicalization, and multiple options for handling relative vs absolute URLs.
 +categories: [content management]
 +keywords: [aliases,redirects,permalinks,urls]
 +menu:
 +  docs:
 +    parent: content-management
 +    weight: 180
 +toc: true
 +weight: 180
 +aliases: [/extras/permalinks/,/extras/aliases/,/extras/urls/,/doc/redirects/,/doc/alias/,/doc/aliases/]
 +---
 +
 +## Permalinks
 +
 +The default Hugo target directory for your built website is `public/`. However, you can change this value by specifying a different `publishDir` in your [site configuration][config]. The directories created at build time for a section reflect the position of the content's directory within the `content` folder and namespace matching its layout within the `contentdir` hierarchy.
 +
 +The `permalinks` option in your [site configuration][config] allows you to adjust the directory paths (i.e., the URLs) on a per-section basis. This will change where the files are written to and will change the page's internal "canonical" location, such that template references to `.RelPermalink` will honor the adjustments made as a result of the mappings in this option.
 +
 +{{% note "Default Publish and Content Folders" %}}
 +These examples use the default values for `publishDir` and `contentDir`; i.e., `public` and `content`, respectively. You can override the default values in your [site's `config` file](/getting-started/configuration/).
 +{{% /note %}}
 +
- If you want a specific piece of content to have an exact URL, you can specify this in the [front matter][] under the `url` key. The following are examples of the same content directory and what the eventual URL structure will be when Hugo runs with its default behavior.
++For example, if one of your [sections] is called `posts` and you want to adjust the canonical path to be hierarchical based on the year, month, and post title, you could set up the following configurations in YAML and TOML, respectively.
 +
 +### Permalinks Configuration Example
 +
 +{{< code-toggle file="config" copy="false" >}}
 +permalinks:
 +  posts: /:year/:month/:title/
 +{{< /code-toggle >}}
 +
 +Only the content under `posts/` will have the new URL structure. For example, the file `content/posts/sample-entry.md` with `date: 2017-02-27T19:20:00-05:00` in its front matter will render to `public/2017/02/sample-entry/index.html` at build time and therefore be reachable at `https://example.com/2017/02/sample-entry/`.
 +
 +To configure the `permalinks` option for pages in the "root" section, use **/** as the key:
 +
 +{{< code-toggle file="config" copy="false" >}}
 +permalinks:
 +  /: /:year/:month/:filename/
 +{{< /code-toggle >}}
 +
 +If the standard date-based permalink configuration does not meet your needs, you can also format URL segments using [Go time formatting directives](https://pkg.go.dev/time#Time.Format). For example, a URL structure with two digit years and month and day digits without zero padding can be accomplished with:
 +
 +{{< code-toggle file="config" copy="false" >}}
 +permalinks:
 +  posts: /:06/:1/:2/:title/
 +{{< /code-toggle >}}
 +
 +You can also configure permalinks of taxonomies with the same syntax, by using the plural form of the taxonomy instead of the section. You will probably only want to use the configuration values `:slug` or `:title`.
 +
 +### Permalink Configuration Values
 +
 +The following is a list of values that can be used in a `permalink` definition in your site `config` file. All references to time are dependent on the content's date.
 +
 +`:year`
 +: the 4-digit year
 +
 +`:month`
 +: the 2-digit month
 +
 +`:monthname`
 +: the name of the month
 +
 +`:day`
 +: the 2-digit day
 +
 +`:weekday`
 +: the 1-digit day of the week (Sunday = 0)
 +
 +`:weekdayname`
 +: the name of the day of the week
 +
 +`:yearday`
 +: the 1- to 3-digit day of the year
 +
 +`:section`
 +: the content's section
 +
 +`:sections`
 +: the content's sections hierarchy. You can use a selection of the sections using _slice syntax_: `:sections[1:]` includes all but the first, `:sections[:last]` includes all but the last, `:sections[last]` includes only the last, `:sections[1:2]` includes section 2 and 3. Note that this slice access will not throw any out-of-bounds errors, so you don't have to be exact.
 +
 +`:title`
 +: the content's title
 +
 +`:slug`
 +: the content's slug (or title if no slug is provided in the front matter)
 +
 +`:slugorfilename`
 +: the content's slug (or filename if no slug is provided in the front matter)
 +
 +`:filename`
 +: the content's filename (without extension)
 +
 +Additionally, a Go time format string prefixed with `:` may be used.
 +
 +## Aliases
 +
 +Aliases can be used to create redirects to your page from other URLs.
 +
 +Aliases comes in two forms:
 +
 +1. Starting with a `/` meaning they are relative to the `BaseURL`, e.g. `/posts/my-blogpost/`
 +2. They are relative to the `Page` they're defined in, e.g. `my-blogpost` or even something like `../blog/my-blogpost` (new in Hugo 0.55).
 +
 +### Example: Aliases
 +
 +Let's assume you create a new piece of content at `content/posts/my-awesome-blog-post.md`. The content is a revision of your previous post at `content/posts/my-original-url.md`. You can create an `aliases` field in the front matter of your new `my-awesome-blog-post.md` where you can add previous paths. The following examples show how to create this field in TOML and YAML front matter, respectively.
 +
 +#### TOML Front Matter
 +
 +{{< code file="content/posts/my-awesome-post.md" copy="false" >}}
 ++++
 +aliases = [
 +    "/posts/my-original-url/",
 +    "/2010/01/01/even-earlier-url.html"
 +]
 ++++
 +{{< /code >}}
 +
 +#### YAML Front Matter
 +
 +{{< code file="content/posts/my-awesome-post.md" copy="false" >}}
 +---
 +aliases:
 +    - /posts/my-original-url/
 +    - /2010/01/01/even-earlier-url.html
 +---
 +{{< /code >}}
 +
 +Now when you visit any of the locations specified in aliases---i.e., _assuming the same site domain_---you'll be redirected to the page they are specified on. For example, a visitor to `example.com/posts/my-original-url/` will be immediately redirected to `example.com/posts/my-awesome-post/`.
 +
 +### Example: Aliases in Multilingual
 +
 +On [multilingual sites][multilingual], each translation of a post can have unique aliases. To use the same alias across multiple languages, prefix it with the language code.
 +
 +In `/posts/my-new-post.es.md`:
 +
 +```md
 +---
 +aliases:
 +    - /es/posts/my-original-post/
 +---
 +```
 +
 +From Hugo 0.55 you can also have page-relative aliases, so `/es/posts/my-original-post/` can be simplified to the more portable `my-original-post/`
 +
 +### How Hugo Aliases Work
 +
 +When aliases are specified, Hugo creates a directory to match the alias entry. Inside the directory, Hugo creates an `.html` file specifying the canonical URL for the page and the new redirect target.
 +
 +For example, a content file at `posts/my-intended-url.md` with the following in the front matter:
 +
 +```yml
 +---
 +title: My New post
 +aliases: [/posts/my-old-url/]
 +---
 +```
 +
 +Assuming a `baseURL` of `example.com`, the contents of the auto-generated alias `.html` found at `https://example.com/posts/my-old-url/` will contain the following:
 +
 +```html
 +<!DOCTYPE html>
 +<html>
 +  <head>
 +    <title>https://example.com/posts/my-intended-url</title>
 +    <link rel="canonical" href="https://example.com/posts/my-intended-url"/>
 +    <meta name="robots" content="noindex">
 +    <meta http-equiv="content-type" content="text/html; charset=utf-8"/>
 +    <meta http-equiv="refresh" content="0; url=https://example.com/posts/my-intended-url"/>
 +  </head>
 +</html>
 +```
 +
 +The `http-equiv="refresh"` line is what performs the redirect, in 0 seconds in this case. If an end user of your website goes to `https://example.com/posts/my-old-url`, they will now be automatically redirected to the newer, correct URL. The addition of `<meta name="robots" content="noindex">` lets search engine bots know that they should not index your alias page (`https://example.com/posts/my-old-url/`).
 +
 +### Customize
 +
 +You may customize this alias page by creating an `alias.html` template in the
 +layouts folder of your site (i.e., `layouts/alias.html`). In this case, the data passed to the template is
 +
 +`Permalink`
 +: the link to the page being aliased
 +
 +`Page`
 +: the Page data for the page being aliased
 +
 +### Important Behaviors of Aliases
 +
 +1. Hugo makes no assumptions about aliases. They also do not change based
 +on your UglyURLs setting. You need to provide absolute paths to your web root
 +and the complete filename or directory.
 +2. Aliases are rendered *before* any content are rendered and therefore will be overwritten by any content with the same location.
 +
 +## Pretty URLs
 +
 +Hugo's default behavior is to render your content with "pretty" URLs. No non-standard server-side configuration is required for these pretty URLs to work.
 +
 +The following demonstrates the concept:
 +
 +```txt
 +content/posts/_index.md
 +=> example.com/posts/
 +content/posts/post-1.md
 +=> example.com/posts/post-1/
 +```
 +
 +## Ugly URLs
 +
 +If you would like to have what are often referred to as "ugly URLs" (e.g., example.com/urls.html), set `uglyurls = true` or `uglyurls: true` in your site's `config.toml` or `config.yaml`, respectively. You can also set the `HUGO_UGLYURLS` environment variable to `true` when running `hugo` or `hugo server`.
 +
++If you want a specific piece of content to have an exact URL, you can specify this in the [front matter] under the `url` key. The following are examples of the same content directory and what the eventual URL structure will be when Hugo runs with its default behavior.
 +
 +See [Content Organization][contentorg] for more details on paths.
 +
 +```txt
 +.
 +└── content
 +    └── about
 +    |   └── _index.md  // <- https://example.com/about/
 +    ├── posts
 +    |   ├── firstpost.md   // <- https://example.com/posts/firstpost/
 +    |   ├── happy
 +    |   |   └── ness.md  // <- https://example.com/posts/happy/ness/
 +    |   └── secondpost.md  // <- https://example.com/posts/secondpost/
 +    └── quote
 +        ├── first.md       // <- https://example.com/quote/first/
 +        └── second.md      // <- https://example.com/quote/second/
 +```
 +
 +Here's the same organization run with `hugo --uglyURLs`:
 +
 +```txt
 +.
 +└── content
 +    └── about
 +    |   └── _index.md  // <- https://example.com/about.html
 +    ├── posts
 +    |   ├── firstpost.md   // <- https://example.com/posts/firstpost.html
 +    |   ├── happy
 +    |   |   └── ness.md    // <- https://example.com/posts/happy/ness.html
 +    |   └── secondpost.md  // <- https://example.com/posts/secondpost.html
 +    └── quote
 +        ├── first.md       // <- https://example.com/quote/first.html
 +        └── second.md      // <- https://example.com/quote/second.html
 +```
 +
 +## Canonicalization
 +
 +By default, all relative URLs encountered in the input are left unmodified, e.g. `/css/foo.css` would stay as `/css/foo.css`. The `canonifyURLs` field in your site `config` has a default value of `false`.
 +
 +By setting `canonifyURLs` to `true`, all relative URLs would instead be *canonicalized* using `baseURL`.  For example, assuming you have `baseURL = https://example.com/`, the relative URL `/css/foo.css` would be turned into the absolute URL `https://example.com/css/foo.css`.
 +
 +Benefits of canonicalization include fixing all URLs to be absolute, which may aid with some parsing tasks. Note, however, that all modern browsers handle this on the client without issue.
 +
 +Benefits of non-canonicalization include being able to have scheme-relative resource inclusion; e.g., so that `http` vs `https` can be decided according to how the page was retrieved.
 +
 +{{% note "`canonifyURLs` default change" %}}
 +In the May 2014 release of Hugo v0.11, the default value of `canonifyURLs` was switched from `true` to `false`, which we think is the better default and should continue to be the case going forward. Please verify and adjust your website accordingly if you are upgrading from v0.10 or older versions.
 +{{% /note %}}
 +
 +To find out the current value of `canonifyURLs` for your website, you may use the handy `hugo config` command added in v0.13.
 +
 +```txt
 +hugo config | grep -i canon
 +```
 +
 +Or, if you are on Windows and do not have `grep` installed:
 +
 +```txt
 +hugo config | FINDSTR /I canon
 +```
 +
 +## Set URL in Front Matter
 +
 +In addition to specifying permalink values in your site configuration for different content sections, Hugo provides even more granular control for individual pieces of content.
 +
 +Both `slug` and `url` can be defined in individual front matter. For more information on content destinations at build time, see [Content Organization][contentorg].
 +
 +From Hugo 0.55, you can use URLs relative to the current site context (the language), which makes it simpler to maintain. For a Japanese translation, both of the following examples would get the same URL:
 +
 +```markdown
 +---
 +title: "Custom URL!"
 +url: "/jp/custom/foo"
 +---
 +```
 +
 +```markdown
 +---
 +title: "Custom URL!"
 +url: "custom/foo"
 +---
 +```
 +
 +## Relative URLs
 +
 +By default, all relative URLs are left unchanged by Hugo, which can be problematic when you want to make your site browsable from a local file system.
 +
 +Setting `relativeURLs` to `true` in your [site configuration][config] will cause Hugo to rewrite all relative URLs to be relative to the current content.
 +
 +For example, if your `/posts/first/` page contains a link to `/about/`, Hugo will rewrite the URL to `../../about/`.
 +
 +[config]: /getting-started/configuration/
 +[contentorg]: /content-management/organization/
 +[front matter]: /content-management/front-matter/
 +[multilingual]: /content-management/multilingual/
 +[sections]: /content-management/sections/
 +[usage]: /getting-started/usage/
index dfdf60ddb82c4f9f37416531a37ae3d68d227ef6,0000000000000000000000000000000000000000..b11ef09de89c066023e7ee52da76d7091f1825bd
mode 100644,000000..100644
--- /dev/null
@@@ -1,432 -1,0 +1,432 @@@
- Hugo is an open-source project and lives by the work of its [contributors][]. There are plenty of [open issues][issues], and we need your help to make Hugo even more awesome. You don't need to be a Go guru to contribute to the project's development.
 +---
 +title: Contribute to Hugo Development
 +linktitle: Development
 +description: Hugo relies heavily on contributions from the open source community.
 +date: 2017-02-01
 +publishdate: 2017-02-01
 +categories: [contribute]
 +keywords: [dev,open source]
 +authors: [digitalcraftsman]
 +menu:
 +  docs:
 +    parent: "contribute"
 +    weight: 10
 +weight: 10
 +sections_weight: 10
 +toc: true
 +---
 +
 +## Introduction
 +
++Hugo is an open-source project and lives by the work of its [contributors]. There are plenty of [open issues][issues], and we need your help to make Hugo even more awesome. You don't need to be a Go guru to contribute to the project's development.
 +
 +## Assumptions
 +
 +This contribution guide takes a step-by-step approach in hopes of helping newcomers. Therefore, we only assume the following:
 +
 +* You are new to Git or open-source projects in general
 +* You are a fan of Hugo and enthusiastic about contributing to the project
 +
 +{{% note "Additional Questions?" %}}
 +If you're struggling at any point in this contribution guide, reach out to the Hugo community in [Hugo's Discussion forum](https://discourse.gohugo.io).
 +{{% /note %}}
 +
 +## Install Go
 +
 +The installation of Go should take only a few minutes. You have more than one option to get Go up and running on your machine.
 +
 +If you are having trouble following the installation guides for Go, check out [Go Bootcamp, which contains setups for every platform][gobootcamp] or reach out to the Hugo community in the [Hugo Discussion Forums][forums].
 +
 +### Install Go From Source
 +
 +[Download the latest stable version of Go][godl] and follow the official [Go installation guide][goinstall].
 +
 +Once you're finished installing Go, let's confirm everything is working correctly. Open a terminal---or command line under Windows--and type the following:
 +
 +```txt
 +go version
 +```
 +
 +You should see something similar to the following written to the console. Note that the version here reflects the most recent version of Go as of the last update for this page:
 +
 +```txt
 +go version go1.12 darwin/amd64
 +```
 +
 +Next, make sure that you set up your `GOPATH` [as described in the installation guide][setupgopath].
 +
 +You can print the `GOPATH` with `echo $GOPATH`. You should see a non-empty string containing a valid path to your Go workspace; for example:
 +
 +```txt
 +/Users/<yourusername>/Code/go
 +```
 +
 +### Install Go with Homebrew
 +
 +If you are a macOS user and have [Homebrew](https://brew.sh/) installed on your machine, installing Go is as simple as the following command:
 +
 +{{< code file="install-go.sh" >}}
 +brew install go
 +{{< /code >}}
 +
 +### Install Go via GVM
 +
 +More experienced users can use the [Go Version Manager][gvm] (GVM). GVM allows you to switch between different Go versions *on the same machine*. If you're a beginner, you probably don't need this feature. However, GVM makes it easy to upgrade to a new released Go version with just a few commands.
 +
 +GVM comes in especially handy if you follow the development of Hugo over a longer period of time. Future versions of Hugo will usually be compiled with the latest version of Go. Sooner or later, you will have to upgrade if you want to keep up.
 +
 +## Create a GitHub Account
 +
 +If you're going to contribute code, you'll need to have an account on GitHub. Go to [www.github.com/join](https://github.com/join) and set up a personal account.
 +
 +## Install Git on Your System
 +
 +You will need to have Git installed on your computer to contribute to Hugo development. Teaching Git is outside the scope of the Hugo docs, but if you're looking for an excellent reference to learn the basics of Git, we recommend the [Git book][gitbook] if you are not sure where to begin. We will include short explanations of the Git commands in this document.
 +
 +Git is a [version control system](https://en.wikipedia.org/wiki/Version_control) to track the changes of source code. Hugo depends on smaller third-party packages that are used to extend the functionality. We use them because we don't want to reinvent the wheel.
 +
 +Go ships with a sub-command called `get` that will download these packages for us when we set up our working environment. The source code of the packages is tracked with Git. `get` will interact with the Git servers of the package hosters in order to fetch all dependencies.
 +
 +Move back to the terminal and check if Git is already installed. Type in `git version` and press enter. You can skip the rest of this section if the command returned a version number. Otherwise [download](https://git-scm.com/downloads) the latest version of Git and follow this [installation guide](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git).
 +
 +Finally, check again with `git version` if Git was installed successfully.
 +
 +### Git Graphical Front Ends
 +
 +There are several [GUI clients](https://git-scm.com/downloads/guis) that help you to operate Git. Not all are available for all operating systems and maybe differ in their usage. Because of this we will document how to use the command-line, since the commands are the same everywhere.
 +
 +### Install Hub on Your System (Optional)
 +
 +Hub is a great tool for working with GitHub. The main site for it is [hub.github.com](https://hub.github.com/). Feel free to install this little Git wrapper.
 +
 +On a Mac, you can install [Hub](https://github.com/github/hub) using [Homebrew](https://brew.sh):
 +
 +```txt
 +brew install hub
 +```
 +
 +Now we'll create an [alias in Bash](https://tldp.org/LDP/abs/html/aliases.html) so that typing `git` actually runs `Hub`:
 +
 +```txt
 +echo "alias git='hub'" >> ~/.bash_profile
 +```
 +
 +Confirm the installation:
 +
 +```txt
 +git version 2.21.0
 +hub version 2.10.0
 +```
 +
 +## Set up your working copy
 +
 +You set up the working copy of the repository locally on your computer. Your local copy of the files is what you'll edit, compile, and end up pushing back to GitHub. The main steps are cloning the repository and creating your fork as a remote.
 +
 +### Clone the repository
 +
 +We assume that you've set up your `GOPATH` (see the section above if you're unsure about this). You should now copy the Hugo repository down to your computer. You'll hear this called "clone the repo". GitHub's [help pages](https://help.github.com/articles/cloning-a-repository/) give us a short explanation:
 +
 +> When you create a repository on GitHub, it exists as a remote repository. You can create a local clone of your repository on your computer and sync between the two locations.
 +
 +We're going to clone the [master Hugo repository](https://github.com/gohugoio/hugo). That seems counter-intuitive, since you won't have commit rights on it. But it's required for the Go workflow. You'll work on a copy of the master and push your changes to your own repository on GitHub.
 +
 +So, let's make a new directory and clone that master repository:
 +
 +```txt
 +mkdir $HOME/src
 +cd $HOME/src
 +git clone https://github.com/gohugoio/hugo.git
 +```
 +
 +> Since Hugo 0.48, Hugo uses the Go Modules support built into Go 1.11 to build.
 +> The easiest is to clone Hugo in a directory outside of GOPATH
 +
 +And then, install dependencies of Hugo by running the following in the cloned directory:
 +
 +```txt
 +cd $HOME/src/hugo
 +go install
 +```
 +
 +Hugo relies on [mage](https://github.com/magefile/mage) for some convenient build and test targets. If you don't already have it, get it:
 +
 +```txt
 +go install github.com/magefile/mage@latest
 +```
 +
 +### Fork the repository
 +
 +If you're not familiar with this term, GitHub's [help pages](https://help.github.com/articles/fork-a-repo/) provide again a simple explanation:
 +
 +> A fork is a copy of a repository. Forking a repository allows you to freely experiment with changes without affecting the original project.
 +
 +#### Fork by hand
 +
 +Open the [Hugo repository](https://github.com/gohugoio/hugo) on GitHub and click on the "Fork" button in the top right.
 +
 +![Fork button](/images/contribute/development/forking-a-repository.png)
 +
 +Now open your fork repository on GitHub and copy the remote URL of your fork. You can choose between HTTPS and SSH as protocol that Git should use for the following operations. HTTPS works always [if you're not sure](https://help.github.com/articles/which-remote-url-should-i-use/).
 +
 +![Copy remote url](/images/contribute/development/copy-remote-url.png)
 +
 +Switch back to the terminal and move into the directory of the cloned master repository from the last step.
 +
 +```txt
 +cd $HOME/src/hugo
 +```
 +
 +Now Git needs to know that our fork exists by adding the copied remote url:
 +
 +```txt
 +git remote add <YOUR-GITHUB-USERNAME> <COPIED REMOTE-URL>
 +```
 +
 +#### Fork with Hub
 +
 +Alternatively, you can use the Git wrapper Hub. Hub makes forking a repository easy:
 +
 +```txt
 +git fork
 +```
 +
 +That command will log in to GitHub using your account, create a fork of the repository that you're currently working in, and add it as a remote to your working copy.
 +
 +#### Trust, but verify
 +
 +Let's check if everything went right by listing all known remotes:
 +
 +```txt
 +git remote -v
 +```
 +
 +The output should look similar:
 +
 +```txt
 +digitalcraftsman    git@github.com:digitalcraftsman/hugo.git (fetch)
 +digitalcraftsman    git@github.com:digitalcraftsman/hugo.git (push)
 +origin  https://github.com/gohugoio/hugo (fetch)
 +origin  https://github.com/gohugoio/hugo (push)
 +```
 +
 +## The Hugo Git Contribution Workflow
 +
 +### Create a new branch
 +
 +You should never develop against the "master" branch. The development team will not accept a pull request against that branch. Instead, create a descriptive named branch and work on it.
 +
 +First, you should always pull the latest changes from the master repository:
 +
 +```txt
 +git checkout master
 +git pull
 +```
 +
 +Now we can create a new branch for your additions:
 +
 +```txt
 +git checkout -b <BRANCH-NAME>
 +```
 +
 +You can check on which branch you are with `git branch`. You should see a list of all local branches. The current branch is indicated with a little asterisk.
 +
 +### Contribute to Documentation
 +
 +Perhaps you want to start contributing to the Hugo docs. If so, you can ignore most of the following steps and focus on the `/docs` directory within your newly cloned repository. You can change directories into the Hugo docs using `cd docs`.
 +
 +You can start Hugo's built-in server via `hugo server`. Browse the documentation by entering [http://localhost:1313](http://localhost:1313) in the address bar of your browser. The server automatically updates the page whenever you change content.
 +
 +We have developed a [separate Hugo documentation contribution guide][docscontrib] for more information on how the Hugo docs are built, organized, and improved by the generosity of people like you.
 +
 +### Build Hugo
 +
 +While making changes in the codebase it's a good idea to build the binary to test them:
 +
 +```txt
 +mage hugo
 +```
 +
 +This command generates the binary file at the root of the repository.
 +
 +If you want to install the binary in `$GOPATH/bin`, run
 +
 +```txt
 +mage install
 +```
 +
 +### Test
 +
 +Sometimes changes on the codebase can cause unintended side effects. Or they don't work as expected. Most functions have their own test cases. You can find them in files ending with `_test.go`.
 +
 +Make sure the commands
 +
 +```txt
 +mage -v check
 +```
 +
 +passes.
 +
 +### Formatting
 +
 +The Go code style guide maybe is opinionated but it ensures that the codebase looks the same, regardless who wrote the code. Go comes with its own formatting tool. Let's apply the style guide to our additions:
 +
 +```txt
 +mage fmt
 +```
 +
 +Once you made your additions commit your changes. Make sure that you follow our [code contribution guidelines](https://github.com/gohugoio/hugo/blob/master/CONTRIBUTING.md):
 +
 +```txt
 +# Add all changed files
 +git add --all
 +git commit --message "YOUR COMMIT MESSAGE"
 +```
 +
 +The commit message should describe what the commit does (e.g. add feature XYZ), not how it is done.
 +
 +### Modify commits
 +
 +You noticed some commit messages don't fulfill the code contribution guidelines or you just forget something to add some files? No problem. Git provides the necessary tools to fix such problems. The next two methods cover all common cases.
 +
 +If you are unsure what a command does leave the commit as it is. We can fix your commits later in the pull request.
 +
 +#### Modify the last commit
 +
 +Let's say you want to modify the last commit message. Run the following command and replace the current message:
 +
 +```txt
 +git commit --amend -m"YOUR NEW COMMIT MESSAGE"
 +```
 +
 +Take a look at the commit log to see the change:
 +
 +```txt
 +git log
 +# Exit with q
 +```
 +
 +After making the last commit you may have forgotten something. There is no need to create a new commit. Just add the latest changes and merge them into the intended commit:
 +
 +```txt
 +git add --all
 +git commit --amend
 +```
 +
 +#### Modify multiple commits
 +
 +{{% warning "Be Careful Modifying Multiple Commits"%}}
 +Modifications such as those described in this section can have serious unintended consequences. Skip this section if you're not sure!
 +{{% /warning %}}
 +
 +This is a bit more advanced. Git allows you to [rebase](https://git-scm.com/docs/git-rebase) commits interactively. In other words: it allows you to rewrite the commit history.
 +
 +```txt
 +git rebase --interactive @~6
 +```
 +
 +The `6` at the end of the command represents the number of commits that should be modified. An editor should open and present a list of last six commit messages:
 +
 +```txt
 +pick 80d02a1 tpl: Add hasPrefix to the template funcs' "smoke test"
 +pick aaee038 tpl: Sort the smoke tests
 +pick f0dbf2c tpl: Add the other test case for hasPrefix
 +pick 911c35b Add "How to contribute to Hugo" tutorial
 +pick 33c8973 Begin workflow
 +pick 3502f2e Refactoring and typo fixes
 +```
 +
 +In the case above we should merge the last two commits in the commit of this tutorial (`Add "How to contribute to Hugo" tutorial`). You can "squash" commits, i.e. merge two or more commits into a single one.
 +
 +All operations are written before the commit message. Replace "pick" with an operation. In this case `squash` or `s` for short:
 +
 +```txt
 +pick 80d02a1 tpl: Add hasPrefix to the template funcs' "smoke test"
 +pick aaee038 tpl: Sort the smoke tests
 +pick f0dbf2c tpl: Add the other test case for hasPrefix
 +pick 911c35b Add "How to contribute to Hugo" tutorial
 +squash 33c8973 Begin workflow
 +squash 3502f2e Refactoring and typo fixes
 +```
 +
 +We also want to rewrite the commits message of the third last commit. We forgot "docs:" as prefix according to the code contribution guidelines. The operation to rewrite a commit is called `reword` (or `r` as shortcut).
 +
 +You should end up with a similar setup:
 +
 +```txt
 +pick 80d02a1 tpl: Add hasPrefix to the template funcs' "smoke test"
 +pick aaee038 tpl: Sort the smoke tests
 +pick f0dbf2c tpl: Add the other test case for hasPrefix
 +reword 911c35b Add "How to contribute to Hugo" tutorial
 +squash 33c8973 Begin workflow
 +squash 3502f2e Refactoring and typo fixes
 +```
 +
 +Close the editor. It should open again with a new tab. A text is instructing you to define a new commit message for the last two commits that should be merged (aka "squashed"). Save the file with <kbd>CTRL</kbd>+<kbd>S</kbd> and close the editor again.
 +
 +A last time a new tab opens. Enter a new commit message and save again. Your terminal should contain a status message. Hopefully this one:
 +
 +```txt
 +Successfully rebased and updated refs/heads/<BRANCHNAME>.
 +```
 +
 +Check the commit log if everything looks as expected. Should an error occur you can abort this rebase with `git rebase --abort`.
 +
 +### Push commits
 +
 +To push our commits to the fork on GitHub we need to specify a destination. A destination is defined by the remote and a branch name. Earlier, the defined that the remote URL of our fork is the same as our GitHub handle, in my case `digitalcraftsman`. The branch should have the same as our local one. This makes it easy to identify corresponding branches.
 +
 +```txt
 +git push --set-upstream <YOUR-GITHUB-USERNAME> <BRANCHNAME>
 +```
 +
 +Now Git knows the destination. Next time when you to push commits you just need to enter `git push`.
 +
 +If you modified your commit history in the last step GitHub will reject your try to push. This is a safety-feature because the commit history isn't the same and new commits can't be appended as usual. You can enforce this push explicitly with `git push --force`.
 +
 +## Open a pull request
 +
 +We made a lot of progress. Good work. In this step we finally open a pull request to submit our additions. Open the [Hugo master repository](https://github.com/gohugoio/hugo/) on GitHub in your browser.
 +
 +You should find a green button labeled with "New pull request". But GitHub is clever and probably suggests you a pull request like in the beige box below:
 +
 +![Open a pull request](/images/contribute/development/open-pull-request.png)
 +
 +The new page summaries the most important information of your pull request. Scroll down and you find the additions of all your commits. Make sure everything looks as expected and click on "Create pull request".
 +
 +### Accept the contributor license agreement
 +
 +Last but not least you should accept the contributor license agreement (CLA). A new comment should be added automatically to your pull request. Click on the yellow badge, accept the agreement and authenticate yourself with your GitHub account. It just takes a few clicks and only needs to be done once.
 +
 +![Accept the CLA](/images/contribute/development/accept-cla.png)
 +
 +### Automatic builds
 +
 +We use a GitHub Actions workflow to build and test. This is a matrix build across combinations of operating system (macOS, Windows, and Ubuntu) and Go versions. The workflow is triggered by the submission of a pull request. If you are a first-time contributor, the workflow requires approval from a project maintainer.
 +
 +## Where to start?
 +
 +Thank you for reading through this contribution guide. Hopefully, we will see you again soon on GitHub. There are plenty of [open issues][issues] for you to help with.
 +
 +Feel free to [open an issue][newissue] if you think you found a bug or you have a new idea to improve Hugo. We are happy to hear from you.
 +
 +## Additional References for Learning Git and Go
 +
 +* [Codecademy's Free "Learn Git" Course][codecademy] (Free)
 +* [Code School and GitHub's "Try Git" Tutorial][trygit] (Free)
 +* [The Git Book][gitbook] (Free)
 +* [Go Bootcamp][gobootcamp]
 +
 +[codecademy]: https://www.codecademy.com/learn/learn-git
 +[contributors]: https://github.com/gohugoio/hugo/graphs/contributors
 +[docscontrib]: /contribute/documentation/
 +[forums]: https://discourse.gohugo.io
 +[gitbook]: https://git-scm.com/
 +[gobootcamp]: https://www.golangbootcamp.com/book/get_setup
 +[godl]: https://go.dev/dl/
 +[goinstall]: https://go.dev/doc/install
 +[gvm]: https://github.com/moovweb/gvm
 +[issues]: https://github.com/gohugoio/hugo/issues
 +[newissue]: https://github.com/gohugoio/hugo/issues/new
 +[releases]: /getting-started/
 +[setupgopath]: https://go.dev/doc/code#Workspaces
 +[trygit]: https://try.github.io/levels/1/challenges/1
index 93938738453312e9c8c35f617c36218dc7c6174c,0000000000000000000000000000000000000000..641f86c81d068929cf9611bd4ef01858586f167c
mode 100644,000000..100644
--- /dev/null
@@@ -1,331 -1,0 +1,331 @@@
- The Hugo docs make heavy use of Hugo's [archetypes][] feature. All content sections in Hugo documentation have an assigned archetype.
 +---
 +title: Contribute to the Hugo Docs
 +linktitle: Documentation
 +description: Documentation is an integral part of any open source project. The Hugo docs are as much a work in progress as the source it attempts to cover.
 +date: 2017-02-01
 +publishdate: 2017-02-01
 +categories: [contribute]
 +keywords: [docs,documentation,community, contribute]
 +menu:
 +  docs:
 +    parent: "contribute"
 +    weight: 20
 +weight: 20
 +sections_weight: 20
 +aliases: [/contribute/docs/]
 +toc: true
 +---
 +
 +## Create Your Fork
 +
 +It's best to make changes to the Hugo docs on your local machine to check for consistent visual styling. Make sure you've created a fork of [hugoDocs](https://github.com/gohugoio/hugoDocs) on GitHub and cloned the repository locally on your machine. For more information, you can see [GitHub's documentation on "forking"][ghforking] or follow along with [Hugo's development contribution guide][hugodev].
 +
 +You can then create a separate branch for your additions. Be sure to choose a descriptive branch name that best fits the type of content. The following is an example of a branch name you might use for adding a new website to the showcase:
 +
 +```txt
 +git checkout -b jon-doe-showcase-addition
 +```
 +
 +## Add New Content
 +
- : other [templating functions][] you feel are related to your new function to help fellow Hugo users.
++The Hugo docs make heavy use of Hugo's [archetypes] feature. All content sections in Hugo documentation have an assigned archetype.
 +
 +Adding new content to the Hugo docs follows the same pattern, regardless of the content section:
 +
 +```txt
 +hugo new <DOCS-SECTION>/<new-content-lowercase>.md
 +```
 +
 +### Add a New Function
 +
 +Once you have cloned the Hugo repository, you can create a new function via the following command. Keep the filename lowercase.
 +
 +```txt
 +hugo new functions/newfunction.md
 +```
 +
 +The archetype for `functions` according to the Hugo docs is as follows:
 +
 +{{< code file="archetypes/functions.md" >}}
 +{{< readfile file="/archetypes/functions.md">}}
 +{{< /code >}}
 +
 +#### New Function Required Fields
 +
 +Here is a review of the front matter fields automatically generated for you using `hugo new functions/*`:
 +
 +***`title`***
 +: this will be auto-populated in all lowercase when you use `hugo new` generator.
 +
 +***`linktitle`***
 +: the function's actual casing (e.g., `replaceRE` rather than `replacere`).
 +
 +***`description`***
 +: a brief description used to populate the [Functions Quick Reference](/functions/).
 +
 +`categories`
 +: currently auto-populated with 'functions` for future-proofing and portability reasons only; ignore this field.
 +
 +`tags`
 +: only if you think it will help end users find other related functions
 +
 +`signature`
 +: this is a signature/syntax definition for calling the function (e.g., `apply SEQUENCE FUNCTION [PARAM...]`).
 +
 +`workson`
 +: acceptable values include `lists`,`taxonomies`, `terms`, `groups`, and `files`.
 +
 +`hugoversion`
 +: the version of Hugo that will ship with this new function.
 +
 +`relatedfuncs`
++: other [templating functions] you feel are related to your new function to help fellow Hugo users.
 +
 +`{{.Content}}`
 +: an extended description of the new function; examples are not only welcomed but encouraged.
 +
 +In the body of your function, expand the short description used in the front matter. Include as many examples as possible, and leverage the Hugo docs [`code` shortcode](#add-code-blocks). If you are unable to add examples but would like to solicit help from the Hugo community, add `needsexample: true` to your front matter.
 +
 +## Add Code Blocks
 +
 +Code blocks are crucial for providing examples of Hugo's new features to end users of the Hugo docs. Whenever possible, create examples that you think Hugo users will be able to implement in their own projects.
 +
 +### Standard Syntax
 +
 +Across many pages on the Hugo docs, the typical triple-back-tick Markdown syntax (```` ``` ````) is used. If you do not want to take the extra time to implement the following code block shortcodes, please use standard GitHub-flavored Markdown. 
 +
 +````txt
 +```go-html-template
 +{{ range site.RegularPages }}
 +  <h2><a href="{{ .RelPermalink }}">{{ .LinkTitle }}</a></h2>
 +{{ end }}
 +```
 +````
 +
 +
 +### Code Block Shortcode
 +
 +The Hugo documentation comes with a very robust shortcode for adding interactive code blocks.
 +
 +{{% note %}}
 +With the `code` shortcodes, *you must include triple back ticks and a language declaration*. This was done by design so that the shortcode wrappers were easily added to legacy documentation and will be that much easier to remove if needed in future versions of the Hugo docs.
 +{{% /note %}}
 +
 +### `code`
 +
 +`code` is the Hugo docs shortcode you'll use most often. `code` requires has only one named parameter: `file`. Here is the pattern:
 +
 +```go-html-template
 +{{%/* code file="smart/file/name/with/path.html" download="download.html" copy="true" */%}}
 +A whole bunch of coding going on up in here!
 +{{%/* /code */%}}
 +```
 +
 +The following are the arguments passed into `code`:
 +
 +***`file`***
 +: the only *required* argument. `file` is needed for styling but also plays an important role in helping users create a mental model around Hugo's directory structure. Visually, this will be displayed as text in the top left of the code block.
 +
 +`download`
 +: if omitted, this will have no effect on the rendered shortcode. When a value is added to `download`, it's used as the filename for a downloadable version of the code block.
 +
 +`copy`
 +: a copy button is added automatically to all `code` shortcodes. If you want to keep the filename and styling of `code` but don't want to encourage readers to copy the code (e.g., a "Do not do" snippet in a tutorial), use `copy="false"`.
 +
 +#### Example `code` Input
 +
 +This example HTML code block tells Hugo users the following:
 +
 +1. This file *could* live in `layouts/_default`, as demonstrated by `layouts/_default/single.html` as the value for `file`.
 +2. This snippet is complete enough to be downloaded and implemented in a Hugo project, as demonstrated by `download="single.html"`.
 +
 +```go-html-template
 +{{</* code file="layouts/_default/single.html" download="single.html" */>}}
 +{{ define "main" }}
 +<main>
 +    <article>
 +        <header>
 +            <h1>{{.Title}}</h1>
 +            {{with .Params.subtitle}}
 +            <span>{{.}}</span>
 +        </header>
 +        <div>
 +            {{.Content}}
 +        </div>
 +        <aside>
 +            {{.TableOfContents}}
 +        </aside>
 +    </article>
 +</main>
 +{{ end }}
 +{{</* /code */>}}
 +```
 +
 +##### Example 'code' Display
 +
 +The output of this example will render to the Hugo docs as follows:
 +
 +{{< code file="layouts/_default/single.html" download="single.html" >}}
 +{{ define "main" }}
 +<main>
 +    <article>
 +        <header>
 +            <h1>{{.Title}}</h1>
 +            {{with .Params.subtitle}}
 +            <span>{{.}}</span>
 +        </header>
 +        <div>
 +            {{.Content}}
 +        </div>
 +        <aside>
 +            {{.TableOfContents}}
 +        </aside>
 +    </article>
 +</main>
 +{{ end }}
 +{{< /code >}}
 +
 +<!-- #### Output Code Block
 +
 +The `output` shortcode is almost identical to the `code` shortcode but only takes and requires `file`. The purpose of `output` is to show *rendered* HTML and therefore almost always follows another basic code block *or* and instance of the `code` shortcode:
 +
 +```
 +{{%/* output file="posts/my-first-post/index.html" */%}}
 +<h1>This is my First Hugo Blog Post</h1>
 +<p>I am excited to be using Hugo.</p>
 +{{%/* /output */%}}
 +```
 +
 +The preceding `output` example will render as follows to the Hugo docs:
 +
 +{{< output file="posts/my-first-post/index.html" >}}
 +<h1>This is my First Hugo Blog Post</h1>
 +<p>I am excited to be using Hugo.</p>
 +{{< /output >}} -->
 +
 +## Blockquotes
 +
 +Blockquotes can be added to the Hugo documentation using [typical Markdown blockquote syntax][bqsyntax]:
 +
 +```md
 +> Without the threat of punishment, there is no joy in flight.
 +```
 +
 +The preceding blockquote will render as follows in the Hugo docs:
 +
 +> Without the threat of punishment, there is no joy in flight.
 +
 +However, you can add a quick and easy `<cite>` element (added on the client via JavaScript) by separating your main blockquote and the citation with a hyphen with a single space on each side:
 +
 +```md
 +> Without the threat of punishment, there is no joy in flight. - [Kobo Abe](https://en.wikipedia.org/wiki/Kobo_Abe)
 +```
 +
 +Which will render as follows in the Hugo docs:
 +
 +> Without the threat of punishment, there is no joy in flight. - [Kobo Abe][abe]
 +
 +{{% note "Blockquotes `!=` Admonitions" %}}
 +Previous versions of Hugo documentation used blockquotes to draw attention to text. This is *not* the [intended semantic use of `<blockquote>`](https://html5doctor.com/cite-and-blockquote-reloaded/). Use blockquotes when quoting. To note or warn your user of specific information, use the admonition shortcodes that follow.
 +{{% /note %}}
 +
 +## Admonitions
 +
 +**Admonitions** are common in technical documentation. The most popular is that seen in [reStructuredText Directives][sourceforge]. From the SourceForge documentation:
 +
 +> Admonitions are specially marked "topics" that can appear anywhere an ordinary body element can. They contain arbitrary body elements. Typically, an admonition is rendered as an offset block in a document, sometimes outlined or shaded, with a title matching the admonition type. - [SourceForge][sourceforge]
 +
 +The Hugo docs contain three admonitions: `note`, `tip`, and `warning`.
 +
 +### `note` Admonition
 +
 +Use the `note` shortcode when you want to draw attention to information subtly. `note` is intended to be less of an interruption in content than is `warning`.
 +
 +#### Example `note` Input
 +
 +{{< code file="note-with-heading.md" >}}
 +{{%/* note */%}}
 +Here is a piece of information I would like to draw your **attention** to.
 +{{%/* /note */%}}
 +{{< /code >}}
 +
 +#### Example `note` Output
 +
 +{{< output file="note-with-heading.html" >}}
 +{{% note %}}
 +Here is a piece of information I would like to draw your **attention** to.
 +{{% /note %}}
 +{{< /output >}}
 +
 +#### Example `note` Display
 +
 +{{% note %}}
 +Here is a piece of information I would like to draw your **attention** to.
 +{{% /note %}}
 +
 +### `tip` Admonition
 +
 +Use the `tip` shortcode when you want to give the reader advice. `tip`, like `note`, is intended to be less of an interruption in content than is `warning`.
 +
 +#### Example `tip` Input
 +
 +{{< code file="using-tip.md" >}}
 +{{%/* tip */%}}
 +Here's a bit of advice to improve your productivity with Hugo.
 +{{%/* /tip */%}}
 +{{< /code >}}
 +
 +#### Example `tip` Output
 +
 +{{< output file="tip-output.html" >}}
 +{{% tip %}}
 +Here's a bit of advice to improve your productivity with Hugo.
 +{{% /tip %}}
 +{{< /output >}}
 +
 +#### Example `tip` Display
 +
 +{{% tip %}}
 +Here's a bit of advice to improve your productivity with Hugo.
 +{{% /tip %}}
 +
 +### `warning` Admonition
 +
 +Use the `warning` shortcode when you want to draw the user's attention to something important. A good usage example is for articulating breaking changes in Hugo versions, known bugs, or templating "gotchas."
 +
 +#### Example `warning` Input
 +
 +{{< code file="warning-admonition-input.md" >}}
 +{{%/* warning */%}}
 +This is a warning, which should be reserved for *important* information like breaking changes.
 +{{%/* /warning */%}}
 +{{< /code >}}
 +
 +#### Example `warning` Output
 +
 +{{< output file="warning-admonition-output.html" >}}
 +{{% warning %}}
 +This is a warning, which should be reserved for *important* information like breaking changes.
 +{{% /warning %}}
 +{{< /output >}}
 +
 +#### Example `warning` Display
 +
 +{{% warning %}}
 +This is a warning, which should be reserved for *important* information like breaking changes.
 +{{% /warning %}}
 +
 +{{% note "Pull Requests and Branches" %}}
 +Similar to [contributing to Hugo development](/contribute/development/), the Hugo team expects you to create a separate branch/fork when you make your contributions to the Hugo docs.
 +{{% /note %}}
 +
 +[abe]: https://en.wikipedia.org/wiki/Kobo_Abe
 +[archetypes]: /content-management/archetypes/
 +[bqsyntax]: https://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet#blockquotes
 +[charcount]: https://www.lettercount.com/
 +[`docs/static/images/showcase/`]: https://github.com/gohugoio/hugo/tree/master/docs/static/images/showcase/
 +[ghforking]: https://help.github.com/articles/fork-a-repo/
 +[hugodev]: /contribute/development/
 +[shortcodeparams]: content-management/shortcodes/#shortcodes-without-markdown
 +[sourceforge]: https://docutils.sourceforge.io/docs/ref/rst/directives.html#admonitions
 +[templating function]: /functions/
index 0c74e628b9dfc09f242ff20c674969ab4f50397d,0000000000000000000000000000000000000000..6a6262f755d1fd2ef52b841093345a1bc5138263
mode 100644,000000..100644
--- /dev/null
@@@ -1,88 -1,0 +1,88 @@@
- 1. Grab the index object of your `tags` [taxonomy][].
 +---
 +title: .GetPage
 +description: "Gets a `Page` of a given `path`."
 +date: 2017-02-01
 +publishdate: 2017-02-01
 +lastmod: 2017-02-01
 +categories: [functions]
 +menu:
 +  docs:
 +    parent: "functions"
 +keywords: [sections,lists,indexes]
 +signature: [".GetPage PATH"]
 +workson: []
 +hugoversion:
 +relatedfuncs: []
 +deprecated: false
 +aliases: []
 +---
 +
 +`.GetPage` returns a page of a given `path`. Both `Site` and `Page` implements this method. The `Page` variant will, if given a relative path -- i.e. a path without a leading `/` -- try look for the page relative to the current page.
 +
 +{{% note %}}
 +**Note:** We overhauled and simplified the `.GetPage` API in Hugo 0.45. Before that you needed to provide a `Kind` attribute in addition to the path, e.g. `{{ .Site.GetPage "section" "blog" }}`. This will still work, but is now superfluous.
 +{{% /note %}}
 +
 +
 +```go-html-template
 +{{ with .Site.GetPage "/blog" }}{{ .Title }}{{ end }}
 +```
 +
 +This method will return `nil` when no page could be found, so the above will not print anything if the blog section is not found.
 +
 +To find a regular page in the blog section::
 +
 +```go-html-template
 +{{ with .Site.GetPage "/blog/my-post.md" }}{{ .Title }}{{ end }}
 +```
 +
 +And since `Page` also provides a `.GetPage` method, the above is the same as:
 +
 +```go-html-template
 +{{ with .Site.GetPage "/blog" }}
 +{{ with .GetPage "my-post.md" }}{{ .Title }}{{ end }}
 +{{ end }}
 +```
 +
 +## .GetPage and Multilingual Sites
 +
 +The previous examples have used the full content filename to look up the post. Depending on how you have organized your content (whether you have the language code in the file name or not, e.g. `my-post.en.md`), you may want to do the lookup without extension. This will get you the current language's version of the page:
 +
 +```go-html-template
 +{{ with .Site.GetPage "/blog/my-post" }}{{ .Title }}{{ end }}
 +```
 +
 +## .GetPage Example
 +
 +This code snippet---in the form of a [partial template][partials]---allows you to do the following:
 +
++1. Grab the index object of your `tags` [taxonomy].
 +2. Assign this object to a variable, `$t`
 +3. Sort the terms associated with the taxonomy by popularity.
 +4. Grab the top two most popular terms in the taxonomy (i.e., the two most popular tags assigned to content.
 +
 +{{< code file="grab-top-two-tags.html" >}}
 +<ul class="most-popular-tags">
 +{{ $t := .Site.GetPage "/tags" }}
 +{{ range first 2 $t.Data.Terms.ByCount }}
 +    <li>{{ . }}</li>
 +{{ end }}
 +</ul>
 +{{< /code >}}
 +
 +## `.GetPage` on Page Bundles
 +
 +If the page retrieved by `.GetPage` is a [Leaf Bundle][leaf_bundle], and you
 +need to get the nested _**page** resources_ in that, you will need to use the
 +methods in `.Resources` as explained in the [Page Resources][page_resources]
 +section.
 +
 +See the [Headless Bundle][headless_bundle] documentation for an example.
 +
 +
 +[partials]: /templates/partials/
 +[taxonomy]: /content-management/taxonomies/
 +[page_kinds]: /templates/section-templates/#page-kinds
 +[leaf_bundle]: /content-management/page-bundles/#leaf-bundles
 +[headless_bundle]: /content-management/page-bundles/#headless-bundle
 +[page_resources]: /content-management/page-resources/
index da93b3e446548155c309661234363ff3be408656,0000000000000000000000000000000000000000..1d513e775f16bf982a382dcbb164de0b974d2321
mode 100644,000000..100644
--- /dev/null
@@@ -1,65 -1,0 +1,65 @@@
- You can use `after` in combination with the [`first` function][] and Hugo's [powerful sorting methods][lists]. Let's assume you have a list page at `example.com/articles`. You have 10 articles, but you want your templating for the [list/section page][] to show only two rows:
 +---
 +title: after
 +description: "`after` slices an array to only the items after the <em>N</em>th item."
 +date: 2017-02-01
 +publishdate: 2017-02-01
 +lastmod: 2017-02-01
 +categories: [functions]
 +menu:
 +  docs:
 +    parent: "functions"
 +keywords: [iteration]
 +signature: ["after INDEX COLLECTION"]
 +workson: []
 +hugoversion:
 +relatedfuncs: [last,first,seq]
 +deprecated: false
 +aliases: []
 +---
 +
 +The following shows `after` being used in conjunction with the [`slice` function][slice]:
 +
 +```
 +{{ $data := slice "one" "two" "three" "four" }}
 +{{ range after 2 $data }}
 +    {{ . }}
 +{{ end }}
 +→ ["three", "four"]
 +```
 +
 +## Example of `after` with `first`: 2nd&ndash;4th Most Recent Articles
 +
++You can use `after` in combination with the [`first` function] and Hugo's [powerful sorting methods][lists]. Let's assume you have a list page at `example.com/articles`. You have 10 articles, but you want your templating for the [list/section page] to show only two rows:
 +
 +1. The top row is titled "Featured" and shows only the most recently published article (i.e. by `publishdate` in the content files' front matter).
 +2. The second row is titled "Recent Articles" and shows only the 2nd- to 4th-most recently published articles.
 +
 +{{< code file="layouts/section/articles.html" download="articles.html" >}}
 +{{ define "main" }}
 +<section class="row featured-article">
 +    <h2>Featured Article</h2>
 +    {{ range first 1 .Pages.ByPublishDate.Reverse }}
 +     <header>
 +        <h3><a href="{{.Permalink}}">{{.Title}}</a></h3>
 +    </header>
 +    <p>{{.Description}}</p>
 +    {{ end }}
 +</section>
 +<div class="row recent-articles">
 +    <h2>Recent Articles</h2>
 +    {{ range first 3 (after 1 .Pages.ByPublishDate.Reverse) }}
 +        <section class="recent-article">
 +            <header>
 +                <h3><a href="{{.Permalink}}">{{.Title}}</a></h3>
 +            </header>
 +            <p>{{.Description}}</p>
 +        </section>
 +    {{ end }}
 +</div>
 +{{ end }}
 +{{< /code >}}
 +
 +[`first` function]: /functions/first/
 +[list/section page]: /templates/section-templates/
 +[lists]: /templates/lists/#order-content
 +[slice]: /functions/slice/
index 7550069a54481bdbf79b0759e47f6faaf79896e2,0000000000000000000000000000000000000000..983e2fdb96360d6d63f2f2fc041380a868fce2de
mode 100644,000000..100644
--- /dev/null
@@@ -1,118 -1,0 +1,118 @@@
- This is *roughly* equivalent to using the following with [range][]:
 +---
 +title: apply
 +description: Given a map, array, or slice, `apply` returns a new slice with a function applied over it.
 +date: 2017-02-01
 +publishdate: 2017-02-01
 +lastmod: 2017-02-01
 +categories: [functions]
 +menu:
 +  docs:
 +    parent: "functions"
 +keywords: [advanced]
 +signature: ["apply COLLECTION FUNCTION [PARAM...]"]
 +workson: []
 +hugoversion:
 +relatedfuncs: []
 +deprecated: false
 +draft: false
 +aliases: []
 +---
 +
 +{{< todo >}}
 +POTENTIAL NEW CONTENT: see apply/sequence discussion: https://discourse.gohugo.io/t/apply-printf-on-a-sequence/5722;
 +{{< /todo >}}
 +
 +`apply` expects at least three parameters, depending on the function being applied.
 +
 +1. The first parameter is the sequence to operate on.
 +2. The second parameter is the name of the function as a string, which must be the name of a valid [Hugo function][functions].
 +3. After that, the parameters to the applied function are provided, with the string `"."` standing in for each element of the sequence the function is to be applied against.
 +
 +Here is an example of a content file with `names:` as a front matter field:
 +
 +```
 ++++
 +names: [ "Derek Perkins", "Joe Bergevin", "Tanner Linsley" ]
 ++++
 +```
 +
 +You can then use `apply` as follows:
 +
 +```
 +{{ apply .Params.names "urlize" "." }}
 +```
 +
 +Which will result in the following:
 +
 +```
 +"derek-perkins", "joe-bergevin", "tanner-linsley"
 +```
 +
- If you have `post-tag-list.html` and `post-tag-link.html` as [partials][], you *could* use the following snippets, respectively:
++This is *roughly* equivalent to using the following with [range]:
 +
 +```
 +{{ range .Params.names }}{{ . | urlize }}{{ end }}
 +```
 +
 +However, it is not possible to provide the output of a range to the [`delimit` function][delimit], so you need to `apply` it.
 +
- Now in the completed version, you can sort the tags, convert the tags to links with `layouts/partials/post-tag-link.html`, [chomp][] off stray newlines, and join the tags together in a delimited list for presentation. Here is an even DRYer version of the preceding example:
++If you have `post-tag-list.html` and `post-tag-link.html` as [partials], you *could* use the following snippets, respectively:
 +
 +{{< code file="layouts/partials/post-tag-list.html" copy="false" >}}
 +{{ with .Params.tags }}
 +<div class="tags-list">
 +  Tags:
 +  {{ $len := len . }}
 +  {{ if eq $len 1 }}
 +    {{ partial "post-tag-link.html" (index . 0) }}
 +  {{ else }}
 +    {{ $last := sub $len 1 }}
 +    {{ range first $last . }}
 +      {{ partial "post-tag-link.html" . }},
 +    {{ end }}
 +    {{ partial "post-tag-link.html" (index . $last) }}
 +  {{ end }}
 +</div>
 +{{ end }}
 +{{< /code >}}
 +
 +{{< code file="layouts/partials/post-tag-link.html" copy="false" >}}
 +<a class="post-tag post-tag-{{ . | urlize }}" href="/tags/{{ . | urlize }}">{{ . }}</a>
 +{{< /code >}}
 +
 +This works, but the complexity of `post-tag-list.html` is fairly high. The Hugo template needs to perform special behavior for the case where there’s only one tag, and it has to treat the last tag as special. Additionally, the tag list will be rendered something like `Tags: tag1 , tag2 , tag3` because of the way that the HTML is generated and then interpreted by a browser.
 +
 +This first version of `layouts/partials/post-tag-list.html` separates all of the operations for ease of reading. The combined and DRYer version is shown next:
 +
 +```
 +{{ with .Params.tags }}
 +    <div class="tags-list">
 +      Tags:
 +      {{ $sort := sort . }}
 +      {{ $links := apply $sort "partial" "post-tag-link.html" "." }}
 +      {{ $clean := apply $links "chomp" "." }}
 +      {{ delimit $clean ", " }}
 +    </div>
 +{{ end }}
 +```
 +
++Now in the completed version, you can sort the tags, convert the tags to links with `layouts/partials/post-tag-link.html`, [chomp] off stray newlines, and join the tags together in a delimited list for presentation. Here is an even DRYer version of the preceding example:
 +
 +{{< code file="layouts/partials/post-tag-list.html" download="post-tag-list.html" >}}
 +    {{ with .Params.tags }}
 +    <div class="tags-list">
 +      Tags:
 +      {{ delimit (apply (apply (sort .) "partial" "post-tag-link.html" ".") "chomp" ".") ", " }}
 +    </div>
 +    {{ end }}
 +{{< /code >}}
 +
 +{{% note %}}
 +`apply` does not work when receiving the sequence as an argument through a pipeline.
 +{{% /note %}}
 +
 +[chomp]: /functions/chomp/ "See documentation for the chomp function"
 +[delimit]: /functions/delimit/ "See documentation for the delimit function"
 +[functions]: /functions/ "See the full list of Hugo functions to see what can be passed as an argument to the apply function."
 +[partials]: /templates/partials/
 +[range]: /functions/range/ "Learn the importance of the range function, a fundamental keyword in both Hugo templates and the Go programming language."
index 4ef806f450ed2a8edfbe4f48f1d4cac4a2de0c53,0000000000000000000000000000000000000000..e2f93f1fc832464c578fd64c5e6988f26fa79c62
mode 100644,000000..100644
--- /dev/null
@@@ -1,126 -1,0 +1,126 @@@
- The examples were rendered and tested in [CST][] and all point to the same field in a content file's front matter:
 +---
 +title: .Format
 +description: Formats built-in Hugo dates---`.Date`, `.PublishDate`, and `.Lastmod`---according to Go's layout string.
 +date: 2017-02-01
 +publishdate: 2017-02-01
 +lastmod: 2017-02-01
 +categories: [functions]
 +menu:
 +  docs:
 +    parent: "functions"
 +keywords: [dates,time]
 +signature: [".Format FORMAT"]
 +workson: [times]
 +hugoversion:
 +relatedfuncs: [dateFormat,now,Unix,time]
 +deprecated: false
 +aliases: []
 +toc: true
 +---
 +
 +`.Format` will format date values defined in your front matter and can be used as a property on the following [page variables][pagevars]:
 +
 +* `.PublishDate`
 +* `.Date`
 +* `.Lastmod`
 +
 +Assuming a key-value of `date: 2017-03-03` in a content file's front matter, your can run the date through `.Format` followed by a layout string for your desired output at build time:
 +
 +```
 +{{ .PublishDate.Format "January 2, 2006" }} => March 3, 2017
 +```
 +
 +For formatting *any* string representations of dates defined in your front matter, see the [`dateFormat` function][dateFormat], which will still leverage the Go layout string explained below but uses a slightly different syntax.
 +
 +## Go's Layout String
 +
 +Hugo templates [format your dates][time] via layout strings that point to a specific reference time:
 +
 +```
 +Mon Jan 2 15:04:05 MST 2006
 +```
 +
 +While this may seem arbitrary, the numerical value of `MST` is `07`, thus making the layout string a sequence of numbers.
 +
 +Here is a visual explanation [taken directly from the Go docs][gdex]:
 +
 +```
 + Jan 2 15:04:05 2006 MST
 +=> 1 2  3  4  5    6  -7
 +```
 +
 +### Hugo Date and Time Templating Reference
 +
 +The following examples show the layout string followed by the rendered output.
 +
++The examples were rendered and tested in [CST] and all point to the same field in a content file's front matter:
 +
 +```
 +date: 2017-03-03T14:15:59-06:00
 +```
 +
 +`.Date` (i.e. called via [page variable][pagevars])
 +: **Returns**: `2017-03-03 14:15:59 -0600 CST`
 +
 +`"Monday, January 2, 2006"`
 +: **Returns**: `Friday, March 3, 2017`
 +
 +`"Mon Jan 2 2006"`
 +: **Returns**: `Fri Mar 3 2017`
 +
 +`"January 2006"`
 +: **Returns**: `March 2017`
 +
 +`"2006-01-02"`
 +: **Returns**: `2017-03-03`
 +
 +`"Monday"`
 +: **Returns**: `Friday`
 +
 +`"02 Jan 06 15:04 MST"` (RFC822)
 +: **Returns**: `03 Mar 17 14:15 CST`
 +
 +`"02 Jan 06 15:04 -0700"` (RFC822Z)
 +: **Returns**: `03 Mar 17 14:15 -0600`
 +
 +`"Mon, 02 Jan 2006 15:04:05 MST"` (RFC1123)
 +: **Returns**: `Fri, 03 Mar 2017 14:15:59 CST`
 +
 +`"Mon, 02 Jan 2006 15:04:05 -0700"` (RFC1123Z)
 +: **Returns**: `Fri, 03 Mar 2017 14:15:59 -0600`
 +
 +More examples can be found in Go's [documentation for the time package][timeconst].
 +
 +### Cardinal Numbers and Ordinal Abbreviations
 +
 +Spelled-out cardinal numbers (e.g. "one", "two", and "three") are not currently supported.
 +
 +Ordinal abbreviations (i.e., with shorted suffixes like "1st", "2nd", and "3rd") are not currently directly supported. By using `{{.Date.Format "Jan 2nd 2006"}}`, Hugo assumes you want to append `nd` as a string to the day of the month. However, you can chain functions together to create something like this:
 +
 +```
 +{{ .Date.Format "2" }}{{ if in (slice 1 21 31) .Date.Day}}st{{ else if in (slice 2 22) .Date.Day}}nd{{ else if in (slice 3 23) .Date.Day}}rd{{ else }}th{{ end }} of {{ .Date.Format "January 2006" }}
 +```
 +
 +This will output:
 +
 +```
 +5th of March 2017
 +```
 +
 +
 +### Use `.Local` and `.UTC`
 +
 +In conjunction with the [`dateFormat` function][dateFormat], you can also convert your dates to `UTC` or to local timezones:
 +
 +`{{ dateFormat "02 Jan 06 15:04 MST" .Date.UTC }}`
 +: **Returns**: `03 Mar 17 20:15 UTC`
 +
 +`{{ dateFormat "02 Jan 06 15:04 MST" .Date.Local }}`
 +: **Returns**: `03 Mar 17 14:15 CST`
 +
 +[CST]: https://en.wikipedia.org/wiki/Central_Time_Zone
 +[dateFormat]: /functions/dateformat/
 +[gdex]: https://golang.org/pkg/time/#example_Time_Format
 +[pagevars]: /variables/page/
 +[time]: https://golang.org/pkg/time/
 +[timeconst]: https://golang.org/pkg/time/#ANSIC
index 0681583dbb1d36fa19c0276aa971f22c0d41a517,0000000000000000000000000000000000000000..9f15d79c7c86bcf3b255a92306559e4013716c90
mode 100644,000000..100644
--- /dev/null
@@@ -1,63 -1,0 +1,63 @@@
- `len` is also considered a [fundamental function for Hugo templating][].
 +---
 +title: len
 +linktitle: len
 +description: Returns the length of a variable according to its type.
 +date: 2017-02-01
 +publishdate: 2017-02-01
 +lastmod: 2017-04-18
 +categories: [functions]
 +menu:
 +  docs:
 +    parent: "functions"
 +keywords: []
 +signature: ["len INPUT"]
 +workson: [lists,taxonomies,terms]
 +hugoversion:
 +relatedfuncs: []
 +deprecated: false
 +toc: false
 +aliases: []
 +---
 +
 +`len` is a built-in function in Go that returns the length of a variable according to its type. From the Go documentation:
 +
 +> Array: the number of elements in v.
 +>
 +> Pointer to array: the number of elements in *v (even if v is nil).
 +>
 +> Slice, or map: the number of elements in v; if v is nil, len(v) is zero.
 +>
 +> String: the number of bytes in v.
 +>
 +> Channel: the number of elements queued (unread) in the channel buffer; if v is nil, len(v) is zero.
 +
- The following templating uses [`where`][] in conjunction with `len` to
- figure out the total number of content pages in a `posts` [section][]:
++`len` is also considered a [fundamental function for Hugo templating].
 +
 +## `len` Example 1: Longer Headings
 +
 +You may want to append a class to a heading according to the length of the string therein. The following templating checks to see if the title's length is greater than 80 characters and, if so, adds a `long-title` class to the `<h1>`:
 +
 +{{< code file="check-title-length.html" >}}
 +<header>
 +    <h1{{if gt (len .Title) 80}} class="long-title"{{end}}>{{.Title}}</h1>
 +</header>
 +{{< /code >}}
 +
 +## `len` Example 2: Counting Pages with `where`
 +
- Note the use of `.RegularPages`, a [site variable][] that counts all regular content pages but not the `_index.md` pages used to add front matter and content to [list templates][].
++The following templating uses [`where`] in conjunction with `len` to
++figure out the total number of content pages in a `posts` [section]:
 +
 +{{< code file="how-many-posts.html" >}}
 +{{ $posts := (where .Site.RegularPages "Section" "==" "posts") }}
 +{{ $postCount := len $posts }}
 +{{< /code >}}
 +
++Note the use of `.RegularPages`, a [site variable] that counts all regular content pages but not the `_index.md` pages used to add front matter and content to [list templates].
 +
 +
 +[fundamental function for Hugo templating]: /templates/introduction/
 +[list templates]: /templates/lists/
 +[section]: /content-management/sections/
 +[site variable]: /variables/site/
 +[`where`]: /functions/where/
index b108ccb948964f0c1845db549f66b8d95803ed02,0000000000000000000000000000000000000000..b42e045e7f2c191cf6eeca81dbecde3310df4932
mode 100644,000000..100644
--- /dev/null
@@@ -1,28 -1,0 +1,28 @@@
- {{< new-in "0.93.0" >}} **Note**: `markdownify` now supports [Render Hooks][] just like [.RenderString](/functions/renderstring/).
 +---
 +title: markdownify
 +linktitle: markdownify
 +description: Runs the provided string through the Markdown processor.
 +date: 2017-02-01
 +publishdate: 2017-02-01
 +lastmod: 2017-02-01
 +keywords: [markdown,content]
 +categories: [functions]
 +menu:
 +  docs:
 +    parent: "functions"
 +signature: ["markdownify INPUT"]
 +workson: []
 +hugoversion:
 +relatedfuncs: []
 +deprecated: false
 +aliases: []
 +---
 +
 +
 +```
 +{{ .Title | markdownify }}
 +```
 +
++{{< new-in "0.93.0" >}} **Note**: `markdownify` now supports [Render Hooks] just like [.RenderString](/functions/renderstring/).
 +
 +[Render Hooks]: /templates/render-hooks/
index eb0a87279a927eb154a4215a7d423745464f7cac,0000000000000000000000000000000000000000..5387647d20addc7bc0b0783594ecf116b0aaf42e
mode 100644,000000..100644
--- /dev/null
@@@ -1,40 -1,0 +1,40 @@@
- In Hugo, you can declare [site-wide params][sitevars] (i.e. in your [configuration][]), as well as params for [individual pages][pagevars].
 +---
 +title: .Param
 +description: Calls page or site variables into your template.
 +date: 2017-02-01
 +publishdate: 2017-02-01
 +lastmod: 2017-04-30
 +keywords: ["front matter"]
 +categories: [functions]
 +menu:
 +  docs:
 +    parent: "functions"
 +toc:
 +signature: [".Param KEY"]
 +workson: []
 +hugoversion:
 +relatedfuncs: [default]
 +deprecated: false
 +draft: false
 +aliases: []
 +---
 +
- You can use the `.Param` method to call these values into your template. The following will first look for an `image` param in a specific content's [front matter][]. If not found, Hugo will look for an `image` param in your site's configuration:
++In Hugo, you can declare [site-wide params][sitevars] (i.e. in your [configuration]), as well as params for [individual pages][pagevars].
 +
 +A common use case is to have a general value for the site and a more specific value for some of the pages (e.g., an image).
 +
++You can use the `.Param` method to call these values into your template. The following will first look for an `image` param in a specific content's [front matter]. If not found, Hugo will look for an `image` param in your site's configuration:
 +
 +```
 +$.Param "image"
 +```
 +
 +{{% note %}}
 +The `Param` method may not consider empty strings in a content's front matter as "not found." If you are setting preconfigured front matter fields to empty strings using Hugo's archetypes, it may be best to use the [`default` function](/functions/default/) instead of `Param`. See the [related issue on GitHub](https://github.com/gohugoio/hugo/issues/3366).
 +{{% /note %}}
 +
 +
 +[configuration]: /getting-started/configuration/
 +[front matter]: /content-management/front-matter/
 +[pagevars]: /variables/page/
 +[sitevars]: /variables/site/
index a0c31737794284e78b163113e5abe9954aba0ff9,0000000000000000000000000000000000000000..2e79bb32f7630cc31759031f48007e55f9fd51f1
mode 100644,000000..100644
--- /dev/null
@@@ -1,46 -1,0 +1,48 @@@
 +---
 +title: partialCached
 +linktitle: partialCached
 +description: Allows for caching of partials that do not need to be re-rendered on every invocation.
 +date: 2017-02-01
 +publishdate: 2017-02-01
 +lastmod: 2017-02-01
 +categories: [functions]
 +menu:
 +  docs:
 +    parent: "functions"
 +keywords: [performance]
 +signature: ["partialCached LAYOUT INPUT [VARIANT...]"]
 +workson: []
 +hugoversion:
 +relatedfuncs: []
 +deprecated: false
 +aliases: []
 +---
 +
 +The `partialCached` template function can offer significant performance gains for complex templates that don't need to be re-rendered on every invocation.
 +
 +**Note:** Each Site (or language) has its own `partialCached` cache, so each site will execute a partial once.
 +
++**Note**: Hugo renders pages in parallel, and will render the partial more than once with concurrent calls to the `partialCached` function. After Hugo caches the rendered partial, new pages entering the build pipeline will use the cached result.
++
 +Here is the simplest usage:
 +
 +```
 +{{ partialCached "footer.html" . }}
 +```
 +
 +You can also pass additional parameters to `partialCached` to create *variants* of the cached partial. For example, if you have a complex partial that should be identical when rendered for pages within the same section, you could use a variant based upon section so that the partial is only rendered once per section:
 +
 +{{< code file="partial-cached-example.html" >}}
 +{{ partialCached "footer.html" . .Section }}
 +{{< /code >}}
 +
 +If you need to pass additional parameters to create unique variants, you can pass as many variant parameters as you need:
 +
 +```
 +{{ partialCached "footer.html" . .Params.country .Params.province }}
 +```
 +
 +Note that the variant parameters are not made available to the underlying partial template. They are only use to create a unique cache key. Since Hugo `0.61.0` you can use any object as cache key(s), not just strings.
 +
 +
 +> See also [The Full Partial Series Part 1: Caching!](https://regisphilibert.com/blog/2019/12/hugo-partial-series-part-1-caching-with-partialcached/)
index c2347091fd30ad54ab2c500d0dbd2adf8fa3902f,0000000000000000000000000000000000000000..7e4015bf694aa697d745ba55e360632c882e86d4
mode 100644,000000..100644
--- /dev/null
@@@ -1,32 -1,0 +1,32 @@@
- This function is only available when applied to a single piece of content within a [list context][].
 +---
 +title: .Render
 +description: Takes a view to apply when rendering content.
 +date: 2017-02-01
 +publishdate: 2017-02-01
 +lastmod: 2017-02-01
 +categories: [functions]
 +menu:
 +  docs:
 +    parent: "functions"
 +keywords: [views]
 +signature: [".Render LAYOUT"]
 +workson: []
 +hugoversion:
 +relatedfuncs: []
 +deprecated: false
 +aliases: []
 +---
 +
 +The view is an alternative layout and should be a file name that points to a template in one of the locations specified in the documentation for [Content Views](/templates/views).
 +
++This function is only available when applied to a single piece of content within a [list context].
 +
 +This example could render a piece of content using the content view located at `/layouts/_default/summary.html`:
 +
 +```
 +{{ range .Pages }}
 +    {{ .Render "summary"}}
 +{{ end }}
 +```
 +
 +[list context]: /templates/lists/
index 9590762467905ac70bc1a72c3a09020609cdeb51,0000000000000000000000000000000000000000..285542ea998fc27fa397d6b34ea59779d490c4c1
mode 100644,000000..100644
--- /dev/null
@@@ -1,71 -1,0 +1,71 @@@
- `safeURL` declares the provided string as a "safe" URL or URL substring (see [RFC 3986][]). A URL like `javascript:checkThatFormNotEditedBeforeLeavingPage()` from a trusted source should go in the page, but by default dynamic `javascript:` URLs are filtered out since they are a frequently exploited injection vector.
 +---
 +title: safeURL
 +description: Declares the provided string as a safe URL or URL substring.
 +date: 2017-02-01
 +publishdate: 2017-02-01
 +lastmod: 2017-02-01
 +keywords: [strings,urls]
 +categories: [functions]
 +menu:
 +  docs:
 +    parent: "functions"
 +signature: ["safeURL INPUT"]
 +workson: []
 +hugoversion:
 +relatedfuncs: []
 +deprecated: false
 +aliases: []
 +---
 +
++`safeURL` declares the provided string as a "safe" URL or URL substring (see [RFC 3986]). A URL like `javascript:checkThatFormNotEditedBeforeLeavingPage()` from a trusted source should go in the page, but by default dynamic `javascript:` URLs are filtered out since they are a frequently exploited injection vector.
 +
 +Without `safeURL`, only the URI schemes `http:`, `https:` and `mailto:` are considered safe by Go templates. If any other URI schemes (e.g., `irc:` and `javascript:`) are detected, the whole URL will be replaced with `#ZgotmplZ`. This is to "defang" any potential attack in the URL by rendering it useless.
 +
 +The following examples use a [site `config.toml`][configuration] with the following [menu entry][menus]:
 +
 +{{< code file="config.toml" copy="false" >}}
 +[[menu.main]]
 +    name = "IRC: #golang at freenode"
 +    url = "irc://irc.freenode.net/#golang"
 +{{< /code >}}
 +
 +The following is an example of a sidebar partial that may be used in conjunction with the preceding front matter example:
 +
 +{{< code file="layouts/partials/bad-url-sidebar-menu.html" copy="false" >}}
 +<!-- This unordered list may be part of a sidebar menu -->
 +<ul>
 +  {{ range .Site.Menus.main }}
 +  <li><a href="{{ .URL }}">{{ .Name }}</a></li>
 +  {{ end }}
 +</ul>
 +{{< /code >}}
 +
 +This partial would produce the following HTML output:
 +
 +{{< output file="bad-url-sidebar-menu-output.html" >}}
 +<!-- This unordered list may be part of a sidebar menu -->
 +<ul>
 +    <li><a href="#ZgotmplZ">IRC: #golang at freenode</a></li>
 +</ul>
 +{{< /output >}}
 +
 +The odd output can be remedied by adding ` | safeURL` to our `.URL` page variable:
 +
 +{{< code file="layouts/partials/correct-url-sidebar-menu.html" copy="false" >}}
 +<!-- This unordered list may be part of a sidebar menu -->
 +<ul>
 +    <li><a href="{{ .URL | safeURL }}">{{ .Name }}</a></li>
 +</ul>
 +{{< /code >}}
 +
 +With the `.URL` page variable piped through `safeURL`, we get the desired output:
 +
 +{{< output file="correct-url-sidebar-menu-output.html" >}}
 +<ul class="sidebar-menu">
 +    <li><a href="irc://irc.freenode.net/#golang">IRC: #golang at freenode</a></li>
 +</ul>
 +{{< /output >}}
 +
 +[configuration]: /getting-started/configuration/
 +[menus]: /content-management/menus/
 +[RFC 3986]: https://tools.ietf.org/html/rfc3986
index c0750b4a1bbb59f1730e4551a7b543ff56d7675f,0000000000000000000000000000000000000000..a880ec2412f9f734db4e38d02af69f64220e5969
mode 100644,000000..100644
--- /dev/null
@@@ -1,50 -1,0 +1,50 @@@
- It's named and used in the model of [GNU's seq][].
 +---
 +title: seq
 +# linktitle:
 +description: Creates a sequence of integers.
 +date: 2017-02-01
 +publishdate: 2017-02-01
 +lastmod: 2017-02-01
 +categories: [functions]
 +menu:
 +  docs:
 +    parent: "functions"
 +keywords: []
 +signature: ["seq LAST", "seq FIRST LAST", "seq FIRST INCREMENT LAST"]
 +workson: []
 +hugoversion:
 +relatedfuncs: []
 +deprecated: false
 +draft: false
 +aliases: []
 +---
 +
++It's named and used in the model of [GNU's seq].
 +
 +```
 +3 → 1, 2, 3
 +1 2 4 → 1, 3
 +-3 → -1, -2, -3
 +1 4 → 1, 2, 3, 4
 +1 -2 → 1, 0, -1, -2
 +```
 +
 +## Example: `seq` with `range` and `after`
 +
 +You can use `seq` in combination with `range` and `after`. The following will return 19 elements:
 +
 +```
 +{{ range after 1 (seq 20)}}
 +{{ end }}
 +```
 +
 +However, when ranging with an index, the following may be less confusing in that `$indexStartingAt1` and `$num` will return `1,2,3 ... 20`:
 +
 +```
 +{{ range $index, $num := (seq 20) }}
 +$indexStartingAt1 := (add $index 1)
 +{{ end }}
 +```
 +
 +
 +[GNU's seq]: https://www.gnu.org/software/coreutils/manual/html_node/seq-invocation.html#seq-invocation
index 24b717128274d3c983ca1bc9e7d9ff0947f5780a,0000000000000000000000000000000000000000..9b5580d4446b14aa2691f7ec568121b5b24f1d56
mode 100644,000000..100644
--- /dev/null
@@@ -1,33 -1,0 +1,33 @@@
- One use case is the concatenation of elements in combination with the [`delimit` function][]:
 +---
 +title: slice
 +# linktitle: slice
 +description: Creates a slice (array) of all passed arguments.
 +date: 2017-02-01
 +publishdate: 2017-02-01
 +lastmod: 2017-02-01
 +categories: [functions]
 +menu:
 +  docs:
 +    parent: "functions"
 +keywords: [slice, array, interface]
 +signature: ["slice ITEM..."]
 +workson: []
 +hugoversion:
 +relatedfuncs: []
 +deprecated: false
 +draft: false
 +aliases: []
 +toc: false
 +---
 +
++One use case is the concatenation of elements in combination with the [`delimit` function]:
 +
 +{{< code file="slice.html" >}}
 +{{ $sliceOfStrings := slice "foo" "bar" "buzz" }}
 +<!-- returns the slice [ "foo", "bar", "buzz"] -->
 +{{ delimit ($sliceOfStrings) ", " }}
 +<!-- returns the string "foo, bar, buzz" -->
 +{{< /code >}}
 +
 +
 +[`delimit` function]: /functions/delimit/
index 681c85fd96d6b3cd82d3e72b64614cc7c28d734f,0000000000000000000000000000000000000000..175e2dbfe34b9c1fd279042c1e74b7a9a0324fd6
mode 100644,000000..100644
--- /dev/null
@@@ -1,62 -1,0 +1,62 @@@
- The following example takes a UNIX timestamp---set as `utimestamp: "1489276800"` in a content's front matter---converts the timestamp (string) to an integer using the [`int` function][int], and then uses [`printf`][] to convert the `Month` property of `time` into an index.
 +---
 +title: time
 +linktitle:
 +description: Converts a timestamp string into a `time.Time` structure.
 +date: 2017-02-01
 +publishdate: 2017-02-01
 +lastmod: 2017-02-01
 +categories: [functions]
 +menu:
 +  docs:
 +    parent: "functions"
 +keywords: [dates,time,location]
 +signature: ["time INPUT [TIMEZONE]"]
 +workson: []
 +hugoversion: "v0.77.0"
 +relatedfuncs: []
 +deprecated: false
 +aliases: []
 +---
 +
 +
 +`time` converts a timestamp string with an optional default location into a [`time.Time`](https://godoc.org/time#Time) structure so you can access its fields:
 +
 +```
 +{{ time "2016-05-28" }} → "2016-05-28T00:00:00Z"
 +{{ (time "2016-05-28").YearDay }} → 149
 +{{ mul 1000 (time "2016-05-28T10:30:00.00+10:00").Unix }} → 1464395400000, or Unix time in milliseconds
 +```
 +
 +## Using Locations
 +
 +The optional `TIMEZONE` parameter is a string that sets a default time zone (or more specific, the location, which represents the collection of time offsets in a geographical area) that is associated with the specified time value. If the time value has an explicit timezone or offset specified, it will take precedence over the `TIMEZONE` parameter.
 +
 +The list of valid locations may be system dependent, but should include `UTC`, `Local`, or any location in the [IANA Time Zone database](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones).
 +
 +If no `TIMEZONE` is set, the `timeZone` from site configuration will be used.
 +
 +```
 +{{ time "2020-10-20" }} → 2020-10-20 00:00:00 +0000 UTC
 +{{ time "2020-10-20" "America/Los_Angeles" }} → 2020-10-20 00:00:00 -0700 PDT
 +{{ time "2020-01-20" "America/Los_Angeles" }} → 2020-01-20 00:00:00 -0800 PST
 +```
 +
 +## Example: Using `time` to get Month Index
 +
++The following example takes a UNIX timestamp---set as `utimestamp: "1489276800"` in a content's front matter---converts the timestamp (string) to an integer using the [`int` function][int], and then uses [`printf`] to convert the `Month` property of `time` into an index.
 +
 +The following example may be useful when setting up [multilingual sites][multilingual]:
 +
 +{{< code file="unix-to-month-integer.html" >}}
 +{{$time := time (int .Params.addDate)}}
 +=> $time = 1489276800
 +{{$time.Month}}
 +=> "March"
 +{{$monthindex := printf "%d" $time.Month }}
 +=> $monthindex = 3
 +{{< /code >}}
 +
 +
 +[int]: /functions/int/
 +[multilingual]: /content-management/multilingual/
 +[`printf`]: /functions/printf/
index bffc2e1b7fe84477d677d057e91838a6676eab92,0000000000000000000000000000000000000000..f953abb22cdac929dd5959801f23d8fc2c258482
mode 100644,000000..100644
--- /dev/null
@@@ -1,22 -1,0 +1,22 @@@
- If this is your first time using Hugo and you've [already installed Hugo on your machine][installed], we recommend the [quick start][]. You can also use [external learning resources][] to learn Hugo.
 +---
 +title: Get Started
 +linktitle: Get Started Overview
 +description: Quick start and guides for installing Hugo on your preferred operating system.
 +date: 2017-02-01
 +publishdate: 2017-02-01
 +categories: [getting started]
 +keywords: [usage,docs]
 +menu:
 +  docs:
 +    parent: "getting-started"
 +    weight: 1
 +weight: 0001  #rem
 +aliases: [/overview/introduction/]
 +toc: false
 +---
 +
++If this is your first time using Hugo and you've [already installed Hugo on your machine][installed], we recommend the [quick start]. You can also use [external learning resources] to learn Hugo.
 +
 +[installed]: /installation/
 +[quick start]: /getting-started/quick-start/
 +[external learning resources]: /getting-started/external-learning-resources/
index 5a65dcdfcae22fa9f894827e710f573c033f42f1,0000000000000000000000000000000000000000..39f27453f801043f0e86f70ece5b504ecfb0ecb7
mode 100644,000000..100644
--- /dev/null
@@@ -1,791 -1,0 +1,780 @@@
- ## 404 Server Error Page
 +---
 +title: Configure Hugo
 +linktitle: Configuration
 +description: How to configure your Hugo site.
 +date: 2013-07-01
 +publishdate: 2017-01-02
 +categories: [getting started,fundamentals]
 +keywords: [configuration,toml,yaml,json]
 +menu:
 +  docs:
 +    parent: "getting-started"
 +    weight: 60
 +weight: 60
 +sections_weight: 60
 +aliases: [/overview/source-directory/,/overview/configuration/]
 +toc: true
 +---
 +
 +## Configuration File
 +
 +Hugo uses the `config.toml`, `config.yaml`, or `config.json` (if found in the
 +site root) as the default site config file.
 +
 +The user can choose to override that default with one or more site config files
 +using the command-line `--config` switch.
 +
 +Examples:
 +
 +```txt
 +hugo --config debugconfig.toml
 +hugo --config a.toml,b.toml,c.toml
 +```
 +
 +{{% note %}}
 +Multiple site config files can be specified as a comma-separated string to the `--config` switch.
 +{{% /note %}}
 +
 +{{< todo >}}TODO: distinct config.toml and others (the root object files){{< /todo >}}
 +
 +## Configuration Directory
 +
 +In addition to using a single site config file, one can use the `configDir` directory (default to `config/`) to maintain easier organization and environment specific settings.
 +
 +- Each file represents a configuration root object, such as `params.toml` for `[Params]`, `menu(s).toml` for `[Menu]`, `languages.toml` for `[Languages]` etc...
 +- Each file's content must be top-level, for example:
 +
 +{{< code-toggle file="config" >}}
 +[Params]
 +  foo = "bar"
 +{{< /code-toggle >}}
 +
 +{{< code-toggle file="params" >}}
 +foo = "bar"
 +{{< /code-toggle >}}
 +
 +- Each directory holds a group of files containing settings unique to an environment.
 +- Files can be localized to become language specific.
 +
 +
 +```txt
 +├── config
 +│   ├── _default
 +│   │   ├── config.toml
 +│   │   ├── languages.toml
 +│   │   ├── menus.en.toml
 +│   │   ├── menus.zh.toml
 +│   │   └── params.toml
 +│   ├── production
 +│   │   ├── config.toml
 +│   │   └── params.toml
 +│   └── staging
 +│       ├── config.toml
 +│       └── params.toml
 +```
 +
 +Considering the structure above, when running `hugo --environment staging`, Hugo will use every setting from `config/_default` and merge `staging`'s on top of those.
 +
 +Let's take an example to understand this better. Let's say you are using Google Analytics for your website. This requires you to specify `googleAnalytics = "G-XXXXXXXX"` in `config.toml`. Now consider the following scenario:
 +- You don't want the Analytics code to be loaded in development i.e. in your `localhost`
 +- You want to use separate googleAnalytics IDs for your production & staging environments (say):
 +  - `G-PPPPPPPP` for production
 +  - `G-SSSSSSSS` for staging
 +
 +This is how you need to configure your `config.toml` files considering the above scenario:
 +1. In `_default/config.toml` you don't need to mention `googleAnalytics` parameter at all. This ensures that no Google Analytics code is loaded in your development server i.e. when you run `hugo serve`. This works since, by default Hugo sets `Environment=development` when you run `hugo serve` which uses the config files from `_default` folder
 +2. In `production/config.toml` you just need to have one line:
 +
 +    ```googleAnalytics = "G-PPPPPPPP"```
 +
 +    You don't need to mention all other parameters like `title`, `baseURL`, `theme` etc. again in this config file. You need to mention only those parameters which are different or new for the production environment. This is due to the fact that Hugo is going to __merge__ this on top of `_default/config.toml`. Now when you run `hugo` (build command), by default hugo sets `Environment=production`, so the `G-PPPPPPPP` analytics code will be there in your production website
 +3. Similarly in `staging/config.toml` you just need to have one line:
 +
 +    ```googleAnalytics = "G-SSSSSSSS"```
 +
 +    Now you need to tell Hugo that you are using the staging environment. So your build command should be `hugo --environment staging` which will load the `G-SSSSSSSS` analytics code in your staging website
 +
 +{{% note %}}
 +Default environments are __development__ with `hugo server` and __production__ with `hugo`.
 +{{%/ note %}}
 +
 +## Merge Configuration from Themes
 +
 +The configuration value for `_merge` can be one of:
 +
 +none
 +: No merge.
 +
 +shallow
 +: Only add values for new keys.
 +
 +deep
 +: Add values for new keys, merge existing.
 +
 +Note that you don't need to be so verbose as in the default setup below; a `_merge` value higher up will be inherited if not set.
 +
 +{{< code-toggle config="mergeStrategy" skipHeader=true />}}
 +
 +## All Configuration Settings
 +
 +The following is the full list of Hugo-defined variables with their default
 +value in parentheses. Users may choose to override those values in their site
 +config file(s).
 +
 +### archetypeDir
 +
 +**Default value:** "archetypes"
 +
 +The directory where Hugo finds archetype files (content templates). {{% module-mounts-note %}}
 +
 +### assetDir
 +
 +**Default value:** "assets"
 +
 +The directory where Hugo finds asset files used in [Hugo Pipes](/hugo-pipes/). {{% module-mounts-note %}}
 +
 +### baseURL
 +
 +Hostname (and path) to the root, e.g. https://bep.is/
 +
 +### build
 +
 +See [Configure Build](#configure-build)
 +
 +### buildDrafts (false)
 +
 +**Default value:** false
 +
 +Include drafts when building.
 +
 +### buildExpired
 +
 +**Default value:** false
 +
 +Include content already expired.
 +
 +### buildFuture
 +
 +**Default value:** false
 +
 +Include content with publishdate in the future.
 +
 +### caches
 +
 +See [Configure File Caches](#configure-file-caches)
 +
 +### cascade
 +
 +Pass down default configuration values (front matter) to pages in the content tree. The options in site config is the same as in page front matter, see [Front Matter Cascade](/content-management/front-matter#front-matter-cascade).
 +
 +### canonifyURLs
 +
 +**Default value:** false
 +
 +Enable to turn relative URLs into absolute.
 +
 +### contentDir
 +
 +**Default value:** "content"
 +
 +The directory from where Hugo reads content files. {{% module-mounts-note %}}
 +
 +### copyright
 +
 +**Default value:** ""
 +
 +Copyright notice for your site, typically displayed in the footer.
 +
 +### dataDir
 +
 +**Default value:** "data"
 +
 +The directory from where Hugo reads data files. {{% module-mounts-note %}}
 +
 +### defaultContentLanguage
 +
 +**Default value:** "en"
 +
 +Content without language indicator will default to this language.
 +
 +### defaultContentLanguageInSubdir
 +
 +**Default value:**  false
 +
 +Render the default content language in subdir, e.g. `content/en/`. The site root `/` will then redirect to `/en/`.
 +
 +### disableAliases
 +
 +**Default value:**  false
 +
 +Will disable generation of alias redirects. Note that even if `disableAliases` is set, the aliases themselves are preserved on the page. The motivation with this is to be able to generate 301 redirects in an `.htaccess`, a Netlify `_redirects` file or similar using a custom output format.
 +
 +### disableHugoGeneratorInject
 +
 +**Default value:**  false
 +
 +Hugo will, by default, inject a generator meta tag in the HTML head on the _home page only_. You can turn it off, but we would really appreciate if you don't, as this is a good way to watch Hugo's popularity on the rise.
 +
 +### disableKinds
 +
 +**Default value:**  []
 +
 +Enable disabling of all pages of the specified *Kinds*. Allowed values in this list: `"page"`, `"home"`, `"section"`, `"taxonomy"`, `"term"`, `"RSS"`, `"sitemap"`, `"robotsTXT"`, `"404"`.
 +
 +### disableLiveReload
 +
 +**Default value:**  false
 +
 +Disable automatic live reloading of browser window.
 +
 +### disablePathToLower
 +
 +**Default value:**  false
 +
 +: Do not convert the url/path to lowercase.
 +
 +### enableEmoji
 +
 +**Default value:**  false
 +
 +Enable Emoji emoticons support for page content; see the [Emoji Cheat Sheet](https://www.webpagefx.com/tools/emoji-cheat-sheet/).
 +
 +### enableGitInfo
 +
 +**Default value:**  false
 +
 +Enable `.GitInfo` object for each page (if the Hugo site is versioned by Git). This will then update the `Lastmod` parameter for each page using the last git commit date for that content file.
 +
 +### enableInlineShortcodes
 +
 +**Default value:**  false
 +
 +Enable inline shortcode support. See [Inline Shortcodes](/templates/shortcode-templates/#inline-shortcodes).
 +
 +### enableMissingTranslationPlaceholders
 +
 +**Default value:**  false
 +
 +Show a placeholder instead of the default value or an empty string if a translation is missing.
 +
 +### enableRobotsTXT
 +
 +**Default value:**  false
 +
 +Enable generation of `robots.txt` file.
 +
 +### frontmatter
 +
 +See [Front matter Configuration](#configure-front-matter).
 +
 +### googleAnalytics
 +
 +**Default value:**  ""
 +
 +Google Analytics tracking ID.
 +
 +### hasCJKLanguage
 +
 +**Default value:** false
 +
 +If true, auto-detect Chinese/Japanese/Korean Languages in the content. This will make `.Summary` and `.WordCount` behave correctly for CJK languages.
 +
 +### imaging
 +
 +See [Image Processing Config](/content-management/image-processing/#imaging-configuration).
 +
 +### languageCode
 +
 +**Default value:**  ""
 +
 +A language tag as defined by [RFC 5646](https://datatracker.ietf.org/doc/html/rfc5646). This value is used to populate:
 +
 +- The `<language>` element in the internal [RSS template](https://github.com/gohugoio/hugo/blob/master/tpl/tplimpl/embedded/templates/_default/rss.xml)
 +- The `lang` attribute of the `<html>` element in the internal [alias template](https://github.com/gohugoio/hugo/blob/master/tpl/tplimpl/embedded/templates/alias.html)
 +
 +### languages
 +
 +See [Configure Languages](/content-management/multilingual/#configure-languages).
 +
 +### disableLanguages
 +
 +See [Disable a Language](/content-management/multilingual/#disable-a-language)
 +
 +### markup
 +
 +See [Configure Markup](/getting-started/configuration-markup).
 +
 +### mediaTypes
 +
 +See [Configure Media Types](/templates/output-formats/#media-types).
 +
 +### menus
 +
 +See [Add Non-content Entries to a Menu](/content-management/menus/#add-non-content-entries-to-a-menu).
 +
 +### minify
 +
 +See [Configure Minify](#configure-minify)
 +
 +### module
 +
 +Module config see [Module Config](/hugo-modules/configuration/).
 +
 +### newContentEditor
 +
 +**Default value:** ""
 +
 +The editor to use when creating new content.
 +
 +### noChmod
 +
 +**Default value:** false
 +
 +Don't sync permission mode of files.
 +
 +### noTimes
 +
 +**Default value:** false
 +
 +Don't sync modification time of files.
 +
 +### outputFormats
 +
 +See [Configure Output Formats](#configure-additional-output-formats).
 +
 +### paginate
 +
 +**Default value:** 10
 +
 +Default number of elements per page in [pagination](/templates/pagination/).
 +
 +### paginatePath
 +
 +**Default value:** "page"
 +
 +The path element used during pagination (`https://example.com/page/2`).
 +
 +### permalinks
 +
 +See [Content Management](/content-management/urls/#permalinks).
 +
 +### pluralizeListTitles
 +
 +**Default value:** true
 +
 +Pluralize titles in lists.
 +
 +### publishDir
 +
 +**Default value:** "public"
 +
 +The directory to where Hugo will write the final static site (the HTML files etc.).
 +
 +### related
 +
 +: See [Related Content](/content-management/related/#configure-related-content).
 +
 +### relativeURLs
 +
 +**Default value:** false
 +
 +Enable this to make all relative URLs relative to content root. Note that this does not affect absolute URLs.
 +
 +### refLinksErrorLevel
 +
 +**Default value:** "ERROR"
 +
 +When using `ref` or `relref` to resolve page links and a link cannot be resolved, it will be logged with this log level. Valid values are `ERROR` (default) or `WARNING`. Any `ERROR` will fail the build (`exit -1`).
 +
 +### refLinksNotFoundURL
 +
 +URL to be used as a placeholder when a page reference cannot be found in `ref` or `relref`. Is used as-is.
 +
 +### removePathAccents
 +
 +**Default value:** false
 +
 +Removes [non-spacing marks](https://www.compart.com/en/unicode/category/Mn) from [composite characters](https://en.wikipedia.org/wiki/Precomposed_character) in content paths.
 +
 +```text
 +content/post/hügó.md --> https://example.org/post/hugo/
 +```
 +
 +### rssLimit
 +
 +**Default value:** -1 (unlimited)
 +
 +Maximum number of items in the RSS feed.
 +
 +### sectionPagesMenu
 +
 +See ["Section Menu for Lazy Bloggers"](/templates/menu-templates/#section-menu-for-lazy-bloggers).
 +
 +### security
 +
 +See [Security Policy](/about/security-model/#security-policy)
 +
 +### sitemap
 +
 +Default [sitemap configuration](/templates/sitemap-template/#configuration).
 +
 +### summaryLength
 +
 +**Default value:** 70
 +
 +The length of text in words to show in a [`.Summary`](/content-management/summaries/#automatic-summary-splitting).
 +
 +### taxonomies
 +
 +See [Configure Taxonomies](/content-management/taxonomies#configure-taxonomies).
 +
 +### theme
 +
 +: See [Module Config](/hugo-modules/configuration/#module-config-imports) for how to import a theme.
 +
 +### themesDir
 +
 +**Default value:**  "themes"
 +
 +The directory where Hugo reads the themes from.
 +
 +### timeout
 +
 +**Default value:** "30s"
 +
 +Timeout for generating page contents, specified as a [duration](https://pkg.go.dev/time#Duration) or in milliseconds. *Note:*&nbsp;this is used to bail out of recursive content generation. You might need to raise this limit if your pages are slow to generate (e.g., because they require large image processing or depend on remote contents).
 +
 +### timeZone
 +
 +The time zone (or location), e.g. `Europe/Oslo`,  used to parse front matter dates without such information and in the [`time` function](/functions/time/). The list of valid values may be system dependent, but should include `UTC`, `Local`, and any location in the [IANA Time Zone database](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones).
 +
 +### title
 +
 +Site title.
 +
 +### titleCaseStyle
 +
 +**Default value:**  "AP"
 +
 +See [Configure Title Case](#configure-title-case)
 +
 +### uglyURLs
 +
 +**Default value:** false
 +
 +When enabled, creates URL of the form `/filename.html` instead of `/filename/`.
 +
 +### watch
 +
 +**Default value:** false
 +
 +Watch filesystem for changes and recreate as needed.
 +
 +{{% note %}}
 +If you are developing your site on a \*nix machine, here is a handy shortcut for finding a configuration option from the command line:
 +```txt
 +cd ~/sites/yourhugosite
 +hugo config | grep emoji
 +```
 +
 +which shows output like
 +
 +```txt
 +enableemoji: true
 +```
 +{{% /note %}}
 +
 +## Configure Build
 +
 +The `build` configuration section contains global build-related configuration options.
 +
 +{{< code-toggle file="config">}}
 +[build]
 +useResourceCacheWhen="fallback"
 +writeStats = false
 +noJSConfigInAssets = false
 +{{< /code-toggle >}}
 +
 +
 +useResourceCacheWhen
 +: When to use the cached resources in `/resources/_gen` for PostCSS and ToCSS. Valid values are `never`, `always` and `fallback`. The last value means that the cache will be tried if PostCSS/extended version is not available.
 +
 +writeStats
 +: When enabled, a file named `hugo_stats.json` will be written to your project root with some aggregated data about the build, e.g. list of HTML entities published to be used to do [CSS pruning](/hugo-pipes/postprocess/#css-purging-with-postcss). If you're only using this for the production build, you should consider placing it below [config/production](/getting-started/configuration/#configuration-directory). It's also worth mentioning that, due to the nature of the partial server builds, new HTML entities will be added when you add or change them while the server is running, but the old values will not be removed until you restart the server or run a regular `hugo` build.
 +
 +**Note** that the prime use case for this is purging of unused CSS; it is built for speed and there may be false positives (e.g., detection of HTML elements that are not HTML elements).
 +
 +noJSConfigInAssets
 +: Turn off writing a `jsconfig.json` into your `/assets` folder with mapping of imports from running [js.Build](https://gohugo.io/hugo-pipes/js). This file is intended to help with intellisense/navigation inside code editors such as [VS Code](https://code.visualstudio.com/). Note that if you do not use `js.Build`, no file will be written.
 +
 +## Configure Server
 +
 +This is only relevant when running `hugo server`, and it allows to set HTTP headers during development, which allows you to test out your Content Security Policy and similar. The configuration format matches [Netlify's](https://docs.netlify.com/routing/headers/#syntax-for-the-netlify-configuration-file) with slightly more powerful [Glob matching](https://github.com/gobwas/glob):
 +
 +
 +{{< code-toggle file="config">}}
 +[server]
 +[[server.headers]]
 +for = "/**"
 +
 +[server.headers.values]
 +X-Frame-Options = "DENY"
 +X-XSS-Protection = "1; mode=block"
 +X-Content-Type-Options = "nosniff"
 +Referrer-Policy = "strict-origin-when-cross-origin"
 +Content-Security-Policy = "script-src localhost:1313"
 +{{< /code-toggle >}}
 +
 +Since this is "development only", it may make sense to put it below the `development` environment:
 +
 +
 +{{< code-toggle file="config/development/server">}}
 +[[headers]]
 +for = "/**"
 +
 +[headers.values]
 +X-Frame-Options = "DENY"
 +X-XSS-Protection = "1; mode=block"
 +X-Content-Type-Options = "nosniff"
 +Referrer-Policy = "strict-origin-when-cross-origin"
 +Content-Security-Policy = "script-src localhost:1313"
 +{{< /code-toggle >}}
 +
 +You can also specify simple redirects rules for the server. The syntax is again similar to Netlify's.
 +
 +Note that a `status` code of 200 will trigger a [URL rewrite](https://docs.netlify.com/routing/redirects/rewrites-proxies/), which is what you want in SPA situations, e.g:
 +
 +{{< code-toggle file="config/development/server">}}
 +[[redirects]]
 +from = "/myspa/**"
 +to = "/myspa/"
 +status = 200
 +force = false
 +{{< /code-toggle >}}
 +
 +Setting `force=true` will make a redirect even if there is existing content in the path. Note that before Hugo 0.76  `force` was the default behavior, but this is inline with how Netlify does it.
 +
- ## 404 Server Error Page
- {{< new-in "0.103.0" >}}
- Hugo will, by default, render all 404 errors when running `hugo server` with the `404.html` template. Note that if you have already added one or more redirects to your [Server Config](#server-config), you need to add the 404 redirect explicitly, e.g:
- ```toml
- [[redirects]]
-     from   = "/**"
-     to     = "/404.html"
-     status = 404
- ```
++## 404 Server Error Page {#_404-server-error-page}
 +
 +{{< new-in "0.103.0" >}}
 +
 +Hugo will, by default, render all 404 errors when running `hugo server` with the `404.html` template. Note that if you have already added one or more redirects to your [Server Config](#configure-server), you need to add the 404 redirect explicitly, e.g:
 +
 +```toml
 +[[redirects]]
 +    from   = "/**"
 +    to     = "/404.html"
 +    status = 404
 +```
 +
- Similar to the template [lookup order][], Hugo has a default set of rules for searching for a configuration file in the root of your website's source directory as a default behavior:
 +## Configure Title Case
 +
 +Set `titleCaseStyle` to specify the title style used by the [title](/functions/title/) template function and the automatic section titles in Hugo. It defaults to [AP Stylebook](https://www.apstylebook.com/) for title casing, but you can also set it to `Chicago` or `Go` (every word starts with a capital letter).
 +
 +## Configuration Environment Variables
 +
 +HUGO_NUMWORKERMULTIPLIER
 +: Can be set to increase or reduce the number of workers used in parallel processing in Hugo. If not set, the number of logical CPUs will be used.
 +
 +## Configuration Lookup Order
 +
- The following is a typical example of a configuration file. The values nested under `params:` will populate the [`.Site.Params`][] variable for use in [templates][]:
++Similar to the template [lookup order], Hugo has a default set of rules for searching for a configuration file in the root of your website's source directory as a default behavior:
 +
 +1. `./config.toml`
 +2. `./config.yaml`
 +3. `./config.json`
 +
 +In your `config` file, you can direct Hugo as to how you want your website rendered, control your website's menus, and arbitrarily define site-wide parameters specific to your project.
 +
 +
 +## Example Configuration
 +
- Hugo v0.20 introduced the ability to render your content to multiple output formats (e.g., to JSON, AMP html, or CSV). See [Output Formats][] for information on how to add these values to your Hugo project's configuration file.
++The following is a typical example of a configuration file. The values nested under `params:` will populate the [`.Site.Params`] variable for use in [templates]:
 +
 +{{< code-toggle file="config">}}
 +baseURL: "https://yoursite.example.com/"
 +title: "My Hugo Site"
 +permalinks:
 +  posts: /:year/:month/:title/
 +params:
 +  Subtitle: "Hugo is Absurdly Fast!"
 +  AuthorName: "Jon Doe"
 +  GitHubUser: "spf13"
 +  ListOfFoo:
 +    - "foo1"
 +    - "foo2"
 +  SidebarRecentLimit: 5
 +{{< /code-toggle >}}
 +
 +## Configure with Environment Variables
 +
 +In addition to the 3 config options already mentioned, configuration key-values can be defined through operating system environment variables.
 +
 +For example, the following command will effectively set a website's title on Unix-like systems:
 +
 +```txt
 +$ env HUGO_TITLE="Some Title" hugo
 +```
 +
 +This is really useful if you use a service such as Netlify to deploy your site. Look at the Hugo docs [Netlify configuration file](https://github.com/gohugoio/hugoDocs/blob/master/netlify.toml) for an example.
 +
 +{{% note "Setting Environment Variables" %}}
 +Names must be prefixed with `HUGO_` and the configuration key must be set in uppercase when setting operating system environment variables.
 +
 +To set config params, prefix the name with `HUGO_PARAMS_`
 +{{% /note %}}
 +
 +If you are using snake_cased variable names, the above will not work. Hugo determines the delimiter to use by the first character after `HUGO`. This allows you to define environment variables on the form `HUGOxPARAMSxAPI_KEY=abcdefgh`, using any [allowed](https://stackoverflow.com/questions/2821043/allowed-characters-in-linux-environment-variable-names#:~:text=So%20names%20may%20contain%20any,not%20begin%20with%20a%20digit.) delimiter.
 +
 +{{< todo >}}
 +Test and document setting params via JSON env var.
 +{{< /todo >}}
 +
 +## Ignore Content and Data Files when Rendering
 +
++**Note:** This works, but we recommend you use the newer and more powerful [includeFiles and excludeFiles](https://gohugo.io/hugo-modules/configuration/#module-config-mounts) mount options.
++
 +To exclude specific files from the `content` and `data` directories when rendering your site, set `ignoreFiles` to one or more regular expressions to match against the absolute file path.
 +
 +To ignore files ending with `.foo` or `.boo`:
 +
 +{{< code-toggle copy="false" >}}
 +ignoreFiles = ['\.foo$', '\.boo$']
 +{{< /code-toggle >}}
 +
 +To ignore a file using the absolute file path:
 +
 +{{< code-toggle copy="false" >}}
 +ignoreFiles = ['^/home/user/project/content/test\.md$']
 +{{< /code-toggle >}}
 +
 +## Configure Front Matter
 +
 +### Configure Dates
 +
 +Dates are important in Hugo, and you can configure how Hugo assigns dates to your content pages. You do this by adding a `frontmatter` section to your `config.toml`.
 +
 +The default configuration is:
 +
 +{{< code-toggle file="config" >}}
 +[frontmatter]
 +date = ["date", "publishDate", "lastmod"]
 +lastmod = [":git", "lastmod", "date", "publishDate"]
 +publishDate = ["publishDate", "date"]
 +expiryDate = ["expiryDate"]
 +{{< /code-toggle >}}
 +
 +If you, as an example, have a non-standard date parameter in some of your content, you can override the setting for `date`:
 +
 +{{< code-toggle file="config" >}}
 +[frontmatter]
 +date = ["myDate", ":default"]
 +{{< /code-toggle >}}
 +
 +The `:default` is a shortcut to the default settings. The above will set `.Date` to the date value in `myDate` if present, if not we will look in `date`,`publishDate`, `lastmod` and pick the first valid date.
 +
 +In the list to the right, values starting with ":" are date handlers with a special meaning (see below). The others are just names of date parameters (case insensitive) in your front matter configuration.  Also note that Hugo have some built-in aliases to the above: `lastmod` => `modified`, `publishDate` => `pubdate`, `published` and `expiryDate` => `unpublishdate`. With that, as an example, using `pubDate` as a date in front matter, will, by default, be assigned to `.PublishDate`.
 +
 +The special date handlers are:
 +
 +
 +`:fileModTime`
 +: Fetches the date from the content file's last modification timestamp.
 +
 +An example:
 +
 +{{< code-toggle file="config" >}}
 +[frontmatter]
 +lastmod = ["lastmod", ":fileModTime", ":default"]
 +{{< /code-toggle >}}
 +
 +
 +The above will try first to extract the value for `.Lastmod` starting with the `lastmod` front matter parameter, then the content file's modification timestamp. The last, `:default` should not be needed here, but Hugo will finally look for a valid date in `:git`, `date` and then `publishDate`.
 +
 +
 +`:filename`
 +: Fetches the date from the content file's filename. For example, `2018-02-22-mypage.md` will extract the date `2018-02-22`. Also, if `slug` is not set, `mypage` will be used as the value for `.Slug`.
 +
 +An example:
 +
 +{{< code-toggle file="config" >}}
 +[frontmatter]
 +date  = [":filename", ":default"]
 +{{< /code-toggle >}}
 +
 +The above will try first to extract the value for `.Date` from the filename, then it will look in front matter parameters `date`, `publishDate` and lastly `lastmod`.
 +
 +
 +`:git`
 +: This is the Git author date for the last revision of this content file. This will only be set if `--enableGitInfo` is set or `enableGitInfo = true` is set in site config.
 +
 +## Configure Additional Output Formats
 +
++Hugo v0.20 introduced the ability to render your content to multiple output formats (e.g., to JSON, AMP html, or CSV). See [Output Formats] for information on how to add these values to your Hugo project's configuration file.
 +
 +## Configure Minify
 +
 +Default configuration:
 +
 +{{< code-toggle config="minify" />}}
 +
 +## Configure File Caches
 +
 +Since Hugo 0.52 you can configure more than just the `cacheDir`. This is the default configuration:
 +
 +{{< code-toggle >}}
 +[caches]
 +[caches.getjson]
 +dir = ":cacheDir/:project"
 +maxAge = -1
 +[caches.getcsv]
 +dir = ":cacheDir/:project"
 +maxAge = -1
 +[caches.getresource]
 +dir = ":cacheDir/:project"
 +maxAge = -1
 +[caches.images]
 +dir = ":resourceDir/_gen"
 +maxAge = -1
 +[caches.assets]
 +dir = ":resourceDir/_gen"
 +maxAge = -1
 +[caches.modules]
 +dir = ":cacheDir/modules"
 +maxAge = -1
 +{{< /code-toggle >}}
 +
 +You can override any of these cache settings in your own `config.toml`.
 +
 +### The keywords explained
 +
 +`:cacheDir`
 +: This is the value of the `cacheDir` config option if set (can also be set via OS env variable `HUGO_CACHEDIR`). It will fall back to `/opt/build/cache/hugo_cache/` on Netlify, or a `hugo_cache` directory below the OS temp dir for the others. This means that if you run your builds on Netlify, all caches configured with `:cacheDir` will be saved and restored on the next build. For other CI vendors, please read their documentation. For an CircleCI example, see [this configuration](https://github.com/bep/hugo-sass-test/blob/6c3960a8f4b90e8938228688bc49bdcdd6b2d99e/.circleci/config.yml).
 +
 +`:project`
 +: The base directory name of the current Hugo project. This means that, in its default setting, every project will have separated file caches, which means that when you do `hugo --gc` you will not touch files related to other Hugo projects running on the same PC.
 +
 +`:resourceDir`
 +: This is the value of the `resourceDir` config option.
 +
 +maxAge
 +: This is the duration before a cache entry will be evicted, -1 means forever and 0 effectively turns that particular cache off. Uses Go's `time.Duration`, so valid values are `"10s"` (10 seconds), `"10m"` (10 minutes) and `"10h"` (10 hours).
 +
 +dir
 +: The absolute path to where the files for this cache will be stored. Allowed starting placeholders are `:cacheDir` and `:resourceDir` (see above).
 +
 +## Configuration Format Specs
 +
 +- [TOML Spec][toml]
 +- [YAML Spec][yaml]
 +- [JSON Spec][json]
 +
 +[`.Site.Params`]: /variables/site/
 +[directory structure]: /getting-started/directory-structure
 +[json]: https://www.ecma-international.org/publications/files/ECMA-ST/ECMA-404.pdf "Specification for JSON, JavaScript Object Notation"
 +[lookup order]: /templates/lookup-order/
 +[Output Formats]: /templates/output-formats/
 +[templates]: /templates/
 +[toml]: https://github.com/toml-lang/toml
 +[yaml]: https://yaml.org/spec/
 +[static-files]: /content-management/static-files/
index d9f16349899097edc499a0fdd6d36eec0247653a,0000000000000000000000000000000000000000..b8c22b1df95352024bf220b0bb94235be4c93a3a
mode 100644,000000..100644
--- /dev/null
@@@ -1,96 -1,0 +1,96 @@@
- By default, Hugo will create new content files with at least `date`, `title` (inferred from the filename), and `draft = true`. This saves time and promotes consistency for sites using multiple content types. You can create your own [archetypes][] with custom preconfigured front matter fields as well.
 +---
 +title: Directory Structure
 +linktitle: Directory Structure
 +description: Hugo's CLI scaffolds a project directory structure and then takes that single directory and uses it as the input to create a complete website.
 +date: 2017-01-02
 +publishdate: 2017-02-01
 +categories: [getting started,fundamentals]
 +keywords: [source, organization, directories]
 +menu:
 +  docs:
 +    parent: "getting-started"
 +    weight: 50
 +weight: 50
 +sections_weight: 50
 +aliases: [/overview/source-directory/]
 +toc: true
 +---
 +
 +## New Site Scaffolding
 +
 +{{< youtube sB0HLHjgQ7E >}}
 +
 +Running `hugo new site example` from the command line creates a directory structure with the following elements:
 +
 +```txt
 +example/
 +├── archetypes/
 +│   └── default.md
 +├── assets/
 +├── content/
 +├── data/
 +├── layouts/
 +├── public/
 +├── static/
 +├── themes/
 +└── config.toml
 +```
 +
 +## Directory Structure Explained
 +
 +The following is a high-level overview of each of the directories with links to each of their respective sections within the Hugo docs.
 +
 +[`archetypes`](/content-management/archetypes/)
 +: You can create new content files in Hugo using the `hugo new` command.
- [`assets`][]
++By default, Hugo will create new content files with at least `date`, `title` (inferred from the filename), and `draft = true`. This saves time and promotes consistency for sites using multiple content types. You can create your own [archetypes] with custom preconfigured front matter fields as well.
 +
- : Hugo ships with a large number of [configuration directives][].
++[`assets`]
 +: Stores all the files which need be processed by [Hugo Pipes](/hugo-pipes/). Only the files whose `.Permalink` or `.RelPermalink` are used will be published to the `public` directory.
 +
 +[`config`](/getting-started/configuration/)
- Many sites may need little to no configuration, but Hugo ships with a large number of [configuration directives][] for more granular directions on how you want Hugo to build your website. Note: config directory is not created by default.
++: Hugo ships with a large number of [configuration directives].
 +The [config directory](/getting-started/configuration/#configuration-directory) is where those directives are stored as JSON, YAML, or TOML files. Every root setting object can stand as its own file and structured by environments.
 +Projects with minimal settings and no need for environment awareness can use a single `config.toml` file at its root.
 +
- [`content`][]
- : All content for your website will live inside this directory. Each top-level folder in Hugo is considered a [content section][]. For example, if your site has three main sections---`blog`, `articles`, and `tutorials`---you will have three directories at `content/blog`, `content/articles`, and `content/tutorials`. Hugo uses sections to assign default [content types][].
++Many sites may need little to no configuration, but Hugo ships with a large number of [configuration directives] for more granular directions on how you want Hugo to build your website. Note: config directory is not created by default.
 +
- used by Hugo when generating your website. You can write these files in YAML, JSON, or TOML format. In addition to the files you add to this folder, you can also create [data templates][] that pull from dynamic content.
++[`content`]
++: All content for your website will live inside this directory. Each top-level folder in Hugo is considered a [content section]. For example, if your site has three main sections---`blog`, `articles`, and `tutorials`---you will have three directories at `content/blog`, `content/articles`, and `content/tutorials`. Hugo uses sections to assign default [content types].
 +
 +[`data`](/templates/data-templates/)
 +: This directory is used to store configuration files that can be
- [`layouts`][]
- : Stores templates in the form of `.html` files that specify how views of your content will be rendered into a static website. Templates include [list pages][lists], your [homepage][], [taxonomy templates][], [partials][], [single page templates][singles], and more.
++used by Hugo when generating your website. You can write these files in YAML, JSON, or TOML format. In addition to the files you add to this folder, you can also create [data templates] that pull from dynamic content.
 +
- [`static`][]
++[`layouts`]
++: Stores templates in the form of `.html` files that specify how views of your content will be rendered into a static website. Templates include [list pages][lists], your [homepage], [taxonomy templates], [partials], [single page templates][singles], and more.
 +
- [`resources`][]
++[`static`]
 +: Stores all the static content: images, CSS, JavaScript, etc. When Hugo builds your site, all assets inside your static directory are copied over as-is. A good example of using the `static` folder is for [verifying site ownership on Google Search Console][searchconsole], where you want Hugo to copy over a complete HTML file without modifying its content.
 +
 +{{% note %}}
 +From **Hugo 0.31** you can have multiple static directories.
 +{{% /note %}}
 +
++[`resources`]
 +: Caches some files to speed up generation. Can be also used by template authors to distribute built Sass files, so you don't have to have the preprocessor installed. Note: resources directory is not created by default.
 +
 +[archetypes]: /content-management/archetypes/
 +[`assets`]: /hugo-pipes/introduction#asset-directory/
 +[configuration directives]: /getting-started/configuration/#all-configuration-settings
 +[`content`]: /content-management/organization/
 +[content section]: /content-management/sections/
 +[content types]: /content-management/types/
 +[data templates]: /templates/data-templates/
 +[homepage]: /templates/homepage/
 +[`layouts`]: /templates/
 +[`static`]: /content-management/static-files/
 +[`resources`]: /getting-started/configuration/#configure-file-caches
 +[lists]: /templates/list/
 +[pagevars]: /variables/page/
 +[partials]: /templates/partials/
 +[searchconsole]: https://support.google.com/webmasters/answer/9008080#zippy=%2Chtml-file-upload
 +[singles]: /templates/single-page-templates/
 +[starters]: /tools/starter-kits/
 +[taxonomies]: /content-management/taxonomies/
 +[taxonomy templates]: /templates/taxonomy-templates/
 +[types]: /content-management/types/
index 8298000480d2ebe9a00d3db7e5fc6fff80863be1,0000000000000000000000000000000000000000..824d6030aabc629d5cd47739215b1eec56e8a22b
mode 100644,000000..100644
--- /dev/null
@@@ -1,216 -1,0 +1,219 @@@
- Run these commands[^1] to create a Hugo site with the [Ananke] theme. The next section provides an explanation of each command.
 +---
 +title: Quick Start
 +linktitle: Quick Start
 +description: Learn to create a Hugo site in minutes.
 +categories: [getting started]
 +keywords: [quick start,usage]
 +menu:
 +  docs:
 +    parent: getting-started
 +    weight: 10
 +weight: 10
 +toc: true
 +aliases: [/quickstart/,/overview/quickstart/]
 +---
 +
 +In this tutorial you will:
 +
 +1. Create a site
 +2. Add content
 +3. Configure the site
 +4. Publish the site
 +
 +## Prerequisites
 +
 +Before you begin this tutorial you must:
 +
 +1. [Install Hugo] (the extended edition)
 +1. [Install Git]
 +
 +You must also be comfortable working from the command line.
 +
 +## Create a site
 +
 +### Commands
 +
- [^1]: If you are a Windows user, you must run these commands with [PowerShell]. You cannot use Windows Powershell, which is a different application, or the Command Prompt.
++{{% note %}}
++If you are a Windows user, you must run these commands with [PowerShell]. You cannot use Windows Powershell, which is a different application, or the Command Prompt. You may also use a Linux shell if available.
 +
- [PowerShell]: https://learn.microsoft.com/en-us/powershell/scripting/install/installing-powershell-on-windows
++[PowerShell]: https://learn.microsoft.com/en-us/powershell/scripting/install/installing-powershell-on-windows
++{{% /note %}}
++
++Run these commands to create a Hugo site with the [Ananke] theme. The next section provides an explanation of each command.
 +
 +```text
 +hugo new site quickstart
 +cd quickstart
 +git init
 +git submodule add https://github.com/theNewDynamic/gohugo-theme-ananke themes/ananke
 +echo "theme = 'ananke'" >> config.toml
 +hugo server
 +```
 +
 +View your site at the URL displayed in your terminal. Press `Ctrl + C` to stop Hugo's development server.
 +
 +### Explanation of commands
 +
 +Create the [directory structure] for your project in the `quickstart` directory.
 +
 +```text
 +hugo new site quickstart
 +```
 +
 +Change the current directory to the root of your project.
 +
 +```text
 +cd quickstart
 +```
 +
 +Initialize an empty Git repository in the current directory.
 +
 +```text
 +git init
 +```
 +
 +Clone the [Ananke] theme into the `themes` directory, adding it to your project as a [Git submodule].
 +
 +```text
 +git submodule add https://github.com/theNewDynamic/gohugo-theme-ananke themes/ananke
 +```
 +
 +Append a line to the site configuration file, indicating the current theme.
 +
 +```text
 +echo "theme = 'ananke'" >> config.toml
 +```
 +
 +Start Hugo's development server to view the site.
 +
 +```text
 +hugo server
 +```
 +
 +Press `Ctrl + C` to stop Hugo's development server.
 +
 +## Add content
 +
 +Add a new page to your site.
 +
 +```text
 +hugo new posts/my-first-post.md
 +```
 +
 +Hugo created the file in the `content/posts` directory. Open the file with your editor.
 +
 +```text
 +---
 +title: "My First Post"
 +date: 2022-11-20T09:03:20-08:00
 +draft: true
 +---
 +```
 +
 +Notice the `draft` value in the [front matter] is `true`. By default, Hugo does not publish draft content when you build the site. Learn more about [draft, future, and expired content].
 +
 +Add some [markdown] to the body of the post, but do not change the `draft` value.
 +
 +[markdown]: https://commonmark.org/help/
 +
 +```text
 +---
 +title: "My First Post"
 +date: 2022-11-20T09:03:20-08:00
 +draft: true
 +---
 +## Introduction
 +
 +This is **bold** text, and this is *emphasized* text.
 +
 +Visit the [Hugo](https://gohugo.io) website!
 +```
 +
 +Save the file, then start Hugo’s development server to view the site. You can run either of the following commands to include draft content.
 +
 +```text
 +hugo server --buildDrafts
 +hugo server -D
 +```
 +
 +View your site at the URL displayed in your terminal. Keep the development server running as you continue to add and change content.
 +
 +{{% note %}}
 +Hugo's rendering engine conforms to the CommonMark [specification] for markdown. The CommonMark organization provides a useful [live testing tool] powered by the reference implementation.
 +
 +[live testing tool]: https://spec.commonmark.org/dingus/
 +[specification]: https://spec.commonmark.org/
 +{{% /note %}}
 +
 +## Configure the site
 +
 +With your editor, open the [site configuration] file (`config.toml`) in the root of your project.
 +
 +```text
 +baseURL = 'http://example.org/'
 +languageCode = 'en-us'
 +title = 'My New Hugo Site'
 +theme = 'ananke'
 +```
 +
 +Make the following changes:
 +
 +1. Set the `baseURL` for your production site. This value must begin with the protocol and end with a slash, as shown above.
 +
 +2. Set the `languageCode` to your language and region.
 +
 +3. Set the `title` for your production site.
 +
 +Start Hugo's development server to see your changes, remembering to include draft content.
 +
 +```text
 +hugo server -D
 +```
 +
 +{{% note %}}
 +Most theme authors provide configuration guidelines and options. Make sure to visit your theme's repository or documentation site for details.
 +
 +[The New Dynamic], authors of the Ananke theme, provide [documentation] for configuration and usage. They also provide a [demonstration site].
 +
 +[demonstration site]: https://gohugo-ananke-theme-demo.netlify.app/
 +[documentation]: https://github.com/theNewDynamic/gohugo-theme-ananke#readme
 +[The New Dynamic]: https://www.thenewdynamic.com/
 +{{% /note %}}
 +
 +## Publish the site
 +
 +In this step you will _publish_ your site, but you will not _deploy_ it.
 +
 +When you _publish_ your site, Hugo creates the entire static site in the `public` directory in the root of your project. This includes the HTML files, and assets such as images, CSS files, and JavaScript files.
 +
 +When you publish your site, you typically do _not_ want to include [draft, future, or expired content]. The command is simple.
 +
 +```text
 +hugo
 +```
 +
 +To learn how to _deploy_ your site, see the [hosting and deployment] section.
 +
 +## Ask for help
 +
 +Hugo's [forum] is an active community of users and developers who answer questions, share knowledge, and provide examples. A quick search of over 20,000 topics will often answer your question. Please be sure to read about [requesting help] before asking your first question.
 +
 +## Other resources
 +
 +For other resources to help you learn Hugo, including books and video tutorials, see the [external learning resources](/getting-started/external-learning-resources/) page.
 +
 +[Ananke]: https://github.com/theNewDynamic/gohugo-theme-ananke
 +[directory structure]: /getting-started/directory-structure
 +[draft, future, and expired content]: /getting-started/usage/#draft-future-and-expired-content
 +[draft, future, or expired content]: /getting-started/usage/#draft-future-and-expired-content
 +[external learning resources]:/getting-started/external-learning-resources/
 +[forum]: https://discourse.gohugo.io/
 +[forum]: https://discourse.gohugo.io/
 +[front matter]: /content-management/front-matter
 +[Git submodule]: https://git-scm.com/book/en/v2/Git-Tools-Submodules
 +[hosting and deployment]: /hosting-and-deployment/
 +[Install Git]: https://git-scm.com/book/en/v2/Getting-Started-Installing-Git
 +[Install Hugo]: /installation/
 +[Requesting Help]: https://discourse.gohugo.io/t/requesting-help/9132
 +[Requesting Help]: https://discourse.gohugo.io/t/requesting-help/9132
 +[site configuration]: /getting-started/configuration/
index 1eed59122253b876b7c71bd4cf185b33ff57e5ca,0000000000000000000000000000000000000000..803a73e4683087bd6c29873cd70713b91ff51883
mode 100644,000000..100644
--- /dev/null
@@@ -1,54 -1,0 +1,54 @@@
- * You have completed the [Quick Start][] or have a Hugo website you are ready to deploy and share with the world.
 +---
 +title: Host on AWS Amplify
 +linktitle: Host on AWS Amplify
 +description: Develop and deploy a cloud-powered web app with AWS Amplify.
 +date: 2018-01-31
 +publishdate: 2018-01-31
 +categories: [hosting and deployment]
 +keywords: [amplify,hosting,deployment]
 +authors: [Nikhil Swaminathan]
 +menu:
 +  docs:
 +    parent: "hosting-and-deployment"
 +    weight: 10
 +weight: 10
 +sections_weight: 10
 +aliases: []
 +toc: true
 +---
 +
 +In this guide we'll walk through how to deploy and host your Hugo site using the [AWS Amplify Console](https://console.amplify.aws).
 +
 +AWS Amplify is a combination of client library, CLI toolchain, and a Console for continuous deployment and hosting. The Amplify CLI and library allow developers to get up & running with full-stack cloud-powered applications with features like authentication, storage, serverless GraphQL or REST APIs, analytics, Lambda functions, & more. The Amplify Console provides continuous deployment and hosting for modern web apps (single page apps and static site generators). Continuous deployment allows developers to deploy updates to their web app on every code commit to their Git repository. Hosting includes features such as globally available CDNs, easy custom domain setup + HTTPS, feature branch deployments, and password protection.
 +
 +## Pre-requisites
 +
 +* [Sign up for an AWS Account](https://portal.aws.amazon.com/billing/signup?redirect_url=https%3A%2F%2Faws.amazon.com%2Fregistration-confirmation). There are no upfront charges or any term commitments to create an AWS account and signing up gives you immediate access to the AWS Free Tier.
 +* You have an account with GitHub, GitLab, or Bitbucket.
++* You have completed the [Quick Start] or have a Hugo website you are ready to deploy and share with the world.
 +
 +## Hosting
 +
 +1. Log in to the [AWS Amplify Console](https://console.aws.amazon.com/amplify/home) and choose Get Started under Deploy.
 +   ![Hugo Amplify](/images/hosting-and-deployment/hosting-on-aws-amplify/amplify-gettingstarted.png)
 +
 +1. Connect a branch from your GitHub, Bitbucket, GitLab, or AWS CodeCommit repository. Connecting your repository allows Amplify to deploy updates on every code commit to a branch.
 +   ![Hugo Amplify](/images/hosting-and-deployment/hosting-on-aws-amplify/amplify-connect-repo.gif)
 +
 +1. Accept the default build settings. The Amplify Console automatically detects your Hugo build settings and output directory.
 +   ![Hugo Amplify](/images/hosting-and-deployment/hosting-on-aws-amplify/amplify-build-settings.png)
 +
 +1. Review your changes and then choose **Save and deploy**. The Amplify Console will pull code from your repository, build changes to the backend and frontend, and deploy your build artifacts at `https://master.unique-id.amplifyapp.com`. Bonus: Screenshots of your app on different devices to find layout issues.
 +
 +## Using a newer version of Hugo
 +
 +If you need to use a different, perhaps newer, version of Hugo than the version currently supported by AWS Amplify:
 +
 +1. Visit the [AWS Amplify Console](https://console.aws.amazon.com/amplify/home), and click the app you would like to modify
 +1. In the side navigation bar, Under App Settings, click **Build settings**
 +1. On the Build settings page, near the bottom, there is a section called **Build image settings**. Click **Edit**
 +1. Under **Live package updates**, click **Add package version override**
 +1. From the selection, click **Hugo** and ensure the version field says `latest`
 +1. Click **Save** to save the changes.
 +
 +[Quick Start]: /getting-started/quick-start/
index f63c0153cfbf4346dec4a00cd51cf9e2f0c3fdb0,0000000000000000000000000000000000000000..fd48ac9ad6a08c2db5cd32844834b82862d57c29
mode 100644,000000..100644
--- /dev/null
@@@ -1,101 -1,0 +1,101 @@@
- 4. You have a ready-to-publish Hugo website or have at least completed the [Quick Start][].
 +---
 +title: Host on Azure Static Web Apps
 +linktitle: Host on Azure Static Web Apps
 +description: Deploy Hugo to Azure Static Web Apps and automate the whole process with Github Action Workflow
 +date: 2021-03-12
 +publishdate: 2021-03-12
 +categories: [hosting and deployment]
 +keywords: [azure,git,deployment,hosting]
 +authors: [Aaron Powell]
 +menu:
 +  docs:
 +    parent: "hosting-and-deployment"
 +    weight: 10
 +weight: 10
 +sections_weight: 10
 +toc: true
 +---
 +
 +[Azure Static Web Apps] is a service that automatically builds and deploys full stack web apps to Azure from a Git repository, using [GitHub Actions] or [Azure DevOps].
 +
 +_The following documentation covers how to use GitHub Actions for the deployment. If you are using Azure DevOps, follow the Microsoft documentation._
 +
 +## Assumptions
 +
 +1. You have Git 2.8 or greater [installed on your machine][installgit].
 +2. You have a GitHub account. [Signing up][ghsignup] for GitHub is free.
 +3. You have an Azure account. You can sign up for a [Free Trail][azuretrial].
++4. You have a ready-to-publish Hugo website or have at least completed the [Quick Start].
 +
 +## Deploy Hugo to Azure Static Web Apps
 +
 +1. Navigate to the [Azure Portal][azureportal]
 +2. Click **Create a Resource**
 +3. Search for **Static Web Apps**
 +4. Click **Static Web Apps**
 +5. Click **Create**
 +
 +![Create in Azure Portal](/images/hosting-and-deployment/hosting-on-azure/create-in-portal.png)
 +
 +6. For **Subscription**, accept the subscription that is listed or select a new one from the drop-down list.
 +7. In _Resource group_, select **New**. In _New resource group name_, enter **hugo-static-app** and select **OK**.
 +8. Next, a name for your app in the **Name** box. Valid characters include `a-z`, `A-Z`, `0-9` and `-`.
 +9. For _Region_, select an available region close to you.
 +10. For _SKU_, select **Free**.
 +
 +![Basic app details](/images/hosting-and-deployment/hosting-on-azure/basic-app-details.png)
 +
 +11. Click the **Sign in with GitHub** button.
 +12. Select the **Organization** under which your repo exists.
 +13. Select the Hugo app you wish to deploy as the _Repository_ .
 +14. For the _Branch_ select the branch you want to deploy (eg: **main**).
 +15. Select **Hugo** under the _Build Presets_, which will populate the configuration files with the standard Hugo build options
 +  * **App Location** is the path in the Git repo where Hugo's config file is
 +  * **Api Location** is the path where the Serverless API is (or left blank if there is no API)
 +  * **Artifact Location** is the path where Hugo publishes to
 +16. Click **Review + Create** to review the details and then **Create** to start the creation of the Azure Static Web Apps and create the GitHub Action workflow for deployment.
 +
 +A GitHub Action workflow will immediately start a build using Hugo and deployment to Azure. The website can be accessed via the URL shown on the _Overview_ page of the Azure Static Web Apps resource in Azure.
 +
 +## Using A Custom Hugo Version
 +
 +When you create a Static Web App, a [workflow file][swaconfig] is generated which contains the deployment settings for the site. You can configure a specific Hugo version in the workflow file by providing a value for `HUGO_VERSION` in the `env` section of the `Azure/static-web-apps-deploy` GitHub Action.
 +
 +```yaml
 +jobs:
 +  build_and_deploy_job:
 +    if: github.event_name == 'push' || (github.event_name == 'pull_request' && github.event.action != 'closed')
 +    runs-on: ubuntu-latest
 +    name: Build and Deploy Job
 +    steps:
 +      - uses: actions/checkout@v3
 +        with:
 +          submodules: true
 +      - name: Build And Deploy
 +        id: builddeploy
 +        uses: Azure/static-web-apps-deploy@v1
 +        with:
 +          azure_static_web_apps_api_token: ${{ secrets.AZURE_STATIC_WEB_APPS_API_TOKEN }}
 +          repo_token: ${{ secrets.GITHUB_TOKEN }}
 +          action: "upload"
 +          app_location: "/" # App source code path
 +          api_location: "api" # Api source code path - optional
 +          output_location: "public" # Built app content directory - optional
 +        env:
 +          HUGO_VERSION: 0.100.2
 +```
 +
 +## Use a Custom Domain
 +
 +Azure Static Web Apps supports custom domains as a CNAME or APEX domain mapping. You can configure the custom domains via the Azure Portal. Refer to the [official documentation for custom domains][domains] for more information.
 +
 +[Azure Static Web Apps]: https://docs.microsoft.com/azure/static-web-apps/?WT.mc_id=javascript-26008-aapowell
 +[GitHub Actions]: https://docs.github.com/en/actions
 +[Azure DevOps]: https://docs.microsoft.com/azure/static-web-apps/publish-devops?WT.mc_id=javascript-26008-aapowell
 +[ghsignup]: https://github.com/join
 +[installgit]: https://git-scm.com/downloads
 +[azuretrial]: https://azure.microsoft.com/free/?WT.mc_id=javascript-26008-aapowell
 +[azureportal]: https://portal.azure.com/
 +[swaconfig]: https://docs.microsoft.com/azure/static-web-apps/github-actions-workflow?WT.mc_id=javascript-26008-aapowell
 +[domains]: https://docs.microsoft.com/azure/static-web-apps/custom-domain?WT.mc_id=javascript-26008-aapowell
 +[Quick Start]: /getting-started/quick-start/
index fe6cca1e1cbaaf576c16262751d4bc79da5741de,0000000000000000000000000000000000000000..4e31f1cd0afed0186fc035aa25a5852defd1d501
mode 100644,000000..100644
--- /dev/null
@@@ -1,119 -1,0 +1,119 @@@
- 2. You have completed the [Quick Start][] or have a completed Hugo website ready for deployment.
 +---
 +title: Host on Firebase
 +linktitle: Host on Firebase
 +description: You can use Firebase's free tier to host your static website; this also gives you access to Firebase's NOSQL API.
 +date: 2017-03-12
 +publishdate: 2017-03-12
 +categories: [hosting and deployment]
 +keywords: [hosting,firebase]
 +authors: [Michel Racic]
 +menu:
 +  docs:
 +    parent: "hosting-and-deployment"
 +    weight: 20
 +weight: 20
 +sections_weight: 20
 +toc: true
 +aliases: []
 +---
 +
 +## Assumptions
 +
 +1. You have an account with [Firebase][signup]. (If you don't, you can sign up for free using your Google account.)
- Firebase script with retrive credentials, create a service account you can later manage in yout github settings.
++2. You have completed the [Quick Start] or have a completed Hugo website ready for deployment.
 +
 +## Initial setup
 +
 +Go to the [Firebase console][console] and create a new project (unless you already have a project). You will need to globally install `firebase-tools` (node.js):
 +
 +```txt
 +npm install -g firebase-tools
 +```
 +
 +Log in to Firebase (setup on your local machine) using `firebase login`, which opens a browser where you can select your account. Use `firebase logout` in case you are already logged in but to the wrong account.
 +
 +
 +```txt
 +firebase login
 +```
 +
 +In the root of your Hugo project, initialize the Firebase project with the `firebase init` command:
 +
 +```txt
 +firebase init
 +```
 +
 +From here:
 +
 +1. Choose Hosting in the feature question
 +2. Choose the project you just set up
 +3. Accept the default for your database rules file
 +4. Accept the default for the publish directory, which is `public`
 +5. Choose "No" in the question if you are deploying a single-page app
 +
 +## Using Firebase & Github CI/CD
 +
 +In new versions of Firebase, some other questions apply:
 +
 +6. Set up automatic builds and deploys with GitHub? 
 +
 +Here you will be redirected to login in your GitHub account to get permissions. Confirm.
 +
 +7. For which GitHub repository would you like to set up a GitHub workflow? (format: user/repository) 
 +
 +Include the repository you will use in the format above (Account/Repo)
- Here is your oportunity to include some commands before you run the deploy.
++Firebase script with retrive credentials, create a service account you can later manage in your github settings.
 +
 +8. Set up the workflow to run a build script before every deploy? 
 +
- With this you will have the app initialized manualy. After that you can manage and fix your github workflow from: https://github.com/your-account/yout-repo/actions
++Here is your opportunity to include some commands before you run the deploy.
 +
 +9. Set up automatic deployment to your site's live channel when a PR is merged? 
 +
 +You can let in the default option (main)
 +
 +After that Firebase has been set in your project with CI/CD. After that run:
 +
 +```
 +hugo && firebase deploy
 +```
 +
++With this you will have the app initialized manually. After that you can manage and fix your github workflow from: https://github.com/your-account/yout-repo/actions
 +
 +Don't forget to update your static pages before push!
 +
 +## Manual Deploy
 +
 +To deploy your Hugo site, execute the `firebase deploy` command, and your site will be up in no time:
 +
 +```txt
 +hugo && firebase deploy
 +```
 +
 +## CI Setup (Other tools)
 +
 +You can generate a deploy token using
 +
 +```txt
 +firebase login:ci
 +```
 +
 +You can also set up your CI and add the token to a private variable like `$FIREBASE_DEPLOY_TOKEN`.
 +
 +{{% note %}}
 +This is a private secret and it should not appear in a public repository. Make sure you understand your chosen CI and that it's not visible to others.
 +{{% /note %}}
 +
 +You can then add a step in your build to do the deployment using the token:
 +
 +```txt
 +firebase deploy --token $FIREBASE_DEPLOY_TOKEN
 +```
 +
 +## Reference links
 +
 +* [Firebase CLI Reference](https://firebase.google.com/docs/cli/#administrative_commands)
 +
 +[console]: https://console.firebase.google.com/
 +[Quick Start]: /getting-started/quick-start/
 +[signup]: https://console.firebase.google.com/
index 35550ed99c940e906e3c1e1d42c8c596ad5c0ee5,0000000000000000000000000000000000000000..76de0f3a58c12c3e81d958c4d00b1ca6e5f54d45
mode 100644,000000..100644
--- /dev/null
@@@ -1,118 -1,0 +1,118 @@@
- GitHub provides free and fast static hosting over SSL for personal, organization, or project pages directly from a GitHub repository via its [GitHub Pages service][] and automating development workflows and build with [GitHub Actions].
 +---
 +title: Host on GitHub
 +linktitle: Host on GitHub
 +description: Deploy Hugo as a GitHub Pages project or personal/organizational site and automate the whole process with Github Action Workflow
 +date: 2014-03-21
 +publishdate: 2014-03-21
 +categories: [hosting and deployment]
 +keywords: [github,git,deployment,hosting]
 +authors: [Spencer Lyon, Gunnar Morling]
 +menu:
 +  docs:
 +    parent: "hosting-and-deployment"
 +    weight: 30
 +weight: 30
 +sections_weight: 30
 +toc: true
 +aliases: [/tutorials/github-pages-blog/]
 +---
 +
- 3. You have a ready-to-publish Hugo website or have at least completed the [Quick Start][].
++GitHub provides free and fast static hosting over SSL for personal, organization, or project pages directly from a GitHub repository via its [GitHub Pages service] and automating development workflows and build with [GitHub Actions].
 +
 +## Assumptions
 +
 +1. You have Git 2.8 or greater [installed on your machine][installgit].
 +2. You have a GitHub account. [Signing up][ghsignup] for GitHub is free.
++3. You have a ready-to-publish Hugo website or have at least completed the [Quick Start].
 +
 +## Types of GitHub Pages
 +
 +There are two types of GitHub Pages:
 +
 +- User/Organization Pages (`https://<USERNAME|ORGANIZATION>.github.io/`)
 +- Project Pages (`https://<USERNAME|ORGANIZATION>.github.io/<PROJECT>/`)
 +
 +Please refer to the [GitHub Pages documentation][ghorgs] to decide which type of site you would like to create as it will determine which of the below methods to use.
 +
 +## Branches for GitHub Actions
 +
 +The GitHub Actions used in these instructions pull source content from the `main` branch and then commit the generated content to the `gh-pages` branch. This applies regardless of what type of GitHub Pages you are using. This is a clean setup as your Hugo files are stored in one branch and your generated files are published into a separate branch.
 +
 +## GitHub User or Organization Pages
 +
 +As mentioned in the [GitHub Pages documentation][ghorgs], you can host a user/organization page in addition to project pages. Here are the key differences in GitHub Pages websites for Users and Organizations:
 +
 +1. You must create a repository named `<USERNAME>.github.io` or `<ORGANIZATION>.github.io` to host your pages
 +2. By default, content from the `main` branch is used to publish GitHub Pages - rather than the `gh-pages` branch which is the default for project sites. However, the GitHub Actions in these instructions publish to the `gh-pages` branch. Therefore, if you are publishing GitHub pages for a user or organization, you will need to change the publishing branch to `gh-pages`. See the instructions later in this document.
 +
 +## Build Hugo With GitHub Action
 +
 +GitHub executes your software development workflows. Every time you push your code on the GitHub repository, GitHub Actions will build the site automatically.
 +
 +Create a file in `.github/workflows/gh-pages.yml` containing the following content (based on [actions-hugo](https://github.com/marketplace/actions/hugo-setup)):
 +
 +```yml
 +name: github pages
 +
 +on:
 +  push:
 +    branches:
 +      - main  # Set a branch that will trigger a deployment
 +  pull_request:
 +
 +jobs:
 +  deploy:
 +    runs-on: ubuntu-22.04
 +    steps:
 +      - uses: actions/checkout@v3
 +        with:
 +          submodules: true  # Fetch Hugo themes (true OR recursive)
 +          fetch-depth: 0    # Fetch all history for .GitInfo and .Lastmod
 +
 +      - name: Setup Hugo
 +        uses: peaceiris/actions-hugo@v2
 +        with:
 +          hugo-version: 'latest'
 +          # extended: true
 +
 +      - name: Build
 +        run: hugo --minify
 +
 +      - name: Deploy
 +        uses: peaceiris/actions-gh-pages@v3
 +        if: github.ref == 'refs/heads/main'
 +        with:
 +          github_token: ${{ secrets.GITHUB_TOKEN }}
 +          publish_dir: ./public
 +```
 +
 +For more advanced settings [actions-hugo](https://github.com/marketplace/actions/hugo-setup) and [actions-gh-pages](https://github.com/marketplace/actions/github-pages-action).
 +
 +## GitHub pages setting
 +
 +By default, the GitHub action pushes the generated content to the `gh-pages` branch. This means GitHub has to serve your `gh-pages` branch as a GitHub Pages branch. You can change this setting by going to Settings > GitHub Pages, and change the source branch to `gh-pages`.
 +
 +## Change baseURL in config.toml
 +
 +Don't forget to rename your `baseURL` in `config.toml` with the value `https://<USERNAME>.github.io` for your user repository or `https://<USERNAME>.github.io/<REPOSITORY_NAME>` for a project repository.
 +
 +Unless this is present in your `config.toml`, your website won't work.
 +
 +## Use a Custom Domain
 +
 +If you'd like to use a custom domain for your GitHub Pages site, create a file `static/CNAME`. Your custom domain name should be the only contents inside `CNAME`. Since it's inside `static`, the published site will contain the CNAME file at the root of the published site, which is a requirement of GitHub Pages.
 +
 +Refer to the [official documentation for custom domains][domains] for further information.
 +
 +[config]: /getting-started/configuration/
 +[domains]: https://help.github.com/articles/using-a-custom-domain-with-github-pages/
 +[ghorgs]: https://help.github.com/articles/user-organization-and-project-pages/#user--organization-pages
 +[ghpfromdocs]: https://help.github.com/articles/configuring-a-publishing-source-for-github-pages/
 +[ghsignup]: https://github.com/join
 +[GitHub Pages service]: https://help.github.com/articles/what-is-github-pages/
 +[installgit]: https://git-scm.com/downloads
 +[orphan branch]: https://git-scm.com/docs/git-checkout/#Documentation/git-checkout.txt---orphanltnewbranchgt
 +[Quick Start]: /getting-started/quick-start/
 +[submodule]: https://github.com/blog/2104-working-with-submodules
 +[worktree feature]: https://git-scm.com/docs/git-worktree
 +[GitHub Actions]: https://docs.github.com/en/actions
index 5267956559b2f1fb160844a9c2ab3b6e4f204040,0000000000000000000000000000000000000000..7aa9283f8c802adec703c45394b9f4c8701bba13
mode 100644,000000..100644
--- /dev/null
@@@ -1,156 -1,0 +1,156 @@@
- * You have completed the [Quick Start][] or have a Hugo website you are ready to deploy and share with the world.
 +---
 +title: Host on Netlify
 +linktitle: Host on Netlify
 +description: Netlify can host your Hugo site with CDN, continuous deployment, 1-click HTTPS, an admin GUI, and its own CLI.
 +date: 2017-02-01
 +publishdate: 2017-02-01
 +categories: [hosting and deployment]
 +keywords: [netlify,hosting,deployment]
 +authors: [Ryan Watters, Seth MacLeod]
 +menu:
 +  docs:
 +    parent: "hosting-and-deployment"
 +    weight: 10
 +weight: 10
 +sections_weight: 10
 +aliases: []
 +toc: true
 +---
 +
 +[Netlify][netlify] provides continuous deployment services, global CDN, ultra-fast DNS, atomic deploys, instant cache invalidation, one-click SSL, a browser-based interface, a CLI, and many other features for managing your Hugo website.
 +
 +## Assumptions
 +
 +* You have an account with GitHub, GitLab, or Bitbucket.
- Go to [app.netlify.com][] and select your preferred signup method. This will likely be a hosted Git provider, although you also have the option to sign up with an email address.
++* You have completed the [Quick Start] or have a Hugo website you are ready to deploy and share with the world.
 +* You do not already have a Netlify account.
 +
 +## Create a Netlify account
 +
- Once selected, you'll be brought to a screen for basic setup. Here you can select the branch you want to publish, your [build command][], and your publish (i.e. deploy) directory. The publish directory should mirror that of what you've set in your [site configuration][config], the default of which is `public`. The following steps assume you are publishing from the `master` branch.
++Go to [app.netlify.com] and select your preferred signup method. This will likely be a hosted Git provider, although you also have the option to sign up with an email address.
 +
 +The following examples use GitHub, but other git providers will follow a similar process.
 +
 +![Screenshot of the homepage for app.netlify.com, containing links to the most popular hosted git solutions.](/images/hosting-and-deployment/hosting-on-netlify/netlify-signup.jpg)
 +
 +Selecting GitHub will bring up an authorization modal for authentication. Select "Authorize application."
 +
 +![Screenshot of the authorization popup for Netlify and GitHub.](/images/hosting-and-deployment/hosting-on-netlify/netlify-first-authorize.jpg)
 +
 +## Create a new site with continuous deployment
 +
 +You're now already a Netlify member and should be brought to your new dashboard. Select "New site from git."
 +
 +![Screenshot of the blank Netlify admin panel with no sites and highlighted 'add new site' button'](/images/hosting-and-deployment/hosting-on-netlify/netlify-add-new-site.jpg)
 +
 +Netlify will then start walking you through the steps necessary for continuous deployment. First, you'll need to select your git provider again, but this time you are giving Netlify added permissions to your repositories.
 +
 +![Screenshot of step 1 of create a new site for Netlify: selecting the git provider](/images/hosting-and-deployment/hosting-on-netlify/netlify-create-new-site-step-1.jpg)
 +
 +And then again with the GitHub authorization modal:
 +
 +![Screenshot of step 1 of create a new site for Netlify: selecting the git provider](/images/hosting-and-deployment/hosting-on-netlify/netlify-authorize-added-permissions.jpg)
 +
 +Select the repo you want to use for continuous deployment. If you have a large number of repositories, you can filter through them in real time using repo search:
 +
 +![Screenshot of step 1 of create a new site for Netlify: selecting the git provider](/images/hosting-and-deployment/hosting-on-netlify/netlify-create-new-site-step-2.jpg)
 +
- 1. [Using a Custom Domain][]
++Once selected, you'll be brought to a screen for basic setup. Here you can select the branch you want to publish, your [build command], and your publish (i.e. deploy) directory. The publish directory should mirror that of what you've set in your [site configuration][config], the default of which is `public`. The following steps assume you are publishing from the `master` branch.
 +
 +## Configure Hugo version in Netlify
 +
 +You can [set Hugo version](https://www.netlify.com/blog/2017/04/11/netlify-plus-hugo-0.20-and-beyond/) for your environments in `netlify.toml` file or set `HUGO_VERSION` as a build environment variable in the Netlify console.
 +
 +For production:
 +
 +{{< code file="netlify.toml" codeLang="toml" >}}
 +[context.production.environment]
 +  HUGO_VERSION = "0.99.1"
 +{{< /code >}}
 +
 +For testing:
 +
 +{{< code file="netlify.toml" codeLang="toml" >}}
 +[context.deploy-preview.environment]
 +  HUGO_VERSION = "0.99.1"
 +{{< /code >}}
 +
 +The Netlify configuration file can be a little hard to understand and get right for the different environment, and you may get some inspiration and tips from this site's `netlify.toml`:
 +
 +{{< code file="netlify.toml" nocode="true" >}}
 +{{< readfile file="netlify.toml" highlight="toml" >}}
 +{{< /code >}}
 +
 +## Build and Deploy Site
 +
 +In the Netlify console, selecting "Deploy site" will immediately take you to a terminal for your build:.
 +
 +![Animated gif of deploying a site to Netlify, including the terminal read out for the build.](/images/hosting-and-deployment/hosting-on-netlify/netlify-deploying-site.gif)
 +
 +Once the build is finished---this should only take a few seconds--you should now see a "Hero Card" at the top of your screen letting you know the deployment is successful. The Hero Card is the first element that you see in most pages. It allows you to see a quick summary of the page and gives access to the most common/pertinent actions and information. You'll see that the URL is automatically generated by Netlify. You can update the URL in "Settings."
 +
 +![Screenshot of successful deploy badge at the top of a deployments screen from within the Netlify admin.](/images/hosting-and-deployment/hosting-on-netlify/netlify-deploy-published.jpg)
 +
 +![Screenshot of homepage to https://hugo-netlify-example.netlify.com, which is mostly dummy text](/images/hosting-and-deployment/hosting-on-netlify/netlify-live-site.jpg)
 +
 +[Visit the live site][visit].
 +
 +Now every time you push changes to your hosted git repository, Netlify will rebuild and redeploy your site.
 +
 +See [this blog post](https://www.netlify.com/blog/2017/04/11/netlify-plus-hugo-0.20-and-beyond/) for more details about how Netlify handles Hugo versions.
 +
 +## Use Hugo Themes with Netlify
 +
 +The [`git clone` method for installing themes][installthemes] is not supported by Netlify. If you were to use `git clone`, it would require you to recursively remove the `.git` subdirectory from the theme folder and would therefore prevent compatibility with future versions of the theme.
 +
 +A *better* approach is to install a theme as a proper git submodule. You can [read the GitHub documentation for submodules][ghsm] or those found on [Git's website][gitsm] for more information, but the command is similar to that of `git clone`:
 +
 +```txt
 +cd themes
 +git submodule add https://github.com/<THEMECREATOR>/<THEMENAME>
 +```
 +
 +It is recommended to only use stable versions of a theme (if it’s versioned) and always check the changelog. This can be done by checking out a specific release within the theme's directory.
 +
 +Switch to the theme's directory and list all available versions:
 +
 +```txt
 +cd themes/<theme>
 +git tag
 +# exit with q
 +```
 +
 +You can checkout a specific version as follows:
 +
 +```txt
 +git checkout tags/<version-name>
 +```
 +
 +You can update a theme to the latest version by executing the following command in the *root* directory of your project:
 +
 +```txt
 +git submodule update --rebase --remote
 +```
 +
 +## Next Steps
 +
 +You now have a live website served over HTTPS, distributed through CDN, and configured for continuous deployment. Dig deeper into the Netlify documentation:
 +
- 3. [Redirects and Rewrite Rules][]
++1. [Using a Custom Domain]
 +2. [Setting up HTTPS on Custom Domains][httpscustom]
++3. [Redirects and Rewrite Rules]
 +
 +[app.netlify.com]: https://app.netlify.com
 +[build command]: /getting-started/usage/#the-hugo-command
 +[config]: /getting-started/configuration/
 +[ghsm]: https://github.com/blog/2104-working-with-submodules
 +[gitsm]: https://git-scm.com/book/en/v2/Git-Tools-Submodules
 +[httpscustom]: https://www.netlify.com/docs/ssl/
 +[hugoversions]: https://github.com/netlify/build-image/blob/master/Dockerfile#L216
 +[installthemes]: /themes/installing/
 +[netlify]: https://www.netlify.com/
 +[netlifysignup]: https://app.netlify.com/signup
 +[Quick Start]: /getting-started/quick-start/
 +[Redirects and Rewrite Rules]: https://www.netlify.com/docs/redirects/
 +[Using a Custom Domain]: https://www.netlify.com/docs/custom-domains/
 +[visit]: https://hugo-netlify-example.netlify.com
index 40cb2c32e8f75b5cc00c9349350058c25e4db857,0000000000000000000000000000000000000000..f099f2168835e4c4528437afe2534e7d4335f186
mode 100644,000000..100644
--- /dev/null
@@@ -1,90 -1,0 +1,90 @@@
- - You have completed the [Quick Start][] or have a Hugo website you are ready to deploy and share with the world.
 +---
 +title: Host on Render
 +linktitle: Host on Render
 +description: Host your Hugo site for free with Render's global CDN, fully-managed SSL and auto deploys from GitHub.
 +date: 2019-06-06
 +publishdate: 2019-06-06
 +categories: [hosting and deployment]
 +keywords: [hosting,deployment]
 +authors: [Anurag Goel]
 +menu:
 +  docs:
 +    parent: "hosting-and-deployment"
 +    weight: 10
 +weight: 10
 +sections_weight: 10
 +draft: false
 +aliases: []
 +toc: true
 +---
 +
 +## Introduction
 +
 +[Render](https://render.com) is a fully-managed cloud platform where you can host static sites, backend APIs, databases, cron jobs, and all your other apps in one place.
 +
 +Static sites are **completely free** on Render and include the following:
 +
 +- Continuous, automatic builds & deploys from [GitHub](https://render.com/docs/github) and [GitLab](https://render.com/docs/gitlab).
 +- Automatic SSL certificates through [Let's Encrypt](https://letsencrypt.org).
 +- Instant cache invalidation with a lightning fast, global CDN.
 +- Unlimited collaborators.
 +- Unlimited [custom domains](https://render.com/docs/custom-domains).
 +- Automatic [Brotli compression](https://en.wikipedia.org/wiki/Brotli) for faster sites.
 +- Native HTTP/2 support.
 +- [Pull Request Previews](https://render.com/docs/pull-request-previews).
 +- Automatic HTTP → HTTPS redirects.
 +- Custom URL redirects and rewrites.
 +
 +## Assumptions
 +
 +- You have an account with GitHub or GitLab.
++- You have completed the [Quick Start] or have a Hugo website you are ready to deploy and share with the world.
 +- You have a Render account. You can sign up at https://render.com/register.
 +
 +## Deployment
 +
 +You can set up a Hugo site on Render in two quick steps:
 +
 +1. Create a new **Static Site** on Render, and give Render permission to access your GitHub/Gitlab repo.
 +2. Use the following values during creation:
 +
 +  Field                | Value
 +  -------------------  |  -------------------
 + **Build Command**     | `hugo --gc --minify` (or your own build command)
 + **Publish Directory** | `public` (or your own output directory)
 +
 +That's it! Your site will be live on your Render URL (which looks like `yoursite.onrender.com`) as soon as the build is done.
 +
 +## Continuous Deploys
 +
 +Now that Render is connected to your repo, it will **automatically build and publish your site** any time you push to your GitHub/Gitlab.
 +
 +You can choose to disable auto deploys under the **Settings** section for your site and deploy it manually from the Render dashboard.
 +
 +## CDN and Cache Invalidation
 +
 +Render hosts your site on a global, lightning fast CDN which ensures the fastest possible download times for all your users across the globe.
 +
 +Every deploy automatically and instantly invalidates the CDN cache, so your users can always access the latest content on your site.
 +
 +## Custom Domains
 +
 +Add your own domains to your site easily using Render's [custom domains](https://render.com/docs/custom-domains) guide.
 +
 +## Pull Request Previews
 +
 +With Pull Request (PR) previews, you can visualize changes introduced in a pull request instead of simply relying on code reviews.
 +
 +Once enabled, every PR for your site will automatically generate a new static site based on the code in the PR. It will have its own URL, and it will be deleted automatically when the PR is closed.
 +
 +Read more about [Pull Request Previews](https://render.com/docs/pull-request-previews) on Render.
 +
 +## Hugo Themes
 +
 +Render automatically downloads all Git submodules defined in your Git repo on every build. This way Hugo themes added as submodules work as expected.
 +
 +## Support
 +
 +Chat with Render developers at https://render.com/chat or email `support@render.com` if you need help.
 +
 +[Quick Start]: /getting-started/quick-start/
index da7f77c6100ea20d235255136d1672aa18ed5103,0000000000000000000000000000000000000000..02a23fe121be821e8b1c74994ac9f8d25b8921c9
mode 100644,000000..100644
--- /dev/null
@@@ -1,143 -1,0 +1,142 @@@
- * You have completed the [Quick Start][] or have a Hugo website you are ready to deploy and share with the world.
 +---
 +title: Hugo Deploy
 +linktitle: Hugo Deploy
 +description: You can upload your site to GCS, S3, or Azure using the Hugo CLI.
 +date: 2019-05-30
 +publishdate: 2019-05-30
 +lastmod: 2021-05-03
 +categories: [hosting and deployment]
 +keywords: [s3,gcs,azure,hosting,deployment]
 +authors: [Robert van Gent]
 +menu:
 +  docs:
 +    parent: "hosting-and-deployment"
 +    weight: 2
 +weight: 2
 +sections_weight: 2
 +draft: false
 +aliases: []
 +toc: true
 +---
 +
 +You can use the "hugo deploy" command to upload your site directly to a Google Cloud Storage (GCS) bucket, an AWS S3 bucket, and/or an Azure Storage container.
 +
 +## Assumptions
 +
++* You have completed the [Quick Start] or have a Hugo website you are ready to deploy and share with the world.
 +* You have an account with the service provider ([Google Cloud](https://cloud.google.com/), [AWS](https://aws.amazon.com), or [Azure](https://azure.microsoft.com)) that you want to deploy to.
 +* You have authenticated.
 +  * Google Cloud: [Install the CLI](https://cloud.google.com/sdk) and run [`gcloud auth login`](https://cloud.google.com/sdk/gcloud/reference/auth/login).
 +  * AWS: [Install the CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-install.html) and run [`aws configure`](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html).
 +  * Azure: [Install the CLI](https://docs.microsoft.com/en-us/cli/azure/install-azure-cli) and run [`az login`](https://docs.microsoft.com/en-us/cli/azure/authenticate-azure-cli).
 +  * NOTE: Each service supports alternatives for authentication, including using environment variables. See [here](https://gocloud.dev/howto/blob/#services) for more details.
 +
 +## Create a bucket to deploy to
 +
 +Create a storage bucket to deploy your site to. If you want your site to be
 +public, be sure to configure the bucket to be publicly readable.
 +
 +### Google Cloud Storage (GCS)
 +
 +Follow the [GCS instructions for how to create a bucket](https://cloud.google.com/storage/docs/creating-buckets).
 +
 +### AWS S3
 +
 +Follow the [AWS instructions for how to create a bucket](https://docs.aws.amazon.com/AmazonS3/latest/gsg/CreatingABucket.html).
 +
 +### Azure Storage
 +
 +Follow the [Azure instructions for how to create a storage container](https://docs.microsoft.com/en-us/azure/storage/blobs/storage-quickstart-blobs-portal).
 +
 +## Configure the deployment
 +
 +In the configuration file for your site, add a `[deployment]` section with one
 +or more `[[deployment.targets]]` section, one for each deployment target. Here's
 +a detailed example:
 +
 +```toml
 +[deployment]
 +# By default, files are uploaded in an arbitrary order.
 +# Files that match the regular expressions in the "Order" list
 +# will be uploaded first, in the listed order.
 +order = [".jpg$", ".gif$"]
 +
 +
 +[[deployment.targets]]
 +# An arbitrary name for this target.
 +name = "mydeployment"
 +# The Go Cloud Development Kit URL to deploy to. Examples:
 +# GCS; see https://gocloud.dev/howto/blob/#gcs
 +# URL = "gs://<Bucket Name>"
 +
 +# S3; see https://gocloud.dev/howto/blob/#s3
 +# For S3-compatible endpoints, see https://gocloud.dev/howto/blob/#s3-compatible
 +# URL = "s3://<Bucket Name>?region=<AWS region>"
 +
 +# Azure Blob Storage; see https://gocloud.dev/howto/blob/#azure
 +# URL = "azblob://$web"
 +
 +# You can use a "prefix=" query parameter to target a subfolder of the bucket:
 +# URL = "gs://<Bucket Name>?prefix=a/subfolder/"
 +
 +# If you are using a CloudFront CDN, deploy will invalidate the cache as needed.
 +cloudFrontDistributionID = <ID>
 +
 +# Optionally, you can include or exclude specific files.
 +# See https://godoc.org/github.com/gobwas/glob#Glob for the glob pattern syntax.
 +# If non-empty, the pattern is matched against the local path.
 +# All paths are matched against in their filepath.ToSlash form.
 +# If exclude is non-empty, and a local or remote file's path matches it, that file is not synced.
 +# If include is non-empty, and a local or remote file's path does not match it, that file is not synced.
 +# As a result, local files that don't pass the include/exclude filters are not uploaded to remote,
 +# and remote files that don't pass the include/exclude filters are not deleted.
 +# include = "**.html" # would only include files with ".html" suffix
 +# exclude = "**.{jpg, png}" # would exclude files with ".jpg" or ".png" suffix
 +
 +
 +# [[deployment.matchers]] configure behavior for files that match the Pattern.
 +# See https://golang.org/pkg/regexp/syntax/ for pattern syntax.
 +# Pattern searching is stopped on first match.
 +
 +# Samples:
 +
 +[[deployment.matchers]]
 +# Cache static assets for 1 year.
 +pattern = "^.+\\.(js|css|svg|ttf)$"
 +cacheControl = "max-age=31536000, no-transform, public"
 +gzip = true
 +
 +[[deployment.matchers]]
 +pattern = "^.+\\.(png|jpg)$"
 +cacheControl = "max-age=31536000, no-transform, public"
 +gzip = false
 +
 +[[deployment.matchers]]
 +# Set custom content type for /sitemap.xml
 +pattern = "^sitemap\\.xml$"
 +contentType = "application/xml"
 +gzip = true
 +
 +[[deployment.matchers]]
 +pattern = "^.+\\.(html|xml|json)$"
 +gzip = true
 +```
 +
 +## Deploy
 +
 +To deploy to a target:
 +
 +```bash
 +hugo deploy [--target=<target name>, defaults to first target]
 +```
 +
 +Hugo will identify and apply any local changes that need to be reflected to the
 +remote target. You can use `--dryRun` to see the changes without applying them,
 +or `--confirm` to be prompted before making changes.
 +
 +See `hugo help deploy` for more command-line options.
 +
 +[Quick Start]: /getting-started/quick-start/
 +[Google Cloud]: [https://cloud.google.com]
 +[AWS]: [https://aws.amazon.com]
 +[Azure]: [https://azure.microsoft.com]
index c78b4249b2f8c7b85b8505b8129552896bdf415a,0000000000000000000000000000000000000000..5b01e98e960052eacf21101623b94accd92d16fd
mode 100644,000000..100644
--- /dev/null
@@@ -1,49 -1,0 +1,49 @@@
- For any given file, data entry, etc., Hugo will look first in the project and then in `my-shortcode`, `base-theme`, and lastly `hyde`.
 +---
 +title: Theme Components
 +linktitle: Theme Components
 +description: Hugo provides advanced theming support with Theme Components.
 +date: 2017-02-01
 +categories: [hugo modules]
 +keywords: [themes, theme, source, organization, directories]
 +menu:
 +  docs:
 +    parent: "modules"
 +    weight: 50
 +weight: 50
 +sections_weight: 50
 +draft: false
 +aliases: [/themes/customize/,/themes/customizing/]
 +toc: true
 +---
 +
 +{{% note %}}
 +This section contain information that may be outdated and is in the process of being rewritten.
 +{{% /note %}}
 +Since Hugo `0.42` a project can configure a theme as a composite of as many theme components you need:
 +
 +{{< code-toggle file="config">}}
 +theme = ["my-shortcodes", "base-theme", "hyde"]
 +{{< /code-toggle >}}
 +
 +You can even nest this, and have the theme component itself include theme components in its own `config.toml` (theme inheritance).[^1]
 +
 +The theme definition example above in `config.toml` creates a theme with 3 theme components with precedence from left to right.
 +
++For any given file, data entry, etc., Hugo will look first in the project and then in `my-shortcodes`, `base-theme`, and lastly `hyde`.
 +
 +Hugo uses two different algorithms to merge the filesystems, depending on the file type:
 +
 +* For `i18n` and `data` files, Hugo merges deeply using the translation ID and data key inside the files.
 +* For `static`, `layouts` (templates), and `archetypes` files, these are merged on file level. So the left-most file will be chosen.
 +
 +The name used in the `theme` definition above must match a folder in `/your-site/themes`, e.g. `/your-site/themes/my-shortcodes`. There are plans to improve on this and get a URL scheme so this can be resolved automatically.
 +
 +Also note that a component that is part of a theme can have its own configuration file, e.g. `config.toml`. There are currently some restrictions to what a theme component can configure:
 +
 +* `params` (global and per language)
 +* `menu` (global and per language)
 +* `outputformats` and `mediatypes`
 +
 +The same rules apply here: The left-most param/menu etc. with the same ID will win. There are some hidden and experimental namespace support in the above, which we will work to improve in the future, but theme authors are encouraged to create their own namespaces to avoid naming conflicts.
 +
 +[^1]: For themes hosted on the [Hugo Themes Showcase](https://themes.gohugo.io/) components need to be added as git submodules that point to the directory `exampleSite/themes`
index b87dc4595828a1713e294bbbf27b5585c5ed6d6e,0000000000000000000000000000000000000000..caf575c177e315ea3263126d4ad7743d9c987202
mode 100755,000000..100755
--- /dev/null
@@@ -1,83 -1,0 +1,80 @@@
- date: 2018-07-14
- publishdate: 2018-07-14
 +---
 +title: PostCSS
 +description: Hugo Pipes can process CSS files with PostCSS.
- sections_weight: 40
 +categories: [asset management]
 +keywords: []
 +menu:
 +  docs:
 +    parent: "pipes"
 +    weight: 40
 +weight: 40
- {{% note %}}
- Hugo Pipe's PostCSS requires the `postcss-cli` JavaScript package to be installed in the environment (`npm install -g postcss postcss-cli`) along with any PostCSS plugin(s) used (e.g., `npm install -g autoprefixer`).
 +---
 +
 +Any asset file can be processed using `resources.PostCSS` which takes for argument the resource object and a slice of options listed below.
 +
 +The resource will be processed using the project's or theme's own `postcss.config.js` or any file set with the `config` option.
 +
 +```go-html-template
 +{{ $css := resources.Get "css/main.css" }}
 +{{ $style := $css | resources.PostCSS }}
 +```
 +
- If you are using the Hugo Snap package, PostCSS and plugin(s) need to be installed locally within your Hugo site directory, e.g., `npm install postcss-cli` without the `-g` flag.
- {{% /note %}}
++You must install the required Node.js packages to use the PostCSS feature. For example, to use the `autoprefixer` package, run these commands from the root of your project:
 +
++```text
++npm install postcss postcss-cli autoprefixer
++```
 +
 +### Options
 +
 +config [string]
 +: Set a custom directory to look for a config file
 +
 +noMap [bool]
 +: Default is `false`. Disable the default inline sourcemaps
 +
 +inlineImports [bool]
 +: Default is `false`. Enable inlining of @import statements. It does so recursively, but will only import a file once.
 +URL imports (e.g. `@import url('https://fonts.googleapis.com/css?family=Open+Sans&display=swap');`) and imports with media queries will be ignored.
 +Note that this import routine does not care about the CSS spec, so you can have @import anywhere in the file.
 +Hugo will look for imports relative to the module mount and will respect theme overrides.
 +
 +skipInlineImportsNotFound [bool] {{< new-in "0.99.0" >}}
 +: Default is `false`. Before Hugo 0.99.0 when `inlineImports` was enabled and we failed to resolve an import, we logged it as a warning. We now fail the build. If you have regular CSS imports in your CSS that you want to preserve, you can either use imports with URL or media queries (Hugo does not try to resolve those) or set `skipInlineImportsNotFound` to true.
 +
 +_If no configuration file is used:_
 +
 +use [string]
 +: Space-delimited list of PostCSS plugins to use
 +
 +parser [string]
 +: Custom PostCSS parser
 +
 +stringifier [string]
 +: Custom PostCSS stringifier
 +
 +syntax [string]
 +: Custom postcss syntax
 +
 +```go-html-template
 +{{ $options := dict "config" "/path/to/custom-config-directory" "noMap" true }}
 +{{ $style := resources.Get "css/main.css" | resources.PostCSS $options }}
 +
 +{{ $options := dict "use" "autoprefixer postcss-color-alpha" }}
 +{{ $style := resources.Get "css/main.css" | resources.PostCSS $options }}
 +```
 +
 +## Check Hugo Environment from postcss.config.js
 +
 +The current Hugo environment name (set by `--environment` or in config or OS environment) is available in the Node context, which allows constructs like this:
 +
 +```js
 +module.exports = {
 +  plugins: [
 +    require('autoprefixer'),
 +    ...process.env.HUGO_ENVIRONMENT === 'production'
 +      ? [purgecss]
 +      : []
 +  ]
 +}
 +```
index f17b640852b305b02cb0bf8a1f07967e077c4386,0000000000000000000000000000000000000000..2728e91cbf1b245083926fdcb787222d9c8ad2b1
mode 100644,000000..100644
--- /dev/null
@@@ -1,79 -1,0 +1,75 @@@
- {{% readfile file="/installation/common/04-docker.md" %}}
 +---
 +title: BSD
 +linkTitle: BSD
 +description: Install Hugo on BSD derivatives.
 +categories: [installation]
 +menu:
 +  docs:
 +    parent: installation
 +    weight: 50
 +toc: true
 +weight: 50
 +---
 +{{% readfile file="/installation/common/01-editions.md" %}}
 +
 +{{% readfile file="/installation/common/02-prerequisites.md" %}}
 +
 +{{% readfile file="/installation/common/03-prebuilt-binaries.md" %}}
 +
 +## Repository packages
 +
 +Most BSD derivatives maintain a repository for commonly installed applications. Please note that these repositories may not contain the [latest release].
 +
 +[latest release]: https://github.com/gohugoio/hugo/releases/latest
 +
 +### DragonFly BSD
 +
 +[DragonFly BSD] includes Hugo in its package repository. This will install the extended edition of Hugo:
 +
 +```sh
 +sudo pkg install gohugo
 +```
 +
 +[DragonFly BSD]: https://www.dragonflybsd.org/
 +
 +### FreeBSD
 +
 +[FreeBSD] includes Hugo in its package repository. This will install the extended edition of Hugo:
 +
 +```sh
 +sudo pkg install gohugo
 +```
 +
 +[FreeBSD]: https://www.freebsd.org/
 +
 +### NetBSD
 +
 +[NetBSD] includes Hugo in its package repository. This will install the extended edition of Hugo:
 +
 +```sh
 +sudo pkgin install go-hugo
 +```
 +
 +[NetBSD]: https://www.netbsd.org/
 +
 +### OpenBSD
 +
 +[OpenBSD] includes Hugo in its package repository. This will prompt you to select which edition of Hugo to install:
 +
 +```sh
 +doas pkg_add hugo
 +```
 +
 +[OpenBSD]: https://www.openbsd.org/
 +
- ||Prebuilt binaries|Repository packages|Docker|Build from source
- :--|:--:|:--:|:--:|:--:
- Easy to install?|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|
- Easy to upgrade?|:heavy_check_mark:|varies|:heavy_check_mark:|:heavy_check_mark:
- Easy to downgrade?|:heavy_check_mark:|varies|:heavy_check_mark:|:heavy_check_mark:
- Automatic updates?|:x:|varies|:x: [^1]|:x:
- Latest version available?|:heavy_check_mark:|varies|:heavy_check_mark:|:heavy_check_mark:
- [^1]: Possible but requires advanced configuration.
 +{{% readfile file="/installation/common/05-build-from-source.md" %}}
 +
 +## Comparison
 +
++||Prebuilt binaries|Repository packages|Build from source
++:--|:--:|:--:|:--:
++Easy to install?|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:
++Easy to upgrade?|:heavy_check_mark:|varies|:heavy_check_mark:
++Easy to downgrade?|:heavy_check_mark:|varies|:heavy_check_mark:
++Automatic updates?|:x:|varies|:x:
++Latest version available?|:heavy_check_mark:|varies|:heavy_check_mark:
index 2aeb604384bb87fa88093dd8602e0363a2f0bcc5,0000000000000000000000000000000000000000..5e5e454fb9d11d99842462d4c7946cfd8060ad41
mode 100644,000000..100644
--- /dev/null
@@@ -1,87 -1,0 +1,87 @@@
- Note that the examples were rendered and tested in [CST][] and pull from a single example date you might have in your content's front matter:
 +Go templates [format your dates][time] according to a single reference time:
 +
 +```txt
 +Mon Jan 2 15:04:05 MST 2006
 +```
 +
 +You can think of `MST` as `07`, thus making the reference format string a sequence of numbers. The following is [taken directly from the Go docs][gdex]:
 +
 +```txt
 +Jan 2 15:04:05 2006 MST
 +  1 2  3  4  5    6  -7
 +```
 +
 +### Hugo Date Templating Reference
 +
 +Each of the following examples show the reference formatting string followed by the string Hugo will output in your HTML.
 +
++Note that the examples were rendered and tested in [CST] and pull from a single example date you might have in your content's front matter:
 +
 +```yml
 +date: 2017-03-03T14:15:59-06:00
 +```
 +
 +`.Date` (i.e. called via [page variable][pagevars])
 +: **Returns**: `2017-03-03 14:15:59 -0600 CST`
 +
 +`"Monday, January 2, 2006"`
 +: **Returns**: `Friday, March 3, 2017`
 +
 +`"Mon Jan 2 2006"`
 +: **Returns**: `Fri Mar 3 2017`
 +
 +`"January 2nd"`
 +: **Returns**: `March 3rd`
 +
 +`"January 2006"`
 +: **Returns**: `March 2017`
 +
 +`"2006-01-02"`
 +: **Returns**: `2017-03-03`
 +
 +`"Monday"`
 +: **Returns**: `Friday`
 +
 +`"02 Jan 06 15:04 MST"` (RFC822)
 +: **Returns**: `03 Mar 17 14:15 CST`
 +
 +`"02 Jan 06 15:04 -0700"` (RFC822Z)
 +: **Returns**: `03 Mar 17 14:15 -0600`
 +
 +`"Mon, 02 Jan 2006 15:04:05 MST"` (RFC1123)
 +: **Returns**: `Fri, 03 Mar 2017 14:15:59 CST`
 +
 +`"Mon, 02 Jan 2006 15:04:05 -0700"` (RFC339)
 +: **Returns**: `Fri, 03 Mar 2017 14:15:59 -0600`
 +
 +### Cardinal Numbers and Ordinal Abbreviations
 +
 +Spelled-out cardinal numbers (e.g. "one", "two", and "three") and ordinal abbreviations (e.g. "1st", "2nd", and "3rd") are not currently supported.
 +
 +To continue with the example above:
 +
 +```go-html-template
 +{{.Date.Format "Jan 2nd 2006"}}
 +```
 +
 +Hugo assumes you want to append `nd` as a string to the day of the month and outputs the following:
 +
 +```txt
 +Mar 3nd 2017
 +```
 +
 +### Use `.Local` and `.UTC`
 +
 +In conjunction with the [`dateFormat` function][dateFormat], you can also convert your dates to `UTC` or to local timezones:
 +
 +`{{ dateFormat "02 Jan 06 15:04 MST" .Date.UTC }}`
 +: **Returns**: `03 Mar 17 20:15 UTC`
 +
 +`{{ dateFormat "02 Jan 06 15:04 MST" .Date.Local }}`
 +: **Returns**: `03 Mar 17 14:15 CST`
 +
 +[CST]: https://en.wikipedia.org/wiki/Central_Time_Zone
 +[dateFormat]: /functions/dateformat/
 +[gdex]: https://golang.org/pkg/time/#example_Time_Format
 +[pagevars]: /variables/page/
 +[time]: https://golang.org/pkg/time/
index 1be4e93ebbffae6d6605ab807eb4d14b7b02c2f4,0000000000000000000000000000000000000000..1586d3a54e232fc828bfe487e7364bc9fdbf8583
mode 100644,000000..100644
--- /dev/null
@@@ -1,263 -1,0 +1,273 @@@
- Hugo supports loading data from YAML, JSON, XML, and TOML files located in the `data` directory in the root of your Hugo project.
 +---
 +title: Data Templates
 +linktitle:
 +description: In addition to Hugo's built-in variables, you can specify your own custom data in templates or shortcodes that pull from both local and dynamic sources.
 +date: 2017-02-01
 +publishdate: 2017-02-01
 +categories: [templates]
 +keywords: [data,dynamic,csv,json,toml,yaml,xml]
 +menu:
 +  docs:
 +    parent: "templates"
 +    weight: 80
 +weight: 80
 +sections_weight: 80
 +aliases: [/extras/datafiles/,/extras/datadrivencontent/,/doc/datafiles/]
 +toc: true
 +---
 +
 +<!-- begin data files -->
 +
- The `data` folder is where you can store additional data for Hugo to use when generating your site. Data files aren't used to generate standalone pages; rather, they're meant to be supplemental to content files. This feature can extend the content in case your front matter fields grow out of control. Or perhaps you want to show a larger dataset in a template (see example below). In both cases, it's a good idea to outsource the data in their own files.
++Hugo supports loading data from YAML, JSON, XML, and TOML files located in the `data` directory at the root of your Hugo project.
 +
 +{{< youtube FyPgSuwIMWQ >}}
 +
 +## The Data Folder
 +
- If you wish to access the data using the `.Site.Data.filename` notation, the filename must begin with an underscore or a Unicode letter, followed by zero or more underscores, Unicode letters, or Unicode digits. eg:
++The `data` folder should store additional data for Hugo to use when generating your site. 
++
++Data files are not for generating standalone pages. They should supplement content files by:
++
++- extending the content when the front matter fields grow out of control, or
++- showing a larger dataset in a template (see the example below).
++
++In both cases, it's a good idea to outsource the data in their (own) files.
 +
 +These files must be YAML, JSON, XML, or TOML files (using the `.yml`, `.yaml`, `.json`, `.xml`, or `.toml` extension). The data will be accessible as a `map` in the `.Site.Data` variable.
 +
- If you wish to access the data using the [`index`](/functions/index-function/) function, the filename is irrelevant. For example:
++To access the data using the `site.Data.filename` notation, the filename must begin with an underscore or a Unicode letter, followed by zero or more underscores, Unicode letters, or Unicode digits. For example:
 +
 +- `123.json` - Invalid
 +- `x123.json` - Valid
 +- `_123.json` - Valid
 +
- Data Files can also be used in [Hugo themes][themes] but note that theme data files are merged with the project directory taking precedence (i.e., given two files with the same name and relative path, the data in the file in the root project `data` directory will override the data from the file in the `themes/<THEME>/data` directory *for keys that are duplicated*).
++To access the data using the [`index`](/functions/index-function/) function, the filename is irrelevant. For example:
++
 +Data file|Template code
 +:--|:--
 +`123.json`|`{{ index .Site.Data "123" }}`
 +`x123.json`|`{{ index .Site.Data "x123" }}`
 +`_123.json`|`{{ index .Site.Data "_123" }}`
 +`x-123.json`|`{{ index .Site.Data "x-123" }}`
 +
 +## Data Files in Themes
 +
- Therefore, theme authors should take care to not include data files that could be easily overwritten by a user who decides to [customize a theme][customize]. For theme-specific data items that shouldn't be overridden, it can be wise to prefix the folder structure with a namespace; e.g. `mytheme/data/<THEME>/somekey/...`. To check if any such duplicate exists, run hugo with the `-v` flag.
++Data Files can also be used in [Hugo themes][themes].
++
++However, note that the theme data files are merged with the project directory taking precedence. That is, Given two files with the same name and relative path, the data in the file in the root project `data` directory will override the data from the file in the `themes/<THEME>/data` directory *for keys that are duplicated*).
 +
- The keys in the map created with data templates from data files will be a dot-chained set of `path`, `filename`, and `key` in file (if applicable).
++Therefore, theme authors should be careful not to include data files that could be easily overwritten by a user who decides to [customize a theme][customize]. For theme-specific data items that shouldn't be overridden, it can be wise to prefix the folder structure with a namespace; e.g. `mytheme/data/<THEME>/somekey/...`. To check if any such duplicate exists, run hugo with the `-v` flag.
 +
- Currently, you can only use those authentication methods that can be put into an URL. [OAuth][] and other authentication methods are not implemented.
++The keys in the map created with data templates from data files will be a dot-chained set of `path`, `filename`, and `key` in the file (if applicable).
 +
 +This is best explained with an example:
 +
 +## Example: Jaco Pastorius' Solo Discography
 +
 +[Jaco Pastorius](https://en.wikipedia.org/wiki/Jaco_Pastorius_discography) was a great bass player, but his solo discography is short enough to use as an example. [John Patitucci](https://en.wikipedia.org/wiki/John_Patitucci) is another bass giant.
 +
 +The example below is a bit contrived, but it illustrates the flexibility of data Files. This example uses TOML as its file format with the two following data files:
 +
 +* `data/jazz/bass/jacopastorius.toml`
 +* `data/jazz/bass/johnpatitucci.toml`
 +
 +`jacopastorius.toml` contains the content below. `johnpatitucci.toml` contains a similar list:
 +
 +{{< code-toggle file="jacopastorius" >}}
 +discography = [
 +"1974 - Modern American Music … Period! The Criteria Sessions",
 +"1974 - Jaco",
 +"1976 - Jaco Pastorius",
 +"1981 - Word of Mouth",
 +"1981 - The Birthday Concert (released in 1995)",
 +"1982 - Twins I & II (released in 1999)",
 +"1983 - Invitation",
 +"1986 - Broadway Blues (released in 1998)",
 +"1986 - Honestly Solo Live (released in 1990)",
 +"1986 - Live In Italy (released in 1991)",
 +"1986 - Heavy'n Jazz (released in 1992)",
 +"1991 - Live In New York City, Volumes 1-7.",
 +"1999 - Rare Collection (compilation)",
 +"2003 - Punk Jazz: The Jaco Pastorius Anthology (compilation)",
 +"2007 - The Essential Jaco Pastorius (compilation)"
 +]
 +{{< /code-toggle >}}
 +
 +The list of bass players can be accessed via `.Site.Data.jazz.bass`, a single bass player by adding the filename without the suffix, e.g. `.Site.Data.jazz.bass.jacopastorius`.
 +
 +You can now render the list of recordings for all the bass players in a template:
 +
 +```go-html-template
 +{{ range $.Site.Data.jazz.bass }}
 +   {{ partial "artist.html" . }}
 +{{ end }}
 +```
 +
 +And then in the `partials/artist.html`:
 +
 +```go-html-template
 +<ul>
 +{{ range .discography }}
 +  <li>{{ . }}</li>
 +{{ end }}
 +</ul>
 +```
 +
 +Discover a new favorite bass player? Just add another `.toml` file in the same directory.
 +
 +## Example: Accessing Named Values in a Data File
 +
 +Assume you have the following data structure in your `User0123.[yml|toml|xml|json]` data file located directly in `data/`:
 +
 +{{< code-toggle file="User0123" >}}
 +Name: User0123
 +"Short Description": "He is a **jolly good** fellow."
 +Achievements:
 +  - "Can create a Key, Value list from Data File"
 +  - "Learns Hugo"
 +  - "Reads documentation"
 +{{</ code-toggle >}}
 +
 +You can use the following code to render the `Short Description` in your layout:
 +
 +```go-html-template
 +<div>Short Description of {{.Site.Data.User0123.Name}}: <p>{{ index .Site.Data.User0123 "Short Description" | markdownify }}</p></div>
 +```
 +
 +Note the use of the [`markdownify` template function][markdownify]. This will send the description through the Markdown rendering engine.
 +
 +
 +## Get Remote Data
 +
 +Use `getJSON` or `getCSV` to get remote data:
 +
 +```go-html-template
 +{{ $dataJ := getJSON "url" }}
 +{{ $dataC := getCSV "separator" "url" }}
 +```
 +
 +If you use a prefix or postfix for the URL, the functions accept [variadic arguments][variadic]:
 +
 +```go-html-template
 +{{ $dataJ := getJSON "url prefix" "arg1" "arg2" "arg n" }}
 +{{ $dataC := getCSV  "separator" "url prefix" "arg1" "arg2" "arg n" }}
 +```
 +
 +The separator for `getCSV` must be put in the first position and can only be one character long.
 +
 +All passed arguments will be joined to the final URL:
 +
 +```go-html-template
 +{{ $urlPre := "https://api.github.com" }}
 +{{ $gistJ := getJSON $urlPre "/users/GITHUB_USERNAME/gists" }}
 +```
 +
 +This will resolve internally to the following:
 +
 +```go-html-template
 +{{ $gistJ := getJSON "https://api.github.com/users/GITHUB_USERNAME/gists" }}
 +```
 +
 +### Add HTTP headers
 +
 +Both `getJSON` and `getCSV` takes an optional map as the last argument, e.g.:
 +
 +```go-html-template
 +{{ $data := getJSON "https://example.org/api" (dict "Authorization" "Bearer abcd")  }}
 +```
 +
 +If you need multiple values for the same header key, use a slice:
 +
 +```go-html-template
 +{{ $data := getJSON "https://example.org/api" (dict "X-List" (slice "a" "b" "c"))  }}
 +```
 +
 +### Example for CSV files
 +
 +For `getCSV`, the one-character-long separator must be placed in the first position followed by the URL. The following is an example of creating an HTML table in a [partial template][partials] from a published CSV:
 +
 +{{< code file="layouts/partials/get-csv.html" >}}
 +  <table>
 +    <thead>
 +      <tr>
 +      <th>Name</th>
 +      <th>Position</th>
 +      <th>Salary</th>
 +      </tr>
 +    </thead>
 +    <tbody>
 +    {{ $url := "https://example.com/finance/employee-salaries.csv" }}
 +    {{ $sep := "," }}
 +    {{ range $i, $r := getCSV $sep $url }}
 +      <tr>
 +        <td>{{ index $r 0 }}</td>
 +        <td>{{ index $r 1 }}</td>
 +        <td>{{ index $r 2 }}</td>
 +      </tr>
 +    {{ end }}
 +    </tbody>
 +  </table>
 +{{< /code >}}
 +
 +The expression `{{index $r number}}` must be used to output the nth-column from the current row.
 +
 +### Cache URLs
 +
 +Each downloaded URL will be cached in the default folder `$TMPDIR/hugo_cache/`. The variable `$TMPDIR` will be resolved to your system-dependent temporary directory.
 +
 +With the command-line flag `--cacheDir`, you can specify any folder on your system as a caching directory.
 +
 +You can also set `cacheDir` in the [main configuration file][config].
 +
 +If you don't like caching at all, you can fully disable caching with the command-line flag `--ignoreCache`.
 +
 +### Authentication When Using REST URLs
 +
- There is no chance to trigger a [LiveReload][] when the content of a URL changes. However, when a *local* file changes (i.e., `data/*` and `themes/<THEME>/data/*`), a LiveReload will be triggered. Symlinks are not supported. Note too that because downloading of data takes a while, Hugo stops processing your Markdown files until the data download has completed.
++Currently, you can only use those authentication methods that can be put into an URL. [OAuth] and other authentication methods are not implemented.
 +
 +## Load Local files
 +
 +To load local files with `getJSON` and `getCSV`, the source files must reside within Hugo's working directory. The file extension does not matter, but the content does.
 +
 +It applies the same output logic as above in [Get Remote Data](#get-remote-data).
 +
 +{{% note %}}
 +The local CSV files to be loaded using `getCSV` must be located **outside** the `data` directory.
 +{{% /note %}}
 +
 +## LiveReload with Data Files
 +
++There is no chance to trigger a [LiveReload] when the content of a URL changes. However, when a *local* file changes (i.e., `data/*` and `themes/<THEME>/data/*`), a LiveReload will be triggered. Symlinks are not supported. Note too that because downloading data takes a while, Hugo stops processing your Markdown files until the data download has been completed.
 +
 +{{% warning "URL Data and LiveReload" %}}
 +If you change any local file and the LiveReload is triggered, Hugo will read the data-driven (URL) content from the cache. If you have disabled the cache (i.e., by running the server with `hugo server --ignoreCache`), Hugo will re-download the content every time LiveReload triggers. This can create *huge* traffic. You may reach API limits quickly.
 +{{% /warning %}}
 +
 +## Examples of Data-driven Content
 +
 +- Photo gallery JSON powered: [https://github.com/pcdummy/hugo-lightslider-example](https://github.com/pcdummy/hugo-lightslider-example)
 +- GitHub Starred Repositories [in a post](https://github.com/SchumacherFM/blog-cs/blob/master/content%2Fposts%2Fgithub-starred.md) using data-driven content in a [custom short code](https://github.com/SchumacherFM/blog-cs/blob/master/layouts%2Fshortcodes%2FghStarred.html).
 +
 +## Specs for Data Formats
 +
 +* [TOML Spec][toml]
 +* [YAML Spec][yaml]
 +* [JSON Spec][json]
 +* [CSV Spec][csv]
 +* [XML Spec][xml]
 +
 +[config]: /getting-started/configuration/
 +[csv]: https://tools.ietf.org/html/rfc4180
 +[customize]: /themes/customizing/
 +[json]: https://www.ecma-international.org/publications/files/ECMA-ST/ECMA-404.pdf "Specification for JSON, JavaScript Object Notation"
 +[LiveReload]: /getting-started/usage/#livereload
 +[lookup]: /templates/lookup-order/
 +[markdownify]: /functions/markdownify/
 +[OAuth]: https://en.wikipedia.org/wiki/OAuth
 +[partials]: /templates/partials/
 +[themes]: /themes/
 +[toml]: https://github.com/toml-lang/toml
 +[variadic]: https://en.wikipedia.org/wiki/Variadic_function
 +[vars]: /variables/
 +[yaml]: https://yaml.org/spec/
 +[xml]: https://www.w3.org/XML/
index b6ce87f8e0b39bf1203b460fb95a558d6d6aedb7,0000000000000000000000000000000000000000..ace3f259bf98d2218484690013fd796cd62e1a08
mode 100644,000000..100644
--- /dev/null
@@@ -1,71 -1,0 +1,71 @@@
- The following is an example of a homepage template that uses [partial][partials], [base][] templates, and a content file at `content/_index.md` to populate the `{{.Title}}` and `{{.Content}}` [page variables][pagevars].
 +---
 +title: Homepage Template
 +linktitle: Homepage Template
 +description: The homepage of a website is often formatted differently than the other pages. For this reason, Hugo makes it easy for you to define your new site's homepage as a unique template.
 +date: 2017-02-01
 +publishdate: 2017-02-01
 +lastmod: 2017-02-01
 +categories: [templates]
 +keywords: [homepage]
 +menu:
 +  docs:
 +    parent: "templates"
 +    weight: 30
 +weight: 30
 +sections_weight: 30
 +draft: false
 +aliases: [/layout/homepage/,/templates/homepage-template/]
 +toc: true
 +---
 +
 +Homepage is a `Page` and therefore has all the [page variables][pagevars] and [site variables][sitevars] available for use.
 +
 +{{% note "The Only Required Template" %}}
 +The homepage template is the *only* required template for building a site and therefore useful when bootstrapping a new site and template. It is also the only required template if you are developing a single-page website.
 +{{% /note %}}
 +
 +{{< youtube ut1xtRZ1QOA >}}
 +
 +## Homepage Template Lookup Order
 +
 +See [Template Lookup](/templates/lookup-order/).
 +
 +## Add Content and Front Matter to the Homepage
 +
 +The homepage, similar to other [list pages in Hugo][lists], accepts content and front matter from an `_index.md` file. This file should live at the root of your `content` folder (i.e., `content/_index.md`). You can then add body copy and metadata to your homepage the way you would any other content file.
 +
 +See the homepage template below or [Content Organization][contentorg] for more information on the role of `_index.md` in adding content and front matter to list pages.
 +
 +## Example Homepage Template
 +
++The following is an example of a homepage template that uses [partial][partials], [base] templates, and a content file at `content/_index.md` to populate the `{{.Title}}` and `{{.Content}}` [page variables][pagevars].
 +
 +{{< code file="layouts/index.html" download="index.html" >}}
 +{{ define "main" }}
 +    <main aria-role="main">
 +      <header class="homepage-header">
 +        <h1>{{.Title}}</h1>
 +        {{ with .Params.subtitle }}
 +        <span class="subtitle">{{.}}</span>
 +        {{ end }}
 +      </header>
 +      <div class="homepage-content">
 +        <!-- Note that the content for index.html, as a sort of list page, will pull from content/_index.md -->
 +        {{.Content}}
 +      </div>
 +      <div>
 +        {{ range first 10 .Site.RegularPages }}
 +            {{ .Render "summary"}}
 +        {{ end }}
 +      </div>
 +    </main>
 +{{ end }}
 +{{< /code >}}
 +
 +[base]: /templates/base/
 +[contentorg]: /content-management/organization/
 +[lists]: /templates/lists/
 +[lookup]: /templates/lookup-order/
 +[pagevars]: /variables/page/
 +[partials]: /templates/partials/
 +[sitevars]: /variables/site/
index a92a0f551ec49dad476e4cb4c7015e83a7e3e50b,0000000000000000000000000000000000000000..05a6c862f8b46fda6e72c22588e55114ff31c69a
mode 100644,000000..100644
--- /dev/null
@@@ -1,240 -1,0 +1,240 @@@
- **Note:** Universal Analytics are deprecated. For details, see [Universal Analytics will be going away][].
 +---
 +title: Internal Templates
 +linktitle: Internal Templates
 +description: Hugo ships with a group of boilerplate templates that cover the most common use cases for static websites.
 +date: 2017-03-06
 +publishdate: 2017-03-06
 +lastmod: 2017-03-06
 +categories: [templates]
 +keywords: [internal, analytics,]
 +menu:
 +  docs:
 +    parent: "templates"
 +    weight: 168
 +weight: 168
 +sections_weight: 168
 +draft: false
 +aliases: []
 +toc: true
 +wip: true
 +---
 +<!-- reference: https://discourse.gohugo.io/t/lookup-order-for-partials/5705/6
 +code: https://github.com/gohugoio/hugo/blob/e445c35d6a0c7f5fc2f90f31226cd1d46e048bbc/tpl/template_embedded.go#L147 -->
 +
 +{{% warning %}}
 +While the following internal templates are called similar to partials, they do *not* observe the partial template lookup order.
 +{{% /warning %}}
 +
 +## Google Analytics
 +
 +Hugo ships with internal templates supporting Google Analytics, both [Google Analytics 4][GA4] (GA4) and Universal Analytics.
 +
++**Note:** Universal Analytics are deprecated. For details, see [Universal Analytics will be going away].
 +
 +[GA4]: https://support.google.com/analytics/answer/10089681
 +[Universal Analytics will be going away]: https://support.google.com/analytics/answer/11583528
 +
 +### Configure Google Analytics
 +
 +Provide your tracking ID in your configuration file:
 +
 +**Google Analytics 4 (gtag.js)**
 +{{< code-toggle file="config" >}}
 +googleAnalytics = "G-MEASUREMENT_ID"
 +{{</ code-toggle >}}
 +
 +**Google Universal Analytics (analytics.js)**
 +{{< code-toggle file="config" >}}
 +googleAnalytics = "UA-PROPERTY_ID"
 +{{</ code-toggle >}}
 +
 +### Use the Google Analytics Template
 +
 +You can then include the Google Analytics internal template:
 +
 +```go-html-template
 +{{ template "_internal/google_analytics_async.html" . }}
 +```
 +
 +**Note:** The async template is _not_ suitable for Google Analytics 4.
 +
 +```go-html-template
 +{{ template "_internal/google_analytics.html" . }}
 +```
 +
 +If you want to create your own template, you can access the configured ID with `{{ site.Config.Services.GoogleAnalytics.ID }}`.
 +
 +## Disqus
 +
 +Hugo also ships with an internal template for [Disqus comments][disqus], a popular commenting system for both static and dynamic websites. In order to effectively use Disqus, you will need to secure a Disqus "shortname" by [signing up for the free service][disqussignup].
 +
 +### Configure Disqus
 +
 +To use Hugo's Disqus template, you first need to set a single configuration value:
 +
 +{{< code-toggle file="config" >}}
 +disqusShortname = "your-disqus-shortname"
 +{{</ code-toggle >}}
 +
 +You also have the option to set the following in the front matter for a given piece of content:
 +
 +* `disqus_identifier`
 +* `disqus_title`
 +* `disqus_url`
 +
 +### Use the Disqus Template
 +
 +To add Disqus, include the following line in templates where you want your comments to appear:
 +
 +```go-html-template
 +{{ template "_internal/disqus.html" . }}
 +```
 +
 +A `.Site.DisqusShortname` variable is also exposed from the config.
 +
 +### Conditional Loading of Disqus Comments
 +
 +Users have noticed that enabling Disqus comments when running the Hugo web server on `localhost` (i.e. via `hugo server`) causes the creation of unwanted discussions on the associated Disqus account.
 +
 +You can create the following `layouts/partials/disqus.html`:
 +
 +{{< code file="layouts/partials/disqus.html" download="disqus.html" >}}
 +<div id="disqus_thread"></div>
 +<script type="text/javascript">
 +
 +(function() {
 +    // Don't ever inject Disqus on localhost--it creates unwanted
 +    // discussions from 'localhost:1313' on your Disqus account...
 +    if (window.location.hostname == "localhost")
 +        return;
 +
 +    var dsq = document.createElement('script'); dsq.type = 'text/javascript'; dsq.async = true;
 +    var disqus_shortname = '{{ .Site.DisqusShortname }}';
 +    dsq.src = '//' + disqus_shortname + '.disqus.com/embed.js';
 +    (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq);
 +})();
 +</script>
 +<noscript>Please enable JavaScript to view the <a href="https://disqus.com/?ref_noscript">comments powered by Disqus.</a></noscript>
 +<a href="https://disqus.com/" class="dsq-brlink">comments powered by <span class="logo-disqus">Disqus</span></a>
 +{{< /code >}}
 +
 +The `if` statement skips the initialization of the Disqus comment injection when you are running on `localhost`.
 +
 +You can then render your custom Disqus partial template as follows:
 +
 +```go-html-template
 +{{ partial "disqus.html" . }}
 +```
 +
 +## Open Graph
 +
 +An internal template for the [Open Graph protocol](https://ogp.me/), metadata that enables a page to become a rich object in a social graph.
 +This format is used for Facebook and some other sites.
 +
 +### Configure Open Graph
 +
 +Hugo's Open Graph template is configured using a mix of configuration variables and [front-matter](/content-management/front-matter/) on individual pages.
 +
 +{{< code-toggle file="config" >}}
 +[params]
 +  title = "My cool site"
 +  images = ["site-feature-image.jpg"]
 +  description = "Text about my cool site"
 +[taxonomies]
 +  series = "series"
 +{{</ code-toggle >}}
 +
 +{{< code-toggle file="content/blog/my-post" >}}
 +title = "Post title"
 +description = "Text about this post"
 +date = "2006-01-02"
 +images = ["post-cover.png"]
 +audio = []
 +videos = []
 +series = []
 +tags = []
 +{{</ code-toggle >}}
 +
 +Hugo uses the page title and description for the title and description metadata.
 +The first 6 URLs from the `images` array are used for image metadata.
 +If [page bundles](/content-management/page-bundles/) are used and the `images` array is empty or undefined, images with filenames matching `*feature*` or `*cover*,*thumbnail*` are used for image metadata.
 +
 +Various optional metadata can also be set:
 +
 +- Date, published date, and last modified data are used to set the published time metadata if specified.
 +- `audio` and `videos` are URL arrays like `images` for the audio and video metadata tags, respectively.
 +- The first 6 `tags` on the page are used for the tags metadata.
 +- The `series` taxonomy is used to specify related "see also" pages by placing them in the same series.
 +
 +If using YouTube this will produce a og:video tag like `<meta property="og:video" content="url">`. Use the `https://youtu.be/<id>` format with YouTube videos (example: `https://youtu.be/qtIqKaDlqXo`).
 +
 +### Use the Open Graph Template
 +
 +To add Open Graph metadata, include the following line between the `<head>` tags in your templates:
 +
 +```go-html-template
 +{{ template "_internal/opengraph.html" . }}
 +```
 +
 +## Twitter Cards
 +
 +An internal template for [Twitter Cards](https://developer.twitter.com/en/docs/tweets/optimize-with-cards/overview/abouts-cards),
 +metadata used to attach rich media to Tweets linking to your site.
 +
 +### Configure Twitter Cards
 +
 +Hugo's Twitter Card template is configured using a mix of configuration variables and [front-matter](/content-management/front-matter/) on individual pages.
 +
 +{{< code-toggle file="config" >}}
 +[params]
 +  images = ["site-feature-image.jpg"]
 +  description = "Text about my cool site"
 +{{</ code-toggle >}}
 +
 +{{< code-toggle file="content/blog/my-post" >}}
 +title = "Post title"
 +description = "Text about this post"
 +images = ["post-cover.png"]
 +{{</ code-toggle >}}
 +
 +If `images` aren't specified in the page front-matter, then hugo searches for [image page resources](/content-management/image-processing/) with `feature`, `cover`, or `thumbnail` in their name.
 +If no image resources with those names are found, the images defined in the [site config](/getting-started/configuration/) are used instead.
 +If no images are found at all, then an image-less Twitter `summary` card is used instead of `summary_large_image`.
 +
 +Hugo uses the page title and description for the card's title and description fields. The page summary is used if no description is given.
 +
 +The `.Site.Social.twitter` variable is exposed from the config as the value for `twitter:site`.
 +
 +{{< code-toggle file="config" >}}
 +[social]
 +  twitter = "GoHugoIO"
 +{{</ code-toggle >}}
 +
 +NOTE: The `@` will be added for you
 +
 +```html
 +<meta name="twitter:site" content="@GoHugoIO"/>
 +```
 +
 +### Use the Twitter Cards Template
 +
 +To add Twitter card metadata, include the following line immediately after the `<head>` element in your templates:
 +
 +```go-html-template
 +{{ template "_internal/twitter_cards.html" . }}
 +```
 +
 +## The Internal Templates
 +
 +The code for these templates is located [here](https://github.com/gohugoio/hugo/tree/master/tpl/tplimpl/embedded/templates).
 +
 +* `_internal/disqus.html`
 +* `_internal/google_analytics.html`
 +* `_internal/google_analytics_async.html`
 +* `_internal/opengraph.html`
 +* `_internal/pagination.html`
 +* `_internal/schema.html`
 +* `_internal/twitter_cards.html`
 +
 +[disqus]: https://disqus.com
 +[disqussignup]: https://disqus.com/profile/signup/
index 01f448778e6b38ede6b942e1fb894cf6a516ad95,0000000000000000000000000000000000000000..87b7cab35b62dec3932c3da76952bfd90f4e0a63
mode 100644,000000..100644
--- /dev/null
@@@ -1,671 -1,0 +1,671 @@@
- Accessing the Page Parameter `bar` defined in a piece of content's [front matter][].
 +---
 +title: Introduction to Hugo Templating
 +linktitle: Templating
 +description: Hugo uses Go's `html/template` and `text/template` libraries as the basis for the templating.
 +date: 2017-02-01
 +publishdate: 2017-02-01
 +lastmod: 2022-09-20
 +categories: [templates,fundamentals]
 +keywords: [go]
 +menu:
 +  docs:
 +    parent: "templates"
 +    weight: 10
 +weight: 10
 +sections_weight: 10
 +draft: false
 +aliases: [/layouts/introduction/,/layout/introduction/, /templates/go-templates/]
 +toc: true
 +---
 +
 +{{% note %}}
 +The following is only a primer on Go Templates. For an in-depth look into Go Templates, check the official [Go docs](https://golang.org/pkg/text/template/).
 +{{% /note %}}
 +
 +Go Templates provide an extremely simple template language that adheres to the belief that only the most basic of logic belongs in the template or view layer.
 +
 +## Basic Syntax
 +
 +Go Templates are HTML files with the addition of [variables][variables] and [functions][functions]. Go Template variables and functions are accessible within `{{ }}`.
 +
 +### Access a Predefined Variable
 +
 +A _predefined variable_ could be a variable already existing in the
 +current scope (like the `.Title` example in the [Variables]({{< relref
 +"#variables" >}}) section below) or a custom variable (like the
 +`$address` example in that same section).
 +
 +
 +```go-html-template
 +{{ .Title }}
 +{{ $address }}
 +```
 +
 +Parameters for functions are separated using spaces. The general syntax is:
 +
 +```go-html-template
 +{{ FUNCTION ARG1 ARG2 .. }}
 +```
 +
 +The following example calls the `add` function with inputs of `1` and `2`:
 +
 +```go-html-template
 +{{ add 1 2 }}
 +```
 +
 +#### Methods and Fields are Accessed via dot Notation
 +
- Hugo provides the option of passing values to your template layer through your [site configuration][config] (i.e. for site-wide values) or through the metadata of each specific piece of content (i.e. the [front matter][]). You can define any values of any type and use them however you want in your templates, as long as the values are supported by the [front matter format]({{< ref "front-matter.md#front-matter-formats" >}}).
++Accessing the Page Parameter `bar` defined in a piece of content's [front matter].
 +
 +```go-html-template
 +{{ .Params.bar }}
 +```
 +
 +#### Parentheses Can be Used to Group Items Together
 +
 +```go-html-template
 +{{ if or (isset .Params "alt") (isset .Params "caption") }} Caption {{ end }}
 +```
 +
 +#### A Single Statement Can be Split over Multiple Lines
 +
 +```go-html-template
 +{{ if or
 +  (isset .Params "alt")
 +  (isset .Params "caption")
 +}}
 +```
 +
 +#### Raw String Literals Can Include Newlines
 +
 +```go-html-template
 +{{ $msg := `Line one.
 +Line two.` }}
 +```
 +
 +## Variables {#variables}
 +
 +Each Go Template gets a data object. In Hugo, each template is passed
 +a `Page`.  In the below example, `.Title` is one of the elements
 +accessible in that [`Page` variable][pagevars].
 +
 +With the `Page` being the default scope of a template, the `Title`
 +element in current scope (`.` -- "the **dot**") is accessible simply
 +by the dot-prefix (`.Title`):
 +
 +```go-html-template
 +<title>{{ .Title }}</title>
 +```
 +
 +Values can also be stored in custom variables and referenced later:
 +
 +{{% note %}}
 +The custom variables need to be prefixed with `$`.
 +{{% /note %}}
 +
 +```go-html-template
 +{{ $address := "123 Main St." }}
 +{{ $address }}
 +```
 +
 +Variables can be re-defined using the `=` operator. The example below
 +prints "Var is Hugo Home" on the home page, and "Var is Hugo Page" on
 +all other pages:
 +
 +```go-html-template
 +{{ $var := "Hugo Page" }}
 +{{ if .IsHome }}
 +    {{ $var = "Hugo Home" }}
 +{{ end }}
 +Var is {{ $var }}
 +```
 +
 +## Functions
 +
 +Go Templates only ship with a few basic functions but also provide a mechanism for applications to extend the original set.
 +
 +[Hugo template functions][functions] provide additional functionality specific to building websites. Functions are called by using their name followed by the required parameters separated by spaces. Template functions cannot be added without recompiling Hugo.
 +
 +### Example 1: Adding Numbers
 +
 +```go-html-template
 +{{ add 1 2 }}
 +<!-- prints 3 -->
 +```
 +
 +### Example 2: Comparing Numbers
 +
 +```go-html-template
 +{{ lt 1 2 }}
 +<!-- prints true (i.e., since 1 is less than 2) -->
 +```
 +
 +Note that both examples make use of Go Template's [math][math] functions.
 +
 +{{% note "Additional Boolean Operators" %}}
 +There are more boolean operators than those listed in the Hugo docs in the [Go Template documentation](https://golang.org/pkg/text/template/#hdr-Functions).
 +{{% /note %}}
 +
 +## Includes
 +
 +When including another template, you will need to pass it the data that it would
 +need to access.
 +
 +{{% note %}}
 +To pass along the current context, please remember to include a trailing **dot**.
 +{{% /note %}}
 +
 +The templates location will always be starting at the `layouts/` directory
 +within Hugo.
 +
 +### Partial
 +
 +The [`partial`][partials] function is used to include _partial_ templates using
 +the syntax `{{ partial "<PATH>/<PARTIAL>.<EXTENSION>" . }}`.
 +
 +Example of including a `layouts/partials/header.html` partial:
 +
 +```go-html-template
 +{{ partial "header.html" . }}
 +```
 +
 +### Template
 +
 +The `template` function was used to include _partial_ templates
 +in much older Hugo versions. Now it's useful only for calling
 +[_internal_ templates][internal templates]. The syntax is `{{ template
 +"_internal/<TEMPLATE>.<EXTENSION>" . }}`.
 +
 +{{% note %}}
 +The available **internal** templates can be found
 +[here](https://github.com/gohugoio/hugo/tree/master/tpl/tplimpl/embedded/templates).
 +{{% /note %}}
 +
 +Example of including the internal `opengraph.html` template:
 +
 +```go-html-template
 +{{ template "_internal/opengraph.html" . }}
 +```
 +
 +## Logic
 +
 +Go Templates provide the most basic iteration and conditional logic.
 +
 +### Iteration
 +
 +The Go Templates make heavy use of `range` to iterate over a _map_,
 +_array_, or _slice_. The following are different examples of how to
 +use `range`.
 +
 +#### Example 1: Using Context (`.`)
 +
 +```go-html-template
 +{{ range $array }}
 +    {{ . }} <!-- The . represents an element in $array -->
 +{{ end }}
 +```
 +
 +#### Example 2: Declaring a variable name for an array element's value
 +
 +```go-html-template
 +{{ range $elem_val := $array }}
 +    {{ $elem_val }}
 +{{ end }}
 +```
 +
 +#### Example 3: Declaring variable names for an array element's index _and_ value
 +
 +For an array or slice, the first declared variable will map to each
 +element's index.
 +
 +```go-html-template
 +{{ range $elem_index, $elem_val := $array }}
 +   {{ $elem_index }} -- {{ $elem_val }}
 +{{ end }}
 +```
 +
 +#### Example 4: Declaring variable names for a map element's key _and_ value
 +
 +For a map, the first declared variable will map to each map element's
 +key.
 +
 +```go-html-template
 +{{ range $elem_key, $elem_val := $map }}
 +   {{ $elem_key }} -- {{ $elem_val }}
 +{{ end }}
 +```
 +
 +#### Example 5: Conditional on empty _map_, _array_, or _slice_
 +
 +If the _map_, _array_, or _slice_ passed into the range is zero-length then the else statement is evaluated.
 +
 +```go-html-template
 +{{ range $array }}
 +    {{ . }}
 +{{else}}
 +    <!-- This is only evaluated if $array is empty -->
 +{{ end }}
 +```
 +
 +### Conditionals
 +
 +`if`, `else`, `with`, `or`, `and` and `not` provide the framework for handling conditional logic in Go Templates. Like `range`, `if` and `with` statements are closed with an `{{ end }}`.
 +
 +Go Templates treat the following values as **false**:
 +
 +- `false` (boolean)
 +- 0 (integer)
 +- any zero-length array, slice, map, or string
 +
 +#### Example 1: `with`
 +
 +It is common to write "if something exists, do this" kind of
 +statements using `with`.
 +
 +{{% note %}}
 +`with` rebinds the context `.` within its scope (just like in `range`).
 +{{% /note %}}
 +
 +It skips the block if the variable is absent, or if it evaluates to
 +"false" as explained above.
 +
 +```go-html-template
 +{{ with .Params.title }}
 +    <h4>{{ . }}</h4>
 +{{ end }}
 +```
 +
 +#### Example 2: `with` .. `else`
 +
 +Below snippet uses the "description" front-matter parameter's value if
 +set, else uses the default `.Summary` [Page variable][pagevars]:
 +
 +
 +```go-html-template
 +{{ with .Param "description" }}
 +    {{ . }}
 +{{ else }}
 +    {{ .Summary }}
 +{{ end }}
 +```
 +
 +See the [`.Param` function][param].
 +
 +#### Example 3: `if`
 +
 +An alternative (and a more verbose) way of writing `with` is using
 +`if`. Here, the `.` does not get rebound.
 +
 +Below example is "Example 1" rewritten using `if`:
 +
 +```go-html-template
 +{{ if isset .Params "title" }}
 +    <h4>{{ index .Params "title" }}</h4>
 +{{ end }}
 +```
 +
 +#### Example 4: `if` .. `else`
 +
 +Below example is "Example 2" rewritten using `if` .. `else`, and using
 +[`isset` function][isset] + `.Params` variable (different from the
 +[`.Param` **function**][param]) instead:
 +
 +```go-html-template
 +{{ if (isset .Params "description") }}
 +    {{ index .Params "description" }}
 +{{ else }}
 +    {{ .Summary }}
 +{{ end }}
 +```
 +
 +#### Example 5: `if` .. `else if` .. `else`
 +
 +Unlike `with`, `if` can contain `else if` clauses too.
 +
 +```go-html-template
 +{{ if (isset .Params "description") }}
 +    {{ index .Params "description" }}
 +{{ else if (isset .Params "summary") }}
 +    {{ index .Params "summary" }}
 +{{ else }}
 +    {{ .Summary }}
 +{{ end }}
 +```
 +
 +#### Example 6: `and` & `or`
 +
 +```go-html-template
 +{{ if (and (or (isset .Params "title") (isset .Params "caption")) (isset .Params "attr")) }}
 +```
 +
 +## Pipes
 +
 +One of the most powerful components of Go Templates is the ability to stack actions one after another. This is done by using pipes. Borrowed from Unix pipes, the concept is simple: each pipeline's output becomes the input of the following pipe.
 +
 +Because of the very simple syntax of Go Templates, the pipe is essential to being able to chain together function calls. One limitation of the pipes is that they can only work with a single value and that value becomes the last parameter of the next pipeline.
 +
 +A few simple examples should help convey how to use the pipe.
 +
 +### Example 1: `shuffle`
 +
 +The following two examples are functionally the same:
 +
 +```go-html-template
 +{{ shuffle (seq 1 5) }}
 +```
 +
 +
 +```go-html-template
 +{{ (seq 1 5) | shuffle }}
 +```
 +
 +### Example 2: `index`
 +
 +The following accesses the page parameter called "disqus_url" and escapes the HTML. This example also uses the [`index` function](/functions/index-function/), which is built into Go Templates:
 +
 +```go-html-template
 +{{ index .Params "disqus_url" | html }}
 +```
 +
 +### Example 3: `or` with `isset`
 +
 +```go-html-template
 +{{ if or (or (isset .Params "title") (isset .Params "caption")) (isset .Params "attr") }}
 +Stuff Here
 +{{ end }}
 +```
 +
 +Could be rewritten as
 +
 +```go-html-template
 +{{ if isset .Params "caption" | or isset .Params "title" | or isset .Params "attr" }}
 +Stuff Here
 +{{ end }}
 +```
 +
 +## Context (aka "the dot") {#the-dot}
 +
 +The most easily overlooked concept to understand about Go Templates is
 +that `{{ . }}` always refers to the **current context**.
 +
 +- In the top level of your template, this will be the data set made
 +  available to it.
 +- Inside an iteration, however, it will have the value of the
 +  current item in the loop; i.e., `{{ . }}` will no longer refer to
 +  the data available to the entire page.
 +
 +If you need to access page-level data (e.g., page params set in front
 +matter) from within the loop, you will likely want to do one of the
 +following:
 +
 +### 1. Define a Variable Independent of Context
 +
 +The following shows how to define a variable independent of the context.
 +
 +{{< code file="tags-range-with-page-variable.html" >}}
 +{{ $title := .Site.Title }}
 +<ul>
 +{{ range .Params.tags }}
 +    <li>
 +        <a href="/tags/{{ . | urlize }}">{{ . }}</a>
 +        - {{ $title }}
 +    </li>
 +{{ end }}
 +</ul>
 +{{< /code >}}
 +
 +{{% note %}}
 +Notice how once we have entered the loop (i.e. `range`), the value of `{{ . }}` has changed. We have defined a variable outside the loop (`{{$title}}`) that we've assigned a value so that we have access to the value from within the loop as well.
 +{{% /note %}}
 +
 +### 2. Use `$.` to Access the Global Context
 +
 +`$` has special significance in your templates. `$` is set to the starting value of `.` ("the dot") by default. This is a [documented feature of Go text/template][dotdoc]. This means you have access to the global context from anywhere. Here is an equivalent example of the preceding code block but now using `$` to grab `.Site.Title` from the global context:
 +
 +{{< code file="range-through-tags-w-global.html" >}}
 +<ul>
 +{{ range .Params.tags }}
 +  <li>
 +    <a href="/tags/{{ . | urlize }}">{{ . }}</a>
 +            - {{ $.Site.Title }}
 +  </li>
 +{{ end }}
 +</ul>
 +{{< /code >}}
 +
 +{{% warning "Don't Redefine the Dot" %}}
 +The built-in magic of `$` would cease to work if someone were to mischievously redefine the special character; e.g. `{{ $ := .Site }}`. *Don't do it.* You may, of course, recover from this mischief by using `{{ $ := . }}` in a global context to reset `$` to its default value.
 +{{% /warning %}}
 +
 +## Whitespace
 +
 +Go 1.6 includes the ability to trim the whitespace from either side of a Go tag by including a hyphen (`-`) and space immediately beside the corresponding `{{` or `}}` delimiter.
 +
 +For instance, the following Go Template will include the newlines and horizontal tab in its HTML output:
 +
 +```go-html-template
 +<div>
 +  {{ .Title }}
 +</div>
 +```
 +
 +Which will output:
 +
 +```html
 +<div>
 +  Hello, World!
 +</div>
 +```
 +
 +Leveraging the `-` in the following example will remove the extra white space surrounding the `.Title` variable and remove the newline:
 +
 +```go-html-template
 +<div>
 +  {{- .Title -}}
 +</div>
 +```
 +
 +Which then outputs:
 +
 +```html
 +<div>Hello, World!</div>
 +```
 +
 +Go considers the following characters _whitespace_:
 +
 +* <kbd>space</kbd>
 +* horizontal <kbd>tab</kbd>
 +* carriage <kbd>return</kbd>
 +* newline
 +
 +## Comments
 +
 +In order to keep your templates organized and share information throughout your team, you may want to add comments to your templates. There are two ways to do that with Hugo.
 +
 +### Go Templates comments
 +
 +Go Templates support `{{/*` and `*/}}` to open and close a comment block. Nothing within that block will be rendered.
 +
 +For example:
 +
 +```go-html-template
 +Bonsoir, {{/* {{ add 0 + 2 }} */}}Eliott.
 +```
 +
 +Will render `Bonsoir, Eliott.`, and not care about the syntax error (`add 0 + 2`) in the comment block.
 +
 +### HTML comments
 +
 +If you need to produce HTML comments from your templates, take a look at the [Internet Explorer conditional comments]({{< relref "introduction.md#ie-conditional-comments" >}}) example. If you need variables to construct such HTML comments, just pipe `printf` to `safeHTML`. For example:
 +
 +```go-html-template
 +{{ printf "<!-- Our website is named: %s -->" .Site.Title | safeHTML }}
 +```
 +
 +#### HTML comments containing Go Templates
 +
 +HTML comments are by default stripped, but their content is still evaluated. That means that although the HTML comment will never render any content to the final HTML pages, code contained within the comment may fail the build process.
 +
 +{{% note %}}
 +Do **not** try to comment out Go Template code using HTML comments.
 +{{% /note %}}
 +
 +```go-html-template
 +<!-- {{ $author := "Emma Goldman" }} was a great woman. -->
 +{{ $author }}
 +```
 +
 +The templating engine will strip the content within the HTML comment, but will first evaluate any Go Template code if present within. So the above example will render `Emma Goldman`, as the `$author` variable got evaluated in the HTML comment. But the build would have failed if that code in the HTML comment had an error.
 +
 +## Hugo Parameters
 +
- You can provide variables to be used by templates in individual content's [front matter][].
++Hugo provides the option of passing values to your template layer through your [site configuration][config] (i.e. for site-wide values) or through the metadata of each specific piece of content (i.e. the [front matter]). You can define any values of any type and use them however you want in your templates, as long as the values are supported by the [front matter format]({{< ref "front-matter.md#front-matter-formats" >}}).
 +
 +## Use Content (`Page`) Parameters
 +
++You can provide variables to be used by templates in individual content's [front matter].
 +
 +An example of this is used in the Hugo docs. Most of the pages benefit from having the table of contents provided, but sometimes the table of contents doesn't make a lot of sense. We've defined a `notoc` variable in our front matter that will prevent a table of contents from rendering when specifically set to `true`.
 +
 +Here is the example front matter (YAML):
 +
 +```yml
 +---
 +title: Roadmap
 +lastmod: 2017-03-05
 +date: 2013-11-18
 +notoc: true
 +---
 +```
 +
 +Here is an example of corresponding code that could be used inside a `toc.html` [partial template][partials]:
 +
 +{{< code file="layouts/partials/toc.html" download="toc.html" >}}
 +{{ if not .Params.notoc }}
 +<aside>
 +  <header>
 +    <a href="#{{.Title | urlize}}">
 +    <h3>{{.Title}}</h3>
 +    </a>
 +  </header>
 +  {{.TableOfContents}}
 +</aside>
 +<a href="#" id="toc-toggle"></a>
 +{{ end }}
 +{{< /code >}}
 +
 +We want the *default* behavior to be for pages to include a TOC unless otherwise specified. This template checks to make sure that the `notoc:` field in this page's front matter is not `true`.
 +
 +## Use Site Configuration Parameters
 +
 +You can arbitrarily define as many site-level parameters as you want in your [site's configuration file][config]. These parameters are globally available in your templates.
 +
 +For instance, you might declare the following:
 +
 +{{< code-toggle file="config" >}}
 +params:
 +  copyrighthtml: "Copyright &#xA9; 2017 John Doe. All Rights Reserved."
 +  twitteruser: "spf13"
 +  sidebarrecentlimit: 5
 +{{< /code >}}
 +
 +Within a footer layout, you might then declare a `<footer>` that is only rendered if the `copyrighthtml` parameter is provided. If it *is* provided, you will then need to declare the string is safe to use via the [`safeHTML` function][safehtml] so that the HTML entity is not escaped again. This would let you easily update just your top-level config file each January 1st, instead of hunting through your templates.
 +
 +```go-html-template
 +{{ if .Site.Params.copyrighthtml }}
 +    <footer>
 +        <div class="text-center">{{.Site.Params.CopyrightHTML | safeHTML}}</div>
 +    </footer>
 +{{ end }}
 +```
 +
 +An alternative way of writing the "`if`" and then referencing the same value is to use [`with`][with] instead. `with` rebinds the context (`.`) within its scope and skips the block if the variable is absent:
 +
 +{{< code file="layouts/partials/twitter.html" >}}
 +{{ with .Site.Params.twitteruser }}
 +    <div>
 +        <a href="https://twitter.com/{{.}}" rel="author">
 +        <img src="/images/twitter.png" width="48" height="48" title="Twitter: {{.}}" alt="Twitter"></a>
 +    </div>
 +{{ end }}
 +{{< /code >}}
 +
 +Finally, you can pull "magic constants" out of your layouts as well. The following uses the [`first`][first] function, as well as the [`.RelPermalink`][relpermalink] page variable and the [`.Site.Pages`][sitevars] site variable.
 +
 +```go-html-template
 +<nav>
 +  <h1>Recent Posts</h1>
 +  <ul>
 +  {{- range first .Site.Params.SidebarRecentLimit .Site.Pages -}}
 +      <li><a href="{{.RelPermalink}}">{{.Title}}</a></li>
 +  {{- end -}}
 +  </ul>
 +</nav>
 +```
 +
 +## Example: Show Future Events
 +
 +Given the following content structure and [front matter]:
 +
 +```text
 +content/
 +└── events/
 +    ├── event-1.md
 +    ├── event-2.md
 +    └── event-3.md
 +```
 +
 +{{< code-toggle file="content/events/event-1.md" copy="false" >}}
 +title = 'Event 1'
 +date = 2021-12-06T10:37:16-08:00
 +draft = false
 +start_date = 2021-12-05T09:00:00-08:00
 +end_date = 2021-12-05T11:00:00-08:00
 +{{< /code-toggle >}}
 +
 +This [partial template][partials] renders future events:
 +
 +{{< code file="layouts/partials/future-events.html" >}}
 +<h2>Future Events</h2>
 +<ul>
 +  {{ range where site.RegularPages "Type" "events" }}
 +    {{ if gt (.Params.start_date | time.AsTime) now }}
 +      {{ $startDate := .Params.start_date | time.Format ":date_medium" }}
 +      <li>
 +        <a href="{{ .RelPermalink }}">{{ .LinkTitle }}</a> - {{ $startDate }}
 +      </li>
 +    {{ end }}
 +  {{ end }}
 +</ul>
 +{{< /code >}}
 +
 +If you restrict front matter to the TOML format, and omit quotation marks surrounding date fields, you can perform date comparisons without casting.
 +
 +{{< code file="layouts/partials/future-events.html" >}}
 +<h2>Future Events</h2>
 +<ul>
 +  {{ range where (where site.RegularPages "Type" "events") "Params.start_date" "gt" now }}
 +    {{ $startDate := .Params.start_date | time.Format ":date_medium" }}
 +    <li>
 +      <a href="{{ .RelPermalink }}">{{ .LinkTitle }}</a> - {{ $startDate }}
 +    </li>
 +  {{ end }}
 +</ul>
 +{{< /code >}}
 +
 +[config]: {{< relref "getting-started/configuration" >}}
 +[dotdoc]: https://golang.org/pkg/text/template/#hdr-Variables
 +[first]: {{< relref "functions/first" >}}
 +[front matter]: {{< relref "content-management/front-matter" >}}
 +[functions]: {{< relref "functions" >}}
 +[internal templates]: {{< relref "templates/internal" >}}
 +[isset]: {{< relref "functions/isset" >}}
 +[math]: {{< relref "functions/math" >}}
 +[pagevars]: {{< relref "variables/page" >}}
 +[param]: {{< relref "functions/param" >}}
 +[partials]: {{< relref "templates/partials" >}}
 +[relpermalink]: {{< relref "variables/page#page-variables" >}}
 +[safehtml]: {{< relref "functions/safehtml" >}}
 +[sitevars]: {{< relref "variables/site" >}}
 +[variables]: {{< relref "variables" >}}
 +[with]: {{< relref "functions/with" >}}
index 18f03c6f111bedfcb2901f29b368b484ee0eca56,0000000000000000000000000000000000000000..03847707b25a7158f0a028158e09522e9f066a25
mode 100644,000000..100644
--- /dev/null
@@@ -1,600 -1,0 +1,600 @@@
- Hugo lists render the content based on metadata you provide in [front matter][]. In addition to sane defaults, Hugo also ships with multiple methods to make quick work of ordering content inside list templates:
 +---
 +title: Lists of Content in Hugo
 +linktitle: List Templates
 +description: Lists have a specific meaning and usage in Hugo when it comes to rendering your site homepage, section page, taxonomy list, or taxonomy terms list.
 +date: 2017-02-01
 +publishdate: 2017-02-01
 +lastmod: 2017-02-01
 +categories: [templates]
 +keywords: [lists,sections,rss,taxonomies,terms]
 +menu:
 +  docs:
 +    parent: "templates"
 +    weight: 22
 +weight: 22
 +sections_weight: 22
 +draft: false
 +aliases: [/templates/list/,/layout/indexes/]
 +toc: true
 +---
 +
 +## What is a List Page Template?
 +
 +{{< youtube 8b2YTSMdMps >}}
 +
 +A list page template is a template used to render multiple pieces of content in a single HTML page. The exception to this rule is the homepage, which is still a list but has its own [dedicated template][homepage].
 +
 +Hugo uses the term *list* in its truest sense; i.e. a sequential arrangement of material, especially in alphabetical or numerical order. Hugo uses list templates on any output HTML page where content is traditionally listed:
 +
 +* [Taxonomy terms pages][taxterms]
 +* [Taxonomy list pages][taxlists]
 +* [Section list pages][sectiontemps]
 +* [RSS][rss]
 +
 +For template lookup order, see [Template Lookup](/templates/lookup-order/).
 +
 +The idea of a list page comes from the [hierarchical mental model of the web][mentalmodel] and is best demonstrated visually:
 +
 +[![Image demonstrating a hierarchical website sitemap.](/images/site-hierarchy.svg)](/images/site-hierarchy.svg)
 +
 +## List Defaults
 +
 +### Default Templates
 +
 +Since section lists and taxonomy lists (N.B., *not* [taxonomy terms lists][taxterms]) are both *lists* with regards to their templates, both have the same terminating default of `_default/list.html` or `themes/<THEME>/layouts/_default/list.html` in their lookup order. In addition, both [section lists][sectiontemps] and [taxonomy lists][taxlists] have their own default list templates in `_default`.
 +
 +See [Template Lookup Order](/templates/lookup-order/) for the complete reference.
 +
 +## Add Content and Front Matter to List Pages
 +
 +Since v0.18, [everything in Hugo is a `Page`][bepsays]. This means list pages and the homepage can have associated content files (i.e. `_index.md`) that contain page metadata (i.e., front matter) and content.
 +
 +This new model allows you to include list-specific front matter via `.Params` and also means that list templates (e.g., `layouts/_default/list.html`) have access to all [page variables][pagevars].
 +
 +{{% note %}}
 +It is important to note that all `_index.md` content files will render according to a *list* template and not according to a [single page template](/templates/single-page-templates/).
 +{{% /note %}}
 +
 +### Example Project Directory
 +
 +The following is an example of a typical Hugo project directory's content:
 +
 +```txt
 +.
 +...
 +├── content
 +|   ├── posts
 +|   |   ├── _index.md
 +|   |   ├── post-01.md
 +|   |   └── post-02.md
 +|   └── quote
 +|   |   ├── quote-01.md
 +|   |   └── quote-02.md
 +...
 +```
 +
 +Using the above example, let's assume you have the following in `content/posts/_index.md`:
 +
 +{{< code file="content/posts/_index.md" >}}
 +---
 +title: My Go Journey
 +date: 2017-03-23
 +publishdate: 2017-03-24
 +---
 +
 +I decided to start learning Go in March 2017.
 +
 +Follow my journey through this new blog.
 +{{< /code >}}
 +
 +You can now access this `_index.md`'s' content in your list template:
 +
 +{{< code file="layouts/_default/list.html" download="list.html" >}}
 +{{ define "main" }}
 +<main>
 +    <article>
 +        <header>
 +            <h1>{{.Title}}</h1>
 +        </header>
 +        <!-- "{{.Content}}" pulls from the markdown content of the corresponding _index.md -->
 +        {{.Content}}
 +    </article>
 +    <ul>
 +    <!-- Ranges through content/posts/*.md -->
 +    {{ range .Pages }}
 +        <li>
 +            <a href="{{.Permalink}}">{{.Date.Format "2006-01-02"}} | {{.Title}}</a>
 +        </li>
 +    {{ end }}
 +    </ul>
 +</main>
 +{{ end }}
 +{{< /code >}}
 +
 +This above will output the following HTML:
 +
 +{{< code file="example.com/posts/index.html" copy="false" >}}
 +<!--top of your baseof code-->
 +<main>
 +    <article>
 +        <header>
 +            <h1>My Go Journey</h1>
 +        </header>
 +        <p>I decided to start learning Go in March 2017.</p>
 +        <p>Follow my journey through this new blog.</p>
 +    </article>
 +    <ul>
 +        <li><a href="/posts/post-01/">Post 1</a></li>
 +        <li><a href="/posts/post-02/">Post 2</a></li>
 +    </ul>
 +</main>
 +<!--bottom of your baseof-->
 +{{< /code >}}
 +
 +### List Pages Without `_index.md`
 +
 +You do *not* have to create an `_index.md` file for every list page (i.e. section, taxonomy, taxonomy terms, etc) or the homepage. If Hugo does not find an `_index.md` within the respective content section when rendering a list template, the page will be created but with no `{{.Content}}` and only the default values for `.Title` etc.
 +
 +Using this same `layouts/_default/list.html` template and applying it to the `quotes` section above will render the following output. Note that `quotes` does not have an `_index.md` file to pull from:
 +
 +{{< code file="example.com/quote/index.html" copy="false" >}}
 +<!--baseof-->
 +<main>
 +    <article>
 +        <header>
 +        <!-- Hugo assumes that .Title is the name of the section since there is no _index.md content file from which to pull a "title:" field -->
 +            <h1>Quotes</h1>
 +        </header>
 +    </article>
 +    <ul>
 +        <li><a href="https://example.com/quote/quotes-01/">Quote 1</a></li>
 +        <li><a href="https://example.com/quote/quotes-02/">Quote 2</a></li>
 +    </ul>
 +</main>
 +<!--baseof-->
 +{{< /code >}}
 +
 +{{% note %}}
 +The default behavior of Hugo is to pluralize list titles; hence the inflection of the `quote` section to "Quotes" when called with the `.Title` [page variable](/variables/page/). You can change this via the `pluralizeListTitles` directive in your [site configuration](/getting-started/configuration/).
 +{{% /note %}}
 +
 +## Example List Templates
 +
 +### Section Template
 +
 +This list template has been modified slightly from a template originally used in [spf13.com](https://spf13.com/). It makes use of [partial templates][partials] for the chrome of the rendered page rather than using a [base template][base]. The examples that follow also use the [content view templates][views] `li.html` or `summary.html`.
 +
 +{{< code file="layouts/section/posts.html" >}}
 +{{ partial "header.html" . }}
 +{{ partial "subheader.html" . }}
 +<main>
 +  <div>
 +   <h1>{{ .Title }}</h1>
 +        <ul>
 +        <!-- Renders the li.html content view for each content/posts/*.md -->
 +            {{ range .Pages }}
 +                {{ .Render "li"}}
 +            {{ end }}
 +        </ul>
 +  </div>
 +</main>
 +{{ partial "footer.html" . }}
 +{{< /code >}}
 +
 +### Taxonomy Template
 +
 +{{< code file="layouts/_default/taxonomy.html" download="taxonomy.html" >}}
 +{{ define "main" }}
 +<main>
 +  <div>
 +   <h1>{{ .Title }}</h1>
 +   <!-- ranges through each of the content files associated with a particular taxonomy term and renders the summary.html content view -->
 +    {{ range .Pages }}
 +        {{ .Render "summary"}}
 +    {{ end }}
 +  </div>
 +</main>
 +{{ end }}
 +{{< /code >}}
 +
 +## Order Content
 +
- The following template takes grouping by `date` a step further and uses Go's layout string. See the [`Format` function][] for more examples of how to use Go's layout string to format dates in Hugo.
++Hugo lists render the content based on metadata you provide in [front matter]. In addition to sane defaults, Hugo also ships with multiple methods to make quick work of ordering content inside list templates:
 +
 +### Default: Weight > Date > LinkTitle > FilePath
 +
 +{{< code file="layouts/partials/default-order.html" >}}
 +<ul>
 +    {{ range .Pages }}
 +        <li>
 +            <h1><a href="{{ .Permalink }}">{{ .Title }}</a></h1>
 +            <time>{{ .Date.Format "Mon, Jan 2, 2006" }}</time>
 +        </li>
 +    {{ end }}
 +</ul>
 +{{< /code >}}
 +
 +### By Weight
 +
 +Lower weight gets higher precedence. So content with lower weight will come first.
 +
 +{{< code file="layouts/partials/by-weight.html" >}}
 +<ul>
 +    {{ range .Pages.ByWeight }}
 +        <li>
 +            <h1><a href="{{ .Permalink }}">{{ .Title }}</a></h1>
 +            <time>{{ .Date.Format "Mon, Jan 2, 2006" }}</time>
 +        </li>
 +    {{ end }}
 +</ul>
 +{{< /code >}}
 +
 +### By Date
 +
 +{{< code file="layouts/partials/by-date.html" >}}
 +<ul>
 +    <!-- orders content according to the "date" field in front matter -->
 +    {{ range .Pages.ByDate }}
 +        <li>
 +            <h1><a href="{{ .Permalink }}">{{ .Title }}</a></h1>
 +            <time>{{ .Date.Format "Mon, Jan 2, 2006" }}</time>
 +        </li>
 +    {{ end }}
 +</ul>
 +{{< /code >}}
 +
 +### By Publish Date
 +
 +{{< code file="layouts/partials/by-publish-date.html" >}}
 +<ul>
 +    <!-- orders content according to the "publishdate" field in front matter -->
 +    {{ range .Pages.ByPublishDate }}
 +        <li>
 +            <h1><a href="{{ .Permalink }}">{{ .Title }}</a></h1>
 +            <time>{{ .Date.Format "Mon, Jan 2, 2006" }}</time>
 +        </li>
 +    {{ end }}
 +</ul>
 +{{< /code >}}
 +
 +### By Expiration Date
 +
 +{{< code file="layouts/partials/by-expiry-date.html" >}}
 +<ul>
 +    {{ range .Pages.ByExpiryDate }}
 +        <li>
 +            <h1><a href="{{ .Permalink }}">{{ .Title }}</a></h1>
 +            <time>{{ .Date.Format "Mon, Jan 2, 2006" }}</time>
 +        </li>
 +    {{ end }}
 +</ul>
 +{{< /code >}}
 +
 +### By Last Modified Date
 +
 +{{< code file="layouts/partials/by-last-mod.html" >}}
 +<ul>
 +    <!-- orders content according to the "lastmod" field in front matter -->
 +    {{ range .Pages.ByLastmod }}
 +        <li>
 +            <h1><a href="{{ .Permalink }}">{{ .Title }}</a></h1>
 +            <time>{{ .Date.Format "Mon, Jan 2, 2006" }}</time>
 +        </li>
 +    {{ end }}
 +</ul>
 +{{< /code >}}
 +
 +### By Length
 +
 +{{< code file="layouts/partials/by-length.html" >}}
 +<ul>
 +    <!-- orders content according to content length in ascending order (i.e., the shortest content will be listed first) -->
 +    {{ range .Pages.ByLength }}
 +        <li>
 +            <h1><a href="{{ .Permalink }}">{{ .Title }}</a></h1>
 +            <time>{{ .Date.Format "Mon, Jan 2, 2006" }}</time>
 +        </li>
 +    {{ end }}
 +</ul>
 +{{< /code >}}
 +
 +### By Title
 +
 +{{< code file="layouts/partials/by-title.html" >}}
 +<ul>
 +    <!-- ranges through content in ascending order according to the "title" field set in front matter -->
 +    {{ range .Pages.ByTitle }}
 +        <li>
 +            <h1><a href="{{ .Permalink }}">{{ .Title }}</a></h1>
 +            <time>{{ .Date.Format "Mon, Jan 2, 2006" }}</time>
 +        </li>
 +    {{ end }}
 +</ul>
 +{{< /code >}}
 +
 +### By Link Title
 +
 +{{< code file="layouts/partials/by-link-title.html" >}}
 +<ul>
 +    <!-- ranges through content in ascending order according to the "linktitle" field in front matter. If a "linktitle" field is not set, the range will start with content that only has a "title" field and use that value for .LinkTitle -->
 +    {{ range .Pages.ByLinkTitle }}
 +        <li>
 +            <h1><a href="{{ .Permalink }}">{{ .LinkTitle }}</a></h1>
 +            <time>{{ .Date.Format "Mon, Jan 2, 2006" }}</time>
 +        </li>
 +    {{ end }}
 +</ul>
 +{{< /code >}}
 +
 +### By Parameter
 +
 +Order based on the specified front matter parameter. Content that does not have the specified front matter field  will use the site's `.Site.Params` default. If the parameter is not found at all in some entries, those entries will appear together at the end of the ordering.
 +
 +{{< code file="layouts/partials/by-rating.html" >}}
 +<!-- Ranges through content according to the "rating" field set in front matter -->
 +{{ range (.Pages.ByParam "rating") }}
 +  <!-- ... -->
 +{{ end }}
 +{{< /code >}}
 +
 +If the targeted front matter field is nested beneath another field, you can access the field using dot notation.
 +
 +{{< code file="layouts/partials/by-nested-param.html" >}}
 +{{ range (.Pages.ByParam "author.last_name") }}
 +  <!-- ... -->
 +{{ end }}
 +{{< /code >}}
 +
 +### Reverse Order
 +
 +Reversing order can be applied to any of the above methods. The following uses `ByDate` as an example:
 +
 +{{< code file="layouts/partials/by-date-reverse.html" >}}
 +<ul>
 +    {{ range .Pages.ByDate.Reverse }}
 +        <li>
 +            <h1><a href="{{ .Permalink }}">{{ .Title }}</a></h1>
 +            <time>{{ .Date.Format "Mon, Jan 2, 2006" }}</time>
 +        </li>
 +    {{ end }}
 +</ul>
 +{{< /code >}}
 +
 +## Group Content
 +
 +Hugo provides some functions for grouping pages by Section, Type, Date, etc.
 +
 +### By Page Field
 +
 +{{< code file="layouts/partials/by-page-field.html" >}}
 +<!-- Groups content according to content section. The ".Key" in this instance will be the section's title. -->
 +{{ range .Pages.GroupBy "Section" }}
 +<h3>{{ .Key }}</h3>
 +<ul>
 +    {{ range .Pages }}
 +    <li>
 +    <a href="{{ .Permalink }}">{{ .Title }}</a>
 +    <div class="meta">{{ .Date.Format "Mon, Jan 2, 2006" }}</div>
 +    </li>
 +    {{ end }}
 +</ul>
 +{{ end }}
 +{{< /code >}}
 +
 +In the above example, you may want `{{.Title}}` to point the `title` field you have added to your `_index.md` file instead. You can access this value using the [`.GetPage` function][getpage]:
 +
 +{{< code file="layouts/partials/by-page-field.html" >}}
 +<!-- Groups content according to content section.-->
 +{{ range .Pages.GroupBy "Section" }}
 +<!-- Checks for existence of _index.md for a section; if available, pulls from "title" in front matter -->
 +{{ with $.Site.GetPage "section" .Key }}
 +<h3>{{.Title}}</h3>
 +{{ else }}
 +<!-- If no _index.md is available, ".Key" defaults to the section title and filters to title casing -->
 +<h3>{{ .Key | title }}</h3>
 +{{ end }}
 +<ul>
 +    {{ range .Pages }}
 +    <li>
 +    <a href="{{ .Permalink }}">{{ .Title }}</a>
 +    <div class="meta">{{ .Date.Format "Mon, Jan 2, 2006" }}</div>
 +    </li>
 +    {{ end }}
 +</ul>
 +{{ end }}
 +{{< /code >}}
 +
 +### By Date
 +
 +{{< code file="layouts/partials/by-page-date.html" >}}
 +<!-- Groups content by month according to the "date" field in front matter -->
 +{{ range .Pages.GroupByDate "2006-01" }}
 +<h3>{{ .Key }}</h3>
 +<ul>
 +    {{ range .Pages }}
 +    <li>
 +    <a href="{{ .Permalink }}">{{ .Title }}</a>
 +    <div class="meta">{{ .Date.Format "Mon, Jan 2, 2006" }}</div>
 +    </li>
 +    {{ end }}
 +</ul>
 +{{ end }}
 +{{< /code >}}
 +
 +{{< new-in "0.97.0" >}} `GroupByDate` accepts the same time layouts as in [time.Format](/functions/dateformat/) and The `.Key` in the result will be localized for the current language.
 +
 +### By Publish Date
 +
 +{{< code file="layouts/partials/by-page-publish-date.html" >}}
 +<!-- Groups content by month according to the "publishDate" field in front matter -->
 +{{ range .Pages.GroupByPublishDate "2006-01" }}
 +<h3>{{ .Key }}</h3>
 +<ul>
 +    {{ range .Pages }}
 +    <li>
 +    <a href="{{ .Permalink }}">{{ .Title }}</a>
 +    <div class="meta">{{ .PublishDate.Format "Mon, Jan 2, 2006" }}</div>
 +    </li>
 +    {{ end }}
 +</ul>
 +{{ end }}
 +{{< /code >}}
 +
 +{{< new-in "0.97.0" >}} `GroupByDate` accepts the same time layouts as in [time.Format](/functions/dateformat/) and The `.Key` in the result will be localized for the current language.
 +
 +### By Lastmod
 +
 +{{< code file="layouts/partials/by-page-lastmod.html" >}}
 +<!-- Groups content by month according to the "lastMod" field in front matter -->
 +{{ range .Pages.GroupByLastmod "2006-01" }}
 +<h3>{{ .Key }}</h3>
 +<ul>
 +    {{ range .Pages }}
 +    <li>
 +    <a href="{{ .Permalink }}">{{ .Title }}</a>
 +    <div class="meta">{{ .Lastmod.Format "Mon, Jan 2, 2006" }}</div>
 +    </li>
 +    {{ end }}
 +</ul>
 +{{ end }}
 +{{< /code >}}
 +
 +{{< new-in "0.97.0" >}} `GroupByDate` accepts the same time layouts as in [time.Format](/functions/dateformat/) and The `.Key` in the result will be localized for the current language.
 +
 +### By Expiry Date
 +
 +{{< code file="layouts/partials/by-page-expiry-date.html" >}}
 +<!-- Groups content by month according to the "expiryDate" field in front matter -->
 +{{ range .Pages.GroupByExpiryDate "2006-01" }}
 +<h3>{{ .Key }}</h3>
 +<ul>
 +    {{ range .Pages }}
 +    <li>
 +    <a href="{{ .Permalink }}">{{ .Title }}</a>
 +    <div class="meta">{{ .ExpiryDate.Format "Mon, Jan 2, 2006" }}</div>
 +    </li>
 +    {{ end }}
 +</ul>
 +{{ end }}
 +{{< /code >}}
 +
 +{{< new-in "0.97.0" >}} `GroupByDate` accepts the same time layouts as in [time.Format](/functions/dateformat/) and The `.Key` in the result will be localized for the current language.
 +
 +### By Page Parameter
 +
 +{{< code file="layouts/partials/by-page-param.html" >}}
 +<!-- Groups content according to the "param_key" field in front matter -->
 +{{ range .Pages.GroupByParam "param_key" }}
 +<h3>{{ .Key }}</h3>
 +<ul>
 +    {{ range .Pages }}
 +    <li>
 +    <a href="{{ .Permalink }}">{{ .Title }}</a>
 +    <div class="meta">{{ .Date.Format "Mon, Jan 2, 2006" }}</div>
 +    </li>
 +    {{ end }}
 +</ul>
 +{{ end }}
 +{{< /code >}}
 +
 +### By Page Parameter in Date Format
 +
++The following template takes grouping by `date` a step further and uses Go's layout string. See the [`Format` function] for more examples of how to use Go's layout string to format dates in Hugo.
 +
 +{{< code file="layouts/partials/by-page-param-as-date.html" >}}
 +<!-- Groups content by month according to the "param_key" field in front matter -->
 +{{ range .Pages.GroupByParamDate "param_key" "2006-01" }}
 +<h3>{{ .Key }}</h3>
 +<ul>
 +    {{ range .Pages }}
 +    <li>
 +    <a href="{{ .Permalink }}">{{ .Title }}</a>
 +    <div class="meta">{{ .Date.Format "Mon, Jan 2, 2006" }}</div>
 +    </li>
 +    {{ end }}
 +</ul>
 +{{ end }}
 +{{< /code >}}
 +
 +### Reverse Key Order
 +
 +Ordering of groups is performed by keys in alphanumeric order (A–Z, 1–100) and in reverse chronological order (i.e., with the newest first) for dates.
 +
 +While these are logical defaults, they are not always the desired order. There are two different syntaxes to change Hugo's default ordering for groups, both of which work the same way.
 +
 +#### 1. Adding the Reverse Method
 +
 +```go-html-template
 +{{ range (.Pages.GroupBy "Section").Reverse }}
 +```
 +
 +```go-html-template
 +{{ range (.Pages.GroupByDate "2006-01").Reverse }}
 +```
 +
 +#### 2. Providing the Alternate Direction
 +
 +```go-html-template
 +{{ range .Pages.GroupByDate "2006-01" "asc" }}
 +```
 +
 +```go-html-template
 +{{ range .Pages.GroupBy "Section" "desc" }}
 +```
 +
 +### Order Within Groups
 +
 +Because Grouping returns a `{{.Key}}` and a slice of pages, all the ordering methods listed above are available.
 +
 +Here is the ordering for the example that follows:
 +
 +1. Content is grouped by month according to the `date` field in front matter.
 +2. Groups are listed in ascending order (i.e., the oldest groups first)
 +3. Pages within each respective group are ordered alphabetically according to the `title`.
 +
 +{{< code file="layouts/partials/by-group-by-page.html" >}}
 +{{ range .Pages.GroupByDate "2006-01" "asc" }}
 +<h3>{{ .Key }}</h3>
 +<ul>
 +    {{ range .Pages.ByTitle }}
 +    <li>
 +    <a href="{{ .Permalink }}">{{ .Title }}</a>
 +    <div class="meta">{{ .Date.Format "Mon, Jan 2, 2006" }}</div>
 +    </li>
 +    {{ end }}
 +</ul>
 +{{ end }}
 +{{< /code >}}
 +
 +## Filtering and Limiting Lists {#filtering-and-limiting-lists}
 +
 +Sometimes you only want to list a subset of the available content. A
 +common is to only display posts from [**main sections**][mainsections]
 +on the blog's homepage.
 +
 +See the documentation on [`where` function][wherefunction] and
 +[`first` function][firstfunction] for further details.
 +
 +[base]: /templates/base/
 +[bepsays]: https://bepsays.com/en/2016/12/19/hugo-018/
 +[directorystructure]: /getting-started/directory-structure/
 +[`Format` function]: /functions/format/
 +[front matter]: /content-management/front-matter/
 +[getpage]: /functions/getpage/
 +[homepage]: /templates/homepage/
 +[homepage]: /templates/homepage/
 +[mentalmodel]: https://webstyleguide.com/wsg3/3-information-architecture/3-site-structure.html
 +[pagevars]: /variables/page/
 +[partials]: /templates/partials/
 +[RSS 2.0]: https://cyber.harvard.edu/rss/rss.html "RSS 2.0 Specification"
 +[rss]: /templates/rss/
 +[sections]: /content-management/sections/
 +[sectiontemps]: /templates/section-templates/
 +[sitevars]: /variables/site/
 +[taxlists]: /templates/taxonomy-templates/#taxonomy-list-templates
 +[taxterms]: /templates/taxonomy-templates/#taxonomy-terms-templates
 +[taxvars]: /variables/taxonomy/
 +[views]: /templates/views/
 +[wherefunction]: /functions/where/
 +[firstfunction]: /functions/first/
 +[mainsections]: /functions/where/#mainsections
index 81a825493d1209db933b1842c00a44d59244cc3f,0000000000000000000000000000000000000000..0498c7e64fff137640c89ffeb51cf9f811a15a6c
mode 100644,000000..100644
--- /dev/null
@@@ -1,257 -1,0 +1,257 @@@
- A [media type][] (also known as _MIME type_ and _content type_) is a two-part identifier for file formats and format contents transmitted on the internet.
 +---
 +title: Custom Output Formats
 +linktitle: Custom Output Formats
 +description: Hugo can output content in multiple formats, including calendar events, e-book formats, Google AMP, and JSON search indexes, or any custom text format.
 +date: 2017-03-22
 +publishdate: 2017-03-22
 +lastmod: 2019-12-11
 +categories: [templates]
 +keywords: ["amp", "outputs", "rss"]
 +menu:
 +  docs:
 +    parent: "templates"
 +    weight: 18
 +weight: 18
 +sections_weight: 18
 +draft: false
 +aliases: [/templates/outputs/,/extras/output-formats/,/content-management/custom-outputs/]
 +toc: true
 +---
 +
 +This page describes how to properly configure your site with the media types and output formats, as well as where to create your templates for your custom outputs.
 +
 +## Media Types
 +
- The following table shows examples of different output formats, the suffix used, and Hugo's respective template [lookup order][]. All the examples in the table can:
++A [media type] (also known as _MIME type_ and _content type_) is a two-part identifier for file formats and format contents transmitted on the internet.
 +
 +This is the full set of built-in media types in Hugo:
 +
 +{{< datatable "media" "types" "type" "suffixes" >}}
 +
 +**Note:**
 +
 +- It is possible to add custom media types or change the defaults; e.g., if you want to change the suffix for `text/html` to `asp`.
 +- `Suffixes` are the values that will be used for URLs and filenames for that media type in Hugo.
 +- The `Type` is the identifier that must be used when defining new/custom `Output Formats` (see below).
 +- The full set of media types will be registered in Hugo's built-in development server to make sure they are recognized by the browser.
 +
 +To add or modify a media type, define it in a `mediaTypes` section in your [site configuration][config], either for all sites or for a given language.
 +
 +{{< code-toggle file="config" >}}
 +[mediaTypes]
 +  [mediaTypes."text/enriched"]
 +  suffixes = ["enr"]
 +  [mediaTypes."text/html"]
 +  suffixes = ["asp"]
 +{{</ code-toggle >}}
 +
 +The above example adds one new media type, `text/enriched`, and changes the suffix for the built-in `text/html` media type.
 +
 +**Note:** these media types are configured for **your output formats**. If you want to redefine one of Hugo's default output formats (e.g. `HTML`), you also need to redefine the media type. So, if you want to change the suffix of the `HTML` output format from `html` (default) to `htm`:
 +
 +```toml
 +[mediaTypes]
 +[mediaTypes."text/html"]
 +suffixes = ["htm"]
 +
 +# Redefine HTML to update its media type.
 +[outputFormats]
 +[outputFormats.HTML]
 +mediaType = "text/html"
 +```
 +
 +**Note** that for the above to work, you also need to add an `outputs` definition in your site config.
 +
 +## Output Format Definitions
 +
 +Given a media type and some additional configuration, you get an **Output Format**.
 +
 +This is the full set of Hugo's built-in output formats:
 +
 +{{< datatable "output" "formats" "name" "mediaType" "path" "baseName" "rel" "protocol" "isPlainText" "isHTML" "noUgly" "permalinkable" >}}
 +
 +- A page can be output in as many output formats as you want, and you can have an infinite amount of output formats defined **as long as they resolve to a unique path on the file system**. In the above table, the best example of this is `AMP` vs. `HTML`. `AMP` has the value `amp` for `Path` so it doesn't overwrite the `HTML` version; e.g. we can now have both `/index.html` and `/amp/index.html`.
 +- The `MediaType` must match the `Type` of an already defined media type.
 +- You can define new output formats or redefine built-in output formats; e.g., if you want to put `AMP` pages in a different path.
 +
 +To add or modify an output format, define it in an `outputFormats` section in your site's [configuration file](/getting-started/configuration/), either for all sites or for a given language.
 +
 +{{< code-toggle file="config" >}}
 +[outputFormats.MyEnrichedFormat]
 +mediaType = "text/enriched"
 +baseName = "myindex"
 +isPlainText = true
 +protocol = "bep://"
 +{{</ code-toggle >}}
 +
 +The above example is fictional, but if used for the homepage on a site with `baseURL` `https://example.org`, it will produce a plain text homepage with the URL `bep://example.org/myindex.enr`.
 +
 +### Configure Output Formats
 +
 +The following is the full list of configuration options for output formats and their default values:
 +
 +`name`
 +: the output format identifier. This is used to define what output format(s) you want for your pages.
 +
 +`mediaType`
 +: this must match the `Type` of a defined media type.
 +
 +`path`
 +: sub path to save the output files.
 +
 +`baseName`
 +: the base filename for the list filenames (homepage, etc.). **Default:** `index`.
 +
 +`rel`
 +: can be used to create `rel` values in `link` tags. **Default:** `alternate`.
 +
 +`protocol`
 +: will replace the "http://" or "https://" in your `baseURL` for this output format.
 +
 +`isPlainText`
 +: use Go's plain text templates parser for the templates. **Default:** `false`.
 +
 +`isHTML`
 +: used in situations only relevant for `HTML`-type formats; e.g., page aliases. **Default:** `false`.
 +
 +`noUgly`
 +: used to turn off ugly URLs If `uglyURLs` is set to `true` in your site. **Default:** `false`.
 +
 +`notAlternative`
 +: enable if it doesn't make sense to include this format in an `AlternativeOutputFormats` format listing on `Page` (e.g., with `CSS`). Note that we use the term _alternative_ and not _alternate_ here, as it does not necessarily replace the other format. **Default:** `false`.
 +
 +`permalinkable`
 +: make `.Permalink` and `.RelPermalink` return the rendering Output Format rather than main ([see below](#link-to-output-formats)). This is enabled by default for `HTML` and `AMP`. **Default:** `false`.
 +
 +`weight`
 +: Setting this to a non-zero value will be used as the first sort criteria.
 +
 +## Output Formats for Pages
 +
 +A `Page` in Hugo can be rendered to multiple _output formats_ on the file
 +system.
 +
 +### Default Output Formats
 +
 +Every `Page` has a [`Kind`][page_kinds] attribute, and the default Output
 +Formats are set based on that.
 +
 +| Kind       | Default Output Formats |
 +| ---------- | ---------------------- |
 +| `page`     | HTML                   |
 +| `home`     | HTML, RSS              |
 +| `section`  | HTML, RSS              |
 +| `taxonomy` | HTML, RSS              |
 +| `term`     | HTML, RSS              |
 +
 +### Customizing Output Formats
 +
 +This can be changed by defining an `outputs` list of output formats in either
 +the `Page` front matter or in the site configuration (either for all sites or
 +per language).
 +
 +Example from site config file:
 +
 +{{< code-toggle file="config" >}}
 +[outputs]
 +  home = ["HTML", "AMP", "RSS"]
 +  page = ["HTML"]
 +{{</ code-toggle >}}
 +
 +Note that in the above examples, the _output formats_ for `section`,
 +`taxonomy` and `term` will stay at their default value `["HTML", "RSS"]`.
 +
 +{{% page-kinds %}}
 +
 +* The `outputs` definition is per [`Page` `Kind`][page_kinds] (`page`, `home`, `section`, `taxonomy`, or `term`).
 +* The names (e.g. `HTML`, `AMP`) used must match the `Name` of a defined *Output Format*.
 +  * These names are case insensitive.
 +* These can be overridden per `Page` in the front matter of content files.
 +
 +The following is an example of `YAML` front matter in a content file that defines output formats for the rendered `Page`:
 +
 +```yaml
 +---
 +date: "2016-03-19"
 +outputs:
 +- html
 +- amp
 +- json
 +---
 +```
 +
 +## List Output formats
 +
 +Each `Page` has both an `.OutputFormats` (all formats, including the current) and an `.AlternativeOutputFormats` variable, the latter of which is useful for creating a `link rel` list in your site's `<head>`:
 +
 +```go-html-template
 +{{ range .AlternativeOutputFormats -}}
 +<link rel="{{ .Rel }}" type="{{ .MediaType.Type }}" href="{{ .Permalink | safeURL }}">
 +{{ end -}}
 +```
 +
 +## Link to Output Formats
 +
 +`.Permalink` and `.RelPermalink` on `Page` will return the first output format defined for that page (usually `HTML` if nothing else is defined). This is regardless of the template file they are being called from.
 +
 +__from `single.json.json`:__
 +```go-html-template
 +{{ .RelPermalink }} > /that-page/
 +{{ with  .OutputFormats.Get "json" -}}
 +{{ .RelPermalink }} > /that-page/index.json
 +{{- end }}
 +```
 +
 +In order for them to return the output format of the current template file instead, the given output format should have its `permalinkable` setting set to true.
 +
 +**Same template file as above with json output format's `permalinkable` set to true:**
 +
 +```go-html-template
 +{{ .RelPermalink }} > /that-page/index.json
 +{{ with  .OutputFormats.Get "html" -}}
 +{{ .RelPermalink }} > /that-page/
 +{{- end }}
 +```
 +
 +From content files, you can use the [`ref` or `relref` shortcodes](/content-management/shortcodes/#ref-and-relref):
 +
 +```go-html-template
 +[Neat]({{</* ref "blog/neat.md" "amp" */>}})
 +[Who]({{</* relref "about.md#who" "amp" */>}})
 +```
 +
 +## Templates for Your Output Formats
 +
 +A new output format needs a corresponding template in order to render anything useful.
 +
 +{{% note %}}
 +The key distinction for Hugo versions 0.20 and newer is that Hugo looks at an output format's `Name` and MediaType's `Suffixes` when choosing the template used to render a given `Page`.
 +{{% /note %}}
 +
++The following table shows examples of different output formats, the suffix used, and Hugo's respective template [lookup order]. All the examples in the table can:
 +
 +* Use a [base template][base].
 +* Include [partial templates][partials]
 +
 +{{< datatable "output" "layouts" "Example" "OutputFormat" "Suffix" "Template Lookup Order" >}}
 +
 +Hugo will now also detect the media type and output format of partials, if possible, and use that information to decide if the partial should be parsed as a plain text template or not.
 +
 +Hugo will look for the name given, so you can name it whatever you want. But if you want it treated as plain text, you should use the file suffix and, if needed, the name of the Output Format. The pattern is as follows:
 +
 +```go-html-template
 +[partial name].[OutputFormat].[suffix]
 +```
 +
 +The partial below is a plain text template (Output Format is `CSV`, and since this is the only output format with the suffix `csv`, we don't need to include the Output Format's `Name`):
 +
 +```go-html-template
 +{{ partial "mytextpartial.csv" . }}
 +```
 +
 +[base]: /templates/base/
 +[config]: /getting-started/configuration/
 +[lookup order]: /templates/lookup/
 +[media type]: https://en.wikipedia.org/wiki/Media_type
 +[partials]: /templates/partials/
 +[page_kinds]: /templates/section-templates/#page-kinds
index dc56c18c4c615f1837d3a63b2297b82006a366c4,0000000000000000000000000000000000000000..bdb10d5bba2f407603f8b73088b0a5c7befbb8e7
mode 100644,000000..100644
--- /dev/null
@@@ -1,158 -1,0 +1,158 @@@
- The real power of Hugo pagination shines when combined with the [`where` function][where] and its SQL-like operators: [`first`][], [`last`][], and [`after`][]. You can even [order the content][lists] the way you've become used to with Hugo.
 +---
 +title: Pagination
 +linktitle: Pagination
 +description: Hugo supports pagination for your homepage, section pages, and taxonomies.
 +date: 2017-02-01
 +publishdate: 2017-02-01
 +categories: [templates]
 +keywords: [lists,sections,pagination]
 +menu:
 +  docs:
 +    parent: "templates"
 +    weight: 140
 +weight: 140
 +sections_weight: 140
 +aliases: [/extras/pagination,/doc/pagination/]
 +toc: true
 +---
 +
++The real power of Hugo pagination shines when combined with the [`where` function][where] and its SQL-like operators: [`first`], [`last`], and [`after`]. You can even [order the content][lists] the way you've become used to with Hugo.
 +
 +## Configure Pagination
 +
 +Pagination can be configured in your [site configuration][configuration]:
 +
 +`paginate`
 +: default = `10`. This setting can be overridden within the template.
 +
 +`paginatePath`
 +: default = `page`. Allows you to set a different path for your pagination pages.
 +
 +Setting `paginate` to a positive value will split the list pages for the homepage, sections and taxonomies into chunks of that size. But note that the generation of the pagination pages for sections, taxonomies and homepage is *lazy* --- the pages will not be created if not referenced by a `.Paginator` (see below).
 +
 +`paginatePath` is used to adapt the `URL` to the pages in the paginator (the default setting will produce URLs on the form `/page/1/`.
 +
 +## List Paginator Pages
 +
 +{{% warning %}}
 +`.Paginator` is provided to help you build a pager menu. This feature is currently only supported on homepage and list pages (i.e., taxonomies and section lists).
 +{{% /warning %}}
 +
 +There are two ways to configure and use a `.Paginator`:
 +
 +1. The simplest way is just to call `.Paginator.Pages` from a template. It will contain the pages for *that page*.
 +2. Select another set of pages with the available template functions and ordering options, and pass the slice to `.Paginate`, e.g.
 +  * `{{ range (.Paginate ( first 50 .Pages.ByTitle )).Pages }}` or
 +  * `{{ range (.Paginate .RegularPagesRecursive).Pages }}`.
 +
 +For a given **Page**, it's one of the options above. The `.Paginator` is static and cannot change once created.
 +
 +If you call `.Paginator` or `.Paginate` multiple times on the same page, you should ensure all the calls are identical. Once *either* `.Paginator` or `.Paginate` is called while generating a page, its result is cached, and any subsequent similar call will reuse the cached result. This means that any such calls which do not match the first one will not behave as written.
 +
 +(Remember that function arguments are eagerly evaluated, so a call like `$paginator := cond x .Paginator (.Paginate .RegularPagesRecursive)` is an example of what you should *not* do. Use `if`/`else` instead to ensure exactly one evaluation.)
 +
 +The global page size setting (`Paginate`) can be overridden by providing a positive integer as the last argument. The examples below will give five items per page:
 +
 +* `{{ range (.Paginator 5).Pages }}`
 +* `{{ $paginator := .Paginate (where .Pages "Type" "posts") 5 }}`
 +
 +It is also possible to use the `GroupBy` functions in combination with pagination:
 +
 +```go-html-template
 +{{ range (.Paginate (.Pages.GroupByDate "2006")).PageGroups  }}
 +```
 +
 +## Build the navigation
 +
 +The `.Paginator` contains enough information to build a paginator interface.
 +
 +The easiest way to add this to your pages is to include the built-in template (with `Bootstrap`-compatible styles):
 +
 +```go-html-template
 +{{ template "_internal/pagination.html" . }}
 +```
 +
 +{{% note "When to Create `.Paginator`" %}}
 +If you use any filters or ordering functions to create your `.Paginator` *and* you want the navigation buttons to be shown before the page listing, you must create the `.Paginator` before it's used.
 +{{% /note %}}
 +
 +The following example shows how to create `.Paginator` before its used:
 +
 +```go-html-template
 +{{ $paginator := .Paginate (where .Pages "Type" "posts") }}
 +{{ template "_internal/pagination.html" . }}
 +{{ range $paginator.Pages }}
 +   {{ .Title }}
 +{{ end }}
 +```
 +
 +Without the `where` filter, the above example is even simpler:
 +
 +```go-html-template
 +{{ template "_internal/pagination.html" . }}
 +{{ range .Paginator.Pages }}
 +   {{ .Title }}
 +{{ end }}
 +```
 +
 +If you want to build custom navigation, you can do so using the `.Paginator` object, which includes the following properties:
 +
 +`PageNumber`
 +: The current page's number in the pager sequence
 +
 +`URL`
 +: The relative URL to the current pager
 +
 +`Pages`
 +: The pages in the current pager
 +
 +`NumberOfElements`
 +: The number of elements on this page
 +
 +`HasPrev`
 +: Whether there are page(s) before the current
 +
 +`Prev`
 +: The pager for the previous page
 +
 +`HasNext`
 +: Whether there are page(s) after the current
 +
 +`Next`
 +: The pager for the next page
 +
 +`First`
 +: The pager for the first page
 +
 +`Last`
 +: The pager for the last page
 +
 +`Pagers`
 +: A list of pagers that can be used to build a pagination menu
 +
 +`PageSize`
 +: Size of each pager
 +
 +`TotalPages`
 +: The number of pages in the paginator
 +
 +`TotalNumberOfElements`
 +: The number of elements on all pages in this paginator
 +
 +## Additional information
 +
 +The pages are built on the following form (`BLANK` means no value):
 +
 +```txt
 +[SECTION/TAXONOMY/BLANK]/index.html
 +[SECTION/TAXONOMY/BLANK]/page/1/index.html => redirect to  [SECTION/TAXONOMY/BLANK]/index.html
 +[SECTION/TAXONOMY/BLANK]/page/2/index.html
 +....
 +```
 +
 +[`first`]: /functions/first/
 +[`last`]: /functions/last/
 +[`after`]: /functions/after/
 +[configuration]: /getting-started/configuration/
 +[lists]: /templates/lists/
 +[where]: /functions/where/
index b3826d56d59b340f0d5483b984cdc88cb3e60390,0000000000000000000000000000000000000000..1899f87d5e1cc78dc421b1f0e944a3b19a2ed903
mode 100644,000000..100644
--- /dev/null
@@@ -1,206 -1,0 +1,206 @@@
- Partial templates---like [single page templates][singletemps] and [list page templates][listtemps]---have a specific [lookup order][]. However, partials are simpler in that Hugo will only check in two places:
 +---
 +title: Partial Templates
 +linktitle: Partial Templates
 +description: Partials are smaller, context-aware components in your list and page templates that can be used economically to keep your templating DRY.
 +date: 2017-02-01
 +publishdate: 2017-02-01
 +lastmod: 2017-02-01
 +categories: [templates]
 +keywords: [lists,sections,partials]
 +menu:
 +  docs:
 +    parent: "templates"
 +    weight: 90
 +weight: 90
 +sections_weight: 90
 +draft: false
 +aliases: [/templates/partial/,/layout/chrome/,/extras/analytics/]
 +toc: true
 +---
 +
 +{{< youtube pjS4pOLyB7c >}}
 +
 +## Partial Template Lookup Order
 +
++Partial templates---like [single page templates][singletemps] and [list page templates][listtemps]---have a specific [lookup order]. However, partials are simpler in that Hugo will only check in two places:
 +
 +1. `layouts/partials/*<PARTIALNAME>.html`
 +2. `themes/<THEME>/layouts/partials/*<PARTIALNAME>.html`
 +
 +This allows a theme's end user to copy a partial's contents into a file of the same name for [further customization][customize].
 +
 +## Use Partials in your Templates
 +
 +All partials for your Hugo project are located in a single `layouts/partials` directory. For better organization, you can create multiple subdirectories within `partials` as well:
 +
 +```txt
 +layouts/
 +└── partials/
 +    ├── footer/
 +    │   ├── scripts.html
 +    │   └── site-footer.html
 +    ├── head/
 +    │   ├── favicons.html
 +    │   ├── metadata.html
 +    │   ├── prerender.html
 +    │   └── twitter.html
 +    └── header/
 +        ├── site-header.html
 +        └── site-nav.html
 +```
 +
 +All partials are called within your templates using the following pattern:
 +
 +```go-html-template
 +{{ partial "<PATH>/<PARTIAL>.html" . }}
 +```
 +
 +{{% note %}}
 +One of the most common mistakes with new Hugo users is failing to pass a context to the partial call. In the pattern above, note how "the dot" (`.`) is required as the second argument to give the partial context. You can read more about "the dot" in the [Hugo templating introduction](/templates/introduction/).
 +{{% /note %}}
 +
 +{{% note %}}
 +`<PARTIAL>` including `baseof` is reserved. ([#5373](https://github.com/gohugoio/hugo/issues/5373))
 +{{% /note %}}
 +
 +As shown in the above example directory structure, you can nest your directories within `partials` for better source organization. You only need to call the nested partial's path relative to the `partials` directory:
 +
 +```go-html-template
 +{{ partial "header/site-header.html" . }}
 +{{ partial "footer/scripts.html" . }}
 +```
 +
 +### Variable Scoping
 +
 +The second argument in a partial call is the variable being passed down. The above examples are passing the `.`, which tells the template receiving the partial to apply the current [context][context].
 +
 +This means the partial will *only* be able to access those variables. The partial is isolated and *has no access to the outer scope*. From within the partial, `$.Var` is equivalent to `.Var`.
 +
 +## Returning a value from a Partial
 +
 +In addition to outputting markup, partials can be used to return a value of any type. In order to return a value, a partial must include a lone `return` statement *at the end of the partial*.
 +
 +### Example GetFeatured
 +
 +```go-html-template
 +{{/* layouts/partials/GetFeatured.html */}}
 +{{ return first . (where site.RegularPages "Params.featured" true) }}
 +```
 +
 +```go-html-template
 +{{/* layouts/index.html */}}
 +{{ range partial "GetFeatured.html" 5 }}
 +  [...]
 +{{ end }}
 +```
 +
 +### Example GetImage
 +
 +```go-html-template
 +{{/* layouts/partials/GetImage.html */}}
 +{{ $image := false }}
 +{{ with .Params.gallery }}
 +  {{ $image = index . 0 }}
 +{{ end }}
 +{{ with .Params.image }}
 +  {{ $image = . }}
 +{{ end }}
 +{{ return $image }}
 +```
 +
 +```go-html-template
 +{{/* layouts/_default/single.html */}}
 +{{ with partial "GetImage.html" . }}
 +  [...]
 +{{ end }}
 +```
 +
 +{{% note %}}
 +Only one `return` statement is allowed per partial file.
 +{{% /note %}}
 +
 +## Inline Partials
 +
 +You can also define partials inline in the template. But remember that template namespace is global, so you need to make sure that the names are unique to avoid conflicts.
 +
 +```go-html-template
 +Value: {{ partial "my-inline-partial.html" . }}
 +
 +{{ define "partials/my-inline-partial.html" }}
 +{{ $value := 32 }}
 +{{ return $value }}
 +{{ end }}
 +```
 +
 +## Cached Partials
 +
 +The [`partialCached` template function][partialcached] can offer significant performance gains for complex templates that don't need to be re-rendered on every invocation. The simplest usage is as follows:
 +
 +```go-html-template
 +{{ partialCached "footer.html" . }}
 +```
 +
 +You can also pass additional parameters to `partialCached` to create *variants* of the cached partial.
 +
 +For example, you can tell Hugo to only render the partial `footer.html` once per section:
 +
 +```go-html-template
 +{{ partialCached "footer.html" . .Section }}
 +```
 +
 +If you need to pass additional parameters to create unique variants, you can pass as many variant parameters as you need:
 +
 +```go-html-template
 +{{ partialCached "footer.html" . .Params.country .Params.province }}
 +```
 +
 +Note that the variant parameters are not made available to the underlying partial template. They are only use to create a unique cache key.
 +
 +### Example `header.html`
 +
 +The following `header.html` partial template is used for [spf13.com](https://spf13.com/):
 +
 +{{< code file="layouts/partials/header.html" download="header.html" >}}
 +<!DOCTYPE html>
 +<html class="no-js" lang="en-US" prefix="og: http://ogp.me/ns# fb: http://ogp.me/ns/fb#">
 +<head>
 +    <meta charset="utf-8">
 +
 +    {{ partial "meta.html" . }}
 +
 +    <base href="{{ .Site.BaseURL }}">
 +    <title> {{ .Title }} : spf13.com </title>
 +    <link rel="canonical" href="{{ .Permalink }}">
 +    {{ if .RSSLink }}<link href="{{ .RSSLink }}" rel="alternate" type="application/rss+xml" title="{{ .Title }}" />{{ end }}
 +
 +    {{ partial "head_includes.html" . }}
 +</head>
 +{{< /code >}}
 +
 +{{% note %}}
 +The `header.html` example partial was built before the introduction of block templates to Hugo. Read more on [base templates and blocks](/templates/base/) for defining the outer chrome or shell of your master templates (i.e., your site's head, header, and footer). You can even combine blocks and partials for added flexibility.
 +{{% /note %}}
 +
 +### Example `footer.html`
 +
 +The following `footer.html` partial template is used for [spf13.com](https://spf13.com/):
 +
 +{{< code file="layouts/partials/footer.html" download="footer.html" >}}
 +<footer>
 +  <div>
 +    <p>
 +    &copy; 2013-14 Steve Francia.
 +    <a href="https://creativecommons.org/licenses/by/3.0/" title="Creative Commons Attribution">Some rights reserved</a>;
 +    please attribute properly and link back.
 +    </p>
 +  </div>
 +</footer>
 +{{< /code >}}
 +
 +[context]: /templates/introduction/ "The most easily overlooked concept to understand about Go templating is how the dot always refers to the current context."
 +[customize]: /themes/customizing/ "Hugo provides easy means to customize themes as long as users are familiar with Hugo's template lookup order."
 +[listtemps]: /templates/lists/ "To effectively leverage Hugo's system, see how Hugo handles list pages, where content for sections, taxonomies, and the homepage are listed and ordered."
 +[lookup order]: /templates/lookup-order/ "To keep your templating dry, read the documentation on Hugo's lookup order."
 +[partialcached]: /functions/partialcached/ "Use the partial cached function to improve build times in cases where Hugo can cache partials that don't need to be rendered with every page."
 +[singletemps]: /templates/single-page-templates/ "The most common form of template in Hugo is the single content template. Read the docs on how to create templates for individual pages."
 +[themes]: /themes/
index 15accbe7a9dfa9ca474c5ed2aca01bfa22b8a3fd,0000000000000000000000000000000000000000..1c9314bb9f34b31f4f0c03d692d06e36b79317fe
mode 100644,000000..100644
--- /dev/null
@@@ -1,416 -1,0 +1,416 @@@
- Shortcodes are a means to consolidate templating into small, reusable snippets that you can embed directly inside your content. In this sense, you can think of shortcodes as the intermediary between [page and list templates][templates] and [basic content files][].
 +---
 +title: Create Your Own Shortcodes
 +linktitle: Shortcode Templates
 +description: You can extend Hugo's built-in shortcodes by creating your own using the same templating syntax as that for single and list pages.
 +date: 2017-02-01
 +publishdate: 2017-02-01
 +lastmod: 2017-02-01
 +categories: [templates]
 +keywords: [shortcodes,templates]
 +menu:
 +  docs:
 +    parent: "templates"
 +    weight: 100
 +weight: 100
 +sections_weight: 100
 +draft: false
 +aliases: []
 +toc: true
 +---
 +
- To create a shortcode, place an HTML template in the `layouts/shortcodes` directory of your [source organization][]. Consider the file name carefully since the shortcode name will mirror that of the file but without the `.html` extension. For example, `layouts/shortcodes/myshortcode.html` will be called with either `{{</* myshortcode /*/>}}` or `{{%/* myshortcode /*/%}}` depending on the type of parameters you choose.
++Shortcodes are a means to consolidate templating into small, reusable snippets that you can embed directly inside your content. In this sense, you can think of shortcodes as the intermediary between [page and list templates][templates] and [basic content files].
 +
 +{{% note %}}
 +Hugo also ships with built-in shortcodes for common use cases. (See [Content Management: Shortcodes](/content-management/shortcodes/).)
 +{{% /note %}}
 +
 +## Create Custom Shortcodes
 +
 +Hugo's built-in shortcodes cover many common, but not all, use cases. Luckily, Hugo provides the ability to easily create custom shortcodes to meet your website's needs.
 +
 +{{< youtube Eu4zSaKOY4A >}}
 +
 +### File Location
 +
- Shortcode templates have a simple [lookup order][]:
++To create a shortcode, place an HTML template in the `layouts/shortcodes` directory of your [source organization]. Consider the file name carefully since the shortcode name will mirror that of the file but without the `.html` extension. For example, `layouts/shortcodes/myshortcode.html` will be called with either `{{</* myshortcode /*/>}}` or `{{%/* myshortcode /*/%}}` depending on the type of parameters you choose.
 +
 +You can organize your shortcodes in subfolders, e.g. in `layouts/shortcodes/boxes`. These shortcodes would then be accessible with their relative path, e.g:
 +
 +```go-html-template
 +{{</* boxes/square */>}}
 +```
 +
 +Note the forward slash.
 +
 +### Shortcode Template Lookup Order
 +
- The following is taken from `highlight`, which is a [built-in shortcode][] that ships with Hugo.
++Shortcode templates have a simple [lookup order]:
 +
 +1. `/layouts/shortcodes/<SHORTCODE>.html`
 +2. `/themes/<THEME>/layouts/shortcodes/<SHORTCODE>.html`
 +
 +### Positional vs Named Parameters
 +
 +You can create shortcodes using the following types of parameters:
 +
 +* Positional parameters
 +* Named parameters
 +* Positional *or* named parameters (i.e, "flexible")
 +
 +In shortcodes with positional parameters, the order of the parameters is important. If a shortcode has a single required value (e.g., the `youtube` shortcode below), positional parameters work very well and require less typing from content authors.
 +
 +For more complex layouts with multiple or optional parameters, named parameters work best. While less terse, named parameters require less memorization from a content author and can be added in a shortcode declaration in any order.
 +
 +Allowing both types of parameters (i.e., a "flexible" shortcode) is useful for complex layouts where you want to set default values that can be easily overridden by users.
 +
 +### Access Parameters
 +
 +All shortcode parameters can be accessed via the `.Get` method. Whether you pass a key (i.e., string) or a number to the `.Get` method depends on whether you are accessing a named or positional parameter, respectively.
 +
 +To access a parameter by name, use the `.Get` method followed by the named parameter as a quoted string:
 +
 +```go-html-template
 +{{ .Get "class" }}
 +```
 +
 +To access a parameter by position, use the `.Get` followed by a numeric position, keeping in mind that positional parameters are zero-indexed:
 +
 +```go-html-template
 +{{ .Get 0 }}
 +```
 +
 +For the second position, you would just use:
 +
 +```go-html-template
 +{{ .Get 1 }}
 +```
 +
 +`with` is great when the output depends on a parameter being set:
 +
 +```go-html-template
 +{{ with .Get "class" }} class="{{ . }}"{{ end }}
 +```
 +
 +`.Get` can also be used to check if a parameter has been provided. This is
 +most helpful when the condition depends on either of the values, or both:
 +
 +```go-html-template
 +{{ if or (.Get "title") (.Get "alt") }} alt="{{ with .Get "alt" }}{{ . }}{{ else }}{{ .Get "title" }}{{ end }}"{{ end }}
 +```
 +
 +#### `.Inner`
 +
 +If a closing shortcode is used, the `.Inner` variable will be populated with the content between the opening and closing shortcodes. If a closing shortcode is required, you can check the length of `.Inner` as an indicator of its existence.
 +
 +A shortcode with content declared via the `.Inner` variable can also be declared without the content and without the closing by using the self-closing syntax:
 +
 +```go-html-template
 +{{</* innershortcode /*/>}}
 +```
 +
 +{{% warning %}}
 +Any shortcode that refers to `.Inner` must be closed or self-closed.
 +
 +{{% /warning %}}
 +
 +#### `.Params`
 +
 +The `.Params` variable in shortcodes contains the list parameters passed to shortcode for more complicated use cases. You can also access higher-scoped parameters with the following logic:
 +
 +`$.Params`
 +: these are the parameters passed directly into the shortcode declaration (e.g., a YouTube video ID)
 +
 +`$.Page.Params`
 +: refers to the page's params; the "page" in this case refers to the content file in which the shortcode is declared (e.g., a `shortcode_color` field in a content's front matter could be accessed via `$.Page.Params.shortcode_color`).
 +
 +`$.Page.Site.Params`
 +: refers to global variables as defined in your [site's configuration file][config].
 +
 +#### `.IsNamedParams`
 +
 +The `.IsNamedParams` variable checks whether the shortcode declaration uses named parameters and returns a boolean value.
 +
 +For example, you could create an `image` shortcode that can take either a `src` named parameter or the first positional parameter, depending on the preference of the content's author. Let's assume the `image` shortcode is called as follows:
 +
 +```go-html-template
 +{{</* image src="images/my-image.jpg" */>}}
 +```
 +
 +You could then include the following as part of your shortcode templating:
 +
 +```go-html-template
 +{{ if .IsNamedParams }}
 +<img src="{{ .Get "src" }}" alt="">
 +{{ else }}
 +<img src="{{ .Get 0 }}" alt="">
 +{{ end }}
 +```
 +
 +See the [example Vimeo shortcode][vimeoexample] below for `.IsNamedParams` in action.
 +
 +{{% warning %}}
 +While you can create shortcode templates that accept both positional and named parameters, you *cannot* declare shortcodes in content with a mix of parameter types. Therefore, a shortcode declared like `{{</* image src="images/my-image.jpg" "This is my alt text" */>}}` will return an error.
 +{{% /warning %}}
 +
 +You can also use the variable `.Page` to access all the normal [page variables][pagevars].
 +
 +A shortcodes can also be nested. In a nested shortcode, you can access the parent shortcode context with [`.Parent` variable][shortcodesvars]. This can be very useful for inheritance of common shortcode parameters from the root.
 +
 +### Checking for Existence
 +
 +You can check if a specific shortcode is used on a page by calling `.HasShortcode` in that page template, providing the name of the shortcode. This is sometimes useful when you want to include specific scripts or styles in the header that are only used by that shortcode.
 +
 +## Custom Shortcode Examples
 +
 +The following are examples of the different types of shortcodes you can create via shortcode template files in `/layouts/shortcodes`.
 +
 +### Single-word Example: `year`
 +
 +Let's assume you would like to keep mentions of your copyright year current in your content files without having to continually review your Markdown. Your goal is to be able to call the shortcode as follows:
 +
 +```go-html-template
 +{{</* year */>}}
 +```
 +
 +{{< code file="/layouts/shortcodes/year.html" >}}
 +{{ now.Format "2006" }}
 +{{< /code >}}
 +
 +### Single Positional Example: `youtube`
 +
 +Embedded videos are a common addition to Markdown content that can quickly become unsightly. The following is the code used by [Hugo's built-in YouTube shortcode][youtubeshortcode]:
 +
 +```go-html-template
 +{{</* youtube 09jf3ow9jfw */>}}
 +```
 +
 +Would load the template at `/layouts/shortcodes/youtube.html`:
 +
 +{{< code file="/layouts/shortcodes/youtube.html" >}}
 +<div class="embed video-player">
 +<iframe class="youtube-player" type="text/html" width="640" height="385" src="https://www.youtube.com/embed/{{ index .Params 0 }}" allowfullscreen frameborder="0">
 +</iframe>
 +</div>
 +{{< /code >}}
 +
 +{{< code file="youtube-embed.html" copy="false" >}}
 +<div class="embed video-player">
 +    <iframe class="youtube-player" type="text/html"
 +        width="640" height="385"
 +        src="https://www.youtube.com/embed/09jf3ow9jfw"
 +        allowfullscreen frameborder="0">
 +    </iframe>
 +</div>
 +{{< /code >}}
 +
 +### Single Named Example: `image`
 +
 +Let's say you want to create your own `img` shortcode rather than use Hugo's built-in [`figure` shortcode][figure]. Your goal is to be able to call the shortcode as follows in your content files:
 +
 +{{< code file="content-image.md" >}}
 +{{</* img src="/media/spf13.jpg" title="Steve Francia" */>}}
 +{{< /code >}}
 +
 +You have created the shortcode at `/layouts/shortcodes/img.html`, which loads the following shortcode template:
 +
 +{{< code file="/layouts/shortcodes/img.html" >}}
 +<!-- image -->
 +<figure {{ with .Get "class" }}class="{{.}}"{{ end }}>
 +    {{ with .Get "link" }}<a href="{{ . }}">{{ end }}
 +        <img src="{{ .Get "src" }}" {{ if or (.Get "alt") (.Get "caption") }}alt="{{ with .Get "alt" }}{{ . }}{{ else }}{{ .Get "caption" }}{{ end }}"{{ end }} />
 +    {{ if .Get "link" }}</a>{{ end }}
 +    {{ if or (or (.Get "title") (.Get "caption")) (.Get "attr") }}
 +    <figcaption>{{ if isset .Params "title" }}
 +        <h4>{{ .Get "title" }}</h4>{{ end }}
 +        {{ if or (.Get "caption") (.Get "attr") }}<p>
 +        {{ .Get "caption" }}
 +        {{ with .Get "attrlink" }}<a href="{{ . }}"> {{ end }}
 +            {{ .Get "attr" }}
 +        {{ if .Get "attrlink" }}</a> {{ end }}
 +        </p> {{ end }}
 +    </figcaption>
 +    {{ end }}
 +</figure>
 +<!-- image -->
 +{{< /code >}}
 +
 +Would be rendered as:
 +
 +{{< code file="img-output.html" copy="false" >}}
 +<figure>
 +    <img src="/media/spf13.jpg"  />
 +    <figcaption>
 +        <h4>Steve Francia</h4>
 +    </figcaption>
 +</figure>
 +{{< /code >}}
 +
 +### Single Flexible Example: `vimeo`
 +
 +```go-html-template
 +{{</* vimeo 49718712 */>}}
 +{{</* vimeo id="49718712" class="flex-video" */>}}
 +```
 +
 +Would load the template found at `/layouts/shortcodes/vimeo.html`:
 +
 +{{< code file="/layouts/shortcodes/vimeo.html" >}}
 +{{ if .IsNamedParams }}
 +  <div class="{{ if .Get "class" }}{{ .Get "class" }}{{ else }}vimeo-container{{ end }}">
 +    <iframe src="https://player.vimeo.com/video/{{ .Get "id" }}" allowfullscreen></iframe>
 +  </div>
 +{{ else }}
 +  <div class="{{ if len .Params | eq 2 }}{{ .Get 1 }}{{ else }}vimeo-container{{ end }}">
 +    <iframe src="https://player.vimeo.com/video/{{ .Get 0 }}" allowfullscreen></iframe>
 +  </div>
 +{{ end }}
 +{{< /code >}}
 +
 +Would be rendered as:
 +
 +{{< code file="vimeo-iframes.html" copy="false" >}}
 +<div class="vimeo-container">
 +  <iframe src="https://player.vimeo.com/video/49718712" allowfullscreen></iframe>
 +</div>
 +<div class="flex-video">
 +  <iframe src="https://player.vimeo.com/video/49718712" allowfullscreen></iframe>
 +</div>
 +{{< /code >}}
 +
 +### Paired Example: `highlight`
 +
++The following is taken from `highlight`, which is a [built-in shortcode] that ships with Hugo.
 +
 +{{< code file="highlight-example.md" >}}
 +{{</* highlight html */>}}
 +  <html>
 +    <body> This HTML </body>
 +  </html>
 +{{</* /highlight */>}}
 +{{< /code >}}
 +
 +The template for the `highlight` shortcode uses the following code, which is already included in Hugo:
 +
 +```go-html-template
 +{{ .Get 0 | highlight .Inner }}
 +```
 +
 +The rendered output of the HTML example code block will be as follows:
 +
 +{{< code file="syntax-highlighted.html" copy="false" >}}
 +<div class="highlight" style="background: #272822"><pre style="line-height: 125%"><span style="color: #f92672">&lt;html&gt;</span>
 +    <span style="color: #f92672">&lt;body&gt;</span> This HTML <span style="color: #f92672">&lt;/body&gt;</span>
 +<span style="color: #f92672">&lt;/html&gt;</span>
 +</pre></div>
 +{{< /code >}}
 +
 +### Nested Shortcode: Image Gallery
 +
 +Hugo's [`.Parent` shortcode variable][parent] provides access to the parent shortcode context when the shortcode in question is called within the context of a *parent* shortcode. This provides an inheritance model for common shortcode parameters.
 +
 +The following example is contrived but demonstrates the concept. Assume you have a `gallery` shortcode that expects one named `class` parameter:
 +
 +{{< code file="layouts/shortcodes/gallery.html" >}}
 +<div class="{{ .Get "class" }}">
 +  {{ .Inner }}
 +</div>
 +{{< /code >}}
 +
 +You also have an `img` shortcode with a single named `src` parameter that you want to call inside of `gallery` and other shortcodes, so that the parent defines the context of each `img`:
 +
 +{{< code file="layouts/shortcodes/img.html" >}}
 +{{- $src := .Get "src" -}}
 +{{- with .Parent -}}
 +  <img src="{{$src}}" class="{{ .Get "class" }}-image">
 +{{- else -}}
 +  <img src="{{$src}}">
 +{{- end -}}
 +{{< /code >}}
 +
 +You can then call your shortcode in your content as follows:
 +
 +```go-html-template
 +{{</* gallery class="content-gallery" */>}}
 +  {{</* img src="/images/one.jpg" */>}}
 +  {{</* img src="/images/two.jpg" */>}}
 +{{</* /gallery */>}}
 +{{</* img src="/images/three.jpg" */>}}
 +```
 +
 +This will output the following HTML. Note how the first two `img` shortcodes inherit the `class` value of `content-gallery` set with the call to the parent `gallery`, whereas the third `img` only uses `src`:
 +
 +```html
 +<div class="content-gallery">
 +    <img src="/images/one.jpg" class="content-gallery-image">
 +    <img src="/images/two.jpg" class="content-gallery-image">
 +</div>
 +<img src="/images/three.jpg">
 +```
 +
 +## Error Handling in Shortcodes
 +
 +Use the [errorf](/functions/errorf) template func and [.Position](/variables/shortcodes/) variable to get useful error messages in shortcodes:
 +
 +```bash
 +{{ with .Get "name" }}
 +{{ else }}
 +{{ errorf "missing value for param 'name': %s" .Position }}
 +{{ end }}
 +```
 +
 +When the above fails, you will see an `ERROR` log similar to the below:
 +
 +```bash
 +ERROR 2018/11/07 10:05:55 missing value for param name: "/Users/bep/dev/go/gohugoio/hugo/docs/content/en/variables/shortcodes.md:32:1"
 +```
 +
 +## More Shortcode Examples
 +
 +More shortcode examples can be found in the [shortcodes directory for spf13.com][spfscs] and the [shortcodes directory for the Hugo docs][docsshortcodes].
 +
 +## Inline Shortcodes
 +
 +You can also implement your shortcodes inline -- e.g. where you use them in the content file. This can be useful for scripting that you only need in one place.
 +
 +This feature is disabled by default, but can be enabled in your site config:
 +
 +{{< code-toggle file="config">}}
 +enableInlineShortcodes = true
 +{{< /code-toggle >}}
 +
 +It is disabled by default for security reasons. The security model used by Hugo's template handling assumes that template authors are trusted, but that the content files are not, so the templates are injection-safe from malformed input data. But in most situations you have full control over the content, too, and then `enableInlineShortcodes = true` would be considered safe. But it's something to be aware of: It allows ad-hoc [Go Text templates](https://golang.org/pkg/text/template/) to be executed from the content files.
 +
 +And once enabled, you can do this in your content files:
 +
 + ```go-text-template
 + {{</* time.inline */>}}{{ now }}{{</* /time.inline */>}}
 + ```
 +
 +The above will print the current date and time.
 +
 + Note that an inline shortcode's inner content is parsed and executed as a Go text template with the same context as a regular shortcode template.
 +
 +This means that the current page can be accessed via `.Page.Title` etc. This also means that there are no concept of "nested inline shortcodes".
 +
 +The same inline shortcode can be reused later in the same content file, with different params if needed, using the self-closing syntax:
 +
 + ```go-text-template
 +{{</* time.inline /*/>}}
 +```
 +
 +[basic content files]: /content-management/formats/ "See how Hugo leverages markdown--and other supported formats--to create content for your website."
 +[built-in shortcode]: /content-management/shortcodes/
 +[config]: /getting-started/configuration/ "Learn more about Hugo's built-in configuration variables as well as how to us your site's configuration file to include global key-values that can be used throughout your rendered website."
 +[Content Management: Shortcodes]: /content-management/shortcodes/#using-hugo-s-built-in-shortcodes "Check this section if you are not familiar with the definition of what a shortcode is or if you are unfamiliar with how to use Hugo's built-in shortcodes in your content files."
 +[source organization]: /getting-started/directory-structure/#directory-structure-explained "Learn how Hugo scaffolds new sites and what it expects to find in each of your directories."
 +[docsshortcodes]: https://github.com/gohugoio/hugo/tree/master/docs/layouts/shortcodes "See the shortcode source directory for the documentation site you're currently reading."
 +[figure]: /content-management/shortcodes/#figure
 +[hugosc]: /content-management/shortcodes/#using-hugo-s-built-in-shortcodes
 +[lookup order]: /templates/lookup-order/ "See the order in which Hugo traverses your template files to decide where and how to render your content at build time"
 +[pagevars]: /variables/page/ "See which variables you can leverage in your templating for page vs list templates."
 +[parent]: /variables/shortcodes/
 +[shortcodesvars]: /variables/shortcodes/ "Certain variables are specific to shortcodes, although most .Page variables can be accessed within your shortcode template."
 +[spfscs]: https://github.com/spf13/spf13.com/tree/master/layouts/shortcodes "See more examples of shortcodes by visiting the shortcode directory of the source for spf13.com, the blog of Hugo's creator, Steve Francia."
 +[templates]: /templates/ "The templates section of the Hugo docs."
 +[vimeoexample]: #single-flexible-example-vimeo
 +[youtubeshortcode]: /content-management/shortcodes/#youtube "See how to use Hugo's built-in YouTube shortcode."
index b6d8241c2800dcef94e227f71b2bd64f83ab6959,0000000000000000000000000000000000000000..2b0cfe0e21502b3931c7ee187eacbcb99a6fb57b
mode 100644,000000..100644
--- /dev/null
@@@ -1,92 -1,0 +1,92 @@@
- Content pages are of the type `page` and will therefore have all the [page variables][pagevars] and [site variables][] available to use in their templates.
 +---
 +title: Single Page Templates
 +linktitle:
 +description: The primary view of content in Hugo is the single view. Hugo will render every Markdown file provided with a corresponding single template.
 +date: 2017-02-01
 +publishdate: 2017-02-01
 +lastmod: 2017-04-06
 +categories: [templates]
 +keywords: [page,templates]
 +menu:
 +  docs:
 +    parent: "templates"
 +    weight: 60
 +weight: 60
 +sections_weight: 60
 +draft: false
 +aliases: [/layout/content/]
 +toc: true
 +---
 +
 +## Single Page Template Lookup Order
 +
 +See [Template Lookup](/templates/lookup-order/).
 +
 +## Example Single Page Templates
 +
- This single page template makes use of Hugo [base templates][], the [`.Format` function][] for dates, the [`.WordCount` page variable][pagevars], and ranges through the single content's specific [taxonomies][pagetaxonomy]. [`with`][] is also used to check whether the taxonomies are set in the front matter.
++Content pages are of the type `page` and will therefore have all the [page variables][pagevars] and [site variables] available to use in their templates.
 +
 +### `posts/single.html`
 +
++This single page template makes use of Hugo [base templates], the [`.Format` function] for dates, the [`.WordCount` page variable][pagevars], and ranges through the single content's specific [taxonomies][pagetaxonomy]. [`with`] is also used to check whether the taxonomies are set in the front matter.
 +
 +{{< code file="layouts/posts/single.html" download="single.html" >}}
 +{{ define "main" }}
 +<section id="main">
 +  <h1 id="title">{{ .Title }}</h1>
 +  <div>
 +        <article id="content">
 +           {{ .Content }}
 +        </article>
 +  </div>
 +</section>
 +<aside id="meta">
 +    <div>
 +    <section>
 +      <h4 id="date"> {{ .Date.Format "Mon Jan 2, 2006" }} </h4>
 +      <h5 id="wordcount"> {{ .WordCount }} Words </h5>
 +    </section>
 +    {{ with .Params.topics }}
 +    <ul id="topics">
 +      {{ range . }}
 +        <li><a href="{{ "topics" | absURL}}{{ . | urlize }}">{{ . }}</a> </li>
 +      {{ end }}
 +    </ul>
 +    {{ end }}
 +    {{ with .Params.tags }}
 +    <ul id="tags">
 +      {{ range . }}
 +        <li> <a href="{{ "tags" | absURL }}{{ . | urlize }}">{{ . }}</a> </li>
 +      {{ end }}
 +    </ul>
 +    {{ end }}
 +    </div>
 +    <div>
 +        {{ with .PrevInSection }}
 +          <a class="previous" href="{{.Permalink}}"> {{.Title}}</a>
 +        {{ end }}
 +        {{ with .NextInSection }}
 +          <a class="next" href="{{.Permalink}}"> {{.Title}}</a>
 +        {{ end }}
 +    </div>
 +</aside>
 +{{ end }}
 +{{< /code >}}
 +
 +To easily generate new instances of a content type (e.g., new `.md` files in a section like `project/`) with preconfigured front matter, use [content archetypes][archetypes].
 +
 +[archetypes]: /content-management/archetypes/
 +[base templates]: /templates/base/
 +[config]: /getting-started/configuration/
 +[content type]: /content-management/types/
 +[directory structure]: /getting-started/directory-structure/
 +[dry]: https://en.wikipedia.org/wiki/Don%27t_repeat_yourself
 +[`.Format` function]: /functions/format/
 +[front matter]: /content-management/front-matter/
 +[pagetaxonomy]: /templates/taxonomy-templates/#display-a-single-piece-of-contents-taxonomies
 +[pagevars]: /variables/page/
 +[partials]: /templates/partials/
 +[section]: /content-management/sections/
 +[site variables]: /variables/site/
 +[spf13]: https://spf13.com/
 +[`with`]: /functions/with/
index 9c283dfc3ed38cac90aeaa181279ef35c6bf54b5,0000000000000000000000000000000000000000..e9fc80525272ac950c66bc6e709d6142752e64e7
mode 100644,000000..100644
--- /dev/null
@@@ -1,341 -1,0 +1,341 @@@
- * List a single content's taxonomy terms within a [single page template][]
 +---
 +title: Taxonomy Templates
 +# linktitle:
 +description: Taxonomy templating includes taxonomy list pages, taxonomy terms pages, and using taxonomies in your single page templates.
 +date: 2017-02-01
 +publishdate: 2017-02-01
 +lastmod: 2017-02-01
 +categories: [templates]
 +keywords: [taxonomies,metadata,front matter,terms,templates]
 +menu:
 +  docs:
 +    parent: "templates"
 +    weight: 50
 +weight: 50
 +sections_weight: 50
 +draft: false
 +aliases: [/taxonomies/displaying/,/templates/terms/,/indexes/displaying/,/taxonomies/templates/,/indexes/ordering/, /templates/taxonomies/, /templates/taxonomy/]
 +toc: true
 +---
 +
 +<!-- NOTE! Check on https://github.com/gohugoio/hugo/issues/2826 for shifting of terms' pages to .Data.Pages AND
 +https://discourse.gohugo.io/t/how-to-specify-category-slug/4856/15 for original discussion.-->
 +
 +Hugo includes support for user-defined groupings of content called **taxonomies**. Taxonomies are classifications that demonstrate logical relationships between content. See [Taxonomies under Content Management](/content-management/taxonomies) if you are unfamiliar with how Hugo leverages this powerful feature.
 +
 +Hugo provides multiple ways to use taxonomies throughout your project templates:
 +
 +* Order the way content associated with a taxonomy term is displayed in a [taxonomy list template](#taxonomy-list-templates)
 +* Order the way the terms for a taxonomy are displayed in a [taxonomy terms template](#taxonomy-terms-templates)
++* List a single content's taxonomy terms within a [single page template]
 +
 +## Taxonomy List Templates
 +
 +Taxonomy list page templates are lists and therefore have all the variables and methods available to [list pages][lists].
 +
 +### Taxonomy List Template Lookup Order
 +
 +See [Template Lookup](/templates/lookup-order/).
 +
 +## Taxonomy Terms Templates
 +
 +### Taxonomy Terms Templates Lookup Order
 +
 +See [Template Lookup](/templates/lookup-order/).
 +
 +### Taxonomy Methods
 +
 +A Taxonomy is a `map[string]WeightedPages`.
 +
 +.Get(term)
 +: Returns the WeightedPages for a term.
 +
 +.Count(term)
 +: The number of pieces of content assigned to this term.
 +
 +.Alphabetical
 +: Returns an OrderedTaxonomy (slice) ordered by Term.
 +
 +.ByCount
 +: Returns an OrderedTaxonomy (slice) ordered by number of entries.
 +
 +.Reverse
 +: Returns an OrderedTaxonomy (slice) in reverse order. Must be used with an OrderedTaxonomy.
 +
 +### OrderedTaxonomy
 +
 +Since Maps are unordered, an OrderedTaxonomy is a special structure that has a defined order.
 +
 +```go
 +[]struct {
 +    Name          string
 +    WeightedPages WeightedPages
 +}
 +```
 +
 +Each element of the slice has:
 +
 +.Term
 +: The Term used.
 +
 +.WeightedPages
 +: A slice of Weighted Pages.
 +
 +.Count
 +: The number of pieces of content assigned to this term.
 +
 +.Pages
 +: All Pages assigned to this term. All [list methods][renderlists] are available to this.
 +
 +## WeightedPages
 +
 +WeightedPages is simply a slice of WeightedPage.
 +
 +```go
 +type WeightedPages []WeightedPage
 +```
 +
 +.Count(term)
 +: The number of pieces of content assigned to this term.
 +
 +.Pages
 +: Returns a slice of pages, which then can be ordered using any of the [list methods][renderlists].
 +
 +## Displaying custom metadata in Taxonomy Terms Templates
 +
 +If you need to display custom metadata for each taxonomy term, you will need to create a page for that term at `/content/<TAXONOMY>/<TERM>/_index.md` and add your metadata in its front matter, [as explained in the taxonomies documentation](/content-management/taxonomies/#add-custom-metadata-to-a-taxonomy-or-term). Based on the Actors taxonomy example shown there, within your taxonomy terms template, you may access your custom fields by iterating through the variable `.Pages` as such:
 +
 +```go-html-template
 +<ul>
 +    {{ range .Pages }}
 +        <li>
 +            <a href="{{ .Permalink }}">{{ .Title }}</a>
 +            {{ .Params.wikipedia }}
 +        </li>
 +    {{ end }}
 +</ul>
 +```
 +
 +<!-- Begin /taxonomies/ordering/ -->
 +
 +## Order Taxonomies
 +
 +Taxonomies can be ordered by either alphabetical key or by the number of content pieces assigned to that key.
 +
 +### Order Alphabetically Example
 +
 +```go-html-template
 +<ul>
 +    {{ range .Data.Terms.Alphabetical }}
 +            <li><a href="{{ .Page.Permalink }}">{{ .Page.Title }}</a> {{ .Count }}</li>
 +    {{ end }}
 +</ul>
 +```
 +
 +<!-- [See Also Taxonomy Lists](/templates/list/) -->
 +
 +## Order Content within Taxonomies
 +
 +Hugo uses both `date` and `weight` to order content within taxonomies.
 +
 +Each piece of content in Hugo can optionally be assigned a date. It can also be assigned a weight for each taxonomy it is assigned to.
 +
 +When iterating over content within taxonomies, the default sort is the same as that used for section and list pages: first by weight, then by date. This means that if the weights for two pieces of content are the same, then the more recent content will be displayed first.
 +
 +The default weight for any piece of content is 0. Zero means "does not have a weight", not "has a weight of numerical value zero".
 +
 +Weights of zero are thus treated specially: if two pages have unequal weights, and one of them is zero, then the zero-weighted page will always appear after the other one, regardless of the other's weight. Zero weights should thus be used with care: for example, if both positive and negative weights are used to extend a sequence in both directions, a zero-weighted page will appear not in the middle of the list, but at the end.
 +
 +### Assign Weight
 +
 +Content can be assigned weight for each taxonomy that it's assigned to.
 +
 +```txt
 ++++
 +tags = [ "a", "b", "c" ]
 +tags_weight = 22
 +categories = ["d"]
 +title = "foo"
 +categories_weight = 44
 ++++
 +Front Matter with weighted tags and categories
 +```
 +
 +The convention is `taxonomyname_weight`.
 +
 +In the above example, this piece of content has a weight of 22 which applies to the sorting when rendering the pages assigned to the "a", "b" and "c" values of the 'tag' taxonomy.
 +
 +It has also been assigned the weight of 44 when rendering the 'd' category.
 +
 +With this the same piece of content can appear in different positions in different taxonomies.
 +
 +Currently taxonomies only support the default ordering of content which is weight -> date.
 +
 +<!-- Begin /taxonomies/templates/ -->
 +
 +There are two different templates that the use of taxonomies will require you to provide.
 +
 +Both templates are covered in detail in the templates section.
 +
 +A [list template](/templates/list/) is any template that will be used to render multiple pieces of content in a single html page. This template will be used to generate all the automatically created taxonomy pages.
 +
 +A [taxonomy terms template](/templates/terms/) is a template used to
 +generate the list of terms for a given template.
 +
 +<!-- Begin /taxonomies/displaying/ -->
 +
 +There are four common ways you can display the data in your
 +taxonomies in addition to the automatic taxonomy pages created by hugo
 +using the [list templates](/templates/list/):
 +
 +1. For a given piece of content, you can list the terms attached
 +2. For a given piece of content, you can list other content with the same
 +   term
 +3. You can list all terms for a taxonomy
 +4. You can list all taxonomies (with their terms)
 +
 +## Display a Single Piece of Content's Taxonomies
 +
 +Within your content templates, you may wish to display the taxonomies that piece of content is assigned to.
 +
 +Because we are leveraging the front matter system to define taxonomies for content, the taxonomies assigned to each content piece are located in the usual place (i.e., `.Params.<TAXONOMYPLURAL>`).
 +
 +### Example: List Tags in a Single Page Template
 +
 +```go-html-template
 +<ul>
 +    {{ range (.GetTerms "tags") }}
 +        <li><a href="{{ .Permalink }}">{{ .LinkTitle }}</a></li>
 +    {{ end }}
 +</ul>
 +```
 +
 +If you want to list taxonomies inline, you will have to take care of optional plural endings in the title (if multiple taxonomies), as well as commas. Let's say we have a taxonomy "directors" such as `directors: [ "Joel Coen", "Ethan Coen" ]` in the TOML-format front matter.
 +
 +To list such taxonomies, use the following:
 +
 +### Example: Comma-delimit Tags in a Single Page Template
 +
 +```go-html-template
 +{{ $taxo := "directors" }} <!-- Use the plural form here -->
 +{{ with .Param $taxo }}
 +    <strong>Director{{ if gt (len .) 1 }}s{{ end }}:</strong>
 +    {{ range $index, $director := . }}
 +        {{- if gt $index 0 }}, {{ end -}}
 +        {{ with $.Site.GetPage (printf "/%s/%s" $taxo $director) -}}
 +            <a href="{{ .Permalink }}">{{ $director }}</a>
 +        {{- end -}}
 +    {{- end -}}
 +{{ end }}
 +```
 +
 +Alternatively, you may use the [delimit template function][delimit] as a shortcut if the taxonomies should just be listed with a separator. See {{< gh 2143 >}} on GitHub for discussion.
 +
 +## List Content with the Same Taxonomy Term
 +
 +If you are using a taxonomy for something like a series of posts, you can list individual pages associated with the same taxonomy. This is also a quick and dirty method for showing related content:
 +
 +### Example: Showing Content in Same Series
 +
 +```go-html-template
 +<ul>
 +    {{ range .Site.Taxonomies.series.golang }}
 +        <li><a href="{{ .Page.RelPermalink }}">{{ .Page.Title }}</a></li>
 +    {{ end }}
 +</ul>
 +```
 +
 +## List All content in a Given taxonomy
 +
 +This would be very useful in a sidebar as “featured content”. You could even have different sections of “featured content” by assigning different terms to the content.
 +
 +### Example: Grouping "Featured" Content
 +
 +```go-html-template
 +<section id="menu">
 +    <ul>
 +        {{ range $key, $taxonomy := .Site.Taxonomies.featured }}
 +        <li>{{ $key }}</li>
 +        <ul>
 +            {{ range $taxonomy.Pages }}
 +            <li hugo-nav="{{ .RelPermalink}}"><a href="{{ .Permalink}}">{{ .LinkTitle }}</a></li>
 +            {{ end }}
 +        </ul>
 +        {{ end }}
 +    </ul>
 +</section>
 +```
 +
 +## Render a Site's Taxonomies
 +
 +If you wish to display the list of all keys for your site's taxonomy, you can retrieve them from the [`.Site` variable][sitevars] available on every page.
 +
 +This may take the form of a tag cloud, a menu, or simply a list.
 +
 +The following example displays all terms in a site's tags taxonomy:
 +
 +### Example: List All Site Tags {#example-list-all-site-tags}
 +
 +```go-html-template
 +<ul>
 +    {{ range .Site.Taxonomies.tags }}
 +            <li><a href="{{ .Page.Permalink }}">{{ .Page.Title }}</a> {{ .Count }}</li>
 +    {{ end }}
 +</ul>
 +```
 +
 +### Example: List All Taxonomies, Terms, and Assigned Content
 +
 +This example will list all taxonomies and their terms, as well as all the content assigned to each of the terms.
 +
 +{{< code file="layouts/partials/all-taxonomies.html" download="all-taxonomies.html" download="all-taxonomies.html" >}}
 +<section>
 +    <ul id="all-taxonomies">
 +        {{ range $taxonomy_term, $taxonomy := .Site.Taxonomies }}
 +            {{ with $.Site.GetPage (printf "/%s" $taxonomy_term) }}
 +                <li><a href="{{ .Permalink }}">{{ $taxonomy_term }}</a>
 +                    <ul>
 +                        {{ range $key, $value := $taxonomy }}
 +                            <li>{{ $key }}</li>
 +                            <ul>
 +                                {{ range $value.Pages }}
 +                                    <li hugo-nav="{{ .RelPermalink}}">
 +                                        <a href="{{ .Permalink}}">{{ .LinkTitle }}</a>
 +                                    </li>
 +                                {{ end }}
 +                            </ul>
 +                        {{ end }}
 +                    </ul>
 +                </li>
 +            {{ end }}
 +        {{ end }}
 +    </ul>
 +</section>
 +{{< /code >}}
 +
 +## `.Site.GetPage` for Taxonomies
 +
 +Because taxonomies are lists, the [`.GetPage` function][getpage] can be used to get all the pages associated with a particular taxonomy term using a terse syntax. The following ranges over the full list of tags on your site and links to each of the individual taxonomy pages for each term without having to use the more fragile URL construction of the ["List All Site Tags" example above]({{< relref "#example-list-all-site-tags" >}}):
 +
 +{{< code file="links-to-all-tags.html" >}}
 +{{ $taxo := "tags" }}
 +<ul class="{{ $taxo }}">
 +    {{ with ($.Site.GetPage (printf "/%s" $taxo)) }}
 +        {{ range .Pages }}
 +            <li><a href="{{ .Permalink }}">{{ .Title}}</a></li>
 +        {{ end }}
 +    {{ end }}
 +</ul>
 +{{< /code >}}
 +
 +<!-- TODO: ### `.Site.GetPage` Taxonomy List Example -->
 +
 +<!-- TODO: ### `.Site.GetPage` Taxonomy Terms Example -->
 +
 +
 +[delimit]: /functions/delimit/
 +[getpage]: /functions/getpage/
 +[lists]: /templates/lists/
 +[renderlists]: /templates/lists/
 +[single page template]: /templates/single-page-templates/
 +[sitevars]: /variables/site/
index ef8e205dad8815af11018b329bdbd28a8fb74b13,0000000000000000000000000000000000000000..b8938890f6f117200f5a52926bb26df762096974
mode 100644,000000..100644
--- /dev/null
@@@ -1,69 -1,0 +1,69 @@@
- When developing a [homepage][], what does one of the pages you're looping through look like?
 +---
 +title: Template Debugging
 +description: You can use Go templates' `printf` function to debug your Hugo  templates. These snippets provide a quick and easy visualization of the variables available to you in different contexts.
 +date: 2017-02-01
 +publishdate: 2017-02-01
 +categories: [templates]
 +keywords: [debugging,troubleshooting]
 +menu:
 +  docs:
 +    parent: "templates"
 +    weight: 180
 +weight: 180
 +sections_weight: 180
 +aliases: []
 +toc: false
 +---
 +
 +Here are some snippets you can add to your template to answer some common questions.
 +
 +These snippets use the `printf` function available in all Go templates.  This function is an alias to the Go function, [fmt.Printf](https://pkg.go.dev/fmt).
 +
 +## What Variables are Available in this Context?
 +
 +You can use the template syntax, `$.`, to get the top-level template context from anywhere in your template. This will print out all the values under, `.Site`.
 +
 +```go-html-template
 +{{ printf "%#v" $.Site }}
 +```
 +
 +This will print out the value of `.Permalink`:
 +
 +```go-html-template
 +{{ printf "%#v" .Permalink }}
 +```
 +
 +This will print out a list of all the variables scoped to the current context
 +(`.`, aka ["the dot"][tempintro]).
 +
 +```go-html-template
 +{{ printf "%#v" . }}
 +```
 +
++When developing a [homepage], what does one of the pages you're looping through look like?
 +
 +```go-html-template
 +{{ range .Pages }}
 +    {{/* The context, ".", is now each one of the pages as it goes through the loop */}}
 +    {{ printf "%#v" . }}
 +{{ end }}
 +```
 +
 +## Why Am I Showing No Defined Variables?
 +
 +Check that you are passing variables in the `partial` function:
 +
 +```go-html-template
 +{{ partial "header.html" }}
 +```
 +
 +This example will render the header partial, but the header partial will not have access to any contextual variables. You need to pass variables explicitly. For example, note the addition of ["the dot"][tempintro].
 +
 +```go-html-template
 +{{ partial "header.html" . }}
 +```
 +
 +The dot (`.`) is considered fundamental to understanding Hugo templating. For more information, see [Introduction to Hugo Templating][tempintro].
 +
 +[homepage]: /templates/homepage/
 +[tempintro]: /templates/introduction/
index ecb785620302c8d3990a4973e7c8381fcc3e1489,0000000000000000000000000000000000000000..8399e99dfc3268f131980f8c44917e7ae386035d
mode 100644,000000..100644
--- /dev/null
@@@ -1,38 -1,0 +1,38 @@@
- * [Wowchemy][]. Wowchemy is the 5,500+ star open source Hugo starter kit and website builder trusted by 750,000+ sites since 2016. Create _any_ kind of site with [50+ templates, widgets, and extensions](https://wowchemy.com/). Translated into 35+ languages and backed by a large, active community of 150+ contributors.
 +---
 +title: Starter Kits
 +linktitle: Starter Kits
 +description: A list of community-developed projects designed to help you get up and running with Hugo.
 +date: 2017-02-22
 +publishdate: 2017-02-01
 +lastmod: 2018-08-11
 +keywords: [starters,assets,pipeline]
 +menu:
 +  docs:
 +    parent: "tools"
 +    weight: 30
 +weight: 30
 +sections_weight: 30
 +draft: false
 +aliases: [/developer-tools/migrations/,/developer-tools/migrated/]
 +toc: false
 +---
 +
 +Know of a Hugo-related starter kit that isn't mentioned here? [Please add it to the list.][addkit]
 +
 +{{% note "Starter Kits are Not Maintained by the Hugo Team"%}}
 +The following starter kits are developed by active members of the Hugo community. If you find yourself having issues with any of the projects, it's best to file an issue directly with the project's maintainer(s).
 +{{% /note %}}
 +
- * [GOHUGO AMP][]. GoHugo AMP is a starter theme that aims to make it easy to adopt [Google's AMP Project][amp]. The starter kit comes with 40+ shortcodes and partials plus automatic structured data. The project also includes a [separate site with extensive documentation][gohugodocs].
- * [Hyas][]. Hyas is a Hugo starter helping you build modern websites that are secure, fast, and SEO-ready — by default. It is Netlify-ready (functions, redirects, headers) and comes with [documentation](https://gethyas.com/) to easily make it your own.
++* [Wowchemy]. Wowchemy is the 5,500+ star open source Hugo starter kit and website builder trusted by 750,000+ sites since 2016. Create _any_ kind of site with [50+ templates, widgets, and extensions](https://wowchemy.com/). Translated into 35+ languages and backed by a large, active community of 150+ contributors.
 +* [Hugo Wrapper][hugow]. Hugo Wrapper is a POSIX-style shell script which acts as a wrapper to download and run Hugo binary for your platform. It can be executed in variety of [Operating Systems][hugow-test] and [Command Shells][hugow-test].
++* [GOHUGO AMP]. GoHugo AMP is a starter theme that aims to make it easy to adopt [Google's AMP Project][amp]. The starter kit comes with 40+ shortcodes and partials plus automatic structured data. The project also includes a [separate site with extensive documentation][gohugodocs].
++* [Hyas]. Hyas is a Hugo starter helping you build modern websites that are secure, fast, and SEO-ready — by default. It is Netlify-ready (functions, redirects, headers) and comes with [documentation](https://gethyas.com/) to easily make it your own.
 +
 +[Wowchemy]: https://github.com/wowchemy/wowchemy-hugo-modules
 +[addkit]: https://github.com/gohugoio/hugo/edit/master/docs/content/en/tools/starter-kits.md
 +[amp]: https://amp.dev
 +[GOHUGO AMP]: https://github.com/wildhaber/gohugo-amp
 +[gohugodocs]: https://gohugo-amp.gohugohq.com/
 +[hugow]: https://github.com/khos2ow/hugo-wrapper
 +[hugow-test]: https://github.com/khos2ow/hugo-wrapper#tested-on
 +[Hyas]: https://github.com/h-enk/hyas
index 78100a6af1ca791e8041c23f5f49ade5004ea59d,0000000000000000000000000000000000000000..07acc483108e911c5741247c819766c460e4c198
mode 100644,000000..100644
--- /dev/null
@@@ -1,298 -1,0 +1,298 @@@
- : filesystem-related data for this content file. See also [File Variables][].
 +---
 +title: Page Variables
 +linktitle:
 +description: Page-level variables are defined in a content file's front matter, derived from the content's file location, or extracted from the content body itself.
 +date: 2017-02-01
 +publishdate: 2017-02-01
 +categories: [variables and params]
 +keywords: [pages]
 +draft: false
 +menu:
 +  docs:
 +    title: "variables defined by a page"
 +    parent: "variables"
 +    weight: 20
 +weight: 20
 +sections_weight: 20
 +aliases: []
 +toc: true
 +---
 +
 +The following is a list of page-level variables. Many of these will be defined in the front matter, derived from file location, or extracted from the content itself.
 +
 +{{% note "`.Scratch`" %}}
 +See [`.Scratch`](/functions/scratch/) for page-scoped, writable variables.
 +{{% /note %}}
 +
 +## Page Variables
 +
 +.AlternativeOutputFormats
 +: contains all alternative formats for a given page; this variable is especially useful `link rel` list in your site's `<head>`. (See [Output Formats](/templates/output-formats/).)
 +
 +.Aliases
 +: aliases of this page
 +
 +.BundleType
 +: the [bundle] type: `leaf`, `branch`, or an empty string if the page is not a bundle.
 +
 +.Content
 +: the content itself, defined below the front matter.
 +
 +.Data
 +: the data specific to this type of page.
 +
 +.Date
 +: the date associated with the page; `.Date` pulls from the `date` field in a content's front matter. See also `.ExpiryDate`, `.PublishDate`, and `.Lastmod`.
 +
 +.Description
 +: the description for the page.
 +
 +.Draft
 +: a boolean, `true` if the content is marked as a draft in the front matter.
 +
 +.ExpiryDate
 +: the date on which the content is scheduled to expire; `.ExpiryDate` pulls from the `expirydate` field in a content's front matter. See also `.PublishDate`, `.Date`, and `.Lastmod`.
 +
 +.File
++: filesystem-related data for this content file. See also [File Variables].
 +
 +.FuzzyWordCount
 +: the approximate number of words in the content.
 +
 +.IsHome
 +: `true` in the context of the [homepage](/templates/homepage/).
 +
 +.IsNode
 +: always `false` for regular content pages.
 +
 +.IsPage
 +: always `true` for regular content pages.
 +
 +.IsSection
 +: `true` if [`.Kind`](/templates/section-templates/#page-kinds) is `section`.
 +
 +.IsTranslated
 +: `true` if there are translations to display.
 +
 +.Keywords
 +: the meta keywords for the content.
 +
 +.Kind
 +: the page's *kind*. Possible return values are `page`, `home`, `section`, `taxonomy`, or `term`. Note that there are also `RSS`, `sitemap`, `robotsTXT`, and `404` kinds, but these are only available during the rendering of each of these respective page's kind and therefore *not* available in any of the `Pages` collections.
 +
 +.Language
 +: a language object that points to the language's definition in the site `config`. `.Language.Lang` gives you the language code.
 +
 +.Lastmod
 +: the date the content was last modified. `.Lastmod` pulls from the `lastmod` field in a content's front matter.
 +
 + - If `lastmod` is not set, and `.GitInfo` feature is disabled, the front matter `date` field will be used.
 + - If `lastmod` is not set, and `.GitInfo` feature is enabled, `.GitInfo.AuthorDate` will be used instead.
 +
 +See also `.ExpiryDate`, `.Date`, `.PublishDate`, and [`.GitInfo`][gitinfo].
 +
 +.LinkTitle
 +: access when creating links to the content. If set, Hugo will use the `linktitle` from the front matter before `title`.
 +
 +.Next
 +: Points up to the next [regular page](/variables/site/#site-pages) (sorted by Hugo's [default sort](/templates/lists#default-weight--date--linktitle--filepath)). Example: `{{with .Next}}{{.Permalink}}{{end}}`. Calling `.Next` from the first page returns `nil`.
 +
 +.NextInSection
 +: Points up to the next [regular page](/variables/site/#site-pages) below the same top level section (e.g. in `/blog`)). Pages are sorted by Hugo's [default sort](/templates/lists#default-weight--date--linktitle--filepath). Example: `{{with .NextInSection}}{{.Permalink}}{{end}}`. Calling `.NextInSection` from the first page returns `nil`.
 +
 +.OutputFormats
 +: contains all formats, including the current format, for a given page. Can be combined the with [`.Get` function](/functions/get/) to grab a specific format. (See [Output Formats](/templates/output-formats/).)
 +
 +.Pages
 +: a collection of associated pages. This value will be `nil` within
 +  the context of regular content pages. See [`.Pages`]({{< relref "page.md#pages" >}}).
 +
 +.Permalink
 +: the Permanent link for this page; see [Permalinks](/content-management/urls/)
 +
 +.Plain
 +: the Page content stripped of HTML tags and presented as a string. You may need to pipe the result through the [`htmlUnescape`](/functions/htmlunescape/) function when rendering this value with the HTML [output format](/templates/output-formats#output-format-definitions).
 +
 +.PlainWords
 +: the slice of strings that results from splitting .Plain into words, as defined in Go's [strings.Fields](https://pkg.go.dev/strings#Fields).
 +
 +.Prev
 +: Points down to the previous [regular page](/variables/site/#site-pages) (sorted by Hugo's [default sort](/templates/lists#default-weight--date--linktitle--filepath)). Example: `{{if .Prev}}{{.Prev.Permalink}}{{end}}`.  Calling `.Prev` from the last page returns `nil`.
 +
 +.PrevInSection
 +: Points down to the previous [regular page](/variables/site/#site-pages) below the same top level section (e.g. `/blog`). Pages are sorted by Hugo's [default sort](/templates/lists#default-weight--date--linktitle--filepath). Example: `{{if .PrevInSection}}{{.PrevInSection.Permalink}}{{end}}`.  Calling `.PrevInSection` from the last page returns `nil`.
 +
 +.PublishDate
 +: the date on which the content was or will be published; `.Publishdate` pulls from the `publishdate` field in a content's front matter. See also `.ExpiryDate`, `.Date`, and `.Lastmod`.
 +
 +.RawContent
 +: raw markdown content without the front matter. Useful with [remarkjs.com](
 +https://remarkjs.com)
 +
 +.ReadingTime
 +: the estimated time, in minutes, it takes to read the content.
 +
 +.Resources
 +: resources such as images and CSS that are associated with this page
 +
 +.Ref
 +: returns the permalink for a given reference (e.g., `.Ref "sample.md"`).  `.Ref` does *not* handle in-page fragments correctly. See [Cross References](/content-management/cross-references/).
 +
 +.RelPermalink
 +: the relative permanent link for this page.
 +
 +.RelRef
 +: returns the relative permalink for a given reference (e.g., `RelRef
 +"sample.md"`). `.RelRef` does *not* handle in-page fragments correctly. See [Cross References](/content-management/cross-references/).
 +
 +.Site
 +: see [Site Variables](/variables/site/).
 +
 +.Sites
 +: returns all sites (languages). A typical use case would be to link back to the main language: `<a href="{{ .Sites.First.Home.RelPermalink }}">...</a>`.
 +
 +.Sites.First
 +: returns the site for the first language. If this is not a multilingual setup, it will return itself.
 +
 +.Summary
 +: a generated summary of the content for easily showing a snippet in a summary view. The breakpoint can be set manually by inserting <code>&lt;!&#x2d;&#x2d;more&#x2d;&#x2d;&gt;</code> at the appropriate place in the content page, or the summary can be written independent of the page text.  See [Content Summaries](/content-management/summaries/) for more details.
 +
 +.TableOfContents
 +: the rendered [table of contents](/content-management/toc/) for the page.
 +
 +.Title
 +: the title for this page.
 +
 +.Translations
 +: a list of translated versions of the current page. See [Multilingual Mode](/content-management/multilingual/) for more information.
 +
 +.TranslationKey
 +: the key used to map language translations of the current page. See [Multilingual Mode](/content-management/multilingual/) for more information.
 +
 +.Truncated
 +: a boolean, `true` if the `.Summary` is truncated. Useful for showing a "Read more..." link only when necessary.  See [Summaries](/content-management/summaries/) for more information.
 +
 +.Type
 +: the [content type](/content-management/types/) of the content (e.g., `posts`).
 +
 +.Weight
 +: assigned weight (in the front matter) to this content, used in sorting.
 +
 +.WordCount
 +: the number of words in the content.
 +
 +## Section Variables and Methods
 +
 +Also see [Sections](/content-management/sections/).
 +
 +{{< readfile file="/content/en/readfiles/sectionvars.md" markdown="true" >}}
 +
 +## The `.Pages` Variable {#pages}
 +
 +`.Pages` is an alias to `.Data.Pages`. It is conventional to use the
 +aliased form `.Pages`.
 +
 +### `.Pages` compared to `.Site.Pages`
 +
 +{{< getcontent path="readfiles/pages-vs-site-pages.md" >}}
 +
 +## Page-level Params
 +
 +Any other value defined in the front matter in a content file, including taxonomies, will be made available as part of the `.Params` variable.
 +
 +```yml
 +---
 +title: My First Post
 +date: 2017-02-20T15:26:23-06:00
 +categories: [one]
 +tags: [two,three,four]
 +```
 +
 +With the above front matter, the `tags` and `categories` taxonomies are accessible via the following:
 +
 +* `.Params.tags`
 +* `.Params.categories`
 +
 +{{% note "Casing of Params" %}}
 +Page-level `.Params` are *only* accessible in lowercase.
 +{{% /note %}}
 +
 +The `.Params` variable is particularly useful for the introduction of user-defined front matter fields in content files. For example, a Hugo website on book reviews could have the following front matter in `/content/review/book01.md`:
 +
 +```yml
 +---
 +...
 +affiliatelink: "http://www.my-book-link.here"
 +recommendedby: "My Mother"
 +...
 +---
 +```
 +
 +These fields would then be accessible to the `/themes/yourtheme/layouts/review/single.html` template through `.Params.affiliatelink` and `.Params.recommendedby`, respectively.
 +
 +Two common situations where this type of front matter field could be introduced is as a value of a certain attribute like `href=""` or by itself to be displayed as text to the website's visitors.
 +
 +{{< code file="/themes/yourtheme/layouts/review/single.html" >}}
 +<h3><a href={{ printf "%s" $.Params.affiliatelink }}>Buy this book</a></h3>
 +<p>It was recommended by {{ .Params.recommendedby }}.</p>
 +{{< /code >}}
 +
 +This template would render as follows, assuming you've set [`uglyURLs`](/content-management/urls/) to `false` in your [site `config`](/getting-started/configuration/):
 +
 +{{< output file="yourbaseurl/review/book01/index.html" >}}
 +<h3><a href="http://www.my-book-link.here">Buy this book</a></h3>
 +<p>It was recommended by my Mother.</p>
 +{{< /output >}}
 +
 +{{% note %}}
 +See [Archetypes](/content-management/archetypes/) for consistency of `Params` across pieces of content.
 +{{% /note %}}
 +
 +### The `.Param` Method
 +
 +In Hugo, you can declare params in individual pages and globally for your entire website. A common use case is to have a general value for the site param and a more specific value for some of the pages (i.e., a header image):
 +
 +```go-html-template
 +{{ $.Param "header_image" }}
 +```
 +
 +The `.Param` method provides a way to resolve a single value according to it's definition in a page parameter (i.e. in the content's front matter) or a site parameter (i.e., in your `config`).
 +
 +### Access Nested Fields in Front Matter
 +
 +When front matter contains nested fields like the following:
 +
 +```yml
 +---
 +author:
 +  given_name: John
 +  family_name: Feminella
 +  display_name: John Feminella
 +---
 +```
 +`.Param` can access these fields by concatenating the field names together with a dot:
 +
 +```go-html-template
 +{{ $.Param "author.display_name" }}
 +```
 +
 +If your front matter contains a top-level key that is ambiguous with a nested key, as in the following case:
 +
 +```yml
 +---
 +favorites.flavor: vanilla
 +favorites:
 +  flavor: chocolate
 +---
 +```
 +
 +The top-level key will be preferred. Therefore, the following method, when applied to the previous example, will print `vanilla` and not `chocolate`:
 +
 +```txt
 +{{ $.Param "favorites.flavor" }}
 +=> vanilla
 +```
 +
 +[gitinfo]: /variables/git/
 +[File Variables]: /variables/files/
 +[bundle]: {{< relref "content-management/page-bundles" >}}
index 11f37b369ac56051f3cf202e38a24325709ac051,0000000000000000000000000000000000000000..34239ad444dcd83106cb3d266ec41768ea963485
mode 100644,000000..100644
--- /dev/null
@@@ -1,132 -1,0 +1,129 @@@
- .Site.Author
- : a map of the authors as defined in the site configuration.
 +---
 +title: Site Variables
 +linktitle: Site Variables
 +description: Many, but not all, site-wide variables are defined in your site's configuration. However, Hugo provides a number of built-in variables for convenient access to global values in your templates.
 +date: 2017-02-01
 +publishdate: 2017-02-01
 +lastmod: 2017-02-01
 +categories: [variables and params]
 +keywords: [global,site]
 +draft: false
 +menu:
 +  docs:
 +    parent: "variables"
 +    weight: 10
 +weight: 10
 +sections_weight: 10
 +aliases: [/variables/site-variables/]
 +toc: true
 +---
 +
 +The following is a list of site-level (aka "global") variables. Many of these variables are defined in your site's [configuration file][config], whereas others are built into Hugo's core for convenient usage in your templates.
 +
 +## Get the Site object from a partial
 +
 +All the methods below, e.g. `.Site.RegularPages` can also be reached via the global [`site`](/functions/site/) function, e.g. `site.RegularPages`, which can be handy in partials where the `Page` object isn't easily available.
 +
 +## Site Variables List
 +
 +.Site.AllPages
 +: array of all pages, regardless of their translation.
 +
 +.Site.BaseURL
 +: the base URL for the site as defined in the site configuration.
 +
 +.Site.BuildDrafts
 +: a boolean (default: `false`) to indicate whether to build drafts as defined in the site configuration.
 +
 +.Site.Copyright
 +: a string representing the copyright of your website as defined in the site configuration.
 +
 +.Site.Data
 +: custom data, see [Data Templates](/templates/data-templates/).
 +
 +.Site.DisqusShortname
 +: a string representing the shortname of the Disqus shortcode as defined in the site configuration.
 +
 +.Site.GoogleAnalytics
 +: a string representing your tracking code for Google Analytics as defined in the site configuration.
 +
 +.Site.Home
 +: reference to the homepage's [page object](https://gohugo.io/variables/page/)
 +
 +.Site.IsMultiLingual
 +: whether there are more than one language in this site. See [Multilingual](/content-management/multilingual/) for more information.
 +
 +.Site.IsServer
 +: a boolean to indicate if the site is being served with Hugo's built-in server. See [`hugo server`](/commands/hugo_server/) for more information.
 +
 +.Site.Language.Lang
 +: the language code of the current locale (e.g., `en`).
 +
 +.Site.Language.LanguageName
 +: the full language name (e.g. `English`).
 +
 +.Site.Language.Weight
 +: the weight that defines the order in the `.Site.Languages` list.
 +
 +.Site.Language
 +: indicates the language currently being used to render the website. This object's attributes are set in site configurations' language definition.
 +
 +.Site.LanguageCode
 +: a string representing the language tag as defined in the site configuration.
 +
 +.Site.LanguagePrefix
 +: this can be used to prefix URLs to point to the correct language. It will even work when only one defined language. See also the functions [absLangURL](/functions/abslangurl/) and [relLangURL](/functions/rellangurl).
 +
 +.Site.Languages
 +: an ordered list (ordered by defined weight) of languages.
 +
 +.Site.LastChange
 +: a string representing the date/time of the most recent change to your site. This string is based on the [`date` variable in the front matter](/content-management/front-matter) of your content pages.
 +
 +.Site.Menus
 +: all the menus in the site.
 +
 +.Site.Pages
 +: array of all content ordered by Date with the newest first. This array contains only the pages in the current language. See [`.Site.Pages`]({{< relref "site.md#site-pages" >}}).
 +
 +.Site.RegularPages
 +: a shortcut to the *regular* page collection. `.Site.RegularPages` is equivalent to `where .Site.Pages "Kind" "page"`. See [`.Site.Pages`]({{< relref "site.md#site-pages" >}}).
 +
 +.Site.Sections
 +: top-level directories of the site.
 +
 +.Site.Taxonomies
 +: the [taxonomies](/taxonomies/usage/) for the entire site. Also see section [Use `.Site.Taxonomies` Outside of Taxonomy Templates](/variables/taxonomy/#use-sitetaxonomies-outside-of-taxonomy-templates).
 +
 +.Site.Title
 +: a string representing the title of the site.
 +
 +## The `.Site.Params` Variable
 +
 +`.Site.Params` is a container holding the values from the `params` section of your site configuration.
 +
 +### Example: `.Site.Params`
 +
 +The following `config.[yaml|toml|json]` defines a site-wide param for `description`:
 +
 +{{< code-toggle file="config" >}}
 +baseURL = "https://yoursite.example.com/"
 +
 +[params]
 +  description = "Tesla's Awesome Hugo Site"
 +  author = "Nikola Tesla"
 +{{</ code-toggle >}}
 +
 +You can use `.Site.Params` in a [partial template](/templates/partials/) to call the default site description:
 +
 +{{< code file="layouts/partials/head.html" >}}
 +<meta name="description" content="{{if .IsHome}}{{ $.Site.Params.description }}{{else}}{{.Description}}{{end}}" />
 +{{< /code >}}
 +
 +## The `.Site.Pages` Variable {#site-pages}
 +
 +### `.Site.Pages` compared to `.Pages`
 +
 +{{< getcontent path="readfiles/pages-vs-site-pages.md" >}}
 +
 +[config]: /getting-started/configuration/
index 5bcdffee5c218af145cef802034d64f469d91199,0000000000000000000000000000000000000000..901769b3164a1dff0fd4caa3e247cad24aac0e5b
mode 100644,000000..100644
--- /dev/null
@@@ -1,84 -1,0 +1,140 @@@
- description: Taxonomy pages are of type `Page` and have all page-, site-, and list-level variables available to them. However, taxonomy terms templates have additional variables available to their templates.
- date: 2017-02-01
- publishdate: 2017-02-01
- lastmod: 2017-02-01
 +---
 +title: Taxonomy Variables
 +linktitle:
- keywords: [taxonomies,terms]
- draft: false
++description: Hugo's taxonomy system exposes variables to taxonomy and term templates.
 +categories: [variables and params]
- sections_weight: 30
++keywords: [taxonomy,term]
 +menu:
 +  docs:
 +    parent: "variables"
 +    weight: 30
++toc: true
 +weight: 30
- toc: true
 +aliases: []
- ## Taxonomy Terms Page Variables
 +---
 +
- [Taxonomy terms pages][taxonomytemplates] are of the type `Page` and have the following additional variables.
++## Taxonomy templates
 +
- For example, the following fields would be available in `layouts/_defaults/terms.html`, depending on how you organize your [taxonomy templates][taxonomytemplates]:
++Pages rendered by taxonomy templates have `.Kind` set to `taxonomy` and `.Type` set to the taxonomy name.
 +
- : The singular name of the taxonomy (e.g., `tags => tag`)
++In taxonomy templates you may access `.Site`, `.Page`. `.Section`, and `.File` variables, as well as the following _taxonomy_ variables:
 +
 +.Data.Singular
- : The plural name of the taxonomy (e.g., `tags => tags`)
++: The singular name of the taxonomy (e.g., `tags => tag`).
 +
 +.Data.Plural
- : The list of pages in the taxonomy
++: The plural name of the taxonomy (e.g., `tags => tags`).
 +
 +.Data.Pages
- : The taxonomy itself
++: The collection of term pages related to this taxonomy. Aliased by `.Pages`.
 +
 +.Data.Terms
- : The taxonomy terms alphabetized
++: A map of terms and weighted pages related to this taxonomy.
 +
 +.Data.Terms.Alphabetical
- : The Terms ordered by popularity
- Note that `.Data.Terms.Alphabetical` and `.Data.Terms.ByCount` can also be reversed:
- * `.Data.Terms.Alphabetical.Reverse`
- * `.Data.Terms.ByCount.Reverse`
++: A map of terms and weighted pages related to this taxonomy, sorted alphabetically in ascending order. Reverse the sort order with`.Data.Terms.Alphabetical.Reverse`.
 +
 +.Data.Terms.ByCount
- ## Use `.Site.Taxonomies` Outside of Taxonomy Templates
++: A map of terms and weighted pages related to this taxonomy, sorted by count in ascending order. Reverse the sort order with`.Data.Terms.ByCount.Reverse`.
 +
- The `.Site.Taxonomies` variable holds all the taxonomies defined site-wide. `.Site.Taxonomies` is a map of the taxonomy name to a list of its values (e.g., `"tags" -> ["tag1", "tag2", "tag3"]`). Each value, though, is not a string but rather a *Taxonomy variable*.
++## Term templates
 +
- ## The `.Taxonomy` Variable
++Pages rendered by term templates have `.Kind` set to `term` and `.Type` set to the taxonomy name.
 +
- The `.Taxonomy` variable, available, for example, as `.Site.Taxonomies.tags`, contains the list of tags (values) and, for each tag, their corresponding content pages.
- ### Example Usage of `.Site.Taxonomies`
++In term templates you may access `.Site`, `.Page`. `.Section`, and `.File` variables, as well as the following _term_ variables:
 +
- The following [partial template][partials] will list all your site's taxonomies, each of their keys, and all the content assigned to each of the keys. For more examples of how to order and render your taxonomies, see  [Taxonomy Templates][taxonomytemplates].
++.Data.Singular
++: The singular name of the taxonomy (e.g., `tags => tag`).
 +
- {{< code file="all-taxonomies-keys-and-pages.html" download="all-taxonomies-keys-and-pages.html" >}}
- <section>
-   <ul>
-     {{ range $taxonomyname, $taxonomy := .Site.Taxonomies }}
-       <li><a href="{{ "/" | relLangURL}}{{ $taxonomyname | urlize }}">{{ $taxonomyname }}</a>
-         <ul>
-           {{ range $key, $value := $taxonomy }}
-           <li> {{ $key }} </li>
-                 <ul>
-                 {{ range $value.Pages }}
-                     <li><a href="{{ .Permalink}}"> {{ .LinkTitle }} </a> </li>
-                 {{ end }}
-                 </ul>
++.Data.Plural
++: The plural name of the taxonomy (e.g., `tags => tags`).
 +
-         </ul>
-       </li>
-     {{ end }}
-   </ul>
- </section>
- {{< /code >}}
- [partials]: /templates/partials/
- [taxonomytemplates]: /templates/taxonomy-templates/
++.Data.Pages
++: The collection of content pages related to this taxonomy. Aliased by `.Pages`.
++
++.Data.Term
++: The term itself (e.g., `tag-one`).
++
++## Access taxonomy data from any template
++
++Access the entire taxonomy data structure from any template with `site.Taxonomies`. This returns a map of taxonomies, terms, and a collection of weighted content pages related to each term. For example:
++
++```json
++{
++  "categories": {
++    "news": [
++      {
++        "Weight": 0,
++        "Page": {
++          "Title": "Post 1",
++          "Date": "2022-12-18T15:13:35-08:00"
++          ...
++          }
++      },
++      {
++        "Weight": 0,
++        "Page": {
++          "Title": "Post 2",
++          "Date": "2022-12-18T15:13:46-08:00",
++          ...
++        }
++      }
++    ]
++  },
++  "tags": {
++    "international": [
++      {
++        "Weight": 0,
++        "Page": {
++          "Title": "Post 1",
++          "Date": "2021-01-01T00:00:00Z"
++          ... 
++        }
++      }
++    ]
++  }
++}
++```
++
++Access a subset of the taxonomy data structure by chaining one or more identifiers, or by using the [`index`] function with one or more keys. For example, to access the collection of weighted content pages related to the news category, use either of the following:
++
++[`index`]: /functions/index-function/
++
++```go-html-template
++{{ $pages := site.Taxonomies.categories.news }}
++{{ $pages := index site.Taxonomies "categories" "news" }}
++```
++
++For example, to render the entire taxonomy data structure as a nested unordered list:
++
++```go-html-template
++<ul>
++  {{ range $taxonomy, $terms := site.Taxonomies }}
++    <li>
++      {{ with site.GetPage $taxonomy }}
++        <a href="{{ .RelPermalink }}">{{ .LinkTitle }}</a>
++      {{ end }}
++      <ul>
++        {{ range $term, $weightedPages := $terms }}
++        <li>
++          {{ with site.GetPage (path.Join $taxonomy $term) }}
++            <a href="{{ .RelPermalink }}">{{ .LinkTitle }}</a>
 +          {{ end }}
++        </li>
++          <ul>
++            {{ range $weightedPages }}
++              <li>
++                <a href="{{ .RelPermalink}}"> {{ .LinkTitle }}</a>
++              </li>
++            {{ end }}
++          </ul>
++        {{ end }}
++      </ul>
++    </li>
++  {{ end }}
++</ul>
++```
++
++See [Taxonomy Templates] for more examples.
++
++[Taxonomy Templates]: /templates/taxonomy-templates/
index 3a1aa479ca6edca4ebe2b1bd7cb81b8d06c414c0,0000000000000000000000000000000000000000..bf0e9165a1ee96208184115f6f14d466f9e57307
mode 100644,000000..100644
--- /dev/null
@@@ -1,131 -1,0 +1,131 @@@
- As an example, let's assume your site is using a theme called "mytheme" when rendering the section list for a `posts` section. Hugo picks `layout/section/posts.html` as the template for [rendering the section][]. The `{{define}}` block in this template tells Hugo that the template is an extension of a base template.
 +---
 +title: Base 模板 and Blocks
 +linktitle:
 +description: The base and block constructs allow you to define the outer shell of your master templates (i.e., the chrome of the page).
 +date: 2017-02-01
 +publishdate: 2018-08-11
 +lastmod: 2017-02-01
 +categories: [templates,fundamentals]
 +keywords: [blocks,base]
 +menu:
 +  docs:
 +    parent: "templates"
 +    weight: 20
 +weight: 20
 +sections_weight: 20
 +draft: false
 +aliases: [/templates/blocks/,/templates/base-templates-and-blocks/]
 +toc: true
 +---
 +
 +The `block` keyword allows you to define the outer shell of your pages' one or more master template(s) and then fill in or override portions as necessary.
 +
 +{{< youtube QVOMCYitLEc >}}
 +
 +## Base Template Lookup Order
 +
 +The [lookup order][lookup] for base templates is as follows:
 +
 +1. `/layouts/section/<TYPE>-baseof.html`
 +2. `/themes/<THEME>/layouts/section/<TYPE>-baseof.html`
 +3. `/layouts/<TYPE>/baseof.html`
 +4. `/themes/<THEME>/layouts/<TYPE>/baseof.html`
 +5. `/layouts/section/baseof.html`
 +6. `/themes/<THEME>/layouts/section/baseof.html`
 +7. `/layouts/_default/<TYPE>-baseof.html`
 +8. `/themes/<THEME>/layouts/_default/<TYPE>-baseof.html`
 +9. `/layouts/_default/baseof.html`
 +10. `/themes/<THEME>/layouts/_default/baseof.html`
 +
 +Variables are denoted by capitalized text set within `<>`. Note that Hugo's default behavior is for `type` to inherit from `section` unless otherwise specified.
 +
 +### Example Base Template Lookup Order
 +
++As an example, let's assume your site is using a theme called "mytheme" when rendering the section list for a `posts` section. Hugo picks `layout/section/posts.html` as the template for [rendering the section]. The `{{define}}` block in this template tells Hugo that the template is an extension of a base template.
 +
 +Here is the lookup order for the `posts` base template:
 +
 +1. `/layouts/section/posts-baseof.html`
 +2. `/themes/mytheme/layouts/section/posts-baseof.html`
 +3. `/layouts/posts/baseof.html`
 +4. `/themes/mytheme/layouts/posts/baseof.html`
 +5. `/layouts/section/baseof.html`
 +6. `/themes/mytheme/layouts/section/baseof.html`
 +7. `/layouts/_default/posts-baseof.html`
 +8. `/themes/mytheme/layouts/_default/posts-baseof.html`
 +9. `/layouts/_default/baseof.html`
 +10. `/themes/mytheme/layouts/_default/baseof.html`
 +
 +## Define the Base Template
 +
 +The following defines a simple base template at `_default/baseof.html`. As a default template, it is the shell from which all your pages will be rendered unless you specify another `*baseof.html` closer to the beginning of the lookup order.
 +
 +{{< code file="layouts/_default/baseof.html" download="baseof.html" >}}
 +<!DOCTYPE html>
 +<html>
 +  <head>
 +    <meta charset="utf-8">
 +    <title>{{ block "title" . }}
 +      <!-- Blocks may include default content. -->
 +      {{ .Site.Title }}
 +    {{ end }}</title>
 +  </head>
 +  <body>
 +    <!-- Code that all your templates share, like a header -->
 +    {{ block "main" . }}
 +      <!-- The part of the page that begins to differ between templates -->
 +    {{ end }}
 +    {{ block "footer" . }}
 +    <!-- More shared code, perhaps a footer but that can be overridden if need be in  -->
 +    {{ end }}
 +  </body>
 +</html>
 +{{< /code >}}
 +
 +## Override the Base Template
 +
 +From the above base template, you can define a [default list template][hugolists]. The default list template will inherit all of the code defined above and can then implement its own `"main"` block from:
 +
 +{{< code file="layouts/_default/list.html" download="list.html" >}}
 +{{ define "main" }}
 +  <h1>Posts</h1>
 +  {{ range .Pages }}
 +    <article>
 +      <h2>{{ .Title }}</h2>
 +      {{ .Content }}
 +    </article>
 +  {{ end }}
 +{{ end }}
 +{{< /code >}}
 +
 +This replaces the contents of our (basically empty) "main" block with something useful for the list template. In this case, we didn't define a `"title"` block, so the contents from our base template remain unchanged in lists.
 +
 +{{% warning %}}
 +Code that you put outside the block definitions *can* break your layout. This even includes HTML comments. For example:
 +
 +```
 +<!-- Seemingly harmless HTML comment..that will break your layout at build -->
 +{{ define "main" }}
 +...your code here
 +{{ end }}
 +```
 +[See this thread from the Hugo discussion forums.](https://discourse.gohugo.io/t/baseof-html-block-templates-and-list-types-results-in-empty-pages/5612/6)
 +{{% /warning %}}
 +
 +The following shows how you can override both the `"main"` and `"title"` block areas from the base template with code unique to your [default single page template][singletemplate]:
 +
 +{{< code file="layouts/_default/single.html" download="single.html" >}}
 +{{ define "title" }}
 +  <!-- This will override the default value set in baseof.html; i.e., "{{.Site.Title}}" in the original example-->
 +  {{ .Title }} &ndash; {{ .Site.Title }}
 +{{ end }}
 +{{ define "main" }}
 +  <h1>{{ .Title }}</h1>
 +  {{ .Content }}
 +{{ end }}
 +{{< /code >}}
 +
 +[hugolists]: /templates/lists
 +[lookup]: /templates/lookup-order/
 +[rendering the section]: /templates/section-templates/
 +[singletemplate]: /templates/single-page-templates/
diff --cc docs/go.mod
index 9abf1e2bc892c7a9b5cbce1b0e924566ed0433b8,0000000000000000000000000000000000000000..6f4856f666b8a85a14cbacb7d2972877b2f2b8ee
mode 100644,000000..100644
--- /dev/null
@@@ -1,5 -1,0 +1,5 @@@
- require github.com/gohugoio/gohugoioTheme v0.0.0-20221206093948-1408550ab675 // indirect
 +module github.com/gohugoio/hugoDocs
 +
 +go 1.16
 +
++require github.com/gohugoio/gohugoioTheme v0.0.0-20221217122332-1c1752ad8f14 // indirect
diff --cc docs/go.sum
index fd600d5b0708a1d73f15f5beb6d20ef65841ed46,0000000000000000000000000000000000000000..465e50591e314d3f3f27e01cb4e8ea819a45e155
mode 100644,000000..100644
--- /dev/null
@@@ -1,49 -1,0 +1,51 @@@
 +github.com/gohugoio/gohugoioTheme v0.0.0-20190808163145-07b3c0f73b02/go.mod h1:kpw3SS48xZvLQGEXKu8u5XHgXkPvL8DX3oGa07+z8Bs=
 +github.com/gohugoio/gohugoioTheme v0.0.0-20191014144142-1f3a01deed7b h1:PWNjl46fvtz54PKO0BdiXOF6/4L/uCP0F3gtcCxGrJs=
 +github.com/gohugoio/gohugoioTheme v0.0.0-20191014144142-1f3a01deed7b/go.mod h1:kpw3SS48xZvLQGEXKu8u5XHgXkPvL8DX3oGa07+z8Bs=
 +github.com/gohugoio/gohugoioTheme v0.0.0-20191021162625-2e7250ca437d h1:D3DcaYkuJbotdWNNAQpQl37txX4HQ6R5uMHoxVmTw0w=
 +github.com/gohugoio/gohugoioTheme v0.0.0-20191021162625-2e7250ca437d/go.mod h1:kpw3SS48xZvLQGEXKu8u5XHgXkPvL8DX3oGa07+z8Bs=
 +github.com/gohugoio/gohugoioTheme v0.0.0-20200123151337-9475fd449324 h1:UZwHDYtGY0uOKIvcm2LWd+xfFxD3X5L222LIJdI5RE4=
 +github.com/gohugoio/gohugoioTheme v0.0.0-20200123151337-9475fd449324/go.mod h1:kpw3SS48xZvLQGEXKu8u5XHgXkPvL8DX3oGa07+z8Bs=
 +github.com/gohugoio/gohugoioTheme v0.0.0-20200123204146-589b4c309025 h1:ScYFARz+bHX1rEr1donVknhRdxGY/cwqK1hHvWEfrlc=
 +github.com/gohugoio/gohugoioTheme v0.0.0-20200123204146-589b4c309025/go.mod h1:kpw3SS48xZvLQGEXKu8u5XHgXkPvL8DX3oGa07+z8Bs=
 +github.com/gohugoio/gohugoioTheme v0.0.0-20200123205007-5d6620a0db26 h1:acXfduibbWxji9tW0WkLHbjcXFsnd5uIwXe0WfwOazg=
 +github.com/gohugoio/gohugoioTheme v0.0.0-20200123205007-5d6620a0db26/go.mod h1:kpw3SS48xZvLQGEXKu8u5XHgXkPvL8DX3oGa07+z8Bs=
 +github.com/gohugoio/gohugoioTheme v0.0.0-20200128164921-1d0bc5482051 h1:cS14MnUGS6xwWYfPNshimm8HdMCZiYBxWkCD0VnvgVw=
 +github.com/gohugoio/gohugoioTheme v0.0.0-20200128164921-1d0bc5482051/go.mod h1:kpw3SS48xZvLQGEXKu8u5XHgXkPvL8DX3oGa07+z8Bs=
 +github.com/gohugoio/gohugoioTheme v0.0.0-20200327225449-368f4cbef8d7 h1:cZ+ahAjSetbFv3aDJ9ipDbKyqaVlmkbSZ5cULgBTh+w=
 +github.com/gohugoio/gohugoioTheme v0.0.0-20200327225449-368f4cbef8d7/go.mod h1:kpw3SS48xZvLQGEXKu8u5XHgXkPvL8DX3oGa07+z8Bs=
 +github.com/gohugoio/gohugoioTheme v0.0.0-20200327231942-7f80b3d02bfa h1:kG+O/wT9UXomzp5eQiUuFVZ0l7YylAW6EVPLyjMxi/c=
 +github.com/gohugoio/gohugoioTheme v0.0.0-20200327231942-7f80b3d02bfa/go.mod h1:kpw3SS48xZvLQGEXKu8u5XHgXkPvL8DX3oGa07+z8Bs=
 +github.com/gohugoio/gohugoioTheme v0.0.0-20200328100657-2bfd5f8c6aee h1:PJZhCwnuVLyafDWNPSHk9iJvk6gEIvPRnycy7Pq3peA=
 +github.com/gohugoio/gohugoioTheme v0.0.0-20200328100657-2bfd5f8c6aee/go.mod h1:kpw3SS48xZvLQGEXKu8u5XHgXkPvL8DX3oGa07+z8Bs=
 +github.com/gohugoio/gohugoioTheme v0.0.0-20200518164958-62cbad03c40f h1:Ge3JACszSUyJW2Az9cJzWdo4PUqdijJA1RxoQSVMBSI=
 +github.com/gohugoio/gohugoioTheme v0.0.0-20200518164958-62cbad03c40f/go.mod h1:kpw3SS48xZvLQGEXKu8u5XHgXkPvL8DX3oGa07+z8Bs=
 +github.com/gohugoio/gohugoioTheme v0.0.0-20200518165806-0095b7b902a7 h1:Sy0hlWyZmFtdSY0Cobvw1ZYm3G1aR5+4DuFNRbMkh48=
 +github.com/gohugoio/gohugoioTheme v0.0.0-20200518165806-0095b7b902a7/go.mod h1:kpw3SS48xZvLQGEXKu8u5XHgXkPvL8DX3oGa07+z8Bs=
 +github.com/gohugoio/gohugoioTheme v0.0.0-20200711112515-b0dfe471654f h1:BWJyycs4HD7tUbaU8RIGeMay84bIBWRVVLE3yajPas4=
 +github.com/gohugoio/gohugoioTheme v0.0.0-20200711112515-b0dfe471654f/go.mod h1:kpw3SS48xZvLQGEXKu8u5XHgXkPvL8DX3oGa07+z8Bs=
 +github.com/gohugoio/gohugoioTheme v0.0.0-20210301124928-2c15837dfec3 h1:ShqzOFeeg54FPSuS6q8HSeTVgj2xNZRe/YS0jNbi21g=
 +github.com/gohugoio/gohugoioTheme v0.0.0-20210301124928-2c15837dfec3/go.mod h1:kpw3SS48xZvLQGEXKu8u5XHgXkPvL8DX3oGa07+z8Bs=
 +github.com/gohugoio/gohugoioTheme v0.0.0-20210409065807-6383d8cbaf65 h1:EJzierSWKqwsrUXU6MaFe0J97c0e5pzl5dBNRRrV2Nc=
 +github.com/gohugoio/gohugoioTheme v0.0.0-20210409065807-6383d8cbaf65/go.mod h1:kpw3SS48xZvLQGEXKu8u5XHgXkPvL8DX3oGa07+z8Bs=
 +github.com/gohugoio/gohugoioTheme v0.0.0-20210409071416-c88da48134b7 h1:uRCgPslaBgLYy4ANXBoPbBQVM8aNiHoxIZTKUXpkuUA=
 +github.com/gohugoio/gohugoioTheme v0.0.0-20210409071416-c88da48134b7/go.mod h1:kpw3SS48xZvLQGEXKu8u5XHgXkPvL8DX3oGa07+z8Bs=
 +github.com/gohugoio/gohugoioTheme v0.0.0-20211211125852-b85e21c1f3d6 h1:lAgdWrn8VEg0PrNCPX4DflCg2msDKpSYV6E8RTNV3N0=
 +github.com/gohugoio/gohugoioTheme v0.0.0-20211211125852-b85e21c1f3d6/go.mod h1:kpw3SS48xZvLQGEXKu8u5XHgXkPvL8DX3oGa07+z8Bs=
 +github.com/gohugoio/gohugoioTheme v0.0.0-20220228085601-7cfbda06d135 h1:6hVzfE9YhSsZP5t6jWjvVp7MoPm7Y5fEhH/ls4ahhKk=
 +github.com/gohugoio/gohugoioTheme v0.0.0-20220228085601-7cfbda06d135/go.mod h1:kpw3SS48xZvLQGEXKu8u5XHgXkPvL8DX3oGa07+z8Bs=
 +github.com/gohugoio/gohugoioTheme v0.0.0-20220905093719-cb8b64046950 h1:Ovlh3nuy/aNptYZHmIra2MP+ZUEqiihY0HxvhdaMqGg=
 +github.com/gohugoio/gohugoioTheme v0.0.0-20220905093719-cb8b64046950/go.mod h1:kpw3SS48xZvLQGEXKu8u5XHgXkPvL8DX3oGa07+z8Bs=
 +github.com/gohugoio/gohugoioTheme v0.0.0-20220912070954-88dcaf003b4d h1:UYJL6RmEepprvlgHvDnFCWtPOvjmqzFCQ90cRDRBO7U=
 +github.com/gohugoio/gohugoioTheme v0.0.0-20220912070954-88dcaf003b4d/go.mod h1:kpw3SS48xZvLQGEXKu8u5XHgXkPvL8DX3oGa07+z8Bs=
 +github.com/gohugoio/gohugoioTheme v0.0.0-20220914071648-0ef1c51685bf h1:A8Ksnvp8reNt2Ap0mUK7gFkJkCjt9R60yopGsezcOBA=
 +github.com/gohugoio/gohugoioTheme v0.0.0-20220914071648-0ef1c51685bf/go.mod h1:kpw3SS48xZvLQGEXKu8u5XHgXkPvL8DX3oGa07+z8Bs=
 +github.com/gohugoio/gohugoioTheme v0.0.0-20221116211530-5ae8dcdd68d6 h1:eG53kL1LkQuKmrDdzbvvx6d60qM07zp2Wjo/tYxkDOY=
 +github.com/gohugoio/gohugoioTheme v0.0.0-20221116211530-5ae8dcdd68d6/go.mod h1:kpw3SS48xZvLQGEXKu8u5XHgXkPvL8DX3oGa07+z8Bs=
 +github.com/gohugoio/gohugoioTheme v0.0.0-20221118083537-967e29e21382 h1:e30rl1dxWkYOcgdl0omeOK0HBzgDLI/b9MfYHrINjzU=
 +github.com/gohugoio/gohugoioTheme v0.0.0-20221118083537-967e29e21382/go.mod h1:kpw3SS48xZvLQGEXKu8u5XHgXkPvL8DX3oGa07+z8Bs=
 +github.com/gohugoio/gohugoioTheme v0.0.0-20221124154621-1451a01f406b h1:TRrIisSY7ckt9FVHOOQtmKG4jsnORCYn72UMvMu+IQ0=
 +github.com/gohugoio/gohugoioTheme v0.0.0-20221124154621-1451a01f406b/go.mod h1:kpw3SS48xZvLQGEXKu8u5XHgXkPvL8DX3oGa07+z8Bs=
 +github.com/gohugoio/gohugoioTheme v0.0.0-20221206093948-1408550ab675 h1:wjpYa1cTELeceWndBDV7IG2vRxRWICBBO79HObOfTtk=
 +github.com/gohugoio/gohugoioTheme v0.0.0-20221206093948-1408550ab675/go.mod h1:kpw3SS48xZvLQGEXKu8u5XHgXkPvL8DX3oGa07+z8Bs=
++github.com/gohugoio/gohugoioTheme v0.0.0-20221217122332-1c1752ad8f14 h1:K6tPFpi7W0zb89QIf+lNdgdTXfDFemU6NKk46MlX9lQ=
++github.com/gohugoio/gohugoioTheme v0.0.0-20221217122332-1c1752ad8f14/go.mod h1:kpw3SS48xZvLQGEXKu8u5XHgXkPvL8DX3oGa07+z8Bs=
index 4dd3bd1c36554cf9e4c3bf39c390a66eeff9ed44,0000000000000000000000000000000000000000..51c25ef3cff1cc17a277d8fe0e5721d1c911b1b3
mode 100644,000000..100644
--- /dev/null
@@@ -1,35 -1,0 +1,35 @@@
- HUGO_VERSION = "0.107.0"
 +[build]
 +publish = "public"
 +command = "hugo --gc --minify"
 +
 +[context.production.environment]
- HUGO_VERSION = "0.107.0"
++HUGO_VERSION = "0.108.0"
 +HUGO_ENV = "production"
 +HUGO_ENABLEGITINFO = "true"
 +
 +[context.split1]
 +command = "hugo --gc --minify --enableGitInfo"
 +
 +[context.split1.environment]
- HUGO_VERSION = "0.107.0"
++HUGO_VERSION = "0.108.0"
 +HUGO_ENV = "production"
 +
 +[context.deploy-preview]
 +command = "hugo --gc --minify --buildFuture -b $DEPLOY_PRIME_URL"
 +
 +[context.deploy-preview.environment]
- HUGO_VERSION = "0.107.0"
++HUGO_VERSION = "0.108.0"
 +
 +[context.branch-deploy]
 +command = "hugo --gc --minify -b $DEPLOY_PRIME_URL"
 +
 +[context.branch-deploy.environment]
++HUGO_VERSION = "0.108.0"
 +
 +[context.next.environment]
 +HUGO_ENABLEGITINFO = "true"
 +
 +[[redirects]]
 +from = "/npmjs/*"
 +to = "/npmjs/"
 +status = 200