diff options
author | Bjørn Erik Pedersen <[email protected]> | 2024-01-27 10:48:33 +0100 |
---|---|---|
committer | Bjørn Erik Pedersen <[email protected]> | 2024-01-27 10:48:57 +0100 |
commit | 5fd1e7490305570872d3899f5edda950903c5213 (patch) | |
tree | f0cdc490a0942d720494c0044a64c6397d1ab6a5 /docs | |
parent | fc7de7136acbcf0aef54ae8460c7702bc83709be (diff) | |
parent | 9b0050e9aabe4be65c78ccf292a348f309d50ccd (diff) | |
download | hugo-5fd1e7490305570872d3899f5edda950903c5213.tar.gz hugo-5fd1e7490305570872d3899f5edda950903c5213.zip |
Merge commit '9b0050e9aabe4be65c78ccf292a348f309d50ccd' as 'docs'
```
git subtree add --prefix=docs/ https://github.com/gohugoio/hugoDocs.git master --squash
```
Closes #11925
Diffstat (limited to 'docs')
1158 files changed, 64103 insertions, 0 deletions
diff --git a/docs/.cspell.json b/docs/.cspell.json new file mode 100644 index 000000000..b8ea0610f --- /dev/null +++ b/docs/.cspell.json @@ -0,0 +1,138 @@ +{ + "version": "0.2", + "allowCompoundWords": true, + "files": [ + "**/*.md" + ], + "flagWords": [ + "alot", + "hte", + "langauge", + "reccommend", + "seperate", + "teh" + ], + "ignorePaths": [ + "**/emojis.md", + "**/commands/*", + "**/showcase/*", + "**/tools/*" + ], + "ignoreRegExpList": [ + "# cspell: ignore fenced code blocks", + "^(\\s*`{3,}).*[\\s\\S]*?^\\1", + "# cspell: ignore words joined with dot", + "\\w+\\.\\w+", + "# cspell: ignore strings within backticks", + "`.+`", + "# cspell: ignore strings within single quotes", + "'.+'", + "# cspell: ignore strings within double quotes", + "\".+\"", + "# cspell: ignore strings within brackets", + "\\[.+\\]", + "# cspell: ignore strings within parentheses", + "\\(.+\\)", + "# cspell: ignore words that begin with a slash", + "/\\w+", + "# cspell: ignore everything within action delimiters", + "\\{\\{.+\\}\\}", + "# cspell: ignore everything after a right arrow", + "\\s+→\\s+.+" + ], + "language": "en", + "words": [ + "antialiasing", + "codeowners", + "composability", + "configurators", + "defang", + "deindent", + "downscale", + "downscaled", + "downscaling", + "exif", + "geolocalized", + "grayscale", + "marshal", + "marshaling", + "multihost", + "performantly", + "preconfigured", + "prerendering", + "redirection", + "redirections", + "shortcode", + "shortcodes", + "subexpression", + "subexpressions", + "suppressable", + "templating", + "transpile", + "transpiles", + "unmarshal", + "unmarshals", + "unmarshaling", + "# ----------------------------------------------------------------------", + "# cspell: ignore foreign language words", + "# ----------------------------------------------------------------------", + "bezpieczeństwo", + "dokumentation", + "libros", + "miesiąc", + "miesiąc", + "miesięcy", + "miesięcy", + "misérables", + "projekt", + "régime", + "# ----------------------------------------------------------------------", + "# cspell: ignore proper nouns", + "# ----------------------------------------------------------------------", + "Eliott", + "Gregor", + "Jaco", + "Noll", + "Pastorius", + "Samsa", + "# ----------------------------------------------------------------------", + "# cspell: ignore operating systems and software packages", + "# ----------------------------------------------------------------------", + "asciidoctor", + "brotli", + "corejs", + "disqus", + "doas", + "eopkg", + "gitee", + "goldmark", + "KaTeX", + "kubuntu", + "lubuntu", + "MathJax", + "nosql", + "pandoc", + "pkgin", + "rclone", + "xubuntu", + "# ----------------------------------------------------------------------", + "# cspell: ignore miscellaneous", + "# ----------------------------------------------------------------------", + "dring", + "getenv", + "gohugo", + "inor", + "jdoe", + "milli", + "rgba", + "rsmith", + "stringifier", + "struct", + "tdewolff", + "tjones", + "toclevels", + "vals", + "xfeff", + "zgotmplz" + ] +} diff --git a/docs/.editorconfig b/docs/.editorconfig new file mode 100644 index 000000000..dd2a0096f --- /dev/null +++ b/docs/.editorconfig @@ -0,0 +1,20 @@ +# https://editorconfig.org + +root = true + +[*] +charset = utf-8 +end_of_line = lf +indent_size = 2 +indent_style = space +trim_trailing_whitespace = true + +[*.go] +indent_size = 8 +indent_style = tab + +[*.js] +insert_final_newline = true + +[*.md] +trim_trailing_whitespace = false diff --git a/docs/.github/SUPPORT.md b/docs/.github/SUPPORT.md new file mode 100644 index 000000000..96a4400c3 --- /dev/null +++ b/docs/.github/SUPPORT.md @@ -0,0 +1,3 @@ +### Asking support questions + +We have an active [discussion forum](https://discourse.gohugo.io) where users and developers can ask questions. Please don't use the GitHub issue tracker to ask questions. diff --git a/docs/.github/stale.yml b/docs/.github/stale.yml new file mode 100644 index 000000000..1e72eb329 --- /dev/null +++ b/docs/.github/stale.yml @@ -0,0 +1,22 @@ +# Number of days of inactivity before an issue becomes stale +daysUntilStale: 120 +# Number of days of inactivity before a stale issue is closed +daysUntilClose: 30 +# Issues with these labels will never be considered stale +exemptLabels: + - Keep + - Security + - UndocumentedFeature +# Label to use when marking an issue as stale +staleLabel: Stale +# Comment to post when marking an issue as stale. Set to `false` to disable +markComment: > + This issue has been automatically marked as stale because it has not had + recent activity. The resources of the Hugo team are limited, and so we are asking for your help. + + If you still think this is important, please tell us why. + + This issue will automatically be closed in the near future if no further activity occurs. Thank you for all your contributions. + +# Comment to post when closing a stale issue. Set to `false` to disable +closeComment: false diff --git a/docs/.github/workflows/codeql-analysis.yml b/docs/.github/workflows/codeql-analysis.yml new file mode 100644 index 000000000..48555823e --- /dev/null +++ b/docs/.github/workflows/codeql-analysis.yml @@ -0,0 +1,26 @@ +name: "CodeQL" + +on: + schedule: + - cron: "0 0 1 * *" + +jobs: + analyze: + name: Analyze + runs-on: ubuntu-latest + permissions: + actions: read + contents: read + security-events: write + + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Initialize CodeQL + uses: github/codeql-action/init@v2 + with: + languages: "javascript" + + - name: Perform CodeQL Analysis + uses: github/codeql-action/analyze@v2 diff --git a/docs/.github/workflows/spellcheck.yml b/docs/.github/workflows/spellcheck.yml new file mode 100644 index 000000000..86f8f53a5 --- /dev/null +++ b/docs/.github/workflows/spellcheck.yml @@ -0,0 +1,22 @@ +name: "Check spelling" +on: + push: + pull_request: + branches-ignore: + - "dependabot/**" + +permissions: + contents: read + +jobs: + spellcheck: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: streetsidesoftware/cspell-action@v5 + with: + check_dot_files: false + files: content/**/*.md + incremental_files_only: true + inline: warning + strict: false diff --git a/docs/.github/workflows/super-linter.yml b/docs/.github/workflows/super-linter.yml new file mode 100644 index 000000000..b2a5cb6f1 --- /dev/null +++ b/docs/.github/workflows/super-linter.yml @@ -0,0 +1,41 @@ +name: Super Linter + +on: + workflow_dispatch: + +permissions: + contents: read # to fetch code (actions/checkout) + +jobs: + build: + permissions: + contents: read # to fetch code (actions/checkout) + statuses: write # to mark status of each linter run (github/super-linter/slim) + + name: Lint Code Base + runs-on: ubuntu-latest + if: ${{ github.actor != 'dependabot[bot]' }} + + steps: + - name: Checkout Code + uses: actions/checkout@v4 + + - name: Lint Code Base + uses: super-linter/super-linter/slim@v5 + env: + DEFAULT_BRANCH: master + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + IGNORE_GITIGNORED_FILES: true + LINTER_RULES_PATH: / + LOG_LEVEL: NOTICE + MARKDOWN_CONFIG_FILE: .markdownlint.yaml + SUPPRESS_POSSUM: true + VALIDATE_CSS: false + VALIDATE_EDITORCONFIG: false + VALIDATE_GITLEAKS: false + VALIDATE_HTML: false + VALIDATE_JAVASCRIPT_STANDARD: false + VALIDATE_JSCPD: false + VALIDATE_NATURAL_LANGUAGE: false + VALIDATE_SHELL_SHFMT: false + VALIDATE_XML: false diff --git a/docs/.gitignore b/docs/.gitignore new file mode 100644 index 000000000..f9cab2f80 --- /dev/null +++ b/docs/.gitignore @@ -0,0 +1,10 @@ +/.idea +/.vscode +/public +/dist +node_modules +nohup.out +.DS_Store +trace.out +.hugo_build.lock +resources/_gen/images/
\ No newline at end of file diff --git a/docs/.markdownlint.yaml b/docs/.markdownlint.yaml new file mode 100644 index 000000000..d9c2c5a67 --- /dev/null +++ b/docs/.markdownlint.yaml @@ -0,0 +1,25 @@ +# https://github.com/DavidAnson/markdownlint/blob/main/doc/Rules.md + +MD001: false +MD002: false +MD003: false +MD004: false +MD007: false +MD012: + maximum: 2 +MD013: false +MD014: false +MD022: false +MD024: false +MD031: false +MD032: false +MD033: false +MD034: false +MD036: false +MD037: false +MD038: false +MD041: false +MD046: false +MD049: false +MD050: false +MD053: false diff --git a/docs/.markdownlintignore b/docs/.markdownlintignore new file mode 100644 index 000000000..4ac45b395 --- /dev/null +++ b/docs/.markdownlintignore @@ -0,0 +1,6 @@ +**/commands/** +**/functions/** +**/news/** +**/showcase/** +**/zh/** +**/license.md diff --git a/docs/.textlintignore b/docs/.textlintignore new file mode 100644 index 000000000..97a18e37c --- /dev/null +++ b/docs/.textlintignore @@ -0,0 +1,3 @@ +**/news/** +**/showcase/** +**/zh/**
\ No newline at end of file diff --git a/docs/.vscode/extensions.json b/docs/.vscode/extensions.json new file mode 100644 index 000000000..76c6afe3f --- /dev/null +++ b/docs/.vscode/extensions.json @@ -0,0 +1,7 @@ +{ + "recommendations": [ + "DavidAnson.vscode-markdownlint", + "EditorConfig.EditorConfig", + "streetsidesoftware.code-spell-checker" + ] +} diff --git a/docs/LICENSE.md b/docs/LICENSE.md new file mode 100644 index 000000000..b09cd7856 --- /dev/null +++ b/docs/LICENSE.md @@ -0,0 +1,201 @@ +Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/docs/README.md b/docs/README.md new file mode 100644 index 000000000..bf5d9402c --- /dev/null +++ b/docs/README.md @@ -0,0 +1,56 @@ +[![Netlify Status](https://api.netlify.com/api/v1/badges/e0dbbfc7-34f1-4393-a679-c16e80162705/deploy-status)](https://app.netlify.com/sites/gohugoio/deploys) +[![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg?style=flat-square)](https://gohugo.io/contribute/documentation/) + +# Hugo Docs + +Documentation site for [Hugo](https://github.com/gohugoio/hugo), the very fast and flexible static site generator built with love in Go. + +## Contributing + +We welcome contributions to Hugo of any kind including documentation, suggestions, bug reports, pull requests etc. Also check out our [contribution guide](https://gohugo.io/contribute/documentation/). We would love to hear from you. + +Note that this repository contains solely the documentation for Hugo. For contributions that aren't documentation-related please refer to the [hugo](https://github.com/gohugoio/hugo) repository. + +*Pull requests shall **only** contain changes to the actual documentation. However, changes on the codebase of Hugo **and** the documentation shall be a single, atomic pull request in the [hugo](https://github.com/gohugoio/hugo) repository.* + +Spelling fixes are most welcomed, and if you want to contribute longer sections to the documentation, it would be great if you had the following criteria in mind when writing: + +* Short is good. People go to the library to read novels. If there is more than one way to _do a thing_ in Hugo, describe the current _best practice_ (avoid "… but you can also do …" and "… in older versions of Hugo you had to …". +* For example, try to find short snippets that teaches people about the concept. If the example is also useful as-is (copy and paste), then great. Don't list long and similar examples just so people can use them on their sites. +* Hugo has users from all over the world, so easy to understand and [simple English](https://simple.wikipedia.org/wiki/Basic_English) is good. + +## Edit the theme + +If you want to do docs-related theme changes, the simplest way is to have both `hugoDocs` and `gohugoioTheme` cloned as sibling directories, and then run: + +```sh +HUGO_MODULE_WORKSPACE=hugo.work hugo server --ignoreVendorPaths "**" +``` + +## Branches + +* The `master` branch is where the site is automatically built from, and is the place to put changes relevant to the current Hugo version. +* The `next` branch is where we store changes that are related to the next Hugo release. This can be previewed here: https://next--gohugoio.netlify.com/ + +## Build + +To view the documentation site locally, you need to clone this repository: + +```sh +git clone https://github.com/gohugoio/hugoDocs.git +``` + +Also note that the documentation version for a given version of Hugo can also be found in the `/docs` sub-folder of the [Hugo source repository](https://github.com/gohugoio/hugo). + +Then to view the docs in your browser, run Hugo and open up the link: + +```sh +▶ hugo server + +Started building sites ... +. +. +Serving pages from memory +Web Server is available at http://localhost:1313/ (bind address 127.0.0.1) +Press Ctrl+C to stop +``` diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/assets/css/_algolia.css b/docs/_vendor/github.com/gohugoio/gohugoioTheme/assets/css/_algolia.css new file mode 100644 index 000000000..0122f9758 --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/assets/css/_algolia.css @@ -0,0 +1,11 @@ +.searchbox{display:inline-block;position:relative;width:200px;height:32px!important;white-space:nowrap;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;box-sizing:border-box;transition:box-shadow .4s ease,background .4s ease;border:0;border-radius:16px;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{box-shadow:inset 0 0 0 1px #b3b3b3}.searchbox__input:active,.searchbox__input:focus{outline:0;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;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 *{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;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;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} +/*# sourceMappingURL=docsearch.min.css.map */ +a.algolia-docsearch-suggestion { + text-decoration: none !important; +} +.algolia-docsearch-suggestion--category-header { + background: #0594cb; + padding-left: .25rem !important; + color: white !important; + border-radius: 3px; +} diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/assets/css/_animation.css b/docs/_vendor/github.com/gohugoio/gohugoioTheme/assets/css/_animation.css new file mode 100644 index 000000000..997931ac4 --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/assets/css/_animation.css @@ -0,0 +1,21 @@ +.animated { + animation-duration: .5s; + animation-fill-mode: forwards; + animation-timing-function: ease-in-out; +} + +@keyframes fadeIn { + from { + opacity: 0; + } + + to { + opacity: 1; + } +} +.fadeIn { + animation-name: fadeIn; +} +.animated-delay-1 { + animation-delay: 0.5s; +} diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/assets/css/_carousel.css b/docs/_vendor/github.com/gohugoio/gohugoioTheme/assets/css/_carousel.css new file mode 100644 index 000000000..11fae8702 --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/assets/css/_carousel.css @@ -0,0 +1,25 @@ +/* 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 { + transition: 450ms transform; + font-size: 0; +} +.tile { + transition: 450ms all; +} +.details { + background: -webkit-gradient(linear, left bottom, left top, from(rgba(0,0,0,0.9)), to(rgba(0,0,0,0))); + background: linear-gradient(to top, rgba(0,0,0,0.9) 0%, rgba(0,0,0,0) 100%); + transition: 450ms opacity; +} +.tile:hover .details { + opacity: 1; +} +.row:hover .tile { + opacity: 0.3; +} +.row:hover .tile:hover { + opacity: 1; +} diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/assets/css/_chroma.css b/docs/_vendor/github.com/gohugoio/gohugoioTheme/assets/css/_chroma.css new file mode 100644 index 000000000..d00ea65e6 --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/assets/css/_chroma.css @@ -0,0 +1,65 @@ +/* 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 } diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/assets/css/_code.css b/docs/_vendor/github.com/gohugoio/gohugoioTheme/assets/css/_code.css new file mode 100644 index 000000000..c82e77ee7 --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/assets/css/_code.css @@ -0,0 +1,89 @@ +.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 +} diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/assets/css/_color-scheme.css b/docs/_vendor/github.com/gohugoio/gohugoioTheme/assets/css/_color-scheme.css new file mode 100644 index 000000000..1d61a7725 --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/assets/css/_color-scheme.css @@ -0,0 +1,38 @@ +.primary-color {color: var(--primary-color)} +.bg-primary-color {background-color: var(--primary-color)} +.hover-bg-primary-color:hover {background-color: var(--primary-color)} + +.primary-color-dark {color: var(--primary-color-dark)} +.bg-primary-color-dark {background-color: var(--primary-color-dark)} +.hover-bg-primary-color-dark:hover {background-color: var(--primary-color-dark)} + +.primary-color-light {color: var(--primary-color-light)} +.bg-primary-color-light {background-color: var(--primary-color-light)} +.hover-bg-primary-color-light:hover {background-color: var(--primary-color-light)} + +.accent-color {color: var(--accent-color)} +.bg-accent-color {background-color: var(--accent-color)} +.hover-bg-accent-color:hover {background-color: var(--accent-color)} + +.accent-color-light {color: var(--accent-color-light)} +.hover-accent-color-light:hover {color: var(--accent-color-light)} +.bg-accent-color-light {background-color: var(--accent-color-light)} +.hover-bg-accent-color-light:hover {background-color: var(--accent-color-light)} + +.accent-color-dark {color: var(--accent-color-dark)} +.bg-accent-color-dark {background-color: var(--accent-color-dark)} +.hover-bg-accent-color-dark:hover {background-color: var(--accent-color-dark)} + +.text-color-primary {color: var(--text-color-primary)} +.text-on-primary-color {color: var(--text-on-primary-color)} +.text-color-secondary {color: var(--text-color-secondary)} +.text-color-disabled {color: var(--text-color-disabled)} +.divider-color {color: var(--divider-color)} +.warn-color {color: var(--warn-color)} + + +.nested-links a { + color: var(--primary-color); + text-decoration: none; + +} diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/assets/css/_columns.css b/docs/_vendor/github.com/gohugoio/gohugoioTheme/assets/css/_columns.css new file mode 100644 index 000000000..e1e938c74 --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/assets/css/_columns.css @@ -0,0 +1,11 @@ +.column-count-2 {column-count: 1} +.column-gap-1 {column-gap: 0} +.break-inside-avoid {break-inside: auto} + + +@media (--breakpoint-large) { + .column-count-3-l {column-count: 3} + .column-count-2-l {column-count: 2} + .column-gap-1-l {column-gap: 1} + .break-inside-avoid-l {break-inside: avoid} +} diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/assets/css/_content-tables.css b/docs/_vendor/github.com/gohugoio/gohugoioTheme/assets/css/_content-tables.css new file mode 100644 index 000000000..4e092e8bf --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/assets/css/_content-tables.css @@ -0,0 +1,28 @@ +.prose table { + width: 100%; + margin-bottom: 3em; + border-collapse: collapse; + border-spacing: 0; + font-size: 1em; + border: 1px solid var(--light-gray); + & th { + background-color: var(--primary-color); + border-bottom: 1px solid var(--primary-color); + color: white; + font-weight: 400; + + text-align: left; + padding: .375em .5em; + } + + & td, & tc { + padding: .75em .5em; + text-align: left; + border-right: 1px solid var(--light-gray); + } + +} + +.prose table tr:nth-child(even) { + background-color: var(--light-gray); +} diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/assets/css/_content.css b/docs/_vendor/github.com/gohugoio/gohugoioTheme/assets/css/_content.css new file mode 100644 index 000000000..9306f8b2f --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/assets/css/_content.css @@ -0,0 +1,53 @@ +.prose ul, .prose ol { + margin-bottom: 2em; +} +.prose ul li, .prose ol li { + margin-bottom: .5em; +} +.prose li:hover { + background-color: var(--light-gray) +} +.prose ::selection { + background: var(--primary-color); /* WebKit/Blink Browsers */ + color: white; +} + +.prose-glossary h3 { + margin-top: 0; + font-size: 1.125rem; +} + +.prose-glossary h3:first-of-type { + margin-top: 3em; +} + +.prose-glossary h3 ~ p { + margin: 0.5em 0 2em 0; +} + +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;} diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/assets/css/_definition-lists.css b/docs/_vendor/github.com/gohugoio/gohugoioTheme/assets/css/_definition-lists.css new file mode 100644 index 000000000..e28f67d4b --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/assets/css/_definition-lists.css @@ -0,0 +1,9 @@ + +dl dt { + font-weight: bold; + font-size: 1.125rem; +} +dd { + margin: .5em 0 2em 0; + padding: 0; +} diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/assets/css/_documentation-styles.css b/docs/_vendor/github.com/gohugoio/gohugoioTheme/assets/css/_documentation-styles.css new file mode 100644 index 000000000..0ea8e9b72 --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/assets/css/_documentation-styles.css @@ -0,0 +1,54 @@ +.note, +.warning { + + border-left-width: 4px; + border-left-style: solid; + position: relative; + border-color: var(--primary-color); + + display: block; +} +.note #exclamation-icon, +.warning #exclamation-icon { + + fill: var(--primary-color); + 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: var(--black-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; + &.minor { + font-size: inherit; + margin-top: inherit; + border-bottom: none; + } + } + + diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/assets/css/_fluid-type.css b/docs/_vendor/github.com/gohugoio/gohugoioTheme/assets/css/_fluid-type.css new file mode 100644 index 000000000..da9f04c81 --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/assets/css/_fluid-type.css @@ -0,0 +1,10 @@ +.f2-fluid { + font-size: 2.25rem; +} + +@media (--breakpoint-large) { + .f2-fluid { + font-size: 1.25rem; + font-size: calc(0.875rem + 0.5 * ((100vw - 20rem) / 60)); + } +} diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/assets/css/_font-family.css b/docs/_vendor/github.com/gohugoio/gohugoioTheme/assets/css/_font-family.css new file mode 100644 index 000000000..440b5efdd --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/assets/css/_font-family.css @@ -0,0 +1,80 @@ +/* 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; +} diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/assets/css/_header-link.css b/docs/_vendor/github.com/gohugoio/gohugoioTheme/assets/css/_header-link.css new file mode 100644 index 000000000..56a16be6d --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/assets/css/_header-link.css @@ -0,0 +1,15 @@ +.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; +} diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/assets/css/_hugo-internal-template-styling.css b/docs/_vendor/github.com/gohugoio/gohugoioTheme/assets/css/_hugo-internal-template-styling.css new file mode 100644 index 000000000..0b1df9610 --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/assets/css/_hugo-internal-template-styling.css @@ -0,0 +1,52 @@ +/* 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; + +} diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/assets/css/_no-js.css b/docs/_vendor/github.com/gohugoio/gohugoioTheme/assets/css/_no-js.css new file mode 100644 index 000000000..7991450fe --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/assets/css/_no-js.css @@ -0,0 +1,7 @@ +.no-js .needs-js { + opacity: 0 +} +.js .needs-js { + opacity: 1; + transition: opacity .15s ease-in; +} diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/assets/css/_print.css b/docs/_vendor/github.com/gohugoio/gohugoioTheme/assets/css/_print.css new file mode 100644 index 000000000..c0be3af61 --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/assets/css/_print.css @@ -0,0 +1,7 @@ +@media print { + #page-footer, + body > footer, + body > nav { + display: none; + } +} diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/assets/css/_right-sidebar.css b/docs/_vendor/github.com/gohugoio/gohugoioTheme/assets/css/_right-sidebar.css new file mode 100644 index 000000000..757457b2d --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/assets/css/_right-sidebar.css @@ -0,0 +1,11 @@ +#right-sidebar { + scrollbar-width: none; /* hide scrollbar: Firefox */ + -ms-overflow-style: none; /* hide scrollbar: Internet Explorer 10+ */ + height: calc(100vh - 9rem); + overflow-y: auto; +} + +#right-sidebar::-webkit-scrollbar { /* hide scrollbar: WebKit */ + width: 0; + height: 0; +} diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/assets/css/_shame.css b/docs/_vendor/github.com/gohugoio/gohugoioTheme/assets/css/_shame.css new file mode 100644 index 000000000..634adbf06 --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/assets/css/_shame.css @@ -0,0 +1,20 @@ +/* +Make h6 elements behave like dt elements. Initially implemented to support +linkable glossary entries. + +Yes, it's a hack. That's why it's in the shame file. +*/ + +h6 { + margin-top: 0; + margin-bottom: 0; + font-size: 1.125rem; +} + +h6:first-of-type { + margin-top: 3em; +} + +h6 ~ p { + margin: 0.5em 0 2em 0; +} diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/assets/css/_social-icons.css b/docs/_vendor/github.com/gohugoio/gohugoioTheme/assets/css/_social-icons.css new file mode 100644 index 000000000..6cfa7b1b4 --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/assets/css/_social-icons.css @@ -0,0 +1,52 @@ +.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; +} + +.mstdn { + display: inline-block; + background-color: #282c37; + color: #d9e1e8; + text-decoration: none; + padding: 4px 10px 4px 30px; + border-radius: 4px; + font-size: 16px; + background-image: url("data:image/svg+xml;charset=utf8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2261.076954mm%22%20height%3D%2265.47831mm%22%20viewBox%3D%220%200%20216.4144%20232.00976%22%3E%3Cpath%20d%3D%22M211.80734%20139.0875c-3.18125%2016.36625-28.4925%2034.2775-57.5625%2037.74875-15.15875%201.80875-30.08375%203.47125-45.99875%202.74125-26.0275-1.1925-46.565-6.2125-46.565-6.2125%200%202.53375.15625%204.94625.46875%207.2025%203.38375%2025.68625%2025.47%2027.225%2046.39125%2027.9425%2021.11625.7225%2039.91875-5.20625%2039.91875-5.20625l.8675%2019.09s-14.77%207.93125-41.08125%209.39c-14.50875.7975-32.52375-.365-53.50625-5.91875C9.23234%20213.82%201.40609%20165.31125.20859%20116.09125c-.365-14.61375-.14-28.39375-.14-39.91875%200-50.33%2032.97625-65.0825%2032.97625-65.0825C49.67234%203.45375%2078.20359.2425%20107.86484%200h.72875c29.66125.2425%2058.21125%203.45375%2074.8375%2011.09%200%200%2032.975%2014.7525%2032.975%2065.0825%200%200%20.41375%2037.13375-4.59875%2062.915%22%20fill%3D%22%233088d4%22%2F%3E%3Cpath%20d%3D%22M177.50984%2080.077v60.94125h-24.14375v-59.15c0-12.46875-5.24625-18.7975-15.74-18.7975-11.6025%200-17.4175%207.5075-17.4175%2022.3525v32.37625H96.20734V85.42325c0-14.845-5.81625-22.3525-17.41875-22.3525-10.49375%200-15.74%206.32875-15.74%2018.7975v59.15H38.90484V80.077c0-12.455%203.17125-22.3525%209.54125-29.675%206.56875-7.3225%2015.17125-11.07625%2025.85-11.07625%2012.355%200%2021.71125%204.74875%2027.8975%2014.2475l6.01375%2010.08125%206.015-10.08125c6.185-9.49875%2015.54125-14.2475%2027.8975-14.2475%2010.6775%200%2019.28%203.75375%2025.85%2011.07625%206.36875%207.3225%209.54%2017.22%209.54%2029.675%22%20fill%3D%22%23fff%22%2F%3E%3C%2Fsvg%3E"); + background-size: 16px; + background-repeat: no-repeat; + background-position: top 50% left 8px; + transition: all 0.5s; +} +.mstdn:hover { + background-color: #484c56; +} + +.mstdn > span { + color: #9baec8; + font-size: 12px; + padding-left: 3px; +} +.mstdn > span:before { + content: "@"; +} diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/assets/css/_stickyheader.css b/docs/_vendor/github.com/gohugoio/gohugoioTheme/assets/css/_stickyheader.css new file mode 100644 index 000000000..7759bed96 --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/assets/css/_stickyheader.css @@ -0,0 +1,15 @@ + +@media (min-width: 75em) { + + [data-scrolldir="down"] .sticky { + position: fixed; + top:100px; + right:0; + } + + [data-scrolldir="up"] .sticky { + position: fixed; + top:100px; + right:0; + } +} diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/assets/css/_svg.css b/docs/_vendor/github.com/gohugoio/gohugoioTheme/assets/css/_svg.css new file mode 100644 index 000000000..299a4a963 --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/assets/css/_svg.css @@ -0,0 +1 @@ +.fill-current { fill: currentColor; } diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/assets/css/_tabs.css b/docs/_vendor/github.com/gohugoio/gohugoioTheme/assets/css/_tabs.css new file mode 100644 index 000000000..6e0022cc9 --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/assets/css/_tabs.css @@ -0,0 +1,34 @@ +.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; +}
\ No newline at end of file diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/assets/css/_tachyons.css b/docs/_vendor/github.com/gohugoio/gohugoioTheme/assets/css/_tachyons.css new file mode 100644 index 000000000..d697c4d85 --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/assets/css/_tachyons.css @@ -0,0 +1,94 @@ +/*! 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 */ +@import 'tachyons/src/_normalize'; + + +/* Modules */ +@import 'tachyons/src/_box-sizing'; +/*@import 'tachyons/src/_aspect-ratios';*/ +@import 'tachyons/src/_images'; +@import 'tachyons/src/_background-size'; +@import 'tachyons/src/_background-position'; +/*@import 'tachyons/src/_outlines';*/ +@import 'tachyons/src/_borders'; +@import 'tachyons/src/_border-colors'; +@import 'tachyons/src/_border-radius'; +@import 'tachyons/src/_border-style'; +@import 'tachyons/src/_border-widths'; +@import 'tachyons/src/_box-shadow'; +/*@import 'tachyons/src/_code';*/ +@import 'tachyons/src/_coordinates'; +@import 'tachyons/src/_clears'; +@import 'tachyons/src/_display'; +@import 'tachyons/src/_flexbox'; +@import 'tachyons/src/_floats'; +/*@import 'tachyons/src/_font-family';*/ +@import 'tachyons/src/_font-style'; +@import 'tachyons/src/_font-weight'; +@import 'tachyons/src/_forms'; +@import 'tachyons/src/_heights'; +@import 'tachyons/src/_letter-spacing'; +@import 'tachyons/src/_line-height'; +@import 'tachyons/src/_links'; +@import 'tachyons/src/_lists'; +@import 'tachyons/src/_max-widths'; +@import 'tachyons/src/_widths'; +@import 'tachyons/src/_overflow'; +@import 'tachyons/src/_position'; +@import 'tachyons/src/_opacity'; +/*@import 'tachyons/src/_rotations';*/ +@import 'tachyons/src/_skins'; +@import 'tachyons/src/_skins-pseudo'; +@import 'tachyons/src/_spacing'; +@import 'tachyons/src/_negative-margins'; +@import 'tachyons/src/_tables'; +@import 'tachyons/src/_text-decoration'; +@import 'tachyons/src/_text-align'; +@import 'tachyons/src/_text-transform'; +@import 'tachyons/src/_type-scale'; +@import 'tachyons/src/_typography'; +@import 'tachyons/src/_utilities'; +@import 'tachyons/src/_visibility'; +@import 'tachyons/src/_white-space'; +@import 'tachyons/src/_vertical-align'; +@import 'tachyons/src/_hovers'; +@import 'tachyons/src/_z-index'; +@import 'tachyons/src/_nested'; +/*@import 'tachyons/src/_styles';*/ + +/* Variables */ +/* Importing here will allow you to override any variables in the modules */ +@import 'tachyons/src/_colors'; +@import 'tachyons/src/_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'; */ diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/assets/css/_variables.css b/docs/_vendor/github.com/gohugoio/gohugoioTheme/assets/css/_variables.css new file mode 100644 index 000000000..8701b1530 --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/assets/css/_variables.css @@ -0,0 +1,16 @@ +:root { + --primary-color: #0594CB; + --primary-color-dark: #0A1922; + --primary-color-light: #f9f9f9; + --accent-color: #EBB951; + --accent-color-light: #FF4088; + --accent-color-dark: #33ba91; + --text-color-primary: #373737; + --text-on-primary-color: #fff; + --text-color-secondary: #ccc; + --text-color-disabled: #F7f7f7; + --divider-color: #f6f6f6; + --warn-color: red; + + --blue: var(--primary-color); +} diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/assets/css/main.css b/docs/_vendor/github.com/gohugoio/gohugoioTheme/assets/css/main.css new file mode 100644 index 000000000..fd0f2a503 --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/assets/css/main.css @@ -0,0 +1,39 @@ +/*Base Styles*/ +@import '_tachyons'; + +/* purgecss start ignore */ +@import '_header-link'; +@import '_animation'; +@import '_documentation-styles'; + +@import 'docsearch.js/dist/cdn/docsearch.min'; +@import '_carousel'; +@import '_code'; +@import '_tabs'; +@import '_color-scheme'; +@import '_columns'; +@import '_content'; +@import '_content-tables'; +@import '_definition-lists'; +@import '_fluid-type'; +@import '_font-family'; +@import '_hugo-internal-template-styling'; +@import '_no-js'; +@import '_social-icons'; +@import '_stickyheader'; +@import '_right-sidebar'; +@import '_svg'; +@import '_chroma'; +@import '_variables'; +@import '_print'; +@import '_shame'; + +.nested-blockquote blockquote { + border-left: 4px solid var(--primary-color); + padding-left: 1em; +} + +.mw-90 { + max-width:90%; +} +/* purgecss end ignore */ diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/assets/images/sponsors/bep-consulting.svg b/docs/_vendor/github.com/gohugoio/gohugoioTheme/assets/images/sponsors/bep-consulting.svg new file mode 100644 index 000000000..598a1eb71 --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/assets/images/sponsors/bep-consulting.svg @@ -0,0 +1,4 @@ +<svg viewBox="0 0 255 180" fill="none" xmlns="http://www.w3.org/2000/svg"> +<rect fill="#AD1E1E"/> +<path d="M29.25 60.5C31.1167 60.0667 32.85 59.85 34.45 59.85C36.05 59.85 37.4 59.9 38.5 60V72.5C39.2 72 40.1333 71.5667 41.3 71.2C42.4667 70.8 43.5833 70.6 44.65 70.6C48.2833 70.6 50.8333 71.5333 52.3 73.4C53.7667 75.2667 54.5 78.45 54.5 82.95C54.5 85.45 54.15 87.6167 53.45 89.45C52.7833 91.25 51.8667 92.6333 50.7 93.6C48.5 95.4667 45.9 96.4 42.9 96.4C40.6333 96.4 38.4 95.8333 36.2 94.7C35.5667 95.5667 34.8333 96 34 96H31.5V66.05C30.3333 65.65 29.4167 65.0833 28.75 64.35L29.25 60.5ZM42.5 91.3C45.7 91.3 47.3 88.6167 47.3 83.25C47.3 80.4167 47.0167 78.5 46.45 77.5C45.9167 76.4667 44.9667 75.95 43.6 75.95C41.5333 75.95 39.8333 76.5 38.5 77.6V90.45C39.9333 91.0167 41.2667 91.3 42.5 91.3ZM69.1555 96.4C65.1555 96.4 62.1388 95.3333 60.1055 93.2C58.1055 91.0667 57.1055 87.9667 57.1055 83.9C57.1055 81.4333 57.4555 79.3167 58.1555 77.55C58.8555 75.75 59.8055 74.3667 61.0055 73.4C63.3388 71.5333 66.0555 70.6 69.1555 70.6C72.2555 70.6 74.6221 71.4 76.2555 73C77.9221 74.5667 78.7555 77.4 78.7555 81.5C78.7555 83.9 77.5721 85.1 75.2055 85.1H64.3555C64.4888 87.2 65.0221 88.6833 65.9555 89.55C66.9221 90.4167 68.4388 90.85 70.5055 90.85C71.6388 90.85 72.7221 90.7167 73.7555 90.45C74.7888 90.1833 75.5388 89.9167 76.0055 89.65L76.7055 89.25L78.2055 93.25C78.0055 93.4833 77.7055 93.7833 77.3055 94.15C76.9388 94.4833 75.9721 94.95 74.4055 95.55C72.8721 96.1167 71.1221 96.4 69.1555 96.4ZM72.3055 80.65C72.3721 80.1833 72.4055 79.6167 72.4055 78.95C72.4055 78.2833 72.1388 77.5833 71.6055 76.85C71.0721 76.0833 70.1388 75.7 68.8055 75.7C67.5055 75.7 66.5055 76.1 65.8055 76.9C65.1055 77.7 64.6388 79.05 64.4055 80.95L72.3055 80.65ZM81.2754 71C83.1087 70.6 84.7587 70.4 86.2254 70.4C87.6921 70.4 88.9087 70.4333 89.8754 70.5V72.95C92.1087 71.3833 94.4921 70.6 97.0254 70.6C100.359 70.6 102.775 71.55 104.275 73.45C105.775 75.35 106.525 78.5167 106.525 82.95C106.525 85.3167 106.175 87.4 105.475 89.2C104.775 91 103.825 92.4 102.625 93.4C100.325 95.4 97.5921 96.4 94.4254 96.4C93.0587 96.4 91.7587 96.2667 90.5254 96V100.3C92.4921 100.833 93.7587 101.45 94.3254 102.15L93.8254 106H81.2754L80.7754 102.15C81.2087 101.55 82.1254 100.983 83.5254 100.45V76.55C82.3587 76.15 81.4421 75.5833 80.7754 74.85L81.2754 71ZM93.9254 91.3C95.5921 91.3 96.9087 90.5667 97.8754 89.1C98.8421 87.6 99.3254 85.55 99.3254 82.95C99.3254 80.3167 99.0587 78.5167 98.5254 77.55C97.9921 76.5833 97.0254 76.1 95.6254 76.1C93.4921 76.1 91.7921 76.6 90.5254 77.6V90.9C91.5587 91.1667 92.6921 91.3 93.9254 91.3ZM110.689 96.24C109.361 96.24 108.697 95.64 108.697 94.44C108.697 93.224 109.361 92.616 110.689 92.616C112.033 92.616 112.705 93.224 112.705 94.44C112.705 95.64 112.033 96.24 110.689 96.24ZM119.838 86.256C118.366 86.256 117.63 87.52 117.63 90.048C117.63 91.328 117.83 92.224 118.23 92.736C118.646 93.232 119.238 93.48 120.006 93.48C121.222 93.48 122.294 93.368 123.222 93.144L123.942 94.992C123.43 95.328 122.742 95.616 121.878 95.856C121.014 96.08 120.174 96.192 119.358 96.192C115.902 96.192 114.174 94.192 114.174 90.192C114.174 87.856 114.774 86.176 115.974 85.152C117.046 84.256 118.35 83.808 119.886 83.808C121.422 83.808 122.702 84.096 123.726 84.672C123.742 84.832 123.75 84.984 123.75 85.128C123.75 86.04 123.542 86.904 123.126 87.72H121.014C120.79 87.32 120.654 86.84 120.606 86.28C120.414 86.264 120.158 86.256 119.838 86.256ZM130.453 96.192C128.565 96.192 127.165 95.688 126.253 94.68C125.341 93.672 124.885 92.152 124.885 90.12C124.885 88.072 125.389 86.512 126.397 85.44C127.421 84.352 128.885 83.808 130.789 83.808C132.693 83.808 134.101 84.288 135.013 85.248C135.941 86.208 136.405 87.712 136.405 89.76C136.405 91.792 135.885 93.376 134.845 94.512C133.821 95.632 132.357 96.192 130.453 96.192ZM128.341 89.904C128.341 92.464 129.109 93.744 130.645 93.744C131.429 93.744 132.005 93.456 132.373 92.88C132.757 92.288 132.949 91.328 132.949 90C132.949 87.504 132.165 86.256 130.597 86.256C129.829 86.256 129.261 86.536 128.893 87.096C128.525 87.64 128.341 88.576 128.341 89.904ZM137.876 84C138.756 83.808 139.548 83.712 140.252 83.712C140.956 83.712 141.54 83.728 142.004 83.76V84.96C142.404 84.624 142.932 84.352 143.588 84.144C144.26 83.92 144.9 83.808 145.508 83.808C147.076 83.808 148.172 84.176 148.796 84.912C149.436 85.648 149.756 86.92 149.756 88.728V93.336C150.38 93.576 150.82 93.848 151.076 94.152L150.836 96H145.316L145.076 94.152C145.3 93.848 145.74 93.576 146.396 93.336V88.584C146.396 87.72 146.252 87.144 145.964 86.856C145.692 86.552 145.196 86.4 144.476 86.4C143.756 86.4 143.036 86.656 142.316 87.168V93.336C142.94 93.576 143.38 93.848 143.636 94.152L143.396 96H137.876L137.636 94.152C137.86 93.848 138.3 93.576 138.956 93.336V86.664C138.396 86.472 137.956 86.2 137.636 85.848L137.876 84ZM156.709 85.968C155.653 85.968 155.125 86.28 155.125 86.904C155.125 87.496 155.677 87.936 156.781 88.224L158.677 88.728C160.629 89.24 161.605 90.368 161.605 92.112C161.605 93.312 161.181 94.296 160.333 95.064C159.501 95.816 158.165 96.192 156.325 96.192C154.501 96.192 153.077 95.936 152.053 95.424C152.037 95.248 152.029 95.072 152.029 94.896C152.029 94.016 152.205 93.224 152.557 92.52H154.549C154.757 92.904 154.893 93.304 154.957 93.72C155.277 93.816 155.733 93.864 156.325 93.864C157.733 93.864 158.437 93.464 158.437 92.664C158.437 92.408 158.341 92.2 158.149 92.04C157.957 91.864 157.581 91.696 157.021 91.536L155.125 90.984C154.149 90.712 153.389 90.312 152.845 89.784C152.301 89.24 152.029 88.448 152.029 87.408C152.029 86.352 152.453 85.488 153.301 84.816C154.149 84.144 155.357 83.808 156.925 83.808C158.509 83.808 159.845 84.04 160.933 84.504C160.949 84.664 160.957 84.824 160.957 84.984C160.957 85.816 160.781 86.584 160.429 87.288H158.461C158.253 86.92 158.117 86.536 158.053 86.136C157.605 86.024 157.157 85.968 156.709 85.968ZM171.593 94.992C170.489 95.792 169.185 96.192 167.681 96.192C166.193 96.192 165.153 95.88 164.561 95.256C163.969 94.632 163.673 93.616 163.673 92.208V86.664C163.113 86.472 162.673 86.2 162.353 85.848L162.593 84C163.489 83.792 164.321 83.688 165.089 83.688C165.857 83.688 166.505 83.712 167.033 83.76V91.416C167.033 92.28 167.161 92.856 167.417 93.144C167.689 93.416 168.217 93.552 169.001 93.552C169.785 93.552 170.513 93.296 171.185 92.784V86.664C170.625 86.472 170.185 86.2 169.865 85.848L170.105 84C171.001 83.792 171.833 83.688 172.601 83.688C173.369 83.688 174.017 83.712 174.545 83.76V93.12C175.105 93.232 175.545 93.368 175.865 93.528V95.424C174.905 95.936 173.697 96.192 172.241 96.192C171.841 95.904 171.625 95.504 171.593 94.992ZM176.799 78.96C177.695 78.752 178.527 78.648 179.295 78.648C180.063 78.648 180.711 78.672 181.239 78.72V93.336C181.863 93.576 182.303 93.848 182.559 94.152L182.319 96H176.799L176.559 94.152C176.783 93.848 177.223 93.576 177.879 93.336V81.624C177.319 81.432 176.879 81.16 176.559 80.808L176.799 78.96ZM187.918 80.976V84H191.35V86.016H187.918V92.088C187.918 92.6 187.99 92.976 188.134 93.216C188.278 93.44 188.622 93.552 189.166 93.552C189.71 93.552 190.294 93.432 190.918 93.192L191.638 95.064C190.406 95.688 189.142 96 187.846 96C186.566 96 185.694 95.728 185.23 95.184C184.782 94.624 184.558 93.816 184.558 92.76V86.016H183.478L183.214 84.552C183.47 84.248 183.998 83.944 184.798 83.64C184.99 82.328 185.446 81.44 186.166 80.976H187.918ZM192.767 84C193.663 83.792 194.495 83.688 195.263 83.688C196.031 83.688 196.679 83.712 197.207 83.76V93.336C197.831 93.576 198.271 93.848 198.527 94.152L198.287 96H192.767L192.527 94.152C192.751 93.848 193.191 93.576 193.847 93.336V86.664C193.287 86.472 192.847 86.2 192.527 85.848L192.767 84ZM195.479 82.344C194.151 82.344 193.487 81.744 193.487 80.544C193.487 79.328 194.151 78.72 195.479 78.72C196.823 78.72 197.495 79.328 197.495 80.544C197.495 81.744 196.823 82.344 195.479 82.344ZM199.727 84C200.607 83.808 201.399 83.712 202.103 83.712C202.807 83.712 203.391 83.728 203.855 83.76V84.96C204.255 84.624 204.783 84.352 205.439 84.144C206.111 83.92 206.751 83.808 207.359 83.808C208.927 83.808 210.023 84.176 210.647 84.912C211.287 85.648 211.607 86.92 211.607 88.728V93.336C212.231 93.576 212.671 93.848 212.927 94.152L212.687 96H207.167L206.927 94.152C207.151 93.848 207.591 93.576 208.247 93.336V88.584C208.247 87.72 208.103 87.144 207.815 86.856C207.543 86.552 207.047 86.4 206.327 86.4C205.607 86.4 204.887 86.656 204.167 87.168V93.336C204.791 93.576 205.231 93.848 205.487 94.152L205.247 96H199.727L199.487 94.152C199.711 93.848 200.151 93.576 200.807 93.336V86.664C200.247 86.472 199.807 86.2 199.487 85.848L199.727 84ZM219.281 98.544C220.705 98.544 221.417 97.688 221.417 95.976V94.92C220.633 95.4 219.649 95.64 218.465 95.64C216.961 95.64 215.801 95.2 214.985 94.32C214.185 93.44 213.785 91.976 213.785 89.928C213.785 85.848 215.657 83.808 219.401 83.808C220.361 83.808 221.257 84.016 222.089 84.432C222.249 84.144 222.489 84 222.809 84H224.777V95.808C224.777 97.568 224.337 98.872 223.457 99.72C222.593 100.568 221.249 100.992 219.425 100.992C218.465 100.992 217.473 100.88 216.449 100.656C215.425 100.432 214.649 100.152 214.121 99.816C214.105 99.672 214.097 99.528 214.097 99.384C214.097 98.504 214.305 97.656 214.721 96.84H216.833C217.009 97.176 217.137 97.624 217.217 98.184C217.825 98.424 218.513 98.544 219.281 98.544ZM217.097 89.784C217.097 90.984 217.257 91.824 217.577 92.304C217.913 92.784 218.473 93.024 219.257 93.024C220.057 93.024 220.777 92.8 221.417 92.352V86.664C220.777 86.392 220.081 86.256 219.329 86.256C217.841 86.256 217.097 87.432 217.097 89.784Z" fill="white"/> +</svg> diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/assets/images/sponsors/butter-dark.svg b/docs/_vendor/github.com/gohugoio/gohugoioTheme/assets/images/sponsors/butter-dark.svg new file mode 100644 index 000000000..657b75c50 --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/assets/images/sponsors/butter-dark.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 402 58"><g fill="#231F20"><path d="M24.6 23c.4 0 .7-.1 1-.2l10-5.4c1-.5 1.3-1.8.8-2.8-.5-1-1.8-1.3-2.8-.8l-9.9 5.4c-1 .3-1.5 1.3-1.3 2.3.3 1 1.3 1.7 2.3 1.5h-.1zM39.8 30.9c.3 0 .7-.1 1-.3L56.7 22c.6-.3 1-1 1-1.7 0-.8-.3-1.5-.9-1.8-.7-.4-1.4-.4-2.1-.1L38.8 27c-.9.4-1.5 1.4-1.2 2.4.2 1 1.2 1.6 2.2 1.5z"/><path d="M81 19.6c-.4-1.2-1.3-2.2-2.4-2.7L61.4 7.7c-2.8-1.4-6.1-1.4-9 0l-1.4.7L39.1 2C36.3.6 33 .6 30.1 2L2.5 16.9c-1.4.6-2.3 1.9-2.5 3.4v15.2c0 .8.4 1.5 1.1 1.8l35 19c2.8 1.4 6.2 1.4 9 0L80 37.1c.7-.3 1.1-1 1.1-1.8v-15c0-.2-.1-.5-.1-.7zm-76.5.9L32 5.6c1.6-.7 3.5-.7 5.2 0L51 13l3.3-1.8c1.7-.7 3.6-.7 5.2 0l17.1 9.2.2.1-.2.1-33.4 18c-1.7.8-3.6.8-5.2 0l-33.5-18-.2-.1h.2zm38.6 32.2c-1.6.7-3.5.7-5.1 0L4.1 34.3v-9.2L36 42.3c2.8 1.4 6.2 1.4 9 0l32-17.2v9L43.1 52.7zM115.7 10.2h18.2c8.7 0 13.1 3.1 13.1 9.1 0 1.9-.5 3.7-1.6 5.2s-2.6 2.6-4.3 3.2c2.2.4 4.2 1.5 5.7 3.1s2.2 3.6 2.2 5.7c0 3.8-1.4 6.7-4.1 8.7-2.7 2-6.6 3-11.8 3h-17.5v-5.4l1.8-.2c.4 0 .8-.2 1.1-.5.2-.4.3-.9.3-1.3V16.1l-3.1-.3v-5.6zm13.1 6.4v9h2.7c3.5 0 5.3-1.6 5.3-4.8 0-2.8-1.7-4.2-5.1-4.2h-2.9zm0 15.1v9.9h3.7c3.8 0 5.8-1.8 5.8-5.2 0-3.1-1.9-4.7-5.7-4.7h-3.8zM180.7 19v22c0 .5 0 .9.3 1.3.2.3.6.4 1 .5l1.5.1v5.2h-11.7v-3.6h-.2c-1.7 3-4.5 4.4-8.5 4.4-3.1 0-5.3-.8-6.8-2.3-1.4-1.6-2.1-4-2.1-7.3V26.2c0-.4-.1-.8-.4-1.1-.2-.3-.6-.5-1-.5l-1.6-.2V19H164v18.4c-.1 1.1.1 2.2.6 3.1.6.8 1.6 1.1 2.5 1 1.1.1 2.2-.4 2.9-1.2.7-1 1.1-2.2 1-3.4V26.3c0-.5-.1-.9-.3-1.3-.3-.3-.7-.4-1.1-.4l-1.3-.2V19h12.4zM198.9 12.3V19h8.1c2.5-1.1 4.3-3.4 5.5-6.7h5.3V19h6.9l-.5 6.3h-6.4v12.3c-.1 1.1.2 2.2.7 3.2.4.5 1.3.8 2.7.8 1.2 0 2.5-.3 3.6-.8l1.4 6.3c-2.5 1.3-5.2 1.9-7.9 1.8-1.3 0-2.5-.1-3.8-.3-.9-.2-1.8-.4-2.7-.8-.7-.3-1.3-.8-1.8-1.4-.4-.5-.8-1-1.1-1.6-.3-.6-.5-1.3-.6-2-.1-.6-.2-1.3-.3-2V25.3h-9v12.3c-.1 1 .1 2.1.6 3.1.5.7 1.4 1.1 2.3 1 1.1 0 2.2-.3 3.2-.8l1.7 6.2c-2.3 1.2-4.9 1.9-7.5 1.8-3.7 0-6.4-.9-7.9-2.6-1.5-1.7-2.3-4.2-2.3-7.6V25.3h-3.9l.8-5.5c3.6-.8 6.2-3.3 7.6-7.4l5.3-.1zM242.7 18.2c2.7-.1 5.3.6 7.5 2.2 2 1.6 3 4.1 2.8 6.6 0 6.9-5.3 10.2-16 10 .1 1.3.7 2.6 1.7 3.5 1.2 1 2.7 1.4 4.2 1.4 2.6-.1 5.2-.9 7.4-2.3l2.6 6.3c-.5.4-1 .7-1.6.9-1.3.6-2.6 1-4 1.4-1.9.5-3.8.7-5.7.7-4.9 0-8.5-1.3-10.8-4-2.3-2.6-3.5-6.2-3.5-10.7-.1-4.1 1.3-8.2 4-11.4 2.7-3 6.5-4.6 11.4-4.6zm2 9.3c0-.7-.2-1.4-.7-1.9-.5-.5-1.2-.7-1.9-.6-1.4 0-2.8.6-3.6 1.8-1 1.3-1.6 2.9-1.6 4.6 5.2.2 7.7-1.2 7.7-3.9h.1zM272.5 25.5c-1.1 0-2.1.5-2.7 1.3-.7.9-1.1 2.1-1 3.3v12.5l5.1.3v5.3h-18.1V43l1.9-.2c.4.1.8-.1 1.1-.4.2-.4.3-.9.3-1.4V26.2c0-.4-.1-.8-.3-1.2-.3-.3-.6-.4-1-.4l-2-.2V19H268v4.4h.1c.7-1.4 1.7-2.7 3-3.6 1.6-1.1 3.5-1.7 5.4-1.6 1.9-.1 3.7.2 5.4.9v11.3l-7.6.4v-3.9c0-.7-.2-1.1-.5-1.2-.4-.1-.9-.2-1.3-.2zM308.7 17.5c-1.2-.3-2.3-.4-3.4-.4-6.1 0-9.2 3.9-9.2 11.8 0 3.8.8 6.8 2.3 9 1.5 2.2 3.9 3.3 7.1 3.4 1.1 0 2.1-.1 3.2-.4.6-.2 1-.8 1-1.5v-3.7l7.3.4v10.5c-3.8 1.7-7.9 2.5-12.1 2.3-6.1 0-10.8-1.6-14.1-4.9-3.3-3.3-5-8.1-5-14.5 0-3.2.5-6.4 1.6-9.4.9-2.5 2.4-4.6 4.4-6.3 1.8-1.4 3.8-2.5 6-3.3 2.2-.7 4.6-1 6.9-1 4.2-.1 8.3.7 12.2 2.4v10l-7.4.4V19c0-.9-.3-1.4-.8-1.5zM323.6 10.2h14.6l7.5 24.8h.2l7.7-24.7h14.6v5.4l-1.8.2c-.5 0-.9.2-1.2.5-.3.4-.4.9-.3 1.3l1.9 24.8 2.9.1v5.6h-15.3v-5.5l1.8-.2c.4.1.8-.1 1-.4.2-.4.3-.9.2-1.3l-.9-16.1h-.1l-7.2 23.5h-7.1l-7-23.1h-.2l-1 17.3 2.8.2v5.6h-15.3v-5.5l1.8-.2c.5 0 .9-.2 1.2-.5.2-.4.4-.9.4-1.4l2-24.6-3.2-.2v-5.6zM385.5 41.6c3.5 0 5.3-1.4 5.3-4.2 0-1.1-.5-2.2-1.4-2.8-1.4-.8-2.9-1.4-4.5-1.8-1.3-.3-2.7-.8-4-1.3-1.2-.5-2.3-1.2-3.4-1.9-1.2-.9-2.2-2-2.8-3.3-.6-1.5-1-3.2-1-4.8-.1-3.4 1.4-6.7 4-8.8 2.7-2.1 6.2-3.1 10.6-3.1 4-.2 8 .6 11.7 2.2v9.3l-7.4.5v-2.9c0-.8-.3-1.3-.8-1.4-1.1-.3-2.2-.4-3.3-.4-1.1 0-2.2.3-3.1.8-.8.6-1.3 1.6-1.2 2.6-.1 1.1.5 2.2 1.4 2.8 1.5.9 3.1 1.6 4.8 2 1.4.4 2.5.8 3.3 1.1.9.4 1.9.8 2.8 1.3 1 .5 1.9 1.2 2.6 2 .7.9 1.2 1.8 1.6 2.9.5 1.3.7 2.6.7 4 .2 3.6-1.3 7-4.1 9.3-2.7 2.2-6.4 3.3-11.2 3.3-4.3.1-8.6-.7-12.6-2.3v-9.8l7.5-.5v3.2c0 .9.3 1.4.9 1.6 1.1.2 2.3.4 3.6.4z"/></g></svg>
\ No newline at end of file diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/assets/images/sponsors/butter-light.svg b/docs/_vendor/github.com/gohugoio/gohugoioTheme/assets/images/sponsors/butter-light.svg new file mode 100644 index 000000000..a0697df08 --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/assets/images/sponsors/butter-light.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 402 58"><g fill="#fff"><path d="M24.6 23c.4 0 .7-.1 1-.2l10-5.4c1-.5 1.3-1.8.8-2.8-.5-1-1.8-1.3-2.8-.8l-9.9 5.4c-1 .3-1.5 1.3-1.3 2.3.3 1 1.3 1.7 2.3 1.5h-.1zM39.8 30.9c.3 0 .7-.1 1-.3L56.7 22c.6-.3 1-1 1-1.7 0-.8-.3-1.5-.9-1.8-.7-.4-1.4-.4-2.1-.1L38.8 27c-.9.4-1.5 1.4-1.2 2.4.2 1 1.2 1.6 2.2 1.5z"/><path d="M81 19.6c-.4-1.2-1.3-2.2-2.4-2.7L61.4 7.7c-2.8-1.4-6.1-1.4-9 0l-1.4.7L39.1 2C36.3.6 33 .6 30.1 2L2.5 16.9c-1.4.6-2.3 1.9-2.5 3.4v15.2c0 .8.4 1.5 1.1 1.8l35 19c2.8 1.4 6.2 1.4 9 0L80 37.1c.7-.3 1.1-1 1.1-1.8v-15c0-.2-.1-.5-.1-.7zm-76.5.9L32 5.6c1.6-.7 3.5-.7 5.2 0L51 13l3.3-1.8c1.7-.7 3.6-.7 5.2 0l17.1 9.2.2.1-.2.1-33.4 18c-1.7.8-3.6.8-5.2 0l-33.5-18-.2-.1h.2zm38.6 32.2c-1.6.7-3.5.7-5.1 0L4.1 34.3v-9.2L36 42.3c2.8 1.4 6.2 1.4 9 0l32-17.2v9L43.1 52.7zM115.7 10.2h18.2c8.7 0 13.1 3.1 13.1 9.1 0 1.9-.5 3.7-1.6 5.2s-2.6 2.6-4.3 3.2c2.2.4 4.2 1.5 5.7 3.1s2.2 3.6 2.2 5.7c0 3.8-1.4 6.7-4.1 8.7-2.7 2-6.6 3-11.8 3h-17.5v-5.4l1.8-.2c.4 0 .8-.2 1.1-.5.2-.4.3-.9.3-1.3V16.1l-3.1-.3v-5.6zm13.1 6.4v9h2.7c3.5 0 5.3-1.6 5.3-4.8 0-2.8-1.7-4.2-5.1-4.2h-2.9zm0 15.1v9.9h3.7c3.8 0 5.8-1.8 5.8-5.2 0-3.1-1.9-4.7-5.7-4.7h-3.8zM180.7 19v22c0 .5 0 .9.3 1.3.2.3.6.4 1 .5l1.5.1v5.2h-11.7v-3.6h-.2c-1.7 3-4.5 4.4-8.5 4.4-3.1 0-5.3-.8-6.8-2.3-1.4-1.6-2.1-4-2.1-7.3V26.2c0-.4-.1-.8-.4-1.1-.2-.3-.6-.5-1-.5l-1.6-.2V19H164v18.4c-.1 1.1.1 2.2.6 3.1.6.8 1.6 1.1 2.5 1 1.1.1 2.2-.4 2.9-1.2.7-1 1.1-2.2 1-3.4V26.3c0-.5-.1-.9-.3-1.3-.3-.3-.7-.4-1.1-.4l-1.3-.2V19h12.4zM198.9 12.3V19h8.1c2.5-1.1 4.3-3.4 5.5-6.7h5.3V19h6.9l-.5 6.3h-6.4v12.3c-.1 1.1.2 2.2.7 3.2.4.5 1.3.8 2.7.8 1.2 0 2.5-.3 3.6-.8l1.4 6.3c-2.5 1.3-5.2 1.9-7.9 1.8-1.3 0-2.5-.1-3.8-.3-.9-.2-1.8-.4-2.7-.8-.7-.3-1.3-.8-1.8-1.4-.4-.5-.8-1-1.1-1.6-.3-.6-.5-1.3-.6-2-.1-.6-.2-1.3-.3-2V25.3h-9v12.3c-.1 1 .1 2.1.6 3.1.5.7 1.4 1.1 2.3 1 1.1 0 2.2-.3 3.2-.8l1.7 6.2c-2.3 1.2-4.9 1.9-7.5 1.8-3.7 0-6.4-.9-7.9-2.6-1.5-1.7-2.3-4.2-2.3-7.6V25.3h-3.9l.8-5.5c3.6-.8 6.2-3.3 7.6-7.4l5.3-.1zM242.7 18.2c2.7-.1 5.3.6 7.5 2.2 2 1.6 3 4.1 2.8 6.6 0 6.9-5.3 10.2-16 10 .1 1.3.7 2.6 1.7 3.5 1.2 1 2.7 1.4 4.2 1.4 2.6-.1 5.2-.9 7.4-2.3l2.6 6.3c-.5.4-1 .7-1.6.9-1.3.6-2.6 1-4 1.4-1.9.5-3.8.7-5.7.7-4.9 0-8.5-1.3-10.8-4-2.3-2.6-3.5-6.2-3.5-10.7-.1-4.1 1.3-8.2 4-11.4 2.7-3 6.5-4.6 11.4-4.6zm2 9.3c0-.7-.2-1.4-.7-1.9-.5-.5-1.2-.7-1.9-.6-1.4 0-2.8.6-3.6 1.8-1 1.3-1.6 2.9-1.6 4.6 5.2.2 7.7-1.2 7.7-3.9h.1zM272.5 25.5c-1.1 0-2.1.5-2.7 1.3-.7.9-1.1 2.1-1 3.3v12.5l5.1.3v5.3h-18.1V43l1.9-.2c.4.1.8-.1 1.1-.4.2-.4.3-.9.3-1.4V26.2c0-.4-.1-.8-.3-1.2-.3-.3-.6-.4-1-.4l-2-.2V19H268v4.4h.1c.7-1.4 1.7-2.7 3-3.6 1.6-1.1 3.5-1.7 5.4-1.6 1.9-.1 3.7.2 5.4.9v11.3l-7.6.4v-3.9c0-.7-.2-1.1-.5-1.2-.4-.1-.9-.2-1.3-.2zM308.7 17.5c-1.2-.3-2.3-.4-3.4-.4-6.1 0-9.2 3.9-9.2 11.8 0 3.8.8 6.8 2.3 9 1.5 2.2 3.9 3.3 7.1 3.4 1.1 0 2.1-.1 3.2-.4.6-.2 1-.8 1-1.5v-3.7l7.3.4v10.5c-3.8 1.7-7.9 2.5-12.1 2.3-6.1 0-10.8-1.6-14.1-4.9-3.3-3.3-5-8.1-5-14.5 0-3.2.5-6.4 1.6-9.4.9-2.5 2.4-4.6 4.4-6.3 1.8-1.4 3.8-2.5 6-3.3 2.2-.7 4.6-1 6.9-1 4.2-.1 8.3.7 12.2 2.4v10l-7.4.4V19c0-.9-.3-1.4-.8-1.5zM323.6 10.2h14.6l7.5 24.8h.2l7.7-24.7h14.6v5.4l-1.8.2c-.5 0-.9.2-1.2.5-.3.4-.4.9-.3 1.3l1.9 24.8 2.9.1v5.6h-15.3v-5.5l1.8-.2c.4.1.8-.1 1-.4.2-.4.3-.9.2-1.3l-.9-16.1h-.1l-7.2 23.5h-7.1l-7-23.1h-.2l-1 17.3 2.8.2v5.6h-15.3v-5.5l1.8-.2c.5 0 .9-.2 1.2-.5.2-.4.4-.9.4-1.4l2-24.6-3.2-.2v-5.6zM385.5 41.6c3.5 0 5.3-1.4 5.3-4.2 0-1.1-.5-2.2-1.4-2.8-1.4-.8-2.9-1.4-4.5-1.8-1.3-.3-2.7-.8-4-1.3-1.2-.5-2.3-1.2-3.4-1.9-1.2-.9-2.2-2-2.8-3.3-.6-1.5-1-3.2-1-4.8-.1-3.4 1.4-6.7 4-8.8 2.7-2.1 6.2-3.1 10.6-3.1 4-.2 8 .6 11.7 2.2v9.3l-7.4.5v-2.9c0-.8-.3-1.3-.8-1.4-1.1-.3-2.2-.4-3.3-.4-1.1 0-2.2.3-3.1.8-.8.6-1.3 1.6-1.2 2.6-.1 1.1.5 2.2 1.4 2.8 1.5.9 3.1 1.6 4.8 2 1.4.4 2.5.8 3.3 1.1.9.4 1.9.8 2.8 1.3 1 .5 1.9 1.2 2.6 2 .7.9 1.2 1.8 1.6 2.9.5 1.3.7 2.6.7 4 .2 3.6-1.3 7-4.1 9.3-2.7 2.2-6.4 3.3-11.2 3.3-4.3.1-8.6-.7-12.6-2.3v-9.8l7.5-.5v3.2c0 .9.3 1.4.9 1.6 1.1.2 2.3.4 3.6.4z"/></g></svg>
\ No newline at end of file diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/assets/images/sponsors/cloudcannon-blue.svg b/docs/_vendor/github.com/gohugoio/gohugoioTheme/assets/images/sponsors/cloudcannon-blue.svg new file mode 100644 index 000000000..79b13f431 --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/assets/images/sponsors/cloudcannon-blue.svg @@ -0,0 +1,6 @@ +<svg viewBox="0 0 363 80" fill="none" xmlns="http://www.w3.org/2000/svg"> +<path fill-rule="evenodd" clip-rule="evenodd" d="M29.0705 42.8838C29.425 43.0864 29.8049 43.289 30.1847 43.4663C33.0209 44.783 34.3376 45.644 34.3376 47.4672C34.3376 49.4171 32.7423 51.0124 30.7925 51.0124C29.2731 51.0124 28.007 50.0502 27.5005 48.7081C25.6519 50.5819 23.1197 51.7468 20.2835 51.7468C14.6872 51.7468 10.1544 47.214 10.1544 41.6177C10.1544 41.0859 10.2304 40.5541 10.3064 40.0224C5.1152 38.503 1.1142 34.1728 0.202582 28.7537C0.0759682 27.9687 0 27.1837 0 26.3734C0 25.5631 0.0759682 24.7781 0.202582 23.9931C1.13952 18.5993 5.1152 14.2438 10.3064 12.7244C10.3032 12.7022 10.3 12.6801 10.2968 12.658C10.2242 12.1503 10.1544 11.6629 10.1544 11.1291C10.1544 5.53277 14.6872 1 20.2835 1C23.0943 1 25.6519 2.16485 27.5005 4.03873C28.007 2.69662 29.2731 1.73436 30.7925 1.73436C32.7423 1.73436 34.3376 3.32969 34.3376 5.27954C34.3376 7.25472 33.0209 8.11569 30.1847 9.43248C29.9037 9.5636 29.6366 9.70858 29.3628 9.85717C29.2665 9.90945 29.1694 9.96218 29.0705 10.0149H29.0704C28.8426 10.1415 28.6147 10.2681 28.4121 10.3947C28.2349 10.496 28.0829 10.5973 27.931 10.6986C27.8803 10.7239 27.836 10.7556 27.7917 10.7872C27.7474 10.8189 27.7031 10.8505 27.6524 10.8759C26.7915 11.433 26.0065 12.0914 25.2468 12.7751C25.2215 12.7877 25.2025 12.8067 25.1835 12.8257C25.1645 12.8447 25.1455 12.8637 25.1202 12.8764C24.8163 13.1802 24.5124 13.4841 24.2339 13.788C24.1959 13.826 24.1579 13.8703 24.1199 13.9146C24.0819 13.9589 24.0439 14.0032 24.006 14.0412C23.8864 14.1907 23.7629 14.3363 23.6401 14.481C23.4508 14.704 23.2633 14.9251 23.0943 15.1554C20.7393 18.2954 19.2959 22.2205 19.2959 26.4494C19.2959 30.6783 20.714 34.6033 23.0943 37.7433C23.3729 38.1231 23.6768 38.503 24.006 38.8575C24.0439 38.8955 24.0819 38.9398 24.1199 38.9841C24.1579 39.0284 24.1959 39.0728 24.2339 39.1107C24.4424 39.3572 24.6652 39.5753 24.8915 39.7969C24.9674 39.8712 25.0438 39.946 25.1202 40.0224C25.1455 40.035 25.1645 40.054 25.1835 40.073C25.2025 40.092 25.2215 40.111 25.2468 40.1236C26.0065 40.8074 26.7915 41.4658 27.6524 42.0229C27.7031 42.0482 27.7474 42.0798 27.7917 42.1115C27.836 42.1431 27.8803 42.1748 27.931 42.2001C28.007 42.2508 28.0893 42.3014 28.1716 42.3521C28.2539 42.4027 28.3362 42.4533 28.4121 42.504C28.5261 42.5673 28.6337 42.6306 28.7414 42.6939C28.849 42.7572 28.9566 42.8205 29.0705 42.8838ZM64.2693 12.826C69.4604 14.3453 73.4614 18.6755 74.3731 24.0946C74.4997 24.8543 74.5756 25.6646 74.5756 26.6269C74.5756 27.4372 74.4997 28.2222 74.3731 29.0072C73.4361 34.4009 69.4604 38.7565 64.2693 40.2758L64.2788 40.3423C64.3515 40.85 64.4212 41.3373 64.4212 41.8712C64.4212 47.4675 59.8884 52.0003 54.2921 52.0003C51.4813 52.0003 48.9237 50.8354 47.0751 48.9615C46.5687 50.3036 45.3025 51.2659 43.7832 51.2659C41.8333 51.2659 40.238 49.6706 40.238 47.7207C40.238 45.7455 41.5548 44.8846 44.3909 43.5678C44.6719 43.4367 44.939 43.2917 45.2128 43.1431C45.3091 43.0908 45.4063 43.0381 45.5051 42.9854C45.733 42.8587 45.9609 42.7321 46.1635 42.6055C46.3407 42.5042 46.4926 42.403 46.6445 42.3017L46.6446 42.3016C46.6953 42.2763 46.7396 42.2447 46.7839 42.213C46.8282 42.1814 46.8725 42.1497 46.9232 42.1244C47.7842 41.5673 48.5692 40.9089 49.3289 40.2252C49.3542 40.2125 49.3732 40.1935 49.3922 40.1745C49.4112 40.1555 49.4301 40.1365 49.4555 40.1239C49.7593 39.82 50.0632 39.5161 50.3418 39.2123C50.3797 39.1743 50.4177 39.13 50.4557 39.0856C50.4937 39.0413 50.5317 38.997 50.5697 38.959C50.6893 38.8096 50.8128 38.664 50.9356 38.5193C51.1248 38.2962 51.3124 38.0752 51.4813 37.8448C53.8363 34.7048 55.2797 30.7798 55.2797 26.5509C55.2797 22.322 53.8616 18.397 51.4813 15.257C51.2027 14.8771 50.8989 14.4973 50.5697 14.1428C50.5317 14.1048 50.4937 14.0605 50.4557 14.0161C50.4177 13.9718 50.3797 13.9275 50.3418 13.8895C50.0632 13.5603 49.7593 13.2565 49.4555 12.9779C49.4301 12.9652 49.4112 12.9463 49.3922 12.9273C49.3732 12.9083 49.3542 12.8893 49.3289 12.8766C48.5692 12.1929 47.7842 11.5598 46.9232 10.9774C46.8726 10.9521 46.8282 10.9204 46.7839 10.8888C46.7396 10.8571 46.6953 10.8255 46.6446 10.8001C46.5687 10.7495 46.4864 10.6988 46.4041 10.6482C46.3218 10.5976 46.2395 10.5469 46.1635 10.4963C46.0496 10.433 45.9419 10.3697 45.8343 10.3064C45.7267 10.243 45.6191 10.1797 45.5051 10.1164C45.1506 9.91385 44.7708 9.71127 44.3909 9.53401C41.5801 8.19191 40.238 7.33093 40.238 5.38108C40.238 3.43123 41.8333 1.8359 43.7832 1.8359C45.3025 1.8359 46.5687 2.79816 47.0751 4.14027C48.9237 2.26638 51.456 1.10154 54.2921 1.10154C59.8884 1.10154 64.4212 5.63431 64.4212 11.2306C64.4212 11.7624 64.3452 12.2942 64.2693 12.826Z" fill="#034AD8"/> +<path d="M48.3405 26.475C48.3405 20.3723 43.4025 15.4343 37.2998 15.4343C31.197 15.4343 26.259 20.3723 26.259 26.475C26.259 32.5778 31.197 37.5158 37.2998 37.5158C43.4025 37.5158 48.3405 32.5778 48.3405 26.475Z" fill="#034AD8"/> +<path fill-rule="evenodd" clip-rule="evenodd" d="M119.934 36.2635V0.832581H113.425V36.2635H119.934ZM98.4922 36.9973C101.494 36.9973 103.973 36.198 105.931 34.5994C107.888 33.0007 109.161 31.0922 109.748 28.8736L104.022 26.9651C103.696 28.0743 103.076 29.0286 102.162 29.8279C101.249 30.6272 100.026 31.0269 98.4922 31.0269C96.763 31.0269 95.303 30.4152 94.1122 29.1917C92.9214 27.9683 92.326 26.3126 92.326 24.2246C92.326 22.1366 92.9133 20.489 94.0878 19.2819C95.2623 18.0747 96.7141 17.4712 98.4432 17.4712C101.216 17.4712 102.994 18.8251 103.777 21.533L109.601 19.5755C109.046 17.3243 107.79 15.4076 105.833 13.8253C103.875 12.243 101.363 11.4518 98.2964 11.4518C94.7729 11.4518 91.8122 12.6589 89.4142 15.0732C87.0163 17.4875 85.8173 20.5379 85.8173 24.2246C85.8173 27.8786 87.0326 30.9209 89.4631 33.3514C91.8937 35.782 94.9034 36.9973 98.4922 36.9973ZM145.097 33.3759C142.699 35.7902 139.689 36.9973 136.068 36.9973C132.446 36.9973 129.437 35.7902 127.039 33.3759C124.641 30.9617 123.442 27.9112 123.442 24.2246C123.442 20.5379 124.633 17.4875 127.014 15.0732C129.429 12.6589 132.446 11.4518 136.068 11.4518C139.689 11.4518 142.699 12.6589 145.097 15.0732C147.495 17.4875 148.694 20.5379 148.694 24.2246C148.694 27.9112 147.495 30.9617 145.097 33.3759ZM136.069 31.0758C134.373 31.0758 132.921 30.4722 131.714 29.2651C130.539 28.058 129.952 26.3778 129.952 24.2245C129.952 22.0713 130.547 20.3911 131.738 19.1839C132.929 17.9768 134.373 17.3732 136.069 17.3732C137.766 17.3732 139.209 17.9768 140.4 19.1839C141.591 20.3911 142.186 22.0713 142.186 24.2245C142.186 26.3778 141.591 28.058 140.4 29.2651C139.209 30.4722 137.766 31.0758 136.069 31.0758ZM164.901 36.0919C163.677 36.6302 162.381 36.8994 161.01 36.8994C158.172 36.8994 155.937 35.9941 154.306 34.1834C152.675 32.3727 151.859 30.1134 151.859 27.4055V12.1859H158.368V26.0842C158.368 27.5197 158.743 28.686 159.493 29.5832C160.244 30.4804 161.337 30.929 162.772 30.929C164.175 30.929 165.284 30.4967 166.1 29.6321C166.915 28.7676 167.323 27.6175 167.323 26.182V12.1859H173.832V31.9078C173.832 33.4411 173.914 34.893 174.077 36.2632H167.862C167.731 35.6107 167.666 34.7461 167.666 33.6695C167.046 34.7461 166.124 35.5536 164.901 36.0919ZM189.5 36.8507C191.066 36.8507 192.444 36.5408 193.635 35.9209C194.826 35.301 195.698 34.4854 196.253 33.474C196.253 34.518 196.335 35.4479 196.498 36.2635H202.713C202.582 34.9585 202.517 33.5067 202.517 31.908V0.832581H196.106V14.5841C195.03 12.5939 192.762 11.5989 189.304 11.5989C185.943 11.5989 183.178 12.806 181.009 15.2203C178.839 17.6345 177.755 20.6197 177.755 24.1759C177.755 27.8299 178.856 30.8559 181.058 33.2538C183.26 35.6518 186.074 36.8507 189.5 36.8507ZM185.977 29.1919C187.086 30.4154 188.522 31.0271 190.283 31.0271C192.013 31.0271 193.432 30.4072 194.541 29.1674C195.65 27.9277 196.205 26.2475 196.205 24.1269C196.205 22.0388 195.65 20.3994 194.541 19.2086C193.432 18.0178 192.013 17.4224 190.283 17.4224C188.554 17.4224 187.127 18.026 186.001 19.2331C184.876 20.4402 184.313 22.0878 184.313 24.1758C184.313 26.2964 184.868 27.9685 185.977 29.1919ZM218.798 36.9973C221.8 36.9973 224.279 36.198 226.237 34.5994C228.194 33.0007 229.466 31.0922 230.054 28.8736L224.328 26.9651C224.002 28.0743 223.382 29.0286 222.468 29.8279C221.555 30.6272 220.331 31.0269 218.798 31.0269C217.069 31.0269 215.609 30.4152 214.418 29.1917C213.227 27.9683 212.632 26.3126 212.632 24.2246C212.632 22.1366 213.219 20.489 214.394 19.2819C215.568 18.0747 217.02 17.4712 218.749 17.4712C221.522 17.4712 223.3 18.8251 224.083 21.533L229.907 19.5755C229.352 17.3243 228.096 15.4076 226.139 13.8253C224.181 12.243 221.669 11.4518 218.602 11.4518C215.079 11.4518 212.118 12.6589 209.72 15.0732C207.322 17.4875 206.123 20.5379 206.123 24.2246C206.123 27.8786 207.338 30.9209 209.769 33.3514C212.2 35.782 215.209 36.9973 218.798 36.9973ZM248.562 33.3759C247.028 35.7575 244.663 36.9483 241.466 36.9483C238.986 36.9483 236.988 36.2306 235.471 34.7951C233.954 33.3595 233.195 31.663 233.195 29.7055C233.195 27.6501 233.864 26.0026 235.202 24.7628C236.539 23.5231 238.268 22.7401 240.389 22.4138L246.311 21.5329C247.518 21.3698 248.121 20.7989 248.121 19.8201C248.121 18.9066 247.77 18.1562 247.069 17.569C246.368 16.9817 245.364 16.6881 244.059 16.6881C242.689 16.6881 241.604 17.0633 240.805 17.8137C240.006 18.564 239.557 19.4939 239.459 20.6031L233.685 19.3797C233.913 17.2917 234.941 15.4483 236.768 13.8497C238.595 12.2511 241.009 11.4518 244.01 11.4518C247.599 11.4518 250.242 12.3082 251.938 14.021C253.635 15.7338 254.483 17.9279 254.483 20.6031V32.446C254.483 33.8815 254.581 35.1539 254.777 36.2632H248.806C248.643 35.5454 248.562 34.583 248.562 33.3759ZM242.836 32.1037C241.857 32.1037 241.09 31.8346 240.536 31.2963C239.981 30.7579 239.704 30.0973 239.704 29.3143C239.704 27.5851 240.699 26.5738 242.689 26.2801L248.121 25.4482V26.5248C248.121 28.515 247.624 29.9423 246.629 30.8069C245.633 31.6714 244.369 32.1037 242.836 32.1037ZM265.918 22.4142V36.2636H259.41V12.1863H265.723V15.1715C266.408 13.9969 267.386 13.0998 268.659 12.4799C269.931 11.86 271.269 11.5501 272.672 11.5501C275.51 11.5501 277.672 12.4391 279.156 14.2172C280.64 15.9952 281.383 18.2872 281.383 21.0929V36.2636H274.874V22.2185C274.874 20.783 274.507 19.6248 273.773 18.7439C273.039 17.863 271.921 17.4226 270.421 17.4226C269.05 17.4226 267.957 17.8957 267.142 18.8418C266.326 19.7879 265.918 20.9787 265.918 22.4142ZM292.866 36.2636V22.4142C292.866 20.9787 293.274 19.7879 294.09 18.8418C294.905 17.8957 295.998 17.4226 297.368 17.4226C298.869 17.4226 299.987 17.863 300.721 18.7439C301.455 19.6248 301.822 20.783 301.822 22.2185V36.2636H308.33V21.0929C308.33 18.2872 307.588 15.9952 306.104 14.2172C304.619 12.4391 302.458 11.5501 299.619 11.5501C298.217 11.5501 296.879 11.86 295.607 12.4799C294.334 13.0998 293.355 13.9969 292.67 15.1715V12.1863H286.357V36.2636H292.866ZM333.149 33.3759C330.751 35.7901 327.742 36.9972 324.12 36.9972C320.499 36.9972 317.489 35.7901 315.091 33.3759C312.693 30.9616 311.494 27.9111 311.494 24.2245C311.494 20.5379 312.685 17.4874 315.067 15.0731C317.481 12.6589 320.499 11.4518 324.12 11.4518C327.742 11.4518 330.751 12.6589 333.149 15.0731C335.547 17.4874 336.746 20.5379 336.746 24.2245C336.746 27.9111 335.547 30.9616 333.149 33.3759ZM324.121 31.0757C322.425 31.0757 320.973 30.4722 319.766 29.265C318.591 28.0579 318.004 26.3777 318.004 24.2245C318.004 22.0712 318.6 20.391 319.79 19.1839C320.981 17.9767 322.425 17.3732 324.121 17.3732C325.818 17.3732 327.262 17.9767 328.452 19.1839C329.643 20.391 330.239 22.0712 330.239 24.2245C330.239 26.3777 329.643 28.0579 328.452 29.265C327.262 30.4722 325.818 31.0757 324.121 31.0757ZM346.762 22.4142V36.2636H340.254V12.1863H346.567V15.1715C347.252 13.9969 348.23 13.0998 349.503 12.4799C350.775 11.86 352.113 11.5501 353.516 11.5501C356.354 11.5501 358.515 12.4391 360 14.2172C361.484 15.9952 362.227 18.2872 362.227 21.0929V36.2636H355.718V22.2185C355.718 20.783 355.351 19.6248 354.617 18.7439C353.883 17.863 352.765 17.4226 351.265 17.4226C349.894 17.4226 348.801 17.8957 347.986 18.8418C347.17 19.7879 346.762 20.9787 346.762 22.4142Z" fill="#034AD8"/> +<path d="M313.211 64.2638C318.224 64.2638 320.862 60.5706 320.862 60.5706L319.015 58.724C319.015 58.724 317.037 61.6258 313.211 61.6258C309.386 61.6258 306.353 58.5921 306.353 54.767C306.353 50.9419 309.386 47.9082 313.211 47.9082C317.037 47.9082 318.883 50.6781 318.883 50.6781L320.73 48.8315C320.73 48.8315 318.224 45.2702 313.211 45.2702C307.672 45.2702 303.451 49.491 303.451 54.767C303.451 60.043 307.672 64.2638 313.211 64.2638ZM324.294 64H327.196V50.4143L333.923 58.9878L340.65 50.4143V64H343.552V45.534H340.914L333.923 54.5032L326.932 45.534H324.294V64ZM353.568 64.2638C357.657 64.2638 360.163 61.7577 360.163 58.8559C360.163 51.9971 350.402 54.5032 350.402 50.4143C350.402 49.0953 351.589 47.9082 353.832 47.9082C356.338 47.9082 357.657 49.6229 357.657 49.6229L359.635 47.6444C359.635 47.6444 357.657 45.2702 353.832 45.2702C349.875 45.2702 347.5 47.6444 347.5 50.4143C347.5 57.2731 357.261 54.767 357.261 58.8559C357.261 60.3068 355.942 61.6258 353.568 61.6258C350.402 61.6258 348.951 59.5154 348.951 59.5154L346.973 61.4939C346.973 61.4939 349.083 64.2638 353.568 64.2638Z" fill="#034AD8"/> +</svg> diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/assets/images/sponsors/cloudcannon-white.svg b/docs/_vendor/github.com/gohugoio/gohugoioTheme/assets/images/sponsors/cloudcannon-white.svg new file mode 100644 index 000000000..83e319a6d --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/assets/images/sponsors/cloudcannon-white.svg @@ -0,0 +1,6 @@ +<svg viewBox="0 0 363 80" fill="none" xmlns="http://www.w3.org/2000/svg"> +<path fill-rule="evenodd" clip-rule="evenodd" d="M29.0705 42.8838C29.425 43.0864 29.8049 43.289 30.1847 43.4663C33.0209 44.783 34.3376 45.644 34.3376 47.4672C34.3376 49.4171 32.7423 51.0124 30.7925 51.0124C29.2731 51.0124 28.007 50.0502 27.5005 48.7081C25.6519 50.5819 23.1197 51.7468 20.2835 51.7468C14.6872 51.7468 10.1544 47.214 10.1544 41.6177C10.1544 41.0859 10.2304 40.5541 10.3064 40.0224C5.1152 38.503 1.1142 34.1728 0.202582 28.7537C0.0759682 27.9687 0 27.1837 0 26.3734C0 25.5631 0.0759682 24.7781 0.202582 23.9931C1.13952 18.5993 5.1152 14.2438 10.3064 12.7244C10.3032 12.7022 10.3 12.6801 10.2968 12.658C10.2242 12.1503 10.1544 11.6629 10.1544 11.1291C10.1544 5.53277 14.6872 1 20.2835 1C23.0943 1 25.6519 2.16485 27.5005 4.03873C28.007 2.69662 29.2731 1.73436 30.7925 1.73436C32.7423 1.73436 34.3376 3.32969 34.3376 5.27954C34.3376 7.25472 33.0209 8.11569 30.1847 9.43248C29.9037 9.5636 29.6366 9.70858 29.3628 9.85717C29.2665 9.90945 29.1694 9.96218 29.0705 10.0149H29.0704C28.8426 10.1415 28.6147 10.2681 28.4121 10.3947C28.2349 10.496 28.0829 10.5973 27.931 10.6986C27.8803 10.7239 27.836 10.7556 27.7917 10.7872C27.7474 10.8189 27.7031 10.8505 27.6524 10.8759C26.7915 11.433 26.0065 12.0914 25.2468 12.7751C25.2215 12.7877 25.2025 12.8067 25.1835 12.8257C25.1645 12.8447 25.1455 12.8637 25.1202 12.8764C24.8163 13.1802 24.5124 13.4841 24.2339 13.788C24.1959 13.826 24.1579 13.8703 24.1199 13.9146C24.0819 13.9589 24.0439 14.0032 24.006 14.0412C23.8864 14.1907 23.7629 14.3363 23.6401 14.481C23.4508 14.704 23.2633 14.9251 23.0943 15.1554C20.7393 18.2954 19.2959 22.2205 19.2959 26.4494C19.2959 30.6783 20.714 34.6033 23.0943 37.7433C23.3729 38.1231 23.6768 38.503 24.006 38.8575C24.0439 38.8955 24.0819 38.9398 24.1199 38.9841C24.1579 39.0284 24.1959 39.0728 24.2339 39.1107C24.4424 39.3572 24.6652 39.5753 24.8915 39.7969C24.9674 39.8712 25.0438 39.946 25.1202 40.0224C25.1455 40.035 25.1645 40.054 25.1835 40.073C25.2025 40.092 25.2215 40.111 25.2468 40.1236C26.0065 40.8074 26.7915 41.4658 27.6524 42.0229C27.7031 42.0482 27.7474 42.0798 27.7917 42.1115C27.836 42.1431 27.8803 42.1748 27.931 42.2001C28.007 42.2508 28.0893 42.3014 28.1716 42.3521C28.2539 42.4027 28.3362 42.4533 28.4121 42.504C28.5261 42.5673 28.6337 42.6306 28.7414 42.6939C28.849 42.7572 28.9566 42.8205 29.0705 42.8838ZM64.2693 12.826C69.4604 14.3453 73.4614 18.6755 74.3731 24.0946C74.4997 24.8543 74.5756 25.6646 74.5756 26.6269C74.5756 27.4372 74.4997 28.2222 74.3731 29.0072C73.4361 34.4009 69.4604 38.7565 64.2693 40.2758L64.2788 40.3423C64.3515 40.85 64.4212 41.3373 64.4212 41.8712C64.4212 47.4675 59.8884 52.0003 54.2921 52.0003C51.4813 52.0003 48.9237 50.8354 47.0751 48.9615C46.5687 50.3036 45.3025 51.2659 43.7832 51.2659C41.8333 51.2659 40.238 49.6706 40.238 47.7207C40.238 45.7455 41.5548 44.8846 44.3909 43.5678C44.6719 43.4367 44.939 43.2917 45.2128 43.1431C45.3091 43.0908 45.4063 43.0381 45.5051 42.9854C45.733 42.8587 45.9609 42.7321 46.1635 42.6055C46.3407 42.5042 46.4926 42.403 46.6445 42.3017L46.6446 42.3016C46.6953 42.2763 46.7396 42.2447 46.7839 42.213C46.8282 42.1814 46.8725 42.1497 46.9232 42.1244C47.7842 41.5673 48.5692 40.9089 49.3289 40.2252C49.3542 40.2125 49.3732 40.1935 49.3922 40.1745C49.4112 40.1555 49.4301 40.1365 49.4555 40.1239C49.7593 39.82 50.0632 39.5161 50.3418 39.2123C50.3797 39.1743 50.4177 39.13 50.4557 39.0856C50.4937 39.0413 50.5317 38.997 50.5697 38.959C50.6893 38.8096 50.8128 38.664 50.9356 38.5193C51.1248 38.2962 51.3124 38.0752 51.4813 37.8448C53.8363 34.7048 55.2797 30.7798 55.2797 26.5509C55.2797 22.322 53.8616 18.397 51.4813 15.257C51.2027 14.8771 50.8989 14.4973 50.5697 14.1428C50.5317 14.1048 50.4937 14.0605 50.4557 14.0161C50.4177 13.9718 50.3797 13.9275 50.3418 13.8895C50.0632 13.5603 49.7593 13.2565 49.4555 12.9779C49.4301 12.9652 49.4112 12.9463 49.3922 12.9273C49.3732 12.9083 49.3542 12.8893 49.3289 12.8766C48.5692 12.1929 47.7842 11.5598 46.9232 10.9774C46.8726 10.9521 46.8282 10.9204 46.7839 10.8888C46.7396 10.8571 46.6953 10.8255 46.6446 10.8001C46.5687 10.7495 46.4864 10.6988 46.4041 10.6482C46.3218 10.5976 46.2395 10.5469 46.1635 10.4963C46.0496 10.433 45.9419 10.3697 45.8343 10.3064C45.7267 10.243 45.6191 10.1797 45.5051 10.1164C45.1506 9.91385 44.7708 9.71127 44.3909 9.53401C41.5801 8.19191 40.238 7.33093 40.238 5.38108C40.238 3.43123 41.8333 1.8359 43.7832 1.8359C45.3025 1.8359 46.5687 2.79816 47.0751 4.14027C48.9237 2.26638 51.456 1.10154 54.2921 1.10154C59.8884 1.10154 64.4212 5.63431 64.4212 11.2306C64.4212 11.7624 64.3452 12.2942 64.2693 12.826Z" fill="white"/> +<path d="M48.3405 26.475C48.3405 20.3723 43.4025 15.4343 37.2998 15.4343C31.197 15.4343 26.259 20.3723 26.259 26.475C26.259 32.5778 31.197 37.5158 37.2998 37.5158C43.4025 37.5158 48.3405 32.5778 48.3405 26.475Z" fill="white"/> +<path fill-rule="evenodd" clip-rule="evenodd" d="M119.934 36.2635V0.832581H113.425V36.2635H119.934ZM98.4922 36.9973C101.494 36.9973 103.973 36.198 105.931 34.5994C107.888 33.0007 109.161 31.0922 109.748 28.8736L104.022 26.9651C103.696 28.0743 103.076 29.0286 102.162 29.8279C101.249 30.6272 100.026 31.0269 98.4922 31.0269C96.763 31.0269 95.303 30.4152 94.1122 29.1917C92.9214 27.9683 92.326 26.3126 92.326 24.2246C92.326 22.1366 92.9133 20.489 94.0878 19.2819C95.2623 18.0747 96.7141 17.4712 98.4432 17.4712C101.216 17.4712 102.994 18.8251 103.777 21.533L109.601 19.5755C109.046 17.3243 107.79 15.4076 105.833 13.8253C103.875 12.243 101.363 11.4518 98.2964 11.4518C94.7729 11.4518 91.8122 12.6589 89.4142 15.0732C87.0163 17.4875 85.8173 20.5379 85.8173 24.2246C85.8173 27.8786 87.0326 30.9209 89.4631 33.3514C91.8937 35.782 94.9034 36.9973 98.4922 36.9973ZM145.097 33.3759C142.699 35.7902 139.689 36.9973 136.068 36.9973C132.446 36.9973 129.437 35.7902 127.039 33.3759C124.641 30.9617 123.442 27.9112 123.442 24.2246C123.442 20.5379 124.633 17.4875 127.014 15.0732C129.429 12.6589 132.446 11.4518 136.068 11.4518C139.689 11.4518 142.699 12.6589 145.097 15.0732C147.495 17.4875 148.694 20.5379 148.694 24.2246C148.694 27.9112 147.495 30.9617 145.097 33.3759ZM136.069 31.0758C134.373 31.0758 132.921 30.4722 131.714 29.2651C130.539 28.058 129.952 26.3778 129.952 24.2245C129.952 22.0713 130.547 20.3911 131.738 19.1839C132.929 17.9768 134.373 17.3732 136.069 17.3732C137.766 17.3732 139.209 17.9768 140.4 19.1839C141.591 20.3911 142.186 22.0713 142.186 24.2245C142.186 26.3778 141.591 28.058 140.4 29.2651C139.209 30.4722 137.766 31.0758 136.069 31.0758ZM164.901 36.0919C163.677 36.6302 162.381 36.8994 161.01 36.8994C158.172 36.8994 155.937 35.9941 154.306 34.1834C152.675 32.3727 151.859 30.1134 151.859 27.4055V12.1859H158.368V26.0842C158.368 27.5197 158.743 28.686 159.493 29.5832C160.244 30.4804 161.337 30.929 162.772 30.929C164.175 30.929 165.284 30.4967 166.1 29.6321C166.915 28.7676 167.323 27.6175 167.323 26.182V12.1859H173.832V31.9078C173.832 33.4411 173.914 34.893 174.077 36.2632H167.862C167.731 35.6107 167.666 34.7461 167.666 33.6695C167.046 34.7461 166.124 35.5536 164.901 36.0919ZM189.5 36.8507C191.066 36.8507 192.444 36.5408 193.635 35.9209C194.826 35.301 195.698 34.4854 196.253 33.474C196.253 34.518 196.335 35.4479 196.498 36.2635H202.713C202.582 34.9585 202.517 33.5067 202.517 31.908V0.832581H196.106V14.5841C195.03 12.5939 192.762 11.5989 189.304 11.5989C185.943 11.5989 183.178 12.806 181.009 15.2203C178.839 17.6345 177.755 20.6197 177.755 24.1759C177.755 27.8299 178.856 30.8559 181.058 33.2538C183.26 35.6518 186.074 36.8507 189.5 36.8507ZM185.977 29.1919C187.086 30.4154 188.522 31.0271 190.283 31.0271C192.013 31.0271 193.432 30.4072 194.541 29.1674C195.65 27.9277 196.205 26.2475 196.205 24.1269C196.205 22.0388 195.65 20.3994 194.541 19.2086C193.432 18.0178 192.013 17.4224 190.283 17.4224C188.554 17.4224 187.127 18.026 186.001 19.2331C184.876 20.4402 184.313 22.0878 184.313 24.1758C184.313 26.2964 184.868 27.9685 185.977 29.1919ZM218.798 36.9973C221.8 36.9973 224.279 36.198 226.237 34.5994C228.194 33.0007 229.466 31.0922 230.054 28.8736L224.328 26.9651C224.002 28.0743 223.382 29.0286 222.468 29.8279C221.555 30.6272 220.331 31.0269 218.798 31.0269C217.069 31.0269 215.609 30.4152 214.418 29.1917C213.227 27.9683 212.632 26.3126 212.632 24.2246C212.632 22.1366 213.219 20.489 214.394 19.2819C215.568 18.0747 217.02 17.4712 218.749 17.4712C221.522 17.4712 223.3 18.8251 224.083 21.533L229.907 19.5755C229.352 17.3243 228.096 15.4076 226.139 13.8253C224.181 12.243 221.669 11.4518 218.602 11.4518C215.079 11.4518 212.118 12.6589 209.72 15.0732C207.322 17.4875 206.123 20.5379 206.123 24.2246C206.123 27.8786 207.338 30.9209 209.769 33.3514C212.2 35.782 215.209 36.9973 218.798 36.9973ZM248.562 33.3759C247.028 35.7575 244.663 36.9483 241.466 36.9483C238.986 36.9483 236.988 36.2306 235.471 34.7951C233.954 33.3595 233.195 31.663 233.195 29.7055C233.195 27.6501 233.864 26.0026 235.202 24.7628C236.539 23.5231 238.268 22.7401 240.389 22.4138L246.311 21.5329C247.518 21.3698 248.121 20.7989 248.121 19.8201C248.121 18.9066 247.77 18.1562 247.069 17.569C246.368 16.9817 245.364 16.6881 244.059 16.6881C242.689 16.6881 241.604 17.0633 240.805 17.8137C240.006 18.564 239.557 19.4939 239.459 20.6031L233.685 19.3797C233.913 17.2917 234.941 15.4483 236.768 13.8497C238.595 12.2511 241.009 11.4518 244.01 11.4518C247.599 11.4518 250.242 12.3082 251.938 14.021C253.635 15.7338 254.483 17.9279 254.483 20.6031V32.446C254.483 33.8815 254.581 35.1539 254.777 36.2632H248.806C248.643 35.5454 248.562 34.583 248.562 33.3759ZM242.836 32.1037C241.857 32.1037 241.09 31.8346 240.536 31.2963C239.981 30.7579 239.704 30.0973 239.704 29.3143C239.704 27.5851 240.699 26.5738 242.689 26.2801L248.121 25.4482V26.5248C248.121 28.515 247.624 29.9423 246.629 30.8069C245.633 31.6714 244.369 32.1037 242.836 32.1037ZM265.918 22.4142V36.2636H259.41V12.1863H265.723V15.1715C266.408 13.9969 267.386 13.0998 268.659 12.4799C269.931 11.86 271.269 11.5501 272.672 11.5501C275.51 11.5501 277.672 12.4391 279.156 14.2172C280.64 15.9952 281.383 18.2872 281.383 21.0929V36.2636H274.874V22.2185C274.874 20.783 274.507 19.6248 273.773 18.7439C273.039 17.863 271.921 17.4226 270.421 17.4226C269.05 17.4226 267.957 17.8957 267.142 18.8418C266.326 19.7879 265.918 20.9787 265.918 22.4142ZM292.866 36.2636V22.4142C292.866 20.9787 293.274 19.7879 294.09 18.8418C294.905 17.8957 295.998 17.4226 297.368 17.4226C298.869 17.4226 299.987 17.863 300.721 18.7439C301.455 19.6248 301.822 20.783 301.822 22.2185V36.2636H308.33V21.0929C308.33 18.2872 307.588 15.9952 306.104 14.2172C304.619 12.4391 302.458 11.5501 299.619 11.5501C298.217 11.5501 296.879 11.86 295.607 12.4799C294.334 13.0998 293.355 13.9969 292.67 15.1715V12.1863H286.357V36.2636H292.866ZM333.149 33.3759C330.751 35.7901 327.742 36.9972 324.12 36.9972C320.499 36.9972 317.489 35.7901 315.091 33.3759C312.693 30.9616 311.494 27.9111 311.494 24.2245C311.494 20.5379 312.685 17.4874 315.067 15.0731C317.481 12.6589 320.499 11.4518 324.12 11.4518C327.742 11.4518 330.751 12.6589 333.149 15.0731C335.547 17.4874 336.746 20.5379 336.746 24.2245C336.746 27.9111 335.547 30.9616 333.149 33.3759ZM324.121 31.0757C322.425 31.0757 320.973 30.4722 319.766 29.265C318.591 28.0579 318.004 26.3777 318.004 24.2245C318.004 22.0712 318.6 20.391 319.79 19.1839C320.981 17.9767 322.425 17.3732 324.121 17.3732C325.818 17.3732 327.262 17.9767 328.452 19.1839C329.643 20.391 330.239 22.0712 330.239 24.2245C330.239 26.3777 329.643 28.0579 328.452 29.265C327.262 30.4722 325.818 31.0757 324.121 31.0757ZM346.762 22.4142V36.2636H340.254V12.1863H346.567V15.1715C347.252 13.9969 348.23 13.0998 349.503 12.4799C350.775 11.86 352.113 11.5501 353.516 11.5501C356.354 11.5501 358.515 12.4391 360 14.2172C361.484 15.9952 362.227 18.2872 362.227 21.0929V36.2636H355.718V22.2185C355.718 20.783 355.351 19.6248 354.617 18.7439C353.883 17.863 352.765 17.4226 351.265 17.4226C349.894 17.4226 348.801 17.8957 347.986 18.8418C347.17 19.7879 346.762 20.9787 346.762 22.4142Z" fill="white"/> +<path d="M313.211 64.2638C318.224 64.2638 320.862 60.5706 320.862 60.5706L319.015 58.724C319.015 58.724 317.037 61.6258 313.211 61.6258C309.386 61.6258 306.353 58.5921 306.353 54.767C306.353 50.9419 309.386 47.9082 313.211 47.9082C317.037 47.9082 318.883 50.6781 318.883 50.6781L320.73 48.8315C320.73 48.8315 318.224 45.2702 313.211 45.2702C307.672 45.2702 303.451 49.491 303.451 54.767C303.451 60.043 307.672 64.2638 313.211 64.2638ZM324.294 64H327.196V50.4143L333.923 58.9878L340.65 50.4143V64H343.552V45.534H340.914L333.923 54.5032L326.932 45.534H324.294V64ZM353.568 64.2638C357.657 64.2638 360.163 61.7577 360.163 58.8559C360.163 51.9971 350.402 54.5032 350.402 50.4143C350.402 49.0953 351.589 47.9082 353.832 47.9082C356.338 47.9082 357.657 49.6229 357.657 49.6229L359.635 47.6444C359.635 47.6444 357.657 45.2702 353.832 45.2702C349.875 45.2702 347.5 47.6444 347.5 50.4143C347.5 57.2731 357.261 54.767 357.261 58.8559C357.261 60.3068 355.942 61.6258 353.568 61.6258C350.402 61.6258 348.951 59.5154 348.951 59.5154L346.973 61.4939C346.973 61.4939 349.083 64.2638 353.568 64.2638Z" fill="#FDFDFD"/> +</svg> diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/assets/images/sponsors/esolia-logo.svg b/docs/_vendor/github.com/gohugoio/gohugoioTheme/assets/images/sponsors/esolia-logo.svg new file mode 100644 index 000000000..3f5344c61 --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/assets/images/sponsors/esolia-logo.svg @@ -0,0 +1,67 @@ +<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 18.1.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ viewBox="325 451.6 374.2 120.8" enable-background="new 325 451.6 374.2 120.8" xml:space="preserve">
+<path fill="#FFFFFF" d="M491.4,451.6c-33.6,0-59.6,22.4-63.6,53.4c5.4,1.7,9.7,3.9,12.9,6.6c2.1-25.9,23-44.5,50.7-44.5
+ c11.5,0,21.7,3.2,30.1,8.8c0.3-0.6,0.8-1.4,2.2-1.8c5.4-1.6,10.6-1.4,15.3,0.4c0.3-0.9,0.5-1.8,0.9-2.7
+ C528.2,459.4,511.2,451.6,491.4,451.6z"/>
+<path fill="#FBAA19" d="M491.4,455.5c-31.9,0-56.4,21.5-59.9,50.8c2.1,0.8,3.9,1.7,5.6,2.7c3.4-26.5,25.5-45.8,54.3-45.8
+ c10.7,0,20.7,2.7,29,7.5c0.3-0.1,0.6-0.3,0.9-0.4c3.5-1,6.9-1.3,10.2-1C521.1,460.7,507.2,455.5,491.4,455.5z"/>
+<g>
+ <path fill="#14499E" d="M564.5,538.1v-62.1h-7.8c-0.1,4-1.6,7.8-4,10.3c-1.3,1.3-2.7,2.3-4.1,2.8c1,2.6,2.1,5.3,2.7,8.1
+ c1.2,4.8,1.6,6.5,1.9,10.9c0.3,2.2,0.3,4.4,0.3,6.5c0,12.7-3.5,25.2-9.8,35.7v5h45.4v-17.6h-24.6V538.1z"/>
+ <path fill="#14499E" d="M613.5,555.7h-20.7v-79.5h20.7V555.7z"/>
+ <path fill="#14499E" d="M666.2,526.1h-17.2l8.7-25.3L666.2,526.1z M671.9,541.9l5.2,13.8h22.1l-29.9-79.5h-22.5l-30.5,79.5h21.9
+ l5.4-13.8H671.9z"/>
+ <path fill="#14499E" d="M426.1,507.2c-7-2.2-7.9-2.3-8.9-2.8c-3.6-1.7-5.4-3.7-5.4-6.2c0-3.9,3.9-6.9,8.8-6.9
+ c3.4,0,6.5,0.9,9.7,2.7c1.8-5.6,4.4-10.9,7.6-15.5c-6.7-2.8-13.8-4.4-20.7-4.4c-16,0-27,10.9-27,26.8c0,6.9,2.1,12,5.9,15.5
+ c3,2.5,6.5,4,15.5,6.7c9.7,2.8,12.4,4.9,12.4,9.2c0,4.7-4.3,7.9-10.3,8.3c-5.7,0.4-10.9,0.3-17.2-5.2l-9.6,13.3
+ c8.4,5.8,18,8.9,27.7,8.9c19.5,0,31-10.5,31-28.3C445.7,517.8,440,511.2,426.1,507.2z"/>
+</g>
+<g>
+ <path fill="#14499E" d="M596.7,479.9c0,6.7,0,65.2,0,71.8c3.9,0,8.9,0,12.9,0c0-6.7,0-65.2,0-71.8
+ C605.7,479.9,600.7,479.9,596.7,479.9z"/>
+ <path fill="#14499E" d="M649.3,479.9c-1.7,4.4-24.2,62.8-27.5,71.8c5.2,0,10.6,0,13.6,0c1.3-3.4,5.4-13.8,5.4-13.8h33.9
+ c0,0,3.9,10.5,5.2,13.8c3,0,8.5,0,13.7,0c-3.4-8.8-25.3-67.4-27-71.8C662.9,479.9,652.8,479.9,649.3,479.9z M645.4,524.8l12.4-36.2
+ l13.8,41.4h-27.9L645.4,524.8z"/>
+ <path fill="#14499E" d="M560.6,542c0,0,0-55.2,0-62.1c-0.5,0-1.2,0-1.7,0c-0.8,3.5-2.3,6.6-4.5,9.1c-0.6,0.8-1.4,1.4-2.2,1.9
+ c0.6,1.9,1.3,3.7,1.8,5.6c1.2,4.9,1.6,6.9,1.9,11.4c0.3,2.3,0.4,4.7,0.4,6.9c0,12.2-3.1,24-8.5,34.4c0,1.2,0,2.1,0,2.6
+ c5.9,0,31.8,0,37.6,0c0-3.4,0-6.5,0-9.8C579.9,542,560.6,542,560.6,542z"/>
+ <path fill="#14499E" d="M394.2,501c0,5.7,1.6,9.8,4.7,12.5c2.2,1.8,4.9,3.2,14,5.8c8.7,2.6,15.3,5.2,15.3,12.9
+ c0,6.7-5.6,11.6-14,12.2c-5.2,0.4-10.6,0.3-16.7-3.6c-1.8,2.5-3,4.1-4.8,6.6c6.9,4,14.4,6.2,22.1,6.2c17.5,0,27.2-8.7,27.2-24.4
+ c0-8-2.8-14.2-16.8-18.4l-1.8-0.5c-5.7-1.7-6.3-1.9-7.6-2.5c-5.2-2.3-7.6-5.7-7.6-9.7c0-5.9,5.6-10.7,12.7-10.7
+ c2.6,0,5,0.5,7.5,1.3c1.2-2.8,2.5-5.6,4-8.3c-4.9-1.6-10.1-2.5-14.9-2.5C403.5,478,394.2,487.2,394.2,501z"/>
+</g>
+<path fill="#FBAA19" d="M346.5,517.3c1.2-6.1,5.2-9.6,12-9.6c5.8,0,10.5,3.5,11.9,9.3L346.5,517.3z M389.8,529.1v-2.7
+ c-0.1-20.2-12.7-32.1-33-31.8c-19.5,0.1-31.9,12.8-31.8,31.9c0.1,18.9,13.7,31,34.4,30.8c15.5-0.1,25.7-7.2,29.5-21.9l-20,0.1
+ c-2.6,5.4-5.2,7-10,7c-8.5,0.1-12.8-4.1-12.9-13.1L389.8,529.1z"/>
+<path fill="#FBAA19" d="M506.1,485.1c0,0,1.9-3.9,6.5-6.6c-6.2-3.1-13.4-4.9-21.2-4.9c-25.2,0-44,18.2-44,42.3
+ c0,24.2,18.9,42.4,44,42.4c25.2,0,44-18.2,44-42.4c0-10.5-3.5-19.8-9.6-27C517,484.2,506.1,485.1,506.1,485.1z M491.3,538.5
+ c-12.4,0-22.4-10-22.4-22.4c0-12.3,10-22.2,22.4-22.2s22.4,10,22.4,22.2C513.8,528.4,503.7,538.5,491.3,538.5z"/>
+<path fill="#FBAA19" d="M356.8,498.3L356.8,498.3c-17.3,0.1-28.1,10.9-27.9,28.1c0.1,16.8,11.9,27.2,30.5,27
+ c12.2-0.1,20-4.8,24-14.1c-4.9,0-9.7,0.1-12.2,0.1c-2.8,4.9-6.5,7-12.3,7c-10.6,0.1-16.7-5.9-16.9-16.9c0,0,0,0,0-0.1
+ c0-1,0.4-1.9,1-2.7c0.8-0.8,1.7-1.2,2.7-1.2c0,0,33.2-0.3,39.7-0.4c-0.3-8.1-2.8-14.9-7.5-19.5C373.3,500.8,365.9,498.2,356.8,498.3
+ z M343.5,519.9c-0.8-0.9-1-2.1-0.9-3.2c1.4-8,7.2-12.7,15.8-12.8l0,0c7.6-0.1,13.8,4.8,15.6,12.3c0.3,1.2,0,2.3-0.6,3.4
+ c-0.8,0.9-1.8,1.6-3,1.6l-23.9,0.3C345.3,521.3,344.3,520.8,343.5,519.9z"/>
+<path fill="#FBAA19" d="M506.1,485.1c0,0,0.9-1.8,3-3.9c-5.3-2.3-11.2-3.6-17.7-3.6c-22.9,0-40.1,16.5-40.1,38.4
+ c0,22,17.2,38.5,40.1,38.5s40.1-16.5,40.1-38.5c0-12.5-5.6-23.3-14.7-30.1C511,484.7,506.1,485.1,506.1,485.1z M517.7,516
+ c0,14.5-11.8,26.2-26.2,26.2s-26.2-11.8-26.2-26.2c0-14.5,11.8-26.1,26.2-26.1C505.8,489.9,517.7,501.7,517.7,516z"/>
+<path fill="#14499E" d="M518.5,562.4c-7.9,4.1-16.9,6.3-26.9,6.3c-20.2,0-37.1-9.4-46.5-24.2c-0.6,1.4-1.4,2.7-2.3,3.9
+ c10.7,14.4,28.3,23.3,48.9,23.3c9.6,0,18.4-1.9,26.2-5.3c0.1-0.6,0.1-1.3,0.4-1.9C518.3,563.6,518.5,562.9,518.5,562.4z"/>
+<path fill="#14499E" d="M552.9,472.6c-0.6-5-0.1-8,0.8-9.7c0-0.1-11.9-0.1-14.2,15.3c-5.7-3.2-11.5-3-16.3-1.6
+ c-0.8,0.3-0.6,0.5,0.1,0.5c3.1-0.1,6.1,0.5,8.8,1.9c-5.4-1.3-15.1-1.4-20.4,3.2c-0.3,0.1-0.5,0.3-0.5,0.4c0.5,0.1,4.9-0.8,15,3.6
+ c4.1,1.8,11.4,3.7,14.1-0.5c2.5,5.6,4.1,10.7,5,15.5c-1.8-3.1-4.1-4.5-4.8-4.8c-2.7-1.6-6.5-1.6-6.5-1.6s0.5,2.3,1.8,3.5
+ c3,3,7.4,2.1,7.2,1.8c0-0.8-0.3-1.4-0.5-1.9c2.2,2.3,3.7,8.1,4,10.9c0.9,10-1,18.4-3.1,24.8c-3.9,10-8.5,16.9-17.3,25
+ c-2.6-3.7-7.2-4.3-7.8-2.8v0.1c2.5-0.3,8.4,2.3,7.9,8.4c-0.6,7.4-6.5,5-5.3,0.1c0.8-3.4-0.6-5-1.9-6.1c0.6,1.3,1.6,3.1,0.5,6.5
+ c-2.3,7.9,7,11,8.3,0.9c0-0.5,0-1,0-1.4c15.9-12.9,24.2-34.9,22.1-56c-0.4-4.1-0.6-5.8-1.8-10.5c-0.9-3.6-2.2-7.2-3.7-10.6
+ C548.2,487.8,554.1,482.3,552.9,472.6z"/>
+<g>
+ <path fill="#14499E" d="M541.7,478.5l-0.5,3.5l0,0c0.5,1.2,1.2,2.6,1.2,2.6c0.1,0.1,0.1,0.4,0.1,0.5c0.8,0,1.7,0.1,1.7,0.1
+ c0.9,0,2.5-0.4,3.7-1.9c1.8-1.9,2.7-4.7,2.7-7.9c0-0.8,0-1.6-0.1-2.3c-0.3-1.6-0.4-3.1-0.4-4.4c0-0.9,0.1-1.7,0.3-2.6
+ C547.3,467.1,543,470.1,541.7,478.5z"/>
+ <path fill="#14499E" d="M529.8,481.1c-3.4-0.8-6.1-0.8-10.3,0.1c2.3,0.6,4.8,1.4,7.4,2.6c4.1,1.8,9.4,3,11,0.4c0,0,1.2-1.9,1.8-3
+ c-0.9-0.5-1.7-1-1.7-1c-1.8-1-3.6-1.6-5.6-1.9C534,482,529.8,481.1,529.8,481.1z"/>
+</g>
+<path fill="#FBAA19" d="M491.3,489.9c13.6,0,24.8,10.3,26.1,23.5c0.1-0.9,0.1-1.7,0.1-2.6c0-14.5-11.8-26.1-26.2-26.1
+ c-14.5,0-26.2,11.8-26.2,26.1c0,0.9,0,1.8,0.1,2.6C466.5,500.2,477.7,489.9,491.3,489.9z"/>
+</svg>
diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/assets/images/sponsors/graitykit-dark.svg b/docs/_vendor/github.com/gohugoio/gohugoioTheme/assets/images/sponsors/graitykit-dark.svg new file mode 100644 index 000000000..fd7d12f5c --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/assets/images/sponsors/graitykit-dark.svg @@ -0,0 +1,3 @@ +<svg viewBox="0 0 1280 492" overflow="visible" xmlns="http://www.w3.org/2000/svg"><path d="m106.3 334.1c1.9 5.2 3.8 10.7 5.3 16.1-10.5 27.1-42.9 29.2-57.7 14.2-2.5-4.6-4.6-9.4-6.5-14.4 13.8 2.5 46.3-5 58.9-15.9zm80.4-207.2c1.8-6.5 1.8-13.4.2-20-2-7.6-6.1-14.4-12-19.7 0 0-12.8-23.7-36.2-23.7-14 .2-27.4 5.2-38 14.3-9 17.1-12.1 35.8-7.5 53.9 4.4 17.1 15 31.3 29.7 41.9 0 0 30.1 2.1 47.1-10.5 16.4-12.2 16.7-36.2 16.7-36.2zm33.2 125.1-50.1 42c-2.9-3.4-25.7-29.4-36-60l57.1-33.2c12.1 27.1 21.7 40.1 29 51.2zm-50.8 40.6c.5.6.5.6 0 0zm170.7 35.1c-8.5 9.9-34.8 26.2-48.7 26.2 1.7 4.8 3 9.8 3.8 14.8 9.6 15.9 50.3.4 46.2-25.7-.1-5.1-.5-10.2-1.3-15.3zm-141 88.1c-.1 4.6-.4 9.4-.6 14.4 6.4 20.7 47.2 23 58.7-.5 2.7-3.6 6.7-10.3 9.4-20.8-19.6 14.2-54.3 13.7-67.5 6.9zm101.3-282.8c1.2-4.2 2.3-8.5 3.2-12.8-17.3-2.7-34.7-4.4-52.1-4.9-1.3 4.2-3 8.2-5.1 12 8.1 20.1 40.9 21.9 54 5.7zm979.9 15v128c0 4.4-3.6 8-8 8h-296c-4.4 0-8-3.6-8-8v-128c0-4.4 3.6-8 8-8h296c4.4 0 8 3.6 8 8zm-162.4 107.2-53.8-46.6 52.2-39.6v-5h-22.7l-60.6 46v-46h-20.4v96h20.4v-41h14.1l47.2 41h23.7zm32.6-67h-19.9v71.8h19.9zm.4-27.5h-20.7l.9 17.3h18.9zm90.1 98.5-2.3-14.6c-5.7 1.1-11.4 1.6-17.2 1.6-16.1 0-22.4-6.4-22.4-18v-25.6h41.4v-14.5h-41.5v-19.1h-10.4l-9.6 19.2h-17.3v14.5h17.6v25.8c0 20.3 10.7 33.1 40.3 33.1 7.1 0 14.3-.8 21.4-2.4z" fill="#d99b21"/><path d="m339.8 327.7c-7.1-43.3-43.6-72.7-80.8-72.7-6.2 0-12.4.7-18.5 2-7.2-8-13.7-16.8-19.2-26 33.1-13.7 65.8-53.9 78.8-98-2.6 2.1-8.2 5-19.1 5-22.9 0-32.2-7.6-35-10.7-9.7 17.3-28.1 31.7-47 31.7-4.7 0-9.4-.5-14.1-1.4 7.7-14.4 9-26.8 4.3-32.2-.7-.8-2-.9-2.8-.2-.3.3-.5.6-.6 1-7.2 28.9-40.8 46.7-71 46.7-30.4.1-55.8-17.2-55.8-43.7 0-29.5 34.1-56.2 72.2-56.2 17.2 0 32.6 5.5 42.9 15.1.8.7 2 .7 2.8-.1.3-.3.5-.7.5-1.1 2.5-17-29.9-39.7-69.1-39.7-4.5 0-9.1.3-13.6.9l-2.4-9c-.7-2.5-.3-3.8 1.4-5.7 7.4-8.2 6.8-20.8-1.4-28.3-8.2-7.4-20.8-6.8-28.3 1.4-7.4 8.2-6.8 20.8 1.4 28.3 2.1 1.9 4.7 3.4 7.4 4.2 2.4.8 3.3 1.8 4 4.2l2.2 8.2c-37.5 11.6-65 44.3-65 80.2 0 46.9 40.2 68.2 64.3 73.3-8.9 5-16.6 11.8-22.7 20l-4.1-7.1c-.7-1-.8-2.4-.2-3.5 1.9-4.6-.3-9.9-5-11.7-4.6-1.9-9.9.3-11.7 5-1.9 4.6.3 9.9 5 11.7.7.3 1.4.5 2.2.6 1.3.1 2.4.8 2.9 1.9l6.1 10.5c-3 5-5.5 10.3-7.4 15.8l-20.5-35.1c-.8-1.1-.9-2.6-.1-3.7 2.9-6 .4-13.1-5.6-16-1.8-.9-3.7-1.3-5.7-1.2-6.6.2-11.8 5.8-11.6 12.4.2 6.1 5.1 11.1 11.2 11.5 1.3 0 2.6.8 3.1 2l25.2 43.6c-1.7 8-2.5 16.2-2.5 24.4 0 28.1 4.8 49.1 10.4 64 1.9 1.8 6.4 4 16.6 4 22.4 0 41.1-9.5 42.2-20 19.6 29.9 40.3 38.2 74.7 47 10.9 2.8 17.8 10.9 17.8 31 0 1.2 0 2.5-.1 3.8 2.9 3.3 10.4 8.2 29.2 8.2 23.9 0 34.4-10.1 38.2-15.1 1.9-7.8 2.8-15.8 2.8-23.9 0-24.7-18.1-47.9-42.8-61.2 5.5-1.2 11.2-1.8 16.8-1.8 21.4 0 39.5 8.6 48 31.9 1.6 1 4.4 2.1 9 2.1 15.2 0 35-15.6 40.1-28.3zm-126.6-74.9c-25.6 25.1-54.5 41.9-62.2 46.1-1.2.6-2.6.4-3.6-.5-16.9-17.3-26.7-40.7-29.6-48.1-.5-1.3.1-2.8 1.3-3.4 23.5-12 46.2-25.5 67.8-40.5.9-.6 2.1-.4 2.8.5.1.1.1.2.2.3 6.7 14.5 14.6 28.5 23.6 41.8.9 1.2.8 2.8-.3 3.8zm164.8 111.2c0 22.1-24 41-50 41-17.4 0-29.6-12-33-35-.1-.4-.1-.9-.2-1.3 1.3 1.2 3.5 2.3 7.2 2.3 16.2 0 39-17.3 39-28 0 0 2.2-1 8-1 15 0 29 7.7 29 22zm-121.1 65.7c9.1 12.4 14.1 25.4 14.1 33.3 0 15-9.3 29-26 29-24.4 0-47-24.5-47-54 0-2.6.1-5.2.2-7.8 2.2 3.6 8.7 8.8 27.8 8.8 16.3 0 25.8-5.1 30.9-9.3zm-145.3-79.5c2.6 9.2 4.4 18.3 4.4 25.9 0 12.7-3.4 20.4-11.2 23-2.3 14-8.1 22-19.8 22-16.5 0-32-17.2-32-48 0-2.9.3-5.8.9-8.7 3.1 2 8 3.7 16.1 3.7 25.6-.1 37.7-12.8 41.6-17.9zm122.4-259.2c0-5.1 4.3-8 10-8 2.7 0 5.4.5 7.9 1.5-.6-3.5-.9-7-.9-10.5 0-17.9 6.3-32 22-32 17.7 0 33 21.9 33 52 0 8.8-.9 17.6-2.7 26.2-2.6 1.5-8.6 3.8-20.3 3.8-25.3 0-31.9-8.7-31.9-8.7-7.5-6.3-17.1-15.9-17.1-24.3zm168.1 116.6h51.6v48.8c-14.8 3.5-30 5.3-45.2 5.3-42.2 0-64.6-19.6-64.6-49.8 0-30.7 24.2-49.5 66.8-49.5 13.7 0 27.3 1.4 40.7 4.2l-3.4 15.4c-12.1-2.3-24.3-3.4-36.6-3.4-32.4 0-46.9 13.1-46.9 33.7 0 20.7 13.9 33.3 44.6 33.3 8.6.1 17.3-.5 25.8-1.8v-21.1l-32.9-5.4zm449 37 2.3 14.6c-7.1 1.6-14.3 2.4-21.5 2.4-29.6 0-40.3-12.8-40.3-33.1v-25.8h-17.6v-14.5h17.3l9.7-19.2h10.4v19.2h41.5v14.5h-41.4v25.6c0 11.6 6.4 18 22.4 18 5.8-.1 11.6-.6 17.2-1.7zm-108.4-83.9h20.7l-.8 17.3h-18.9zm208.8 27.5v4.9l-49.5 90.9h-25.1v-4.8l28.8-22.6v-.8h-11.5l-34.3-62.7v-4.9h19.3l27 54.2 26.4-54.2zm-430.5 0h10v18.9l-38.1 9.5v43.4h-19.9v-71.8h13.4l5.3 16.1zm222.1 0h19.9v71.8h-19.9zm-32 0h19.2v4.9l-38.3 66.9h-16.6l-38.5-66.9v-4.9h19.5l27.4 50.2zm-132-1.5c-11 .1-22.1 1.3-32.9 3.6l2.3 13.8c9.4-2 19-3 28.7-3.1 19.2 0 26 6.1 26.9 16.4l-34.9.9c-19.3.5-28.5 8.7-28.5 21.4 0 12.6 10.3 21.9 30 21.9 13.2 0 25.1-4.6 34.6-10.3l4.7 8.7h14.1v-38.3c0-21.3-10.2-35-45-35zm25.2 55.3c-8.4 3.9-17.6 6.6-27.3 6.6-12.2 0-17.3-4.2-17.4-10.3 0-5.9 4.3-9.2 12.3-9.5l32.4-1.1z" fill="#001a4d"/></svg> + + diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/assets/images/sponsors/linode-logo.svg b/docs/_vendor/github.com/gohugoio/gohugoioTheme/assets/images/sponsors/linode-logo.svg new file mode 100644 index 000000000..7060e856f --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/assets/images/sponsors/linode-logo.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" enable-background="new 0 0 575.8 178.3" viewBox="0 0 575.8 178.3"><path d="m148.6 78.9-24.7-13.6-20.8 12.7-.3 13-10.1-6.7-13.8 8.4c-.2-3.9-.4-8.6-.6-14.2l-14.2-9.5c3.9-2 8.4-4.3 13.5-7-.1 0 .1 1.4-2-46.5l-32-15.4-43.6 13.6 9.7 46.9 14.6 11.4-11.1 5.3 7.3 35.3 10.2 9.6-7.3 4.5 5.7 27.3 22.9 24.3c.1-.1 2.4-1.9 29.5-23.5l-.8-18.6 11.7 9.9c.2-.2 2.4-1.9 23.7-18.8l.8-13.7 8.8 6.1c.1-.2 2.1-1.7 19.3-15.3z"></path><path d="m128.1 93.5 20.5-14.6-24.7-13.6-20.8 12.7z" fill="#141414"></path><path d="m125.8 119.5 2.3-26-25-15.5-.5 25.4z" fill="#004b16"></path><path d="m92.6 146-.3-27-25.1-19.1 1.9 26.4z" fill="#004b16"></path><path d="m92.3 119 25.5-18.2-25.1-16.5-25.5 15.6z" fill="#141414"></path><path d="m52.1 178.2-4.1-27.6-24.6-24.1 5.7 27.4z" fill="#004b16"></path><path d="m48 150.6 32.4-23.1-25.1-20.4-31.9 19.4z" fill="#141414"></path><path d="m45.9 136.3-5.3-36.4-27.4-22.8 7.3 35.4z" fill="#004b16"></path><path d="m40.6 99.9 37.7-21.4-28.2-18.9-36.9 17.5z" fill="#141414"></path><path d="m38 82.5-7.3-49.9-30.7-19 9.7 46.9z" fill="#004b16"></path><path d="m30.7 32.6 44.9-17.2-32-15.4-43.6 13.6z" fill="#141414"></path><g fill="#1cb35c"><path d="m145.2 104.2c-19 15.1-19.4 15.4-19.3 15.4 2.4-27.2 2.2-26 2.3-26 21.8-15.5 20.4-14.6 20.5-14.6z"></path><path d="m116.2 127.2c-23.5 18.7-23.8 18.8-23.7 18.8-.2-28.2-.3-27-.2-27 27.1-19.4 25.4-18.2 25.5-18.2z"></path><path d="m81.6 154.7c-29.4 23.3-29.6 23.5-29.5 23.5-4.2-28.4-4.1-27.5-4-27.5 34.5-24.6 32.3-23.1 32.4-23.1z"></path><path d="m75.6 15.4c2.1 47.9 1.9 46.5 2 46.5-38.8 20.2-39.7 20.6-39.6 20.6-7.5-51-7.4-49.9-7.3-49.9z"></path><path d="m78.3 78.5c1.6 36.3 1.4 35.1 1.5 35.1-33.6 22.6-34 22.8-33.9 22.8-5.5-37.4-5.4-36.4-5.3-36.4z"></path></g><path d="m191.4 33.6 16.8-4c0 81.8-3.1 93.5 8 97.1-2.6 4.9-7.1 7.4-13.3 7.4-15.3 0-11.5-11.3-11.5-100.5z"></path><path d="m233.7 132.7v-58.4h-9.2v-13.8h26.3v72.2zm8.7-100.1c12.9 0 12.9 19.5 0 19.5s-12.9-19.5 0-19.5z"></path><path d="m316.8 132.7c0-43.6 1.1-49.6-3.5-55.2-5.8-6.9-20-5-26.1 3v52.2h-16.8v-72.2h12.1l3.1 6.7c9.1-10.8 30.4-10.9 40.6-.4 9.7 10 7.4 20.5 7.4 65.8z"></path><path d="m347.2 96.4c0-49.2 69.4-51.1 69.4 0-.1 50.7-69.4 50.8-69.4 0zm17.5 0c0 28.8 22.2 27.7 29.7 17.7 7-9.4 8.8-41.2-12.5-41.2-12.3 0-17.2 11.3-17.2 23.5z"></path><path d="m476.4 132.7c0-7.4 1.8-3.4-7.1-.4-10.2 3.5-25.1 2-34.1-7.9-11.1-12.3-12.6-39.5 1.3-54.6 11.4-12.3 28.5-13.1 39.9-7.4v-28.9l16.9-4v103.1zm0-54.9c-8.9-7.1-20.9-4.8-26.8 1.9-8.1 9.1-11.2 40.2 16.2 40.2 2.9 0 9-2.2 10.6-4.4z"></path><path d="m574.6 101.8h-51.6c1.2 22.3 29 21.4 38.1 12.2l6.5 12.9c-14 11.3-62.3 15-62.3-29.5.1-54.1 81.3-49 69.3 4.4zm-51-12.7h35.5c-1.2-10.6-7-15.8-17.5-15.8-9.7 0-15.6 5.2-18 15.8z"></path></svg> diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/assets/images/sponsors/linode-logo_standard_light_medium.png b/docs/_vendor/github.com/gohugoio/gohugoioTheme/assets/images/sponsors/linode-logo_standard_light_medium.png Binary files differnew file mode 100644 index 000000000..269e6af84 --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/assets/images/sponsors/linode-logo_standard_light_medium.png diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/assets/images/sponsors/your-company-dark.svg b/docs/_vendor/github.com/gohugoio/gohugoioTheme/assets/images/sponsors/your-company-dark.svg new file mode 100644 index 000000000..58fd601f5 --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/assets/images/sponsors/your-company-dark.svg @@ -0,0 +1,4 @@ +<svg viewBox="0 0 298 144" xmlns="http://www.w3.org/2000/svg"> +<path d="M92.056 39.544H86.68L68.536 66.616V80.056H78.712V91H46.072V80.056H55.672V66.52L36.952 39.544H31.384V28.6H57.208V39.544H52.024L62.488 55.288H63.064L73.432 39.544H67.48V28.6H92.056V39.544ZM134.601 69.4C134.601 76.248 132.361 81.72 127.881 85.816C123.401 89.912 117.705 91.96 110.793 91.96C104.137 91.96 98.6965 90.04 94.4725 86.2C90.3125 82.296 88.2325 76.856 88.2325 69.88C88.2325 63.544 90.1525 58.104 93.9925 53.56C97.8325 49.016 103.657 46.744 111.465 46.744C119.273 46.744 125.065 49.016 128.841 53.56C132.681 58.04 134.601 63.32 134.601 69.4ZM121.833 69.016C121.833 64.6 120.809 61.368 118.761 59.32C116.713 57.272 114.217 56.248 111.273 56.248C108.073 56.248 105.545 57.4 103.689 59.704C101.897 61.944 101.001 65.112 101.001 69.208C101.001 72.92 101.833 76.056 103.497 78.616C105.225 81.176 107.785 82.456 111.177 82.456C114.377 82.456 116.937 81.272 118.857 78.904C120.841 76.472 121.833 73.176 121.833 69.016ZM191.379 91H172.755V84.376C169.875 89.368 165.235 91.864 158.835 91.864C154.739 91.864 151.187 90.648 148.179 88.216C145.171 85.784 143.667 82.008 143.667 76.888V57.016H137.907V47.704H156.051V72.088C156.051 75.864 156.659 78.552 157.875 80.152C159.155 81.688 161.011 82.456 163.443 82.456C166.387 82.456 168.659 81.496 170.259 79.576C171.923 77.656 172.755 75.192 172.755 72.184V57.016H165.747V47.704H185.139V81.688H191.379V91ZM222.863 47.128C224.079 47.128 225.423 47.32 226.895 47.704C228.431 48.024 229.935 48.632 231.407 49.528L233.327 64.696L223.919 65.752L222.287 58.36C221.007 57.592 219.887 57.208 218.927 57.208C217.519 57.208 216.271 57.752 215.183 58.84C214.159 59.928 213.647 61.528 213.647 63.64V81.688H221.327V91H195.503V81.688H201.263V57.112H195.023V47.704H212.687V55.96C213.391 53.464 214.511 51.384 216.047 49.72C217.647 47.992 219.919 47.128 222.863 47.128Z" fill="#004887"/> +<path d="M37.568 124.032C36.0747 125.44 33.9413 126.571 31.168 127.424C28.4373 128.235 25.6 128.64 22.656 128.64C16.64 128.64 11.6693 126.699 7.744 122.816C3.86133 118.891 1.92 113.856 1.92 107.712C1.92 104.256 2.64533 100.843 4.096 97.472C5.54667 94.1013 7.808 91.3067 10.88 89.088C13.952 86.8693 17.8773 85.76 22.656 85.76C26.1547 85.76 29.1413 86.2507 31.616 87.232C34.0907 88.2133 36.0533 89.3653 37.504 90.688L38.592 99.712L32.768 100.288L31.744 94.528C29.184 92.864 26.112 92.032 22.528 92.032C18.6027 92.032 15.4453 93.3973 13.056 96.128C10.7093 98.8587 9.536 102.592 9.536 107.328C9.536 112.277 10.7947 116.032 13.312 118.592C15.8293 121.109 19.136 122.368 23.232 122.368C26.6453 122.368 29.44 121.771 31.616 120.576L32.64 114.368L38.464 114.944L37.568 124.032ZM72.802 113.664C72.802 118.144 71.3727 121.771 68.514 124.544C65.698 127.275 62.0287 128.64 57.506 128.64C53.1113 128.64 49.57 127.317 46.882 124.672C44.2367 122.027 42.914 118.443 42.914 113.92C42.914 109.739 44.1727 106.155 46.69 103.168C49.2073 100.139 52.9407 98.624 57.89 98.624C62.882 98.624 66.6153 100.117 69.09 103.104C71.5647 106.091 72.802 109.611 72.802 113.664ZM65.698 113.472C65.698 110.4 64.9513 108.053 63.458 106.432C62.0073 104.811 60.1087 104 57.762 104C55.33 104 53.4313 104.875 52.066 106.624C50.7007 108.331 50.018 110.635 50.018 113.536C50.018 116.267 50.658 118.571 51.938 120.448C53.2607 122.325 55.202 123.264 57.762 123.264C60.2367 123.264 62.178 122.368 63.586 120.576C64.994 118.741 65.698 116.373 65.698 113.472ZM129.478 128H116.806V122.752H118.406V111.488C118.406 108.757 117.915 106.837 116.934 105.728C115.995 104.576 114.651 104 112.902 104C110.64 104 108.976 104.768 107.91 106.304C106.886 107.84 106.352 109.589 106.31 111.552V122.752H110.597V128H97.9255V122.752H99.4615V111.488C99.4615 108.757 98.9708 106.837 97.9895 105.728C97.0508 104.576 95.7282 104 94.0215 104C91.8028 104 90.1602 104.768 89.0935 106.304C88.0268 107.797 87.4722 109.525 87.4295 111.488V122.752H92.8055V128H76.2935V122.752H80.5815V104.576H76.3575V99.264H87.4295V104C88.3255 102.421 89.5202 101.141 91.0135 100.16C92.5068 99.1787 94.3202 98.688 96.4535 98.688C98.5868 98.688 100.507 99.2213 102.214 100.288C103.92 101.312 105.115 102.933 105.798 105.152C106.651 103.189 107.888 101.632 109.51 100.48C111.131 99.2853 113.115 98.688 115.462 98.688C118.064 98.688 120.347 99.52 122.31 101.184C124.272 102.848 125.254 105.451 125.254 108.992V122.752H129.478V128ZM164.428 112.896C164.428 116.992 163.34 120.64 161.164 123.84C159.03 127.04 155.724 128.64 151.244 128.64C147.105 128.64 144.097 127.147 142.22 124.16V136.256H147.916V141.632H131.084V136.256H135.372V104.512H130.892V99.264H142.22V104.96C143.03 103.253 144.204 101.781 145.74 100.544C147.318 99.3067 149.43 98.688 152.076 98.688C155.745 98.688 158.71 99.9467 160.972 102.464C163.276 104.939 164.428 108.416 164.428 112.896ZM157.324 113.6C157.324 110.528 156.62 108.203 155.212 106.624C153.804 105.003 152.012 104.192 149.836 104.192C147.532 104.192 145.718 105.067 144.396 106.816C143.073 108.565 142.369 110.613 142.284 112.96L142.22 115.2C142.22 117.589 142.902 119.509 144.268 120.96C145.676 122.411 147.468 123.136 149.644 123.136C152.076 123.136 153.953 122.283 155.276 120.576C156.641 118.869 157.324 116.544 157.324 113.6ZM170.922 101.376C173.055 100.352 174.954 99.648 176.618 99.264C178.282 98.88 180.202 98.688 182.378 98.688C185.578 98.688 188.202 99.4987 190.25 101.12C192.341 102.741 193.386 105.173 193.386 108.416V121.344C193.386 123.051 194.09 123.904 195.498 123.904C195.882 123.904 196.373 123.819 196.97 123.648L197.034 127.424C195.626 128.235 194.09 128.64 192.426 128.64C188.799 128.64 186.837 126.741 186.538 122.944V122.816C185.685 124.309 184.469 125.653 182.89 126.848C181.354 128.043 179.434 128.64 177.13 128.64C175.125 128.64 173.141 128.043 171.178 126.848C169.258 125.611 168.298 123.477 168.298 120.448C168.298 116.907 169.706 114.581 172.522 113.472C175.338 112.32 178.389 111.744 181.674 111.744C182.485 111.744 183.317 111.765 184.17 111.808C185.023 111.851 185.813 111.915 186.538 112V110.4C186.538 108.693 186.239 107.157 185.642 105.792C185.045 104.427 183.551 103.744 181.162 103.744C180.266 103.744 179.413 103.808 178.602 103.936C177.834 104.064 177.087 104.32 176.362 104.704L175.21 109.12L169.706 108.544L170.922 101.376ZM186.538 116.608V115.584C185.813 115.499 185.066 115.413 184.298 115.328C183.53 115.243 182.741 115.2 181.93 115.2C180.223 115.2 178.687 115.499 177.322 116.096C175.999 116.693 175.338 117.888 175.338 119.68C175.338 122.283 176.725 123.584 179.498 123.584C181.119 123.584 182.655 123.008 184.106 121.856C185.557 120.661 186.367 118.912 186.538 116.608ZM234.863 128H219.503V122.752H223.727V111.488C223.727 108.757 223.236 106.837 222.255 105.728C221.273 104.576 219.908 104 218.159 104C215.983 104 214.255 104.704 212.975 106.112C211.737 107.52 211.097 109.248 211.055 111.296V122.752H215.343V128H199.919V122.752H204.207V104.576H199.727V99.264H211.055V103.936C213.06 100.437 216.239 98.688 220.591 98.688C223.321 98.688 225.668 99.52 227.631 101.184C229.593 102.848 230.575 105.451 230.575 108.992V122.752H234.863V128ZM267.085 104.512H264.077L254.477 128L251.277 136.256H255.501V141.632H240.141V136.256H245.005L247.821 128.256L237.645 104.512H234.509V99.264H248.653V104.512H245.005L251.661 120.064H252.045L257.421 104.512H254.157V99.264H267.085V104.512ZM275.625 98.688L270.121 98.176L271.145 89.152C273.15 88.0427 275.22 87.2107 277.353 86.656C279.486 86.1013 281.449 85.824 283.241 85.824C286.825 85.824 289.812 86.6347 292.201 88.256C294.633 89.8347 295.849 92.032 295.849 94.848C295.849 97.024 295.209 98.7947 293.929 100.16C292.649 101.483 291.177 102.592 289.513 103.488C287.892 104.384 286.441 105.237 285.161 106.048C283.881 106.859 283.241 107.84 283.241 108.992C283.241 110.4 284.201 111.104 286.121 111.104V115.456C279.252 116.139 275.817 114.24 275.817 109.76C275.817 107.755 276.436 106.197 277.673 105.088C278.91 103.936 280.34 102.976 281.961 102.208C283.582 101.44 285.012 100.608 286.249 99.712C287.486 98.7733 288.105 97.536 288.105 96C288.105 93.3547 286.206 92.032 282.409 92.032C281.428 92.032 280.382 92.16 279.273 92.416C278.206 92.672 277.289 93.056 276.521 93.568L275.625 98.688ZM277.673 128V119.872H285.865V128H277.673Z" fill="#004887"/> +</svg> diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/assets/images/sponsors/your-company.svg b/docs/_vendor/github.com/gohugoio/gohugoioTheme/assets/images/sponsors/your-company.svg new file mode 100644 index 000000000..3b85ece5c --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/assets/images/sponsors/your-company.svg @@ -0,0 +1,4 @@ +<svg viewBox="0 0 298 144" fill="none" xmlns="http://www.w3.org/2000/svg"> +<path d="M92.056 39.544H86.68L68.536 66.616V80.056H78.712V91H46.072V80.056H55.672V66.52L36.952 39.544H31.384V28.6H57.208V39.544H52.024L62.488 55.288H63.064L73.432 39.544H67.48V28.6H92.056V39.544ZM134.601 69.4C134.601 76.248 132.361 81.72 127.881 85.816C123.401 89.912 117.705 91.96 110.793 91.96C104.137 91.96 98.6965 90.04 94.4725 86.2C90.3125 82.296 88.2325 76.856 88.2325 69.88C88.2325 63.544 90.1525 58.104 93.9925 53.56C97.8325 49.016 103.657 46.744 111.465 46.744C119.273 46.744 125.065 49.016 128.841 53.56C132.681 58.04 134.601 63.32 134.601 69.4ZM121.833 69.016C121.833 64.6 120.809 61.368 118.761 59.32C116.713 57.272 114.217 56.248 111.273 56.248C108.073 56.248 105.545 57.4 103.689 59.704C101.897 61.944 101.001 65.112 101.001 69.208C101.001 72.92 101.833 76.056 103.497 78.616C105.225 81.176 107.785 82.456 111.177 82.456C114.377 82.456 116.937 81.272 118.857 78.904C120.841 76.472 121.833 73.176 121.833 69.016ZM191.379 91H172.755V84.376C169.875 89.368 165.235 91.864 158.835 91.864C154.739 91.864 151.187 90.648 148.179 88.216C145.171 85.784 143.667 82.008 143.667 76.888V57.016H137.907V47.704H156.051V72.088C156.051 75.864 156.659 78.552 157.875 80.152C159.155 81.688 161.011 82.456 163.443 82.456C166.387 82.456 168.659 81.496 170.259 79.576C171.923 77.656 172.755 75.192 172.755 72.184V57.016H165.747V47.704H185.139V81.688H191.379V91ZM222.863 47.128C224.079 47.128 225.423 47.32 226.895 47.704C228.431 48.024 229.935 48.632 231.407 49.528L233.327 64.696L223.919 65.752L222.287 58.36C221.007 57.592 219.887 57.208 218.927 57.208C217.519 57.208 216.271 57.752 215.183 58.84C214.159 59.928 213.647 61.528 213.647 63.64V81.688H221.327V91H195.503V81.688H201.263V57.112H195.023V47.704H212.687V55.96C213.391 53.464 214.511 51.384 216.047 49.72C217.647 47.992 219.919 47.128 222.863 47.128Z" fill="white"/> +<path d="M37.568 124.032C36.0747 125.44 33.9413 126.571 31.168 127.424C28.4373 128.235 25.6 128.64 22.656 128.64C16.64 128.64 11.6693 126.699 7.744 122.816C3.86133 118.891 1.92 113.856 1.92 107.712C1.92 104.256 2.64533 100.843 4.096 97.472C5.54667 94.1013 7.808 91.3067 10.88 89.088C13.952 86.8693 17.8773 85.76 22.656 85.76C26.1547 85.76 29.1413 86.2507 31.616 87.232C34.0907 88.2133 36.0533 89.3653 37.504 90.688L38.592 99.712L32.768 100.288L31.744 94.528C29.184 92.864 26.112 92.032 22.528 92.032C18.6027 92.032 15.4453 93.3973 13.056 96.128C10.7093 98.8587 9.536 102.592 9.536 107.328C9.536 112.277 10.7947 116.032 13.312 118.592C15.8293 121.109 19.136 122.368 23.232 122.368C26.6453 122.368 29.44 121.771 31.616 120.576L32.64 114.368L38.464 114.944L37.568 124.032ZM72.802 113.664C72.802 118.144 71.3727 121.771 68.514 124.544C65.698 127.275 62.0287 128.64 57.506 128.64C53.1113 128.64 49.57 127.317 46.882 124.672C44.2367 122.027 42.914 118.443 42.914 113.92C42.914 109.739 44.1727 106.155 46.69 103.168C49.2073 100.139 52.9407 98.624 57.89 98.624C62.882 98.624 66.6153 100.117 69.09 103.104C71.5647 106.091 72.802 109.611 72.802 113.664ZM65.698 113.472C65.698 110.4 64.9513 108.053 63.458 106.432C62.0073 104.811 60.1087 104 57.762 104C55.33 104 53.4313 104.875 52.066 106.624C50.7007 108.331 50.018 110.635 50.018 113.536C50.018 116.267 50.658 118.571 51.938 120.448C53.2607 122.325 55.202 123.264 57.762 123.264C60.2367 123.264 62.178 122.368 63.586 120.576C64.994 118.741 65.698 116.373 65.698 113.472ZM129.478 128H116.806V122.752H118.406V111.488C118.406 108.757 117.915 106.837 116.934 105.728C115.995 104.576 114.651 104 112.902 104C110.64 104 108.976 104.768 107.91 106.304C106.886 107.84 106.352 109.589 106.31 111.552V122.752H110.597V128H97.9255V122.752H99.4615V111.488C99.4615 108.757 98.9708 106.837 97.9895 105.728C97.0508 104.576 95.7282 104 94.0215 104C91.8028 104 90.1602 104.768 89.0935 106.304C88.0268 107.797 87.4722 109.525 87.4295 111.488V122.752H92.8055V128H76.2935V122.752H80.5815V104.576H76.3575V99.264H87.4295V104C88.3255 102.421 89.5202 101.141 91.0135 100.16C92.5068 99.1787 94.3202 98.688 96.4535 98.688C98.5868 98.688 100.507 99.2213 102.214 100.288C103.92 101.312 105.115 102.933 105.798 105.152C106.651 103.189 107.888 101.632 109.51 100.48C111.131 99.2853 113.115 98.688 115.462 98.688C118.064 98.688 120.347 99.52 122.31 101.184C124.272 102.848 125.254 105.451 125.254 108.992V122.752H129.478V128ZM164.428 112.896C164.428 116.992 163.34 120.64 161.164 123.84C159.03 127.04 155.724 128.64 151.244 128.64C147.105 128.64 144.097 127.147 142.22 124.16V136.256H147.916V141.632H131.084V136.256H135.372V104.512H130.892V99.264H142.22V104.96C143.03 103.253 144.204 101.781 145.74 100.544C147.318 99.3067 149.43 98.688 152.076 98.688C155.745 98.688 158.71 99.9467 160.972 102.464C163.276 104.939 164.428 108.416 164.428 112.896ZM157.324 113.6C157.324 110.528 156.62 108.203 155.212 106.624C153.804 105.003 152.012 104.192 149.836 104.192C147.532 104.192 145.718 105.067 144.396 106.816C143.073 108.565 142.369 110.613 142.284 112.96L142.22 115.2C142.22 117.589 142.902 119.509 144.268 120.96C145.676 122.411 147.468 123.136 149.644 123.136C152.076 123.136 153.953 122.283 155.276 120.576C156.641 118.869 157.324 116.544 157.324 113.6ZM170.922 101.376C173.055 100.352 174.954 99.648 176.618 99.264C178.282 98.88 180.202 98.688 182.378 98.688C185.578 98.688 188.202 99.4987 190.25 101.12C192.341 102.741 193.386 105.173 193.386 108.416V121.344C193.386 123.051 194.09 123.904 195.498 123.904C195.882 123.904 196.373 123.819 196.97 123.648L197.034 127.424C195.626 128.235 194.09 128.64 192.426 128.64C188.799 128.64 186.837 126.741 186.538 122.944V122.816C185.685 124.309 184.469 125.653 182.89 126.848C181.354 128.043 179.434 128.64 177.13 128.64C175.125 128.64 173.141 128.043 171.178 126.848C169.258 125.611 168.298 123.477 168.298 120.448C168.298 116.907 169.706 114.581 172.522 113.472C175.338 112.32 178.389 111.744 181.674 111.744C182.485 111.744 183.317 111.765 184.17 111.808C185.023 111.851 185.813 111.915 186.538 112V110.4C186.538 108.693 186.239 107.157 185.642 105.792C185.045 104.427 183.551 103.744 181.162 103.744C180.266 103.744 179.413 103.808 178.602 103.936C177.834 104.064 177.087 104.32 176.362 104.704L175.21 109.12L169.706 108.544L170.922 101.376ZM186.538 116.608V115.584C185.813 115.499 185.066 115.413 184.298 115.328C183.53 115.243 182.741 115.2 181.93 115.2C180.223 115.2 178.687 115.499 177.322 116.096C175.999 116.693 175.338 117.888 175.338 119.68C175.338 122.283 176.725 123.584 179.498 123.584C181.119 123.584 182.655 123.008 184.106 121.856C185.557 120.661 186.367 118.912 186.538 116.608ZM234.863 128H219.503V122.752H223.727V111.488C223.727 108.757 223.236 106.837 222.255 105.728C221.273 104.576 219.908 104 218.159 104C215.983 104 214.255 104.704 212.975 106.112C211.737 107.52 211.097 109.248 211.055 111.296V122.752H215.343V128H199.919V122.752H204.207V104.576H199.727V99.264H211.055V103.936C213.06 100.437 216.239 98.688 220.591 98.688C223.321 98.688 225.668 99.52 227.631 101.184C229.593 102.848 230.575 105.451 230.575 108.992V122.752H234.863V128ZM267.085 104.512H264.077L254.477 128L251.277 136.256H255.501V141.632H240.141V136.256H245.005L247.821 128.256L237.645 104.512H234.509V99.264H248.653V104.512H245.005L251.661 120.064H252.045L257.421 104.512H254.157V99.264H267.085V104.512ZM275.625 98.688L270.121 98.176L271.145 89.152C273.15 88.0427 275.22 87.2107 277.353 86.656C279.486 86.1013 281.449 85.824 283.241 85.824C286.825 85.824 289.812 86.6347 292.201 88.256C294.633 89.8347 295.849 92.032 295.849 94.848C295.849 97.024 295.209 98.7947 293.929 100.16C292.649 101.483 291.177 102.592 289.513 103.488C287.892 104.384 286.441 105.237 285.161 106.048C283.881 106.859 283.241 107.84 283.241 108.992C283.241 110.4 284.201 111.104 286.121 111.104V115.456C279.252 116.139 275.817 114.24 275.817 109.76C275.817 107.755 276.436 106.197 277.673 105.088C278.91 103.936 280.34 102.976 281.961 102.208C283.582 101.44 285.012 100.608 286.249 99.712C287.486 98.7733 288.105 97.536 288.105 96C288.105 93.3547 286.206 92.032 282.409 92.032C281.428 92.032 280.382 92.16 279.273 92.416C278.206 92.672 277.289 93.056 276.521 93.568L275.625 98.688ZM277.673 128V119.872H285.865V128H277.673Z" fill="white"/> +</svg> diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/assets/index.js b/docs/_vendor/github.com/gohugoio/gohugoioTheme/assets/index.js new file mode 100644 index 000000000..c89af041b --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/assets/index.js @@ -0,0 +1,10 @@ +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'; diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/assets/js/clipboardjs.js b/docs/_vendor/github.com/gohugoio/gohugoioTheme/assets/js/clipboardjs.js new file mode 100644 index 000000000..ffae31c7f --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/assets/js/clipboardjs.js @@ -0,0 +1,30 @@ +var Clipboard = require('clipboard/dist/clipboard.js'); +new Clipboard('.copy', { + target: function(trigger) { + if(trigger.classList.contains('copy-toggle')){ + return trigger.previousElementSibling; + } + return trigger.nextElementSibling; + } + }).on('success', function(e) { + successMessage(e.trigger, 'Copied!'); + e.clearSelection(); + }).on('error', function(e) { + successMessage(e.trigger, fallbackMessage(e.action)); +}); + +function successMessage(elem, msg) { + elem.setAttribute('class', 'copied bg-primary-color-dark f6 absolute top-0 right-0 lh-solid hover-bg-primary-color-dark bn white ph3 pv2'); + elem.setAttribute('aria-label', msg); +} + +function fallbackMessage(elem, action) { + var actionMsg = ''; + var actionKey = (action === 'cut' ? 'X' : 'C'); + if (isMac) { + actionMsg = 'Press ⌘-' + actionKey; + } else { + actionMsg = 'Press Ctrl-' + actionKey; + } + return actionMsg; +} diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/assets/js/docsearch.js b/docs/_vendor/github.com/gohugoio/gohugoioTheme/assets/js/docsearch.js new file mode 100644 index 000000000..e14fb2994 --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/assets/js/docsearch.js @@ -0,0 +1,8 @@ +var docsearch = require('docsearch.js/dist/cdn/docsearch.js'); +docsearch({ + appId: 'D1BPLZHGYQ', + apiKey: '6df94e1e5d55d258c56f60d974d10314', + indexName: 'hugodocs', + inputSelector: '#search-input', + debug: true, // Set debug to true if you want to inspect the dropdown +}); diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/assets/js/filesaver.js b/docs/_vendor/github.com/gohugoio/gohugoioTheme/assets/js/filesaver.js new file mode 100644 index 000000000..e69de29bb --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/assets/js/filesaver.js diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/assets/js/lazysizes.js b/docs/_vendor/github.com/gohugoio/gohugoioTheme/assets/js/lazysizes.js new file mode 100644 index 000000000..4eb3950af --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/assets/js/lazysizes.js @@ -0,0 +1,3 @@ +var lazysizes = require('lazysizes'); +// var lsnoscript = require('lazysizes/plugins/noscript/ls.noscript.js'); +var unveilhooks = require('lazysizes/plugins/unveilhooks/ls.unveilhooks.js'); diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/assets/js/main.js b/docs/_vendor/github.com/gohugoio/gohugoioTheme/assets/js/main.js new file mode 100644 index 000000000..f6d3eac9f --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/assets/js/main.js @@ -0,0 +1,22 @@ +import styles from './../css/main.css'; +import './clipboardjs.js' +import './codeblocks.js' +import './docsearch.js' +import './lazysizes.js' +import './menutoggle.js' +import './scrolldir.js' +import './smoothscroll.js' +import './tabs.js' +import './nojs.js' + +// TO use jQuery, just call the modules you want +// var $ = require('jquery/src/core'); +// require('jquery/src/core/init'); +// require('jquery/src/manipulation'); + +// OR, use all of them +// var $ = require('jquery/src/jquery'); + +// And write your code +// $('body').append('<p>Jquery is working</p>'); +// diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/assets/js/menutoggle.js b/docs/_vendor/github.com/gohugoio/gohugoioTheme/assets/js/menutoggle.js new file mode 100644 index 000000000..40bda0ce9 --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/assets/js/menutoggle.js @@ -0,0 +1,31 @@ +// Grab any element that has the 'js-toggle' class and add an event listener for the toggleClass function +var toggleBtns = document.getElementsByClassName('js-toggle') + for (var i = 0; i < toggleBtns.length; i++) { + toggleBtns[i].addEventListener('click', toggleClass, false) + } + +function toggleClass() { + // Define the data target via the dataset "target" (e.g. data-target=".docsmenu") + var content = this.dataset.target.split(' ') + // Find any menu items that are open + var mobileCurrentlyOpen = document.querySelector('.mobilemenu:not(.dn)') + var desktopCurrentlyOpen = document.querySelector('.desktopmenu:not(.dn)') + var desktopActive = document.querySelector('.desktopmenu:not(.dn)') + + // Loop through the targets' divs + for (var i = 0; i < content.length; i++) { + var matches = document.querySelectorAll(content[i]); + //for each, if the div has the 'dn' class (which is "display:none;"), remove it, otherwise, add that class + [].forEach.call(matches, function(dom) { + dom.classList.contains('dn') ? + dom.classList.remove('dn') : + dom.classList.add('dn'); + return false; + }); + // close the currently open menu items + if (mobileCurrentlyOpen) mobileCurrentlyOpen.classList.add('dn') + if (desktopCurrentlyOpen) desktopCurrentlyOpen.classList.add('dn') + if (desktopActive) desktopActive.classList.remove('db') + + } + } diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/assets/js/nojs.js b/docs/_vendor/github.com/gohugoio/gohugoioTheme/assets/js/nojs.js new file mode 100644 index 000000000..50b5126a9 --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/assets/js/nojs.js @@ -0,0 +1 @@ +document.documentElement.className = document.documentElement.className.replace(/\bno-js\b/, 'js'); diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/assets/js/scrolldir.js b/docs/_vendor/github.com/gohugoio/gohugoioTheme/assets/js/scrolldir.js new file mode 100644 index 000000000..0b69978cd --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/assets/js/scrolldir.js @@ -0,0 +1 @@ +var scrollDir = require('scrolldir/dist/scrolldir.auto.min.js'); diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/assets/js/smoothscroll.js b/docs/_vendor/github.com/gohugoio/gohugoioTheme/assets/js/smoothscroll.js new file mode 100644 index 000000000..4bb2d99b8 --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/assets/js/smoothscroll.js @@ -0,0 +1,80 @@ +// query selector targets Hugo TOC +(function() { + + 'use strict'; + + // Feature Test + if ('querySelector' in document && 'addEventListener' in window && Array.prototype.forEach) { + + // Function to animate the scroll + var smoothScroll = function(anchor, duration) { + + // Calculate how far and how fast to scroll + var startLocation = window.pageYOffset; + var endLocation = anchor.offsetTop; + var distance = endLocation - startLocation; + var increments = distance / (duration / 16); + var stopAnimation; + + // Scroll the page by an increment, and check if it's time to stop + var animateScroll = function() { + window.scrollBy(0, increments); + stopAnimation(); + }; + + // If scrolling down + if (increments >= 0) { + // Stop animation when you reach the anchor OR the bottom of the page + stopAnimation = function() { + var travelled = window.pageYOffset; + if ((travelled >= (endLocation - increments)) || ((window.innerHeight + travelled) >= document.body.offsetHeight)) { + clearInterval(runAnimation); + } + }; + } + // If scrolling up + else { + // Stop animation when you reach the anchor OR the top of the page + stopAnimation = function() { + var travelled = window.pageYOffset; + if (travelled <= (endLocation || 0)) { + clearInterval(runAnimation); + } + }; + } + + // Loop the animation function + var runAnimation = setInterval(animateScroll, 16); + + }; + + // Define smooth scroll links + var scrollToggle = document.querySelectorAll('#TableOfContents ul li a'); + + // For each smooth scroll link + [].forEach.call(scrollToggle, function(toggle) { + + // When the smooth scroll link is clicked + toggle.addEventListener('click', function(e) { + + // Prevent the default link behavior + e.preventDefault(); + + // Get anchor link and calculate distance from the top + var dataID = toggle.getAttribute('href'); + var dataTarget = document.querySelector(dataID); + var dataSpeed = toggle.getAttribute('data-speed'); + + // If the anchor exists + if (dataTarget) { + // Scroll to the anchor + smoothScroll(dataTarget, dataSpeed || 500); + } + + }, false); + + }); + + } + +})(); diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/assets/js/tabs.js b/docs/_vendor/github.com/gohugoio/gohugoioTheme/assets/js/tabs.js new file mode 100644 index 000000000..a689d474e --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/assets/js/tabs.js @@ -0,0 +1,43 @@ +/** + * Scripts which manages Code Toggle tabs. + */ +var i; +// store tabs variable +var allTabs = document.querySelectorAll("[data-toggle-tab]"); +var allPanes = document.querySelectorAll("[data-pane]"); + +function toggleTabs(event) { + + if(event.target){ + event.preventDefault(); + var clickedTab = event.currentTarget; + var targetKey = clickedTab.getAttribute("data-toggle-tab") + }else { + var targetKey = event + } + // We store the config language selected in users' localStorage + if(window.localStorage){ + window.localStorage.setItem("configLangPref", targetKey) + } + var selectedTabs = document.querySelectorAll("[data-toggle-tab='" + targetKey + "']"); + var selectedPanes = document.querySelectorAll("[data-pane='" + targetKey + "']"); + + for (var i = 0; i < allTabs.length; i++) { + allTabs[i].classList.remove("active"); + allPanes[i].classList.remove("active"); + } + + for (var i = 0; i < selectedTabs.length; i++) { + selectedTabs[i].classList.add("active"); + selectedPanes[i].classList.add("active"); + } + +} + +for (i = 0; i < allTabs.length; i++) { + allTabs[i].addEventListener("click", toggleTabs) +} +// Upon page load, if user has a preferred language in its localStorage, tabs are set to it. +if(window.localStorage.getItem('configLangPref')) { + toggleTabs(window.localStorage.getItem('configLangPref')) +} diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/assets/opengraph/gohugoio-card-base-1.png b/docs/_vendor/github.com/gohugoio/gohugoioTheme/assets/opengraph/gohugoio-card-base-1.png Binary files differnew file mode 100644 index 000000000..65555845b --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/assets/opengraph/gohugoio-card-base-1.png diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/assets/opengraph/mulish-black.ttf b/docs/_vendor/github.com/gohugoio/gohugoioTheme/assets/opengraph/mulish-black.ttf Binary files differnew file mode 100644 index 000000000..db680a088 --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/assets/opengraph/mulish-black.ttf diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/assets/output/css/app.css b/docs/_vendor/github.com/gohugoio/gohugoioTheme/assets/output/css/app.css new file mode 100644 index 000000000..5e0b0c708 --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/assets/output/css/app.css @@ -0,0 +1,5350 @@ +/* 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; +} +.prose-glossary h3 { + margin-top: 0; + font-size: 1.125rem; +} +.prose-glossary h3:first-of-type { + margin-top: 3em; +} +.prose-glossary h3 ~ p { + margin: 0.5em 0 2em 0; +} +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; +} +.mstdn { + display: inline-block; + background-color: #282c37; + color: #d9e1e8; + text-decoration: none; + padding: 4px 10px 4px 30px; + border-radius: 4px; + font-size: 16px; + background-image: url("data:image/svg+xml;charset=utf8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2261.076954mm%22%20height%3D%2265.47831mm%22%20viewBox%3D%220%200%20216.4144%20232.00976%22%3E%3Cpath%20d%3D%22M211.80734%20139.0875c-3.18125%2016.36625-28.4925%2034.2775-57.5625%2037.74875-15.15875%201.80875-30.08375%203.47125-45.99875%202.74125-26.0275-1.1925-46.565-6.2125-46.565-6.2125%200%202.53375.15625%204.94625.46875%207.2025%203.38375%2025.68625%2025.47%2027.225%2046.39125%2027.9425%2021.11625.7225%2039.91875-5.20625%2039.91875-5.20625l.8675%2019.09s-14.77%207.93125-41.08125%209.39c-14.50875.7975-32.52375-.365-53.50625-5.91875C9.23234%20213.82%201.40609%20165.31125.20859%20116.09125c-.365-14.61375-.14-28.39375-.14-39.91875%200-50.33%2032.97625-65.0825%2032.97625-65.0825C49.67234%203.45375%2078.20359.2425%20107.86484%200h.72875c29.66125.2425%2058.21125%203.45375%2074.8375%2011.09%200%200%2032.975%2014.7525%2032.975%2065.0825%200%200%20.41375%2037.13375-4.59875%2062.915%22%20fill%3D%22%233088d4%22%2F%3E%3Cpath%20d%3D%22M177.50984%2080.077v60.94125h-24.14375v-59.15c0-12.46875-5.24625-18.7975-15.74-18.7975-11.6025%200-17.4175%207.5075-17.4175%2022.3525v32.37625H96.20734V85.42325c0-14.845-5.81625-22.3525-17.41875-22.3525-10.49375%200-15.74%206.32875-15.74%2018.7975v59.15H38.90484V80.077c0-12.455%203.17125-22.3525%209.54125-29.675%206.56875-7.3225%2015.17125-11.07625%2025.85-11.07625%2012.355%200%2021.71125%204.74875%2027.8975%2014.2475l6.01375%2010.08125%206.015-10.08125c6.185-9.49875%2015.54125-14.2475%2027.8975-14.2475%2010.6775%200%2019.28%203.75375%2025.85%2011.07625%206.36875%207.3225%209.54%2017.22%209.54%2029.675%22%20fill%3D%22%23fff%22%2F%3E%3C%2Fsvg%3E"); + background-size: 16px; + background-repeat: no-repeat; + background-position: top 50% left 8px; + -webkit-transition: all 0.5s; + transition: all 0.5s; +} +.mstdn:hover { + background-color: #484c56; +} +.mstdn > span { + color: #9baec8; + font-size: 12px; + padding-left: 3px; +} +.mstdn > span:before { + content: "@"; +} +@media (min-width: 75em) { + + [data-scrolldir="down"] .sticky { + position: fixed; + top:100px; + right:0; + } + + [data-scrolldir="up"] .sticky { + position: fixed; + top:100px; + right:0; + } +} +#right-sidebar { + scrollbar-width: none; /* hide scrollbar: Firefox */ + -ms-overflow-style: none; /* hide scrollbar: Internet Explorer 10+ */ + height: calc(100vh - 9rem); + overflow-y: auto; +} +#right-sidebar::-webkit-scrollbar { /* hide scrollbar: WebKit */ + width: 0; + height: 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 } +@media print { + #page-footer, + body > footer, + body > nav { + display: none; + } +} +/* +Make h6 elements behave like dt elements. Initially implemented to support +linkable glossary entries. + +Yes, it's a hack. That's why it's in the shame file. +*/ +h6 { + margin-top: 0; + margin-bottom: 0; + font-size: 1.125rem; +} +h6:first-of-type { + margin-top: 3em; +} +h6 ~ p { + margin: 0.5em 0 2em 0; +} +.nested-blockquote blockquote { + border-left: 4px solid #0594CB; + padding-left: 1em; +} +.mw-90 { + max-width:90%; +} +/* purgecss end ignore */ + diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/assets/output/js/app.js b/docs/_vendor/github.com/gohugoio/gohugoioTheme/assets/output/js/app.js new file mode 100644 index 000000000..a3e1801f8 --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/assets/output/js/app.js @@ -0,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(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,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,"&").replace(r,"<").replace(i,">").replace(o,"'").replace(s,"""):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 [email protected] 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(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")}]);
\ No newline at end of file diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/config.toml b/docs/_vendor/github.com/gohugoio/gohugoioTheme/config.toml new file mode 100644 index 000000000..8ce64833a --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/config.toml @@ -0,0 +1,4 @@ + +[module] + [module.hugoVersion] + min = "0.56.0" diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/data/sponsors.toml b/docs/_vendor/github.com/gohugoio/gohugoioTheme/data/sponsors.toml new file mode 100644 index 000000000..c8986a8c6 --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/data/sponsors.toml @@ -0,0 +1,22 @@ +[[banners]] + name = "Linode" + link = "https://www.linode.com/" + logo = "images/sponsors/linode-logo.svg" + utm_campaign = "hugosponsor" + bgcolor = "#ffffff" + +[[banners]] + name = "CloudCannon" + link = "https://cloudcannon.com/hugo-cms/" + logo = "/images/sponsors/cloudcannon-white.svg" + utm_campaign = "HugoSponsorship" + utm_source = "sponsor" + utm_content = "gohugo" + bgcolor = "#034AD8" + +[[banners]] + name = "Your Company?" + link = "https://bep.is/en/hugo-sponsor-2023-01/" + utm_campaign = "hugosponsor" + show_on_hover = true + bgcolor = "#4e4f4f" diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/404.html b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/404.html new file mode 100644 index 000000000..9b0866d18 --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/404.html @@ -0,0 +1,10 @@ +{{ define "main" }} +<main class="cf pa5 pa4-l f4 tc center measure-wide lh-copy gray"> + <h1 class="f3 f2-ns">The page you're looking for doesn't exist. Perhaps you'd like to gopher something else? Sorry.</h1> + <div class="h6"> + <img src="/images/gopher-hero.svg" alt="" class="h5"> + </div> + + {{ .Content }} +</main> +{{ end }} diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/_default/_markup/render-codeblock-mermaid.html b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/_default/_markup/render-codeblock-mermaid.html new file mode 100644 index 000000000..94ea0cad0 --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/_default/_markup/render-codeblock-mermaid.html @@ -0,0 +1,4 @@ +<pre class="mermaid"> + {{- .Inner | safeHTML }} +</pre> +{{ .Page.Store.Set "hasMermaid" true }} diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/_default/_markup/render-heading.html b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/_default/_markup/render-heading.html new file mode 100644 index 000000000..e1b29119f --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/_default/_markup/render-heading.html @@ -0,0 +1,5 @@ +<h{{ .Level }} id="{{ .Anchor | safeURL }}">{{ .Text | safeHTML }} +{{- if in (slice 2 3 4 6) .Level }}{{" " -}} +<a class="header-link" href="#{{ .Anchor | safeURL }}"><svg class="fill-current o-60 hover-accent-color-light" height="22px" viewBox="0 0 24 24" width="22px" xmlns="http://www.w3.org/2000/svg"><path d="M0 0h24v24H0z" fill="none"/><path d="M3.9 12c0-1.71 1.39-3.1 3.1-3.1h4V7H7c-2.76 0-5 2.24-5 5s2.24 5 5 5h4v-1.9H7c-1.71 0-3.1-1.39-3.1-3.1zM8 13h8v-2H8v2zm9-6h-4v1.9h4c1.71 0 3.1 1.39 3.1 3.1s-1.39 3.1-3.1 3.1h-4V17h4c2.76 0 5-2.24 5-5s-2.24-5-5-5z"/></svg></a> +{{- end -}} +</h{{ .Level }}> diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/_default/_markup/render-link.html b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/_default/_markup/render-link.html new file mode 100644 index 000000000..5583d53d7 --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/_default/_markup/render-link.html @@ -0,0 +1,250 @@ +{{- /* Last modified: 2023-09-04T09:23:04-07:00 */}} + +{{- /* +Copyright 2023 Veriphor LLC + +Licensed under the Apache License, Version 2.0 (the "License"); you may not +use this file except in compliance with the License. You may obtain a copy of +the License at + +https://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +License for the specific language governing permissions and limitations under +the License. +*/}} + +{{- /* +This render hook resolves internal destinations by looking for a matching: + + 1. Content page + 2. Page resource (a file in the current page bundle) + 3. Section resource (a file in the current section) + 4. Global resource (a file in the assets directory) + +It skips the section resource lookup if the current page is a leaf bundle. + +External destinations are not modified. + +You must place global resources in the assets directory. If you have placed +your resources in the static directory, and you are unable or unwilling to move +them, you must mount the static directory to the assets directory by including +both of these entries in your site configuration: + + [[module.mounts]] + source = 'assets' + target = 'assets' + + [[module.mounts]] + source = 'static' + target = 'assets' + +By default, if this render hook is unable to resolve a destination, including a +fragment if present, it passes the destination through without modification. To +emit a warning or error, set the error level in your site configuration: + + [params.render_hooks.link] + errorLevel = 'warning' # ignore (default), warning, or error (fails the build) + +When you set the error level to warning, and you are in a development +environment, you can visually highlight broken internal links: + + [params.render_hooks.link] + errorLevel = 'warning' # ignore (default), warning, or error (fails the build) + highlightBroken = true # true or false (default) + +This will add a "broken" class to anchor elements with invalid src attributes. +Add a rule to your CSS targeting the broken links: + + a.broken { + background: #ff0; + border: 2px solid #f00; + padding: 0.1em 0.2em; + } + +This render hook may be unable to resolve destinations created with the ref and +relref shortcodes. Unless you set the error level to ignore you should not use +either of these shortcodes in conjunction with this render hook. + +@context {string} Destination The link destination. +@context {page} Page A reference to the page containing the link. +@context {string} PlainText The link description as plain text. +@context {string} Text The link description. +@context {string} Title The link title. + +@returns {template.html} +*/}} + +{{- /* Initialize. */}} +{{- $renderHookName := "link" }} + +{{- /* Verify minimum required version. */}} +{{- $minHugoVersion := "0.120.0" }} +{{- if lt hugo.Version $minHugoVersion }} + {{- errorf "The %q render hook requires Hugo v%s or later." $renderHookName $minHugoVersion }} +{{- end }} + +{{- /* Error level when unable to resolve destination: ignore, warning, or error. */}} +{{- $errorLevel := or site.Params.render_hooks.link.errorLevel "ignore" | lower }} + +{{- /* If true, adds "broken" class to broken links. Applicable in development environment when errorLevel is warning. */}} +{{- $highlightBrokenLinks := or site.Params.render_hooks.link.highlightBroken false }} + +{{- /* Validate error level. */}} +{{- if not (in (slice "ignore" "warning" "error") $errorLevel) }} + {{- errorf "The %q render hook is misconfigured. The errorLevel %q is invalid. Please check your site configuration." $renderHookName $errorLevel }} +{{- end }} + +{{- /* Determine content path for warning and error messages. */}} +{{- $contentPath := "" }} +{{- with .Page.File }} + {{- $contentPath = .Path }} +{{- else }} + {{- $contentPath = .Path }} +{{- end }} + +{{- /* Parse destination. */}} +{{- $u := urls.Parse .Destination }} + +{{- /* Set common message. */}} +{{- $msg := printf "The %q render hook was unable to resolve the destination %q in %s" $renderHookName $u.String $contentPath }} + +{{- /* Set attributes for anchor element. */}} +{{- $attrs := dict "href" $u.String }} +{{- if $u.IsAbs }} + {{- /* Destination is a remote resource. */}} + {{- $attrs = merge $attrs (dict "rel" "external") }} +{{- else }} + {{- with $u.Path }} + {{- with $p := or ($.Page.GetPage .) ($.Page.GetPage (strings.TrimRight "/" .)) }} + {{- /* Destination is a page. */}} + {{- $href := .RelPermalink }} + {{- with $u.RawQuery }} + {{- $href = printf "%s?%s" $href . }} + {{- end }} + {{- with $u.Fragment }} + {{- $ctx := dict + "contentPath" $contentPath + "errorLevel" $errorLevel + "page" $p + "parsedURL" $u + "renderHookName" $renderHookName + }} + {{- partial "inline/h-rh-l/validate-fragment.html" $ctx }} + {{- $href = printf "%s#%s" $href . }} + {{- end }} + {{- $attrs = dict "href" $href }} + {{- else }} + {{- with $.Page.Resources.Get $u.Path }} + {{- /* Destination is a page resource; drop query and fragment. */}} + {{- $attrs = dict "href" .RelPermalink }} + {{- else }} + {{- with (and (ne $.Page.BundleType "leaf") ($.Page.CurrentSection.Resources.Get $u.Path)) }} + {{- /* Destination is a section resource, and current page is not a leaf bundle. */}} + {{- $attrs = dict "href" .RelPermalink }} + {{- else }} + {{- with resources.Get $u.Path }} + {{- /* Destination is a global resource; drop query and fragment. */}} + {{- $attrs = dict "href" .RelPermalink }} + {{- else }} + {{- if eq $errorLevel "warning" }} + {{- warnf $msg }} + {{- if and $highlightBrokenLinks hugo.IsDevelopment }} + {{- $attrs = merge $attrs (dict "class" "broken") }} + {{- end }} + {{- else if eq $errorLevel "error" }} + {{- errorf $msg }} + {{- end }} + {{- end }} + {{- end }} + {{- end }} + {{- end }} + {{- else }} + {{- with $u.Fragment }} + {{- /* Destination is on the same page; prepend relative permalink. */}} + {{- $ctx := dict + "contentPath" $contentPath + "errorLevel" $errorLevel + "page" $.Page + "parsedURL" $u + "renderHookName" $renderHookName + }} + {{- partial "inline/h-rh-l/validate-fragment.html" $ctx }} + {{- $attrs = dict "href" (printf "%s#%s" $.Page.RelPermalink .) }} + {{- else }} + {{- if eq $errorLevel "warning" }} + {{- warnf $msg }} + {{- if and $highlightBrokenLinks hugo.IsDevelopment }} + {{- $attrs = merge $attrs (dict "class" "broken") }} + {{- end }} + {{- else if eq $errorLevel "error" }} + {{- errorf $msg }} + {{- end }} + {{- end }} + {{- end }} +{{- end }} +{{- with .Title }} + {{- $attrs = merge $attrs (dict "title" .) }} +{{- end -}} + +{{- /* Render anchor element. */ -}} +<a + {{- range $k, $v := $attrs }} + {{- printf " %s=%q" $k $v | safeHTMLAttr }} + {{- end -}} +>{{ .Text | safeHTML }}</a> + +{{- define "partials/inline/h-rh-l/validate-fragment.html" }} + {{- /* + Validates the fragment portion of a link destination. + + @context {string} contentPath The page containing the link. + @context {string} errorLevel The error level when unable to resolve destination; ignore (default), warning, or error. + @context {page} page The page corresponding to the link destination + @context {struct} parsedURL The link destination parsed by urls.Parse. + @context {string} renderHookName The name of the render hook. + */}} + + {{- /* Initialize. */}} + {{- $contentPath := .contentPath }} + {{- $errorLevel := .errorLevel }} + {{- $p := .page }} + {{- $u := .parsedURL }} + {{- $renderHookName := .renderHookName }} + + {{- /* Validate. */}} + {{- with $u.Fragment }} + {{- if $p.Fragments.Identifiers.Contains . }} + {{- if gt ($p.Fragments.Identifiers.Count .) 1 }} + {{- $msg := printf "The %q render hook detected duplicate heading IDs %q in %s" $renderHookName . $contentPath }} + {{- if eq $errorLevel "warning" }} + {{- warnf $msg }} + {{- else if eq $errorLevel "error" }} + {{- errorf $msg }} + {{- end }} + {{- end }} + {{- else }} + {{- /* Determine target path for warning and error message. */}} + {{- $targetPath := "" }} + {{- with $p.File }} + {{- $targetPath = .Path }} + {{- else }} + {{- $targetPath = .Path }} + {{- end }} + {{- /* Set common message. */}} + {{- $msg := printf "The %q render hook was unable to find heading ID %q in %s. See %s" $renderHookName . $targetPath $contentPath }} + {{- if eq $targetPath $contentPath }} + {{- $msg = printf "The %q render hook was unable to find heading ID %q in %s" $renderHookName . $targetPath }} + {{- end }} + {{- /* Throw warning or error. */}} + {{- if eq $errorLevel "warning" }} + {{- warnf $msg }} + {{- else if eq $errorLevel "error" }} + {{- errorf $msg }} + {{- end }} + {{- end }} + {{- end }} + +{{- end -}} diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/_default/baseof.html b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/_default/baseof.html new file mode 100644 index 000000000..63b5b10f5 --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/_default/baseof.html @@ -0,0 +1,123 @@ +<!DOCTYPE html> +<html + class="no-js" + lang="{{ with $.Site.LanguageCode }} + {{ . }} + {{ else }} + en-us + {{ end }} + "> + <head> + <meta charset="utf-8" /> + {{/* https://www.zachleat.com/web/preload/ */}} + <link + rel="preload" + href="{{ "fonts/muli-latin-200.woff2" | absURL }}" + as="font" + type="font/woff2" + crossorigin /> + <link + rel="preload" + href="{{ "fonts/muli-latin-400.woff2" | absURL }}" + as="font" + type="font/woff2" + crossorigin /> + <link + rel="preload" + href="{{ "fonts/muli-latin-800.woff2" | absURL }}" + as="font" + type="font/woff2" + crossorigin /> + + <meta http-equiv="X-UA-Compatible" content="IE=edge" /> + {{/* NOTE: the Site's title, and if there is a page title, that is set too */}} + <title> + {{ block "title" . }} + {{ with .Title }}{{ . }} | {{ end }}{{ .Site.Title }} + {{ end }} + + </title> + + <meta name="viewport" content="width=device-width,minimum-scale=1" /> + {{ hugo.Generator }} + + {{ if hugo.IsProduction }} + <meta name="robots" content="index, follow" /> + {{ else }} + <meta name="robots" content="noindex, nofollow" /> + {{ end }} + + {{ range .AlternativeOutputFormats -}} + <link + rel="{{ .Rel }}" + type="{{ .MediaType.Type }}" + href="{{ .Permalink | safeURL }}" /> + {{ end -}} + + {{ $isDev := eq hugo.Environment "development" }} + {{ $stylesheet := resources.Get "output/css/app.css" }} + {{ if not $isDev }} + {{ $stylesheet = $stylesheet | minify | fingerprint }} + {{ end }} + {{ with $stylesheet }} + {{ if $isDev }} + <link + rel="stylesheet" + href="{{ .RelPermalink }}" + crossorigin="anonymous" /> + {{ else }} + <link + rel="stylesheet" + href="{{ .RelPermalink }}" + integrity="{{ .Data.Integrity }}" + crossorigin="anonymous" /> + {{ end }} + {{ $.Scratch.Set "stylesheet" . }} + {{ end }} + + + <meta + name="description" + content="{{ with .Description }} + {{ . }} + {{ else }} + {{ with .Site.Params.description }}{{ . }}{{ end }} + {{ end }} + " /> + + {{ block "scripts" . }} + {{- partial "site-scripts.html" . -}} + {{ end }} + {{ partial "site-manifest.html" . }} + {{- partial "head-additions.html" . -}} + {{- partial "opengraph/opengraph.html" . -}} + {{- template "_internal/schema.html" . -}} + {{- partial "opengraph/twitter_cards.html" . -}} + + {{ if hugo.IsProduction }} + {{ partial "gtag.html" . }} + {{ end }} + + {{ if .Param "math" }} + {{ partialCached "math.html" . }} + {{ end }} + + </head> + + <body + class="ma0 sans-serif bg-primary-color-light{{ with getenv "HUGO_ENV" }} + {{ . }} + {{ end }}"> + {{ partial "hooks/after-body-start.html" . }} + {{ block "nav" . }}{{ partial "site-nav.html" . }}{{ end }} + {{ block "header" . }}{{ end }} + <main role="main" class="content-with-sidebar min-vh-100 pb7 pb0-ns"> + {{ block "main" . }}{{ end }} + </main> + + {{ block "footer" . }}{{ partialCached "site-footer.html" . }}{{ end }} + + {{ partial "hooks/before-body-end.html" . }} + + </body> +</html> diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/_default/documentation-home.html b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/_default/documentation-home.html new file mode 100644 index 000000000..91f744c30 --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/_default/documentation-home.html @@ -0,0 +1,4 @@ +{{ define "main" }} +{{ $section_to_display := (.Site.Taxonomies.categories.fundamentals).Pages | lang.Merge (.Sites.First.Taxonomies.categories.fundamentals).Pages }} + {{ partial "pagelayout.html" (dict "context" . "section_to_display" $section_to_display ) }} +{{ end }} diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/_default/list.html b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/_default/list.html new file mode 100644 index 000000000..3b7a2307e --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/_default/list.html @@ -0,0 +1,5 @@ +{{ define "main" }} + {{ $paginator := .Paginate (.Pages | lang.Merge (where .Sites.First.RegularPages "Section" .Section)) }} + {{ $section_to_display := .Sections | default $paginator.Pages }} + {{ partial "pagelayout.html" (dict "context" . "section_to_display" $section_to_display ) }} +{{ end }} diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/_default/page.html b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/_default/page.html new file mode 100644 index 000000000..108d32323 --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/_default/page.html @@ -0,0 +1,48 @@ +<header class="flex-none w-100"> + {{ if in (slice "functions" "methods") .Type }} + {{ with .FirstSection }} + <a href="{{ .RelPermalink }}" class="f6 fw8 mb0 link mid-gray dim mr3"> + {{ humanize .Title | upper }} + </a> + {{ end }} + {{ with .CurrentSection }} + <a href="{{ .RelPermalink }}" class="f6 fw8 mb0 link mid-gray dim mr3"> + {{ humanize .Title | upper }} + </a> + {{ end }} + {{ else }} + {{ range .Params.categories }} + <a href="{{ "/categories/" | relLangURL }}{{ . | urlize }}" class="f6 fw8 mb0 link mid-gray dim mr3"> + {{ humanize . | upper }} + </a> + {{ end }} + {{ end }} + <h1 class="lh-title mb3 mv0 pt3 primary-color-dark"> + {{ .Title }} + </h1> +</header> + +<aside class="bt bw1 pt3 mt2 mid-gray b--mid-gray fn w-100"> + {{ with .Params.description }} + <div class="mb4 f4 fw4 lh-copy"> + {{ . | markdownify }} + </div> + {{ end }} + + <!-- + NOTE: Removed to test builds without it. + partial "components/author-github-data" (dict "context" . "size" "110") --> +</aside> + +{{ with .Params.featured_image_path }} + <img src="{{ . }}" alt="Featured Image for {{ $.Title }}" class="mw-100"> +{{ end }} + +<div class="prose" id="prose"> + <div class="mb4"> + {{- partial "docs/functions-signatures.html" . -}} + {{- partial "docs/functions-return-type.html" . -}} + {{- partial "docs/functions-aliases.html" . -}} + </div> + {{ .Content }} +</div> diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/_default/single.html b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/_default/single.html new file mode 100644 index 000000000..092a69270 --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/_default/single.html @@ -0,0 +1,29 @@ +{{ define "main" }} + <article class="w-100 ph4 pb5 pb6-ns pt1 pt5-ns"> + <div class="flex-l"> + + <div class="order-0 w-20 dn db-l"> + {{ partial "nav-links-docs.html" . }} + </div> + <div class="order-1 flex-grow-1 ph0 ph5-ns mt0-ns mid-gray nested-copy-line-height no-underline nested-links nested-img nested-copy-seperator nested-blockquote"> + <div style="max-width: 40rem;" class="documentation-copy"> + <div id="readout" class="fixed right-0 bottom-0"></div> + {{ .Render "page" }} + {{ partial "related.html" . }} + </div> + </div> + <div id="right-sidebar" class="order-2 w-20 dn db-l sticky pt2"> + {{ partial "right-sidebar.html" . }} + </div> + + </div> + </article> + + <div id="page-footer" class="w-100 bg-light-gray"> + <div class="mw7 pa4 center nested-lh-copy lh-copy"> + {{ partial "docs/page-meta-data.html" . }} + {{ partial "page-edit.html" . }} + {{ partial "tags.html" . }} + </div> + </div> +{{ end }} diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/_default/taxonomy.html b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/_default/taxonomy.html new file mode 100644 index 000000000..77d1812d9 --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/_default/taxonomy.html @@ -0,0 +1,4 @@ +{{ define "main" }} + {{ $section_to_display := .Pages }} + {{ partial "pagelayout.html" (dict "context" . "section_to_display" $section_to_display ) }} +{{ end }} diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/_default/terms.html b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/_default/terms.html new file mode 100644 index 000000000..499eec598 --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/_default/terms.html @@ -0,0 +1,48 @@ +{{ define "main" }} +{{ $section_to_display := .Pages }} +<div class="w-100 ph4 pb5 pb6-ns pt1 pt3-ns"> + + <div class="flex"> + <div class="dn db-l w-20"> + {{ partial "nav-links-docs.html" . }} + </div> + + <div class="w-100 w-80-l ph0 ph4-l"> + <article class="w-100 nested-copy-line-height nested-links nested-img"> + <h1 class="primary-color-dark f2"> + {{ .Title }} + </h1> + </article> + <div class="pa3 pa4-ns w-100 v-top column-count-3-l column-gap-1-l"> + {{ range $key, $value := .Data.Terms }} + <div class="break-inside-avoid-l nested-copy-line-height mb5"> + <h2 class="f3"> + <a href="{{ "/" | relLangURL }}{{ $.Data.Plural | urlize }}/{{ $key | urlize }}" class="link black hover-blue"> + {{ $key }} <span class="f6 gray"> ↗</span> + </a> + </h2> + {{ range $value.Pages }} + <h3> + <a href="{{ .Permalink }}" class="link blue"> + {{ .Title }} + </a> + </h3> + {{ end }} + </div> + + {{ end }} + + </div> + + + + + </div> + + </div> + + + + +</div> +{{ end }} diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/index.headers b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/index.headers new file mode 100644 index 000000000..1216e42d4 --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/index.headers @@ -0,0 +1,5 @@ +/* + X-Frame-Options: DENY + X-XSS-Protection: 1; mode=block + X-Content-Type-Options: nosniff + Referrer-Policy: origin-when-cross-origin diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/index.html b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/index.html new file mode 100644 index 000000000..3df97ae42 --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/index.html @@ -0,0 +1,27 @@ +{{ define "header" }} + {{ partial "hero.html" . }} + {{ partial "boxes-small-news.html" . }} +{{ end }} + +{{ define "main" }} + <section class="w-100 ph4 ph5-ns pv4"> + {{- partial "home-page-sections/features-icons.html" . -}} + </section> + + {{ partial "home-page-sections/sponsors.html" (dict "cx" . "gtag" "home" ) }} + + {{- partial "home-page-sections/features-single.html" . -}} + + {{- partial "home-page-sections/showcase.html" . -}} + + <section class="w-100 ph4 ph5-ns pv4 pv6-ns mid-gray bg-white bb bt b--light-gray"> + {{- partial "home-page-sections/installation.html" . -}} + </section> + + <section class="w-100 ph4 ph5-ns pv4 pv6-ns mid-gray bg-accent-color-dark"> + {{- partial "home-page-sections/tweets.html" . -}} + </section> + <section class="w-100 ph4 ph5-ns pt4 pb5 mid-gray bg-primary-color-light bb bt b--light-gray "> + {{- partial "home-page-sections/open-source-involvement.html" . -}} + </section> +{{ end }} diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/index.redir b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/index.redir new file mode 100644 index 000000000..2dfd2bc0f --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/index.redir @@ -0,0 +1,6 @@ +# Netlify redirects. See https://www.netlify.com/docs/redirects/ +{{ range $p := .Site.Pages -}} +{{ range .Aliases }} +{{ . | printf "%-35s" }} {{ $p.RelPermalink -}} +{{ end -}} +{{- end -}} diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/index.rss.xml b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/index.rss.xml new file mode 100644 index 000000000..1d3498a1e --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/index.rss.xml @@ -0,0 +1,38 @@ +<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"> + <channel> + <title>{{ .Site.Title }} – {{ .Title }}</title> + <link>{{ .Permalink }}</link> + <description>Recent Hugo news from gohugo.io</description> + <generator>Hugo -- gohugo.io</generator>{{ with .Site.LanguageCode }} + <language>{{.}}</language>{{end}}{{ with .Site.Author.email }} + <managingEditor>{{.}}{{ with $.Site.Author.name }} ({{.}}){{end}}</managingEditor>{{end}}{{ with .Site.Author.email }} + <webMaster>{{.}}{{ with $.Site.Author.name }} ({{.}}){{end}}</webMaster>{{end}}{{ with .Site.Copyright }} + <copyright>{{.}}</copyright>{{end}}{{ if not .Date.IsZero }} + <lastBuildDate>{{ .Date.Format "Mon, 02 Jan 2006 15:04:05 -0700" | safeHTML }}</lastBuildDate>{{ end }} + <image> + <url>{{ "img/hugo.png" | absURL }}</url> + <title>GoHugo.io</title> + <link>{{ .Permalink }}</link> + </image> + {{ with .OutputFormats.Get "RSS" }} + {{ printf "<atom:link href=%q rel=\"self\" type=%q />" .Permalink .MediaType | safeHTML }} + {{ end }} + {{ range first 50 (where .Site.RegularPages "Type" "in" (slice "news" "showcase")) }} + <item> + <title>{{ .Section | title }}: {{ .Title }}</title> + <link>{{ .Permalink }}</link> + <pubDate>{{ .Date.Format "Mon, 02 Jan 2006 15:04:05 -0700" | safeHTML }}</pubDate> + {{ with .Site.Author.email }}<author>{{.}}{{ with $.Site.Author.name }} ({{.}}){{end}}</author>{{end}} + <guid>{{ .Permalink }}</guid> + <description> + {{ $img := (.Resources.ByType "image").GetMatch "*featured*" }} + {{ with $img }} + {{ $img := .Resize "640x" }} + {{ printf "<![CDATA[<img src=\"%s\" width=\"%d\" height=\"%d\"/>]]>" $img.Permalink $img.Width $img.Height | safeHTML }} + {{ end }} + {{ .Content | html }} + </description> + </item> + {{ end }} + </channel> +</rss>
\ No newline at end of file diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/maintenance/list.html b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/maintenance/list.html new file mode 100644 index 000000000..f78bbd08f --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/maintenance/list.html @@ -0,0 +1,78 @@ +{{ define "main" }} + <div class="w-100 ph4 pb5 pb6-ns pt1 mt4 pt3-ns"> + <div class="flex-l"> + <div class="order-2 w-100 w-20-l ph5-m ph0-l mb4 sticky"> + <aside + class="fixed-lTK mw5-l right-0 f6 bl-l b--moon-gray pv4 pv0-ns ph4-l nested-list-reset nested-links nested-copy-line-height"> + <p class="b">What's on this Page</p> + <ul> + <li><a href="#last-updated">Last Updated</a></li> + <li> + <a href="#least-recently-updated">Least Recently Updated</a> + </li> + <li><a href="#todos">Pages marked with TODO</a></li> + <li> + <a href="#dependencies">Project dependencies (Hugo Modules)</a> + </li> + </ul> + </aside> + </div> + <div class="w-100"> + {{ $byLastMod := .Site.RegularPages.ByLastmod }} + {{ $recent := ($byLastMod | last 30).Reverse }} + {{ $leastRecent := $byLastMod | first 10 }} + <h2 id="last-updated">Last Updated</h2> + {{ partial "maintenance-pages-table.html" $recent }} + <h2 id="least-recently-updated">Least Recently Updated</h2> + {{ partial "maintenance-pages-table.html" $leastRecent }} + + {{/* Don't think this is possible with where directly. Should investigate. */}} + {{ .Scratch.Set "todos" slice }} + {{ range .Site.RegularPages }} + {{ if .HasShortcode "todo" }} + {{ $.Scratch.Add "todos" . }} + {{ end }} + {{ end }} + <h2 id="todos">Pages marked with TODO</h2> + {{ partial "maintenance-pages-table.html" (.Scratch.Get "todos") }} + + + <h2 id="dependencies">Dependencies</h2> + <table class="collapse ba br2 b--black-10 pv2 ph3"> + <thead> + <tr> + <th class="pv2 ph3 tl f6 fw6 ttu">#</th> + <th class="pv2 ph3 tl f6 fw6 ttu">Owner</th> + <th class="pv2 ph3 tl f6 fw6 ttu">Path</th> + <th class="pv2 ph3 tl f6 fw6 ttu">Version</th> + <th class="pv2 ph3 tl f6 fw6 ttu">Time</th> + <th class="pv2 ph3 tl f6 fw6 ttu">Vendor</th> + </tr> + </thead> + <tbody> + {{ range $index, $element := hugo.Deps }} + <tr class="striped--light-gray"> + <th class="pv2 ph3">{{ add $index 1 }}</th> + <td class="pv2 ph3"> + {{ with $element.Owner }}{{ .Path }}{{ end }} + </td> + <td class="pv2 ph3"> + {{ $element.Path }} + {{ with $element.Replace }} + => + {{ .Path }} + {{ end }} + </td> + <td class="pv2 ph3">{{ $element.Version }}</td> + <td class="pv2 ph3"> + {{ with $element.Time }}{{ . }}{{ end }} + </td> + <td class="pv2 ph3">{{ $element.Vendor }}</td> + </tr> + {{ end }} + </tbody> + </table> + </div> + </div> + </div> +{{ end }} diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/news/list.html b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/news/list.html new file mode 100644 index 000000000..5165c8a13 --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/news/list.html @@ -0,0 +1,70 @@ +{{ define "main" }} +<div class="w-100 ph4 ph5-ns pb5 pb6-ns pt1 pt3-ns "> + + <article class="cf pa3 pa4-m pa4-l nested-copy-line-height nested-img"> + <h1 class="primary-color-dark"> + {{ .Title }} + </h1> + <div class="nested-copy-line-height"> + {{ .Content }} + </div> + </article> + + <div class="flex flex-wrap"> + {{ $interior_classes := $.Site.Params.flex_box_interior_classes }} + <section class="flex-ns flex-wrap justify-between w-100 w-80-nsTK v-top"> + + {{ $news_items := slice }} + + {{/* Get releases from GitHub. */}} + {{ $u := "https://api.github.com/repos/gohugoio/hugo/releases" }} + {{ $releases := partial "inline/get-remote-data.html" $u }} + {{ $releases = where $releases "draft" false }} + {{ $releases = where $releases "prerelease" false }} + {{ range $releases | first 20 }} + {{ $ctx := dict + "Date" (.published_at | time.AsTime) + "Title" (printf "Release %s" .name) + "Permalink" .html_url + "Section" "news" + "Summary" "" + }} + {{ $news_items = $news_items | append $ctx }} + {{ end }} + + {{/* Get content pages from news section. */}} + {{ range .Pages }} + {{ $ctx := dict + "Date" .Date + "Title" .Title + "RelPermalink" .RelPermalink + "Section" "news" + "Summary" .Summary + "Params" (dict "description" .Description) + }} + {{ $news_items = $news_items | append $ctx }} + {{ end }} + + {{/* Sort by date (descending) and render. */}} + {{ range sort $news_items "Date" "desc" }} + {{ partial "boxes-section-summaries.html" (dict "context" . "classes" $interior_classes "fullcontent" false) }} + {{ end }} + + </section> + </div> + +</div> +{{ end }} + +{{ define "partials/inline/get-remote-data.html" }} + {{ $u := . }} + {{ $r := "" }} + {{ with $r = resources.GetRemote $u }} + {{ with .Err }} + {{ errorf "%s" . }} + {{ end }} + {{ else }} + {{ errorf "Unable to get remote resource %q" $u }} + {{ end }} + {{ return ($r | transform.Unmarshal) }} +{{ end }} diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/news/single.html b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/news/single.html new file mode 100644 index 000000000..eb34bedd7 --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/news/single.html @@ -0,0 +1,85 @@ +{{ define "main" }} + {{ $currentPageUrl := .RelPermalink }} + + <article class="cf ph4 pv3 pv5-ns"> + <!-- header spans the full width --> + <header class="flex-none w-100 pb3"> + {{ if .Params.categories }} + {{ range .Params.categories }} + <a href="{{ "/categories/" | relLangURL }}{{ . | urlize }}" class="f6 fw8 mb0 link mid-gray dim mr3"> + {{ humanize . | upper }} + </a> + {{ end }} + {{end}} + + <h1 class="lh-title fw9 mb7 mv0 pt3"> + <a href="{{ .RelPermalink }}" class="link primary-color dim"> + {{ .Title }} + </a> + </h1> + </header> + + <div class="flex-l"> + <aside class="mid-gray fn w-100 w-25-l"> + {{ with .Params.description }} + <h2 class="f3 lh-title"> + {{ . | markdownify }} + </h2> + {{ end }} + <time class="f6 mt2 db ttu tracked" datetime="{{ .Date.Format "2006-01-02T15:04:05Z07:00" }}"> + {{ .Date.Format "January 2, 2006" }} + </time> + {{ if in .Params.categories "Releases" }} + <p> + Go to <a href="https://github.com/gohugoio/hugo/releases" class="link primary-color dim">Hugo Releases</a> for the release downloads. + </p> + {{ end }} + + <div class="nested-links mt4"> + {{- partial "previous-next-links-in-section.html" . -}} + </div> + + </aside> + + <div class="fn pl5-l pt3 mid-gray w-100 w-two-third-l sans-serif nested-copy-line-height no-underline nested-links nested-img nested-copy-seperator nested-blockquote measure-wide-l"><!-- TODO: Can the content top and the description top line up more precisely, or is just winging it with padding the best we've got? --> + {{ with .Params.featured_image_path }} + <img src="{{ . }}" alt="Featured Image for {{ $.Title }}" class="mw-100"> + {{ else }} + {{ $featured := (.Resources.ByType "image").GetMatch "*featured*" }} + {{ with $featured }} + {{ $featured := .Resize "480x" }} + <img src="{{ $featured.RelPermalink }}" alt="Featured Image for {{ $.Title }}" class="mw-100"> + {{ end }} + {{ end }} + {{ .Content }} + </div> + </div> + {{ if and .Params.tags .Site.Taxonomies.tags }} + <div class="mt5 f6 gray nested-lh-copy bg-light-gray ph3 pv2 measure-wide-l"> + {{ $name := index .Params.tags 0 }} + {{ $name := $name | urlize }} + {{ $tags := index .Site.Taxonomies.tags $name }} + + <ul class="list dib nested-links ml0 pl0"> + <li class="dib mb2 mr2">Related:</li> + {{ range $tags.Pages }} + {{ if ne .RelPermalink $currentPageUrl }} + <li class="mb2 mr3"> + <a href="{{ .RelPermalink }}" class="link"> + {{ .LinkTitle }} + </a> + </li> + {{ end }} + {{end}} + </ul> + </div> + {{end}} + + <div class="gray f6 mv6"> + Last Update: {{ .Lastmod.Format "January 2, 2006" }} <br> + {{ partial "page-edit.html" . }} + </div> + + </article> + +{{ end }} diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/boxes-section-summaries.html b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/boxes-section-summaries.html new file mode 100644 index 000000000..b293dc17d --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/boxes-section-summaries.html @@ -0,0 +1,46 @@ +<div class="relative {{ .classes }} weight-{{ .context.Weight }}"> + <div class="bg-white mb2 pa3 pa4-l gray"> + + {{ $href := .context.RelPermalink }} + {{ if eq .context.Section "news" }} + {{ $href = .context.Permalink }} + <time class="f6 db" datetime="{{ .context.Date.Format `2006-01-02T15:04:05Z07:00` }}"> + {{ .context.Date.Format "January 2, 2006" }} + </time> + {{ end }} + + <h1 class="near-black f3"> + <a href="{{ $href }}" class="link primary-color dim"> + {{ .context.Title }} + </a> + </h1> + <div class="lh-copy links"> + {{ if eq .context.Section "commands" }} + {{ replaceRE `(?s).*?##\s.*?\n\n(.*?)\n.*` "$1" .context.RawContent }} + {{ else }} + + {{ if in (slice "functions" "methods") .context.Type }} + {{ with $signature := index .context.Params.action.signatures 0 }} + {{ if $.context.Params.action.returnType }} + {{ $signature = printf "%s ⟼ %s" $signature $.context.Params.action.returnType }} + {{ end }} + <pre class="f6 mb3 ph3 pv2 bg-light-gray overflow-x-auto"> + {{- $signature -}} + </pre> + {{ end }} + {{ end }} + + {{ if .context.Params.description }} + {{ .context.Params.description | markdownify }} + {{ else }} + {{ .context.Summary }} + {{ end }} + + {{ end }} + <a href="{{ $href }}" class="f6 mt2 db link primary-color dim"> + Read More » + </a> + </div> + + </div> +</div> diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/boxes-small-news.html b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/boxes-small-news.html new file mode 100644 index 000000000..0d53c5465 --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/boxes-small-news.html @@ -0,0 +1 @@ +{{/* Empty for now. */}} diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/components/author-github-data-card.html b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/components/author-github-data-card.html new file mode 100644 index 000000000..622df7953 --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/components/author-github-data-card.html @@ -0,0 +1,33 @@ +{{ $author := .context.Params.author }} +{{ if $author }} + <aside class="mw5 center bg-white br3 pa3 pa4-ns mv3 ba b--black-10 nested-links"> + {{ $urlPre := "https://api.github.com" }} + {{ $user_json := getJSON $urlPre "/users/" $author }} + + <div class="tc"> + + {{ if $user_json.avatar_url }} + <a href="{{ $user_json.html_url }}" class="link hover-bg-light-gray pa1 br-100"> + <img src="{{ $user_json.avatar_url }}&size={{ .size }}" alt="" class="br-100 ba b--light-gray"> + </a> + {{ end }} + + {{ if $user_json.name }} + <h3 class="f4"> + <a href="{{ $user_json.html_url }}" class="link dim"> + {{ $user_json.name }} + </a> + </h3> + <hr class="mw3 bb bw1 b--black-10"> + {{ end }} + + {{ if $user_json.bio }} + <p class="lh-copy measure center f6 black-70"> + {{ $user_json.bio }} + </p> + {{ end }} + + </div> + + </aside> +{{ end }} diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/components/author-github-data.html b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/components/author-github-data.html new file mode 100644 index 000000000..25baea80a --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/components/author-github-data.html @@ -0,0 +1,21 @@ +{{ $author := .context.Params.author }} +{{ if $author }} + <aside class="mw5 br3 mv3 nested-links"> + {{ $urlPre := "https://api.github.com" }} + {{ $user_json := getJSON $urlPre "/users/" $author }} + {{ if $user_json.name }} + <h3 class="f4 dib"> + {{ $user_json.name | htmlEscape }} + </h3> + + {{ end }} + {{ if $user_json.bio }} + <p class="lh-copy measure center mt0 f6 black-60"> + {{ $user_json.bio | htmlEscape }} + </p> + {{ end }} + <a href="{{ $user_json.html_url }}" class="link dim v-mid dib"> + {{ partial "svg/github-squared.svg" (dict "fill" "gray" "width" "16" "height" "18") }} + </a> + </aside> +{{ end }} diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/docs/functions-aliases.html b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/docs/functions-aliases.html new file mode 100644 index 000000000..3db9db4dc --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/docs/functions-aliases.html @@ -0,0 +1,12 @@ +{{- with .Params.action.aliases }} + {{- $label := "Alias" }} + {{- if gt (len .) 1 }} + {{- $label = "Aliases" }} + {{- end }} + <p class="fw7 primary-color-dark">{{ $label }}</p> + {{- range . }} + <pre class="f5 ph3 pv2 bg-light-gray" style="border-left:4px solid #0594CB;"> + {{- . -}} + </pre> + {{- end }} +{{- end -}} diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/docs/functions-return-type.html b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/docs/functions-return-type.html new file mode 100644 index 000000000..5b01bb560 --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/docs/functions-return-type.html @@ -0,0 +1,6 @@ +{{- with .Params.action.returnType }} + <p class="fw7 primary-color-dark">Returns</p> + <pre class="f5 ph3 pv2 bg-light-gray" style="border-left:4px solid #0594CB;"> + {{- . -}} + </pre> +{{- end -}} diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/docs/functions-signatures.html b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/docs/functions-signatures.html new file mode 100644 index 000000000..dce160227 --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/docs/functions-signatures.html @@ -0,0 +1,12 @@ +{{- with .Params.action.signatures }} + <p class="fw7 primary-color-dark">Syntax</p> + {{- range . }} + {{- $signature := . }} + {{- if $.Params.function.returnType }} + {{- $signature = printf "%s ⟼ %s" . $.Params.function.returnType }} + {{- end }} + <pre class="f5 ph3 pv2 bg-light-gray overflow-x-auto" style="border-left:4px solid #0594CB;"> + {{- $signature -}} + </pre> + {{- end }} +{{- end -}} diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/docs/page-meta-data.html b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/docs/page-meta-data.html new file mode 100644 index 000000000..dc8ddd01e --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/docs/page-meta-data.html @@ -0,0 +1,3 @@ +<h6 class="f6 dark-gray mb2"> + Last updated: {{ .Lastmod.Format "January 2, 2006" }}{{ with .GitInfo }}: <a class="hide-child link primary-color" href="{{$.Site.Params.ghrepo}}commit/{{ .Hash }}">{{ .Subject }} ({{ .AbbreviatedHash }})</a>{{end }} +</h6> diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/entry-summary.html b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/entry-summary.html new file mode 100644 index 000000000..d9cd9c68f --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/entry-summary.html @@ -0,0 +1,13 @@ +<div class="relative w-100 mb4 bg-white nested-copy-line-height"> + <div class="bg-white mb3 pa4 gray overflow-hidden"> + <span class="f6 db">{{ humanize .Section }}</span> + <h1 class="f3 near-black"> + <a href="{{ .RelPermalink }}" class="link black dim"> + {{ .Title }} + </a> + </h1> + <div class="nested-links f5 lh-copy nested-copy-line-height"> + {{ .Summary }} + </div> + </div> +</div> diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/gtag.html b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/gtag.html new file mode 100644 index 000000000..7c6a9ade5 --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/gtag.html @@ -0,0 +1,25 @@ +{{ with site.Config.Services.GoogleAnalytics.ID }} +<script async src="https://www.googletagmanager.com/gtag/js?id={{ . }}"></script> +<script> + window.dataLayer = window.dataLayer || []; + function gtag(){dataLayer.push(arguments);} + gtag('js', new Date()); + + {{ $site := $.Site.BaseURL | replaceRE "^https?://(www\\.)?([^/]+).*" "$2" }} + gtag('config', '{{ . }}', {'anonymize_ip': true, 'dimension1': '{{ $site }}', 'dimension2': '{{ getenv "BRANCH" }}'}); + +/** +* Function that tracks a click on an outbound link in Analytics. +* Setting the transport method to 'beacon' lets the hit be sent +* using 'navigator.sendBeacon' in browser that support it. +*/ +var trackOutboundLink = function(id, url) { + gtag('event', 'click', { + 'event_category': 'outbound', + 'event_label': id, + 'transport_type': 'beacon' + }); +} + +</script> +{{ end }} diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/head-additions.html b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/head-additions.html new file mode 100644 index 000000000..af615ee7c --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/head-additions.html @@ -0,0 +1 @@ +<!-- EMPTY -->
\ No newline at end of file diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/hero.html b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/hero.html new file mode 100644 index 000000000..9e7240433 --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/hero.html @@ -0,0 +1,18 @@ +<header class="bg-primary-color-dark ph4 tc" role="banner"> + <section class="center pb4 pb5-l ph4-l pt3 pt5-ns w-90 w-60-l"> + <div class="center w-100 w-50-ns"> + <img src="/images/hugo-logo-wide.svg" alt="Hugo Logo"> + </div> + {{ with .Site.Params.description }} + <h2 class="f3 f1-l fw4 white-90 m0 lh-title pt2 pb3 pv0-ns"> + {{ . }} + </h2> + {{ end }} + <div class="lh-copy f4 w-90-ns center fw2 silver tc tc-ns"> + {{ .Content }} + </div> + <div class="w4 mv4 center"> + <a class="f5 db link grow tc v-mid bg-blue white ba b--blue ph3 pv2 br1" href="/getting-started/quick-start/">Quick Start</a> + </div> + </section> +</header> diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/home-page-sections/features-icons.html b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/home-page-sections/features-icons.html new file mode 100644 index 000000000..a7733acdc --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/home-page-sections/features-icons.html @@ -0,0 +1,34 @@ +<div class="w-90-l center"> + {{ if .Params.features }} + <div class=" flex-ns flex-wrap justify-center center mw9"> + {{ $features := .Params.features }} + {{ range $i, $e := $features }} + {{ $features_count := $e | len }} + + <div class="w-100{{ if and (eq $i $features_count) (ne (modBool $features_count 2) true) }} w-70-ns {{ else }} w-50-ns {{ end }}ph5-l pv5-l nested-copy-line-height"> + <!-- NOTE: "if eq $i $features_count" makes the last item a bit wider for balance. If we use an even number of items, we'll want to remove this --> + <div class="flex-l flex-wrap justify-between"> + <div class="flex-auto w-100 w-20-ns pt1 "> + {{ with .image_path }} + <img src="{{ . }}" alt="icon depicting {{ $e.heading }}" class="h3 o-80 v-mid center w-100"> + {{ end }} + </div> + + <div class="flex-auto tc tl-ns w-100 w-80-ns"> + <h3 class="lh-title gray o-80 f4 f5-ns mb2 fw8 bmt1 mt0-l"> + {{ .heading }} + </h3> + <div class="db v-mid w-100 gray measure-wide mb5 mb0-l"> + <p class="f3 primary-color mt0 mb2">{{.tagline}}</p> + <div class="lh-copy"> + {{ .copy }} + </div> + </div> + </div> + </div> + + </div> + {{ end }} + </div> + {{ end }} +</div> diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/home-page-sections/features-single.html b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/home-page-sections/features-single.html new file mode 100644 index 000000000..f36b3d674 --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/home-page-sections/features-single.html @@ -0,0 +1,32 @@ +{{ if .Params.sections }} + {{ range .Params.sections }} + {{ $.Scratch.Add "i" 1 }}{{ $i := $.Scratch.Get "i" }} + + <section class="w-100 ph4 ph5-ns pv4 pv6-ns mid-gray {{ .color_classes }}"> + <div class="flex-ns flex-wrap center mw9"> + + <div class="w-100 w-50-l {{ if modBool $i 2 }}order-1{{ else }}order-0{{ end }}"> + <div class="w-90-ns center"> + <img src="{{ .image }}" alt="image depicting an example of {{ .heading }}" class="img shadow-5"> + </div> + </div> + + <div class="w-100 w-50-l"> + <div class="w-80-ns center tc"> + <h3 class="f1 fw4 black ma0 pt4 lh-title pt0-l">{{ .heading }}</h3> + <p class="f3 lh-copy"> + {{ .copy }} + </p> + <p class="f4 lh-copy nested-linksTK"> + <a href="{{ .link | absURL }}" class="link black dim"> + {{ .cta }} {{ partial "svg/link-ext.svg" (dict "fill" "#333" "size" "14") }} + </a> + </p> + </div> + </div> + + </div> + </section> + + {{ end }} +{{ end }} diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/home-page-sections/installation.html b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/home-page-sections/installation.html new file mode 100644 index 000000000..cf2989ddb --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/home-page-sections/installation.html @@ -0,0 +1,38 @@ + <div class="flex-ns flex-wrap center mw9"> + <!-- LEFT --> + + <div class="w-100 w-50-ns"> + <div class="w-80 center tc nested-copy-line-height"> + <h3 class="f2 black">Install in seconds, build in milliseconds.</h3> + <p class="f3">Hugo works on macOS, Windows, Linux, FreeBSD, and others.</p> + <p class="f3">Host on any server or your favorite CDN.</p> + </div> + </div> + + <!-- RIGHT --> + <div class="w-100 w-50-ns tc"> + <div class="h4"> + <img src="/images/gopher-hero.svg" alt="Hugo Gopher" class="h4"> + </div> + <p class="f6 mid-gray m0 p0 pt3">macOS</p> + <div class="code f6 bg-black light-green lh-copy pv3 ph3 br2 w-100 w-50-ns center mb2 tl"> + $ brew install hugo <br /> + </div> + <p class="f6 mid-gray">Windows</p> + <div class="code f6 bg-black light-green lh-copy pv3 ph3 br2 w-100 w-50-ns center tl"> + $ choco install hugo-extended<br /> + </div> + <p class="f6 mid-gray">Linux</p> + <div class="code f6 bg-black light-green lh-copy pv3 ph3 br2 w-100 w-50-ns center tl"> + $ sudo snap install hugo<br /> + </div> + + + <p class="f5 nested-links"><a href="{{ "getting-started/installing/" | absURL }}" class="link">See the Getting Started Guide for other methods. {{ partial "svg/link-ext.svg" (dict "fill" "#333" "size" "14") }}</a></p> + </div> + + <!-- TODO: the install section should have a tab menu for selecting the preferred installation method, i.e. the binaries from GitHub or the commands for the installation via a package manager https://github.com/rdwatters/hugo-docs-concept/issues/3#issuecomment-287498412 --> + + <!-- TODO: Animate the gopher https://github.com/rdwatters/hugo-docs-concept/issues/3#issuecomment-287194777 --> + + </div> diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/home-page-sections/open-source-involvement.html b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/home-page-sections/open-source-involvement.html new file mode 100644 index 000000000..5300fb7a8 --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/home-page-sections/open-source-involvement.html @@ -0,0 +1,59 @@ +<div class="w-100 center pt5"> + <div class="w-100 w-40-l tc center"> + <img src="/images/GitHub-Mark-64px.png" alt="Github Logo" class="tc center"> + </div> +</div> + +<div class="flex-ns flex-wrap center pb4 center mw9"> + <!-- LEFT --> + <div class="w-100 tc w-third-l"> + <h3 class="f3 mv3 accent-color-light">We welcome all contributions</h3> + <ul class="list ma0 pa0"> + <li class="mb3 f4"> + + <a href="https://github.com/gohugoio/hugo/blob/master/CONTRIBUTING.md" class="link mid-gray dim"> + Fork the repo and work on an issue {{ partial "svg/link-ext.svg" (dict "fill" "#333" "size" "14") }} + </a> + </li> + <li class="mb3 f4"> + <a href="https://themes.gohugo.io/" class="link mid-gray dim"> + Design a theme {{ partial "svg/link-ext.svg" (dict "fill" "#333" "size" "14") }} + </a> + </li> + </ul> + + </div> + + + <div class="w-100 w-third-l tc"> + <div class="w-60-l center"> + + <p class="f4">Hugo is open-source and completely free.</p> + <p class="f4">Our hundreds of contributors make Hugo great.</p> + </div> + </div> + + + <div class="w-100 tc w-third-l"> + <h3 class="f3 mv3 accent-color-light">More ways to contribute</h3> + <ul class="list ma0 pa0"> + <li class="mb3 f4"> + <a href="https://gohugo.io/overview/introduction/" class="link mid-gray dim"> + Help improve the docs {{ partial "svg/link-ext.svg" (dict "fill" "#333" "size" "14") }} + </a> + </li> + + <li class="mb3 f4"> + + <a href="https://discourse.gohugo.io/" class="link mid-gray dim"> + Help others in the forums {{ partial "svg/link-ext.svg" (dict "fill" "#333" "size" "14") }} + </a> + </li> + </ul> + </div> + + + <!-- RIGHT --> + + +</div> diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/home-page-sections/showcase.html b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/home-page-sections/showcase.html new file mode 100644 index 000000000..c73cfa5e9 --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/home-page-sections/showcase.html @@ -0,0 +1,44 @@ +<section class="bg-near-white mid-gray pb5 ph4 ph5-ns pt4 w-100"> + <h3 class="black f1 fw4 lh-title ma0 pb3 pt0-l pt4">Showcase</h3> + {{/* NOTE: transitions for this section are in themes/gohugoioTheme/src/css/_carousel.css */}} + <div class="w-100"> + <div class="w-100 overflow-x-scroll"> + <div class="row nowrap mv2 pb1"> + {{ $showcasePages := where .Site.RegularPages "Section" "showcase" }} + {{ if $showcasePages }} + {{ template "home_showcase_item" (index $showcasePages 0) }} + {{ range $p := first 10 ($showcasePages | after 1 | shuffle) }} + {{template "home_showcase_item" $p }} + {{end}} + {{end}} + </div> + </div> + </div> + {{/* END */}} + <div class="flex w-100 mt4 justify-end">{{/* using Flex to make the button show up on the right side */}} + <a href="/showcase/" class="br2 f6 bg-primary-color-dark hover-bg-primary-color link ph3 pv2 ttu white">See All</a> + </div> +</section> + + +{{ define "home_showcase_item" }} + {{ $img := (.Resources.ByType "image").GetMatch "*featured*" }} + {{ with $img }} + {{ $big := .Fill "1024x512 top" }} + {{ $small := $big.Resize "512x" }} + <a href="{{ $.RelPermalink}}" class="tile lazyload cover dib f4 h5 ml1 mr4 bg-black relative mw-100 shadow-5" style="width:{{ $small.Width }}px;" + data-bg="{{ $img.RelPermalink }}" + data-sizes="auto" + data-srcset="{{ $small.RelPermalink }} 1x, + {{ $big.RelPermalink }} 2x" data-src="small" + > + {{with $.Title}} + <div class="details absolute bottom-0 f3-ns f4 left-0 o-0 right-0 top-0"> + <div class="absolute bottom-0 pa2 tc white"> + {{.}} → + </div> + </div> + {{end}} + </a> + {{ end }} +{{ end }}
\ No newline at end of file diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/home-page-sections/sponsors.html b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/home-page-sections/sponsors.html new file mode 100644 index 000000000..6838ce36a --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/home-page-sections/sponsors.html @@ -0,0 +1,53 @@ +{{ $classes_box := "ba b--dark-gray bg-light-gray br3 flex flex-column flex-wrap items-center justify-center ph3 pv4 mb4 w-100 w-30-l " }} +{{ $gtag := .gtag | default "unknown" }} +{{ $classes_box := "ba b--dark-gray bg-light-gray br3 flex flex-column flex-wrap items-center justify-center ph3 pv4 mb4 w-100 w-30-l " }} +{{ $gtag := .gtag | default "unknown" }} +{{ $isFooter := (eq $gtag "footer") }} +{{ $utmSource := cond $isFooter "hugofooter" "hugohome" }} +{{ with .cx.Site.Data.sponsors }} + <style> + a.show-on-hover { + opacity: 0; + } + a.show-on-hover:hover { + opacity: 1; + } + </style> + <section + class="{{ $.classes_section | default "bg-primary-color-dark b--dark-gray bb bt ph5 pv4 w-100" }}"> + <div class="center mw9"> + <h3 class="b f3 mv0 light-gray">Hugo Sponsors</h3> + <div class="flex-ns flex-wrap center justify-between pt3"> + {{ range .banners }} + <div + class="{{ $classes_box }} o-100" + style="background-color: {{ .bgcolor }};"> + {{ $query_params := .query_params | default "" }} + {{ $url := printf "%s?%s%s" .link $query_params (querify "utm_source" (.utm_source | default $utmSource ) "utm_medium" "banner" "utm_campaign" (.utm_campaign | default "hugosponsor") "utm_content" (.utm_content | default "gohugoio")) | safeURL }} + {{ $logo := resources.Get .logo }} + {{ if hugo.IsProduction }} + {{ $gtagID := printf "Sponsor %s %s" .name $gtag | title }} + <a + href="{{ $url }}" + onclick="trackOutboundLink({{ printf "'%s', '%s'" $gtagID $url | safeJS }});" + class="w-100 grow pa3{{ if .show_on_hover }} + show-on-hover + {{ end }}" + style=""> + {{ with $logo }}{{ .Content | safeHTML }}{{ end }} + </a> + {{ else }} + <a + href="{{ $url }}" + class="w-100 grow pa3{{ if .show_on_hover }} + show-on-hover + {{ end }}"> + {{ with $logo }}{{ .Content | safeHTML }}{{ end }} + </a> + {{ end }} + </div> + {{ end }} + </div> + </div> + </section> +{{ end }} diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/home-page-sections/tweets.html b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/home-page-sections/tweets.html new file mode 100644 index 000000000..32eb46ba8 --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/home-page-sections/tweets.html @@ -0,0 +1,27 @@ +<div class="flex-ns flex-wrap center mw9"> + + {{ $interior_classes := $.Site.Params.flex_box_interior_classes }} + + <h3 class="f2 fw4 white">See what others are saying about Hugo…</h3> + + <div class="flex-ns flex-wrap justify-between"> + + {{ if $.Site.Data.homepagetweets }} + {{ range first 4 (sort $.Site.Data.homepagetweets.tweet "date" "desc" ) }} + <div class="homepage-tweet relative {{ $interior_classes }} br1 mid-gray pv3 nested-links shadow-5"> + <div class="absolute top-0 left-0 ma2 o-10"> + {{ partial "svg/twitter.svg" . }} + </div> + <blockquote> + <p class="f4"> + {{.quote | safeHTML}} + </p> + <cite class="homepage-tweet-attribution gray f6">─ {{ .name }} ({{ .twitter_handle }}) <a href="{{ .link }}"> + {{ dateFormat "January 2, 2006" .date }}</a> + </cite> + </blockquote> + </div> + {{ end }} + {{ end }} + </div> +</div> diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/hooks/after-body-start.html b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/hooks/after-body-start.html new file mode 100644 index 000000000..426abd018 --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/hooks/after-body-start.html @@ -0,0 +1 @@ +{{/* Deliberately empty */}} diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/hooks/before-body-end.html b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/hooks/before-body-end.html new file mode 100644 index 000000000..dab653508 --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/hooks/before-body-end.html @@ -0,0 +1,7 @@ +{{ if .Page.Store.Get "hasMermaid" }} + <script type="module" async> + import mermaid from 'https://cdn.jsdelivr.net/npm/mermaid@9/+esm'; + + mermaid.initialize({ startOnLoad: true }); + </script> +{{ end }} diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/icon-link.html b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/icon-link.html new file mode 100644 index 000000000..dec9ae48b --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/icon-link.html @@ -0,0 +1 @@ +<a href="{{ .url }}" class="dim"><svg class="grow" fill="{{ .color }}" height="24" viewBox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg"><path d="M0 0h24v24H0z" fill="none"/><path d="M3.9 12c0-1.71 1.39-3.1 3.1-3.1h4V7H7c-2.76 0-5 2.24-5 5s2.24 5 5 5h4v-1.9H7c-1.71 0-3.1-1.39-3.1-3.1zM8 13h8v-2H8v2zm9-6h-4v1.9h4c1.71 0 3.1 1.39 3.1 3.1s-1.39 3.1-3.1 3.1h-4V17h4c2.76 0 5-2.24 5-5s-2.24-5-5-5z"/></svg></a> diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/maintenance-pages-table.html b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/maintenance-pages-table.html new file mode 100644 index 000000000..a2429a335 --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/maintenance-pages-table.html @@ -0,0 +1,24 @@ +<table class="collapse ba br2 b--black-10 pv2 ph3"> + <thead> + <tr> + <th class="pv2 ph3 tl f6 fw6 ttu">LastMod</th> + <th class="pv2 ph3 tl f6 fw6 ttu">Link</th> + <th class="pv2 ph3 tl f6 fw6 ttu">GitHub</th> + </tr> + </thead> + <tbody> + {{ range . }} + <tr class="striped--light-gray"> + <td class="pv2 ph3">{{ .Lastmod.Format "2006-01-02" }}</td> + <td class="pv2 ph3"> + <a href="{{ .Permalink }}">{{ .Title }}</a> + </td> + <td class="pv2 ph3"> + <a href="{{.Site.Params.ghrepo}}blob/master/content/{{.Lang }}/{{.File.Path}}"> + {{ with .GitInfo }}{{ .Subject }}{{ else }}Source{{ end }} + </a> + </td> + </tr> + {{ end }} + </tbody> +</table>
\ No newline at end of file diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/math.html b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/math.html new file mode 100644 index 000000000..defcaa055 --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/math.html @@ -0,0 +1,9 @@ +<script id="MathJax-script" async src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-chtml.js"></script> +<script> + MathJax = { + tex: { + displayMath: [['\\[', '\\]'], ['$$', '$$']], // block + inlineMath: [['\\(', '\\)']] // inline + } + }; +</script> diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/nav-links-docs-mobile.html b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/nav-links-docs-mobile.html new file mode 100644 index 000000000..a8fc27e21 --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/nav-links-docs-mobile.html @@ -0,0 +1,11 @@ +{{ $currentPage := . }} +{{ $menu := .Site.Menus.docs.ByWeight }} +<ul class="list dib ph0 scrolling-touch tc"> + {{ range $menu }}{{ $post := printf "%s" .Post }} + <li class="tl dib ma0 hover-bg-black w-100{{ if eq $post "break" }} mb2 bb b--mid-gray{{ end }}"> + <a href="{{.URL}}" class="ttu f6 link primary-color-light hover-white db brand-font mb1 ma0 w-100 pv2 ph4{{if $currentPage.IsMenuCurrent "main" . }} bg-primary-color{{end}}"> + {{ .Name }} + </a> + </li> + {{end}} +</ul> diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/nav-links-docs.html b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/nav-links-docs.html new file mode 100644 index 000000000..61aa11dde --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/nav-links-docs.html @@ -0,0 +1,23 @@ +{{ $currentPage := . }} +<nav role="navigation"> + <ul class="list pa0 nl2"> + {{ range .Site.Menus.docs.ByWeight }} + {{ $post := printf "%s" .Post }} + <li class="f5 w-100 hover-bg-light-gray hover-accent-color-light fw8{{ if eq $post "break" }} mb1 bb b--moon-gray{{ end }}"> + <a href="{{ if .HasChildren }}javascript:void(0){{ else }}{{ .URL }}{{ end }}" class="js-toggle dib w-100 link mid-gray hover-accent-color-light pl2 pr2 pv2 {{if or ($currentPage.IsMenuCurrent "docs" .) ($currentPage.HasMenuCurrent "docs" .) }} primary-color{{end}}" data-target=".{{ .Identifier }}">{{ .Name }}</a> + + {{- if .HasChildren }} + <ul class="{{ .Identifier }} desktopmenu animated fadeIn list pl0 bg-light-gray{{if $currentPage.HasMenuCurrent "docs" . }} db{{ else }} dn{{ end }}"> + {{- range .Children }} + <li class="f6 fw4"> + <a href="{{.URL}}" class="db link hover-bg-gray hover-white pl3 pr2 pv2 {{if $currentPage.IsMenuCurrent "docs" . }}primary-color {{ else }}black {{end}}"> + {{ .Name }} + </a> + </li> + {{- end}} + </ul> + {{- end}} + </li> + {{- end}} + </ul> +</nav> diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/nav-links-global-mobile.html b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/nav-links-global-mobile.html new file mode 100644 index 000000000..6ad98923e --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/nav-links-global-mobile.html @@ -0,0 +1,11 @@ +{{ $currentPage := . }} +{{ $menu := .Site.Menus.global }} +<ul class="list hidden dib ph0 scrolling-touch tc"> + {{ range $menu }} + <li class="tl dib ma0 hover-bg-black w-100"> + <a href="{{.URL}}" class="ttu f6 link primary-color-light overflow hover-white db brand-font ma0 w-100 pv3 ph4{{if $currentPage.IsMenuCurrent "main" . }} bg-primary-color{{end}}"> + {{ .Name }} + </a> + </li> + {{end}} +</ul> diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/nav-links.html b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/nav-links.html new file mode 100644 index 000000000..af3790b16 --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/nav-links.html @@ -0,0 +1,37 @@ +{{ $currentPage := . }} +{{ $.Scratch.Add "listlinkClasses" "f6 link primary-color-dark hover-white db brand-font ma0 w-100 pv3 ph4" }} + +<!-- TODO: Not getting ismenucurrent --> + +<ul class="list dib ph0 ma0 scrolling-touch tc"> + {{ range .Site.Menus.main }} + <li class="tl-l dib ma0 hover-bg-black w-100{{ if .HasChildren }} dont-display-child-until-click{{end}}"> + + {{ if .HasChildren }} + <a href="#{{ .Name | urlize }}" class="ttu {{ $.Scratch.Get "listlinkClasses" }}{{if $currentPage.IsMenuCurrent "main" . }} o-50{{end}}"> + {{ .Name }} + <!-- <img src="/images/ic_keyboard_arrow_down_white_24px.svg" alt="" class="static v-mid f6 ma0 pa0"> --> + </a> + <ul id="{{ .Name | urlize}}" class="list pa0 ma0"> + <li class="ma0 pl3 brand-font"> + <a href="{{.URL}}" class="{{ $.Scratch.Get "listlinkClasses" }}{{if $currentPage.IsMenuCurrent "main" . }} o-50{{end}}"> + {{ .Name }} Overview + </a> + </li> + {{ range .Children }} + <li class="ma0 pl3 brand-font{{if $currentPage.IsMenuCurrent "main" . }} o-50{{end}}"> + <a href="{{.URL}}" class="{{ $.Scratch.Get "listlinkClasses" }}"> + {{ .Name }} + </a> + </li> + {{ end }} + </ul> + {{ else }} + <a href="{{.URL}}" class="ttu {{ $.Scratch.Get "listlinkClasses" }}{{if $currentPage.IsMenuCurrent "main" . }} bg-primary-color{{end}}"> + {{ .Name }} + </a> + {{end}} + + </li> + {{end}} +</ul> diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/nav-mobile.html b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/nav-mobile.html new file mode 100644 index 000000000..b04866e52 --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/nav-mobile.html @@ -0,0 +1,12 @@ +<div class="globalmenu mobilemenu pb1 dn"> + {{ partial "nav-links-global-mobile.html" . }} +</div> +<div class="docsmenu mobilemenu pb1 dn"> + {{ partial "nav-links-docs-mobile.html" . }} +</div> + +<div class="flex dn-l justify-between"> + <button class="js-toggle flex-auto dib dn-l f6 tc db ph3 pv2 link mr2 white bg-primary-color-dark hover-bg-primary-color ba b--white-40 w-auto" data-target=".globalmenu">Menu</button> + + <button class="js-toggle flex-auto dib dn-l f6 tc db ph3 pv2 link white bg-primary-color-dark hover-bg-primary-color ba b--white-40 w-auto" data-target=".docsmenu">Docs Menu</button> +</div> diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/nav-top.html b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/nav-top.html new file mode 100644 index 000000000..f64111409 --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/nav-top.html @@ -0,0 +1,16 @@ +{{ $currentPage := . }} +<header class="dn-lTK relative cf bg-primary-color-dark pl4 w-100 z-5"> + <div class="flexTK items-centerTK dib "> + <a class="absolute top-0 left-0 ml4 w4 w4-ns ph3 mr3" href="/"> + <img src="{{ .Site.Params.logo }}" alt="" class="w-100 shadow-2"> + </a> + <a class="f4 f3-ns lh-solid brand-font fw7 link white hover-white no-underline dib mv0 ml6 pl3 mr5" href="/"> + {{ .Site.Title | markdownify }} + </a> + </div> + + {{ partial "nav-links.html" .}} + <div class="dn-l"> + {{ partial "nav-button-open.html" .}} + </div> +</header> diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/opengraph/get-featured-image.html b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/opengraph/get-featured-image.html new file mode 100644 index 000000000..79b315a44 --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/opengraph/get-featured-image.html @@ -0,0 +1,24 @@ +{{ $images := $.Resources.ByType "image" }} +{{ $featured := $images.GetMatch "*feature*" }} +{{ if not $featured }}{{ $featured = $images.GetMatch "{*cover*,*thumbnail*}" }}{{ end }} +{{ if not $featured }} + {{ $featured = resources.Get "/opengraph/gohugoio-card-base-1.png" }} + {{ $size := 80 }} + {{ $title := $.LinkTitle }} + {{ if gt (len $title) 20 }} + {{ $size = 70 }} + {{ end }} + + {{ $text := $title }} + {{ $textOptions := dict + "color" "#FFF" + "size" $size + "lineSpacing" 10 + "x" 65 "y" 80 + "font" (resources.Get "/opengraph/mulish-black.ttf") + }} + + {{ $featured = $featured | images.Filter (images.Text $text $textOptions) }} +{{ end }} + +{{ return $featured }}
\ No newline at end of file diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/opengraph/opengraph.html b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/opengraph/opengraph.html new file mode 100644 index 000000000..6d195ede6 --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/opengraph/opengraph.html @@ -0,0 +1,42 @@ +<meta property="og:title" content="{{ .Title }}" /> +<meta property="og:description" content="{{ with .Description }}{{ . }}{{ else }}{{if .IsPage}}{{ .Summary }}{{ else }}{{ with .Site.Params.description }}{{ . }}{{ end }}{{ end }}{{ end }}" /> +<meta property="og:type" content="{{ if .IsPage }}article{{ else }}website{{ end }}" /> +<meta property="og:url" content="{{ .Permalink }}" /> + +{{- with $.Params.images -}} +{{- range first 6 . }}<meta property="og:image" content="{{ . | absURL }}" />{{ end -}} +{{- else -}} +{{- $featured := partial "opengraph/get-featured-image.html" . }} +{{- with $featured -}} +<meta property="og:image" content="{{ $featured.Permalink }}"/> +{{- else -}} +{{- with $.Site.Params.images }}<meta property="og:image" content="{{ index . 0 | absURL }}"/>{{ end -}} +{{- end -}} +{{- end -}} + +{{- if .IsPage }} +{{- $iso8601 := "2006-01-02T15:04:05-07:00" -}} +<meta property="article:section" content="{{ .Section }}" /> +{{ with .PublishDate }}<meta property="article:published_time" {{ .Format $iso8601 | printf "content=%q" | safeHTMLAttr }} />{{ end }} +{{ with .Lastmod }}<meta property="article:modified_time" {{ .Format $iso8601 | printf "content=%q" | safeHTMLAttr }} />{{ end }} +{{- end -}} + +{{- with .Params.audio }}<meta property="og:audio" content="{{ . }}" />{{ end }} +{{- with .Params.locale }}<meta property="og:locale" content="{{ . }}" />{{ end }} +{{- with .Site.Params.title }}<meta property="og:site_name" content="{{ . }}" />{{ end }} +{{- with .Params.videos }}{{- range . }} +<meta property="og:video" content="{{ . | absURL }}" /> +{{ end }}{{ end }} + +{{- /* If it is part of a series, link to related articles */}} +{{- $permalink := .Permalink }} +{{- $siteSeries := .Site.Taxonomies.series }} +{{ with .Params.series }}{{- range $name := . }} + {{- $series := index $siteSeries ($name | urlize) }} + {{- range $page := first 6 $series.Pages }} + {{- if ne $page.Permalink $permalink }}<meta property="og:see_also" content="{{ $page.Permalink }}" />{{ end }} + {{- end }} +{{ end }}{{ end }} + +{{- /* Facebook Page Admin ID for Domain Insights */}} +{{- with site.Params.social.facebook_admin }}<meta property="fb:admins" content="{{ . }}" />{{ end }} diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/opengraph/twitter_cards.html b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/opengraph/twitter_cards.html new file mode 100644 index 000000000..456f87b1c --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/opengraph/twitter_cards.html @@ -0,0 +1,22 @@ +{{- with $.Params.images -}} +<meta name="twitter:card" content="summary_large_image"/> +<meta name="twitter:image" content="{{ index . 0 | absURL }}"/> +{{ else -}} +{{- $featured := partial "opengraph/get-featured-image.html" . }} +{{- with $featured -}} +<meta name="twitter:card" content="summary_large_image"/> +<meta name="twitter:image" content="{{ $featured.Permalink }}"/> +{{- else -}} +{{- with $.Site.Params.images -}} +<meta name="twitter:card" content="summary_large_image"/> +<meta name="twitter:image" content="{{ index . 0 | absURL }}"/> +{{ else -}} +<meta name="twitter:card" content="summary"/> +{{- end -}} +{{- end -}} +{{- end }} +<meta name="twitter:title" content="{{ .Title }}"/> +<meta name="twitter:description" content="{{ with .Description }}{{ . }}{{ else }}{{if .IsPage}}{{ .Summary }}{{ else }}{{ with .Site.Params.description }}{{ . }}{{ end }}{{ end }}{{ end -}}"/> +{{ with site.Params.social.twitter -}} +<meta name="twitter:site" content="@{{ . }}"/> +{{ end -}} diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/page-edit.html b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/page-edit.html new file mode 100644 index 000000000..edf84669e --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/page-edit.html @@ -0,0 +1,3 @@ +<a href="{{.Site.Params.ghrepo}}edit/master/content/{{ .Lang }}/{{.File.Path}}" class=" +f6 ph3 pv1 br2 dib tc ttu mv3 bg-primary-color white hover-bg-green link +">Improve this page</a> diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/page-header.html b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/page-header.html new file mode 100644 index 000000000..dcc96242f --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/page-header.html @@ -0,0 +1,20 @@ +{{ $currentPage := . }} +{{ $currentURL := .RelPermalink }} +<header class="ph4 flex pv4 bg-light-gray"> + <ul class="list ma0 pa0 "> + <!-- TODO: Active classes --> + <li class="f5 dib mr3 mb3 mb0-ns v-top white"> + <a href="/news/" class="link primary-color-dark dim"> + News: + </a> + </li> + {{ range $name, $taxonomy := .Site.Taxonomies.categories }} + {{ $link := $name | printf "%s%s" "/categories/" | printf "%s/" }} + <li class="f5 dib mr3 v-top mr3 mb3 mb0-ns"> + <a href="{{ $link }}" class="link {{ if eq $currentURL $link }} bg-primary-color-dark {{ else }} bg-primary-color-dark {{ end }} white ph3 pv1 br2 hover-bg-accent-color-light"> + {{ $name | humanize }} + </a> + </li> + {{ end }} + </ul> +</header> diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/pagelayout.html b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/pagelayout.html new file mode 100644 index 000000000..e6b644b2f --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/pagelayout.html @@ -0,0 +1,36 @@ +{{ $section_to_display := .section_to_display }} + <div class="w-100 ph4 pb5 pb6-ns pt1 mt4 pt3-ns"> + + <div class="flex"> + <div class="dn db-l w-20"> + {{ partial "nav-links-docs.html" .context }} + </div> + + <div class="w-100 w-80-l ph0 ph4-l"> + <article class="w-100 nested-copy-line-height nested-links nested-img"> + <h1 class="primary-color-dark f2"> + {{ with $.context.Data.Singular }}{{ . | humanize }}: {{ end }}{{ .context.Title }} + </h1> + <div class="{{ .Site.Params.copyClass }} mid-gray f5 f4-l"> + {{ .context.Content }} + </div> + </article> + + <div class="flex flex-wrap"> + {{ $interior_classes := .context.Site.Params.flex_box_interior_classes }} + <section class="flex-ns flex-wrap justify-between w-100"> + {{ $pages := $section_to_display }} + {{ if in (slice "functions" "methods") $.context.Type }} + {{ $pages = $.context.Pages }} + {{ end }} + {{ range $pages }} + {{ partial "boxes-section-summaries.html" (dict "context" . "classes" $interior_classes "fullcontent" true) }} + {{ end }} + </section> + </div> + + </div> + + </div> + +</div> diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/previous-next-links-in-section-with-title.html b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/previous-next-links-in-section-with-title.html new file mode 100644 index 000000000..71a14c0ef --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/previous-next-links-in-section-with-title.html @@ -0,0 +1,14 @@ +{{ if or .PrevInSection .NextInSection }} +{{/* this div holds these a tags as a unit for flex-box display */}} + <div date-pref class="white"> + {{if .NextInSection}} + <a href="{{.NextInSection.Permalink }}" class="br2 db f6 ph2 pv2 bg-light-gray white" title="{{ .NextInSection.Title }} ">{{ partial "svg/ic_chevron_left_black_24px.svg" (dict "fill" "#fff" "size" "12px") }} {{.NextInSection.Title}}</a> + {{end}} + + {{if .PrevInSection}} + <a href="{{ .PrevInSection.Permalink }}" class="br2 db f6 pr1 mt3 bg-light-gray ph2 pv2 white" title="{{ .PrevInSection.Title }}"> + {{.PrevInSection.Title}} {{ partial "svg/ic_chevron_right_black_24px.svg" (dict "fill" "#fff" "size" "12px") }} + </a> + {{end}} + </div> +{{ end }} diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/previous-next-links-in-section.html b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/previous-next-links-in-section.html new file mode 100644 index 000000000..af9f4aac1 --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/previous-next-links-in-section.html @@ -0,0 +1,16 @@ +{{ if or .PrevInSection .NextInSection }} +{{/* this div holds these a tags as a unit for flex-box display */}} + <div date-pref> + {{if .NextInSection}} + <a href="{{.NextInSection.Permalink }}" class="dib f6 pl1 hover-bg-light-gray br-100" title="{{ .NextInSection.Title }} "> + {{ partial "svg/ic_chevron_left_black_24px.svg" (dict "fill" "#0594CB" "size" "30px") }} + </a> + {{end}} + + {{if .PrevInSection}} + <a href="{{ .PrevInSection.Permalink }}" class="dib f6 pr1 hover-bg-light-gray br-100" title="{{ .PrevInSection.Title }}"> + {{ partial "svg/ic_chevron_right_black_24px.svg" (dict "fill" "#0594CB" "size" "30px") }} + </a> + {{end}} + </div> +{{ end }} diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/previous-next-links.html b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/previous-next-links.html new file mode 100644 index 000000000..cd43dd840 --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/previous-next-links.html @@ -0,0 +1,25 @@ +{{if .Prev }} + <a href="{{ .Prev.Permalink }}" class="db-l f4 f3-ns link primary-color hover-black fw8 mr4"> + <span class="v-mid dib">{{ partial "svg/ic_chevron_left_black_24px.svg" (dict "size" "30px") }}</span> {{ .Prev.Title }} + </a> +{{end}} + +{{if .Next }} + <a href="{{.Next.Permalink }}" class="db-l f4 f3-ns link primary-color hover-black fw8"> + {{ .Next.Title }} <span class="v-mid dib">{{ partial "svg/ic_chevron_right_black_24px.svg" (dict "size" "30px") }}</span> + </a> +{{end}} + + +<script> + document.body.onkeyup = function(e){ + if (!(e.ctrlKey || e.shiftKey || e.altKey || e.metaKey)) { + {{- if .Prev }} + if (e.keyCode == '37') { window.location = '{{ .Prev.Permalink }}'; } + {{- end }} + {{- if .Next }} + if (e.keyCode == '39') { window.location = '{{ .Next.Permalink }}'; } + {{- end }} + } + }; +</script> diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/related.html b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/related.html new file mode 100644 index 000000000..ff7435668 --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/related.html @@ -0,0 +1,22 @@ +{{- $heading := "See also" }} +{{- $related := site.RegularPages.Related . | first 5 }} + +{{- if in (slice "functions" "methods") .Type }} + {{- $related = slice }} + {{- range .Params.action.related }} + {{- with site.GetPage (lower .) }} + {{- $related = $related | append . }} + {{- else }} + {{- errorf "The 'related' partial was unable to get page %s" . }} + {{- end }} + {{- end }} +{{- end }} + +{{- with $related }} + <h2>{{ $heading }}</h2> + <ul> + {{- range . }} + <li><a href="{{ .RelPermalink }}">{{ .Title }}</a></li> + {{- end }} + </ul> +{{- end }} diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/right-sidebar.html b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/right-sidebar.html new file mode 100644 index 000000000..ecdbeb33f --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/right-sidebar.html @@ -0,0 +1,29 @@ +<aside class="right-0 f6 pv4 pv0-ns ph4-l nested-list-reset nested-copy-line-height"> + <div class="nested-links"> + {{- partial "previous-next-links-in-section.html" . }} + </div> + + {{- /* Table of contents is visible if toc = true in front matter. */}} + {{- if .Params.toc }} + <div class="nested-links"> + <p class="f5 fw8 mid-gray mb0">On this page</p> + {{- .TableOfContents }} + </div> + {{- end }} + + {{- /* Section menu for single pages is visible if showSectionMenu = true in top level section page. */}} + {{- if .FirstSection.Params.showSectionMenu }} + {{- with .CurrentSection.RegularPages }} + <p class="mb0"><a class="link f5 fw8 mid-gray" href="{{ $.CurrentSection.RelPermalink }}">In this section</a></p> + <nav> + <ul> + {{- range . }} + <li> + <a style="padding: 2px 5px;" class="dib link hover-bg-black-40 hover-white blue nl1" href="{{ .RelPermalink }}">{{ .LinkTitle }}</a> + </li> + {{- end }} + </ul> + </nav> + {{- end }} + {{- end }} +</aside> diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/site-footer.html b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/site-footer.html new file mode 100644 index 000000000..09c013361 --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/site-footer.html @@ -0,0 +1,48 @@ +<footer class="bg-primary-color-dark ph4-ns pt4 relative w-100" role="contentinfo"> + <div class="center flex-ns flex-wrap justify-between mw9 w-90"> + <div class="pb3 pt4 w-100 w-50-ns"> + + <div class="b f3 light-gray mb3 nested-links tc"> + By the <a href="https://github.com/gohugoio/hugo/graphs/contributors" class="link">Hugo Authors</a><br /> + </div> + + <div class="center w4"> + <img src="/images/hugo-logo-wide.svg" alt="Hugo Logo"> + </div> + + <ul class="center f6 list ma0 mv3 pa0 tc"> + {{- with .Site.Params.github_repo -}}<li class="dib mr3"><a href="{{ . }}" class="dim link light-gray pv2">File an Issue</a></li>{{- end -}} + {{- with .Site.Params.forum -}}<li class="dib mr3"><a href="{{ . }}" class="dim link light-gray pv2">Get Help</a></li>{{- end -}} + {{- with .Site.Params.gitter -}}<li class="dib"><a href="{{ . }}" class="dim link light-gray pv2">Discuss Source Code</a></li>{{- end -}} + </ul> + + <ul class="center f6 list ma0 mv4 pa0 tc"> + <li class="dib mr3"><a href="https://twitter.com/gohugoio" class="dim link light-gray pv2">@GoHugoIO</a></li> + <li class="dib mr3"><a href="https://twitter.com/spf13" class="dim link light-gray pv2">@spf13</a></li> + <li class="dib"><a href="https://twitter.com/bepsays" class="dim link light-gray pv2">@bepsays</a></li> + </ul> + + {{ with getenv "REPOSITORY_URL" -}} + <p class="center f6 tc w-70"><a href="https://www.netlify.com"><img src="/images/netlify-dark.svg" alt="Netlify badge"></a></p> + {{- end }} + + </div> + + <div class="w-100 w-50-l"> + {{ partial "home-page-sections/sponsors.html" (dict "cx" . "gtag" "footer" "classes_section" "pb3 w-100" "classes_copy" "f7 w-90-ns") }} + </div> + + </div> + + <div class="f7 gray mb5 mb0-ns ph3 w-100"> + <p class="dib mr4">The Hugo logos are copyright © Steve Francia 2013–{{ now.Year }}.</p> + <p class="dib">The Hugo Gopher is based on an original work by Renée French.</p> + </div> + + <img src="/images/gopher-side_color.svg" alt="" class="absolute-l bottom-0 dn db-l h4 right-0 z-999"/> + + <div class="bg-primary-color-dark bottom-0 left-0 right-0 dn-l fixed pb3 ph3 pt3 w-100 z-2"> + {{- partial "nav-mobile.html" . -}} + </div> + +</footer> diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/site-manifest.html b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/site-manifest.html new file mode 100644 index 000000000..54472ba16 --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/site-manifest.html @@ -0,0 +1,7 @@ + +<link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png"> +<link rel="icon" type="image/png" href="/favicon-32x32.png" sizes="32x32"> +<link rel="icon" type="image/png" href="/favicon-16x16.png" sizes="16x16"> +<link rel="manifest" href="/manifest.json"> +<link rel="mask-icon" href="/safari-pinned-tab.svg" color="#0594cb"> +<meta name="theme-color" content="#ffffff"> diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/site-nav.html b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/site-nav.html new file mode 100644 index 000000000..f387d66f3 --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/site-nav.html @@ -0,0 +1,38 @@ +{{ $currentPage := . }} +<nav class="bg-primary-color-dark pv4 w-100" role="navigation"> + + <div class="center flex-ns flex-wrap items-center justify-start mw9"> + + <h1 class="dim f3 lh-solid ml0-ns mr0 mr4-l mv0 pl3 pl4-ns"> + <a href="https://gohugo.io/" class="link white"> + HUGO + </a> + </h1> + <ul class="list ma0 pa0 dn dib-l" role="menu"> + {{ range .Site.Menus.global }} + <li class="f5 dib mr4" role="menuitem"> + {{/* TODO: Create an "Global" active class to show which site one is currently at */}} + <a href="{{ .URL }}" class="dim link{{ if $currentPage.IsMenuCurrent "global" . }} gray {{else}} light-silver{{ end }}"> + {{ .Name }} + {{/* using ".Post" from the menu system to determine if we should show an icon for external links */}} + {{ $post_status := printf "%s" .Post }} + {{ if eq $post_status "external" }} + <span class="pl1"> + {{ partial "svg/link-ext.svg" (dict "size" "10") }} + </span> + {{ end }} + </a> + </li> + {{ end }} + </ul> + + <div class="db dib-ns pl3"> + {{- partial "site-search.html" . -}} + </div> + + <div class="absolute mt1 mt2-l pr3 right-0 top-0 flex items-start"> + {{- partialCached "social-follow.html" . -}} + </div> + + </div> +</nav> diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/site-scripts.html b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/site-scripts.html new file mode 100644 index 000000000..7dec9de18 --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/site-scripts.html @@ -0,0 +1,17 @@ +<!-- scripts --> +{{ $scripts := resources.Get "output/js/app.js" }} +{{ $isDev := eq hugo.Environment "development" }} +{{ if not $isDev }} +{{ $scripts = $scripts | fingerprint }} +{{ end }} +{{ with $scripts }} + {{ if $isDev }} + <script type="text/javascript" src="{{ .RelPermalink }}" crossorigin="anonymous" defer></script> + {{ else }} + <script type="text/javascript" src="{{ .RelPermalink }}" integrity="{{ .Data.Integrity }}" crossorigin="anonymous" defer></script> + {{ end }} + {{ $.Scratch.Set "scripts" . }} +{{end}} + +<!-- Place this tag in your head or just before your close body tag. --> +<script async defer src="https://buttons.github.io/buttons.js"></script> diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/site-search.html b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/site-search.html new file mode 100644 index 000000000..8c97ac454 --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/site-search.html @@ -0,0 +1,6 @@ +<form id="site-search-form" action="" role="search"> + <fieldset class="bn ma0 pa0"> + <label class="clip" for="search-input">Search</label> + <input type="search" id="search-input" class="needs-js bg-left bn f5 input-reset lh-solid mt3 mt0-ns pl4 pv2 w5 white" placeholder="Search the Docs" name="search-input" value="" style="background: url('/images/icon-search.png') 5px 11px/16px 16px no-repeat; background-color: rgba(255,255,255,0);"> + </fieldset> +</form> diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/social-follow.html b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/social-follow.html new file mode 100644 index 000000000..7451c15d6 --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/social-follow.html @@ -0,0 +1,21 @@ +<a + href="https://twitter.com/intent/follow?screen_name=gohugoiov2" + title="Follow on Twitter" + class="link-transition twitter link dib z-999 pt3 pt0-l mr2"> + {{ partial "svg/twitter.svg" (dict "size" "32px") }} +</a> +<a + rel="me" + class="mstdn mr3" + href="https://fosstodon.org/@gohugoio" + target="_blank" + >gohugoio</a +> +<a + class="github-button needs-js link primary-color-dark" + href="https://github.com/gohugoio/hugo" + data-size="large" + data-show-count="false" + aria-label="Star gohugoio/hugo on GitHub" + >Star</a +> diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/summary.html b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/summary.html new file mode 100644 index 000000000..0f140cf70 --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/summary.html @@ -0,0 +1,13 @@ +<div class="relative w-100 mb4 bg-white nested-copy-line-height"> + <div class="bg-white mb3 pa4 gray overflow-hidden"> + <span class="f6 db">{{ humanize .Section }}</span> + <h1 class="f3 near-black"> + <a href="{{ .URL }}" class="link black dim"> + {{ .Title }} + </a> + </h1> + <div class="nested-links f5 lh-copy nested-copy-line-height"> + {{ .Summary }} + </div> + </div> +</div> diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/svg/Twitter_Logo_Blue.svg b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/svg/Twitter_Logo_Blue.svg new file mode 100644 index 000000000..da9438414 --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/svg/Twitter_Logo_Blue.svg @@ -0,0 +1 @@ +<svg id="Logo_FIXED" data-name="Logo — FIXED" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 400 400"><defs><style>.cls-1{fill:none;}.cls-2{fill:#1da1f2;}</style></defs><title>Twitter_Logo_Blue</title><rect class="cls-1" width="400" height="400"/><path class="cls-2" d="M153.62,301.59c94.34,0,145.94-78.16,145.94-145.94,0-2.22,0-4.43-.15-6.63A104.36,104.36,0,0,0,325,122.47a102.38,102.38,0,0,1-29.46,8.07,51.47,51.47,0,0,0,22.55-28.37,102.79,102.79,0,0,1-32.57,12.45,51.34,51.34,0,0,0-87.41,46.78A145.62,145.62,0,0,1,92.4,107.81a51.33,51.33,0,0,0,15.88,68.47A50.91,50.91,0,0,1,85,169.86c0,.21,0,.43,0,.65a51.31,51.31,0,0,0,41.15,50.28,51.21,51.21,0,0,1-23.16.88,51.35,51.35,0,0,0,47.92,35.62,102.92,102.92,0,0,1-63.7,22A104.41,104.41,0,0,1,75,278.55a145.21,145.21,0,0,0,78.62,23"/></svg> diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/svg/apple.svg b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/svg/apple.svg new file mode 100644 index 000000000..6f3c20f76 --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/svg/apple.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 16 16" fill="#444" xmlns="http://www.w3.org/2000/svg" fill-rule="evenodd" clip-rule="evenodd" stroke-linejoin="round" stroke-miterlimit="1.414"><path d="M8.112 4.59c.54 0 1.544-.743 2.85-.743 2.25 0 3.135 1.6 3.135 1.6s-1.73.885-1.73 3.032c0 2.42 2.155 3.25 2.155 3.25s-1.507 4.24-3.542 4.24c-.935 0-1.662-.63-2.647-.63-1.004 0-2 .65-2.648.65-1.86 0-4.207-4.03-4.207-7.26 0-3.19 1.988-4.85 3.852-4.85 1.21 0 2.152.69 2.782.69zm.563-3.198C9.725.007 11.188 0 11.188 0s.217 1.303-.827 2.558c-1.11 1.34-2.38 1.12-2.38 1.12s-.24-1.054.7-2.286z"/></svg> diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/svg/clipboard.svg b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/svg/clipboard.svg new file mode 100644 index 000000000..e1b170359 --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/svg/clipboard.svg @@ -0,0 +1,3 @@ +<svg height="1024" width="896" xmlns="http://www.w3.org/2000/svg"> + <path d="M128 768h256v64H128v-64z m320-384H128v64h320v-64z m128 192V448L384 640l192 192V704h320V576H576z m-288-64H128v64h160v-64zM128 704h160v-64H128v64z m576 64h64v128c-1 18-7 33-19 45s-27 18-45 19H64c-35 0-64-29-64-64V192c0-35 29-64 64-64h192C256 57 313 0 384 0s128 57 128 128h192c35 0 64 29 64 64v320h-64V320H64v576h640V768zM128 256h512c0-35-29-64-64-64h-64c-35 0-64-29-64-64s-29-64-64-64-64 29-64 64-29 64-64 64h-64c-35 0-64 29-64 64z" /> +</svg> diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/svg/clippy.svg b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/svg/clippy.svg new file mode 100644 index 000000000..e1b170359 --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/svg/clippy.svg @@ -0,0 +1,3 @@ +<svg height="1024" width="896" xmlns="http://www.w3.org/2000/svg"> + <path d="M128 768h256v64H128v-64z m320-384H128v64h320v-64z m128 192V448L384 640l192 192V704h320V576H576z m-288-64H128v64h160v-64zM128 704h160v-64H128v64z m576 64h64v128c-1 18-7 33-19 45s-27 18-45 19H64c-35 0-64-29-64-64V192c0-35 29-64 64-64h192C256 57 313 0 384 0s128 57 128 128h192c35 0 64 29 64 64v320h-64V320H64v576h640V768zM128 256h512c0-35-29-64-64-64h-64c-35 0-64-29-64-64s-29-64-64-64-64 29-64 64-29 64-64 64h-64c-35 0-64 29-64 64z" /> +</svg> diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/svg/cloud.svg b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/svg/cloud.svg new file mode 100644 index 000000000..2ea15de87 --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/svg/cloud.svg @@ -0,0 +1,13 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<svg width="100%" height="100%" viewBox="0 0 512 512" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:1.41421;"> + <g transform="matrix(1.47445,0,0,1.47445,-125.537,-123.683)"> + <path d="M332.615,235.15C330.448,235.15 328.317,235.312 326.213,235.56C317.01,197.167 282.482,168.62 241.264,168.62C200.043,168.62 165.521,197.17 156.305,235.56C154.214,235.312 152.08,235.15 149.913,235.15C120.025,235.15 95.793,259.376 95.793,289.267C95.793,319.151 120.025,343.38 149.916,343.38L332.617,343.38C362.505,343.38 386.737,319.151 386.737,289.267C386.735,259.376 362.503,235.15 332.615,235.15Z" style="fill:white;fill-rule:nonzero;"/> + </g> + <g transform="matrix(1.47445,0,0,1.47445,-125.537,-123.683)"> + <path d="M386.141,219.714C384.939,219.714 383.753,219.803 382.59,219.942C377.47,198.61 358.288,182.751 335.393,182.751C312.485,182.751 293.31,198.61 288.193,219.942C287.024,219.803 285.838,219.714 284.642,219.714C268.033,219.714 254.569,233.175 254.569,249.78C254.569,266.385 268.03,279.846 284.642,279.846L386.144,279.846C402.749,279.846 416.21,266.385 416.21,249.78C416.21,233.175 402.749,219.714 386.141,219.714Z" style="fill:rgb(0,131,192);fill-rule:nonzero;"/> + </g> + <g transform="matrix(1.47445,0,0,1.47445,-125.537,-123.683)"> + <path d="M307.474,231.173C306.965,231.173 306.443,231.11 305.928,230.985C302.38,230.136 300.194,226.572 301.043,223.024C304.862,207.089 318.989,195.964 335.393,195.964C339.04,195.964 341.999,198.924 341.999,202.57C341.999,206.216 339.039,209.176 335.393,209.176C325.123,209.176 316.281,216.136 313.892,226.102C313.166,229.135 310.457,231.173 307.474,231.173Z" style="fill:white;fill-rule:nonzero;"/> + </g> +</svg> diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/svg/content.svg b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/svg/content.svg new file mode 100644 index 000000000..bc696b90b --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/svg/content.svg @@ -0,0 +1,18 @@ +<svg id="content-icon" class="focus-row-icon"width="100%" height="100%" viewBox="0 0 512 512" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:1.41421;"> + <circle id="content-halo" cx="256" cy="256" r="256" style="fill:rgb(252,216,4);"/> + <path d="M256,100.748C197.49,100.758 150.082,148.166 150.082,206.676C150.082,237.664 163.414,265.546 184.617,284.923C185.621,285.759 186.625,286.641 187.666,287.552C204.215,302.651 214.604,324.36 214.604,348.503L214.604,357.719L297.396,357.719L297.396,348.503C297.396,324.356 307.762,302.651 324.36,287.552C325.371,286.64 326.378,285.758 327.386,284.923C348.56,265.546 361.918,237.66 361.918,206.676C361.918,148.166 314.513,100.758 256,100.748Z" style="fill:white;fill-rule:nonzero;"/> + <path d="M327.019,206.67C327.019,245.883 295.212,277.65 256.013,277.65C216.764,277.653 184.98,245.886 184.98,206.67C184.98,167.461 216.764,135.614 256.013,135.614C295.213,135.617 327.019,167.46 327.019,206.67Z" style="fill:rgb(230,229,229);fill-rule:nonzero;"/> + <path d="M256.017,437.677L227.378,420.587L284.652,420.587L256.017,437.677Z" style="fill:white;fill-rule:nonzero;"/> + <path d="M303.167,413.851C303.167,415.572 302.51,417.296 301.192,418.611C299.874,419.926 298.153,420.586 296.432,420.586L215.572,420.586C213.851,420.586 212.123,419.929 210.809,418.611C209.495,417.293 208.834,415.572 208.834,413.851L208.834,357.72L303.171,357.72L303.171,413.852L303.167,413.852L303.167,413.851Z" style="fill:rgb(52,59,67);fill-rule:nonzero;"/> + <g> + <rect x="208.83" y="364.709" width="94.337" height="6.95" style="fill:rgb(73,80,87);"/> + <rect x="208.83" y="378.682" width="94.337" height="6.976" style="fill:rgb(73,80,87);"/> + <rect x="208.83" y="392.621" width="94.337" height="6.98" style="fill:rgb(73,80,87);"/> + <rect x="208.83" y="406.594" width="94.337" height="7.016" style="fill:rgb(73,80,87);"/> + </g> + <rect x="229.574" y="252.366" width="17.606" height="105.353" style="fill:rgb(253,131,105);"/> + <rect x="247.18" y="252.366" width="17.613" height="105.353" style="fill:rgb(234,101,82);"/> + <rect x="264.787" y="252.366" width="17.616" height="105.353" style="fill:rgb(226,79,59);"/> + <path d="M282.426,252.37L264.773,221.864L247.207,221.864L229.601,252.37L282.426,252.37Z" style="fill:white;fill-rule:nonzero;"/> + <path d="M264.773,221.864L255.97,206.633L247.207,221.864L264.773,221.864Z" style="fill:rgb(52,59,67);fill-rule:nonzero;"/> +</svg> diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/svg/design.svg b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/svg/design.svg new file mode 100644 index 000000000..9f9d71769 --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/svg/design.svg @@ -0,0 +1,5 @@ +<svg id="design-icon" class="focus-row-icon" width="100%" height="100%" viewBox="0 0 51 51" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:1.41421;"> + <path d="M50.956,14.456L25.5,29L0.044,14.456L25.5,0L50.956,14.456Z" style="fill:rgb(252,216,4);fill-rule:nonzero;"/> + <path d="M25.5,29L9.7,19.973L0.044,25.456L25.5,40L50.956,25.456L41.3,19.973L25.5,29Z" style="fill:rgb(51,186,145);fill-rule:nonzero;"/> + <path d="M25.5,40L9.7,30.973L0.044,36.456L25.5,51L50.956,36.456L41.3,30.973L25.5,40Z" style="fill:rgb(255,64,136);fill-rule:nonzero;"/> +</svg> diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/svg/exclamation.svg b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/svg/exclamation.svg new file mode 100644 index 000000000..e69de29bb --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/svg/exclamation.svg diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/svg/facebook.svg b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/svg/facebook.svg new file mode 100644 index 000000000..6e6af44a2 --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/svg/facebook.svg @@ -0,0 +1 @@ +<svg width="32px" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg" fill-rule="evenodd" clip-rule="evenodd" stroke-linejoin="round" stroke-miterlimit="1.414"><path d="M15.117 0H.883C.395 0 0 .395 0 .883v14.234c0 .488.395.883.883.883h7.663V9.804H6.46V7.39h2.086V5.607c0-2.066 1.262-3.19 3.106-3.19.883 0 1.642.064 1.863.094v2.16h-1.28c-1 0-1.195.48-1.195 1.18v1.54h2.39l-.31 2.42h-2.08V16h4.077c.488 0 .883-.395.883-.883V.883C16 .395 15.605 0 15.117 0" fill-rule="nonzero" fill="#8d99ae"/></svg> diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/svg/focus.svg b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/svg/focus.svg new file mode 100644 index 000000000..ed2c929b4 --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/svg/focus.svg @@ -0,0 +1,11 @@ +<svg id="focus-icon" class="focus-row-icon" width="100%" height="100%" viewBox="0 0 60 60" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linecap:round;stroke-miterlimit:10;"> + <path d="M30.028,1L30.028,11" style="fill:none;stroke:rgb(0,168,138);stroke-width:2px;"/> + <path d="M30.028,11L34.028,7" style="fill:none;stroke:rgb(0,168,138);stroke-width:2px;"/> + <path d="M30.028,11L26.028,7" style="fill:none;stroke:rgb(0,168,138);stroke-width:2px;"/> + <path d="M30.028,59L30.028,49" style="fill:none;stroke:rgb(0,168,138);stroke-width:2px;"/> + <path d="M30.028,49L26.028,53" style="fill:none;stroke:rgb(0,168,138);stroke-width:2px;"/> + <path d="M30.028,49L34.028,53" style="fill:none;stroke:rgb(0,168,138);stroke-width:2px;"/> + <path d="M57.972,29.642L50.738,36.876C39.221,48.393 20.548,48.393 9.031,36.876L2.027,29.872L9.261,22.638C20.778,11.121 39.451,11.121 50.968,22.638L57.972,29.642Z" style="fill:rgb(231,236,237);fill-rule:nonzero;"/> + <circle cx="29.67" cy="29.783" r="11.813" style="fill:rgb(0,131,192);"/> + <path d="M22.857,31C22.305,31 21.857,30.552 21.857,30C21.857,26.14 24.997,23 28.857,23C29.409,23 29.857,23.448 29.857,24C29.857,24.552 29.409,25 28.857,25C26.1,25 23.857,27.243 23.857,30C23.857,30.552 23.41,31 22.857,31Z" style="fill:white;fill-rule:nonzero;"/> +</svg> diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/svg/freebsd.svg b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/svg/freebsd.svg new file mode 100644 index 000000000..842be09a1 --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/svg/freebsd.svg @@ -0,0 +1,3 @@ +<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 1000 1000" enable-background="new 0 0 1000 1000" xml:space="preserve">
+<g><path d="M81.5,647.7C11,409.2,148.6,158.9,388.6,88.9c106.5-31.1,215.5-21.4,309.8,19.8c-4.9,6.9-9.5,14-13.7,21c-46.1-10.7-81.4,3.8-90.2,43.3c-13.9,62.1,42.9,162.8,126.6,224.7c83.7,61.9,162.9,61.7,176.8-0.4c3.5-15.9,2.5-34.4-2.5-54.1c9.7-5.8,19.2-12.3,28.6-19.3c10.9,22.2,20,45.6,27.3,70.1c70.5,238.4-67.1,488.8-307.1,558.8S151.9,886.1,81.5,647.7z M667.1,204.7c0.4-0.4,0.7-0.7,1-1.1C776.9,92.3,912.3,26.4,970.4,56.4c58.1,30.1-25.5,176.7-91.7,256.3c-20.1,20.6-41.2,39.7-62.5,56.8C742.2,343.2,686.1,282.8,667.1,204.7L667.1,204.7z M11,108.5C0.7,28.8,68.9,4.9,163.2,55.2c22.4,11.9,44.3,27,64.7,44.1c-56.2,38.6-104.5,90.4-139.5,154C46.4,206.7,16.9,153.5,11,108.5z"/></g>
+</svg>
diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/svg/functions.svg b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/svg/functions.svg new file mode 100644 index 000000000..717a35686 --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/svg/functions.svg @@ -0,0 +1,14 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<svg width="100%" height="100%" viewBox="0 0 512 512" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:1.41421;"> + <path d="M255.939,511.938C114.811,511.938 0,397.127 0,255.999C0,114.871 114.811,0.061 255.939,0.061C397.067,0.061 511.878,114.872 511.878,256C511.878,397.128 397.066,511.938 255.939,511.938Z" style="fill:rgb(0,131,192);fill-rule:nonzero;"/> + <g transform="matrix(0.971234,0,0,1,3.04003,0)"> + <path d="M136.506,383.997L122.376,383.997C113.154,383.997 105.681,376.524 105.681,367.302C105.681,358.08 113.154,350.607 122.376,350.607L136.506,350.607C159.756,350.607 179.788,334.819 185.212,312.211L227.418,136.345C236.461,98.666 269.841,72.352 308.591,72.352L322.721,72.352C331.943,72.352 339.416,79.825 339.416,89.047C339.416,98.269 331.943,105.742 322.721,105.742L308.591,105.742C285.341,105.742 265.309,121.53 259.885,144.138L217.679,320.004C208.635,357.682 175.256,383.997 136.506,383.997Z" style="fill:white;fill-rule:nonzero;"/> + </g> + <g transform="matrix(0.644932,0,0,0.971786,87.792,130.707)"> + <path d="M129.467,105.742L105.681,105.742C96.459,105.742 90.6,98.269 90.6,89.047C90.6,79.825 96.459,72.352 105.681,72.352L322.721,72.352C331.943,72.352 339.416,79.825 339.416,89.047C339.416,98.269 331.943,105.742 322.721,105.742L308.591,105.742C285.341,105.742 209.181,105.742 209.181,105.742C173.681,105.742 168.217,105.742 129.467,105.742Z" style="fill:white;fill-rule:nonzero;"/> + </g> + <g> + <path d="M345.654,288.717C339.133,282.196 328.567,282.196 322.046,288.717L300.459,310.304L278.873,288.717C272.352,282.196 261.786,282.196 255.265,288.717C248.744,295.233 248.744,305.808 255.265,312.325L276.852,333.912L255.266,355.498C248.745,362.014 248.745,372.59 255.266,379.106C258.527,382.367 262.799,383.998 267.07,383.998C271.341,383.998 275.614,382.367 278.874,379.106L300.461,357.519L322.048,379.106C325.309,382.367 329.581,383.998 333.852,383.998C338.123,383.998 342.396,382.367 345.656,379.106C352.177,372.59 352.177,362.014 345.656,355.498L324.069,333.911L345.656,312.324C352.176,305.808 352.176,295.232 345.654,288.717Z" style="fill:white;fill-rule:nonzero;"/> + </g> +</svg> diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/svg/github-corner.svg b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/svg/github-corner.svg new file mode 100644 index 000000000..29bc57ad3 --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/svg/github-corner.svg @@ -0,0 +1 @@ +<a href="{{ .Site.Params.github_hrepo }}" class="github-corner" aria-label="View source on Github"><svg width="80" height="80" viewBox="0 0 250 250" style="fill:#0594CB; color:#fff; position: absolute; top: 0; border: 0; right: 0;" aria-hidden="true"><path d="M0,0 L115,115 L130,115 L142,142 L250,250 L250,0 Z"></path><path d="M128.3,109.0 C113.8,99.7 119.0,89.6 119.0,89.6 C122.0,82.7 120.5,78.6 120.5,78.6 C119.2,72.0 123.4,76.3 123.4,76.3 C127.3,80.9 125.5,87.3 125.5,87.3 C122.9,97.6 130.6,101.9 134.4,103.2" fill="currentColor" style="transform-origin: 130px 106px;" class="octo-arm"></path><path d="M115.0,115.0 C114.9,115.1 118.7,116.5 119.8,115.4 L133.7,101.6 C136.9,99.2 139.9,98.4 142.2,98.6 C133.8,88.0 127.5,74.4 143.8,58.0 C148.5,53.4 154.0,51.2 159.7,51.0 C160.3,49.4 163.2,43.6 171.4,40.1 C171.4,40.1 176.1,42.5 178.8,56.2 C183.1,58.6 187.2,61.8 190.9,65.4 C194.5,69.0 197.7,73.2 200.1,77.6 C213.8,80.2 216.3,84.9 216.3,84.9 C212.7,93.1 206.9,96.0 205.4,96.6 C205.1,102.4 203.0,107.8 198.3,112.5 C181.9,128.9 168.3,122.5 157.7,114.1 C157.9,116.9 156.7,120.9 152.7,124.9 L141.0,136.5 C139.8,137.7 141.6,141.9 141.8,141.8 Z" fill="currentColor" class="octo-body"></path></svg></a><style>.github-corner:hover .octo-arm{animation:octocat-wave 560ms ease-in-out}@keyframes octocat-wave{0%,100%{transform:rotate(0)}20%,60%{transform:rotate(-25deg)}40%,80%{transform:rotate(10deg)}}@media (max-width:500px){.github-corner:hover .octo-arm{animation:none}.github-corner .octo-arm{animation:octocat-wave 560ms ease-in-out}}</style> diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/svg/github-squared.svg b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/svg/github-squared.svg new file mode 100644 index 000000000..dabc741e0 --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/svg/github-squared.svg @@ -0,0 +1,3 @@ +<svg version="1.1" fill="{{ .fill }}" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="{{ .width }}" height="{{ .height }}" viewBox="0 0 27 32"> +<path d="M9.28 21.44q0.064-0.128-0.064-0.256-0.16-0.128-0.256-0.032-0.064 0.128 0.064 0.224 0.16 0.128 0.256 0.064zM8.768 20.704q-0.096-0.128-0.224-0.096-0.096 0.096 0 0.224 0.128 0.16 0.224 0.096t0-0.224zM8.032 19.968q0.032-0.064-0.096-0.128-0.128-0.032-0.128 0.032-0.064 0.096 0.064 0.16 0.16 0.032 0.16-0.064zM8.416 20.384q0.032 0 0.032-0.064t-0.064-0.096q-0.128-0.128-0.192-0.064t0.032 0.192q0.096 0.096 0.192 0.032zM9.952 21.728q0.032-0.128-0.16-0.192-0.16-0.064-0.224 0.064t0.16 0.192q0.16 0.064 0.224-0.064zM10.688 21.792q0-0.16-0.192-0.16t-0.192 0.16 0.192 0.128 0.192-0.128zM11.392 21.664q-0.032-0.128-0.224-0.096t-0.16 0.16q0.032 0.16 0.192 0.096t0.192-0.16zM22.848 16q0-3.776-2.656-6.464t-6.464-2.688-6.464 2.688-2.688 6.464q0 2.976 1.76 5.376t4.48 3.296q0.32 0.064 0.48-0.096t0.16-0.352q0-0.928-0.032-1.696-0.096 0.032-0.256 0.064t-0.64 0.032-0.864-0.096-0.768-0.352-0.544-0.736q-0.416-1.056-1.024-1.312-0.032-0.032-0.064-0.064l-0.16-0.16t-0.096-0.16 0.064-0.128 0.352-0.064q0.096 0 0.256 0.032t0.544 0.288 0.576 0.64q0.288 0.48 0.672 0.736t0.768 0.256 0.704-0.064 0.512-0.16q0.128-0.864 0.608-1.248-0.896-0.096-1.536-0.32t-1.312-0.704-0.992-1.344-0.352-2.144q0-1.408 0.96-2.464-0.448-1.088 0.096-2.4 0.32-0.128 0.96 0.128t1.088 0.512l0.448 0.288q1.056-0.288 2.304-0.288t2.272 0.288q0.192-0.128 0.512-0.32t0.992-0.448 1.024-0.16q0.512 1.312 0.096 2.4 0.928 1.056 0.928 2.464 0 1.024-0.256 1.792t-0.64 1.248-0.928 0.8-1.12 0.448-1.216 0.224q0.608 0.544 0.608 1.696 0 0.704 0 1.6t-0.032 0.896q0 0.224 0.16 0.352t0.48 0.096q2.752-0.928 4.512-3.296t1.728-5.376zM27.424 7.424v17.152q0 2.112-1.504 3.616t-3.648 1.536h-17.12q-2.144 0-3.648-1.536t-1.504-3.616v-17.152q0-2.112 1.504-3.616t3.648-1.536h17.12q2.144 0 3.648 1.536t1.504 3.616z"></path> +</svg> diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/svg/gitter.svg b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/svg/gitter.svg new file mode 100644 index 000000000..9c2de7da2 --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/svg/gitter.svg @@ -0,0 +1,57 @@ +<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="177.25px" height="177.25px" viewBox="0 0 177.25 177.25" enable-background="new 0 0 177.25 177.25" xml:space="preserve"> + <g id="_x38_MJ9tV.tif" display="none"> + <image display="inline" overflow="visible" enable-background="new " width="118" height="33" id="Layer_0" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHYAAAAhCAYAAAAMLF9eAAAACXBIWXMAAAsSAAALEgHS3X78AAAA +GXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAABOhJREFUeNrsW1toFEkU7ZhGI47v +DYohPlAQxYgL7oKiKIKgPyoKC75gFdFPEQP+iC74IYLih+wqKqIIKr5Ag+ADH4sPVAJGsz4i44PE +aHTcbFaDI4Pj7rmZ06YsuifdGcWasQ4cOlNTPV1dt+6tc293ihLlv2x1HGeck8Hv4OnShsOtjkVe +w6VRp/LzCbZZ5Dm62CmwhrXIs1Dsi0T53BE4xPixGWwqbTieQnsZ/u4HFoNJsB7tSbRL20Cwq9pu +p9gwwwJrwPH8uwrcAT4H54OzwJ5gHbiex0ngCnCQ1m5hmGFHKGr5Nj1RIB5bAfbh5+48iseOBodq +7RZ2j7WwhrXodCj+pug/dnwFQ7se0uNgzd93qlt9zvGE3b8i9tAnhTZV1EVBI0VgWSe2leYcrt8m +PHFukvekitggxPX5cA006BQcFnF/70v1rUJu4AX6ncNxP26oSfnOE3aXFLGniroo2EzxVwmOjHhu +VQ7X14WnKmKD0Ir5uIbjHho57Rpm1Dk4rOSN9AD/Au9zFQtKOMkTwHdOplKmGtYTdo9DeMhn3g2m +IgzV88K0eJcyvqC+EnkGhOibTcQ2MhKkA+5DrjFRFiLmsdo1yKhyA8tptNeg1LBPgy+VmylmmjWE +4bElxE9fYfjWDV1J776qeJdfKF7vE4pn0QvfBqR1zbwHFfUhU8Ak++o4CJ7kNVXI2KYrc7dMFqpJ +HjsP/BH8CG4Cj4KvJKz4LIJ79N53Hf0ozm/mROu/keCCke/uod/TLKFRP3ccPVyMUIdza0LunWH7 +Bu35tTi/xWc8cXrtYnAmuNs1xFtlUNPAH8Cz4HmKj/8CjJWKGDoLGpiPBDXHDIbuElPSnWHcg2Sh +nQKfBRnVIhCiE95zuyoyxbCepE8y9NnnwdExCuxlWrrTnStNREMLvPVjAU68LN5dCJnZFm3biw5+ +OXoI4bmAKVWtKH3T8tikj5wPupGYlwL4CSwDEQuRj2Z70eEn0RW4d10wjgF/VoSnqOeGfH1bwkva +NwekACYiTrUf76BPkLfOYLFDj2a9GYKfgPvAQ+A/Lt3/BDv92YkE2sNNcAMvkqA3RUXY8p2XtJf6 +VKZMhRisOod0R4z+SMkGhnMOYrShpId3vQjmsgjgKqEwlcOFnzmZBwvpMDmmz0otl4oOwk1XpjQW +7ThD473hZ1nUG8HJNLKkh4lP4ulLvZEob1fksCjqGE6LOdAbPpWg7x1SSKn3ChRY/A04bKMzSIie +h7adnnG7GDToKzxKIX8CBmkf1GcvSqRZyDnCSPurCCiJdsYYloM8QM+VELMWXI5BDgaLNUXcmcdo +hWpcibZ7wVvUJ6sZlo16bCf13y3gOifzpKKSuVktjPlWEVdl/L4Q89hP6hlGi4f8XVHDfziZV5Jk +G1uEa2xzDVp9kqOJQJA9ZCE4m/mZGPGDUsgQ734IXgcvOPlTpQqTxwr6OB0/WP8s2mHevJAsT3iW +glWuaaEFg7xMWb+bRo1pBQxZoa+kO/gS53zQKjfHnMwjs6YOLhelrw7JJB5wwcVD9i2JkBapv7mK +xg7McTlv251Mnb2bXK8o6NcT5XMvOu3/+iGJ729Qvk/RvpUbtVxMcrIlaK/5GobGYGPadtGWRuVJ +pembwujKU9SaqUU77FuK1rAWhRKKvU3bobho0kSH67PRWxiC/wUYAJblttDygGF7AAAAAElFTkSu +QmCC" transform="matrix(0.9915 0 0 0.9697 1052.3047 715.1367)"> + </image> + </g> + <g id="VZchZG.tif" display="none"> + <image display="inline" overflow="visible" enable-background="new " width="32" height="32" id="Layer_0_1_" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAACXBIWXMAAAsSAAALEgHS3X78AAAA +GXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAIhJREFUeNpiZAACC2PbM4x//0gx +0BH8Z2Z5duLsYRNGkOUggYFwAIhmobfFMACzl4lhgMGoA0YdMOoAvA5wcnX5ffTc0bMgTA2x0SgY +dcCoA0YdgA2w4JPct3sPKxAbk2MwsXpHo2DUAaMOYLQ0sHw2GgUjuyiGdRIHqnPKBOoiD5TvQXYD +BBgAmlpH8O1Ct20AAAAASUVORK5CYII=" transform="matrix(1 0 0 1 792 546)"> + </image> + </g> + <g id="jxJjd2.tif" display="none"> + <image display="inline" overflow="visible" enable-background="new " width="64" height="64" id="Layer_0_2_" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAACXBIWXMAAAP/AAAD/wGuK+TeAAAA +GXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAnFJREFUeNrsW79LHEEUntE9KzHk +clwjeI2FTapACIhdsDgkhMRCbSzCWVkEUoR0KUPaFMJZiH+AIhaHEBBMGSGNf4Bco0fCVYIG0X35 +5n7OXW7hZHd25/bNg+9m7it2bt59772Z3R0pNKvnN16iWQUWgDwwLtJjd8A58B3YAqpPfpdJapP/ +gqYEZEX67QLYBI5kc/Klr2jeMZl8266AN7KeK71Apww8Ffxsfwwfr4FpwdMWPSFpFp1Jpg6YVArw +AMnUAUI54B4grg7wGM+95QCf9fwbIcBcAZKcApjnAN8pwDnAgE0dfhTZ+k4Dmfk5pwBrcwAZqgL6 +VdUYZGm1cQqI459xCtDs0cEnkfuz24CeHB/Kj+BmiAzzLgdYthfQr6v67e9R8aMVAhQg3aj4MFWA +9fSdAoTnS3NT1vvtcaLiXRm0XQG6qTEGjRMVHzIJkogjCLrjRMWP6G4wKt6VQftDoF+4ZIwPGQKG +Zi17+51xouJtVwD9J12KlLdfAf0/XJrjQy6EzFht+bNV14m9DA4THL1ljYyWu+CVYMyPx/uXNf7A +WO/yxh2Q5K3KOOt9okkw0AEBZY0MlDsLdoN2asBL+m59PJvehJfCYRZIMeSAmN8PkHq580Vn/CDe +vAJkgvKXYtD4QXwqQmDQ/m54PgVJkAJyPSW0DpBnM6/20C4BE4Khebxfkks8BzgFJG7u8bgLAe4K +cC9LNw9Hsj0y4/nuyAxV0V4zXQn+VSFQAS6ZCuBHI/ZPC8VtNCuC1/lBFfZvWw9G6D0+Mopg4oQb +4ANw3JP9fxaKa2jWgWfA45StFFWyrwEnwDfg1/Nq5fafAAMAE6xkAvixwqwAAAAASUVORK5CYII=" transform="matrix(2.7695 0 0 2.7695 86.7505 49.2495)"> + </image> + </g> + <path d="M159.25,0H18C8.059,0,0,8.059,0,18v141.25c0,9.941,8.059,18,18,18h141.25c9.941,0,18-8.059,18-18V18 + C177.25,8.059,169.191,0,159.25,0z M69.25,102.5H61v-61h8.25V102.5z M85.75,135.75H77.5V55.5h8.25V135.75z M102.5,135.75h-8.25V55.5 + h8.25V135.75z M119,102.5h-8.25v-47H119V102.5z" /> +</svg> diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/svg/gme.svg b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/svg/gme.svg new file mode 100644 index 000000000..9ab114aa3 --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/svg/gme.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 13000 13920" xmlns="http://www.w3.org/2000/svg" fill-rule="evenodd" clip-rule="evenodd" stroke-linejoin="round" stroke-miterlimit="1.414"><g fill="#C3DEF3" fill-rule="nonzero"><path d="M10977 10933c-11-10-8-111 3-118 12-8 30 36 30 74 0 29-21 56-33 44zM1865 10648c-9-22-2-68 10-71 14-3 19 63 6 76-7 7-12 5-16-5zM10965 10459c-9-27 0-324 10-322 6 2 11 13 11 25 1 13 5 65 9 115 6 67 4 97-4 107s-9 16-1 21c15 9 12 41-5 55-12 10-16 10-20-1zM1875 10157c-9-22-2-62 10-60 6 1 11 14 13 29 4 32-14 56-23 31zM1880 9905c-10-12-11-24-4-43 13-37 28-34 32 7s-10 58-28 36zM10955 9888c-10-24-1-208 9-211 12-3 17 24 19 120 1 54-2 86-10 94-10 10-14 9-18-3zM1891 9656c-9-11-11-26-5-51 12-50 28-48 32 4 4 49-8 70-27 47zM6867 9593c-4-3 1-16 12-27 11-12 29-40 41-64 15-29 26-40 33-33 6 6 1 24-16 53-28 49-60 81-70 71zM10945 9547c-10-23-2-152 9-152 12 0 18 29 19 93 1 54-17 90-28 59zM6006 9508c-26-40-46-97-37-103 6-3 23 22 39 55 28 60 27 92-2 48zM1901 9456c-14-17-3-96 14-99 13-3 19 93 7 105-5 5-14 3-21-6zM10936 9303c-10-10-7-121 4-128 16-10 31 43 24 86-7 40-16 54-28 42zM1908 9266c-8-20-8-32 0-52 16-34 32-21 32 26s-16 60-32 26zM1919 9103c-7-19-7-34 0-51 15-32 31-18 31 28 0 48-16 61-31 23zM10926 9093c-10-10-7-101 3-108 17-10 32 33 25 70-6 36-16 49-28 38zM1930 8954c-11-29-4-56 15-58 14-1 19 64 6 77-7 7-14 1-21-19zM10916 8923c-9-10-7-91 3-97 17-11 30 20 24 57-6 38-15 52-27 40zM1945 8836c-3-9-7-23-10-32-6-19 13-46 26-38 12 7 11 71-1 79-6 3-12-1-15-9zM7448 8844c-4-3 4-27 17-53 34-66 48-104 46-123-1-9 3-19 9-23 13-8 24 20 14 37-4 7-9 22-10 34-4 41-64 141-76 128zM5429 8836c-4-16-7-26-9-31-1-3-3-8-5-12-1-5-5-16-10-26-10-25 8-43 24-23 9 10 9 16 1 21s-8 11 1 21c6 8 8 14 4 14s-2 6 4 14c8 10 9 16 1 21-5 3-11 4-11 1zM10904 8747c-7-20-2-47 11-50 14-3 19 43 6 56-7 7-12 6-17-6zM1955 8706c-3-9-7-22-9-30-5-16 17-40 27-29 11 10 8 61-3 68-6 3-12-1-15-9zM5397 8714c-10-11-9-92 2-99 12-7 31 26 31 52 0 24-23 57-33 47zM5404 8576c-4-10-2-22 4-28 8-8 13-7 18 6 4 10 2 22-4 28-8 8-13 7-18-6zM1961 8567c-9-11-8-17 4-27s16-9 21 5c9 23-10 40-25 22zM5415 8520c-4-6-1-17 5-25 7-8 9-15 5-15s-2-7 5-15 9-15 5-15-2-7 5-15 9-15 6-15c-4 0-2-9 4-20s15-18 21-15c5 4 4 15-3 28-7 12-13 25-14 30-1 4-3 9-4 12s-3 9-4 14c0 5-4 12-8 16s-4 13-2 20c7 16-12 29-21 15zM7515 8518c-3-8-5-19-4-24s0-16-4-24c-3-8-11-33-18-55-15-51-64-148-100-202-16-23-25-44-20-48 25-15 170 258 160 301-1 5 1 17 6 27 4 11 3 23-3 29-8 8-13 7-17-4zM5506 8291c-6-9 60-109 102-153 44-47 43-19-1 35-23 29-53 69-65 90-25 40-28 42-36 28zM7286 8091c-38-38-64-71-59-74s40 25 77 62c38 38 64 71 59 74s-40-25-77-62zM5686 8071c-5-8 15-28 83-84 16-12 20-22 13-30-11-13-13-96-4-112 4-5 8-18 9-28 4-27 56-99 98-136 29-25 161-100 180-102 2 0 21-7 40-15 20-8 40-12 45-9s12 0 15-6c4-5 13-8 21-5 7 3 16 1 19-5 4-5 12-9 18-8 7 1 20-1 30-5 21-10 50 0 42 15-4 5-17 9-28 7-12-1-28 1-35 6-7 4-16 5-19 2s-12-1-19 4c-6 6-16 10-20 9-5-1-22 3-38 10-16 6-36 13-45 14-31 6-161 77-197 109-58 51-98 131-98 198 0 31 4 62 9 70 5 9 0 19-16 32-13 10-41 32-61 48-20 17-39 26-42 21zM7089 7950c-54-28-56-30-55-67 1-46 21-56 21-11 0 28 6 35 45 56 53 28 65 38 53 45-4 3-33-8-64-23zM7025 7810c-3-5-4-10 0-10 3 0-6-18-20-40-13-21-20-42-15-45 9-6 40 34 44 57 1 7 5 18 9 25 4 6 3 14-2 17-5 4-12 2-16-4zM6941 7681c-19-16-30-31-24-34 5-3 25 6 43 22 19 15 29 30 24 33-5 4-25-6-43-21zM6860 7630c-19-11-57-27-85-36-27-9-55-21-61-25-6-5-14-6-17-2-4 3-13 1-20-5-8-7-17-9-20-6-3 4-14 3-24-1s-28-7-40-6c-11 1-24-3-28-8-8-15 21-25 43-16 9 5 24 7 34 6 9-1 19 3 23 9 3 6 11 8 16 5 5-4 14-3 21 1s23 9 36 10c38 4 174 72 167 84s-3 13-45-10zM6332 7539c-30-11-19-29 17-29 34 0 44 9 30 27-13 15-16 15-47 2zM6485 7530c-8-13 20-24 41-16 20 8 9 26-16 26-10 0-22-5-25-10zM3405 5920c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM9275 5861c-6-11 29-33 39-24 7 7-12 33-25 33-4 0-10-4-14-9zM3424 5845c-9-23 10-40 25-22 9 11 8 17-4 27s-16 9-21-5zM9337 5804c-3-3-2-18 3-33 5-17 3-42-5-64-18-52 0-56 25-6 19 35 20 45 9 70-12 31-23 42-32 33zM3385 5751c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM9215 5631c-3-5-2-12 3-15 12-7 47-1 47 9 0 12-43 16-50 6zM10431 5446c-7-8-8-17-3-20 6-3 15 1 21 8 7 8 8 17 3 20-6 3-15-1-21-8zM10548 5144c-10-9 63-115 74-108 5 3-1 22-13 42-28 47-53 74-61 66zM2977 5053c-4-6 11-27 32-47 21-21 41-34 44-29 4 6-11 27-32 47-21 21-41 34-44 29zM9836 5021c-10-11-13-22-8-25s17 3 26 13c10 11 13 22 8 25s-17-3-26-13zM9786 4981c-10-11-13-22-8-25s17 3 26 13c10 11 13 22 8 25s-17-3-26-13zM3076 4952c-5-8 43-57 130-136 18-15 34-23 38-18 3 5-32 44-79 86-46 42-86 72-89 68zM9653 4883c-117-85-131-121-17-41 101 70 139 104 128 110-5 3-55-28-111-69zM10677 4914c-3-3 3-26 14-50 10-25 26-71 35-102 8-31 18-64 21-72 4-8 5-19 4-24s1-16 4-24c4-11 8-12 20-2s13 16 4 27c-7 7-13 29-15 47-3 36-60 193-73 201-5 2-11 2-14-1zM3256 4792c-3-6 1-15 8-21 8-7 17-8 20-3 3 6-1 15-8 21-8 7-17 8-20 3zM9373 4698c-73-44-130-85-127-90 6-10 49 13 186 100 48 30 85 58 82 63-7 11 10 20-141-73zM3296 4761c-6-9 64-65 113-91 13-6 44-27 68-46 25-19 49-31 55-28 11 7 13 5-63 62-31 23-59 42-64 42-4 0-29 16-55 35-27 20-51 31-54 26zM10106 4681c-3-5 11-44 31-87 20-44 38-82 39-86 1-5 3-10 4-13s4-9 5-15c1-5 3-11 5-12 1-2 3-13 4-26 3-27 21-48 29-35 3 5-1 23-9 39-9 16-15 30-15 32 1 1 0 4 0 7-1 3-3 10-4 15-1 6-3 11-4 13-2 1-4 11-6 23-5 26-62 154-69 154-3 0-7-4-10-9zM2565 4615c-82-40-101-42-131-14-13 12-24 16-28 11-7-12 49-62 70-62 25 0 175 80 169 90-7 12 3 15-80-25zM10267 4643c-3-5 5-28 16-53s21-48 21-52c1-5 4-8 9-8 6 0 9 5 6 13 0 1-2 12-5 25-4 24-32 82-39 82-2 0-6-3-8-7zM3546 4591c-6-9 81-60 231-135 40-20 75-32 78-26 3 5-23 24-57 41-35 17-104 54-155 81-50 27-94 45-97 39zM9043 4516c-68-34-123-61-123-59s-14-4-30-12c-17-9-28-20-25-25 4-6 18-4 35 5s32 15 35 15c18-1 245 122 240 130-8 12 10 19-132-54zM10755 4509c-3-10-5-23-4-30 5-32-53-147-102-202-22-25-35-48-30-51 23-15 139 152 145 210 1 12 8 29 14 37 9 10 8 18-2 33-13 17-15 17-21 3zM3122 4415c-36-51-26-72 11-23 34 47 38 56 29 62-5 3-23-15-40-39zM2746 4441c-6-8 5-20 31-35 23-13 22 12-2 28-13 9-26 12-29 7zM2831 4426c-7-8-8-17-3-20 6-3 15 1 21 8 7 8 8 17 3 20-6 3-15-1-21-8zM10305 4404c-11-9-30-13-43-11-30 6-38-9-12-23 25-13 51-6 74 19 22 24 8 34-19 15zM3975 4380c-3-6 4-14 17-19s53-21 90-36c37-14 73-27 80-29 7-1 19-5 26-9 6-5 12-5 12-1 0 3 6 1 14-5 10-8 16-9 21-1 3 5 4 11 1 11-16 4-26 7-31 9-3 1-8 3-12 5-5 1-24 9-43 17-41 19-162 68-166 68-2 0-6-5-9-10zM8635 4344c-60-25-121-50-135-56s-28-12-32-12c-5-1-8-4-8-8 0-7 5-10 13-7 1 0 12 2 24 5 41 7 263 99 264 109 1 17-15 14-126-31z"/><path d="M3024 4299c-32-34-84-78-114-99-54-36-158-94-172-95-5 0-8-3-8-7 0-7 5-10 13-7 1 0 13 3 27 5 48 9 166 89 249 169 46 45 80 85 74 88-5 3-36-21-69-54zM10580 4220c-8-5-37-17-65-26-27-8-57-18-65-21s-27-5-42-4c-14 1-29-3-33-8-9-16 37-31 53-18 7 5 26 11 41 12 40 3 144 52 136 65-7 12-6 12-25 0zM10075 4211c-3-6 4-15 15-21s20-8 20-4c0 3 7 1 15-6s15-9 15-5 7 2 15-5c9-7 18-10 22-7 3 4 12 2 19-4s18-8 24-4c14 9 1 28-16 21-7-3-16-1-20 5-3 6-12 8-19 5-7-2-16-2-20 2s-10 7-13 7c-4 1-17 6-29 13-13 7-24 8-28 3zM4505 4200c-3-5-4-11-1-11 13-3 22-6 36-12 34-15 153-46 161-42 4 3 11 0 14-6 4-5 13-8 21-5 7 3 16 1 20-5 3-6 12-8 20-5 7 3 16 1 20-5 3-6 12-8 19-5 7 2 17 0 23-6 12-12 35-1 26 13-3 6-12 8-20 5-7-3-16-1-20 5-3 6-12 8-20 5-7-3-16-1-20 5-3 6-12 8-20 5-7-3-16-1-20 5-3 6-12 8-19 5-7-2-16-1-21 4-10 9-117 41-149 44-12 1-26 5-32 9s-14 3-18-3zM8226 4201c-4-6-13-8-20-5-8 3-17 0-21-5-3-6-10-9-15-6s-21 0-37-6c-15-7-40-13-54-15-15-2-39-9-55-15-16-7-34-11-41-10-6 1-14-3-18-8-3-6-12-8-19-5-17 7-30-12-16-21 6-4 17-2 24 4s16 8 19 5 11-2 18 2 25 9 40 11c15 1 39 8 55 14 16 7 32 12 36 11s20 3 35 10c15 6 33 12 38 13 6 1 13 3 18 5 4 1 12 3 17 4 11 1 15 15 7 22-3 3-8 1-11-5zM2226 4192c-12-19 90-97 139-106 6-1 15-5 22-9 6-4 14-3 18 3 3 5 4 11 1 11-3 1-9 2-13 3-25 6-103 53-129 78-18 16-34 25-38 20zM10246 4161c-3-5 0-13 7-19 15-12 61 3 52 18-8 12-52 13-59 1zM5455 4021c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM7365 4020c-8-12 20-24 35-15 6 3 8 11 5 16-8 12-32 12-40-1zM5526 4011c-3-5 0-13 7-19 15-12 61 3 52 18-8 12-52 13-59 1zM7285 4010c-8-13 20-24 41-16 20 8 9 26-16 26-10 0-22-5-25-10zM5615 4000c-8-13 20-24 41-16 20 8 9 26-16 26-10 0-22-5-25-10zM7205 4000c-8-13 20-24 41-16 20 8 9 26-16 26-10 0-22-5-25-10zM5696 3991c-3-5 0-13 7-19 15-12 61 3 52 18-8 12-52 13-59 1zM7105 3990c-10-16 45-33 61-19 8 6 11 15 8 20-7 12-61 11-69-1zM5775 3981c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM7005 3981c-10-17 33-33 55-21 27 14 16 30-20 30-16 0-31-4-35-9zM5835 3970c-3-5 4-15 17-21 27-12 83 4 73 21-8 13-82 13-90 0zM6875 3970c-11-17 40-34 64-21 12 7 19 16 16 22-8 12-72 12-80-1zM6005 3961c-7-12 1-17 43-26 33-7 67 9 56 26-7 12-91 12-99 0zM6696 3962c-3-6 1-15 10-23 17-14 84-2 87 16 2 13-89 19-97 7z"/></g><g fill="#B5B5B5" fill-rule="nonzero"><path d="M6296 9514c-41-15-70-34-62-41 6-6-37-48-49-48-5 0-9-10-7-21 2-13-4-24-13-28-9-3-14-10-10-15 3-5 1-13-5-16-6-4-8-15-5-25s1-21-4-25c-6-3-8-19-5-34 4-16 1-32-5-35-14-9-15-83-1-91 13-8 13-82-1-90-7-5-2-15 13-29 12-11 23-19 24-16 0 3 8-1 17-9 10-7 17-10 17-6s7 2 15-5 15-9 15-5 7 2 15-5 15-9 15-5 7 2 15-5 15-9 15-5 7 2 15-5c9-7 18-10 22-7 3 4 13 1 21-5 12-10 19-7 38 17 20 24 23 37 18 68-4 24-1 43 6 52 7 8 11 15 9 16-2 0-13 2-24 4-77 14-127 203-91 339 13 47 23 65 38 69 11 3 17 10 13 16-8 13-10 13-59-5zM6546 9511c-10-11-16-27-12-36 8-21 29-8 23 15-2 9 1 17 7 16 13-1 21 17 9 21-5 2-18-5-27-16zM6427 9443c-9-15-2-88 8-88 12 0 17 83 5 90-5 3-11 2-13-2zM6766 9391c-4-5-2-12 4-16s8-10 5-15-1-11 4-14c5-4 12-2 15 3 4 5 2 12-4 16s-8 10-5 15 1 11-4 14c-5 4-12 2-15-3zM6534 9326c-8-21 3-49 16-41 5 3 10 15 10 25 0 25-18 36-26 16zM6415 9250c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM6525 9210c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM6805 9200c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2z"/><path d="M6405 9170c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM6515 9130c-4-6-3-34 0-64 5-35 3-56-4-60-18-11-13-64 7-74 23-12 157-24 166-15 4 5 30 9 58 10s55 6 61 12c12 12 3 16-54 25-51 9-117 56-167 120-43 56-56 65-67 46zM6814 9067c-7-20-2-47 11-50 14-3 19 43 6 56-7 7-12 6-17-6zM9555 9030c-3-5 0-13 8-16 23-8 82 0 82 11 0 14-82 19-90 5zM9725 9030c-3-5 0-13 8-16 23-8 82 0 82 11 0 14-82 19-90 5zM9415 9020c-8-12 20-24 35-15 6 3 8 11 5 16-8 12-32 12-40-1zM9895 9020c-8-12 20-24 35-15 6 3 8 11 5 16-8 12-32 12-40-1zM9325 9010c-8-12 20-24 35-15 6 3 8 11 5 16-8 12-32 12-40-1zM9975 9011c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM3125 9000c-8-12 20-24 35-15 6 3 8 11 5 16-8 12-32 12-40-1zM3525 9000c-8-12 20-24 35-15 6 3 8 11 5 16-8 12-32 12-40-1zM9255 9000c-8-12 20-24 35-15 6 3 8 11 5 16-8 12-32 12-40-1zM10035 9001c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM3045 8991c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM3625 8990c-8-12 20-24 35-15 6 3 8 11 5 16-8 12-32 12-40-1zM9205 8991c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM10085 8991c-6-11 13-26 22-17 3 3 12 1 20-6 7-6 16-8 20-5 3 4 12 2 19-4s18-8 24-4c14 9 1 28-16 21-7-3-16-1-20 5-3 6-12 8-20 5-7-3-16-1-19 4-8 13-22 13-30 1zM3705 8981c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM9146 8981c-4-6-13-8-20-5-17 6-31-12-16-21 5-3 16-3 23 2 6 4 17 8 22 8 14 0 19 19 7 23-6 2-13-1-16-7zM2925 8971c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM3765 8971c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM3825 8961c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM2835 8951c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM3915 8941c-7-12 12-24 24-16 5 3 13 0 16-6 4-5 13-8 21-5 7 3 16 1 19-5 4-5 11-7 16-3 5 3 7 10 3 15-3 5-9 7-14 4s-12 0-15 6c-4 5-13 8-21 5-7-3-16-1-19 4-8 13-22 13-30 1zM8955 8930c-4-6-10-8-15-5s-11 1-14-4c-4-5-2-12 3-15 5-4 12-2 16 4s10 8 15 5 11-1 14 4c4 5 2 12-3 15-5 4-12 2-16-4zM10315 8921c-3-6 3-15 14-21 12-6 22-6 26-1 3 6-3 15-14 21-12 6-22 6-26 1zM8587 8789c-32-16-55-34-52-39 3-6 32 3 66 20 33 17 57 35 54 40-3 6-7 10-8 10-1-1-28-14-60-31zM2491 8786c-7-8-8-17-3-20 6-3 15 1 21 8 7 8 8 17 3 20-6 3-15-1-21-8zM10576 8762c-3-5 3-17 13-26 11-10 22-13 25-8s-3 17-13 26c-11 10-22 13-25 8zM2441 8746c-7-8-8-17-3-20 6-3 15 1 21 8 7 8 8 17 3 20-6 3-15-1-21-8zM6615 8741c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM8471 8726c-7-8-8-17-3-20 6-3 15 1 21 8 7 8 8 17 3 20-6 3-15-1-21-8zM4495 8721c-3-6 3-15 14-21 12-6 22-6 26-1 3 6-3 15-14 21-12 6-22 6-26 1zM6505 8721c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM6145 8711c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM6055 8701c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM2306 8621c-43-43-74-81-69-84s44 29 87 72 74 81 69 84-44-29-87-72zM8369 8662c-29-24-11-36 20-13 14 11 19 21 13 25-5 3-20-2-33-12zM4676 8612c-3-6 1-15 8-21 8-7 17-8 20-3 3 6-1 15-8 21-8 7-17 8-20 3zM8291 8606c-7-8-8-17-3-20 6-3 15 1 21 8 7 8 8 17 3 20-6 3-15-1-21-8zM8251 8576c-7-8-8-17-3-20 6-3 15 1 21 8 7 8 8 17 3 20-6 3-15-1-21-8zM7325 8570c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM4756 8552c-3-6 1-15 8-21 8-7 17-8 20-3 3 6-1 15-8 21-8 7-17 8-20 3zM10786 8552c-3-5 3-17 13-26 11-10 22-13 25-8s-3 17-13 26c-11 10-22 13-25 8zM8181 8516c-13-13-18-26-13-30 5-3 19 5 31 18 13 13 18 26 13 30-5 3-19-5-31-18zM6046 8512c-3-5 5-19 18-31 13-13 26-18 30-13 3 5-5 19-18 31-13 13-26 18-30 13zM2181 8486c-7-8-8-17-3-20 6-3 15 1 21 8 7 8 8 17 3 20-6 3-15-1-21-8zM4826 8492c-3-6 1-15 8-21 8-7 17-8 20-3 3 6-1 15-8 21-8 7-17 8-20 3zM10846 8482c-3-6 1-15 8-21 8-7 17-8 20-3 3 6-1 15-8 21-8 7-17 8-20 3zM2141 8436c-7-8-8-17-3-20 6-3 15 1 21 8 7 8 8 17 3 20-6 3-15-1-21-8zM7992 8331c-27-37-13-49 18-16 16 17 20 29 14 35-7 7-18 0-32-19zM6645 8331c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM5016 8302c-3-6 1-15 8-21 8-7 17-8 20-3 3 6-1 15-8 21-8 7-17 8-20 3zM10976 8302c-3-6 1-15 8-21 8-7 17-8 20-3 3 6-1 15-8 21-8 7-17 8-20 3zM1996 8229c-19-29-33-56-30-61 8-13 18-3 52 51 41 67 22 76-22 10zM7936 8261c-10-11-13-22-8-25s17 3 26 13c10 11 13 22 8 25s-17-3-26-13zM5066 8242c-3-6 1-15 8-21 8-7 17-8 20-3 3 6-1 15-8 21-8 7-17 8-20 3zM7901 8216c-7-8-8-17-3-20 6-3 15 1 21 8 7 8 8 17 3 20-6 3-15-1-21-8zM6846 8212c-3-6 1-15 8-21 8-7 17-8 20-3 3 6-1 15-8 21-8 7-17 8-20 3zM5096 8202c-3-6 1-15 8-21 8-7 17-8 20-3 3 6-1 15-8 21-8 7-17 8-20 3zM7852 8148c-41-62-43-66-33-72 4-3 25 19 45 49 19 30 31 57 26 60s-22-14-38-37zM5127 8164c-9-9 44-85 54-78 5 3 1 19-8 35-21 36-38 51-46 43zM1920 8091c-17-34-26-63-20-66 5-3 23 21 40 54 17 34 26 63 20 66-5 3-23-21-40-54zM11125 8030c-8-13 13-52 25-45 9 6 2 43-11 50-4 3-10 1-14-5zM7715 7911c-14-29-21-52-15-56 5-3 21 17 35 44 14 29 21 52 15 56-5 3-21-17-35-44zM1835 7905c-10-25-12-42-6-48s15 4 26 28c10 25 12 42 6 48s-15-4-26-28zM5267 7934c-9-9 42-106 53-99 10 6-14 72-34 93-7 7-15 10-19 6zM11175 7910c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM11195 7860c-3-5-3-16 2-22 4-7 9-22 10-32 2-11 8-25 14-33 6-7 8-13 4-13s-2-6 4-13c6-8 8-16 6-19-3-3 0-18 6-34 7-16 11-34 10-41-1-6 3-14 8-18 6-3 8-12 5-19-7-17 12-30 21-16 4 6 2 17-4 24s-8 16-4 19c3 4 1 13-5 20-7 8-9 16-7 19 3 3 0 18-6 34-7 16-13 32-14 37-2 4-4 10-5 15-1 4-2 11-1 15s-4 18-11 30-11 27-10 34c3 15-15 26-23 13zM7665 7805c-10-25-12-42-6-48s15 4 26 28c10 25 12 42 6 48s-15-4-26-28zM1795 7796c-8-20-15-39-14-43 1-5 0-11-1-15-1-5-3-11-4-15-1-5-7-17-13-29-7-12-14-36-16-55s-8-42-12-52-5-21-1-24c3-3 1-12-5-19s-8-18-4-24c9-14 28-1 21 16-3 7-1 16 5 20 5 3 9 13 8 22-1 10 3 30 10 46 6 16 13 43 16 60 2 17 5 32 6 34 1 1 2 5 4 10 1 4 7 21 14 37 20 51 20 54 10 60-5 4-16-10-24-29zM7639 7726c-4-16-7-26-9-31-1-3-4-9-5-15-1-5-4-12-5-15s-4-9-5-15c-1-5-4-12-5-15s-3-8-5-12c-1-5-7-21-14-37-6-16-9-31-6-34 2-3 0-11-6-18s-8-18-4-24c8-13 26-3 24 13-1 7 3 25 10 41 6 16 9 31 6 34-2 3 0 11 6 19 6 7 8 13 4 13s-2 7 5 15 9 15 5 15-2 7 5 15 9 15 5 15-2 6 4 14c8 10 9 16 1 21-5 3-11 4-11 1zM5396 7622c-3-6-1-23 6-39 6-15 10-33 9-40-1-6 3-14 8-18 6-3 8-12 5-19-3-8-1-17 5-20 6-4 8-13 5-20-3-8-1-17 5-20 6-4 8-13 5-20-3-8-1-17 5-20 14-9 25 14 13 26-6 6-8 16-6 23 3 7 1 16-5 19-6 4-8 13-5 20 3 8 0 17-5 21-6 3-9 11-6 16 4 5 3 14-1 21s-9 23-10 37c-3 29-19 47-28 33zM11275 7570c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM11285 7520c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM1714 7486c-4-10-2-22 4-28 8-8 13-7 18 6 4 10 2 22-4 28-8 8-13 7-18-6zM7563 7474c-12-24-11-49 2-49 6 0 10 5 10 10 0 6 4 16 9 23 5 8 4 18-2 24-7 7-13 4-19-8zM11295 7470c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM1705 7430c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM7544 7386c-4-10-2-22 4-28 8-8 13-7 18 6 4 10 2 22-4 28-8 8-13 7-18-6zM5455 7380c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM1695 7360c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM5464 7326c-4-10-2-22 4-28 8-8 13-7 18 6 4 10 2 22-4 28-8 8-13 7-18-6zM7534 7326c-8-21 3-49 16-41 5 3 10 15 10 25 0 25-18 36-26 16zM11314 7306c-4-10-2-22 4-28 8-8 13-7 18 6 4 10 2 22-4 28-8 8-13 7-18-6zM1684 7266c-8-21 3-49 16-41 5 3 10 15 10 25 0 25-18 36-26 16zM7525 7257c-9-22-2-62 10-60 6 1 11 14 13 29 4 32-14 56-23 31zM5475 7250c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM5484 7136c-4-10-2-22 4-28 8-8 13-7 18 6 4 10 2 22-4 28-8 8-13 7-18-6zM7515 7139c-10-25-1-239 10-242 14-3 19 233 6 246-7 7-12 5-16-4zM11314 6906c-4-10-2-22 4-28 8-8 13-7 18 6 4 10 2 22-4 28-8 8-13 7-18-6zM1684 6896c-4-10-2-22 4-28 8-8 13-7 18 6 4 10 2 22-4 28-8 8-13 7-18-6zM5484 6876c-4-10-2-22 4-28 8-8 13-7 18 6 4 10 2 22-4 28-8 8-13 7-18-6zM7525 6837c-9-22-2-62 10-60 6 1 11 14 13 29 4 32-14 56-23 31zM1695 6800c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM5475 6760c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM7534 6746c-8-21 3-49 16-41 5 3 10 15 10 25 0 25-18 36-26 16zM11294 6746c-4-10-2-22 4-28 8-8 13-7 18 6 4 10 2 22-4 28-8 8-13 7-18-6zM5465 6690c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM11285 6690c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM1714 6676c-3-8-2-21 2-28 5-7 7-20 6-30-2-9 2-19 7-22 6-4 8-13 5-20-3-8 0-17 5-21 6-3 9-10 6-15-5-9 42-167 71-236 9-20 19-33 24-28 4 5-9 60-30 122-52 155-52 156-51 169 1 6-3 14-8 17s-7 15-4 25 0 22-5 25c-6 3-8 15-5 25 6 23-15 38-23 17zM7544 6676c-4-10-2-22 4-28 8-8 13-7 18 6 4 10 2 22-4 28-8 8-13 7-18-6zM5454 6636c-4-10-2-22 4-28 8-8 13-7 18 6 4 10 2 22-4 28-8 8-13 7-18-6zM11276 6641c-4-6-5-15-1-20 3-5 0-13-6-16-5-4-8-13-5-21 3-7 1-16-5-20-6-3-8-12-5-19 2-7 0-17-6-23-12-12-1-35 13-26 6 3 8 12 5 20-3 7-1 16 5 20 6 3 8 12 5 20-3 7-1 16 5 20 6 3 8 12 5 19-2 7 1 18 7 24 8 8 8 14 0 22s-13 8-17 0zM7555 6620c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM5446 6581c-4-6-5-15-1-20 3-5 0-13-6-16-5-4-8-13-5-21 3-7 1-16-5-20-6-3-8-12-5-19 2-7 0-17-6-23-12-12-1-35 13-26 6 3 8 12 5 20-3 7-1 16 5 20 6 3 8 12 5 20-3 7-1 16 5 20 6 3 8 12 5 19-2 7 1 18 7 24 8 8 8 14 0 22s-13 8-17 0zM7565 6569c-4-6-3-15 3-21s8-16 6-23c-3-7-1-16 5-19 6-4 8-13 5-20-3-8-1-17 5-20 14-9 25 14 13 26-6 6-8 16-6 23 3 7 1 16-5 19-6 4-8 13-5 20 7 17-12 30-21 15zM3535 6481c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM3321 6469c-16-6-21-13-14-20 13-13 67 7 58 21-7 12-12 12-44-1zM3595 6461c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM7606 6421c-4-5-2-12 3-16 6-3 8-12 5-19-7-17 12-30 21-16 4 6 2 17-4 24s-8 15-5 18 1 9-5 12c-5 4-12 2-15-3zM3706 6402c-3-6 1-15 8-21 8-7 17-8 20-3 3 6-1 15-8 21-8 7-17 8-20 3zM5399 6396c-1-3-2-9-3-13-1-5-5-14-9-20-5-7-5-13-1-13 3 0 1-7-6-15s-9-15-5-15 2-6-4-14c-8-10-9-16-1-21 5-3 11-4 11-1 4 16 7 26 9 31 1 3 4 10 5 15 1 6 4 12 5 15s3 8 4 13c1 4 5 12 9 19 4 6 3 14-3 18-5 3-11 4-11 1zM9245 6391c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM9445 6391c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM3161 6376c-7-8-8-17-3-20 6-3 15 1 21 8 7 8 8 17 3 20-6 3-15-1-21-8zM11194 6364c-4-10-9-22-11-26s1-9 6-13c15-9 35 35 22 48-7 7-12 5-17-9zM3756 6352c-3-6 1-15 8-21 8-7 17-8 20-3 3 6-1 15-8 21-8 7-17 8-20 3zM7635 6330c-8-13 13-52 25-45 9 6 2 43-11 50-4 3-10 1-14-5zM9051 6306c-7-8-8-17-3-20 6-3 15 1 21 8 7 8 8 17 3 20-6 3-15-1-21-8zM9636 6312c-3-6 1-15 8-21 8-7 17-8 20-3 3 6-1 15-8 21-8 7-17 8-20 3zM1845 6250c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM7665 6250c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM9696 6252c-3-6 1-15 8-21 8-7 17-8 20-3 3 6-1 15-8 21-8 7-17 8-20 3zM3020 6201c-6-12-6-22-1-26 6-3 15 3 21 14 6 12 6 22 1 26-6 3-15-3-21-14zM9726 6212c-3-6 1-15 8-21 8-7 17-8 20-3 3 6-1 15-8 21-8 7-17 8-20 3zM11105 6161c-14-29-21-52-15-56 5-3 21 17 35 44 14 29 21 52 15 56-5 3-21-17-35-44zM8935 6169c-12-22-14-34-6-42 7-7 13-2 21 18 6 15 13 31 15 36 3 4 1 10-4 14-6 3-17-9-26-26zM1877 6184c-9-10 52-126 63-119 6 3-3 32-20 66-32 61-33 63-43 53zM7696 6182c-5-8 0-19 33-80 24-46 30-10 6 39-26 50-30 55-39 41zM3876 6121c-4-5-2-12 3-15s7-15 4-25c-6-23 15-38 23-17 4 9 0 24-7 33-8 9-12 18-11 20 2 3 1 7-1 9-3 3-8 1-11-5zM9786 6101c-4-5-2-12 4-16s8-10 5-15-1-11 4-14c5-4 12-2 15 3 4 5 2 12-4 16s-8 10-5 15 1 11-4 14c-5 4-12 2-15-3zM8905 6090c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM2975 6060c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM7767 6044c-3-5 3-20 12-33 11-14 21-19 25-13 3 5-2 20-12 33-11 12-21 18-25 13zM8894 6036c-4-10-2-22 4-28 8-8 13-7 18 6 4 10 2 22-4 28-8 8-13 7-18-6zM1956 6032c-3-5 2-20 12-33 24-29 36-11 13 20-11 14-21 19-25 13zM3894 6026c-4-10-2-22 4-28 8-8 13-7 18 6 4 10 2 22-4 28-8 8-13 7-18-6zM9815 5980c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM3235 5939c-19-17-32-35-29-41 4-5 15-1 28 11 11 11 34 24 49 30 16 6 25 15 22 21-11 18-33 11-70-21zM3325 5960c-3-6 1-12 9-15 9-3 23-7 31-10 23-7 28 13 6 24-25 14-38 14-46 1zM8894 5956c-4-10-2-22 4-28 8-8 13-7 18 6 4 10 2 22-4 28-8 8-13 7-18-6zM10971 5936c-7-8-8-17-3-20 6-3 15 1 21 8 7 8 8 17 3 20-6 3-15-1-21-8zM2027 5924c-3-6 4-23 17-39 13-15 25-24 29-19 3 6-4 23-17 39-13 15-25 24-29 19zM2986 5911c-10-16 13-66 25-54 6 6 6 19 0 36-11 29-16 32-25 18zM7857 5904c-3-6 4-23 17-39 13-15 25-24 29-19 3 6-4 23-17 39-13 15-25 24-29 19zM3425 5890c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM3895 5890c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM3185 5870c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM9214 5868c-6-9-4-10 26-11 11-1 19 3 18 8-4 12-37 14-44 3zM9149 5842c-42-38-24-48 19-12 19 16 29 31 23 34-5 4-24-6-42-22zM10911 5856c-7-8-8-17-3-20 6-3 15 1 21 8 7 8 8 17 3 20-6 3-15-1-21-8zM2076 5852c-3-5 3-17 13-26 11-10 22-13 25-8s-3 17-13 26c-11 10-22 13-25 8zM3885 5840c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM5111 5826c-7-8-8-17-3-20 6-3 15 1 21 8 7 8 8 17 3 20-6 3-15-1-21-8zM7906 5832c-3-5 3-17 13-26 11-10 22-13 25-8s-3 17-13 26c-11 10-22 13-25 8zM9805 5820c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM3420 5791c-6-12-6-22-1-26 6-3 15 3 21 14 6 12 6 22 1 26-6 3-15-3-21-14zM10841 5776c-13-13-18-26-13-30 5-3 19 5 31 18 13 13 18 26 13 30-5 3-19-5-31-18zM2136 5782c-3-5 3-17 13-26 11-10 22-13 25-8s-3 17-13 26c-11 10-22 13-25 8zM7956 5772c-3-5 5-19 18-31 13-13 26-18 30-13 3 5-5 19-18 31-13 13-26 18-30 13zM3216 5762c-3-6 1-15 8-21 8-7 17-8 20-3 3 6-1 15-8 21-8 7-17 8-20 3zM3066 5752c-3-5 3-17 13-26 11-10 22-13 25-8s-3 17-13 26c-11 10-22 13-25 8zM3352 5729c-13-5-20-13-17-19 8-13 18-13 40 3 23 17 8 28-23 16zM8996 5732c-3-6 1-15 8-21 8-7 17-8 20-3 3 6-1 15-8 21-8 7-17 8-20 3zM4996 5691c-15-16-23-31-18-35 5-3 21 8 36 23 15 16 23 31 18 35-5 3-21-8-36-23zM3126 5692c-3-6 1-15 8-21 8-7 17-8 20-3 3 6-1 15-8 21-8 7-17 8-20 3zM9046 5682c-3-6 1-15 8-21 8-7 17-8 20-3 3 6-1 15-8 21-8 7-17 8-20 3zM9126 5682c-3-5 3-17 13-26 11-10 22-13 25-8s-3 17-13 26c-11 10-22 13-25 8zM10716 5651c-10-11-13-22-8-25s17 3 26 13c10 11 13 22 8 25s-17-3-26-13zM9272 5639c-13-5-20-13-17-19 8-13 18-13 40 3 23 17 8 28-23 16zM9195 5631c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM2296 5622c-3-5 3-17 13-26 11-10 22-13 25-8s-3 17-13 26c-11 10-22 13-25 8zM3751 5616c-7-8-8-17-3-20 6-3 15 1 21 8 7 8 8 17 3 20-6 3-15-1-21-8zM4891 5586c-7-8-8-17-3-20 6-3 15 1 21 8 7 8 8 17 3 20-6 3-15-1-21-8zM8136 5592c-3-5 3-17 13-26 11-10 22-13 25-8s-3 17-13 26c-11 10-22 13-25 8zM10641 5586c-7-8-8-17-3-20 6-3 15 1 21 8 7 8 8 17 3 20-6 3-15-1-21-8zM2366 5562c-3-6 1-15 8-21 8-7 17-8 20-3 3 6-1 15-8 21-8 7-17 8-20 3zM10601 5556c-7-8-8-17-3-20 6-3 15 1 21 8 7 8 8 17 3 20-6 3-15-1-21-8zM3395 5551c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM3455 5541c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM3555 5541c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM8196 5542c-3-6 1-15 8-21 8-7 17-8 20-3 3 6-1 15-8 21-8 7-17 8-20 3zM2406 5532c-3-6 1-15 8-21 8-7 17-8 20-3 3 6-1 15-8 21-8 7-17 8-20 3zM4821 5526c-7-8-8-17-3-20 6-3 15 1 21 8 7 8 8 17 3 20-6 3-15-1-21-8zM9375 5531c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM9475 5531c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM8236 5512c-3-6 1-15 8-21 8-7 17-8 20-3 3 6-1 15-8 21-8 7-17 8-20 3zM10521 5501c-14-11-19-21-13-25 5-3 20 2 33 12 29 24 11 36-20 13zM4781 5496c-7-8-8-17-3-20 6-3 15 1 21 8 7 8 8 17 3 20-6 3-15-1-21-8zM8306 5462c-3-6 1-15 8-21 8-7 17-8 20-3 3 6-1 15-8 21-8 7-17 8-20 3zM10275 5366c-11-8-14-16-8-19 6-4 18 0 28 7 11 8 14 16 8 19-6 4-18 0-28-7zM8525 5341c-3-6 3-15 14-21 12-6 22-6 26-1 3 6-3 15-14 21-12 6-22 6-26 1zM4455 5307c-10-8-14-16-9-19 14-9 56 11 49 22-8 13-18 13-40-3zM2825 5299c-10-14 150-77 164-64 2 3 10 0 17-5 23-20 99-31 99-15 0 6-4 10-10 10-5 0-16 4-23 9-7 4-16 5-19 2s-12-1-19 4c-6 6-16 10-20 9-5-1-16 1-24 4-59 26-161 54-165 46zM8645 5290c-7-11-1-14 68-40 31-12 61-19 66-16 5 4 13 1 16-5 4-5 13-8 21-5 7 3 16 1 20-5 3-6 12-8 19-5 7 2 17 0 23-6 12-12 35-1 26 13-3 6-12 8-20 5-7-3-16-1-20 5-3 6-12 8-20 5-7-3-16-1-19 5-4 5-12 9-18 8-7-1-19 1-27 4-54 24-130 44-135 37zM10015 5271c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM4315 5254c-22-8-47-17-55-21-8-3-18-6-22-5s-20-3-35-10c-15-6-33-10-40-9-16 2-26-16-13-24 6-4 17-2 24 4s15 8 18 6c3-3 18 0 34 6s38 13 49 15c37 5 100 31 98 40-3 14-15 13-58-2zM9945 5251c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM9896 5241c-4-6-13-8-20-5-17 6-31-12-16-21 5-3 16-3 23 2 6 4 17 8 22 8 14 0 19 19 7 23-6 2-13-1-16-7zM9805 5221c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM3135 5211c-6-11 13-26 22-17 3 3 12 1 19-5 17-14 48-4 39 12-4 6-16 9-26 6s-22-1-25 4c-7 12-21 12-29 0zM8925 5210c-7-11 22-26 32-16 3 3 12 1 19-5 17-14 48-4 39 12-4 6-16 9-26 6s-22-1-25 4c-7 12-31 11-39-1zM9745 5210c-8-12 20-24 35-15 6 3 8 11 5 16-8 12-32 12-40-1zM9685 5200c-8-12 20-24 35-15 6 3 8 11 5 16-8 12-32 12-40-1zM3235 5191c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM4095 5191c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM9045 5190c-8-13 20-24 41-16 20 8 9 26-16 26-10 0-22-5-25-10zM9605 5190c-8-12 20-24 35-15 6 3 8 11 5 16-8 12-32 12-40-1zM3285 5180c-8-13 20-24 41-16 20 8 9 26-16 26-10 0-22-5-25-10zM4045 5181c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM9145 5180c-3-5 0-13 9-16 21-8 61-1 61 11 0 14-62 19-70 5zM9455 5180c-3-5 0-13 9-16 21-8 61-1 61 11 0 14-62 19-70 5zM3355 5170c-8-13 20-24 41-16 20 8 9 26-16 26-10 0-22-5-25-10zM3985 5171c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM3445 5160c-3-5 0-13 9-16 21-8 61-1 61 11 0 14-62 19-70 5zM3865 5161c-7-13 17-24 40-19 9 1 16 8 16 13 0 14-48 19-56 6zM3595 5150c-3-5 0-13 8-16 23-9 177 0 180 11 3 14-179 19-188 5z"/></g><g fill="#43413F" fill-rule="nonzero"><path d="M10865 10931c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM10775 10891c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM10705 10861c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM10655 10841c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM1855 10700c-11-17 5-32 21-19 7 6 11 15 8 20-7 12-21 11-29-1zM10984 10697c-7-20-2-47 11-50 14-3 19 43 6 56-7 7-12 6-17-6zM1925 10681c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM10165 10671c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM9955 10611c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM2245 10601c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM2335 10581c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM9846 10581c-4-6-13-8-20-5-8 3-17 1-20-5-4-6-13-8-20-5-8 3-17 1-20-5-4-6-13-8-20-5-17 7-30-12-16-21 6-4 17-2 24 4s16 8 19 4c4-3 13-1 20 5 8 7 17 9 20 6s12-2 19 2c7 5 18 9 23 9 14 0 19 19 7 23-6 2-13-1-16-7zM9555 10511c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM9415 10481c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM9265 10451c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM1854 10437c-7-20-2-47 11-50 14-3 19 43 6 56-7 7-12 6-17-6zM9215 10441c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM9105 10421c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM3775 10351c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM4165 10311c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM4395 10291c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM8165 10291c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM8065 10281c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM4655 10271c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM7955 10271c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM4805 10261c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM7835 10261c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM4975 10251c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM7695 10251c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM5165 10241c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM7545 10241c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM5385 10231c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM7365 10231c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM5675 10220c-8-12 20-24 35-15 6 3 8 11 5 16-8 12-32 12-40-1zM7125 10220c-8-12 20-24 35-15 6 3 8 11 5 16-8 12-32 12-40-1zM6155 10211c-7-13 17-24 40-19 9 1 16 8 16 13 0 14-48 19-56 6zM6685 10210c-3-5 0-13 9-16 21-8 61-1 61 11 0 14-62 19-70 5zM1864 10036c-4-10-2-22 4-28 8-8 13-7 18 6 4 10 2 22-4 28-8 8-13 7-18-6zM10977 10043c-8-15-2-68 8-68 12 0 17 63 5 70-5 3-11 2-13-2zM1875 9760c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM6515 9701c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM6221 9679c-16-6-21-13-14-20 13-13 67 7 58 21-7 12-12 12-44-1zM6141 9636c-7-8-8-17-3-20 6-3 15 1 21 8 7 8 8 17 3 20-6 3-15-1-21-8zM6061 9566c-7-8-8-17-3-20 6-3 15 1 21 8 7 8 8 17 3 20-6 3-15-1-21-8zM1884 9536c-4-10-2-22 4-28 8-8 13-7 18 6 4 10 2 22-4 28-8 8-13 7-18-6zM6595 9521c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM6265 9507c-10-8-14-16-9-19 14-9 56 11 49 22-8 13-18 13-40-3zM6925 9480c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM6736 9462c-3-6 1-15 8-21 8-7 17-8 20-3 3 6-1 15-8 21-8 7-17 8-20 3zM5975 9410c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM6766 9411c-10-16 13-66 25-54 6 6 6 19 0 36-11 29-16 32-25 18zM6955 9380c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM10954 9356c-8-21 3-49 16-41 5 3 10 15 10 25 0 25-18 36-26 16zM1894 9336c-4-10-2-22 4-28 8-8 13-7 18 6 4 10 2 22-4 28-8 8-13 7-18-6zM6135 9330c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM6425 9300c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM6795 9300c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM6525 9270c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM6975 9270c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM6805 9240c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM5945 9220c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM9485 9210c-3-5 0-13 9-16 21-8 61-1 61 11 0 14-62 19-70 5zM9805 9211c-7-13 17-24 40-19 9 1 16 8 16 13 0 14-48 19-56 6zM9375 9200c-8-13 20-24 41-16 20 8 9 26-16 26-10 0-22-5-25-10zM9925 9200c-8-12 20-24 35-15 6 3 8 11 5 16-8 12-32 12-40-1zM3295 9190c-8-13 6-18 50-16 22 0 40 6 40 11 0 12-83 17-90 5zM6114 9187c-7-20-2-47 11-50 14-3 19 43 6 56-7 7-12 6-17-6zM9295 9190c-8-12 20-24 35-15 6 3 8 11 5 16-8 12-32 12-40-1zM10005 9191c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM3105 9180c-8-12 20-24 35-15 6 3 8 11 5 16-8 12-32 12-40-1zM3545 9180c-8-12 20-24 35-15 6 3 8 11 5 16-8 12-32 12-40-1zM6985 9180c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM9235 9181c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM10065 9181c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM1904 9166c-4-10-2-22 4-28 8-8 13-7 18 6 4 10 2 22-4 28-8 8-13 7-18-6zM3025 9171c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM3645 9170c-8-12 20-24 35-15 6 3 8 11 5 16-8 12-32 12-40-1zM9175 9171c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM10115 9171c-6-11 13-26 22-17 3 3 12 1 20-6 7-6 16-8 20-5 3 4 12 2 19-4s18-8 24-4c14 9 1 28-15 21-7-2-17 0-22 5-14 14-61 21-68 10zM2914 9157c-8-5-18-6-21-3s-15 1-25-5c-14-8-17-14-9-22 7-7 15-7 25 2 8 7 20 10 26 6 5-3 16-3 23 2 6 4 20 8 29 8 10 0 19 5 20 10 4 13-46 14-68 2zM3725 9161c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM9125 9161c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM3785 9151c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM9044 9145c-20-14-2-31 19-18 6 4 18 8 24 8 7 0 13 5 13 10 0 14-37 14-56 0zM10944 9136c-4-10-2-22 4-28 8-8 13-7 18 6 4 10 2 22-4 28-8 8-13 7-18-6zM2791 9126c-7-8-8-17-3-20 6-3 15 1 21 8 7 8 8 17 3 20-6 3-15-1-21-8zM3894 9129c-5-9 3-13 20-10 4 1 14-3 22-10 16-13 40-1 26 13-13 13-61 18-68 7zM6405 9130c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM10266 9131c-4-5-2-12 4-16 5-3 10-3 10 1 0 3 7 1 15-6s15-9 15-5 6 2 14-4c10-8 16-9 21-1 3 5 4 11 1 11-16 4-26 7-31 9-3 1-8 3-12 4-5 1-13 5-20 9-6 4-14 3-17-2zM8955 9121c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM4046 9102c-3-6 1-15 8-21 8-7 17-8 20-3 3 6-1 15-8 21-8 7-17 8-20 3zM8885 9101c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM10366 9101c-9-15 23-36 35-24 8 8 5 14-9 22-12 6-23 7-26 2zM4116 9082c-3-6 1-15 8-21 8-7 17-8 20-3 3 6-1 15-8 21-8 7-17 8-20 3zM5795 9081c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM5875 9081c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM2625 9071c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM5671 9059c-16-6-21-13-14-20 13-13 67 7 58 21-7 12-12 12-44-1zM8750 9055c-6-7-17-12-25-9-16 7-29-12-15-21 6-4 17-2 24 4s15 9 18 6 11 1 17 9c7 8 8 17 3 20-6 3-15-1-22-9zM2537 9034c-15-8-25-19-22-24 9-14 20-12 46 8 29 24 12 35-24 16zM6115 9040c-15-24 58-71 78-51 12 12-38 35-54 26-5-4-6 0-3 8 6 18-12 32-21 17zM9555 9040c-8-13 20-24 41-16 20 8 9 26-16 26-10 0-22-5-25-10zM9755 9040c-8-13 20-24 41-16 20 8 9 26-16 26-10 0-22-5-25-10zM4245 9031c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM6395 9030c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM9415 9031c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM9895 9031c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM8655 9021c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM9975 9021c-6-11 29-33 39-24 7 7-12 33-25 33-4 0-10-4-14-9zM10526 9021c-9-15 23-36 35-24 8 8 5 14-9 22-12 6-23 7-26 2zM1915 9010c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM3125 9010c-8-12 20-24 35-15 6 3 8 11 5 16-8 12-32 12-40-1zM3525 9010c-8-12 20-24 35-15 6 3 8 11 5 16-8 12-32 12-40-1zM3045 9001c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM3625 9001c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM4325 9001c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM7055 9000c-8-12 20-24 35-15 6 3 8 11 5 16-8 12-32 12-40-1zM7125 9000c-8-13 20-24 41-16 20 8 9 26-16 26-10 0-22-5-25-10zM8595 8996c-14-10-15-15-6-21 8-4 19-1 28 8 20 19 1 30-22 13zM9201 8997c-6-8-8-17-5-20 10-9 45 13 39 24-9 13-21 11-34-4zM2461 8986c-7-8-8-17-3-20 6-3 15 1 21 8 7 8 8 17 3 20-6 3-15-1-21-8zM3705 8991c-6-11 29-33 39-24 7 7-12 33-25 33-4 0-10-4-14-9zM3765 8981c-6-11 29-33 39-24 7 7-12 33-25 33-4 0-10-4-14-9zM5526 8961c-15-16-23-31-18-35 5-3 21 8 36 23 15 16 23 31 18 35-5 3-21-8-36-23zM7245 8981c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM10155 8981c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM3825 8970c-3-5-4-11-1-11 13-3 22-6 39-14 11-4 23-3 29 3 8 8 7 13-6 18-9 4-20 4-23 0-3-3-12-1-19 5-8 7-14 7-19-1zM4395 8971c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM6494 8967c-7-20-2-47 11-50 14-3 19 43 6 56-7 7-12 6-17-6zM9066 8971c-3-4-17-8-32-8-14 0-30-5-36-11-16-16 18-27 37-12 8 6 18 9 23 6 6-3 15 1 21 8 8 9 8 16 2 20-5 4-12 2-15-3zM2800 8949c-30-11-61-21-68-24-7-2-14-5-17-5-8 0-109-51-122-62-7-6-10-14-7-19 5-9 118 44 129 61 3 6 10 8 15 5 9-5 120 31 133 44 18 18-10 18-63 0zM6285 8961c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM10935 8950c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM6755 8941c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM8956 8943c-3-4-13-8-21-9-19-3-87-25-100-33-5-3-14-6-20-7-5-1-27-9-48-17-20-9-40-16-42-16-17-1-65-33-60-41 7-11 33-3 56 17 9 7 18 11 21 8 5-6 68 18 80 31 5 4 18 8 31 10 13 1 41 10 63 20 21 9 42 18 47 18 8 1 11 15 5 22-3 2-8 1-12-3zM10275 8941c-7-12 12-24 24-16 5 3 13 1 16-5 11-17 124-70 129-61 3 5 0 13-7 19-22 18-117 63-117 55 0-4-5-2-12 5-14 14-25 15-33 3zM3995 8929c-7-10 57-41 78-38 7 1 29-6 51-15 21-9 41-15 44-12 3 4 12 0 21-8 23-20 58-29 66-16 5 8-24 26-60 34-5 2-23 8-39 15-16 6-36 13-45 15s-23 6-31 9c-54 20-80 25-85 16zM6705 8931c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM10666 8922c-3-6 1-15 8-21 8-7 17-8 20-3 3 6-1 15-8 21-8 7-17 8-20 3zM5825 8910c-8-13 20-24 41-16 20 8 9 26-16 26-10 0-22-5-25-10zM5765 8901c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM8401 8896c-7-8-8-17-3-20 6-3 15 1 21 8 7 8 8 17 3 20-6 3-15-1-21-8zM5985 8879c-9-14 65-43 78-30 7 7 6 12-4 15-8 3-26 10-41 15-18 7-29 7-33 0zM1925 8870c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM8351 8866c-7-8-8-17-3-20 6-3 15 1 21 8 7 8 8 17 3 20-6 3-15-1-21-8zM10736 8862c-3-6 1-15 8-21 8-7 17-8 20-3 3 6-1 15-8 21-8 7-17 8-20 3zM10466 8851c-6-8 5-20 31-35 23-13 22 12-2 28-13 9-26 12-29 7zM4656 8842c-3-6 1-15 8-21 8-7 17-8 20-3 3 6-1 15-8 21-8 7-17 8-20 3zM6095 8840c-3-5-4-11-1-11 14-3 23-7 58-23 47-20 72-24 75-11 1 6-20 18-47 27-28 9-50 14-50 11s-6 0-14 6c-10 8-16 9-21 1zM4275 8831c-7-13 32-34 47-25 7 5 5 11-7 21-22 15-32 16-40 4zM7075 8830c-3-5 0-13 9-16 21-8 61-1 61 11 0 14-62 19-70 5zM8271 8816c-7-8-8-17-3-20 6-3 15 1 21 8 7 8 8 17 3 20-6 3-15-1-21-8zM6956 8811c-4-6-13-8-20-5-17 7-30-12-16-21 6-4 16-2 23 3 7 6 15 11 20 11 8 1 11 11 4 17-3 3-8 1-11-5zM2481 8786c-7-8-8-17-3-20 6-3 15 1 21 8 7 8 8 17 3 20-6 3-15-1-21-8zM6876 8791c-4-6-13-8-20-5-17 7-30-12-16-21 6-4 16-2 23 3 7 6 15 11 20 11 8 1 11 11 4 17-3 3-8 1-11-5zM10546 8792c-3-6 1-15 8-21 8-7 17-8 20-3 3 6-1 15-8 21-8 7-17 8-20 3zM10924 8786c-4-10-2-22 4-28 8-8 13-7 18 6 4 10 2 22-4 28-8 8-13 7-18-6zM6275 8781c-6-11 13-26 22-17 3 3 12 1 19-5s18-8 24-4c14 9 1 28-16 21-7-3-16-1-19 4-8 13-22 13-30 1zM6445 8751c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM6645 8751c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM1934 8736c-4-10-2-22 4-28 8-8 13-7 18 6 4 10 2 22-4 28-8 8-13 7-18-6zM2151 8726c-13-13-18-26-13-30 5-3 19 5 31 18 13 13 18 26 13 30-5 3-19-5-31-18zM5415 8740c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM7307 8714c-3-3-1-18 4-33 5-14 12-32 15-40 3-10 8-11 15-4s6 22-5 47c-15 37-18 40-29 30zM8121 8706c-7-8-8-17-3-20 6-3 15 1 21 8 7 8 8 17 3 20-6 3-15-1-21-8zM8431 8706c-7-8-8-17-3-20 6-3 15 1 21 8 7 8 8 17 3 20-6 3-15-1-21-8zM5587 8703c-9-15-2-88 8-88 12 0 17 83 5 90-5 3-11 2-13-2zM10905 8691c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM2346 8671c-10-11-13-22-8-25s17 3 26 13c10 11 13 22 8 25s-17-3-26-13zM8056 8651c-10-11-13-22-8-25s17 3 26 13c10 11 13 22 8 25s-17-3-26-13zM8311 8626c-7-8-8-17-3-20 6-3 15 1 21 8 7 8 8 17 3 20-6 3-15-1-21-8zM7505 8617c-9-22-2-62 10-60 6 1 11 14 13 29 4 32-14 56-23 31zM2250 8575c-22-22-30-39-24-44 5-6 21 5 42 29 41 49 26 61-18 15zM4696 8602c-3-6 1-15 8-21 8-7 17-8 20-3 3 6-1 15-8 21-8 7-17 8-20 3zM4986 8592c-3-5 3-17 13-26 11-10 22-13 25-8s-3 17-13 26c-11 10-22 13-25 8zM2011 8566c-7-8-8-17-3-20 6-3 15 1 21 8 7 8 8 17 3 20-6 3-15-1-21-8zM4736 8572c-3-6 1-15 8-21 8-7 17-8 20-3 3 6-1 15-8 21-8 7-17 8-20 3zM8231 8566c-7-8-8-17-3-20 6-3 15 1 21 8 7 8 8 17 3 20-6 3-15-1-21-8zM10796 8552c-3-6 1-15 8-21 8-7 17-8 20-3 3 6-1 15-8 21-8 7-17 8-20 3zM5608 8534c-9-14 11-56 22-49 13 8 13 18-3 40-8 10-16 14-19 9zM10836 8502c-3-6 1-15 8-21 8-7 17-8 20-3 3 6-1 15-8 21-8 7-17 8-20 3zM4836 8492c-3-6 1-15 8-21 8-7 17-8 20-3 3 6-1 15-8 21-8 7-17 8-20 3zM5096 8482c-3-5 3-17 13-26 11-10 22-13 25-8s-3 17-13 26c-11 10-22 13-25 8zM2141 8446c-7-8-8-17-3-20 6-3 15 1 21 8 7 8 8 17 3 20-6 3-15-1-21-8zM7851 8446c-7-8-8-17-3-20 6-3 15 1 21 8 7 8 8 17 3 20-6 3-15-1-21-8zM2111 8406c-7-8-8-17-3-20 6-3 15 1 21 8 7 8 8 17 3 20-6 3-15-1-21-8zM7475 8410c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM7280 8391c-6-12-6-22-1-26 6-3 15 3 21 14 6 12 6 22 1 26-6 3-15-3-21-14zM5176 8392c-3-6 1-15 8-21 8-7 17-8 20-3 3 6-1 15-8 21-8 7-17 8-20 3zM5667 8393c-4-6 0-18 7-28 8-11 16-14 19-8 4 6 0 18-7 28-8 11-16 14-19 8zM2081 8366c-7-8-8-17-3-20 6-3 15 1 21 8 7 8 8 17 3 20-6 3-15-1-21-8zM6411 8366c-13-15-5-26 20-26 26 0 32 17 10 29-14 8-22 7-30-3zM5486 8361c-4-5-2-12 4-16s8-10 5-15c-3-4 2-13 9-19 8-7 17-8 20-3 3 6-1 15-9 22s-13 16-10 20c3 5 1 11-4 14-5 4-12 2-15-3zM6305 8351c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM6245 8341c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM7750 8325c-12-13-19-28-15-34 9-16 28-2 21 16-3 8-2 12 3 9s14 1 20 8c21 25-5 26-29 1zM6615 8330c-3-5-4-11-1-11 17-4 24-7 60-22 26-12 43-14 50-7 6 6-3 15-28 25-21 9-41 14-44 11s-11-1-18 5c-8 7-14 7-19-1zM7241 8326c-7-8-8-17-3-20 6-3 15 1 21 8 7 8 8 17 3 20-6 3-15-1-21-8zM5006 8322c-3-6 1-15 8-21 8-7 17-8 20-3 3 6-1 15-8 21-8 7-17 8-20 3zM7971 8316c-7-8-8-17-3-20 6-3 15 1 21 8 7 8 8 17 3 20-6 3-15-1-21-8zM5716 8312c-3-6 1-15 8-21 8-7 17-8 20-3 3 6-1 15-8 21-8 7-17 8-20 3zM6125 8296c-11-8-14-16-8-19 6-4 18 0 28 7 11 8 14 16 8 19-6 4-18 0-28-7zM5746 8272c-3-6 1-15 8-21 8-7 17-8 20-3 3 6-1 15-8 21-8 7-17 8-20 3zM6036 8250c-26-17-44-34-41-40 3-5 28 5 55 22s47 35 44 39c-7 12-4 13-58-21zM5276 8262c-3-6 1-15 8-21 8-7 17-8 20-3 3 6-1 15-8 21-8 7-17 8-20 3zM2001 8246c-7-8-8-17-3-20 6-3 15 1 21 8 7 8 8 17 3 20-6 3-15-1-21-8zM7156 8221c-15-16-23-31-18-35 5-3 21 8 36 23 15 16 23 31 18 35-5 3-21-8-36-23zM7681 8226c-7-8-8-17-3-20 6-3 15 1 21 8 7 8 8 17 3 20-6 3-15-1-21-8zM5307 8224c-3-6 4-23 17-39 13-15 25-24 29-19 3 6-4 23-17 39-13 15-25 24-29 19zM7847 8151c-26-39-43-73-38-76 13-8 104 126 93 137-5 5-28-20-55-61zM5816 8202c-3-6 1-15 8-21 8-7 17-8 20-3 3 6-1 15-8 21-8 7-17 8-20 3zM5586 8192c-3-6 1-15 8-21 8-7 17-8 20-3 3 6-1 15-8 21-8 7-17 8-20 3zM6320 8175c-81-18-202-77-230-112-11-14-20-22-20-17 0 15-62-51-86-93-31-51-25-81 24-124 70-61 223-113 354-120 71-4 98 11 38 22-35 5-100 37-130 61-34 28-50 64-50 109 0 86 80 169 218 224 78 31 108 35 141 18 27-13 49-7 32 10-6 6-21 11-33 13-13 1-23 3-23 4 0 4-38 9-105 15-39 3-91-1-130-10zM5856 8171c-4-5 7-19 23-30 16-12 32-17 35-12 4 5-7 19-23 30-16 12-32 17-35 12zM5136 8162c-7-12 43-84 54-77 5 3-2 24-17 45-28 43-29 44-37 32zM7631 8146c-7-8-8-17-3-20 6-3 15 1 21 8 7 8 8 17 3 20-6 3-15-1-21-8zM11077 8144c-9-10 22-66 33-59 6 4 4 18-5 36-17 31-18 32-28 23zM6916 8132c-3-6 1-15 8-21 8-7 17-8 20-3 3 6-1 15-8 21-8 7-17 8-20 3zM6986 8101c-4-6-13-8-20-5-17 7-30-12-16-21 6-4 16-2 23 3 7 6 15 11 20 11 8 1 11 11 4 17-3 3-8 1-11-5zM5386 8092c-3-6 1-15 8-21 8-7 17-8 20-3 3 6-1 15-8 21-8 7-17 8-20 3zM6706 8092c-3-6 1-15 8-21 8-7 17-8 20-3 3 6-1 15-8 21-8 7-17 8-20 3zM7781 8052c-13-25 2-38 19-16 9 10 10 18 3 25-8 8-14 5-22-9zM11117 8063c-2-5 2-23 10-42 10-23 17-31 24-24s6 21-5 42c-17 32-22 36-29 24zM7551 8002c-17-34-27-63-22-66 18-12 79 100 63 116-7 7-21-10-41-50zM5216 8032c-3-6 1-15 8-21 8-7 17-8 20-3 3 6-1 15-8 21-8 7-17 8-20 3zM6776 8022c-3-6 1-15 8-21 8-7 17-8 20-3 3 6-1 15-8 21-8 7-17 8-20 3zM6690 7981c-5-11-9-24-8-28s-3-18-10-30c-7-13-8-24-3-28 6-3 15 4 21 15s8 20 4 20c-3 0-2 6 3 13 16 20 23 46 13 52-5 3-14-3-20-14zM6758 7995c-9-9 7-60 18-58 5 1 10 8 12 15 3 16-21 52-30 43zM7730 7958c-23-37-24-44-10-53 5-3 18 12 30 34 25 50 9 65-20 19zM1850 7960c-8-15-9-25-2-32s14-3 22 12 9 25 2 32-14 3-22-12zM6828 7954c-4-4-2-16 4-28 15-27 11-76-9-98-9-10-10-18-4-22 5-3 19 6 30 20 22 28 28 69 11 79-6 4-8 10-5 14 6 11-19 44-27 35zM11165 7950c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM5477 7913c-4-6 1-21 11-34 12-13 21-18 25-12s-1 21-11 34c-12 13-21 18-25 12zM6745 7891c-9-18-11-32-5-36 5-3 16 8 25 24 9 18 11 32 5 36-5 3-16-8-25-24zM1825 7900c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM11185 7900c-8-13 13-52 25-45 9 6 2 43-11 50-4 3-10 1-14-5zM7495 7880c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM6615 7866c-11-8-14-16-8-19 6-4 18 0 28 7 11 8 14 16 8 19-6 4-18 0-28-7zM5515 7830c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM6575 7830c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM7475 7830c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM1790 7805c-15-39-17-63-6-67 14-5 38 74 26 86-6 6-13-1-20-19zM7015 7820c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM6655 7796c-11-8-14-16-8-19 6-4 18 0 28 7 11 8 14 16 8 19-6 4-18 0-28-7zM6732 7774c-12-8-22-12-22-8 0 5-5 3-11-3s-17-9-24-7c-16 7-29-12-15-21 6-4 16-2 23 3 7 6 15 11 20 11 4 1 8 1 10 2 1 0 10 2 21 4 24 5 41 21 29 28-6 4-19-1-31-9zM7639 7753c-6-15-12-32-13-38-1-5-5-16-9-22-5-7-5-13-1-13 3 0 1-7-6-15s-9-15-5-15 2-7-5-15-9-15-5-15 2-6-4-14c-8-10-9-16-1-21 5-3 11-4 11-1 4 16 7 26 9 31 1 3 4 10 5 15 1 6 4 12 5 15s3 8 4 13c1 4 5 13 9 20 5 6 5 12 1 12s0 8 8 18c21 24 31 59 18 67-5 3-15-6-21-22zM6991 7756c-7-8-8-17-3-20 6-3 15 1 21 8 7 8 8 17 3 20-6 3-15-1-21-8zM5545 7750c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM6565 7736c-14-10-15-15-6-21 8-4 19-1 28 8 20 19 1 30-22 13zM6482 7729c-13-5-20-13-17-19 8-13 42-13 51 1 10 17-9 28-34 18zM5365 7720c-4-6 0-19 8-28s13-22 10-28c-6-17 36-106 46-99 9 5-2 50-26 105-3 8-7 21-9 29-4 22-21 34-29 21zM11245 7720c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM5586 7621c-4-6-2-18 4-26s9-19 6-24c-4-5-1-13 5-16 5-4 8-13 5-21-3-7-1-16 5-19 5-4 8-12 7-19-2-6 1-13 7-14 12-2 13 29 2 45-5 7-6 17-3 22 4 5 1 13-5 16-5 4-8 13-5 20 7 19-19 52-28 36zM6795 7611c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM6075 7600c-9-14 45-34 58-21 7 7 1 14-17 21-33 12-33 12-41 0zM7401 7596c-6-7-8-16-4-19 3-4 1-13-5-20-7-8-9-17-5-20 9-10 34 13 27 25-3 5-1 15 6 23 6 8 7 16 2 19-6 3-15 0-21-8zM11275 7600c-4-6-1-18 7-27 7-9 12-18 11-20-2-1-1-3 2-3h12c4 0 2 5-4 11s-9 17-7 24c7 16-12 29-21 15zM6605 7561c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM7575 7560c-4-6-4-14-1-17s1-12-6-20c-6-7-8-16-5-20 4-3 2-12-4-19s-8-18-4-24c9-14 28-1 21 16-3 7-1 16 5 20 6 3 8 12 5 19-2 7 1 18 7 24 8 8 8 14 0 22s-13 8-18-1zM6295 7551c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM5425 7539c-4-6-3-15 3-21s8-16 6-23c-3-7-1-16 5-19 6-4 8-13 5-20-3-8-1-17 5-20 14-9 25 14 13 26-6 6-8 16-6 23 3 7 1 16-5 19-6 4-8 13-5 20 7 17-12 30-21 15zM11295 7500c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM1705 7470c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM11305 7450c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM5626 7442c-3-6 1-15 8-21 8-7 17-8 20-3 3 6-1 15-8 21-8 7-17 8-20 3zM7545 7430c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM1695 7420c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM7361 7412c-13-25 2-38 19-16 9 10 10 18 3 25-8 8-14 5-22-9zM5455 7410c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM11314 7366c-4-10-2-22 4-28 8-8 13-7 18 6 4 10 2 22-4 28-8 8-13 7-18-6zM7355 7360c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM1684 7346c-4-10-2-22 4-28 8-8 13-7 18 6 4 10 2 22-4 28-8 8-13 7-18-6zM7345 7290c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM11324 7276c-8-21 3-49 16-41 5 3 10 15 10 25 0 25-18 36-26 16zM5655 7260c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM1674 7246c-8-21 3-49 16-41 5 3 10 15 10 25 0 25-18 36-26 16zM7515 7230c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM7334 7166c-4-10-2-22 4-28 8-8 13-7 18 6 4 10 2 22-4 28-8 8-13 7-18-6zM5664 7136c-4-10-2-22 4-28 8-8 13-7 18 6 4 10 2 22-4 28-8 8-13 7-18-6zM7505 7047c-9-22-2-62 10-60 6 1 11 14 13 29 4 32-14 56-23 31zM5495 7028c-9-22-2-68 10-71 14-3 19 63 6 76-7 7-12 5-16-5zM11324 6946c-8-21 3-49 16-41 5 3 10 15 10 25 0 25-18 36-26 16zM1674 6926c-8-21 3-49 16-41 5 3 10 15 10 25 0 25-18 36-26 16zM7334 6896c-4-10-2-22 4-28 8-8 13-7 18 6 4 10 2 22-4 28-8 8-13 7-18-6zM5664 6876c-4-10-2-22 4-28 8-8 13-7 18 6 4 10 2 22-4 28-8 8-13 7-18-6zM11314 6846c-4-10-2-22 4-28 8-8 13-7 18 6 4 10 2 22-4 28-8 8-13 7-18-6zM7515 6830c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM1685 6820c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM7337 6793c-8-13 12-55 23-48 5 3 10 12 10 19 0 17-27 40-33 29zM5655 6760c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM11305 6760c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM7347 6714c-3-4-2-16 4-26 8-15 14-17 22-9s7 15-4 26c-8 9-18 13-22 9zM11295 6710c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM5645 6680c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM11285 6660c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM1715 6640c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM7545 6630c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM5455 6600c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM11279 6606c-1-3-2-9-3-13-1-5-5-14-9-20-5-7-5-18-2-23 9-14 28-1 21 15-2 7 0 17 6 23s6 12-1 16c-6 4-12 5-12 2zM1726 6581c-4-5-2-12 3-16 6-3 8-12 5-19-7-17 12-30 21-16 4 6 2 17-4 24s-8 15-5 18 1 9-5 12c-5 4-12 2-15-3zM7555 6580c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM5631 6566c-7-8-8-17-3-20 6-3 15 1 21 8 7 8 8 17 3 20-6 3-15-1-21-8zM5435 6510c-4-6-4-14-1-17s1-12-5-19-8-18-4-24c9-14 28-1 21 15-2 7 1 18 7 24 8 8 8 14 0 22s-13 8-18-1zM5617 6514c-3-3-3-12-1-19 3-7 1-16-5-19-6-4-8-13-5-20 3-8 0-17-5-21-6-3-9-11-5-16 4-6 11-6 20 2 7 6 11 15 8 20s-2 15 2 21c16 26 8 69-9 52zM7575 6500c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM11245 6500c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM1755 6480c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM7587 6454c-5-5 10-58 30-104 3-8 7-19 9-25 10-41 26-67 35-58 8 8 5 21-7 44-10 19-18 39-19 44-6 61-32 115-48 99zM3181 6386c-7-8-8-17-3-20 6-3 15 1 21 8 7 8 8 17 3 20-6 3-15-1-21-8zM5409 6396c-1-3-2-9-3-13-1-5-5-14-9-20-5-7-5-13-1-13s0-8-8-17c-21-25-31-60-18-68 9-6 27 27 35 65 2 8 4 16 5 18 2 1 3 5 4 10 1 4 5 12 9 19 4 6 3 14-3 18-5 3-11 4-11 1zM7425 6380c-8-13 13-52 25-45 9 6 2 43-11 50-4 3-10 1-14-5zM11205 6380c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM1796 6361c-10-16 13-66 25-54 6 6 6 19 0 36-11 29-16 32-25 18zM9125 6346c-11-8-14-16-8-19 6-4 18 0 28 7 11 8 14 16 8 19-6 4-18 0-28-7zM3756 6342c-3-5 3-17 13-26 11-10 22-13 25-8s-3 17-13 26c-11 10-22 13-25 8zM9586 6341c-4-5 7-19 23-30 16-12 32-17 35-12 4 5-7 19-23 30-16 12-32 17-35 12zM9071 6316c-7-8-8-17-3-20 6-3 15 1 21 8 7 8 8 17 3 20-6 3-15-1-21-8zM3075 6280c-13-14-15-24-8-31s15-2 26 15c21 31 6 43-18 16zM1825 6280c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM11165 6280c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM7466 6261c-10-16 13-66 25-54 6 6 6 19 0 36-11 29-16 32-25 18zM5345 6240c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM3042 6227c-21-27-41-76-33-81 10-7 22 7 45 51 16 32 7 54-12 30zM9707 6234c-3-6 4-23 17-39 13-15 25-24 29-19 3 6-4 23-17 39-13 15-25 24-29 19zM1855 6210c-3-5 4-29 16-52 27-54 39-69 50-62 8 5-45 124-56 124-2 0-7-4-10-10zM11120 6181c-25-50-9-65 20-19 23 37 24 44 10 53-5 3-18-12-30-34zM8951 6186c-7-8-8-17-3-20 6-3 15 1 21 8 7 8 8 17 3 20-6 3-15-1-21-8zM5515 6180c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM7495 6180c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM5314 6164c-4-10-9-22-11-26s1-9 6-13c15-9 35 35 22 48-7 7-12 5-17-9zM9757 6154c-3-3 3-24 13-47 9-23 20-51 24-61 4-13 10-16 16-10 7 7 5 26-6 56-15 46-36 73-47 62zM3865 6139c-4-6-3-15 3-21s8-16 6-23c-3-7-1-16 5-19 14-9 25 14 13 26-6 6-8 16-6 23 7 17-12 29-21 14zM7715 6130c-10-17 31-84 46-74 8 5-26 84-36 84-2 0-7-4-10-10zM8920 6119c-7-11-9-23-6-26 3-4 1-12-5-19s-8-18-4-24c9-14 28-1 21 16-3 7-1 16 3 19 13 7 20 44 11 50-5 3-14-4-20-16zM5492 6117c-23-29-91-176-83-181 12-8 22 7 69 101 22 46 37 85 32 88-4 2-12-1-18-8zM5241 6016c-7-8-8-17-3-20 6-3 15 1 21 8 7 8 8 17 3 20-6 3-15-1-21-8zM7776 6012c-3-6 1-15 8-21 8-7 17-8 20-3 3 6-1 15-8 21-8 7-17 8-20 3zM1966 6002c-3-6 1-15 8-21 8-7 17-8 20-3 3 6-1 15-8 21-8 7-17 8-20 3zM3295 5970c-8-13 20-24 41-16 20 8 9 26-16 26-10 0-22-5-25-10zM5211 5966c-7-8-8-17-3-20 6-3 15 1 21 8 7 8 8 17 3 20-6 3-15-1-21-8zM10991 5956c-7-8-8-17-3-20 6-3 15 1 21 8 7 8 8 17 3 20-6 3-15-1-21-8zM3216 5931c-10-11-13-22-8-25s17 3 26 13c10 11 13 22 8 25s-17-3-26-13zM2985 5930c-4-6-1-18 7-27 7-9 12-18 11-20-2-1-1-3 2-3h12c4 0 2 5-4 11s-9 17-7 24c7 16-12 29-21 15zM3417 5914c-3-5 3-20 12-33 11-14 21-19 25-13 3 5-2 20-12 33-11 12-21 18-25 13zM5371 5886c-7-8-8-17-3-20 6-3 15 1 21 8 7 8 8 17 3 20-6 3-15-1-21-8zM9215 5880c-8-13 20-24 41-16 20 8 9 26-16 26-10 0-22-5-25-10zM5131 5846c-7-8-8-17-3-20 6-3 15 1 21 8 7 8 8 17 3 20-6 3-15-1-21-8zM9136 5841c-10-11-13-22-8-25s17 3 26 13c10 11 13 22 8 25s-17-3-26-13zM9336 5822c-3-6 1-15 8-21 8-7 17-8 20-3 3 6-1 15-8 21-8 7-17 8-20 3zM3036 5802c-3-6 1-15 8-21 8-7 17-8 20-3 3 6-1 15-8 21-8 7-17 8-20 3zM3426 5789c-15-23-12-44 5-34 5 4 13 15 19 25 15 28-6 35-24 9zM5311 5796c-7-8-8-17-3-20 6-3 15 1 21 8 7 8 8 17 3 20-6 3-15-1-21-8zM3865 5790c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM9795 5790c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM7725 5770c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM10841 5766c-7-8-8-17-3-20 6-3 15 1 21 8 7 8 8 17 3 20-6 3-15-1-21-8zM3066 5762c-3-5 3-17 13-26 11-10 22-13 25-8s-3 17-13 26c-11 10-22 13-25 8zM5061 5756c-7-8-8-17-3-20 6-3 15 1 21 8 7 8 8 17 3 20-6 3-15-1-21-8zM8986 5752c-3-6 1-15 8-21 8-7 17-8 20-3 3 6-1 15-8 21-8 7-17 8-20 3zM3831 5715c-11-19-16-37-12-40 10-5 22 8 40 42 19 37-6 35-28-2zM5255 5720c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM9751 5696c-7-8-8-17-3-20 6-3 15 1 21 8 7 8 8 17 3 20-6 3-15-1-21-8zM4961 5646c-24-24-39-46-34-49 6-4 29 13 52 37 24 24 39 46 34 49-6 4-29-13-52-37zM9056 5682c-3-6 1-15 8-21 8-7 17-8 20-3 3 6-1 15-8 21-8 7-17 8-20 3zM10741 5666c-7-8-8-17-3-20 6-3 15 1 21 8 7 8 8 17 3 20-6 3-15-1-21-8zM9106 5641c-4-5 7-19 23-30 16-12 32-17 35-12 4 5-7 19-23 30-16 12-32 17-35 12zM7836 5632c-3-5 3-17 13-26 11-10 22-13 25-8s-3 17-13 26c-11 10-22 13-25 8zM3712 5598c-17-11-30-24-26-29 5-9 58 14 69 30 11 19-11 18-43-1zM10666 5601c-10-11-13-22-8-25s17 3 26 13c10 11 13 22 8 25s-17-3-26-13zM3305 5581c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM9620 5575c-7-8-16-13-20-10-5 3-11 1-14-4-4-5-2-12 3-15 5-4 12-2 16 4s10 8 15 5c4-3 13 2 19 9 7 8 8 17 3 20-6 3-15-1-22-9zM2346 5572c-3-6 1-15 8-21 8-7 17-8 20-3 3 6-1 15-8 21-8 7-17 8-20 3zM10621 5566c-7-8-8-17-3-20 6-3 15 1 21 8 7 8 8 17 3 20-6 3-15-1-21-8zM3636 5561c-4-6-13-8-20-5-17 7-30-12-16-21 6-4 16-2 23 3 7 6 15 11 20 11 8 1 11 11 4 17-3 3-8 1-11-5zM3415 5551c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM9285 5551c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM9515 5541c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM10565 5526c-15-13-24-25-19-29 6-3 23 4 39 17 15 13 24 25 19 29-6 3-23-4-39-17zM2425 5511c-3-6 21-28 54-50 33-23 62-37 66-32 3 6-21 28-54 50-33 23-62 37-66 32zM8236 5501c-3-5 5-16 19-25 24-16 45-6 22 11-24 19-36 23-41 14zM10468 5463c-21-14-35-29-32-34 6-10 58 17 75 38 19 23-7 20-43-4zM7996 5472c-3-6 1-15 8-21 8-7 17-8 20-3 3 6-1 15-8 21-8 7-17 8-20 3zM4717 5444c-21-14-35-29-32-34s24 2 45 16c22 15 37 30 34 35-7 12-4 13-47-17zM8346 5432c-3-6 1-15 8-21 8-7 17-8 20-3 3 6-1 15-8 21-8 7-17 8-20 3zM2555 5420c-3-5 8-16 24-25 36-18 51-3 19 19-26 18-35 20-43 6zM10336 5393c-46-23-65-38-58-45 10-10 124 41 136 61 14 22-13 17-78-16zM4641 5396c-7-8-8-17-3-20 6-3 15 1 21 8 7 8 8 17 3 20-6 3-15-1-21-8zM8395 5400c-9-15 44-45 57-32 7 7 1 15-20 26-18 9-33 12-37 6zM2655 5370c-9-15 44-45 57-32 7 7 1 15-20 26-18 9-33 12-37 6zM4572 5358c-18-11-29-24-26-29 5-9 58 14 69 30 11 19-12 19-43-1zM8146 5351c-6-8 5-20 31-35 23-13 22 12-2 28-13 9-26 12-29 7zM8525 5331c-7-13 32-34 47-25 7 5 5 11-7 21-22 15-32 16-40 4zM10205 5331c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM2755 5321c-7-13 32-34 47-25 7 5 5 11-7 21-22 15-32 16-40 4zM4481 5314c-23-11-31-18-24-25 13-13 77 17 68 31-4 6-7 10-8 9-1 0-17-7-36-15zM10155 5311c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM8595 5301c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM2825 5290c-9-14 45-34 58-21 7 7 1 14-17 21-33 12-33 12-41 0zM8236 5292c-3-6 1-15 8-21 8-7 17-8 20-3 3 6-1 15-8 21-8 7-17 8-20 3zM8645 5281c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM10035 5271c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM4751 5256c-7-8-8-17-3-20 6-3 15 1 21 8 7 8 8 17 3 20-6 3-15-1-21-8zM8286 5262c-3-6 1-15 8-21 8-7 17-8 20-3 3 6-1 15-8 21-8 7-17 8-20 3zM10476 5262c-3-6 1-15 8-21 8-7 17-8 20-3 3 6-1 15-8 21-8 7-17 8-20 3zM2945 5250c-9-14 45-34 58-21 7 7 1 14-17 21-33 12-33 12-41 0zM9966 5251c-4-6-13-8-20-5-8 3-17 1-20-5-4-6-13-8-20-5-17 7-30-12-16-21 6-4 17-2 24 4s16 8 19 5 12-2 19 2c7 5 18 9 23 9 14 0 19 19 7 23-6 2-13-1-16-7zM8765 5241c-6-11 13-26 22-17 3 3 12 1 19-5s18-8 24-4c14 9 1 28-16 21-7-3-16-1-19 4-8 13-22 13-30 1zM9835 5221c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM3095 5211c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM4166 5201c-4-6-13-8-20-5-17 6-31-12-16-21 5-3 16-3 23 2 6 4 17 8 22 8 14 0 19 19 7 23-6 2-13-1-16-7zM9725 5201c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM10321 5186c-7-8-8-17-3-20 6-3 15 1 21 8 7 8 8 17 3 20-6 3-15-1-21-8zM2441 5176c-7-8-8-17-3-20 6-3 15 1 21 8 7 8 8 17 3 20-6 3-15-1-21-8zM3245 5181c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM4075 5181c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM9165 5170c-8-12 20-24 35-15 6 3 8 11 5 16-8 12-32 12-40-1zM9465 5171c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM3475 5151c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM3865 5151c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM8495 5151c-6-11 29-33 39-24 7 7-12 33-25 33-4 0-10-4-14-9zM4509 5132c-13-12-18-21-12-25s21 1 34 11c13 12 18 21 12 25s-21-1-34-11zM2666 5132c-3-6 1-15 8-21 8-7 17-8 20-3 3 6-1 15-8 21-8 7-17 8-20 3zM8556 5132c-3-6 1-15 8-21 8-7 17-8 20-3 3 6-1 15-8 21-8 7-17 8-20 3zM4450 5105c-7-8-16-13-20-10-15 9-64-15-53-26 6-6 19-6 39 2 16 7 32 13 36 13 15 2 30 24 20 30-5 3-15-1-22-9zM8625 5100c-6-9 9-18 62-34 29-9 40 12 11 23-51 19-67 21-73 11zM10586 5102c-3-6 1-15 8-21 8-7 17-8 20-3 3 6-1 15-8 21-8 7-17 8-20 3zM2976 5062c-3-6-2-13 4-17 5-3 10-3 10 1 0 3 7 1 15-6 8-6 19-9 25-5 14 9 1 28-15 21-7-2-17 0-23 6s-12 6-16 0zM4285 5051c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM8795 5051c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM9870 5041c-6-12-6-22-1-26 6-3 15 3 21 14 6 12 6 22 1 26-6 3-15-3-21-14zM10616 5052c-3-6 1-15 8-21 8-7 17-8 20-3 3 6-1 15-8 21-8 7-17 8-20 3zM10121 5026c-7-8-8-17-3-20 6-3 15 1 21 8 7 8 8 17 3 20-6 3-15-1-21-8zM8945 5021c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM2766 5012c-3-6 1-15 8-21 8-7 17-8 20-3 3 6-1 15-8 21-8 7-17 8-20 3zM2271 4981c-12-16-17-32-12-35 5-4 19 7 30 23 12 16 17 32 12 35-5 4-19-7-30-23zM9115 5001c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM9525 5001c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM3575 4971c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM3775 4970c-8-12 20-24 35-15 6 3 8 11 5 16-8 12-32 12-40-1zM3046 4962c-3-6 1-15 8-21 8-7 17-8 20-3 3 6-1 15-8 21-8 7-17 8-20 3zM10125 4950c-9-14 45-34 58-21 7 7 1 14-17 21-33 12-33 12-41 0zM9721 4916c-7-8-8-17-3-20 6-3 15 1 21 8 7 8 8 17 3 20-6 3-15-1-21-8zM10275 4921c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM10415 4920c-8-13 20-24 41-16 20 8 9 26-16 26-10 0-22-5-25-10zM10165 4830c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM10725 4830c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM2701 4816c-7-8-8-17-3-20 6-3 15 1 21 8 7 8 8 17 3 20-6 3-15-1-21-8zM9581 4816c-7-8-8-17-3-20 6-3 15 1 21 8 7 8 8 17 3 20-6 3-15-1-21-8zM10036 4822c-3-6 1-15 8-21 8-7 17-8 20-3 3 6-1 15-8 21-8 7-17 8-20 3zM9851 4796c-7-8-8-17-3-20 6-3 15 1 21 8 7 8 8 17 3 20-6 3-15-1-21-8zM2910 4755c-7-19-7-32-1-38 7-7 14-1 21 18s7 32 1 38c-7 7-14 1-21-18zM10745 4770c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM9491 4756c-7-8-8-17-3-20 6-3 15 1 21 8 7 8 8 17 3 20-6 3-15-1-21-8zM9771 4736c-7-8-8-17-3-20 6-3 15 1 21 8 7 8 8 17 3 20-6 3-15-1-21-8zM3346 4712c-3-6 1-15 8-21 8-7 17-8 20-3 3 6-1 15-8 21-8 7-17 8-20 3zM2667 4678c-44-21-42-42 3-27 31 11 56 35 43 41-4 3-25-4-46-14zM3086 4692c-3-6 1-15 8-21 8-7 17-8 20-3 3 6-1 15-8 21-8 7-17 8-20 3zM9701 4686c-7-8-8-17-3-20 6-3 15 1 21 8 7 8 8 17 3 20-6 3-15-1-21-8zM10235 4690c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM3385 4681c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM2585 4636c-11-8-14-16-8-19 6-4 18 0 28 7 11 8 14 16 8 19-6 4-18 0-28-7zM3446 4641c-3-5 5-16 19-25 24-16 45-6 22 11-24 19-36 23-41 14zM9615 4630c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM10775 4620c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM3186 4612c-3-6 1-15 8-21 8-7 17-8 20-3 3 6-1 15-8 21-8 7-17 8-20 3zM9636 4592c-3-6 1-15 8-21 8-7 17-8 20-3 3 6-1 15-8 21-8 7-17 8-20 3zM10276 4592c-3-6-1-23 4-39 6-15 13-34 16-42 3-9 8-11 14-5 7 7 6 22-1 45-14 41-25 54-33 41zM3566 4572c-3-6 1-15 8-21 8-7 17-8 20-3 3 6-1 15-8 21-8 7-17 8-20 3zM10775 4540c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM3181 4476c-7-8-8-17-3-20 6-3 15 1 21 8 7 8 8 17 3 20-6 3-15-1-21-8zM3725 4480c-3-5 8-16 24-25 18-9 32-11 36-5 3 5-8 16-24 25-18 9-32 11-36 5zM10205 4460c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM9756 4442c-3-6 1-15 8-21 8-7 17-8 20-3 3 6-1 15-8 21-8 7-17 8-20 3zM10755 4440c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM2115 4420c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM3131 4406c-7-8-8-17-3-20 6-3 15 1 21 8 7 8 8 17 3 20-6 3-15-1-21-8zM8795 4391c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM10726 4365c-16-24-6-45 11-22 19 24 23 36 14 41-5 3-16-5-25-19zM4145 4301c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM3016 4271c-15-16-23-31-18-35 5-3 21 8 36 23 15 16 23 31 18 35-5 3-21-8-36-23zM8425 4254c-22-8-46-17-54-19-9-4-11-9-5-15 12-12 113 19 114 35 2 15-12 15-55-1zM4385 4221c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM2196 4212c-3-6 1-15 8-21 8-7 17-8 20-3 3 6-1 15-8 21-8 7-17 8-20 3zM10035 4211c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM8235 4191c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM10105 4180c-9-14 45-34 58-21 7 7 1 14-17 21-33 12-33 12-41 0zM8165 4171c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM4625 4151c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM10425 4151c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM8056 4141c-4-6-13-8-20-5-8 3-17 1-20-5-4-6-13-8-20-5-8 3-17 1-20-5-4-6-13-8-20-5-17 7-30-12-16-21 6-4 17-2 24 4s16 8 19 4c4-3 13-1 20 5 8 7 17 9 20 6s12-2 19 2c7 5 18 9 23 9 14 0 19 19 7 23-6 2-13-1-16-7zM4825 4101c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM2375 4081c-6-11 13-26 22-17 3 3 12 1 19-5s18-8 24-4c14 9 1 28-16 21-7-3-16-1-19 4-8 13-22 13-30 1zM4915 4081c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM4965 4071c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM2585 4061c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM5135 4041c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM5215 4031c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM5305 4021c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM5395 4011c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM5485 4001c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM7265 3991c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM6965 3961c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM5945 3950c-8-12 20-24 35-15 6 3 8 11 5 16-8 12-32 12-40-1zM6815 3950c-8-12 20-24 35-15 6 3 8 11 5 16-8 12-32 12-40-1zM6175 3941c-7-13 17-24 40-19 9 1 16 8 16 13 0 14-48 19-56 6zM6575 3941c-7-13 17-24 40-19 9 1 16 8 16 13 0 14-48 19-56 6z"/></g><g fill="#515150" fill-rule="nonzero"><path d="M10984 10756c-4-10-2-22 4-28 8-8 13-7 18 6 4 10 2 22-4 28-8 8-13 7-18-6zM1995 10661c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM2195 10611c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM9925 10601c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM2375 10571c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM1855 10538c-9-22-2-68 10-71 14-3 19 63 6 76-7 7-12 5-16-5zM9646 10531c-4-6-13-8-20-5-17 6-31-12-16-21 5-3 16-3 23 2 6 4 17 8 22 8 14 0 19 19 7 23-6 2-13-1-16-7zM2675 10511c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM9515 10501c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM2785 10491c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM9375 10471c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM9325 10461c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM3025 10451c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM3155 10431c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM9055 10411c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM3435 10390c-8-12 20-24 35-15 6 3 8 11 5 16-8 12-32 12-40-1zM8935 10391c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM3515 10381c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM8875 10381c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM3595 10371c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM3675 10360c-8-12 20-24 35-15 6 3 8 11 5 16-8 12-32 12-40-1zM8745 10361c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM8675 10351c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM3855 10340c-8-12 20-24 35-15 6 3 8 11 5 16-8 12-32 12-40-1zM3945 10330c-8-12 20-24 35-15 6 3 8 11 5 16-8 12-32 12-40-1zM8525 10331c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM4045 10320c-8-12 20-24 35-15 6 3 8 11 5 16-8 12-32 12-40-1zM8445 10321c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM4145 10311c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM8355 10310c-8-12 20-24 35-15 6 3 8 11 5 16-8 12-32 12-40-1zM8265 10300c-8-12 20-24 35-15 6 3 8 11 5 16-8 12-32 12-40-1zM4375 10291c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM4505 10280c-8-12 20-24 35-15 6 3 8 11 5 16-8 12-32 12-40-1zM4635 10271c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM7975 10271c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM4785 10261c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM7855 10261c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM4945 10250c-8-12 20-24 35-15 6 3 8 11 5 16-8 12-32 12-40-1zM7715 10250c-8-12 20-24 35-15 6 3 8 11 5 16-8 12-32 12-40-1zM5135 10240c-8-12 20-24 35-15 6 3 8 11 5 16-8 12-32 12-40-1zM7565 10240c-8-12 20-24 35-15 6 3 8 11 5 16-8 12-32 12-40-1zM5345 10230c-8-13 20-24 41-16 20 8 9 26-16 26-10 0-22-5-25-10zM7385 10230c-8-12 20-24 35-15 6 3 8 11 5 16-8 12-32 12-40-1zM5625 10220c-8-13 20-24 41-16 20 8 9 26-16 26-10 0-22-5-25-10zM7155 10220c-8-13 20-24 41-16 20 8 9 26-16 26-10 0-22-5-25-10zM6065 10210c-3-5 0-13 9-16 21-8 61-1 61 11 0 14-62 19-70 5zM6785 10210c-3-5 0-13 9-16 21-8 71-1 71 11 0 14-72 19-80 5zM10975 10138c-9-22-2-68 10-71 14-3 19 63 6 76-7 7-12 5-16-5zM1864 10097c-7-20-2-47 11-50 14-3 19 43 6 56-7 7-12 6-17-6zM1874 9796c-4-10-2-22 4-28 8-8 13-7 18 6 4 10 2 22-4 28-8 8-13 7-18-6zM6325 9701c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM6535 9701c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM6265 9691c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM6635 9691c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM10964 9677c-7-20-2-47 11-50 14-3 19 43 6 56-7 7-12 6-17-6zM6175 9656c-11-8-14-16-8-19 6-4 18 0 28 7 11 8 14 16 8 19-6 4-18 0-28-7zM6111 9616c-7-8-8-17-3-20 6-3 15 1 21 8 7 8 8 17 3 20-6 3-15-1-21-8zM6826 9622c-3-5 8-21 23-36 16-15 31-23 35-18 3 5-8 21-23 36-16 15-31 23-35 18zM1884 9566c-4-10-2-22 4-28 8-8 13-7 18 6 4 10 2 22-4 28-8 8-13 7-18-6zM6365 9531c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM6645 9510c-6-9-4-11 20-14 6-1 20-7 32-14 13-7 24-8 28-3 3 6-4 15-15 21s-20 7-20 3-5-2-12 5c-15 15-25 15-33 2zM6425 9490c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM10954 9396c-8-21 3-49 16-41 5 3 10 15 10 25 0 25-18 36-26 16zM5965 9380c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM1894 9366c-4-10-2-22 4-28 8-8 13-7 18 6 4 10 2 22-4 28-8 8-13 7-18-6zM6965 9340c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM5954 9326c-4-10-2-22 4-28 8-8 13-7 18 6 4 10 2 22-4 28-8 8-13 7-18-6zM6425 9320c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM6125 9270c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM5944 9246c-4-10-2-22 4-28 8-8 13-7 18 6 4 10 2 22-4 28-8 8-13 7-18-6zM6525 9250c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM6415 9220c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM9465 9211c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM9855 9210c-8-12 20-24 35-15 6 3 8 11 5 16-8 12-32 12-40-1zM6985 9200c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM9355 9201c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM9955 9201c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM1905 9190c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM3205 9190c-8-13 20-24 41-16 20 8 9 26-16 26-10 0-22-5-25-10zM3435 9190c-8-13 20-24 41-16 20 8 9 26-16 26-10 0-22-5-25-10zM9275 9191c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM10025 9191c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM3075 9180c-8-12 20-24 35-15 6 3 8 11 5 16-8 12-32 12-40-1zM3585 9180c-8-12 20-24 35-15 6 3 8 11 5 16-8 12-32 12-40-1zM9215 9181c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM2995 9170c-8-12 20-24 35-15 6 3 8 11 5 16-8 12-32 12-40-1zM3675 9171c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM6514 9166c-8-21 3-49 16-41 5 3 10 15 10 25 0 25-18 36-26 16zM9155 9171c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM10944 9166c-4-10-2-22 4-28 8-8 13-7 18 6 4 10 2 22-4 28-8 8-13 7-18-6zM2935 9161c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM3745 9161c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM9105 9161c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM10175 9161c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM2885 9151c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM3805 9151c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM2835 9141c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM3855 9141c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM6115 9138c-9-24-1-103 10-103 14 0 19 95 6 108-7 7-12 5-16-5zM6815 9140c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM9005 9143c-29-7-41-21-23-28 20-8 71 12 63 25-6 10-8 11-40 3zM10235 9140c-3-6 0-12 7-14s35-11 62-20c32-11 53-13 60-6 6 6 4 11-5 15-104 38-115 40-124 25zM3905 9131c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM2765 9121c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM3985 9110c-8-12 20-24 35-15 6 3 8 11 5 16-8 12-32 12-40-1zM8905 9110c-8-12 20-24 35-15 6 3 8 11 5 16-8 12-32 12-40-1zM4065 9091c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM2645 9081c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM5775 9081c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM10405 9081c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM4135 9070c-3-6 0-12 7-15 82-30 103-34 111-26 7 7 5 12-4 16-37 13-102 35-105 35-1 0-6-5-9-10zM5715 9071c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM6505 9070c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM2592 9059c-13-5-20-13-17-19 8-13 18-13 40 3 23 17 8 28-23 16zM6395 9050c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM6995 9047c-9-22-2-62 10-60 6 1 11 14 13 29 4 32-14 56-23 31zM8725 9051c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM9595 9040c-3-5 0-13 8-16 24-9 162 0 162 11 0 14-161 19-170 5zM10496 9042c-3-6 1-15 8-21 8-7 17-8 20-3 3 6-1 15-8 21-8 7-17 8-20 3zM1915 9030c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM8675 9031c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM9435 9030c-8-12 20-24 35-15 6 3 8 11 5 16-8 12-32 12-40-1zM9875 9031c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM9345 9020c-8-12 20-24 35-15 6 3 8 11 5 16-8 12-32 12-40-1zM9955 9021c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM3155 9010c-8-12 20-24 35-15 6 3 8 11 5 16-8 12-32 12-40-1zM3495 9010c-8-12 20-24 35-15 6 3 8 11 5 16-8 12-32 12-40-1zM4305 9011c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM8625 9011c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM9275 9011c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM10015 9011c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM3065 9001c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM3605 9001c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM7035 9001c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM10065 9001c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM2995 8991c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM3685 8991c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM6195 8990c-6-10 9-19 37-24 7-1 19-5 26-9 6-5 17-5 22-2 14 8 1 28-14 22-6-3-20 1-31 9-22 17-32 17-40 4zM7215 8991c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM9166 8991c-4-6-13-8-20-5-17 6-31-12-16-21 5-3 16-3 23 2 6 4 17 8 22 8 14 0 19 19 7 23-6 2-13-1-16-7zM2425 8966c-15-13-24-25-19-29 6-3 23 4 39 17 15 13 24 25 19 29-6 3-23-4-39-17zM2945 8981c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM3745 8981c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM10934 8976c-4-10-2-22 4-28 8-8 13-7 18 6 4 10 2 22-4 28-8 8-13 7-18-6zM2896 8971c-4-6-13-8-20-5-17 6-31-12-16-21 5-3 16-3 23 2 6 4 17 8 22 8 14 0 19 19 7 23-6 2-13-1-16-7zM3805 8971c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM7275 8971c-3-6 3-15 14-21 12-6 22-6 26-1 3 6-3 15-14 21-12 6-22 6-26 1zM8513 8959c-45-29-31-43 18-19 22 12 37 25 34 30-9 14-16 12-52-11zM9076 8971c-4-6-13-8-20-5-17 6-31-12-16-21 5-3 16-3 23 2 6 4 17 8 22 8 14 0 19 19 7 23-6 2-13-1-16-7zM10185 8970c-6-9 9-18 62-34 29-9 40 12 11 23-51 19-67 21-73 11zM10606 8972c-3-6 1-15 8-21 8-7 17-8 20-3 3 6-1 15-8 21-8 7-17 8-20 3zM3895 8951c-6-11 13-26 22-17 3 3 12 1 20-6 7-6 16-8 20-5 3 4 12 2 19-4s18-8 24-4c14 9 1 28-16 21-7-3-16-1-20 5-3 6-12 8-20 5-7-3-16-1-19 4-8 13-22 13-30 1zM6325 8951c-6-11 13-26 22-17 3 3 12 1 19-5s18-8 24-4c14 9 1 28-16 21-7-3-16-1-19 4-8 13-22 13-30 1zM6795 8951c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM4465 8941c-3-6 3-15 14-21 12-6 22-6 26-1 3 6-3 15-14 21-12 6-22 6-26 1zM8951 8939c-16-6-21-13-14-20 13-13 67 7 58 21-7 12-12 12-44-1zM10646 8942c-3-6 1-15 8-21 8-7 17-8 20-3 3 6-1 15-8 21-8 7-17 8-20 3zM6505 8921c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM6605 8920c-8-12 20-24 35-15 6 3 8 11 5 16-8 12-32 12-40-1zM4525 8911c-3-6 3-15 14-21 12-6 22-6 26-1 3 6-3 15-14 21-12 6-22 6-26 1zM5905 8901c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM1925 8890c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM2316 8881c-10-11-13-22-8-25s17 3 26 13c10 11 13 22 8 25s-17-3-26-13zM8381 8886c-7-8-8-17-3-20 6-3 15 1 21 8 7 8 8 17 3 20-6 3-15-1-21-8zM10716 8882c-3-6 1-15 8-21 8-7 17-8 20-3 3 6-1 15-8 21-8 7-17 8-20 3zM4165 8871c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM8331 8856c-7-8-8-17-3-20 6-3 15 1 21 8 7 8 8 17 3 20-6 3-15-1-21-8zM5651 8836c-13-13-18-26-13-30 5-3 19 5 31 18 13 13 18 26 13 30-5 3-19-5-31-18zM10924 8816c-4-10-2-22 4-28 8-8 13-7 18 6 4 10 2 22-4 28-8 8-13 7-18-6zM2221 8796c-13-13-18-26-13-30 5-3 19 5 31 18 13 13 18 26 13 30-5 3-19-5-31-18zM2511 8806c-7-8-8-17-3-20 6-3 15 1 21 8 7 8 8 17 3 20-6 3-15-1-21-8zM6965 8811c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM8615 8806c-11-8-14-16-8-19 6-4 18 0 28 7 11 8 14 16 8 19-6 4-18 0-28-7zM6235 8791c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM8211 8776c-7-8-8-17-3-20 6-3 15 1 21 8 7 8 8 17 3 20-6 3-15-1-21-8zM4766 8772c-3-6 1-15 8-21 8-7 17-8 20-3 3 6-1 15-8 21-8 7-17 8-20 3zM5609 8776c-1-3-2-9-3-13-1-5-5-13-9-20-4-6-3-14 3-18 5-3 11-4 11-1 1 3 2 9 3 14 1 4 5 12 9 19 4 6 3 14-3 18-5 3-11 4-11 1zM8535 8766c-11-8-14-16-8-19 6-4 18 0 28 7 11 8 14 16 8 19-6 4-18 0-28-7zM1935 8760c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM6355 8761c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM6745 8761c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM6425 8751c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM6665 8750c-8-12 20-24 35-15 6 3 8 11 5 16-8 12-32 12-40-1zM2421 8736c-7-8-8-17-3-20 6-3 15 1 21 8 7 8 8 17 3 20-6 3-15-1-21-8zM7485 8740c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM10616 8732c-3-6 1-15 8-21 8-7 17-8 20-3 3 6-1 15-8 21-8 7-17 8-20 3zM2111 8686c-13-13-18-26-13-30 5-3 19 5 31 18 13 13 18 26 13 30-5 3-19-5-31-18zM4886 8682c-3-5 3-17 13-26 11-10 22-13 25-8s-3 17-13 26c-11 10-22 13-25 8zM8081 8676c-7-8-8-17-3-20 6-3 15 1 21 8 7 8 8 17 3 20-6 3-15-1-21-8zM5585 8670c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM2306 8631c-15-16-23-31-18-35 5-3 21 8 36 23 15 16 23 31 18 35-5 3-21-8-36-23zM7505 8640c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM1944 8626c-4-10-2-22 4-28 8-8 13-7 18 6 4 10 2 22-4 28-8 8-13 7-18-6zM4956 8622c-3-5 3-17 13-26 11-10 22-13 25-8s-3 17-13 26c-11 10-22 13-25 8zM2041 8606c-7-8-8-17-3-20 6-3 15 1 21 8 7 8 8 17 3 20-6 3-15-1-21-8zM8271 8596c-7-8-8-17-3-20 6-3 15 1 21 8 7 8 8 17 3 20-6 3-15-1-21-8zM5415 8590c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM5595 8590c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM7941 8546c-24-24-39-46-34-49 6-4 29 13 52 37 24 24 39 46 34 49-6 4-29-13-52-37zM10766 8582c-3-5 3-17 13-26 11-10 22-13 25-8s-3 17-13 26c-11 10-22 13-25 8zM7504 8556c-4-10-2-22 4-28 8-8 13-7 18 6 4 10 2 22-4 28-8 8-13 7-18-6zM4786 8532c-3-6 1-15 8-21 8-7 17-8 20-3 3 6-1 15-8 21-8 7-17 8-20 3zM5425 8530c-4-6-1-18 7-27 7-9 12-18 11-20-2-1-1-3 2-3h12c4 0 2 5-4 11s-9 17-7 24c7 16-12 29-21 15zM1955 8520c-10-17 12-37 25-24 8 8 6 15-4 23-10 9-16 9-21 1zM8166 8511c-10-11-13-22-8-25s17 3 26 13c10 11 13 22 8 25s-17-3-26-13zM2191 8506c-7-8-8-17-3-20 6-3 15 1 21 8 7 8 8 17 3 20-6 3-15-1-21-8zM7319 8486c-1-3-2-9-3-13-1-5-5-13-9-20-4-6-3-14 3-18 5-3 11-4 11-1 1 3 2 9 3 14 1 4 5 12 9 19 4 6 3 14-3 18-5 3-11 4-11 1zM7495 8480c-4-6-4-14-1-17s1-12-5-19-8-18-4-24c9-14 28-1 21 15-2 7 1 18 7 24 8 8 8 14 0 22s-13 8-18-1zM4856 8472c-3-6 1-15 8-21 8-7 17-8 20-3 3 6-1 15-8 21-8 7-17 8-20 3zM10866 8462c-3-6 1-15 8-21 8-7 17-8 20-3 3 6-1 15-8 21-8 7-17 8-20 3zM5126 8452c-3-5 3-17 13-26 11-10 22-13 25-8s-3 17-13 26c-11 10-22 13-25 8zM5647 8433c-4-6 0-18 7-28 8-11 16-14 19-8 4 6 0 18-7 28-8 11-16 14-19 8zM7826 8421c-10-11-13-22-8-25s17 3 26 13c10 11 13 22 8 25s-17-3-26-13zM10896 8422c-3-6 1-15 8-21 8-7 17-8 20-3 3 6-1 15-8 21-8 7-17 8-20 3zM7786 8371c-10-11-13-22-8-25s17 3 26 13c10 11 13 22 8 25s-17-3-26-13zM10927 8384c-9-10 53-95 64-89 5 4-5 26-21 51-33 47-33 47-43 38zM5196 8372c-3-6 1-15 8-21 8-7 17-8 20-3 3 6-1 15-8 21-8 7-17 8-20 3zM6380 8365c-10-12-9-16 4-21 18-7 49 13 40 27-8 14-30 11-44-6zM6445 8360c-8-13 20-24 41-16 20 8 9 26-16 26-10 0-22-5-25-10zM6285 8351c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM6545 8351c-6-11 13-26 22-17 3 3 12 1 20-6 7-6 16-8 20-5 3 4 12 2 19-4s18-8 24-4c14 9 1 28-16 21-7-3-16-1-20 5-3 6-12 8-20 5-7-3-16-1-19 4-8 13-22 13-30 1zM2041 8306c-17-25-27-47-22-51 6-3 24 15 40 39 17 25 27 47 22 51-6 3-24-15-40-39zM4986 8342c-3-6 1-15 8-21 8-7 17-8 20-3 3 6-1 15-8 21-8 7-17 8-20 3zM7991 8336c-7-8-8-17-3-20 6-3 15 1 21 8 7 8 8 17 3 20-6 3-15-1-21-8zM5227 8334c-3-5 9-27 27-49 18-21 35-34 39-29 3 5-9 27-27 49-18 21-35 34-39 29zM7721 8286c-7-8-8-17-3-20 6-3 15 1 21 8 7 8 8 17 3 20-6 3-15-1-21-8zM7941 8276c-7-8-8-17-3-20 6-3 15 1 21 8 7 8 8 17 3 20-6 3-15-1-21-8zM5046 8272c-3-6 1-15 8-21 8-7 17-8 20-3 3 6-1 15-8 21-8 7-17 8-20 3zM5766 8252c-3-5 8-21 23-36 16-15 31-23 35-18 3 5-8 21-23 36-16 15-31 23-35 18zM6816 8232c-3-6 1-15 8-21 8-7 17-8 20-3 3 6-1 15-8 21-8 7-17 8-20 3zM7901 8226c-7-8-8-17-3-20 6-3 15 1 21 8 7 8 8 17 3 20-6 3-15-1-21-8zM5086 8222c-3-6 1-15 8-21 8-7 17-8 20-3 3 6-1 15-8 21-8 7-17 8-20 3zM5961 8196c-7-8-8-17-3-20 6-3 15 1 21 8 7 8 8 17 3 20-6 3-15-1-21-8zM5116 8182c-3-6 1-15 8-21 8-7 17-8 20-3 3 6-1 15-8 21-8 7-17 8-20 3zM6443 8146c-234-94-316-269-176-372 95-70 142-77 337-51 75 10 175 49 215 84 35 29 41 41 41 73 0 69-110 203-209 255-14 7-49 20-77 28-51 15-53 15-131-17zm316-170c36-43-62-186-127-186-39 0-52 29-21 50 45 31 78 68 85 96 12 52 39 69 63 40zM7091 8166c-7-8-8-17-3-20 6-3 15 1 21 8 7 8 8 17 3 20-6 3-15-1-21-8zM6265 8150c-4-6-10-8-15-5s-11 1-14-4c-4-5-2-12 3-15 5-4 12-2 16 4s10 8 15 5 11-1 14 4c4 5 2 12-3 15-5 4-12 2-16-4zM5637 8132c-4-5 9-23 27-41 19-18 36-29 39-23 4 5-9 23-27 41-19 18-36 29-39 23zM6147 8100c-63-40-138-110-131-122 4-5 23 6 43 25s62 51 94 71c32 21 55 41 52 46-8 13-4 14-58-20zM7601 8096c-7-8-8-17-3-20 6-3 15 1 21 8 7 8 8 17 3 20-6 3-15-1-21-8zM11097 8094c-3-4-2-16 4-26 8-15 14-17 22-9s7 15-4 26c-8 9-18 13-22 9zM5188 8084c-10-10 21-66 32-59 14 9 12 17-8 43-10 13-21 20-24 16zM7801 8076c-7-8-8-17-3-20 6-3 15 1 21 8 7 8 8 17 3 20-6 3-15-1-21-8zM7771 8026c-7-8-8-17-3-20 6-3 15 1 21 8 7 8 8 17 3 20-6 3-15-1-21-8zM5427 8024c-9-10 52-126 63-119 10 6 2 33-25 84-16 32-29 44-38 35zM5227 8014c-3-4-2-16 4-26 8-15 14-17 22-9s7 15-4 26c-8 9-18 13-22 9zM1835 7920c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM1815 7870c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM5986 7872c-3-5 7-20 22-34 36-34 129-80 137-68 3 5-18 21-47 36-29 14-65 37-79 51-15 14-29 20-33 15zM5307 7863c-4-6 0-18 7-28 8-11 16-14 19-8 4 6 0 18-7 28-8 11-16 14-19 8zM5795 7840c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM11206 7841c-4-5-2-12 4-16s8-10 5-15-1-11 4-15c6-3 8-12 5-19-7-17 12-30 21-16 4 6 1 17-5 25-7 8-9 15-5 15s1 7-6 17c-8 9-12 18-11 20 2 3 1 7-1 9-3 3-8 1-11-5zM5826 7772c-3-6 1-15 8-21 8-7 17-8 20-3 3 6-1 15-8 21-8 7-17 8-20 3zM6966 7721c-10-11-13-22-8-25s17 3 26 13c10 11 13 22 8 25s-17-3-26-13zM7629 7716c-4-16-7-26-9-31-1-3-3-8-5-12-1-5-6-19-12-33-20-49-24-68-13-75s29 33 35 75c2 14 4 26 6 28 1 1 2 5 3 10 1 4 5 12 9 19 4 6 3 14-3 18-5 3-11 4-11 1zM5375 7690c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM5906 7692c-3-6 1-15 8-21 8-7 17-8 20-3 3 6-1 15-8 21-8 7-17 8-20 3zM7425 7690c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM5575 7660c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM1745 7650c-4-6-4-14-1-17s1-12-6-20c-6-7-8-16-5-20 4-3 2-12-4-19s-8-18-4-24c9-14 28-1 21 16-3 7-1 16 5 20 6 3 8 12 5 19-2 7 1 18 7 24 8 8 8 14 0 22s-13 8-18-1zM7406 7621c-4-6-5-15-1-20 3-5 0-13-6-16-5-4-8-13-5-21 3-7 1-16-5-20-5-3-9-13-7-22 1-10-1-23-5-29-5-7-5-18-2-23 9-15 27-1 21 16-3 7 0 16 5 20 6 3 9 15 6 25s-1 22 5 25c5 3 7 12 4 19-2 7 1 18 7 24 8 8 8 14 0 22s-13 8-17 0zM5595 7589c-4-6-3-15 3-21s8-16 6-23c-3-7-1-16 5-19 6-4 8-13 5-20-3-8-1-17 5-20 14-9 25 14 13 26-6 6-8 16-6 23 3 7 1 16-5 19-6 4-8 13-5 20 7 17-12 30-21 15zM6135 7581c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM6706 7581c-4-6-13-8-20-5-17 6-31-12-16-21 5-3 16-3 23 2 6 4 17 8 22 8 14 0 19 19 7 23-6 2-13-1-16-7zM5415 7570c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM6535 7550c-8-12 20-24 35-15 6 3 8 11 5 16-8 12-32 12-40-1zM11285 7550c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM1715 7520c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM5625 7460c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM7365 7440c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM11305 7430c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM5635 7410c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM1695 7400c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM7355 7380c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM7535 7370c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM5465 7350c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM5644 7346c-4-10-2-22 4-28 8-8 13-7 18 6 4 10 2 22-4 28-8 8-13 7-18-6zM1685 7320c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM7345 7310c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM7525 7300c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM5475 7280c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM5655 7280c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM11325 7240c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM7334 7216c-8-21 3-49 16-41 5 3 10 15 10 25 0 25-18 36-26 16zM1674 7206c-4-10-2-22 4-28 8-8 13-7 18 6 4 10 2 22-4 28-8 8-13 7-18-6zM7515 7210c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM5485 7190c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM5664 7176c-4-10-2-22 4-28 8-8 13-7 18 6 4 10 2 22-4 28-8 8-13 7-18-6zM11325 6970c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM1674 6956c-4-10-2-22 4-28 8-8 13-7 18 6 4 10 2 22-4 28-8 8-13 7-18-6zM7334 6856c-8-21 3-49 16-41 5 3 10 15 10 25 0 25-18 36-26 16zM5664 6846c-8-21 3-49 16-41 5 3 10 15 10 25 0 25-18 36-26 16zM7515 6850c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM1685 6840c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM5485 6820c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM1695 6760c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM7344 6746c-4-10-2-22 4-28 8-8 13-7 18 6 4 10 2 22-4 28-8 8-13 7-18-6zM5654 6736c-4-10-2-22 4-28 8-8 13-7 18 6 4 10 2 22-4 28-8 8-13 7-18-6zM5475 6730c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM7355 6680c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM5465 6660c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM5645 6660c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM7364 6626c-4-9-1-22 5-30 6-7 8-16 5-19-4-3-4-14 0-23 5-13 10-14 18-6 6 6 7 18 3 29-5 10-7 25-6 35 3 22-18 33-25 14zM11275 6620c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM1725 6600c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM5635 6600c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM5445 6560c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM5625 6550c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM11255 6540c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM1745 6520c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM5615 6500c-4-6-4-14-1-17s1-12-6-20c-6-7-8-16-5-20 4-3 2-12-4-19s-8-18-4-24c9-14 28-1 21 16-3 7-1 16 5 20 6 3 8 12 5 19-2 7 1 18 7 24 8 8 8 14 0 22s-13 8-18-1zM3435 6480c-3-5 0-13 9-16 21-8 61-1 61 11 0 14-62 19-70 5zM3355 6471c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM3555 6471c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM7585 6470c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM1766 6452c-3-6-1-23 4-39 6-15 13-34 16-42 3-9 8-11 14-5 7 7 6 22-1 45-14 41-25 54-33 41zM5415 6439c-30-82-34-104-26-112 7-7 12-5 16 4 30 82 34 104 26 112-7 7-12 5-16-4zM11220 6425c-7-19-7-32-1-38 7-7 14-1 21 18s7 32 1 38c-7 7-14 1-21-18zM9275 6391c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM9415 6391c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM9215 6381c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM9475 6381c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM5575 6350c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM7436 6341c-4-6-1-21 6-33 7-13 12-26 13-30 0-5 3-8 8-8 6 0 9 5 6 13 0 1-3 13-5 27-6 30-19 45-28 31zM9011 6266c-18-19-29-36-23-39 5-4 23 9 41 27 18 19 29 36 23 39-5 4-23-9-41-27zM1835 6260c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM3051 6246c-7-8-8-17-3-20 6-3 15 1 21 8 7 8 8 17 3 20-6 3-15-1-21-8zM5335 6220c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM8961 6206c-7-8-8-17-3-20 6-3 15 1 21 8 7 8 8 17 3 20-6 3-15-1-21-8zM9745 6181c-4-8-1-19 8-28 19-20 30-1 13 22-10 14-15 15-21 6zM2999 6126c-1-3-2-9-3-13-1-5-5-14-9-20-5-7-5-18-2-23 9-14 28-1 21 15-2 7 0 17 6 23s6 12-1 16c-6 4-12 5-12 2zM5260 6051c-6-12-6-22-1-26 6-3 15 3 21 14 6 12 6 22 1 26-6 3-15-3-21-14zM5460 6051c-6-12-6-22-1-26 6-3 15 3 21 14 6 12 6 22 1 26-6 3-15-3-21-14zM3885 6050c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM7766 6032c-3-6 1-15 8-21 8-7 17-8 20-3 3 6-1 15-8 21-8 7-17 8-20 3zM7577 6004c-3-5 3-20 12-33 11-14 21-19 25-13 3 5-2 20-12 33-11 12-21 18-25 13zM7797 5984c-9-9 73-125 84-119 5 4-9 33-31 66-43 62-43 63-53 53zM2007 5944c-3-6 4-23 17-39 13-15 25-24 29-19 3 6-4 23-17 39-13 15-25 24-29 19zM5193 5937c-19-24-23-36-14-41 5-3 16 5 25 19 16 24 6 45-11 22zM8905 5920c-4-6-1-18 7-27 7-9 12-18 11-20-2-1-1-3 2-3h12c4 0 2 5-4 11s-9 17-7 24c7 16-12 29-21 15zM10961 5916c-7-8-8-17-3-20 6-3 15 1 21 8 7 8 8 17 3 20-6 3-15-1-21-8zM5151 5876c-7-8-8-17-3-20 6-3 15 1 21 8 7 8 8 17 3 20-6 3-15-1-21-8zM10931 5876c-7-8-8-17-3-20 6-3 15 1 21 8 7 8 8 17 3 20-6 3-15-1-21-8zM2056 5872c-3-6 1-15 8-21 8-7 17-8 20-3 3 6-1 15-8 21-8 7-17 8-20 3zM3435 5870c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM3885 5870c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM9296 5862c-3-6 1-15 8-21 8-7 17-8 20-3 3 6-1 15-8 21-8 7-17 8-20 3zM7886 5852c-3-6 1-15 8-21 8-7 17-8 20-3 3 6-1 15-8 21-8 7-17 8-20 3zM10891 5826c-7-8-8-17-3-20 6-3 15 1 21 8 7 8 8 17 3 20-6 3-15-1-21-8zM2096 5822c-3-6 1-15 8-21 8-7 17-8 20-3 3 6-1 15-8 21-8 7-17 8-20 3zM3435 5820c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM3875 5820c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM7916 5812c-3-6 1-15 8-21 8-7 17-8 20-3 3 6-1 15-8 21-8 7-17 8-20 3zM7706 5792c-3-6 1-15 8-21 8-7 17-8 20-3 3 6-1 15-8 21-8 7-17 8-20 3zM8956 5792c-3-6 1-15 8-21 8-7 17-8 20-3 3 6-1 15-8 21-8 7-17 8-20 3zM9105 5790c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM5298 5772c-33-40-39-50-30-56 6-3 22 10 36 28 26 35 21 61-6 28zM9355 5780c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM2146 5762c-3-6 1-15 8-21 8-7 17-8 20-3 3 6-1 15-8 21-8 7-17 8-20 3zM9775 5741c-8-16-11-32-6-35 10-6 25 10 34 36 11 31-12 30-28-1zM7736 5752c-3-6 1-15 8-21 8-7 17-8 20-3 3 6-1 15-8 21-8 7-17 8-20 3zM7966 5752c-3-6 1-15 8-21 8-7 17-8 20-3 3 6-1 15-8 21-8 7-17 8-20 3zM10821 5746c-7-8-8-17-3-20 6-3 15 1 21 8 7 8 8 17 3 20-6 3-15-1-21-8zM9355 5730c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM9105 5720c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM10771 5696c-13-13-18-26-13-30 5-3 19 5 31 18 13 13 18 26 13 30-5 3-19-5-31-18zM5241 5696c-7-8-8-17-3-20 6-3 15 1 21 8 7 8 8 17 3 20-6 3-15-1-21-8zM9076 5662c-3-6 1-15 8-21 8-7 17-8 20-3 3 6-1 15-8 21-8 7-17 8-20 3zM9701 5636c-18-19-29-36-23-39 5-4 23 9 41 27 18 19 29 36 23 39-5 4-23-9-41-27zM5201 5646c-7-8-8-17-3-20 6-3 15 1 21 8 7 8 8 17 3 20-6 3-15-1-21-8zM7816 5652c-3-6 1-15 8-21 8-7 17-8 20-3 3 6-1 15-8 21-8 7-17 8-20 3zM2266 5642c-3-5 3-17 13-26 11-10 22-13 25-8s-3 17-13 26c-11 10-22 13-25 8zM8106 5612c-3-6 1-15 8-21 8-7 17-8 20-3 3 6-1 15-8 21-8 7-17 8-20 3zM5116 5551c-15-16-23-31-18-35 5-3 21 8 36 23 15 16 23 31 18 35-5 3-21-8-36-23zM4861 5556c-7-8-8-17-3-20 6-3 15 1 21 8 7 8 8 17 3 20-6 3-15-1-21-8zM8176 5552c-3-6 1-15 8-21 8-7 17-8 20-3 3 6-1 15-8 21-8 7-17 8-20 3zM2386 5542c-3-6 1-15 8-21 8-7 17-8 20-3 3 6-1 15-8 21-8 7-17 8-20 3zM8216 5522c-3-6 1-15 8-21 8-7 17-8 20-3 3 6-1 15-8 21-8 7-17 8-20 3zM4801 5506c-7-8-8-17-3-20 6-3 15 1 21 8 7 8 8 17 3 20-6 3-15-1-21-8zM5046 5481c-15-16-23-31-18-35 5-3 21 8 36 23 15 16 23 31 18 35-5 3-21-8-36-23zM4761 5476c-7-8-8-17-3-20 6-3 15 1 21 8 7 8 8 17 3 20-6 3-15-1-21-8zM8286 5472c-3-6 1-15 8-21 8-7 17-8 20-3 3 6-1 15-8 21-8 7-17 8-20 3zM8016 5452c-3-6 1-15 8-21 8-7 17-8 20-3 3 6-1 15-8 21-8 7-17 8-20 3zM4671 5416c-7-8-8-17-3-20 6-3 15 1 21 8 7 8 8 17 3 20-6 3-15-1-21-8zM8366 5422c-3-6 1-15 8-21 8-7 17-8 20-3 3 6-1 15-8 21-8 7-17 8-20 3zM4961 5406c-7-8-8-17-3-20 6-3 15 1 21 8 7 8 8 17 3 20-6 3-15-1-21-8zM2606 5402c-3-6 1-15 8-21 8-7 17-8 20-3 3 6-1 15-8 21-8 7-17 8-20 3zM8116 5372c-3-6 1-15 8-21 8-7 17-8 20-3 3 6-1 15-8 21-8 7-17 8-20 3zM8465 5360c-3-5 8-16 24-25 18-9 32-11 36-5 3 5-8 16-24 25-18 9-32 11-36 5zM10241 5346c-7-8-8-17-3-20 6-3 15 1 21 8 7 8 8 17 3 20-6 3-15-1-21-8zM2735 5331c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM8186 5321c-4-5 7-19 23-30 16-12 32-17 35-12 4 5-7 19-23 30-16 12-32 17-35 12zM4802 5289c-23-17-40-35-37-40 4-5 26 5 51 22 24 16 42 34 39 40-8 11-3 13-53-22zM2805 5301c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM10081 5289c-16-6-21-13-14-20 13-13 67 7 58 21-7 12-12 12-44-1zM4405 5281c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM8266 5272c-3-6 1-15 8-21 8-7 17-8 20-3 3 6-1 15-8 21-8 7-17 8-20 3zM8675 5270c-9-14 45-34 58-21 7 7 1 14-17 21-33 12-33 12-41 0zM4721 5236c-7-8-8-17-3-20 6-3 15 1 21 8 7 8 8 17 3 20-6 3-15-1-21-8zM8316 5242c-3-6 1-15 8-21 8-7 17-8 20-3 3 6-1 15-8 21-8 7-17 8-20 3zM2556 5221c-3-5 5-16 19-25s25-13 25-9c0 3 11-4 24-16s27-18 30-13-3 17-14 27-20 14-20 10-8-1-17 7c-28 24-41 29-47 19zM2481 5206c-7-8-8-17-3-20 6-3 15 1 21 8 7 8 8 17 3 20-6 3-15-1-21-8zM8895 5211c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM9775 5211c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM3145 5201c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM4651 5196c-7-8-8-17-3-20 6-3 15 1 21 8 7 8 8 17 3 20-6 3-15-1-21-8zM8945 5201c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM10345 5197c-10-8-14-16-9-19 14-9 56 11 49 22-8 13-18 13-40-3zM3195 5191c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM9005 5191c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM9655 5191c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM9075 5181c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM9565 5181c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM3315 5171c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM4015 5171c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM9195 5170c-8-12 20-24 35-15 6 3 8 11 5 16-8 12-32 12-40-1zM9435 5170c-8-12 20-24 35-15 6 3 8 11 5 16-8 12-32 12-40-1zM10285 5171c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM2421 5156c-7-8-8-17-3-20 6-3 15 1 21 8 7 8 8 17 3 20-6 3-15-1-21-8zM3395 5161c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM3945 5161c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM8465 5161c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM3495 5151c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM3845 5151c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM4545 5147c-10-8-14-16-9-19 14-9 56 11 49 22-8 13-18 13-40-3zM2356 5091c-10-11-13-22-8-25s17 3 26 13c10 11 13 22 8 25s-17-3-26-13zM2956 5061c-3-5 1-14 8-20 16-13 32 2 21 19-8 12-22 13-29 1zM4256 5041c-4-6-13-8-20-5-8 3-17 1-20-5-4-6-13-8-20-5-17 7-30-12-16-21 6-4 17-2 24 4s16 8 19 4c4-3 12-1 19 5s16 11 21 11c8 1 11 11 4 17-3 3-8 1-11-5zM9835 5040c-3-5-2-11 2-13 12-7 47-2 53 7 7 11-48 17-55 6zM3085 5031c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM3135 5021c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM9715 5021c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM9005 5011c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM10096 5001c-10-11-13-22-8-25s17 3 26 13c10 11 13 22 8 25s-17-3-26-13zM4075 5001c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM9095 5001c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM9545 5001c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM4005 4990c-8-12 20-24 35-15 6 3 8 11 5 16-8 12-32 12-40-1zM9295 4990c-3-5 0-13 9-16 21-8 61-1 61 11 0 14-62 19-70 5zM3405 4980c-8-12 20-24 35-15 6 3 8 11 5 16-8 12-32 12-40-1zM3535 4970c-8-13 20-24 41-16 20 8 9 26-16 26-10 0-22-5-25-10zM3805 4970c-8-12 20-24 35-15 6 3 8 11 5 16-8 12-32 12-40-1zM2817 4954c-3-3 2-18 11-32 9-15 12-23 6-19-7 4-17 0-23-7-22-26 6-26 30 0l23 24-20 21c-11 11-23 17-27 13zM10195 4930c-8-12 20-24 35-15 6 3 8 11 5 16-8 12-32 12-40-1zM10305 4920c-3-5 0-13 8-16 23-9 112 0 110 11-4 14-110 19-118 5zM10556 4922c-3-5 3-17 13-26 11-10 22-13 25-8s-3 17-13 26c-11 10-22 13-25 8zM9941 4866c-7-8-8-17-3-20 6-3 15 1 21 8 7 8 8 17 3 20-6 3-15-1-21-8zM3156 4862c-3-6 1-15 8-21 8-7 17-8 20-3 3 6-1 15-8 21-8 7-17 8-20 3zM10006 4862c-3-6 1-15 8-21 8-7 17-8 20-3 3 6-1 15-8 21-8 7-17 8-20 3zM10205 4820c-8-12 20-24 35-15 6 3 8 11 5 16-8 12-32 12-40-1zM3216 4812c-3-6 1-15 8-21 8-7 17-8 20-3 3 6-1 15-8 21-8 7-17 8-20 3zM2169 4786c-1-3-2-9-3-13-1-5-5-14-9-20-5-7-5-13-1-13 3 0 1-7-6-15-6-8-9-19-5-25 9-14 28-1 21 15-2 7 1 18 7 24s7 11 3 11c-5 0-3 6 3 14 8 10 9 16 1 21-5 3-11 4-11 1zM3266 4772c-3-6 1-15 8-21 8-7 17-8 20-3 3 6-1 15-8 21-8 7-17 8-20 3zM9801 4756c-7-8-8-17-3-20 6-3 15 1 21 8 7 8 8 17 3 20-6 3-15-1-21-8zM2785 4741c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM3026 4742c-3-6 1-15 8-21 8-7 17-8 20-3 3 6-1 15-8 21-8 7-17 8-20 3zM3306 4742c-3-6 1-15 8-21 8-7 17-8 20-3 3 6-1 15-8 21-8 7-17 8-20 3zM2485 4706c-11-8-14-16-8-19 6-4 18 0 28 7 11 8 14 16 8 19-6 4-18 0-28-7zM2431 4676c-7-8-8-17-3-20 6-3 15 1 21 8 7 8 8 17 3 20-6 3-15-1-21-8zM10765 4680c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM2775 4670c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM2765 4620c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM2875 4610c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM10775 4597c-9-22-2-62 10-60 6 1 11 14 13 29 4 32-14 56-23 31zM2865 4560c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM9676 4542c-3-6 1-15 8-21 8-7 17-8 20-3 3 6-1 15-8 21-8 7-17 8-20 3zM2854 4506c-4-10-2-22 4-28 8-8 13-7 18 6 4 10 2 22-4 28-8 8-13 7-18-6zM10314 4456c-4-10-2-22 4-28 8-8 13-7 18 6 4 10 2 22-4 28-8 8-13 7-18-6zM9776 4422c-3-6 1-15 8-21 8-7 17-8 20-3 3 6-1 15-8 21-8 7-17 8-20 3zM10216 4422c-3-5 3-17 13-26 11-10 22-13 25-8s-3 17-13 26c-11 10-22 13-25 8zM2125 4380c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM9856 4342c-3-5 3-17 13-26 11-10 22-13 25-8s-3 17-13 26c-11 10-22 13-25 8zM4205 4280c-3-5-4-11-1-11 16-4 26-7 31-9 3-1 10-4 15-5 6-1 12-4 15-5s8-3 13-4c4-1 13-5 20-9 6-5 12-5 12-1 0 3 6 1 14-5 10-8 16-9 21-1 3 5 4 11 1 11-3 1-9 2-13 3-5 1-14 5-20 9-7 5-13 5-13 1 0-3-7-1-15 6s-15 9-15 5-7-2-15 5-15 9-15 5-6-2-14 4c-10 8-16 9-21 1zM8125 4161c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM10465 4161c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM2305 4111c-3-6 3-15 14-21 12-6 22-6 26-1 3 6-3 15-14 21-12 6-22 6-26 1zM7885 4101c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM4875 4091c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM7795 4081c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM2645 4071c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM7745 4071c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM2495 4059c-8-13 12-18 60-16 22 1 40 7 40 12-1 13-93 17-100 4zM5025 4061c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM7695 4061c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM5085 4051c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM7585 4040c-8-12 20-24 35-15 6 3 8 11 5 16-8 12-32 12-40-1zM5235 4031c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM7465 4021c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM7325 4000c-8-12 20-24 35-15 6 3 8 11 5 16-8 12-32 12-40-1zM5585 3991c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM5675 3981c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM7165 3981c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM5755 3970c-7-11 22-26 32-16 3 3 12 1 19-5 17-14 48-4 39 12-4 6-16 9-26 6s-22-1-25 4c-7 12-31 11-39-1zM7065 3970c-8-12 20-24 35-15 6 3 8 11 5 16-8 12-32 12-40-1zM6945 3961c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM5975 3950c-8-12 20-24 35-15 6 3 8 11 5 16-8 12-32 12-40-1zM6785 3950c-8-12 20-24 35-15 6 3 8 11 5 16-8 12-32 12-40-1zM6245 3940c-3-5 0-13 8-16 23-8 92 0 92 11 0 14-92 19-100 5zM6465 3940c-3-5 0-13 8-16 23-8 92 0 92 11 0 14-92 19-100 5z"/></g><g fill="#948B7F" fill-rule="nonzero"><path d="M6716 9482c-3-6 1-15 8-21 8-7 17-8 20-3 3 6-1 15-8 21-8 7-17 8-20 3zM6206 9461c-10-11-13-22-8-25s17 3 26 13c10 11 13 22 8 25s-17-3-26-13zM6534 9466c-4-10-2-22 4-28 8-8 13-7 18 6 4 10 2 22-4 28-8 8-13 7-18-6zM6159 9386c-1-3-2-9-3-13-1-5-5-13-9-20-4-6-3-14 3-18 5-3 11-4 11-1 1 3 2 9 3 14 1 4 5 12 9 19 4 6 3 14-3 18-5 3-11 4-11 1zM6534 9356c-4-10-2-22 4-28 8-8 13-7 18 6 4 10 2 22-4 28-8 8-13 7-18-6zM6424 9346c-4-10-2-22 4-28 8-8 13-7 18 6 4 10 2 22-4 28-8 8-13 7-18-6zM6135 9310c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM6795 9280c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM6124 9246c-4-10-2-22 4-28 8-8 13-7 18 6 4 10 2 22-4 28-8 8-13 7-18-6zM6525 9230c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM6405 9150c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM6395 9080c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM6504 9036c-4-10-2-22 4-28 8-8 13-7 18 6 4 10 2 22-4 28-8 8-13 7-18-6zM9495 9030c-8-12 20-24 35-15 6 3 8 11 5 16-8 12-32 12-40-1zM3225 9010c-8-13 20-24 41-16 20 8 9 26-16 26-10 0-22-5-25-10zM3415 9010c-8-12 20-24 35-15 6 3 8 11 5 16-8 12-32 12-40-1zM3095 9000c-8-12 20-24 35-15 6 3 8 11 5 16-8 12-32 12-40-1zM3015 8990c-8-12 20-24 35-15 6 3 8 11 5 16-8 12-32 12-40-1zM2965 8981c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM3875 8951c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM6675 8930c-8-12 20-24 35-15 6 3 8 11 5 16-8 12-32 12-40-1zM5750 8895c-53-17-132-93-149-144-44-132 32-357 169-504 39-42 87-86 106-97l34-22 52 47c91 79 220 136 393 172 69 14 51 35-41 50-45 7-107 22-138 33-89 34-183 142-174 202 2 12 18 31 38 42 30 18 58 21 262 26 220 5 261 11 244 38-3 5-40 12-83 15-99 7-204 34-379 97-158 58-254 71-334 45zM7025 8820c-8-12 20-24 35-15 6 3 8 11 5 16-8 12-32 12-40-1zM7155 8820c-3-6 1-12 9-15 9-3 23-7 31-10 23-7 28 13 6 24-25 14-38 14-46 1zM10516 8812c-3-6 1-15 8-21 8-7 17-8 20-3 3 6-1 15-8 21-8 7-17 8-20 3zM6935 8801c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM6886 8793c-4-5-12-8-17-8s-9-3-9-7c0-8 3-9 18-7 4 1 12 2 17 3 13 1 19 20 8 23-5 2-13 0-17-4zM7237 8792c-4-5 9-23 27-41 19-18 36-29 39-23 4 5-9 23-27 41-19 18-36 29-39 23zM6806 8771c-4-6-13-8-20-5-17 6-31-12-16-21 5-3 16-3 23 2 6 4 17 8 22 8 14 0 19 19 7 23-6 2-13-1-16-7zM6695 8750c-8-12 20-24 35-15 6 3 8 11 5 16-8 12-32 12-40-1zM6575 8740c-8-12 20-24 35-15 6 3 8 11 5 16-8 12-32 12-40-1zM10656 8692c-3-5 3-17 13-26 11-10 22-13 25-8s-3 17-13 26c-11 10-22 13-25 8zM7325 8640c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM10716 8632c-3-5 3-17 13-26 11-10 22-13 25-8s-3 17-13 26c-11 10-22 13-25 8zM7324 8546c-4-10-2-22 4-28 8-8 13-7 18 6 4 10 2 22-4 28-8 8-13 7-18-6zM4806 8512c-3-6 1-15 8-21 8-7 17-8 20-3 3 6-1 15-8 21-8 7-17 8-20 3zM7319 8496c-1-3-2-9-3-13-1-5-5-13-9-20-4-6-3-14 3-18 5-3 11-4 11-1 1 3 2 9 3 14 1 4 5 12 9 19 4 6 3 14-3 18-5 3-11 4-11 1zM8116 8461c-10-11-13-22-8-25s17 3 26 13c10 11 13 22 8 25s-17-3-26-13zM4897 8433c-4-6 11-27 32-47 21-21 41-34 44-29 4 6-11 27-32 47-21 21-41 34-44 29zM7275 8391c-9-18-11-32-5-36 5-3 16 8 25 24 9 18 11 32 5 36-5 3-16-8-25-24zM8041 8386c-13-13-18-26-13-30 5-3 19 5 31 18 13 13 18 26 13 30-5 3-19-5-31-18zM6505 8360c-8-12 20-24 39-17 7 3 17 2 22-2 15-14 63-21 69-11 7 12-43 33-61 26-8-3-16-1-19 4-8 13-42 13-50 0zM7961 8296c-7-8-8-17-3-20 6-3 15 1 21 8 7 8 8 17 3 20-6 3-15-1-21-8zM7201 8276c-7-8-8-17-3-20 6-3 15 1 21 8 7 8 8 17 3 20-6 3-15-1-21-8zM6866 8192c-3-5 5-19 18-31 13-13 26-18 30-13 3 5-5 19-18 31-13 13-26 18-30 13zM1805 7840c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM7629 7706c-1-3-2-9-3-13-1-5-5-13-9-20-4-6-3-14 3-18 5-3 11-4 11-1 1 3 2 9 3 14 1 4 5 12 9 19 4 6 3 14-3 18-5 3-11 4-11 1zM7565 7500c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM11305 7410c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM7535 7350c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM1684 7296c-4-10-2-22 4-28 8-8 13-7 18 6 4 10 2 22-4 28-8 8-13 7-18-6zM7514 7186c-4-10-2-22 4-28 8-8 13-7 18 6 4 10 2 22-4 28-8 8-13 7-18-6zM11324 7186c-4-10-2-22 4-28 8-8 13-7 18 6 4 10 2 22-4 28-8 8-13 7-18-6zM1675 7138c-8-24 0-128 10-131 13-3 17 130 5 138-6 4-12 0-15-7zM11324 7026c-4-10-2-22 4-28 8-8 13-7 18 6 4 10 2 22-4 28-8 8-13 7-18-6zM7514 6886c-4-10-2-22 4-28 8-8 13-7 18 6 4 10 2 22-4 28-8 8-13 7-18-6zM1684 6866c-4-10-2-22 4-28 8-8 13-7 18 6 4 10 2 22-4 28-8 8-13 7-18-6zM5484 6846c-4-10-2-22 4-28 8-8 13-7 18 6 4 10 2 22-4 28-8 8-13 7-18-6zM11304 6796c-4-10-2-22 4-28 8-8 13-7 18 6 4 10 2 22-4 28-8 8-13 7-18-6zM7524 6776c-4-10-2-22 4-28 8-8 13-7 18 6 4 10 2 22-4 28-8 8-13 7-18-6zM1704 6716c-4-10-2-22 4-28 8-8 13-7 18 6 4 10 2 22-4 28-8 8-13 7-18-6zM7534 6706c-4-10-2-22 4-28 8-8 13-7 18 6 4 10 2 22-4 28-8 8-13 7-18-6zM3395 6480c-8-12 20-24 35-15 6 3 8 11 5 16-8 12-32 12-40-1zM3505 6480c-8-12 20-24 35-15 6 3 8 11 5 16-8 12-32 12-40-1zM3726 6382c-3-5 3-17 13-26 11-10 22-13 25-8s-3 17-13 26c-11 10-22 13-25 8zM9656 6292c-3-5 5-19 18-31 13-13 26-18 30-13 3 5-5 19-18 31-13 13-26 18-30 13zM2974 5976c-4-10-2-22 4-28 8-8 13-7 18 6 4 10 2 22-4 28-8 8-13 7-18-6zM3895 5978c-9-22-2-68 10-71 14-3 19 63 6 76-7 7-12 5-16-5zM1996 5962c-3-6 1-15 8-21 8-7 17-8 20-3 3 6-1 15-8 21-8 7-17 8-20 3zM9814 5886c-4-10-2-22 4-28 8-8 13-7 18 6 4 10 2 22-4 28-8 8-13 7-18-6zM2116 5802c-3-6 1-15 8-21 8-7 17-8 20-3 3 6-1 15-8 21-8 7-17 8-20 3zM5086 5791c-10-11-13-22-8-25s17 3 26 13c10 11 13 22 8 25s-17-3-26-13zM5036 5731c-10-11-13-22-8-25s17 3 26 13c10 11 13 22 8 25s-17-3-26-13zM8027 5692c-4-5 9-23 27-41 19-18 36-29 39-23 4 5-9 23-27 41-19 18-36 29-39 23zM3475 5540c-8-13 6-18 50-16 22 0 40 6 40 11 0 12-83 17-90 5zM9325 5541c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM8455 5370c-3-5 12-18 34-30 23-11 42-16 46-10 3 5-12 18-34 30-23 11-42 16-46 10zM4527 5339c-21-11-35-24-32-29 4-6 23-1 46 10 22 12 37 25 34 30-7 12-2 13-48-11zM10175 5321c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM8575 5311c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM8625 5291c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM9985 5260c-8-12 20-24 35-15 6 3 8 11 5 16-8 12-32 12-40-1zM8855 5221c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM3115 5211c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM3215 5191c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM9525 5180c-8-12 20-24 35-15 6 3 8 11 5 16-8 12-32 12-40-1zM9275 5170c-3-5 0-13 8-16 23-8 102 0 102 11 0 14-102 19-110 5zM3915 5160c-8-12 20-24 35-15 6 3 8 11 5 16-8 12-32 12-40-1zM3535 5150c-8-12 20-24 35-15 6 3 8 11 5 16-8 12-32 12-40-1zM3795 5150c-8-12 20-24 35-15 6 3 8 11 5 16-8 12-32 12-40-1z"/></g><g fill="#CDBEAD" fill-rule="nonzero"><path d="M6290 9501c-8-6-17-8-21-5-11 6-21-14-14-26 4-6 17-4 36 5 16 9 27 20 24 25-7 12-6 12-25 1zM6196 9434c-20-19-37-45-38-57-1-21-3-30-8-52-2-5-4-14-5-20 0-5-5-21-9-34-11-31 8-51 23-24 5 11 10 28 10 39 0 22 4 39 19 77 7 16 12 31 12 35 0 3 12 18 26 33 39 41 12 44-30 3zM6133 9183c-4-10-8-54-8-98 0-64 3-80 15-81 8-1 18-3 23-4 4-1 10-3 15-5 4-1 20-7 37-14 92-38 212-56 163-24-10 6-110 37-183 56-30 8-35 21-35 97 0 77-13 110-27 73zM6528 9143c-7-14-3-33 6-33 12-1 17 28 6 35-5 3-10 2-12-2zM6520 9075c-9-11-10-19-3-26s14-5 23 6 10 19 3 26-14 5-23-6zM6596 9052c-3-5 5-19 18-31 13-13 26-18 30-13 3 5-5 19-18 31-13 13-26 18-30 13zM6379 9026c-9-20-10-29-1-38 8-8 14-4 22 17 15 39-4 58-21 21zM9635 9030c-3-5 0-13 8-16 23-8 92 0 92 11 0 14-92 19-100 5zM6515 8978c-13-36-9-61 10-65 84-17 248 17 230 48-4 5-10 7-15 4s-11-1-15 5-11 8-16 4c-5-3-7-10-4-15 4-5-5-9-18-9s-52-3-86-6c-57-6-61-6-61 14 0 25-18 39-25 20zM9066 8961c-4-6-13-8-20-5-8 3-17 1-20-5-4-6-13-8-20-5-17 7-30-12-16-21 6-4 17-2 24 4s16 8 19 5 12-2 19 2c7 5 18 9 23 9 14 0 19 19 7 23-6 2-13-1-16-7zM2805 8941c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM8862 8905c-46-20-32-37 16-21 20 7 36 17 35 22-3 14-16 14-51-1zM7051 8821c-7-5-21-7-30-4-9 2-30-1-46-8-17-7-35-11-42-10-6 1-14-3-18-8-3-6-12-8-19-5-8 3-17 0-21-5-3-6-10-9-14-6-5 2-39-2-77-10-38-7-107-17-154-20-47-4-90-11-95-15-6-5-98-10-204-11-216-2-290-13-329-52s-25-80 54-166c76-82 120-102 271-127 53-8 100-17 104-19 4-3 29-5 55-6 85-2 174-29 260-80 46-27 86-54 89-59 4-6 10-8 14-6 8 5 66-49 60-56-2-1 7-17 20-35 18-24 29-30 49-27 33 6 112 53 119 70 3 8 8 12 12 9 4-2 30 18 56 45 27 28 46 50 41 50-4 0 6 13 23 29 42 40 100 165 111 242 16 104-1 160-65 226-33 33-64 55-80 57-14 1-28 6-32 9-9 10-96 8-112-2zM8491 8736c-7-8-8-17-3-20 6-3 15 1 21 8 7 8 8 17 3 20-6 3-15-1-21-8zM8441 8706c-7-8-8-17-3-20 6-3 15 1 21 8 7 8 8 17 3 20-6 3-15-1-21-8zM4646 8632c-3-6 1-15 8-21 8-7 17-8 20-3 3 6-1 15-8 21-8 7-17 8-20 3zM4716 8582c-3-6 1-15 8-21 8-7 17-8 20-3 3 6-1 15-8 21-8 7-17 8-20 3zM10906 8402c-3-6 1-15 8-21 8-7 17-8 20-3 3 6-1 15-8 21-8 7-17 8-20 3zM2061 8326c-17-25-27-47-22-51 6-3 24 15 40 39 17 25 27 47 22 51-6 3-24-15-40-39zM8015 8360c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM4996 8322c-3-6 1-15 8-21 8-7 17-8 20-3 3 6-1 15-8 21-8 7-17 8-20 3zM11006 8252c-3-6 1-15 8-21 8-7 17-8 20-3 3 6-1 15-8 21-8 7-17 8-20 3zM7915 8240c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM1990 8211c-6-12-6-22-1-26 6-3 15 3 21 14 6 12 6 22 1 26-6 3-15-3-21-14zM1960 8164c-9-10-10-18-3-25 8-8 14-5 22 9 13 25-2 38-19 16zM7771 8016c-7-8-8-17-3-20 6-3 15 1 21 8 7 8 8 17 3 20-6 3-15-1-21-8zM1875 8000c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM11185 7880c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM7690 7854c-9-10-10-18-3-25 8-8 14-5 22 9 13 25-2 38-19 16zM1815 7850c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM1785 7750c-3-5-3-10 1-10s-1-9-10-19c-10-11-13-22-8-25s15 1 22 9 9 15 5 15-2 6 4 14c8 9 8 16 2 20-5 4-12 2-16-4zM11226 7752c-3-6 1-15 8-21 8-7 17-8 20-3 3 6-1 15-8 21-8 7-17 8-20 3zM7581 7546c-7-8-8-17-3-20 6-3 15 1 21 8 7 8 8 17 3 20-6 3-15-1-21-8zM7551 7416c-7-8-8-17-3-20 6-3 15 1 21 8 7 8 8 17 3 20-6 3-15-1-21-8zM1705 7410c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM1695 7340c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM7531 7286c-7-8-8-17-3-20 6-3 15 1 21 8 7 8 8 17 3 20-6 3-15-1-21-8zM5475 7230c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM7525 7200c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM5485 7110c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM5485 6900c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM7516 6861c-3-5 1-14 8-20 16-13 32 2 21 19-8 12-22 13-29 1zM1695 6820c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM5475 6780c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM1705 6750c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM1716 6652c-3-6 1-15 8-21 8-7 17-8 20-3 3 6-1 15-8 21-8 7-17 8-20 3zM7546 6642c-3-6 1-15 8-21 8-7 17-8 20-3 3 6-1 15-8 21-8 7-17 8-20 3zM1739 6593c-4-29-3-39 4-50 5-7 13-10 19-7 5 3 4 11-2 19-7 8-9 19-6 24 4 5 2 12-4 16-5 3-11 3-11-2zM7556 6592c-3-6 1-15 8-21 8-7 17-8 20-3 3 6-1 15-8 21-8 7-17 8-20 3zM11230 6475c-15-39 4-58 21-21 9 20 10 29 1 38-8 8-14 4-22-17zM3575 6471c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM7595 6460c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM3201 6406c-7-8-8-17-3-20 6-3 15 1 21 8 7 8 8 17 3 20-6 3-15-1-21-8zM9315 6400c-3-5 0-13 9-16 21-8 71-1 71 11 0 14-72 19-80 5zM7625 6360c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM9545 6360c-7-11 35-31 49-22 5 3 1 11-9 19-22 16-32 16-40 3zM11175 6320c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM3081 6296c-7-8-8-17-3-20 6-3 15 1 21 8 7 8 8 17 3 20-6 3-15-1-21-8zM11155 6270c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM1855 6230c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM7675 6230c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM3865 6160c-8-13 13-52 25-45 9 6 2 43-11 50-4 3-10 1-14-5zM2985 6110c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM1936 6062c-3-6 1-15 8-21 8-7 17-8 20-3 3 6-1 15-8 21-8 7-17 8-20 3zM5251 6046c-7-8-8-17-3-20 6-3 15 1 21 8 7 8 8 17 3 20-6 3-15-1-21-8zM11031 6026c-7-8-8-17-3-20 6-3 15 1 21 8 7 8 8 17 3 20-6 3-15-1-21-8zM7797 5994c-9-10 53-95 64-89 5 4-5 26-21 51-33 47-33 47-43 38zM1986 5982c-3-6 1-15 8-21 8-7 17-8 20-3 3 6-1 15-8 21-8 7-17 8-20 3zM5211 5976c-7-8-8-17-3-20 6-3 15 1 21 8 7 8 8 17 3 20-6 3-15-1-21-8zM10991 5966c-7-8-8-17-3-20 6-3 15 1 21 8 7 8 8 17 3 20-6 3-15-1-21-8zM8906 5901c-10-16 13-66 25-54 6 6 6 19 0 36-11 29-16 32-25 18zM10941 5896c-7-8-8-17-3-20 6-3 15 1 21 8 7 8 8 17 3 20-6 3-15-1-21-8zM3880 5810c-11-21-5-44 9-35 13 7 20 44 11 50-5 3-14-4-20-15zM2166 5752c-3-6 1-15 8-21 8-7 17-8 20-3 3 6-1 15-8 21-8 7-17 8-20 3zM7997 5734c-3-4-2-16 4-26 8-15 14-17 22-9s7 15-4 26c-8 9-18 13-22 9zM9751 5686c-7-8-8-17-3-20 6-3 15 1 21 8 7 8 8 17 3 20-6 3-15-1-21-8zM4961 5656c-7-8-8-17-3-20 6-3 15 1 21 8 7 8 8 17 3 20-6 3-15-1-21-8zM9711 5636c-7-8-8-17-3-20 6-3 15 1 21 8 7 8 8 17 3 20-6 3-15-1-21-8zM3235 5610c-3-5 8-16 24-25 18-9 32-11 36-5 3 5-8 16-24 25-18 9-32 11-36 5zM4911 5606c-7-8-8-17-3-20 6-3 15 1 21 8 7 8 8 17 3 20-6 3-15-1-21-8zM3326 5571c-4-5-2-12 4-16 5-3 10-3 10 1 0 3 6 1 14-5 10-8 16-9 21-1 3 5 4 11 1 11-3 1-9 2-13 3-5 1-13 5-20 9-6 4-14 3-17-2zM9246 5561c-4-5-2-12 4-16 5-3 10-3 10 1 0 3 6 1 14-5 10-8 16-9 21-1 3 5 4 11 1 11-3 1-9 2-13 3-5 1-13 5-20 9-6 4-14 3-17-2zM2436 5512c-3-6 1-15 8-21 8-7 17-8 20-3 3 6-1 15-8 21-8 7-17 8-20 3zM2526 5452c-3-6 1-15 8-21 8-7 17-8 20-3 3 6-1 15-8 21-8 7-17 8-20 3zM4701 5441c-14-11-19-21-13-25 5-3 20 2 33 12 29 24 11 36-20 13zM8425 5390c-3-5 17-21 44-35 29-14 52-21 56-15 3 5-17 21-44 35-29 14-52 21-56 15zM2725 5341c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM2795 5311c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM10045 5281c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM4365 5271c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM2986 5252c-3-6 1-15 8-21 8-7 17-8 20-3 3 6-1 15-8 21-8 7-17 8-20 3zM8776 5252c-3-6 1-15 8-21 8-7 17-8 20-3 3 6-1 15-8 21-8 7-17 8-20 3zM3256 5192c-3-6 1-15 8-21 8-7 17-8 20-3 3 6-1 15-8 21-8 7-17 8-20 3zM3326 5182c-3-6 1-15 8-21 8-7 17-8 20-3 3 6-1 15-8 21-8 7-17 8-20 3zM9205 5180c-8-12 20-24 35-15 6 3 8 11 5 16-8 12-32 12-40-1zM9415 5180c-8-13 20-24 41-16 20 8 9 26-16 26-10 0-22-5-25-10zM3395 5171c-6-11 29-33 39-24 7 7-12 33-25 33-4 0-10-4-14-9zM3505 5161c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM3845 5161c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9z"/></g><g fill="#95AABA" fill-rule="nonzero"><path d="M10931 10958c-29-13-40-23-33-30 12-12 96 28 87 42-4 6-7 10-8 9-1 0-22-10-46-21zM10615 10821c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM10521 10789c-16-6-21-13-14-20 13-13 67 7 58 21-7 12-12 12-44-1zM10350 10729c-120-41-115-38-104-49 12-12 210 52 207 66-3 15-16 13-103-17zM1875 10691c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM1945 10671c-7-12 12-24 24-16 5 3 12 1 16-5s11-8 16-4c5 3 7 10 3 15-3 5-9 7-14 4s-11-1-15 5c-8 13-22 13-30 1zM10131 10659c-16-6-21-13-14-20 13-13 67 7 58 21-7 12-12 12-44-1zM10045 10631c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM9976 10613c-4-5-12-8-17-8s-9-3-9-7c0-8 3-9 18-7 4 1 12 2 17 3 13 1 19 20 8 23-5 2-13 0-17-4zM2225 10601c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM10975 10588c-9-24-1-143 10-143 13 0 19 135 6 148-7 7-12 5-16-5zM2315 10581c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM9866 10581c-4-6-13-8-20-5-8 3-17 1-20-5-4-6-13-8-20-5-8 3-17 1-20-5-4-6-13-8-20-5-8 3-17 1-20-5-4-6-13-8-20-5-8 3-17 1-20-5-9-14 14-25 26-13 6 6 16 8 23 6 7-3 16-1 19 5 4 6 13 8 20 5 8-3 17 0 21 5 3 6 11 9 16 6 5-4 15-3 22 2 6 4 17 8 22 8 14 0 19 19 7 23-6 2-13-1-16-7zM2405 10561c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM2455 10551c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM2505 10541c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM2555 10531c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM2605 10521c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM2655 10511c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM9576 10511c-4-6-13-8-20-5-17 6-31-12-16-21 5-3 16-3 23 2 6 4 17 8 22 8 14 0 19 19 7 23-6 2-13-1-16-7zM2765 10491c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM9485 10491c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM2825 10481c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM9395 10471c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM9345 10461c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM9295 10451c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM3065 10441c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM3125 10431c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM3195 10421c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM9135 10421c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM3265 10411c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM9075 10411c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM3335 10401c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM9025 10401c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM3405 10391c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM8965 10391c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM3485 10381c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM3555 10371c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM8835 10371c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM3645 10361c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM8775 10361c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM1865 10348c-9-24-2-93 10-93 14 0 19 85 6 98-7 7-12 5-16-5zM3725 10351c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM8705 10351c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM3815 10341c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM8635 10341c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM3905 10331c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM8565 10331c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM3995 10320c-8-12 20-24 35-15 6 3 8 11 5 16-8 12-32 12-40-1zM8485 10321c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM4105 10311c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM8405 10311c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM4205 10300c-8-12 20-24 35-15 6 3 8 11 5 16-8 12-32 12-40-1zM8315 10301c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM4325 10291c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM8225 10291c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM4435 10280c-8-12 20-24 35-15 6 3 8 11 5 16-8 12-32 12-40-1zM8125 10280c-8-12 20-24 35-15 6 3 8 11 5 16-8 12-32 12-40-1zM4565 10270c-8-12 20-24 35-15 6 3 8 11 5 16-8 12-32 12-40-1zM8025 10271c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM4705 10260c-8-12 20-24 35-15 6 3 8 11 5 16-8 12-32 12-40-1zM7905 10260c-8-12 20-24 35-15 6 3 8 11 5 16-8 12-32 12-40-1zM4855 10250c-8-13 20-24 41-16 20 8 9 26-16 26-10 0-22-5-25-10zM7785 10250c-8-12 20-24 35-15 6 3 8 11 5 16-8 12-32 12-40-1zM5035 10240c-8-12 20-24 35-15 6 3 8 11 5 16-8 12-32 12-40-1zM7645 10240c-8-12 20-24 35-15 6 3 8 11 5 16-8 12-32 12-40-1zM5235 10230c-8-13 20-24 41-16 20 8 9 26-16 26-10 0-22-5-25-10zM7485 10230c-8-12 20-24 35-15 6 3 8 11 5 16-8 12-32 12-40-1zM5475 10221c-7-13 17-24 40-19 9 1 16 8 16 13 0 14-48 19-56 6zM7285 10220c-8-13 20-24 41-16 20 8 9 26-16 26-10 0-22-5-25-10zM5795 10210c-3-5 0-13 9-16 21-8 61-1 61 11 0 14-62 19-70 5zM7015 10210c-3-5 0-13 9-16 21-8 61-1 61 11 0 14-62 19-70 5zM1874 9977c-7-20-2-47 11-50 14-3 19 43 6 56-7 7-12 6-17-6zM10965 9928c-9-24-2-93 10-93 14 0 19 85 6 98-7 7-12 5-16-5zM6375 9750c-135-22-219-63-283-138-47-57-41-82 7-27 17 19 32 35 33 35 2-1 28 10 58 23 78 35 91 39 130 42 80 8 247 8 258 1 7-4 25-6 40-5s34-1 42-3c8-3 35-11 60-18 25-6 59-20 77-30 39-23 50-12 23 23-58 74-280 122-445 97zM1885 9717c-9-22-2-62 10-60 6 1 11 14 13 29 4 32-14 56-23 31zM10957 9583c-8-15-2-68 8-68 12 0 16 63 4 70-4 3-9 2-12-2zM6877 9574c-8-9 54-104 65-98 4 3-2 23-14 45-24 44-42 62-51 53zM1894 9486c-8-21 3-49 16-41 5 3 10 15 10 25 0 25-18 36-26 16zM5985 9450c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM5958 9387c-7-14-23-42-35-65-39-71-76-98-176-131-53-18-108-44-130-62-37-30-162-207-153-217 3-2-1-17-9-33-22-41 0-45 25-4 24 39 90 120 90 111 0-3 21 8 47 24 26 17 50 30 54 30s20 5 36 12c15 6 33 12 38 13 6 1 15 3 20 4 23 6 155 2 165-4 20-13 36 13 22 35-14 24-16 52-3 66 6 5 12 43 14 85s7 81 9 85c12 21 17 63 9 69-5 3-16-5-23-18zM6955 9400c-3-5-3-15 1-22s9-21 10-33c1-11 7-55 13-98s11-98 11-122 5-47 10-50c6-3 10-19 10-35 0-38 12-44 95-47 39-1 78-5 88-9 10-3 20-4 23-1 10 10 125-54 168-93 76-70 78-7 3 98-39 54-101 95-185 123-81 26-110 52-157 138-20 36-44 80-54 96-10 17-16 35-14 41 6 15-14 27-22 14zM9365 9364c-381-44-675-128-983-282-239-119-405-236-586-412-241-234-387-480-472-790l-28-105v-420c0-393 7-523 31-585 3-8 7-21 7-27 1-7 5-14 11-15 6-2 9 84 7 237-4 326 22 509 106 755 50 146 83 224 137 327 277 519 736 880 1340 1053 61 17 117 34 125 37s22 5 32 4c9-1 19 2 22 8 3 5 15 7 25 4s22 0 25 6c4 5 13 8 21 4 8-3 23-2 33 2 9 4 28 9 42 10 14 2 45 6 70 9s70 8 100 10c75 7 422 6 490-1 30-3 69-6 86-8 17-1 36-5 42-9 6-3 31-8 55-10 25-2 50-7 57-11 6-4 14-4 17-1s11 2 17-3c6-4 45-18 86-31 93-27 253-106 335-165 34-24 99-78 143-120s83-71 86-66c11 17-76 131-146 194-304 272-700 410-1163 406-77-1-153-4-170-5zM1904 9296c-8-21 3-49 16-41 5 3 10 15 10 25 0 25-18 36-26 16zM10944 9297c-7-20-2-47 11-50 14-3 19 43 6 56-7 7-12 6-17-6zM3115 9190c-8-12 20-24 35-15 6 3 8 11 5 16-8 12-32 12-40-1zM3535 9190c-8-12 20-24 35-15 6 3 8 11 5 16-8 12-32 12-40-1zM3025 9180c-8-12 20-24 35-15 6 3 8 11 5 16-8 12-32 12-40-1zM3645 9181c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM2965 9171c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM3715 9171c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM2905 9161c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM3785 9161c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM3835 9151c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM2815 9141c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM3885 9141c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM1914 9126c-8-21 3-49 16-41 5 3 10 15 10 25 0 25-18 36-26 16zM3935 9131c-6-11 13-26 22-17 3 3 12 1 20-6 7-6 16-8 20-5 3 4 12 2 19-4s18-8 24-4c14 9 1 28-16 21-7-3-16-1-20 5-3 6-12 8-20 5-7-3-16-1-19 4-8 13-22 13-30 1zM2723 9117c-33-12-42-34-12-30 33 4 70 23 64 33-7 12-11 12-52-3zM4085 9091c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM10934 9086c-8-21 3-49 16-41 5 3 10 15 10 25 0 25-18 36-26 16zM4155 9070c-6-9 9-18 62-34 29-9 40 12 11 23-51 19-67 21-73 11zM2585 9061c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM4266 9031c-9-14 32-34 51-26 10 3 13 9 7 14-16 15-52 22-58 12zM2489 9012c-13-12-18-21-12-25s21 1 34 11c13 12 18 21 12 25s-21-1-34-11zM4345 9000c-5-8 46-42 60-40 13 3 266-137 346-190 101-67 132-65 37 3-124 87-354 215-365 203-3-3-17 4-31 14-28 22-38 25-47 10zM1924 8976c-8-21 3-49 16-41 5 3 10 15 10 25 0 25-18 36-26 16zM2397 8954c-28-20-45-39-41-46 5-7 3-8-5-3-14 8-63-33-55-47 3-4 41 19 85 53 43 34 76 65 73 70-7 12-2 14-57-27zM10924 8906c-8-21 3-49 16-41 5 3 10 15 10 25 0 25-18 36-26 16zM1934 8826c-4-10-2-22 4-28 8-8 13-7 18 6 4 10 2 22-4 28-8 8-13 7-18-6zM2187 8772c-37-37-64-71-61-75 7-7 148 122 146 133-3 17-26 2-85-58zM5425 8810c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM10916 8763c-3-3-6-15-6-25s-3-17-7-17c-20 3-24-2-13-16 17-21 50-1 50 30 0 25-12 39-24 28zM5404 8716c-4-10-2-22 4-28 8-8 13-7 18 6 4 10 2 22-4 28-8 8-13 7-18-6zM7495 8719c-4-6-3-15 3-21s8-16 6-23c-3-7-1-16 5-19 14-9 25 14 13 26-6 6-8 16-6 23 7 17-12 29-21 14zM1944 8706c-8-21 3-49 16-41 5 3 10 15 10 25 0 25-18 36-26 16z"/><path d="M4866 8702c-3-6 1-15 8-21 8-7 17-8 20-3 3 6-1 15-8 21-8 7-17 8-20 3zM4916 8662c-3-6 1-15 8-21 8-7 17-8 20-3 3 6-1 15-8 21-8 7-17 8-20 3zM5404 8636c-4-10-2-22 4-28 8-8 13-7 18 6 4 10 2 22-4 28-8 8-13 7-18-6zM2046 8621c-10-11-13-22-8-25s17 3 26 13c10 11 13 22 8 25s-17-3-26-13zM4966 8622c-3-5 3-17 13-26 11-10 22-13 25-8s-3 17-13 26c-11 10-22 13-25 8zM1954 8586c-4-10-2-22 4-28 8-8 13-7 18 6 4 10 2 22-4 28-8 8-13 7-18-6zM2001 8566c-7-8-8-17-3-20 6-3 15 1 21 8 7 8 8 17 3 20-6 3-15-1-21-8zM5415 8560c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM1955 8530c-3-4 1-13 9-19 10-9 16-8 26 4 7 8 11 15 9 16-31 6-40 6-44-1zM7505 8510c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM5436 8481c-10-16 13-66 25-54 6 6 6 19 0 36-11 29-16 32-25 18zM5126 8462c-3-5 5-19 18-31 13-13 26-18 30-13 3 5-5 19-18 31-13 13-26 18-30 13zM7489 8426c-1-3-2-9-3-13-1-5-5-13-9-20-4-6-3-14 3-18 5-3 11-4 11-1 1 3 2 9 3 14 1 4 5 12 9 19 4 6 3 14-3 18-5 3-11 4-11 1zM5187 8393c-8-12 63-94 74-87 6 3 5 11-2 20-6 7-15 11-20 8s-6 1-4 8c6 16-40 64-48 51zM7445 8321c-9-18-11-32-5-36 5-3 16 8 25 24 9 18 11 32 5 36-5 3-16-8-25-24zM5268 8294c-4-3 20-47 52-97 80-126 85-132 93-120 6 9-125 223-136 223-2 0-6-3-9-6zM5527 8274c-9-10 53-95 64-89 5 4-5 26-21 51-33 47-33 47-43 38zM7361 8186c-7-8-8-17-3-20 6-3 15 1 21 8 7 8 8 17 3 20-6 3-15-1-21-8zM5596 8172c-3-6 1-15 8-21 8-7 17-8 20-3 3 6-1 15-8 21-8 7-17 8-20 3zM7321 8136c-7-8-8-17-3-20 6-3 15 1 21 8 7 8 8 17 3 20-6 3-15-1-21-8zM7241 8056c-7-8-8-17-3-20 6-3 15 1 21 8 7 8 8 17 3 20-6 3-15-1-21-8zM5417 8053c-7-12 44-94 54-87 5 3 0 23-11 44-21 41-36 55-43 43zM7175 8006c-15-13-24-25-19-29 6-3 23 4 39 17 15 13 24 25 19 29-6 3-23-4-39-17zM5787 8003c-3-5-2-15 3-23 5-9 5-19-1-27-6-7-8-17-4-23 9-14 28-1 21 15-2 7 1 18 7 24 8 8 7 15-5 27-8 9-18 12-21 7zM7083 7951c-17-11-33-18-36-15-2 2-10-3-17-11-9-11-10-19-3-26 8-8 15-5 23 11 6 12 14 19 17 16 9-9 64 24 58 34-8 12-5 13-42-9zM5785 7870c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM7025 7840c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM5526 7822c-6-10 39-140 54-156 5-5 6-14 3-21-2-8 1-24 8-37s12-28 11-35c-1-6 2-14 7-18 6-3 8-12 5-19-3-8-1-17 5-20 6-4 8-13 5-20-3-8-1-17 5-20 14-9 25 14 13 26-6 6-8 16-6 23 3 7 1 16-5 19-6 4-8 13-5 20 3 8 0 17-5 21-6 3-9 10-6 15s0 21-7 37c-6 15-11 31-10 35 3 11-47 141-57 151-5 5-11 4-15-1zM5846 7742c-3-5 8-21 23-36 16-15 31-23 35-18 3 5-8 21-23 36-16 15-31 23-35 18zM6911 7666c-7-8-8-17-3-20 6-3 15 1 21 8 7 8 8 17 3 20-6 3-15-1-21-8zM5975 7640c-3-5 8-16 24-25 18-9 32-11 36-5 3 5-8 16-24 25-18 9-32 11-36 5zM6845 7626c-11-8-14-16-8-19 6-4 18 0 28 7 11 8 14 16 8 19-6 4-18 0-28-7zM6635 7561c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM6255 7551c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM6575 7551c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM6325 7541c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM6495 7540c-8-12 20-24 35-15 6 3 8 11 5 16-8 12-32 12-40-1zM5635 7450c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM5645 7400c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM5655 7340c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM5664 7266c-4-10-2-22 4-28 8-8 13-7 18 6 4 10 2 22-4 28-8 8-13 7-18-6zM5674 7166c-8-21 3-49 16-41 5 3 10 15 10 25 0 25-18 36-26 16zM5674 6867c-7-20-2-47 11-50 14-3 19 43 6 56-7 7-12 6-17-6zM5664 6746c-4-10-2-22 4-28 8-8 13-7 18 6 4 10 2 22-4 28-8 8-13 7-18-6zM7345 6690c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM5654 6676c-4-10-2-22 4-28 8-8 13-7 18 6 4 10 2 22-4 28-8 8-13 7-18-6zM5645 6610c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM7365 6579c-4-6-3-15 3-21s8-16 6-23c-3-7-1-16 5-19 14-9 25 14 13 26-6 6-8 16-6 23 7 17-12 29-21 14zM5635 6560c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM5626 6511c-4-6-5-15-1-20 3-5 0-13-6-16-5-4-8-13-5-21 3-7 1-16-5-20-6-3-8-12-5-19 2-7 1-16-4-21-16-17-89-244-80-249 5-3 16 7 23 22 23 44 77 215 72 224-3 4 0 11 6 14 5 4 8 13 5 21-3 7-1 16 5 20 6 3 8 12 5 19-2 7 1 18 7 24 8 8 8 14 0 22s-13 8-17 0zM7385 6490c-4-6-2-17 4-24s8-15 6-18c-3-3 0-18 6-34 7-16 12-32 11-36-2-10 57-177 75-211 18-35 36-26 22 11-25 63-71 199-76 221-2 14-6 28-9 33-3 4-7 18-9 30-6 28-21 43-30 28zM7537 6074c-6-6 36-97 55-121 6-7 14-10 19-8 8 6-44 120-60 129-4 3-11 3-14 0zM5404 5933c-9-15-28-45-40-65-13-20-20-40-14-43 8-5 52 52 79 102 17 33-5 39-25 6zM7615 5930c-8-13 34-72 45-65 5 3 0 21-11 40-23 38-25 40-34 25zM9195 5871c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM9255 5871c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM7667 5844c-3-6 4-23 17-39 13-15 25-24 29-19 3 6-4 23-17 39-13 15-25 24-29 19zM3185 5820c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM9119 5806c-3-13-6-22-13-38-10-22 0-52 15-43 5 4 9 17 7 28-1 12 1 27 5 34 4 6 3 14-3 18-5 3-11 4-11 1zM3236 5742c-3-6 1-15 8-21 8-7 17-8 20-3 3 6-1 15-8 21-8 7-17 8-20 3zM7737 5743c-8-13 17-36 27-26 4 4 4 0 1-8-7-18 20-45 29-30 4 6-6 24-22 42-17 19-31 28-35 22zM5271 5726c-7-8-8-17-3-20 6-3 15 1 21 8 7 8 8 17 3 20-6 3-15-1-21-8zM5217 5658c-20-23-33-46-30-51 8-13 54 35 48 51-2 7-1 11 4 8s14 1 20 8c7 9 8 17 2 20-5 3-25-13-44-36zM9321 5666c-13-13-18-26-13-30 5-3 19 5 31 18 13 13 18 26 13 30-5 3-19-5-31-18zM7805 5660c-4-7 3-22 18-37 32-33 42-17 12 21-16 20-25 25-30 16zM5086 5511c-38-38-64-71-59-74s40 25 77 62c38 38 64 71 59 74s-40-25-77-62zM7895 5560c-10-17 51-78 65-64 7 7-1 21-24 43-23 23-36 29-41 21zM7986 5472c-8-14 51-65 65-57 7 5 10 4 6-2-9-14 29-47 44-37 7 4 10 3 6-3s0-16 7-22c9-8 16-8 20-2 4 5-27 37-68 70-41 34-77 57-80 53zM4952 5393c-23-19-39-39-36-44 3-6 11-5 20 2 7 6 11 15 8 20s1 6 8 4c16-6 64 40 51 48-5 3-28-10-51-30zM4832 5303c-70-51-75-80-6-32 24 16 42 34 39 40-3 5 0 6 8 3 16-6 43 21 29 30-5 3-36-16-70-41zM8145 5341c-3-5 15-24 39-40 51-36 72-25 23 11-47 36-55 39-62 29zM8256 5272c-3-6 1-15 8-21 8-7 17-8 20-3 3 6-1 15-8 21-8 7-17 8-20 3zM10425 5232c-27-15-75-38-105-51-58-24-188-141-216-194-15-27-14-28 23-44 21-8 49-17 63-18s32-6 41-9c9-4 47-6 85-4l69 3 6 69c5 63 9 72 42 102 23 21 51 36 76 40 62 10 65 22 20 82-22 28-43 52-47 52s-29-13-57-28zM4721 5231c-14-11-19-21-13-25 5-3 20 2 33 12 29 24 11 36-20 13zM2505 5216c-13-13-26-22-29-19-2 2-14-9-27-26-12-17-25-28-29-26-11 7-45-34-45-53 0-10-5-16-12-15-14 3-74-67-68-78 3-4-2-10-11-13-8-3-13-10-10-15s-1-11-8-14c-18-7-106-182-110-217-1-14-6-31-10-38s-5-16-1-21c3-5 0-13-6-16-5-4-8-14-5-22s3-20 0-25c-9-14-9-222 0-236 3-5 3-17 0-25-11-31 86-205 107-191 6 4 7 10 0 17-13 17 12 179 40 253 16 43 38 74 81 117 33 32 64 70 69 86 8 23 31 38 130 85 66 31 128 65 139 76 10 10 20 16 23 14 7-7 91 59 90 71 0 6 7 15 16 21 13 10 13 14 2 28-7 9-10 16-5 16 4 0-5 13-21 30-15 16-33 26-38 23-6-4-8 0-4 10s-4 25-23 40c-16 14-27 27-24 30 3 2-6 14-20 25-14 10-23 21-21 24 8 8-56 61-103 86l-42 23-25-25zM8335 5220c-9-14 115-74 127-62 7 7-10 21-50 41-69 35-69 35-77 21zM4615 5177c-12-10-14-16-7-21 15-9 54 12 47 25-8 12-18 11-40-4zM4515 5126c-11-8-14-16-8-19 6-4 18 0 28 7 11 8 14 16 8 19-6 4-18 0-28-7zM8705 5071c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM8775 5051c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM3025 5041c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM4266 5043c-4-5-12-8-17-8s-9-3-9-7c0-8 3-9 18-7 4 1 12 2 17 3 13 1 19 20 8 23-5 2-13 0-17-4zM9847 5026c-9-13-13-27-10-30 9-9 54 35 47 45-9 15-21 10-37-15zM2986 5032c-3-5 5-19 18-31 13-13 26-18 30-13 3 5-5 19-18 31-13 13-26 18-30 13zM8865 5031c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM9805 5031c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM3115 5021c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM8915 5021c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM9745 5021c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM3165 5011c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM4145 5011c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM8975 5011c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM9675 5011c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM10637 5014c-9-9 53-125 63-119 11 7 4 27-28 83-26 45-26 45-35 36zM3225 5001c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM4095 5001c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM9055 5001c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM9585 5000c-8-12 20-24 35-15 6 3 8 11 5 16-8 12-32 12-40-1zM4035 4991c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM9155 4990c-8-12 20-24 35-15 6 3 8 11 5 16-8 12-32 12-40-1zM9465 4990c-8-12 20-24 35-15 6 3 8 11 5 16-8 12-32 12-40-1zM3365 4981c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM3965 4981c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM9791 4976c-7-8-8-17-3-20 6-3 15 1 21 8 7 8 8 17 3 20-6 3-15-1-21-8zM3465 4971c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM3875 4971c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM9741 4936c-7-8-8-17-3-20 6-3 15 1 21 8 7 8 8 17 3 20-6 3-15-1-21-8zM10494 4928c-6-9-4-10 26-11 11-1 19 3 18 8-4 12-37 14-44 3zM3106 4912c-3-5 3-17 13-26 11-10 22-13 25-8s-3 17-13 26c-11 10-22 13-25 8zM9701 4906c-7-8-8-17-3-20 6-3 15 1 21 8 7 8 8 17 3 20-6 3-15-1-21-8zM9962 4876c-10-14-21-23-24-21-3 3-23-12-46-33-23-22-44-37-46-35s-13-8-25-23c-11-15-21-24-21-20 0 13-174-114-176-129-1-8 6-21 17-28 10-8 16-16 13-19s6-15 20-26c14-10 23-22 20-24-2-3 19-29 47-59 29-30 52-57 51-60-2-12 59-64 76-64 9 0 16-5 15-11-1-7 7-20 17-29 11-10 20-14 20-9s7-2 16-14c8-12 19-20 24-17 4 3 11-2 14-11 3-8 10-13 15-10 12 8 42-4 36-14-6-9 51-41 59-33 2 3-13 31-34 64-103 159-129 332-59 395 21 19 117 36 125 22 3-5 9-6 14-3 11 7-56 128-91 166-15 16-25 30-23 32s-4 11-15 21c-18 16-20 16-39-8zM3196 4832c-3-6 1-15 8-21 8-7 17-8 20-3 3 6-1 15-8 21-8 7-17 8-20 3zM10176 4821c-4-5 15-51 40-101l46-92 32 31c41 39 81 51 178 51 42 0 79 4 82 9s-13 21-35 35c-31 21-38 30-30 40 6 7 8 16 4 19-10 11-71 8-78-3-8-14-102-13-111 1-4 7-24 9-50 6-25-2-47-1-50 4-7 12-21 11-28 0zM2935 4808c-26-72-34-101-30-108 3-5 1-12-5-15-6-4-8-15-5-25s1-21-5-25-9-13-6-21c3-7 0-16-5-20-6-3-8-17-5-29 3-13 1-27-4-30-6-4-10-14-8-23 1-10-1-22-5-29-9-15 18-83 32-83 6 0 22 21 35 48 60 117 162 149 201 62 10-22 25-46 35-55 16-14 20-11 58 43l41 59-24 23c-14 13-25 20-25 16 0-5-9 2-20 15-10 13-19 20-20 15 0-5-10 3-21 18-12 15-23 25-26 22-3-2-18 11-35 29-19 23-35 32-46 28-9-3-14-2-9 2 7 9-70 95-85 95-5 0-11-6-13-12zM9538 4793c-21-14-35-29-32-34 6-10 58 17 75 38 19 23-7 20-43-4zM10728 4814c-9-14 11-56 22-49 13 8 13 18-3 40-8 10-16 14-19 9zM3246 4792c-3-6 1-15 8-21 8-7 17-8 20-3 3 6-1 15-8 21-8 7-17 8-20 3zM9471 4746c-7-8-8-17-3-20 6-3 15 1 21 8 7 8 8 17 3 20-6 3-15-1-21-8z"/><path d="M2774 4730c-5-4-40-24-79-44-38-20-70-39-70-43 0-5-13-25-29-46-27-35-28-39-13-55 11-11 39-17 84-20 38-2 73-8 80-14 16-13 23 2 27 60 2 27 6 55 10 61 10 16 15 100 6 106-4 2-11 0-16-5zM10755 4710c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM3366 4702c-3-5 1-15 9-22s15-9 15-5 6 2 14-4c9-8 16-8 20-2 4 5 2 12-4 16-5 3-10 3-10-1s-9 1-19 10c-11 10-22 13-25 8zM9391 4696c-7-8-8-17-3-20 6-3 15 1 21 8 7 8 8 17 3 20-6 3-15-1-21-8zM10765 4650c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM9285 4636c-11-8-14-16-8-19 6-4 18 0 28 7 11 8 14 16 8 19-6 4-18 0-28-7zM10135 4640c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM2511 4598c-29-13-40-23-33-30 12-12 96 28 87 42-4 6-7 10-8 9-1 0-22-10-46-21zM9195 4586c-11-8-14-16-8-19 6-4 18 0 28 7 11 8 14 16 8 19-6 4-18 0-28-7zM10167 4564c-3-3-1-18 4-33 5-14 12-32 15-40 3-10 8-11 15-4s6 22-5 47c-15 37-18 40-29 30zM3606 4551c-3-5 5-16 19-25 24-16 45-6 22 11-24 19-36 23-41 14zM10306 4511c-10-16 13-66 25-54 6 6 6 19 0 36-11 29-16 32-25 18zM10765 4510c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM8935 4456c-11-8-14-16-8-19 6-4 18 0 28 7 11 8 14 16 8 19-6 4-18 0-28-7zM10205 4440c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM3141 4426c-7-8-8-17-3-20 6-3 15 1 21 8 7 8 8 17 3 20-6 3-15-1-21-8zM8845 4417c-10-8-14-16-9-19 14-9 56 11 49 22-8 13-18 13-40-3zM3111 4386c-7-8-8-17-3-20 6-3 15 1 21 8 7 8 8 17 3 20-6 3-15-1-21-8zM3925 4391c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM10255 4391c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM3061 4326c-7-8-8-17-3-20 6-3 15 1 21 8 7 8 8 17 3 20-6 3-15-1-21-8zM4075 4331c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM8635 4331c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM10691 4316c-7-8-8-17-3-20 6-3 15 1 21 8 7 8 8 17 3 20-6 3-15-1-21-8zM4125 4310c-6-9-4-11 20-14 6-1 21-8 34-15 16-9 26-10 34-2 11 11-3 20-37 25-8 1-19 5-22 9-10 10-22 9-29-3zM8585 4311c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM8446 4263c-4-5-12-9-17-9-5-1-11-3-14-4s-9-3-15-4c-5 0-10-4-10-8v-14c0-4 7-1 15 6s15 9 15 5 6-3 13 3c6 6 15 11 20 11 8 1 11 11 5 17-3 2-8 1-12-3zM2971 4236c-7-8-8-17-3-20 6-3 15 1 21 8 7 8 8 17 3 20-6 3-15-1-21-8zM4335 4240c-9-14 45-34 58-21 7 7 1 14-17 21-33 12-33 12-41 0zM10591 4216c-7-8-8-17-3-20 6-3 15 1 21 8 7 8 8 17 3 20-6 3-15-1-21-8zM8271 4209c-16-6-21-13-14-20 13-13 67 7 58 21-7 12-12 12-44-1zM4465 4201c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM4535 4181c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM8185 4181c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM10126 4182c-3-6-2-13 4-17 5-3 10-3 10 1 0 3 7 1 15-6 9-7 18-10 22-7 3 4 12 2 19-4s18-8 24-4c14 9 1 28-16 21-7-3-16-1-20 5-3 6-12 8-19 5-7-2-17 0-23 6s-12 6-16 0zM4605 4161c-6-11 13-26 22-17 3 3 12 1 19-5s18-8 24-4c14 9 1 28-16 21-7-3-16-1-19 4-8 13-22 13-30 1zM8115 4161c-3-6-12-8-19-5-8 3-17 1-20-5-4-6-13-8-20-5-8 3-17 1-20-5-4-6-13-8-20-5-8 3-17 1-20-5-4-6-13-8-20-5-8 3-17 1-20-5-4-6-13-8-20-5-8 3-17 1-20-5-9-14 14-25 26-13 6 6 16 8 23 6 7-3 16-1 19 5 4 6 13 8 20 5 8-3 17-1 20 5 4 6 13 8 20 5 8-3 17-1 20 5 4 6 13 8 20 5 8-3 17 0 21 5 3 6 10 9 15 6s11-1 14 4c4 5 2 12-3 15-5 4-12 2-16-3zM10445 4161c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM10265 4150c-8-13 20-24 41-16 20 8 9 26-16 26-10 0-22-5-25-10zM10365 4150c-8-13 20-24 41-16 20 8 9 26-16 26-10 0-22-5-25-10zM2807 4129c-21-11-35-24-32-29 4-6 23-1 46 10 22 12 37 25 34 30-7 12-2 13-48-11zM4805 4111c-6-11 13-26 22-17 3 3 12 1 19-5s18-8 24-4c14 9 1 28-16 21-7-3-16-1-19 4-8 13-22 13-30 1zM7866 4101c-4-6-13-8-20-5-17 6-31-12-16-21 5-3 16-3 23 2 6 4 17 8 22 8 14 0 19 19 7 23-6 2-13-1-16-7zM2355 4091c-6-11 13-26 22-17 3 3 12 1 19-5s18-8 24-4c14 9 1 28-16 21-7-3-16-1-19 4-8 13-22 13-30 1zM2716 4091c-4-6-13-8-20-5-17 6-31-12-16-21 5-3 16-3 23 2 6 4 17 8 22 8 14 0 19 19 7 23-6 2-13-1-16-7zM4895 4091c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM4945 4081c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM7775 4081c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM2445 4070c-8-12 20-24 35-15 6 3 8 11 5 16-8 12-32 12-40-1zM2615 4071c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM4995 4071c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM7725 4071c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM5045 4061c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM7675 4061c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM5115 4051c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM7615 4051c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM5185 4040c-8-12 20-24 35-15 6 3 8 11 5 16-8 12-32 12-40-1zM7565 4041c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM5275 4031c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM7505 4031c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM5365 4021c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM7435 4021c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM5455 4011c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM7365 4011c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM5545 4001c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM7285 4000c-8-12 20-24 35-15 6 3 8 11 5 16-8 12-32 12-40-1zM5625 3990c-8-12 20-24 35-15 6 3 8 11 5 16-8 12-32 12-40-1zM7205 3990c-8-12 20-24 35-15 6 3 8 11 5 16-8 12-32 12-40-1zM5715 3980c-8-12 20-24 35-15 6 3 8 11 5 16-8 12-32 12-40-1zM7105 3980c-8-12 20-24 35-15 6 3 8 11 5 16-8 12-32 12-40-1zM6995 3970c-8-12 20-24 35-15 6 3 8 11 5 16-8 12-32 12-40-1zM5885 3960c-8-13 20-24 41-16 20 8 9 26-16 26-10 0-22-5-25-10zM6855 3960c-8-13 20-24 41-16 20 8 9 26-16 26-10 0-22-5-25-10zM6085 3950c-3-5 0-13 9-16 21-8 61-1 61 11 0 14-62 19-70 5zM6645 3951c-7-13 17-24 40-19 9 1 16 8 16 13 0 14-48 19-56 6z"/></g><path d="M6362 12928c-27-24-238-219-468-435-312-291-430-408-460-455-142-218-120-484 58-673 237-253 637-272 893-42l60 54 60-54c194-175 479-210 723-91 92 45 218 170 260 258 91 189 79 391-35 556-23 32-209 214-457 447-520 487-509 477-551 477-25 0-46-11-83-42z" fill="#F16C25" fill-rule="nonzero"/><g fill="#DCDCDC" fill-rule="nonzero"><path d="M6407 9534c-3-4-2-16 4-26 8-15 14-17 22-9s7 15-4 26c-8 9-18 13-22 9zM6541 9516c-7-8-8-17-3-20 6-3 15 1 21 8 7 8 8 17 3 20-6 3-15-1-21-8zM6258 9489c-41-21-81-66-71-82 3-5 13-1 22 12 17 22 70 61 83 61 4 0 2-13-3-29-5-15-9-32-8-37s-1-16-5-25c-10-24-3-115 9-109 6 3 11 30 11 60 1 30 4 62 7 70 20 59 26 84 22 89-12 11-32 8-67-10zM6665 9501c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM6738 9455c-9-9 22-66 33-60 5 4 9 10 9 14 0 14-35 53-42 46zM6415 9280c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM6534 9276c-4-10-2-22 4-28 8-8 13-7 18 6 4 10 2 22-4 28-8 8-13 7-18-6zM6285 9248c-9-23 31-111 66-144 16-15 29-36 29-45 0-19 16-34 23-22 3 5 7 22 8 38 3 23 0 29-12 27-23-3-66 50-80 101-15 51-26 66-34 45zM6134 9237c-7-20-2-47 11-50 14-3 19 43 6 56-7 7-12 6-17-6zM6405 9190c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM6529 9188c-6-16-4-110 1-113 4-3 15 5 23 18 12 19 13 26 2 41-8 10-11 24-9 31 3 7 1 16-5 20-6 3-11 5-12 3zM6566 9092c-3-6 1-15 8-21 8-7 17-8 20-3 3 6-1 15-8 21-8 7-17 8-20 3zM6516 9048c-3-7-6-20-9-28-6-20 11-52 24-45 12 8 12 72-1 80-6 3-12 0-14-7zM6125 9031c-3-6 4-15 15-21s20-8 20-4c0 3 6 1 14-5 10-8 16-9 21-1 6 9 0 14-17 12-3-1-12 5-18 13-14 17-26 19-35 6zM9524 9031c-3-3-33-6-67-7-73-3-156-12-167-19-4-3-23-7-41-10-41-5-93-16-149-30-11-3-29-7-40-10-46-12-66-16-75-18-5-2-16-6-22-10-7-5-13-6-13-3s-17 0-37-8c-21-8-47-17-58-22-11-4-29-9-40-11-11-1-29-7-40-12s-38-17-60-26c-228-98-455-250-629-420-80-78-296-360-296-387 0-6-8-21-19-32-10-12-34-57-54-101-19-44-44-100-55-125-23-51-53-143-77-240-9-36-19-72-23-80-3-8-4-19-3-24s-1-16-5-25c-3-9-8-40-10-70-3-30-8-59-11-64-14-23-16-364-3-472 6-44 12-98 14-120s7-48 11-57 4-21 1-27c-4-5-2-13 4-16 6-4 10-14 9-23-1-10 0-24 4-32 3-8 22-69 42-135s42-133 50-150c73-156 99-203 157-290 37-55 79-118 95-140 29-41 255-275 266-275 3 0 41-26 84-57 89-66 109-79 141-93 22-10 119-57 157-77s70-32 155-58c47-14 92-28 100-32 8-3 29-7 45-9 17-2 37-7 45-11 8-3 22-5 32-4 9 1 19-3 22-8 4-6 13-8 21-4 8 3 23 2 33-2 9-5 33-9 52-11 61-6 455-10 465-5 5 3 22 5 37 5 15 1 29 6 30 11 4 14-42 19-55 6-6-6-15-7-21-2s-58 19-116 31c-474 100-837 280-1075 531-122 130-253 334-339 529-175 397-204 860-80 1270 84 277 179 444 353 624 289 297 652 537 992 654 297 102 510 118 924 67 66-8 139-16 161-19 23-2 51-9 62-15 13-7 23-7 27-1 3 5-8 16-25 25-16 8-30 13-30 9 0-3-16 4-35 16s-35 18-35 14-8 0-17 8c-22 19-82 40-94 32-5-3-15-2-21 3-7 4-17 8-23 10-5 1-21 5-35 8-36 9-60 14-100 20-19 3-43 8-52 11-42 13-433 26-444 15zM3268 9015c-4-4-33-9-65-10-70-4-149-13-183-20-14-3-38-8-55-11-53-9-110-21-110-24 0-2-34-10-66-15-14-2-43-13-65-25-21-12-47-24-57-26-29-5-185-101-224-138-12-10-31-28-44-40-20-19-219-227-265-277-8-9-14-18-14-22 0-3-20-34-44-69-70-101-156-251-209-368-24-53-76-202-81-230-3-14-5-26-7-27-1-2-2-6-3-10-1-5-5-14-9-20-5-7-6-17-2-22 3-5 0-13-6-16-5-4-8-13-5-21 3-7 1-16-5-20-6-3-8-12-5-20 3-7 0-16-5-20-6-3-9-15-6-25s1-22-5-25c-5-3-7-16-4-29 4-14 0-28-9-35-12-10-13-16-4-26 9-11 8-18 0-28-21-25-39-290-29-424 11-166 17-212 25-224 4-7 6-23 5-35-2-11 2-24 8-28s8-15 5-25-1-21 5-25 8-15 5-25-1-21 5-25c6-3 8-11 4-16-3-5 0-16 6-24s9-19 6-24c-4-5-2-12 4-16s8-11 4-16c-3-5 0-16 6-24 7-8 9-15 5-15s-2-7 5-15 10-15 6-15c-13 0 46-152 109-280 85-170 268-411 407-533 49-44 214-167 223-167 3 0 29-15 58-33 72-45 138-79 145-73 2 3 18-4 33-15 16-11 33-18 38-14 5 3 12 1 16-4 3-6 49-24 103-41 53-17 104-33 112-37 8-3 20-7 25-8 6-1 12-3 15-4s22-4 43-6c20-2 43-7 49-11s29-9 52-11 48-6 56-9c8-4 27-6 42-5 14 1 29-2 32-7s17-7 31-5c13 3 33 2 42-2 38-15 397-21 445-8 71 20 19 39-247 88-440 83-653 164-905 344-340 243-600 701-676 1191-20 128-22 384-5 495 45 285 163 591 294 765 201 264 581 559 898 696 254 110 561 173 777 161 40-3 75-1 77 4 7 11-33 32-45 24-6-3-16-3-22 2-7 4-17 8-23 10-5 1-20 4-32 7-34 9-65 16-93 21-14 3-36 7-50 10s-41 8-60 11c-42 6-75 12-75 14 0 1-20 3-45 5-25 1-45 4-45 5s-34 4-75 7c-41 2-111 6-155 9s-83 2-87-1zM6817 9013c-10-16-12-62-2-65 15-5 31 50 18 63-6 6-13 7-16 2zM6374 8987c-9-24 0-52 16-52 21 0 24 39 6 55-13 10-17 9-22-3zM6686 8981c-4-5-2-12 4-16 5-3 10-3 10 1 0 3 7 1 15-6s15-9 15-5 7 2 15-5c8-6 19-9 25-5 14 9 1 28-15 21-7-2-18 1-24 7s-11 7-11 3c0-5-6-3-14 3-9 8-16 8-20 2zM6515 8940c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM4095 8890c-6-10 29-28 64-33 9-1 21-6 28-10 6-4 14-3 18 3 3 5 4 11 1 11-14 3-23 7-58 22-44 20-45 20-53 7zM10456 8851c-4-5 7-19 23-30 16-12 32-17 35-12 4 5-7 19-23 30-16 12-32 17-35 12zM4235 8841c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM7025 8810c-3-5-2-10 2-12 13-7 33-3 36 6 3 12-31 17-38 6zM7165 8810c-3-5-4-11-1-11 3-1 9-2 14-3 17-4 70-36 81-50 7-9 18-13 23-10s1 15-9 26c-20 22-73 53-73 42 0-4-6-1-14 5-10 8-16 9-21 1zM6975 8801c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM4355 8790c-3-5 26-25 64-45 39-19 73-31 76-25 3 5-26 25-64 45-39 19-73 31-76 25zM10546 8781c-9-15 23-36 35-24 8 8 5 14-9 22-12 6-23 7-26 2zM10607 8733c-10-9 174-194 185-187 13 8-95 125-110 119-7-2-11-1-8 4 7 11-58 73-67 64zM4525 8701c-3-6 3-15 14-21 12-6 22-6 26-1 3 6-3 15-14 21-12 6-22 6-26 1zM4616 8652c-3-5 3-17 13-26 11-10 22-13 25-8s-3 17-13 26c-11 10-22 13-25 8zM4696 8592c-3-6 1-15 8-21 8-7 17-8 20-3 3 6-1 15-8 21-8 7-17 8-20 3zM4736 8562c-3-6 1-15 8-21 8-7 17-8 20-3 3 6-1 15-8 21-8 7-17 8-20 3zM4776 8532c-3-5 3-17 13-26 11-10 22-13 25-8s-3 17-13 26c-11 10-22 13-25 8zM10815 8521c-4-8-1-19 8-28 19-20 30-1 13 22-10 14-15 15-21 6zM4856 8462c-3-5 3-17 13-26 11-10 22-13 25-8s-3 17-13 26c-11 10-22 13-25 8zM4956 8362c-3-5 5-19 18-31 13-13 26-18 30-13 3 5-5 19-18 31-13 13-26 18-30 13zM7133 8220c-46-44-79-82-73-85 5-3 46 30 92 73 45 43 77 81 72 84s-46-29-91-72zM5035 8280c-4-7 1-20 13-32 26-26 36-9 13 21-13 17-20 20-26 11zM10987 8284c-3-4-2-16 4-26 8-15 14-17 22-9s7 15-4 26c-8 9-18 13-22 9zM11017 8233c-3-5 21-56 53-115 32-60 56-108 54-108-3 0 2-13 11-30 8-16 16-33 16-37 1-5 6-17 12-28s11-23 12-27c0-5 3-8 8-8h13c4 0 1 6-5 13-6 8-8 17-4 20 3 4-1 15-10 25-10 10-14 21-11 25 3 3-4 20-16 36-12 17-19 31-16 31 8 0-35 92-72 153-37 60-38 62-45 50zM5076 8222c-3-6 1-15 8-21 8-7 17-8 20-3 3 6-1 15-8 21-8 7-17 8-20 3zM6847 8223c-4-6 13-29 37-52 24-24 46-39 49-34 4 6-13 29-37 52-24 24-46 39-49 34zM5106 8182c-3-6 1-15 8-21 8-7 17-8 20-3 3 6-1 15-8 21-8 7-17 8-20 3zM6946 8112c-3-6 1-15 8-21 8-7 17-8 20-3 3 6-1 15-8 21-8 7-17 8-20 3zM5237 7984c-9-10 92-206 103-199 10 6 10 6-43 117-37 77-49 93-60 82zM11197 7844c-4-4-3-12 1-18s7-14 8-18c1-5 3-10 4-13s3-9 4-15c0-5 4-10 9-10h13c4 0 1 7-6 15s-9 15-5 15 1 7-6 17c-8 9-12 18-11 20 6 8-4 13-11 7zM5345 7760c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM5367 7704c-4-4-3-12 1-18s7-14 8-18c1-5 3-10 4-13s3-9 4-15c0-5 4-10 9-10h13c4 0 1 7-6 15s-9 15-5 15 1 7-6 17c-8 9-12 18-11 20 6 8-4 13-11 7zM5417 7533c-4-3-2-12 3-19 6-6 9-16 8-22-2-5 1-12 6-13 14-6 15 40 1 51-7 5-15 7-18 3zM11285 7490c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM5435 7450c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM11294 7436c-8-21 3-49 16-41 5 3 10 15 10 25 0 25-18 36-26 16zM11307 7373c-12-12-7-50 8-63 16-13 18-9 15 30-2 28-13 44-23 33zM5455 7350c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM5464 7286c-8-21 3-49 16-41 5 3 10 15 10 25 0 25-18 36-26 16zM11315 7268c-9-24-1-103 10-103 14 0 19 95 6 108-7 7-12 5-16-5zM5477 7213c-12-12-7-50 8-63 16-13 18-9 15 30-2 28-13 44-23 33zM5485 7088c-9-24-1-188 10-191 14-3 19 183 6 196-7 7-12 5-16-5zM11315 7008c-9-24-2-93 10-93 14 0 19 85 6 98-7 7-12 5-16-5zM11311 6876c-14-17-11-62 4-58 14 3 26 55 16 65-4 4-13 1-20-7zM5475 6837c-9-22-2-62 10-60 6 1 11 14 13 29 4 32-14 56-23 31zM11294 6786c-8-21 3-49 16-41 5 3 10 15 10 25 0 25-18 36-26 16zM5464 6736c-8-21 4-52 15-40 15 15 17 47 4 51-7 3-16-2-19-11zM11285 6720c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM11275 6670c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM5455 6660c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM11265 6620c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM5445 6610c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM5435 6560c-3-5-3-15 0-20 4-6 2-17-5-25s-7-15-1-19c12-8 24 10 27 41 3 25-11 40-21 23zM11249 6536c-1-3-2-9-3-13-1-5-5-13-9-20-4-6-3-14 3-18 5-3 11-4 11-1 1 3 2 9 3 14 1 4 5 12 9 19 4 6 3 14-3 18-5 3-11 4-11 1z"/><path d="M3425 6490c-3-5 0-13 8-16 23-8 92 0 92 11 0 14-92 19-100 5zM3322 6468c-7-7-12-9-12-5s-23-4-50-18c-58-29-59-53-2-30 20 9 45 23 55 33 11 9 21 16 23 15 5-4 7 8 2 13-3 2-10-2-16-8zM3595 6471c-8-15 64-56 77-43 7 7-2 17-30 31-23 12-43 17-47 12zM5404 6424c-4-10-9-22-11-26s1-9 6-13c15-9 35 35 22 48-7 7-12 5-17-9zM11219 6436c-1-3-2-9-3-13-1-5-5-14-9-20-5-7-5-18-2-23 9-14 28-1 21 15-2 7 0 17 6 23s6 12-1 16c-6 4-12 5-12 2z"/><path d="M3181 6396c-7-8-8-17-3-20 6-3 15 1 21 8 7 8 8 17 3 20-6 3-15-1-21-8zM9275 6400c-4-6-15-8-25-5s-21 1-25-5c-3-6-11-8-16-4-5 3-35-6-66-21-41-18-53-29-46-36 8-8 19-7 40 4 55 29 88 40 131 43 48 4 65 11 57 25-8 12-42 12-50-1zM9385 6401c-7-13 17-24 40-19 9 1 16 8 16 13 0 14-48 19-56 6zM9465 6390c-6-9-4-11 20-14 6-1 21-8 33-15 13-7 26-10 29-7 4 3 12 1 19-5 8-7 14-7 19 1 3 5 4 11 1 11-3 1-9 2-13 3-5 1-18 7-31 14-12 7-27 10-32 7s-11-1-15 5c-8 13-22 13-30 0zM3121 6347c-6-8-8-17-5-20 10-9 45 13 39 24-9 13-21 11-34-4zM9596 6341c-6-8 5-20 31-35 23-13 22 12-2 28-13 9-26 12-29 7zM9006 6271c-21-21-34-41-29-44 6-4 27 11 47 32 21 21 34 41 29 44-6 4-27-11-47-32zM11161 6293c-5-10-9-21-10-26 0-4-7-20-16-37-19-36-2-50 20-16 9 13 15 28 13 32-1 5 3 19 10 31 7 13 8 24 3 28-6 3-14-2-20-12zM3806 6282c-3-6 1-15 8-21 8-7 17-8 20-3 3 6-1 15-8 21-8 7-17 8-20 3zM5354 6274c-4-10-9-22-11-26s1-9 6-13c15-9 35 35 22 48-7 7-12 5-17-9zM9676 6282c-3-6 1-15 8-21 8-7 17-8 20-3 3 6-1 15-8 21-8 7-17 8-20 3zM3836 6242c-2-4 5-28 16-52 12-25 22-48 22-52 1-5 4-8 9-8 6 0 9 5 6 13 0 1-2 12-5 25-4 24-32 82-39 82-2 0-6-4-9-8zM5288 6128c-33-69-39-96-17-82 19 12 72 135 61 146-6 6-21-16-44-64zM9747 6194c-9-10 32-86 43-79 6 4 1 23-10 46-22 41-23 43-33 33zM8930 6170c-6-11-8-20-5-20s-2-11-11-25-14-28-10-32c3-3 1-12-5-19s-8-18-4-24c8-13 26-3 23 13-1 7 3 22 10 34s11 26 10 30 3 18 10 30c7 13 8 24 3 28-6 3-15-4-21-15zM2995 6150c-9-17-13-35-10-40s0-12-6-15c-6-4-8-18-5-30 3-13 2-27-4-30-13-8-13-72 0-80 14-9 19 10 24 80 3 52 15 99 31 126 3 4 1 10-4 14-6 3-17-8-26-25zM11073 6097c-19-24-23-36-14-41 5-3 16 5 25 19 16 24 6 45-11 22zM3895 6060c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM9805 6040c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM11007 5996c-21-31-6-43 18-16 13 14 15 24 8 31s-15 2-26-15zM5221 5996c-7-8-8-17-3-20 6-3 15 1 21 8 7 8 8 17 3 20-6 3-15-1-21-8zM8891 5987c-9-11-8-17 4-27s16-9 21 5c9 23-10 40-25 22zM3355 5950c-7-12 32-33 45-25 6 4 8 10 5 14-7 13-44 20-50 11zM5191 5946c-7-8-8-17-3-20 6-3 15 1 21 8 7 8 8 17 3 20-6 3-15-1-21-8zM2975 5930c-4-6-2-17 4-24s8-15 5-18c-3-4 4-25 16-48 15-29 25-39 32-32s2 24-14 53c-14 24-23 49-21 56 5 15-14 26-22 13zM8894 5926c-4-9-1-23 6-31s9-15 5-15-2-7 5-15 10-15 6-15 1-14 10-31c11-22 19-28 26-21s3 21-13 44c-13 18-23 34-21 36 1 1 1 5 1 10-1 4-1 14 0 24 3 22-18 33-25 14zM3425 5870c-4-6-2-17 4-24 7-9 7-16-1-24-9-9-9-15-1-23 14-14 32 16 27 45-4 26-20 41-29 26zM3891 5856c-7-8-8-17-3-20 6-3 15 1 21 8 7 8 8 17 3 20-6 3-15-1-21-8zM10885 5830c-13-14-15-24-8-31s15-2 26 15c21 31 6 43-18 16zM3885 5810c-3-5-4-10-1-10s-12-28-33-62c-35-58-44-87-20-73 11 8 60 90 63 107 1 7 5 18 9 25 4 6 3 14-2 17-5 4-12 2-16-4zM9337 5814c-3-4-2-16 4-26 8-15 14-17 22-9s7 15-4 26c-8 9-18 13-22 9zM9809 5806c-1-3-2-9-3-13-1-5-5-13-9-20-4-6-3-14 3-18 5-3 11-4 11-1 1 3 2 9 3 14 1 4 5 12 9 19 4 6 3 14-3 18-5 3-11 4-11 1zM3037 5794c-3-5 3-20 12-33 11-14 21-19 25-13 3 5-2 20-12 33-11 12-21 18-25 13zM8957 5784c-3-5 3-20 12-33 11-14 21-19 25-13 3 5-2 20-12 33-11 12-21 18-25 13zM3405 5770c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM5041 5746c-7-8-8-17-3-20 6-3 15 1 21 8 7 8 8 17 3 20-6 3-15-1-21-8zM3245 5741c-5-9 16-26 40-31 6-2 16-5 23-7 6-3 18-3 25 0 6 2 14 4 17 4 14-1 50 25 45 34-4 5-15 4-28-3-12-6-33-12-47-12s-35 6-47 12c-13 7-24 8-28 3zM10771 5706c-24-24-39-46-34-49 6-4 29 13 52 37 24 24 39 46 34 49-6 4-29-13-52-37zM9115 5711c-4-8-1-19 8-28 19-20 30-1 13 22-10 14-15 15-21 6zM9341 5702c-13-25 2-38 19-16 9 10 10 18 3 25-8 8-14 5-22-9zM3145 5671c-3-6 15-24 39-40 25-17 47-27 51-22 3 6-15 24-39 40-25 17-47 27-51 22zM9731 5656c-7-8-8-17-3-20 6-3 15 1 21 8 7 8 8 17 3 20-6 3-15-1-21-8zM4936 5631c-10-11-13-22-8-25s17 3 26 13c10 11 13 22 8 25s-17-3-26-13zM9095 5641c-3-5 7-18 22-29 44-30 51-33 57-23 3 5-12 20-34 35-21 14-42 22-45 17zM10677 5622c-10-10-14-21-11-25 9-9 55 23 48 34-8 14-19 11-37-9zM9662 5599c-23-17-40-35-37-40 4-5 26 5 51 22 24 16 42 34 39 40-8 11-3 13-53-22zM9195 5580c-7-12 32-33 45-25 6 4 8 10 5 14-7 13-44 20-50 11zM3635 5557c-10-8-14-16-9-19 14-9 56 11 49 22-8 13-18 13-40-3zM9576 5551c-4-6-13-8-20-5-8 3-17 1-20-5-4-6-13-8-20-5-17 7-30-12-16-21 6-4 17-2 24 4s16 8 19 4c4-3 12-1 19 5s16 11 21 11c8 1 11 11 4 17-3 3-8 1-11-5zM9355 5531c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM10471 5471c-14-11-19-21-13-25 5-3 20 2 33 12 29 24 11 36-20 13zM10347 5404c-38-20-24-38 14-19 16 9 27 20 24 25-7 12-4 13-38-6zM4631 5396c-7-8-8-17-3-20 6-3 15 1 21 8 7 8 8 17 3 20-6 3-15-1-21-8zM4527 5344c-26-14-45-29-42-34 4-6 28 1 56 15 27 14 47 30 44 35-7 12-1 14-58-16zM10185 5331c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM10113 5307c-33-12-42-34-12-30 33 4 70 23 64 33-7 12-11 12-52-3zM4415 5291c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM4336 5263c-4-5-12-9-17-9-5-1-11-3-14-4s-9-4-15-5c-5-1-12-4-15-5s-9-3-15-4c-5 0-10-4-10-8 0-8 4-9 15-7 3 1 10 3 15 4 6 1 12 4 15 5s10 4 15 5c6 1 12 4 15 5s10 3 15 4c10 1 15 14 8 22-3 2-8 1-12-3zM9925 5249c-4-5-13-8-20-5-17 6-40-20-26-28 5-4 13-1 16 5 4 5 13 8 20 5 17-6 40 20 26 28-5 4-13 1-16-5zM9831 5226c-7-8-8-17-3-20 6-3 15 1 21 8 7 8 8 17 3 20-6 3-15-1-21-8zM9775 5221c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM9725 5211c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM4125 5199c-4-5-14-8-22-5-18 7-45-12-37-25 3-5 14-5 25 1s23 9 28 6 14 1 20 8c8 9 8 16 2 20-5 4-13 1-16-5zM9655 5201c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM4015 5181c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM3935 5170c-8-13 20-24 41-16 20 8 9 26-16 26-10 0-22-5-25-10z"/></g><g fill="#fff" fill-rule="nonzero"><path d="M6340 9521c-51-14-78-198-44-310 10-34 30-69 54-95 34-36 41-39 53-26 29 31 52 374 28 419-12 22-42 26-91 12zM6547 9513c-4-3-7-61-8-127 0-67-4-147-8-180-7-58-7-60 34-115 57-77 109-119 174-137 85-25 94-16 93 88-2 103-24 265-47 333-26 77-58 112-117 130-54 16-110 20-121 8zM9485 9021c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM9835 9021c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM3205 9000c-8-12 20-24 35-15 6 3 8 11 5 16-8 12-32 12-40-1zM3435 9000c-8-12 20-24 35-15 6 3 8 11 5 16-8 12-32 12-40-1zM3575 8991c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM2955 8971c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM10146 8971c-4-5-2-12 4-16 5-3 10-3 10 1 0 3 6 1 14-5 10-8 16-9 21-1 3 5 4 11 1 11-3 1-9 2-13 3-5 1-13 5-20 9-6 4-14 3-17-2zM2865 8950c-4-6-10-8-15-5s-11 1-14-4c-4-5-2-12 3-15 5-4 12-2 16 4s10 8 15 5 11-1 14 4c4 5 2 12-3 15-5 4-12 2-16-4z"/><path d="M10215 8950c-3-5-4-11-1-11 16-4 26-7 31-9 3-1 8-3 13-4 4-1 16-7 27-14 18-12 16-13-15-8-222 34-456 48-590 35-486-44-989-312-1421-756-148-152-227-272-297-448-95-239-132-408-139-636-12-364 60-664 239-991 266-489 671-762 1338-905 122-26 219-33 260-20 8 3 60 12 115 22 407 67 713 215 990 476 66 62 122 118 124 124 2 5 18 26 34 45 74 85 188 276 246 413 86 205 126 358 150 567 6 52 13 120 17 150 19 157-15 462-76 699-54 206-163 451-284 636-180 275-529 595-639 587-16-2-26 2-22 7 3 6-4 15-15 21s-20 8-20 4c0-3-7-1-15 6s-15 9-15 5-6-2-14 4c-10 8-16 9-21 1zm-690-2585c104-36 189-115 240-220 67-139 72-290 15-412-31-67-84-128-131-149-84-40-111-47-185-51-155-9-308 52-423 167-108 108-145 204-129 337 19 162 135 289 307 335 82 22 232 19 306-7z"/><path d="M9180 5857c-34-17-70-74-70-111 0-102 126-166 203-103 66 53 64 175-4 209-41 20-95 22-129 5zM2795 8930c-4-6-10-8-15-5s-11 1-14-4c-4-5-2-12 3-15 5-4 12-2 16 4s10 8 15 5 11-1 14 4c4 5 2 12-3 15-5 4-12 2-16-4zM3939 8933c-1-4-1-11 0-15 0-5-5-8-11-8-7 0-62-5-123-10-259-25-523-109-764-245-270-151-574-409-738-625-132-174-249-480-294-765-17-111-15-367 5-495 77-495 344-961 695-1210 255-182 466-262 906-344 77-15 175-35 219-46 74-19 84-19 177-5 575 86 1030 422 1293 955 129 259 193 553 196 890 1 74-1 142-3 150-3 8-10 60-16 114-14 117-58 310-97 416-36 102-146 319-204 405-129 191-275 346-452 478-137 101-201 141-349 212-112 54-357 141-367 130-3-2-11 0-18 6-8 7-14 7-19-1-3-5-11-10-16-10-6 0-8 4-4 9 3 5 1 12-5 16-5 3-11 3-11-2zm-387-2464c108-23 182-79 258-196 68-103 91-194 86-344-2-98-7-124-29-171-36-79-99-144-177-182-60-29-73-31-170-31-83 0-119 5-171 23-88 30-166 78-229 142-144 143-174 304-88 474 35 70 98 155 114 156 7 0 18 10 27 23 32 50 195 114 294 116 18 1 56-4 85-10z"/><path d="M3264 5950c-67-27-95-122-53-181 40-57 102-73 165-43 85 40 87 186 3 221-35 15-83 16-115 3zM8975 8930c-4-6-10-8-15-5s-11 1-14-4c-4-5-2-12 3-15 5-4 12-2 16 4s10 8 15 5 11-1 14 4c4 5 2 12-3 15-5 4-12 2-16-4zM2675 8886c-11-8-14-16-8-19 6-4 18 0 28 7 11 8 14 16 8 19-6 4-18 0-28-7zM7760 7981c-11-23-16-42-10-46 5-3 18 12 30 34 11 23 16 42 10 46-5 3-18-12-30-34zM1789 7736c-1-3-2-9-3-13-1-5-5-14-10-21-4-7-5-16-2-19s1-12-5-19c-6-8-6-14 0-18 5-4 12-2 16 4 3 5 3 10-1 10-3 0-1 7 6 15 7 9 10 18 7 22-4 3-2 12 4 19 7 8 7 14-1 19-5 3-11 4-11 1zM1755 7620c-4-6-4-14-1-17s1-12-5-19-8-18-4-24c9-14 28-1 21 15-2 7 1 18 7 24 8 8 8 14 0 22s-13 8-18-1zM1735 7530c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM1725 7480c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM1715 7420c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM1724 6686c-4-10-2-22 4-28 8-8 13-7 18 6 4 10 2 22-4 28-8 8-13 7-18-6zM1735 6629c-4-6-3-15 3-21s8-16 6-23c-3-7-1-16 5-19 14-9 25 14 13 26-6 6-8 16-6 23 7 17-12 29-21 14zM1755 6540c-4-6-1-17 5-25 7-8 9-15 5-15s-2-6 4-13c6-8 8-17 5-20s-2-12 2-19c5-7 9-16 9-20 0-5 3-8 8-8h13c4 0 1 6-5 13-6 8-8 17-4 20 3 4 0 13-7 22-7 8-9 15-4 15 4 0 3 5-3 11s-9 17-7 24c7 16-12 29-21 15zM7727 6144c-9-10 52-126 63-119 6 3-3 32-20 66-32 61-33 63-43 53zM7797 6013c-4-6 0-18 7-28 8-11 16-14 19-8 4 6 0 18-7 28-8 11-16 14-19 8zM8365 5431c-3-6 3-15 14-21 12-6 22-6 26-1 3 6-3 15-14 21-12 6-22 6-26 1z"/></g><g fill="#ABC3D6" fill-rule="nonzero"><path d="M10950 10964c-49-25-101-48-260-116-14-6-33-14-42-19-10-5-23-9-30-9-7-1-31-9-53-20s-47-20-55-20-27-6-41-14c-30-15-155-56-389-126-14-5-50-15-80-23s-80-22-110-31c-30-8-86-23-125-31-38-9-106-25-150-36s-102-24-130-29c-27-5-69-13-92-19s-63-13-90-16c-26-4-68-11-93-17s-52-11-60-13c-8-1-28-5-45-9-33-7-76-14-145-22-25-3-61-9-80-14s-60-12-90-16c-30-3-64-8-75-9-40-7-111-16-145-20-19-2-53-7-75-10s-62-8-90-11c-56-6-121-13-180-20-22-2-62-6-90-9-27-2-75-7-105-10-101-10-191-17-385-30-378-25-573-30-1205-30-700 0-919 6-1540 40-70 4-199 13-295 20-33 2-91 7-130 9-38 3-93 8-122 11-28 2-80 7-115 10s-83 7-108 10c-25 2-72 7-105 10s-76 8-95 10c-49 5-138 15-180 20-19 2-57 6-85 10-27 3-66 8-85 10-54 6-157 20-300 40-19 3-51 7-70 10-40 6-96 14-125 19-11 2-65 11-120 20s-127 22-160 27c-33 6-85 15-115 20-135 21-569 118-735 165-27 7-58 15-69 16-24 4-42-24-31-48 4-11 8-124 7-252 0-128 3-234 7-236 4-3 6-60 5-128s1-127 4-133c4-5 7-64 8-130s3-122 5-125c1-3 4-39 6-80 1-41 5-120 8-175s7-134 8-175 6-81 11-88c4-8 5-42 1-77-4-44-3-65 5-70 9-5 10-27 5-72-5-44-3-68 5-78 7-9 9-22 5-32-10-23-6-75 7-90 6-7 7-21 3-30-9-22-6-72 6-94 5-10 4-20-3-27-8-8-8-15 2-27 11-14 17-11 51 22 21 21 39 41 39 45s18 26 39 50c125 137 166 178 177 178 7 0 25 16 40 35 14 19 31 35 36 35s21 12 36 26c35 34 211 134 236 134 3 0 29 11 58 24 29 14 67 27 83 31 17 4 41 10 55 15 36 11 119 29 165 35 22 3 63 9 90 13 28 4 154 7 280 7 202 0 278-4 375-19 14-2 48-7 75-10 47-6 209-42 285-64 19-6 62-18 95-27s64-20 69-26c6-5 16-9 24-9s30-7 50-16c21-8 51-21 67-28 140-58 377-194 443-255 18-17 36-31 40-31 15 0 292-265 292-280 0-5 13-18 30-30s30-28 30-36 7-17 15-20c8-4 15-12 15-20 0-7 6-17 13-21 38-23 148-210 221-378 7-16 25-55 39-85 34-70 59-142 52-148-3-3-1-10 4-16 10-12 40-122 46-167 2-16 6-32 9-37s8-31 11-58 8-65 10-84c11-84 14-146 14-315 1-169-2-230-13-315-3-19-7-55-10-79s-9-54-13-65c-4-12-7-25-8-31-3-38-18-96-26-101-5-3-7-9-4-13 6-11-51-184-80-241-13-25-46-92-74-150-27-58-75-140-105-183-31-43-56-81-56-85 0-5-13-22-30-38-16-16-30-34-30-40 0-7-16-24-35-38-19-15-35-33-35-39 0-16-112-127-127-127-6 0-21-13-33-30-12-16-28-30-36-30s-17-7-20-15c-4-8-13-15-20-15-8 0-17-7-20-15-4-8-11-15-18-15-6 0-21-11-33-24-13-13-37-31-55-41-18-9-55-30-83-45-52-30-63-35-155-78-161-74-393-138-575-159-140-16-568-8-657 12-13 2-41 7-63 10-106 13-190 29-234 46-15 7-28 6-37-2-14-11-9-33 5-24 5 2 16-4 26-15s14-20 9-20c-4 0 12-20 36-45 24-24 47-42 51-40 8 5 35-25 32-34-2-3 1-6 7-6 5 0 17-10 25-23 9-12 20-20 25-17s17-6 26-20 21-25 28-25c6 0 17-9 24-21s16-19 18-16c3 2 18-9 34-25 17-16 34-27 39-24s12-1 15-10c3-8 11-12 16-9 6 4 20-5 32-20 11-14 22-24 24-22 3 2 19-9 35-24 17-16 36-29 41-29s23-9 39-21c16-11 38-21 49-22s22-7 24-14c5-12 134-78 247-127 55-23 93-40 142-61 21-9 41-14 45-11 3 3 14-1 24-11 10-9 21-13 25-10 3 4 12 2 20-4 7-6 13-8 13-4s7 2 15-5 15-9 15-5c0 5 8 1 18-7 9-9 42-23 72-32 150-45 197-60 217-69 12-5 28-7 37-4 8 3 20-1 27-9 7-9 23-14 36-11 13 2 26 0 29-5 3-4 10-6 15-2 5 3 16 0 24-6 20-16 117-41 137-34 9 2 19 0 23-6 3-6 11-8 16-4 5 3 17 0 25-7 8-6 17-9 21-6 3 4 14 2 25-4s34-12 51-15c18-2 56-9 85-15 52-10 74-14 162-25 108-13 170-20 259-29 30-3 58-8 62-11 4-2 11 0 14 6 4 7 11 7 18 2 18-14 67-21 73-10 3 5 12 4 19-2 9-7 27-9 45-5 20 4 36 2 47-7s41-12 91-11c42 1 80-1 86-5 21-14 776-24 792-11 6 5 42 9 80 9 116 0 198 5 217 14 9 4 33 5 53 2 22-5 41-3 50 5 8 7 27 9 50 5 21-5 41-3 49 4s15 7 19 1c7-10 44-4 63 11 7 5 14 5 18-2 3-6 10-8 14-5 5 2 26 7 47 10 81 10 101 13 162 25 35 6 75 13 90 15 29 4 205 42 237 51 11 3 27 6 35 6s20 5 27 10 17 7 22 4c5-4 13-1 16 5 4 5 13 8 21 5 7-3 16-1 20 5 3 6 12 8 20 5 7-3 16-1 20 5 3 6 12 8 20 5 7-3 16-1 19 4s12 7 19 4c8-3 17-1 20 5 4 6 13 8 21 5 7-3 24 0 37 7s30 13 38 14c24 1 143 38 215 66 17 7 37 13 45 14 30 3 95 28 111 41 9 8 19 11 22 7 4-3 15 1 25 10 10 10 21 14 24 11 6-6 53 12 111 42 16 8 33 14 39 14 5 0 22 9 38 20 15 11 30 16 34 13 3-4 20 4 37 16s42 25 57 27c14 3 65 26 112 51s105 56 130 69c25 12 54 32 64 43s24 17 31 15c7-3 20 4 28 16 9 12 20 19 26 16 6-4 16 2 22 13 7 10 18 17 24 15 7-3 26 8 43 25 18 16 32 27 32 25s18 8 40 22c22 15 40 31 40 36s5 6 10 3c6-3 13 1 16 9 3 9 9 14 14 11 10-6 86 51 94 71 3 8 10 13 15 9 6-3 15 4 21 15s15 18 20 15 17 6 26 20c9 13 20 23 24 20 5-3 16 5 25 17 8 13 20 23 25 23 6 0 10 5 10 10 0 11-49 11-115 0-85-13-102-15-175-22-98-10-407-9-490 0-36 4-85 10-110 13-98 11-324 73-430 116-14 6-34 14-45 18-37 15-170 81-210 105-22 13-55 31-73 41-18 9-42 27-55 40-12 13-27 24-33 24-7 0-14 7-18 15-3 8-12 15-20 15-9 0-20 9-26 20s-17 20-25 20-26 16-41 35c-14 19-38 41-53 48-14 7-32 24-39 40-7 15-31 41-53 59-21 17-39 37-39 45 0 7-9 18-20 25s-20 17-20 22-7 16-15 25c-27 28-85 106-85 114 0 5-10 23-23 40-42 61-37 50-143 272-33 67-85 210-82 223 1 4-4 20-10 35-7 16-10 32-7 37s1 11-4 15c-5 3-10 13-10 23-1 29-7 57-15 70-4 6-5 16-2 20s0 26-5 48c-9 36-13 55-23 109-2 11-6 27-9 35-24 64-31 193-31 585v420l28 105c83 306 232 557 462 780 172 166 342 285 576 402 587 293 1245 367 1768 197 193-63 366-159 520-291 65-56 160-172 160-196 0-5 21-28 46-51 33-32 48-41 56-33s8 15-2 27-10 21-2 38c14 29 21 87 10 93-12 7-10 52 3 59 7 5 8 34 4 90-5 59-4 85 5 90 8 5 10 34 5 105-6 71-4 99 5 105 8 5 10 38 5 125-4 65-3 124 1 132 10 14 16 259 14 588-1 150 3 221 11 237 9 16 9 26 1 35-7 10-8 47 0 128 5 63 7 172 4 242-4 80-2 129 4 133 12 7 14 62 3 68-5 2-28-7-53-19zM6628 9724c28-6 30-8 16-19-13-9-14-14-5-19 16-10 44 1 36 14-3 5 1 10 10 10s15-6 13-14 2-14 7-13c6 1 9 5 8 9-2 4 4 5 12 2 8-4 13-10 10-14-8-13 25-28 47-22 10 2 18 0 16-5-2-6 20-29 47-52 28-23 50-46 50-52 0-5 6-13 13-18 7-4 15-17 17-27s4-19 5-19 3-9 4-20c5-34 38-129 51-145 19-24 27-41 18-38-4 2-8-1-8-7 0-5 5-9 10-8 6 2 21-17 33-41 36-67 88-111 163-135 87-29 138-63 177-120 42-61 40-69-5-32-37 29-113 66-113 54 0-3-7 0-15 7-9 7-18 10-22 7-3-4-12-2-19 4-17 14-48 4-39-12 4-6 16-9 26-6s22 1 25-4 11-8 17-7c22 5 138-65 165-99 15-19 37-45 50-60 13-14 21-28 18-31-4-3 1-14 11-24 9-10 13-18 8-18-4 0-1-10 7-22 12-18 14-50 12-138-2-94-7-159-13-177-1-2-1-6-2-10 0-5-7-15-15-24s-12-23-9-31c4-9-6-30-23-49-35-41-76-109-66-109 3 0-5-9-19-21-15-11-26-23-24-27 1-4-2-8-8-10-17-5-74-65-72-76 1-5-2-10-8-11-5 0-26-12-46-28-20-15-39-27-44-27-4 0-23-14-42-31s-41-28-49-25c-18 7-28-12-26-46 1-14-2-30-8-33-6-4-8-10-5-15 15-24-87-180-117-180-6 0-21-9-33-20-12-12-35-23-50-26s-44-12-64-21-41-15-47-14c-7 1-25-4-40-10-16-7-53-13-82-14-29-2-59-8-66-14s-16-8-20-4c-8 9-131 7-146-2-6-4-17-1-25 5-8 7-24 10-35 7s-33 1-48 9c-16 7-46 15-68 17s-50 9-63 16c-12 7-25 10-29 7-3-3-13 1-22 9-10 9-21 15-26 14-20-3-34 2-64 27-17 15-33 24-37 21-3-4-14 4-24 16s-18 18-19 13c0-5-11 1-25 14-13 12-22 27-19 32 3 4-2 11-10 14-9 3-13 10-10 15s-2 12-11 15c-9 4-14 12-11 19 2 7-1 23-8 37-15 28-17 88-4 105s-13 63-54 93c-18 13-34 22-34 20-1-3-20 18-43 45-23 28-47 50-54 50-6 1-11 6-10 13 2 6-6 16-17 22s-18 15-15 21c4 5-1 12-9 15-9 3-13 10-10 15s-2 12-10 15c-9 3-14 10-11 14 6 9-41 106-55 115-6 4-8 11-4 16 3 6-2 19-12 30-9 10-14 19-10 19s4 5 0 12c-4 6-8 24-9 40-2 15-8 34-14 42-7 8-9 25-6 39 4 14 2 28-4 31-14 9-14 93 0 101 6 4 8 13 5 21-3 7 0 16 5 20 6 3 9 15 6 25s1 23 9 30c8 6 14 19 14 29 0 29 60 108 110 145 60 44 130 76 175 78 42 3 67 23 41 33-29 11-134-27-203-73l-65-44 44 62c52 75 87 98 197 134 69 23 93 36 128 72 35 37 43 41 43 25 0-27 15-35 30-18 14 18-5 60-23 50-7-4-9-4-5 0 3 4 10 8 15 8 15 0 32 19 27 32-3 7 1 26 8 42 6 16 12 34 13 40 0 6 5 18 11 25 6 8 25 39 43 70 33 60 68 92 139 128 28 14 40 26 35 34-4 7 0 7 10-2 16-13 22-8 18 13-1 5 5 3 14-4 16-13 30-7 30 13 0 5 6 12 13 15 7 2 11-2 10-10-2-7 4-13 12-13s15 7 15 15c0 10 12 16 39 18 22 2 36-1 32-6-3-5 0-15 8-21 10-8 16-8 25 3 10 11 8 17-6 26s1 10 67 6c47-3 100-8 118-12z"/><path d="M6545 9711c-10-17 31-33 44-17 6 7 8 16 4 19-10 10-41 8-48-2zM6995 9220c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM5927 9204c-4-4-7-28-7-54 0-25-5-51-10-56-8-8-6-15 4-23 24-20 50 29 43 80-6 43-18 64-30 53zM5815 9100c-3-5 0-13 9-16 21-8 61-1 61 11 0 14-62 19-70 5zM7004 9090c-6-6-7-31-4-57 6-53 22-64 55-38 20 14 20 15-2 21-18 5-23 14-23 40 0 35-11 49-26 34zM9835 9221c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM8031 8646c-7-8-8-17-3-20 6-3 15 1 21 8 7 8 8 17 3 20-6 3-15-1-21-8zM7530 7981c-11-23-16-42-10-46 5-3 18 12 30 34 11 23 16 42 10 46-5 3-18-12-30-34zM7429 7736c-4-16-7-26-9-31-1-3-3-8-5-12-1-5-7-21-14-37-6-16-9-31-6-34 2-3 0-11-7-19-6-7-8-16-5-20 4-3 2-12-4-19s-8-18-4-24c9-14 28-1 21 16-3 7-1 16 5 19 5 4 9 12 8 18-1 7 3 25 10 41 6 16 9 31 6 34-2 3 0 11 6 19 6 7 8 13 4 13s-2 6 4 14c8 10 9 16 1 21-5 3-11 4-11 1zM7365 7510c-4-6-3-16 3-22s12-6 17 2c4 6 3 16-3 22s-12 6-17-2zM3295 5960c-3-5-2-10 2-12 13-7 33-3 36 6 3 12-31 17-38 6zM9225 5871c-7-12 12-24 25-16 11 7 4 25-10 25-5 0-11-4-15-9zM3188 5853c-7-14-3-33 6-33 12-1 17 28 6 35-5 3-10 2-12-2zM3255 5730c-7-12 32-33 45-25 6 4 8 10 5 14-7 13-44 20-50 11zM10477 5244c-4-4 7-25 24-48l30-41-41-13c-51-17-108-74-116-116-3-18-4-50-2-71l3-40 86-1c110-1 121-5 117-45-2-18-10-35-18-39-29-15-125-28-135-19-15 15-121 11-134-5-19-22 1-28 88-25 73 3 81 1 110-24l33-27h-64c-77 0-124-12-155-41-12-13-24-21-26-18-2 2-16 28-31 57-21 41-24 57-16 67 9 10 7 16-8 24s-23 7-30-2c-8-9 1-36 33-99 24-47 41-89 38-92s0-13 7-22c8-8 14-23 15-32 1-10 9-38 19-64 21-54 16-92-15-109-29-15-74 17-74 54-1 14-7 32-14 41s-10 16-6 16 2 7-5 15-9 15-5 15 2 6-4 13c-6 8-8 17-5 20 4 4-2 19-12 34s-19 33-19 38c-1 20-123 213-146 232-12 10-30 0-99-55-47-36-125-95-174-130-50-34-91-70-92-78-2-15 104-153 180-232 51-54 199-172 216-172 7 0 27-9 45-20s45-21 62-23c16-2 34-7 41-11s16-5 21-1c5 3 12 1 16-5s22-7 44-4c24 4 41 2 45-5 9-14 63-14 72 0 4 7 21 9 40 6s36-1 40 4c3 5 14 7 24 4 44-14 206 90 214 137 1 7 14 26 28 41 32 34 60 111 52 142-3 13-1 26 5 29 14 9 14 123 0 132-6 3-8 17-5 29 3 13 1 27-4 30-6 4-8 15-5 25 3 11 0 30-7 42-7 13-13 26-14 31-1 4-2 8-3 10-2 1-4 13-6 27-5 33-102 222-123 238-9 6-12 12-6 12 5 0 1 7-9 14-10 8-16 18-15 22 3 8-88 134-96 134-1 0-6-3-9-6zm-417-496l31-58h-35c-42 0-92-39-112-87-29-69-8-182 56-300 15-29 25-53 20-53-12 0-78 47-138 98-30 26-94 96-143 156l-88 109 82 56c45 31 120 87 167 124l85 67 22-27c13-16 37-54 53-85zM2457 5175c-119-99-216-235-275-390-43-111-45-119-43-129 1-4-4-14-10-22-8-10-8-18-1-27 7-8 6-18-4-31-19-27-18-125 1-153 9-12 11-24 6-27-19-12 76-216 100-216 6 0 8-4 4-9-6-10 62-70 69-61 2 3 13-3 24-13s23-17 28-16 11 0 14-1 12-3 20-6c121-32 239-31 330 3 8 4 21 5 28 4s26 9 43 23c29 24 43 30 62 27 15-3 126 81 124 93-1 6 3 10 9 9 12-2 83 67 84 82 0 6 4 10 10 10 12 0 41 41 34 48-3 3 4 10 15 17 12 6 19 15 16 21-4 5-2 9 4 9 5 0 32 34 60 75 45 66 49 76 34 82-25 9-123 85-215 165-83 73-86 74-108 3-7-22-15-44-18-50-7-11-11-34-15-85-2-19-9-44-15-56-8-14-8-24-1-31 8-8 7-13 0-17-6-4-11-16-11-26s-12-28-27-39c-23-19-29-20-47-7-14 9-21 25-22 49-1 19-4 42-7 50-3 9 0 21 8 27s11 18 9 25c-3 8-2 19 2 26s8 28 10 47c2 18 8 40 14 48 26 30-3 32-50 3-27-16-77-41-111-54-34-14-71-34-81-45s-23-21-28-21c-20-3-25-4-36-11-6-4-26 6-45 22-28 23-32 32-23 47 5 10 76 52 155 93 126 65 248 144 265 171 3 5-23 41-58 81s-85 101-112 135c-27 35-53 60-57 57-5-3-6-11-2-17 14-24 161-203 182-221 20-18 20-20 4-39-33-36-133-98-246-151s-172-101-161-130c3-8-16-34-45-61-63-59-97-127-120-241l-18-89-20 45c-11 25-24 61-28 80s-9 39-12 43c-6 10-6 177 0 197 3 8 12 44 22 80 50 195 184 402 321 496 29 20 51 41 48 45-9 15-19 10-87-46zm576-468c40-34 98-82 129-106l58-43-18-30c-30-52-39-53-62-8-40 78-111 78-183 2-24-27-48-58-51-70-4-12-12-22-17-22-10 0-6 64 6 91 3 10 5 23 4 30-1 8 1 21 4 29 6 16 47 176 47 185 0 12 15 2 83-58zm-279-59c-4-18-8-49-9-68l-3-35h-70c-39 0-73 3-77 7-14 14 39 70 93 98 32 16 61 29 65 30 5 0 5-15 1-32z"/><path d="M10177 5064c-89-84-96-94-78-103 11-6 28-12 38-14 10-1 23-6 30-10 6-4 14-3 18 3 3 5 4 11 1 11-3 1-9 2-13 3-5 1-17 7-28 13-19 11-15 18 64 96 45 47 79 87 75 90-5 3-53-37-107-89z"/></g><path d="M1707 13891l-25-30-7-733c-7-757 0-3225 10-3358 3-41 12-205 21-365 17-331 36-594 65-910l20-219-20-36c-11-20-43-90-71-155-28-66-55-124-60-130-22-27-112-388-126-508-4-32-11-60-15-63-12-7-11-590 0-628 6-17 19-83 31-147 36-201 91-368 175-539 42-85 83-162 91-170s40-52 72-97c110-158 261-317 402-423 25-18 49-37 54-41s-35-55-87-112c-115-126-155-187-218-329-69-155-93-258-93-398 0-134 16-205 71-315 45-91 150-209 219-247 179-97 489-96 685 3 156 78 315 228 449 421 48 70 55 76 74 66 12-6 72-40 133-75 112-64 448-214 566-252 585-191 797-237 1442-312 399-46 512-51 940-46 513 7 793 35 1265 128 257 50 374 79 570 141 85 27 184 57 220 68 74 21 446 175 530 219 244 126 309 161 340 179l35 21 51-62c29-34 75-90 103-124 375-454 986-499 1257-91 118 177 136 388 53 630-40 117-117 271-190 379-33 49-62 95-65 102-3 8 18 29 51 51 81 56 204 170 282 261 37 44 73 85 80 90 32 27 182 262 225 355 27 58 58 121 68 141 25 48 93 300 115 424 9 55 21 110 26 123 12 29 12 615 0 628-4 5-14 49-20 99-7 49-28 150-48 225-19 74-39 153-45 175-5 22-15 49-23 61-7 12-34 70-59 130-51 121-73 161-160 294l-58 91 16 227c33 474 51 909 61 1512 3 184 10 551 16 815 16 702 7 2460-14 2667-16 162-24 190-57 208-13 7-1531 10-4708 10H1732l-25-29zm9278-3153c-3-123-7-371-10-553-9-543-26-1047-50-1409-3-38-6-70-7-72-2-1-51 43-110 99-164 155-225 200-358 263-78 36-88 41-150 60-30 9-59 19-65 22-5 3-20 7-33 8-14 2-32 6-41 10-22 9-47 14-196 36-56 8-171 12-305 11-241-2-268-4-430-33-63-12-124-22-135-24-12-1-25-5-30-8-9-5-70-19-100-23-5-1-23-7-39-14-16-6-31-10-33-7-5 5-110-30-127-42-6-5-33-17-61-27-96-34-255-110-330-157-136-85-221-145-267-187-28-25-60-53-72-61-32-22-153-148-211-221-27-34-58-69-67-78-10-8-18-20-18-27 0-6-10-19-21-30-12-10-25-28-30-39s-22-40-38-65c-28-44-123-229-154-300-34-79-67-169-67-184 0-9-4-24-9-34-5-9-17-55-27-102-9-47-21-89-25-94s-5-15-2-22c3-8 2-22-2-31-4-10-9-29-10-43-2-14-6-45-10-70-7-49-9-455-2-532 3-25 7-51 11-56 3-6 6-21 6-33-1-139 142-555 250-729 6-8 21-35 34-60 51-94 220-294 351-415 102-93 317-239 433-292 75-34 93-42 157-68 44-18 165-57 205-66 19-4 53-12 75-18s69-13 105-17c36-3 68-8 71-10 11-6 193-18 289-18 174 0 320 13 480 44 25 5 46 8 47 7 2-3-137-114-207-164-97-70-148-104-238-159-133-80-148-88-352-189-210-104-232-114-300-140-25-9-58-22-75-30-62-26-138-55-147-55-5 0-29-9-53-20s-68-26-97-34-82-24-118-36c-83-27-105-33-450-115-36-9-94-21-130-26-36-6-87-15-115-19-27-5-85-13-128-19-42-5-81-12-85-15-4-2-41-7-82-11s-86-9-100-10c-29-4-153-15-220-21-240-19-671-23-940-10-85 4-164 8-175 8-11 1-38 4-60 9-22 4-67 11-100 14-33 4-73 8-90 10-27 3-52 6-175 20-19 2-69 7-110 10-41 4-90 10-109 15s-37 8-40 6-40 2-81 10-90 16-107 19c-18 3-59 12-90 20-32 8-96 24-143 35-74 18-198 52-295 81-339 100-696 251-902 382-24 15-46 27-51 27s-21 14-37 30c-16 17-35 30-43 30-17 0-176 117-233 171-19 19-53 50-75 70-21 20-59 57-83 82l-45 47 35-11c19-6 54-15 79-19 25-5 77-16 115-24 194-43 610-54 810-22 303 49 553 142 785 294 183 120 326 253 450 417 41 55 79 103 84 106 12 10 55 86 126 229 86 173 83 166 109 250 13 41 27 84 32 95 4 11 13 48 20 83 6 34 16 65 21 68 4 3 6 10 2 15-3 6-3 18 1 27 9 20 10 26 30 177 8 65 10 457 1 515-3 25-9 63-12 85s-7 49-9 60c-1 11-6 28-10 38s-5 21-1 24c3 3 2 11-3 17s-21 62-36 125c-14 62-30 121-35 130-4 9-16 36-26 61-27 68-107 241-141 305-9 17-31 51-49 76-19 26-34 51-34 56s-8 16-17 25c-10 8-40 46-68 83-51 68-257 280-337 346-98 81-259 182-403 252-44 22-88 43-97 48-21 11-63 26-173 63-44 15-88 31-97 37-10 5-29 9-42 9-14 0-28 5-31 10-3 6-19 10-34 10s-31 3-35 7-20 8-36 9-37 5-47 9c-10 5-25 7-35 6-9-1-19 3-22 8-4 6-13 8-21 4-8-3-23-2-32 2-10 4-29 9-43 10-14 2-43 6-65 8-125 15-186 19-340 18-187 0-240-4-360-26-44-8-100-18-125-21-25-4-49-10-55-14-5-4-26-10-46-13-32-5-102-33-209-85-137-67-282-184-435-352-37-41-82-91-100-110s-35-42-38-50-6 8-8 35c-1 28-3 61-4 75-14 150-21 235-40 550-21 330-44 940-49 1307-3 200-3 201 18 193 12-4 41-13 66-20s56-16 70-21c27-10 224-55 304-69 26-5 62-14 80-19 32-10 191-41 311-61 39-6 86-15 105-20s85-16 145-25c61-9 135-20 165-25 242-38 544-75 895-110 110-11 214-22 230-25 17-2 73-7 125-10s113-7 135-10c22-2 83-6 135-10 52-3 127-8 165-10 146-10 234-15 350-20 66-3 156-8 200-10 529-27 1521-27 2030 0 311 16 691 48 905 74 47 6 105 13 130 16 167 18 355 44 410 56 25 5 74 13 110 18 193 28 628 115 775 156 28 8 73 19 100 25 28 6 73 17 100 25 28 8 70 19 95 26 122 31 532 168 620 206 19 8 46 20 60 25 47 19 157 67 230 101 19 8 38 16 42 16 4 1 5-99 3-221zM9890 9015c25-3 59-5 77-5s34-4 37-9c4-5 15-7 25-4s22 0 25-6c4-5 13-8 21-4 9 3 21 1 28-5s31-13 53-16c98-11 268-89 373-169 58-44 262-246 321-317 42-50 138-187 151-215 5-11 23-42 39-70 33-56 86-161 123-245 28-63 87-242 87-263 0-8 9-41 19-74 11-33 22-81 24-106 3-25 7-49 10-54 27-43 27-673 0-716-5-9-8-23-18-97-4-25-11-50-16-56s-7-13-4-16c5-4-46-174-65-215-5-13-15-35-21-50-39-98-61-145-94-198-13-22-27-47-31-55s-18-29-31-46-23-34-23-38c0-16-113-156-187-231-110-112-163-156-278-234-127-85-340-191-382-191-11 0-23-4-29-9-11-11-163-55-259-75-62-13-93-18-195-32-190-25-525-24-680 2-360 61-672 218-910 458-144 144-167 170-225 258-57 84-88 137-116 198-11 25-33 72-48 105-40 84-90 229-96 276-3 22-9 48-14 57-16 30-42 212-50 344-13 206 8 447 55 633 34 137 59 201 158 415 96 207 259 407 498 613 72 62 241 167 378 235 139 69 390 160 456 166 17 2 36 6 42 10s27 8 45 10c19 2 39 6 45 10 5 3 17 3 26 0s22-2 29 4c6 6 23 11 37 11 14 1 43 3 65 6s73 7 114 10c40 2 76 7 80 10 6 7 245-1 331-10zm-6270-30c25-2 59-5 77-5s35-4 38-10c3-5 12-7 20-3 8 3 23 2 33-2 9-5 24-7 34-6 9 1 19-3 23-9 3-6 10-8 15-5 17 10 287-66 380-107 55-25 298-145 324-161 147-89 248-168 366-286 188-189 289-339 405-606 7-16 22-50 34-75 21-48 68-203 76-254 3-17 12-67 20-111s18-129 21-190c3-60 7-116 10-123 6-20-15-304-27-364-6-29-12-60-13-68-11-75-20-111-27-116-5-3-7-9-4-14 12-20-61-214-146-385-43-87-45-91-103-180-120-182-304-368-466-469-36-23-74-47-85-53-25-16-162-83-192-94-13-5-33-14-45-19-40-18-190-61-277-80-145-32-249-40-476-36-296 5-487 37-745 123-99 33-133 47-205 85-16 9-52 27-80 41-180 89-454 339-582 532-22 33-43 67-47 75s-18 33-31 55c-92 150-177 381-214 579-10 55-19 108-19 116-1 8-5 47-11 85-11 78-8 486 4 504 4 7 8 27 10 44 12 123 63 329 119 474 25 65 122 263 175 356 55 98 142 215 204 275 15 14 27 31 27 38 0 18 214 214 282 257 64 42 73 47 128 76 65 34 248 94 265 87 7-2 16-1 21 4 11 9 142 33 152 27 4-3 16-1 27 3 21 8 430 5 505-5zm6982-3913c18-30 107-206 119-237 7-19 18-54 39-130 18-65 22-146 9-212-7-38-16-72-21-78-4-5-8-17-8-26 0-26-83-131-132-165-63-46-149-71-243-73-81-1-228 20-262 38-10 5-37 19-60 30-58 28-179 120-229 172-40 44-93 107-150 182l-32 40 49 36c27 20 86 63 130 96 45 33 103 77 128 99l45 39 28-34c16-19 37-50 47-69 101-192 117-228 127-278 4-18 11-35 15-38 5-3 9-12 9-21 0-24 40-63 63-63 30 0 57 29 57 61 0 27-50 191-69 226-5 10-23 45-39 78l-29 60 182-4c175-3 184-2 204 18 27 27 27 63 0 87-19 17-38 19-188 20-166 0-236 10-275 39-18 14-14 19 65 94 46 44 106 90 133 103s76 37 110 53l61 30 50-73c28-40 57-85 67-100zm-7999 115c16-8 50-44 77-79 26-34 72-90 103-123 48-52 53-62 42-77-22-33-122-96-248-157-141-69-171-95-161-135 3-15 19-33 34-41 26-13 34-10 182 64l154 77-8-55c-5-31-13-69-18-86-5-16-12-49-15-73-6-37-4-47 16-68 53-56 95-20 120 103 31 154 48 222 61 242 13 21 26 10 187-136 20-18 39-33 43-33 3 0 20-11 37-25l30-26-27-42c-145-226-328-386-492-429-102-27-170-30-292-13-179 25-301 204-294 432 6 193 78 376 210 541 61 76 95 109 149 145 40 27 48 27 110-6z" fill="#1F1E1E" fill-rule="nonzero"/><path d="M6503.125 10585.632l990.24 575.294v1133.004l-990.24 562.085-988.616-562.085v-1133.004l988.615-575.294z" fill="#FF4088"/><path d="M7538.553 11115.914l16.43 28.546v1166.1l-16.736 28.747-1018.867 578.328-32.557-.01-1017.21-578.342-16.712-28.734v-1166.08l16.41-28.52 1017.184-591.926 33.215-.012 1018.843 591.902zm-1962.424 80.44v1061.738l927.018 527.058 928.607-527.094v-1061.668l-928.607-539.48-927.02 539.445z" fill="#C9177E"/><path d="M6983.914 12383.762h-269.956v-554.212h-470.042v554.212H5973.96v-1310.855h269.956v547.914h470.042v-547.913h269.956v1310.855z" fill="#fff" fill-rule="nonzero"/><path d="M6335 9704c-60-9-155-46-197-76-127-89-178-206-194-443l-7-100-86-2c-173-4-290-62-380-191-58-84-74-255-37-402 18-71 73-192 117-256 54-80 185-214 237-243 10-6 11-16 1-52-19-71 8-146 79-218s122-102 237-139c98-32 139-42 188-47 17-1 57-6 89-10s85-2 125 4c37 6 84 13 103 16 55 7 168 34 187 44 10 5 32 15 48 22 60 27 106 63 141 110 38 52 69 139 60 173-4 17 3 25 37 40 124 58 280 206 354 337 54 95 85 216 85 325-1 129-41 223-132 308-79 73-172 104-293 99l-89-3 3 32c3 28-5 141-16 228-6 52-36 185-44 195-5 5-11 22-15 37-9 40-112 146-164 169-25 12-73 25-106 30-72 11-288 19-331 13zm90-204c9-32-5-320-20-385-2-12-7-54-10-95-4-41-7-76-9-77-3-4-150 39-211 60l-40 14 2 120c3 230 54 333 181 367 61 17 101 15 107-4zm271-15c74-31 105-139 120-416l6-116-64-13c-34-6-105-13-156-14l-94-3 6 41c3 23 8 73 12 111 3 39 12 127 20 197 8 71 11 153 8 183l-7 55 58-5c31-3 73-12 91-20zm-606-652c178-63 288-91 379-99 36-3 68-7 71-9 13-8 246 26 340 50 52 13 126 29 164 35 131 21 219-17 267-116 18-39 21-58 17-127-4-75-11-100-47-177-32-68-106-165-153-200-64-48-103-73-134-86s-32-12-73 36c-177 210-480 280-751 173-74-29-153-78-221-134l-45-38-58 45c-106 84-202 243-233 387-36 174 28 286 180 317 67 13 132 0 297-57zm430-674c86-14 189-69 245-131 47-53 85-122 85-156 0-90-286-170-508-143-171 21-330 88-353 148-33 85 150 238 332 278 79 17 117 18 199 4z" fill="#1F1E1E" fill-rule="nonzero"/><path d="M6709 7994c-8-9-21-35-29-58-11-27-29-50-58-69-48-32-57-69-21-87 29-16 62-6 104 32 67 59 95 147 57 181-23 21-36 21-53 1zM9250 6386c-83-15-147-46-210-103-69-62-103-117-127-204-29-107-15-193 50-304 23-39 63.83-93 132.83-145 94-69 149.37-83.97 261.17-109 67-15 85.5 0 145 0 174 30 300 161 329 338 12 75 5 133-27 214-46 116-96 186-178 246-63 46-93 58-176 71-79 12-116 12-200-4zm31-530c46-19 69-46 76-90 12-76-41-136-121-136-123 0-160 169-49 221 48 22 53 22 94 5zM3375 6473c-32-6-80-22-105-34-62-31-166-115-183-147-7.99-14.98-37.9-40.91-56.91-74.83-.03-.05-.06-.11-.09-.16-19-33-37-62.86-46-103.86-17-72-15.03-117.86 5-196.15 11-43 30-91 41-107 11-15 20-31 20-34 0-4 24-31 53-62 56-60 114-103 174-129 21-9 47-21 58-26 43-21 183-36 242-27 64 9 166 55 213 95 39 33 97 151 111 228 15.98 87.91 3.03 231.71-29.9 319.74-.03.08-.07.17-.1.26-53 144-193 278-313 300-60 11-119 11-183-2zm-5-533c51-26 70-55 70-108 0-38-5-49-37-78-31-29-44-34-86-34s-54 5-83 34c-26 26-34 43-34 69 0 58 25 103 67 120 50 21 57 21 103-3z" fill="#1F1E1E" fill-rule="nonzero"/></svg>
\ No newline at end of file diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/svg/godoc-icon.html b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/svg/godoc-icon.html new file mode 100644 index 000000000..1a6b82159 --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/svg/godoc-icon.html @@ -0,0 +1,35 @@ +<svg id="godoc-icon" class="svg-icon" width="100%" height="100%" viewBox="0 0 216 216" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:1.41421;"> + <g transform="matrix(1,0,0,1,-1.76591,-3.82727)"> + <path d="M207.3,44.6C200.6,30.9 184.4,43 180.3,38.7C159.3,17.1 133.9,11.7 114,10.7L103,10.7C83,11.2 57.6,17 36.7,38.7C32.6,43 16.3,30.9 9.7,44.6C2,60.6 25.4,62.2 24.2,69.3C21.9,82.1 23.4,101.1 25.2,119.8C28,151.5 4.3,227.4 53.6,257.9C62.9,263.7 88,266.9 109.8,267.4L110,267.4C131.8,266.9 153.9,263.7 163.2,257.9C212.6,227.4 188.9,151.5 191.8,119.8C193.5,101.1 195,82.1 192.8,69.3C191.6,62.2 215,60.5 207.3,44.6Z" style="fill:rgb(140,197,231);fill-rule:nonzero;"/> + </g> + <g transform="matrix(1,0,0,1,-1.76591,-3.82727)"> + <path d="M143.2,54.3C109.8,58.2 114.3,93 127.2,104.3C151.2,125.3 176.2,104.3 173.4,83.1C170.9,62.7 153.6,53.1 143.2,54.3Z" style="fill:rgb(224,222,220);fill-rule:nonzero;"/> + </g> + <g transform="matrix(1,0,0,1,-1.76591,-3.82727)"> + <path d="M145.5,72.9C151.792,72.9 156.9,78.008 156.9,84.3C156.9,90.592 151.792,95.7 145.5,95.7C139.208,95.7 134.1,90.592 134.1,84.3C134.1,78.008 139.208,72.9 145.5,72.9ZM71.356,72.746C77.648,72.746 82.756,77.854 82.756,84.146C82.756,90.438 77.648,95.546 71.356,95.546C65.064,95.546 59.956,90.438 59.956,84.146C59.956,77.854 65.064,72.746 71.356,72.746Z" style="fill:rgb(17,18,18);"/> + </g> + <g transform="matrix(1,0,0,1,-1.76591,-3.82727)"> + <path d="M142.5,75.8C144.487,75.8 146.1,77.413 146.1,79.4C146.1,81.387 144.487,83 142.5,83C140.513,83 138.9,81.387 138.9,79.4C138.9,77.413 140.513,75.8 142.5,75.8ZM74.274,75.192C76.261,75.192 77.874,76.805 77.874,78.792C77.874,80.779 76.261,82.392 74.274,82.392C72.287,82.392 70.674,80.779 70.674,78.792C70.674,76.805 72.287,75.192 74.274,75.192Z" style="fill:white;"/> + </g> + <g transform="matrix(1,0,0,1,-1.76591,-3.82727)"> + <path d="M108.5,107C92.5,109.4 86.8,114 88,121.2C90,133 127.7,131.7 128.9,121.8C129.9,113.3 114.8,106.1 108.5,107Z" style="fill:rgb(184,147,127);fill-rule:nonzero;"/> + </g> + <g transform="matrix(1,0,0,1,-1.76591,-3.82727)"> + <path d="M98.2,111.8C95.5,121.6 119.9,120.1 119.3,113.8C119,110.1 115.7,105.4 107,105.6C103.6,105.7 99.4,107.2 98.2,111.8Z" style="fill-rule:nonzero;"/> + </g> + <g transform="matrix(1,0,0,1,-1.76591,-3.82727)"> + <path d="M99,127.7C98.1,128.1 96.6,137.9 101.2,138.4C104.3,138.7 112.8,139.7 114.8,138.4C118.7,135.9 118.3,129.9 116.1,128.4C112.4,126 100,127.2 99,127.7ZM73.6,54.3C107,58.2 102.5,93 89.6,104.3C65.6,125.3 40.6,104.3 43.4,83.1C46,62.7 63.3,53.1 73.6,54.3Z" style="fill:rgb(224,222,220);fill-rule:nonzero;"/> + </g> + <g transform="matrix(1,0,0,1,-1.76591,-3.82727)"> + <circle cx="71.4" cy="84.3" r="11.4" style="fill:rgb(17,18,18);"/> + </g> + <g transform="matrix(1,0,0,1,-1.76591,-3.82727)"> + <circle cx="74.4" cy="79.4" r="3.6" style="fill:white;"/> + </g> + <g transform="matrix(1,0,0,1,-1.76591,-3.82727)"> + <path d="M193.6,186.7C204.6,186.8 199.2,163.2 192.4,167.9C189.1,170.2 188.5,175.5 188.5,180C188.5,182.5 190.5,186.6 193.6,186.7ZM23.3,186.7C12.3,186.8 17.7,163.2 24.5,167.9C27.8,170.2 28.4,175.5 28.4,180C28.4,182.5 26.4,186.6 23.3,186.7ZM172.7,259.2C166.7,250.3 161.3,257.2 152.6,261.6C148.5,263.7 159.4,271.2 171.6,265.6C174.8,264.1 174.7,262.1 172.7,259.2ZM44.2,260.2C50.2,251.3 55.6,258.2 64.3,262.6C68.4,264.7 57.5,272.2 45.3,266.6C42.1,265.1 42.2,263.1 44.2,260.2Z" style="fill:rgb(184,147,127);fill-rule:nonzero;"/> + </g> + <g transform="matrix(1,0,0,1,-1.76591,-3.82727)"> + <path d="M188.6,47C188,49.1 190.7,48.8 191.7,55.3C192.1,57.7 200.7,51.8 197.2,47.5C194.3,43.9 189.1,44.9 188.6,47ZM28.3,47C28.9,49.1 26.2,48.8 25.2,55.3C24.8,57.7 16.2,51.8 19.7,47.5C22.5,43.9 27.7,44.9 28.3,47Z" style="fill:rgb(60,137,191);fill-rule:nonzero;"/> + </g> +</svg> diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/svg/gopher-2.svg b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/svg/gopher-2.svg new file mode 100644 index 000000000..961221f18 --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/svg/gopher-2.svg @@ -0,0 +1,27 @@ +<svg viewBox="0 0 153.34 153.34"> + <defs> + <clipPath id="clipPath"> + <circle id="backgroundCircle" cx="76.67" cy="76.67" r="76.67" /> + </clipPath> + </defs> + <circle class="cls-1" cx="76.67" cy="76.67" r="76.67" /> + <g class="gopher-wrapper" clip-path="url(#clipPath)"> + <g class="gopher"> + <path class="cls-2" d="M124.53 136.53c.33-14.69-2.52-30.71-1.71-39.42 1-10.27 1.78-20.71.53-27.73-.68-3.86 12.2-4.78 7.95-13.53-3.65-7.52-12.56-.88-14.82-3.22-11.5-11.88-25.44-14.82-36.41-15.36h-6c-11 .27-24.91 3.48-36.41 15.36-2.27 2.34-11.17-4.3-14.82 3.22-4.25 8.75 8.63 9.67 7.95 13.53-1.24 7-.42 17.46.53 27.73.78 8.42-1.86 25.77-1.73 40 0 0 17.19 16.24 47.12 16.24 30.05-.01 47.82-16.82 47.82-16.82z" /> + <path class="cls-3" d="M96.17 61.18c-18.32 2.13-15.85 21.26-8.78 27.44 13.17 11.53 26.89 0 25.38-11.66-1.44-11.19-10.91-16.44-16.6-15.78z" /> + <g class="eye"> + <circle class="cls-4" cx="97.38" cy="77.64" r="6.28" /> + <circle class="cls-5" cx="95.73" cy="74.98" r="1.98" /> + </g> + <path class="cls-6" d="M77.12 90.12c-8.77 1.3-11.9 3.83-11.23 7.81 1.09 6.48 21.82 5.75 22.43.33.52-4.68-7.79-8.65-11.2-8.14z" /> + <path class="cls-7 nose" d="M71.44 92.73c-1.49 5.4 11.91 4.58 11.58 1.1-.19-2-2-4.63-6.75-4.48-1.86.07-4.14.86-4.83 3.38z" /> + <path class="cls-3" d="M71.86 101.48c-.48.21-1.3 5.58 1.19 5.85 1.7.19 6.36.72 7.46 0 2.14-1.37 1.9-4.69.71-5.49-1.99-1.31-8.79-.62-9.36-.36zM57.96 61.18c18.32 2.13 15.85 21.26 8.78 27.44-13.17 11.53-26.89 0-25.38-11.66 1.45-11.19 10.91-16.44 16.6-15.78z" /> + <g class="eye"> + <circle class="cls-4" cx="56.75" cy="77.64" r="6.28" /> + <circle class="cls-5" cx="58.4" cy="74.98" r="1.98" /> + </g> + <path class="cls-6" d="M123.8 133.87c6.06.05 3.05-12.88-.67-10.32-1.83 1.26-2.12 4.18-2.12 6.62-.01 1.4 1.08 3.7 2.79 3.7zM30.34 133.87c-6.06.05-3.05-12.88.67-10.32 1.83 1.26 2.12 4.18 2.12 6.62 0 1.4-1.09 3.7-2.79 3.7z" /> + <path class="cls-8" d="M121.05 57.18c-.32 1.17 1.17 1 1.73 4.54.2 1.29 4.92-1.91 3-4.29-1.57-1.95-4.42-1.4-4.73-.25zM33.08 57.18c.32 1.17-1.17 1-1.73 4.54-.2 1.29-4.92-1.91-3-4.29 1.57-1.95 4.42-1.4 4.73-.25z" /> + </g> + </g> +</svg> diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/svg/gopher-front.svg b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/svg/gopher-front.svg new file mode 100644 index 000000000..0f8fbe0d9 --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/svg/gopher-front.svg @@ -0,0 +1,33 @@ +<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 18.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="Gopher" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ viewBox="0 0 215.6 281.6" enable-background="new 0 0 215.6 281.6" xml:space="preserve">
+<g>
+ <path fill="#8CC5E7" d="M207.3,44.6c-6.7-13.7-22.9-1.6-27-5.9c-21-21.6-46.4-27-66.3-28c0,0-9,0-11,0c-20,0.5-45.4,6.3-66.3,28
+ c-4.1,4.3-20.4-7.8-27,5.9c-7.7,16,15.7,17.6,14.5,24.7c-2.3,12.8-0.8,31.8,1,50.5C28,151.5,4.3,227.4,53.6,257.9
+ c9.3,5.8,34.4,9,56.2,9.5l0,0c0,0,0.1,0,0.1,0c0,0,0.1,0,0.1,0l0,0c21.8-0.5,43.9-3.7,53.2-9.5c49.4-30.5,25.7-106.4,28.6-138.1
+ c1.7-18.7,3.2-37.7,1-50.5C191.6,62.2,215,60.5,207.3,44.6z"/>
+ <g>
+ <path fill="#E0DEDC" d="M143.2,54.3c-33.4,3.9-28.9,38.7-16,50c24,21,49,0,46.2-21.2C170.9,62.7,153.6,53.1,143.2,54.3z"/>
+ <circle fill="#111212" cx="145.5" cy="84.3" r="11.4"/>
+ <circle fill="#FFFFFF" cx="142.5" cy="79.4" r="3.6"/>
+ </g>
+ <g>
+ <path fill="#B8937F" d="M108.5,107c-16,2.4-21.7,7-20.5,14.2c2,11.8,39.7,10.5,40.9,0.6C129.9,113.3,114.8,106.1,108.5,107z"/>
+ <path d="M98.2,111.8c-2.7,9.8,21.7,8.3,21.1,2c-0.3-3.7-3.6-8.4-12.3-8.2C103.6,105.7,99.4,107.2,98.2,111.8z"/>
+ <path fill="#E0DEDC" d="M99,127.7c-0.9,0.4-2.4,10.2,2.2,10.7c3.1,0.3,11.6,1.3,13.6,0c3.9-2.5,3.5-8.5,1.3-10
+ C112.4,126,100,127.2,99,127.7z"/>
+ </g>
+ <g>
+ <path fill="#E0DEDC" d="M73.6,54.3c33.4,3.9,28.9,38.7,16,50c-24,21-49,0-46.2-21.2C46,62.7,63.3,53.1,73.6,54.3z"/>
+ <circle fill="#111212" cx="71.4" cy="84.3" r="11.4"/>
+ <circle fill="#FFFFFF" cx="74.4" cy="79.4" r="3.6"/>
+ </g>
+ <path fill="#B8937F" d="M193.6,186.7c11,0.1,5.6-23.5-1.2-18.8c-3.3,2.3-3.9,7.6-3.9,12.1C188.5,182.5,190.5,186.6,193.6,186.7z"/>
+ <path fill="#B8937F" d="M23.3,186.7c-11,0.1-5.6-23.5,1.2-18.8c3.3,2.3,3.9,7.6,3.9,12.1C28.4,182.5,26.4,186.6,23.3,186.7z"/>
+ <path fill="#B8937F" d="M172.7,259.2c-6-8.9-11.4-2-20.1,2.4c-4.1,2.1,6.8,9.6,19,4C174.8,264.1,174.7,262.1,172.7,259.2z"/>
+ <path fill="#B8937F" d="M44.2,260.2c6-8.9,11.4-2,20.1,2.4c4.1,2.1-6.8,9.6-19,4C42.1,265.1,42.2,263.1,44.2,260.2z"/>
+ <path fill="#3C89BF" d="M188.6,47c-0.6,2.1,2.1,1.8,3.1,8.3c0.4,2.4,9-3.5,5.5-7.8C194.3,43.9,189.1,44.9,188.6,47z"/>
+ <path fill="#3C89BF" d="M28.3,47c0.6,2.1-2.1,1.8-3.1,8.3c-0.4,2.4-9-3.5-5.5-7.8C22.5,43.9,27.7,44.9,28.3,47z"/>
+</g>
+</svg>
diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/svg/gopher-homepage.svg b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/svg/gopher-homepage.svg new file mode 100644 index 000000000..36d9f1c41 --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/svg/gopher-homepage.svg @@ -0,0 +1,58 @@ +<svg id="gopher" width="100%" height="100%" viewBox="0 0 272 282" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:1.5;"> + <g transform="matrix(1.09329,0,0,1.09329,-135.183,-11.6982)"> + <path class="gopher-cape animated" d="M167.376,132.778C165.4,163.47 157.387,172.184 150.142,191.552C140.361,210.573 133.102,214.357 127.626,223.012C131.508,226.814 144.79,238.814 159.006,243.911C199.917,251.86 250.261,251.499 284.105,243.911C312.297,238.453 330.566,241.986 350.858,258.146C352.025,218.523 351.604,171.276 333.752,132.778" style="fill:rgb(201,23,126);stroke:rgb(201,23,126);stroke-width:4px;"/> + </g> + <g transform="matrix(1.09329,0,0,1.09329,20.0647,-11.6982)"> + <path d="M207.3,44.6C200.6,30.9 184.4,43 180.3,38.7C159.3,17.1 133.9,11.7 114,10.7L103,10.7C83,11.2 57.6,17 36.7,38.7C32.6,43 16.3,30.9 9.7,44.6C2,60.6 25.4,62.2 24.2,69.3C21.9,82.1 23.4,101.1 25.2,119.8C28,151.5 4.3,227.4 53.6,257.9C62.9,263.7 88,266.9 109.8,267.4L110,267.4C131.8,266.9 153.9,263.7 163.2,257.9C212.6,227.4 188.9,151.5 191.8,119.8C193.5,101.1 195,82.1 192.8,69.3C191.6,62.2 215,60.5 207.3,44.6Z" style="fill:rgb(140,197,231);fill-rule:nonzero;"/> + </g> + <g transform="matrix(1.09329,0,0,1.09329,20.0647,-11.6982)"> + <path d="M143.2,54.3C109.8,58.2 114.3,93 127.2,104.3C151.2,125.3 176.2,104.3 173.4,83.1C170.9,62.7 153.6,53.1 143.2,54.3Z" style="fill:rgb(224,222,220);fill-rule:nonzero;"/> + </g> + <g transform="matrix(1.09329,0,0,1.09329,20.0647,-11.6982)"> + <path class="eyes" d="M145.5,72.9C151.792,72.9 156.9,78.008 156.9,84.3C156.9,90.592 151.792,95.7 145.5,95.7C139.208,95.7 134.1,90.592 134.1,84.3C134.1,78.008 139.208,72.9 145.5,72.9ZM71.356,72.746C77.648,72.746 82.756,77.854 82.756,84.146C82.756,90.438 77.648,95.546 71.356,95.546C65.064,95.546 59.956,90.438 59.956,84.146C59.956,77.854 65.064,72.746 71.356,72.746Z" style="fill:rgb(17,18,18);"/> + </g> + <g transform="matrix(1.09329,0,0,1.09329,20.0647,-11.6982)"> + <path d="M142.5,75.8C144.487,75.8 146.1,77.413 146.1,79.4C146.1,81.387 144.487,83 142.5,83C140.513,83 138.9,81.387 138.9,79.4C138.9,77.413 140.513,75.8 142.5,75.8ZM74.274,75.192C76.261,75.192 77.874,76.805 77.874,78.792C77.874,80.779 76.261,82.392 74.274,82.392C72.287,82.392 70.674,80.779 70.674,78.792C70.674,76.805 72.287,75.192 74.274,75.192Z" style="fill:white;"/> + </g> + <g transform="matrix(1.09329,0,0,1.09329,20.0647,-11.6982)"> + <path d="M108.5,107C92.5,109.4 86.8,114 88,121.2C90,133 127.7,131.7 128.9,121.8C129.9,113.3 114.8,106.1 108.5,107Z" style="fill:rgb(184,147,127);fill-rule:nonzero;"/> + </g> + <g transform="matrix(1.09329,0,0,1.09329,20.0647,-11.6982)"> + <path d="M98.2,111.8C95.5,121.6 119.9,120.1 119.3,113.8C119,110.1 115.7,105.4 107,105.6C103.6,105.7 99.4,107.2 98.2,111.8Z" style="fill-rule:nonzero;"/> + </g> + <g transform="matrix(1.09329,0,0,1.09329,20.0647,-11.6982)"> + <path d="M99,127.7C98.1,128.1 96.6,137.9 101.2,138.4C104.3,138.7 112.8,139.7 114.8,138.4C118.7,135.9 118.3,129.9 116.1,128.4C112.4,126 100,127.2 99,127.7ZM73.6,54.3C107,58.2 102.5,93 89.6,104.3C65.6,125.3 40.6,104.3 43.4,83.1C46,62.7 63.3,53.1 73.6,54.3Z" style="fill:rgb(224,222,220);fill-rule:nonzero;"/> + </g> + <g transform="matrix(1.09329,0,0,1.09329,20.0647,-11.6982)"> + <circle class="eyes" cx="71.4" cy="84.3" r="11.4" style="fill:rgb(17,18,18);"/> + </g> + <g transform="matrix(1.09329,0,0,1.09329,20.0647,-11.6982)"> + <circle cx="74.4" cy="79.4" r="3.6" style="fill:white;"/> + </g> + <g transform="matrix(1.09329,0,0,1.09329,20.0647,-11.6982)"> + <path d="M193.6,186.7C204.6,186.8 199.2,163.2 192.4,167.9C189.1,170.2 188.5,175.5 188.5,180C188.5,182.5 190.5,186.6 193.6,186.7ZM23.3,186.7C12.3,186.8 17.7,163.2 24.5,167.9C27.8,170.2 28.4,175.5 28.4,180C28.4,182.5 26.4,186.6 23.3,186.7ZM172.7,259.2C166.7,250.3 161.3,257.2 152.6,261.6C148.5,263.7 159.4,271.2 171.6,265.6C174.8,264.1 174.7,262.1 172.7,259.2ZM44.2,260.2C50.2,251.3 55.6,258.2 64.3,262.6C68.4,264.7 57.5,272.2 45.3,266.6C42.1,265.1 42.2,263.1 44.2,260.2Z" style="fill:rgb(184,147,127);fill-rule:nonzero;"/> + </g> + <g transform="matrix(1.09329,0,0,1.09329,20.0647,-11.6982)"> + <path d="M188.6,47C188,49.1 190.7,48.8 191.7,55.3C192.1,57.7 200.7,51.8 197.2,47.5C194.3,43.9 189.1,44.9 188.6,47ZM28.3,47C28.9,49.1 26.2,48.8 25.2,55.3C24.8,57.7 16.2,51.8 19.7,47.5C22.5,43.9 27.7,44.9 28.3,47Z" style="fill:rgb(0,131,192);fill-rule:nonzero;"/> + </g> + <g transform="matrix(0.219817,0,0,0.219817,92.037,155.985)"> + <g transform="matrix(2.08706,0,0,2.08706,-39.3863,-48.2414)"> + <path class="gopher-badge animated" d="M119.631,36.154L203.822,85.066L203.822,181.395L119.631,229.184L35.578,181.395L35.578,85.066L119.631,36.154Z" style="fill:rgb(255,64,136);"/> + <path class="gopher-badge animated" d="M207.664,81.239L209.061,83.666L209.061,182.809L207.638,185.253L121.013,234.423L118.245,234.422L31.761,185.251L30.34,182.808L30.34,83.667L31.735,81.242L118.217,30.916L121.041,30.915L207.664,81.239ZM40.817,88.078L40.817,178.348L119.633,223.159L198.584,178.345L198.584,88.081L119.633,42.214L40.817,88.078Z" style="fill:rgb(201,23,126);"/> + </g> + <g transform="matrix(1.95678,0,0,2.21729,-55.1262,110.024)"> + <path class="gopher-badge animated" d="M179.238,106.552L154.758,106.552L154.758,62.2L112.134,62.2L112.134,106.552L87.654,106.552L87.654,1.648L112.134,1.648L112.134,45.496L154.758,45.496L154.758,1.648L179.238,1.648L179.238,106.552Z" style="fill:white;fill-rule:nonzero;"/> + </g> + </g> + <g transform="matrix(1.09329,0,0,1.09329,-135.318,-8.1299)"> + <path class="gopher-cape animated" d="M167.5,129.514C184.792,131.141 216.708,134.608 250.124,148.407C283.576,136.181 294.915,129.585 333.876,129.514" style="fill:none;stroke:rgb(201,23,126);stroke-width:4px;"/> + </g> + <g transform="matrix(1,0,0,1,-1.47026,0)"> + <g transform="matrix(1.09203,0,0,1,-11.2404,3.14785)"> + <path class="gopher-cape animated" d="M103.229,44.41C127.646,44.41 141.964,60.067 145.637,76.405C149.492,93.554 120.688,108.4 96.272,108.4C71.856,108.4 58.627,77.601 58.627,59.942C58.627,42.284 78.813,44.41 103.229,44.41ZM103.229,59.942C117.928,59.942 128.366,65.775 128.366,76.405C128.366,87.035 117.928,95.666 103.229,95.666C88.531,95.666 75.079,82.622 75.079,71.992C75.079,61.361 88.531,59.942 103.229,59.942Z" style="fill:rgb(201,23,126);"/> + </g> + <g transform="matrix(1.05263,0,0,1,75.8327,3.14785)"> + <path class="gopher-cape animated" d="M101.398,44.41C125.814,44.41 141.107,42.439 141.107,60.097C141.107,77.755 125.814,108.4 101.398,108.4C76.982,108.4 57.159,94.063 57.159,76.405C57.159,58.747 76.982,44.41 101.398,44.41ZM98.548,60.097C113.14,60.097 125.888,60.912 125.888,71.466C125.888,82.019 113.14,95.527 98.548,95.527C83.955,95.527 72.108,86.959 72.108,76.405C72.108,65.851 83.955,60.097 98.548,60.097Z" style="fill:rgb(201,23,126);"/> + </g> + </g> +</svg> diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/svg/gopher-side_path.svg b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/svg/gopher-side_path.svg new file mode 100644 index 000000000..05cfb84d1 --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/svg/gopher-side_path.svg @@ -0,0 +1,42 @@ +<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 18.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="レイヤー_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"
+ y="0px" viewBox="0 0 397.8 535.6" enable-background="new 0 0 397.8 535.6" xml:space="preserve">
+<g>
+ <path fill="none" stroke="#040000" stroke-width="8.917" stroke-miterlimit="10" d="M134.8,30c-23.2,1.7-77,28.8-50.6,95.3
+ c9.2,23.3,105.8,10.4,107-54.7C191.7,43.5,155.2,28.5,134.8,30z"/>
+ <path fill="none" stroke="#040000" stroke-width="8.917" stroke-miterlimit="10" d="M270.4,272.7c-11.3,0.5-19.9,23.6-17.1,34.6
+ c1.5,6,13.1,5,11.4,9.7c-2.7,7.7,17.6,13.1,21.5,4.8C305.7,280.6,280.8,272.3,270.4,272.7z"/>
+
+ <path fill="none" stroke="#040000" stroke-width="8.917" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="
+ M57.4,476.1c-10.8,1.3-14.5,12.9-11.1,17.6c5.1,7.1,39.9,6.5,46.1-0.7c-22-8.9-34.4-16.4-34.4-16.4
+ C57.8,476.4,57.6,476.2,57.4,476.1z"/>
+
+ <path fill="none" stroke="#040000" stroke-width="8.917" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="
+ M269.5,522.6c20.1-4,67.9,4,93.2-61.9c0.7-1.8,1.3-3.6,1.9-5.3c9,0.3,20.4-3,23.4-8c4.1-6.9-8.4-11.9-17.7-13.4
+ c10.2-51.5-3.8-102.7-20.9-140.6c-22.6-50.2-21.5-107-19.9-116.5c6.8-40.5,1.6-70.9-10.1-93.7c11.4-9.7,35.7-34.5,8.7-48.4
+ c-10.9-5.6-25.4,0-44.9,5c-1.1,0.3-1,0.9-1.5,1.8C241,14.2,190.5,14,190.5,14S106.9,5.4,66.7,70.5l1.4-5.3c0,0-45.8-8-57.1,40.7
+ c-8.2,35.2,7.8,44.3,18.6,46.6c-3.8,23.1-4.8,50.1-1.8,81.6c6.4,68.6-42.1,181.9,28.9,242c12.3,10.4,79.3,37.1,149.3,45.2"/>
+ <path fill="none" stroke="#040000" stroke-width="8.917" stroke-miterlimit="10" d="M254.1,505.5c-27.3-5.2-49.3,7.7-46.9,20
+ c2.1,10.7,41.5,8.1,57.3,6C271.5,530.5,261,506.8,254.1,505.5z"/>
+ <path fill="none" stroke="#03324B" stroke-width="10.2888" stroke-miterlimit="10" d="M63.2,132.2"/>
+ <path fill="none" stroke="#03324B" stroke-width="5.4874" stroke-miterlimit="10" d="M74.9,166.8c-0.3-1.1-0.7-2.1-1.1-2.6
+ c-3-3.6-18.7,2.5-20.9,3.5c-0.9,0.4-1.5,1.9-1.8,4"/>
+ <path fill="#040000" d="M308.2,41.4c-19.2,4.3-20.1,14-15.1,16.7c2.9,1.6,0.8-8.3,13.9-3.9c5.3,1.7-2.5,14.6,12.4,0.2
+ C327.3,46.7,312.4,40.5,308.2,41.4z"/>
+ <path fill="none" stroke="#040000" stroke-width="8.231" stroke-miterlimit="10" d="M136.2,29.9C112.7,31.6,58.3,59,85,126.3
+ C94.3,149.8,192,136.8,193.2,71C193.7,43.6,156.8,28.3,136.2,29.9z"/>
+ <path fill="none" stroke="#040000" stroke-width="8.231" stroke-miterlimit="10" d="M75.5,127c-2.2-0.4-4.4-0.7-6.4-0.9
+ c-0.6,0-1.2,0.5-1.1,1.1c0.1,0.4,0,0.8-0.2,1.2c-3.3,6.4-17.6,22.9-25.3,21.3c-0.3-0.1-0.6-0.2-0.8-0.4c-2-1.1-4.5,0.1-4.7,2.3
+ c-0.8,8.1,1.9,15.7,7.1,18.5c1.8,1,4.2,1.5,7,1.6c0.3-2.1,0.9-3.6,1.8-4c2.3-1,17.9-7.2,20.9-3.5c0.5,0.6,0.8,1.5,1.1,2.6
+ c6.5-2.8,11.9-6.5,13.7-10.4C93.5,146.2,96.3,131,75.5,127z"/>
+ <path fill="none" stroke="#040000" stroke-width="8.231" stroke-miterlimit="10" d="M51.1,171.8c-0.9,5.8,0.5,16,5.2,17.9
+ c17.6,7.5,20.8-14.4,18.7-22.9"/>
+ <path fill="#040000" d="M26.6,88.2c-3.6-0.1-7,4.5-9.5,10.6c0.9-1.6,2-2.9,3-2.5c2,0.7,1,6.8-0.3,8.5c-1.8,2.5-4.7,3.1-4.9,0.5
+ c-2,7.1-2.8,14.7-1.7,18.9c0.9,3.6,10.2,6.4,14.3-3.7C30.4,113,37.3,88.5,26.6,88.2z"/>
+ <path fill="#040000" d="M109.6,53c-21.9,2-27.2,33-19.1,40.2c4.6,4.1,20.6,8.8,29.2-19.4C122.4,64.8,117.7,52.2,109.6,53z
+ M99.3,70.6c-2.1,1.6-4.8-0.1-5.4-1.3c-1.7-3.4,4.2-11.4,7.3-10.6C107.4,60.5,101.6,68.7,99.3,70.6z"/>
+ <path fill="#040000" d="M47.2,121.3c-15.7,5.4-14.9,31.9-6.4,32.7c9.6,0.9,26.4-18.5,30.4-26.2C74.3,121.9,53.5,119.2,47.2,121.3z"
+ />
+</g>
+</svg>
diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/svg/gopher-small.svg b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/svg/gopher-small.svg new file mode 100644 index 000000000..bc1e5010c --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/svg/gopher-small.svg @@ -0,0 +1,50 @@ +<svg width="100%" height="100%" viewBox="0 0 500 282" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:1.5;"> + <path d="M167.376,132.778C165.4,163.47 157.387,172.184 150.142,191.552C140.361,210.573 133.102,214.357 127.626,223.012C131.508,226.814 144.79,238.814 159.006,243.911C199.917,251.86 250.261,251.499 284.105,243.911C312.297,238.453 330.566,241.986 350.858,258.146C352.025,218.523 351.604,171.276 333.752,132.778" style="fill:rgb(201,23,126);stroke:rgb(201,23,126);stroke-width:4px;"/> + <g transform="matrix(1,0,0,1,142,0)"> + <path d="M207.3,44.6C200.6,30.9 184.4,43 180.3,38.7C159.3,17.1 133.9,11.7 114,10.7L103,10.7C83,11.2 57.6,17 36.7,38.7C32.6,43 16.3,30.9 9.7,44.6C2,60.6 25.4,62.2 24.2,69.3C21.9,82.1 23.4,101.1 25.2,119.8C28,151.5 4.3,227.4 53.6,257.9C62.9,263.7 88,266.9 109.8,267.4L110,267.4C131.8,266.9 153.9,263.7 163.2,257.9C212.6,227.4 188.9,151.5 191.8,119.8C193.5,101.1 195,82.1 192.8,69.3C191.6,62.2 215,60.5 207.3,44.6Z" style="fill:rgb(140,197,231);fill-rule:nonzero;"/> + </g> + <g transform="matrix(1,0,0,1,142,0)"> + <path d="M143.2,54.3C109.8,58.2 114.3,93 127.2,104.3C151.2,125.3 176.2,104.3 173.4,83.1C170.9,62.7 153.6,53.1 143.2,54.3Z" style="fill:rgb(224,222,220);fill-rule:nonzero;"/> + </g> + <g transform="matrix(1,0,0,1,142,0)"> + <path d="M145.5,72.9C151.792,72.9 156.9,78.008 156.9,84.3C156.9,90.592 151.792,95.7 145.5,95.7C139.208,95.7 134.1,90.592 134.1,84.3C134.1,78.008 139.208,72.9 145.5,72.9ZM71.356,72.746C77.648,72.746 82.756,77.854 82.756,84.146C82.756,90.438 77.648,95.546 71.356,95.546C65.064,95.546 59.956,90.438 59.956,84.146C59.956,77.854 65.064,72.746 71.356,72.746Z" style="fill:rgb(17,18,18);"/> + </g> + <g transform="matrix(1,0,0,1,142,0)"> + <path d="M142.5,75.8C144.487,75.8 146.1,77.413 146.1,79.4C146.1,81.387 144.487,83 142.5,83C140.513,83 138.9,81.387 138.9,79.4C138.9,77.413 140.513,75.8 142.5,75.8ZM74.274,75.192C76.261,75.192 77.874,76.805 77.874,78.792C77.874,80.779 76.261,82.392 74.274,82.392C72.287,82.392 70.674,80.779 70.674,78.792C70.674,76.805 72.287,75.192 74.274,75.192Z" style="fill:white;"/> + </g> + <g transform="matrix(1,0,0,1,142,0)"> + <path d="M108.5,107C92.5,109.4 86.8,114 88,121.2C90,133 127.7,131.7 128.9,121.8C129.9,113.3 114.8,106.1 108.5,107Z" style="fill:rgb(184,147,127);fill-rule:nonzero;"/> + </g> + <g transform="matrix(1,0,0,1,142,0)"> + <path d="M98.2,111.8C95.5,121.6 119.9,120.1 119.3,113.8C119,110.1 115.7,105.4 107,105.6C103.6,105.7 99.4,107.2 98.2,111.8Z" style="fill-rule:nonzero;"/> + </g> + <g transform="matrix(1,0,0,1,142,0)"> + <path d="M99,127.7C98.1,128.1 96.6,137.9 101.2,138.4C104.3,138.7 112.8,139.7 114.8,138.4C118.7,135.9 118.3,129.9 116.1,128.4C112.4,126 100,127.2 99,127.7ZM73.6,54.3C107,58.2 102.5,93 89.6,104.3C65.6,125.3 40.6,104.3 43.4,83.1C46,62.7 63.3,53.1 73.6,54.3Z" style="fill:rgb(224,222,220);fill-rule:nonzero;"/> + </g> + <g transform="matrix(1,0,0,1,142,0)"> + <circle cx="71.4" cy="84.3" r="11.4" style="fill:rgb(17,18,18);"/> + </g> + <g transform="matrix(1,0,0,1,142,0)"> + <circle cx="74.4" cy="79.4" r="3.6" style="fill:white;"/> + </g> + <g transform="matrix(1,0,0,1,142,0)"> + <path d="M193.6,186.7C204.6,186.8 199.2,163.2 192.4,167.9C189.1,170.2 188.5,175.5 188.5,180C188.5,182.5 190.5,186.6 193.6,186.7ZM23.3,186.7C12.3,186.8 17.7,163.2 24.5,167.9C27.8,170.2 28.4,175.5 28.4,180C28.4,182.5 26.4,186.6 23.3,186.7ZM172.7,259.2C166.7,250.3 161.3,257.2 152.6,261.6C148.5,263.7 159.4,271.2 171.6,265.6C174.8,264.1 174.7,262.1 172.7,259.2ZM44.2,260.2C50.2,251.3 55.6,258.2 64.3,262.6C68.4,264.7 57.5,272.2 45.3,266.6C42.1,265.1 42.2,263.1 44.2,260.2Z" style="fill:rgb(184,147,127);fill-rule:nonzero;"/> + </g> + <g transform="matrix(1,0,0,1,142,0)"> + <path d="M188.6,47C188,49.1 190.7,48.8 191.7,55.3C192.1,57.7 200.7,51.8 197.2,47.5C194.3,43.9 189.1,44.9 188.6,47ZM28.3,47C28.9,49.1 26.2,48.8 25.2,55.3C24.8,57.7 16.2,51.8 19.7,47.5C22.5,43.9 27.7,44.9 28.3,47Z" style="fill:rgb(0,131,192);fill-rule:nonzero;"/> + </g> + <g transform="matrix(0.219817,0,0,0.219817,206.037,155.985)"> + <g> + <g transform="matrix(1.90897,0,0,1.90897,-27.8648,-56.0002)"> + <path id="hugo-badge" d="M119.631,36.154L203.822,85.066L203.822,181.395L119.631,229.184L35.578,181.395L35.578,85.066L119.631,36.154Z" style="fill:rgb(255,64,136);"/> + <path d="M207.664,81.239L209.061,83.666L209.061,182.809L207.638,185.253L121.013,234.423L118.245,234.422L31.761,185.251L30.34,182.808L30.34,83.667L31.735,81.242L118.217,30.916L121.041,30.915L207.664,81.239ZM40.817,88.078L40.817,178.348L119.633,223.159L198.584,178.345L198.584,88.081L119.633,42.214L40.817,88.078Z" style="fill:rgb(201,23,126);"/> + </g> + <g transform="matrix(1.78981,0,0,2.02809,-42.2616,88.7603)"> + <path d="M179.238,106.552L154.758,106.552L154.758,62.2L112.134,62.2L112.134,106.552L87.654,106.552L87.654,1.648L112.134,1.648L112.134,45.496L154.758,45.496L154.758,1.648L179.238,1.648L179.238,106.552Z" style="fill:white;fill-rule:nonzero;"/> + </g> + </g> + </g> + <g transform="matrix(1,0,0,1,-0.123703,3.26383)"> + <path d="M167.5,129.514C184.792,131.141 216.708,134.608 250.124,148.407C283.576,136.181 294.915,129.585 333.876,129.514" style="fill:none;stroke:rgb(201,23,126);stroke-width:4px;"/> + </g> +</svg> diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/svg/gopher.svg b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/svg/gopher.svg new file mode 100644 index 000000000..7f6ec255c --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/svg/gopher.svg @@ -0,0 +1,65 @@ +<svg version="1.1" id="レイヤー_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"
+ y="0px" width="401.98px" height="559.472px" viewBox="0 0 401.98 559.472" enable-background="new 0 0 401.98 559.472"
+ xml:space="preserve">
+<path fill-rule="evenodd" clip-rule="evenodd" fill="#F6D2A2" stroke="#000000" stroke-width="3" stroke-linecap="round" d="
+ M10.634,300.493c0.764,15.751,16.499,8.463,23.626,3.539c6.765-4.675,8.743-0.789,9.337-10.015
+ c0.389-6.064,1.088-12.128,0.744-18.216c-10.23-0.927-21.357,1.509-29.744,7.602C10.277,286.542,2.177,296.561,10.634,300.493"/>
+<path fill-rule="evenodd" clip-rule="evenodd" fill="#C6B198" stroke="#000000" stroke-width="3" stroke-linecap="round" d="
+ M10.634,300.493c2.29-0.852,4.717-1.457,6.271-3.528"/>
+<path fill-rule="evenodd" clip-rule="evenodd" fill="#6AD7E5" stroke="#000000" stroke-width="3" stroke-linecap="round" d="
+ M46.997,112.853C-13.3,95.897,31.536,19.189,79.956,50.74L46.997,112.853z"/>
+<path fill-rule="evenodd" clip-rule="evenodd" fill="#6AD7E5" stroke="#000000" stroke-width="3" stroke-linecap="round" d="
+ M314.895,44.984c47.727-33.523,90.856,42.111,35.388,61.141L314.895,44.984z"/>
+<path fill-rule="evenodd" clip-rule="evenodd" fill="#F6D2A2" stroke="#000000" stroke-width="3" stroke-linecap="round" d="
+ M325.161,494.343c12.123,7.501,34.282,30.182,16.096,41.18c-17.474,15.999-27.254-17.561-42.591-22.211
+ C305.271,504.342,313.643,496.163,325.161,494.343z"/>
+<path fill-rule="evenodd" clip-rule="evenodd" fill="none" stroke="#000000" stroke-width="3" stroke-linecap="round" d="
+ M341.257,535.522c-2.696-5.361-3.601-11.618-8.102-15.939"/>
+<path fill-rule="evenodd" clip-rule="evenodd" fill="#F6D2A2" stroke="#000000" stroke-width="3" stroke-linecap="round" d="
+ M108.579,519.975c-14.229,2.202-22.238,15.039-34.1,21.558c-11.178,6.665-15.454-2.134-16.461-3.92
+ c-1.752-0.799-1.605,0.744-4.309-1.979c-10.362-16.354,10.797-28.308,21.815-36.432C90.87,496.1,100.487,509.404,108.579,519.975z"
+ />
+<path fill-rule="evenodd" clip-rule="evenodd" fill="none" stroke="#000000" stroke-width="3" stroke-linecap="round" d="
+ M58.019,537.612c0.542-6.233,5.484-10.407,7.838-15.677"/>
+<path fill-rule="evenodd" clip-rule="evenodd" d="M49.513,91.667c-7.955-4.208-13.791-9.923-8.925-19.124
+ c4.505-8.518,12.874-7.593,20.83-3.385L49.513,91.667z"/>
+<path fill-rule="evenodd" clip-rule="evenodd" d="M337.716,83.667c7.955-4.208,13.791-9.923,8.925-19.124
+ c-4.505-8.518-12.874-7.593-20.83-3.385L337.716,83.667z"/>
+<path fill-rule="evenodd" clip-rule="evenodd" fill="#F6D2A2" stroke="#000000" stroke-width="3" stroke-linecap="round" d="
+ M392.475,298.493c-0.764,15.751-16.499,8.463-23.626,3.539c-6.765-4.675-8.743-0.789-9.337-10.015
+ c-0.389-6.064-1.088-12.128-0.744-18.216c10.23-0.927,21.357,1.509,29.744,7.602C392.831,284.542,400.932,294.561,392.475,298.493"
+ />
+<path fill-rule="evenodd" clip-rule="evenodd" fill="#C6B198" stroke="#000000" stroke-width="3" stroke-linecap="round" d="
+ M392.475,298.493c-2.29-0.852-4.717-1.457-6.271-3.528"/>
+<g>
+ <path fill-rule="evenodd" clip-rule="evenodd" fill="#6AD7E5" stroke="#000000" stroke-width="3" stroke-linecap="round" d="
+ M195.512,13.124c60.365,0,116.953,8.633,146.452,66.629c26.478,65.006,17.062,135.104,21.1,203.806
+ c3.468,58.992,11.157,127.145-16.21,181.812c-28.79,57.514-100.73,71.982-160,69.863c-46.555-1.666-102.794-16.854-129.069-59.389
+ c-30.826-49.9-16.232-124.098-13.993-179.622c2.652-65.771-17.815-131.742,3.792-196.101
+ C69.999,33.359,130.451,18.271,195.512,13.124"/>
+</g>
+<path fill-rule="evenodd" clip-rule="evenodd" fill="#FFFFFF" stroke="#000000" stroke-width="2.9081" stroke-linecap="round" d="
+ M206.169,94.16c10.838,63.003,113.822,46.345,99.03-17.197C291.935,19.983,202.567,35.755,206.169,94.16"/>
+<path fill-rule="evenodd" clip-rule="evenodd" fill="#FFFFFF" stroke="#000000" stroke-width="2.8214" stroke-linecap="round" d="
+ M83.103,104.35c14.047,54.85,101.864,40.807,98.554-14.213C177.691,24.242,69.673,36.957,83.103,104.35"/>
+<path fill-rule="evenodd" clip-rule="evenodd" fill="#FFFFFF" stroke="#000000" stroke-width="3" stroke-linecap="round" d="
+ M218.594,169.762c0.046,8.191,1.861,17.387,0.312,26.101c-2.091,3.952-6.193,4.37-9.729,5.967c-4.89-0.767-9.002-3.978-10.963-8.552
+ c-1.255-9.946,0.468-19.576,0.785-29.526L218.594,169.762z"/>
+<g>
+ <ellipse fill-rule="evenodd" clip-rule="evenodd" cx="107.324" cy="95.404" rx="14.829" ry="16.062"/>
+ <ellipse fill-rule="evenodd" clip-rule="evenodd" fill="#FFFFFF" cx="114.069" cy="99.029" rx="3.496" ry="4.082"/>
+</g>
+<g>
+ <ellipse fill-rule="evenodd" clip-rule="evenodd" cx="231.571" cy="91.404" rx="14.582" ry="16.062"/>
+ <ellipse fill-rule="evenodd" clip-rule="evenodd" fill="#FFFFFF" cx="238.204" cy="95.029" rx="3.438" ry="4.082"/>
+</g>
+<path fill-rule="evenodd" clip-rule="evenodd" fill="#FFFFFF" stroke="#000000" stroke-width="3" stroke-linecap="round" d="
+ M176.217,168.87c-6.47,15.68,3.608,47.035,21.163,23.908c-1.255-9.946,0.468-19.576,0.785-29.526L176.217,168.87z"/>
+<g>
+ <path fill-rule="evenodd" clip-rule="evenodd" fill="#F6D2A2" stroke="#231F20" stroke-width="3" stroke-linecap="round" d="
+ M178.431,138.673c-12.059,1.028-21.916,15.366-15.646,26.709c8.303,15.024,26.836-1.329,38.379,0.203
+ c13.285,0.272,24.17,14.047,34.84,2.49c11.867-12.854-5.109-25.373-18.377-30.97L178.431,138.673z"/>
+ <path fill-rule="evenodd" clip-rule="evenodd" d="M176.913,138.045c-0.893-20.891,38.938-23.503,43.642-6.016
+ C225.247,149.475,178.874,153.527,176.913,138.045C175.348,125.682,176.913,138.045,176.913,138.045z"/>
+</g>
+</svg>
diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/svg/hugo-h-only.svg b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/svg/hugo-h-only.svg new file mode 100644 index 000000000..ea72a6f51 --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/svg/hugo-h-only.svg @@ -0,0 +1,9 @@ +<svg id="hugo-h-only" width="{{ .size }}" height="{{ .size }}" viewBox="0 0 400 400" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:1.41421;"> + <g transform="matrix(1.36352,0,0,1.43298,-313.768,-237.035)"> + <path d="M493.269,343.75C493.269,343.75 493.269,287.991 493.269,258.436C493.269,247.342 487.095,237.078 477.043,231.458C455.469,219.397 417.354,198.088 394.012,185.038C381.687,178.148 366.37,178.304 354.203,185.443C333.547,197.563 301.313,216.476 280.505,228.685C267.959,236.047 260.319,249.07 260.319,263.095C260.319,287.479 260.319,326.102 260.319,350.446C260.319,364.359 268.079,377.226 280.702,384.247C302.664,396.462 337.188,415.664 357.502,426.963C367.714,432.643 380.32,432.767 390.654,427.291C413.085,415.403 452.801,394.356 475.687,382.228C486.54,376.476 493.269,365.583 493.269,353.762C493.269,348.276 493.269,343.75 493.269,343.75Z" style="fill:rgb(255,64,136);"/> + <path d="M374.562,170.557L374.744,170.557L374.765,170.557L374.947,170.559L374.968,170.559L375.15,170.561L375.17,170.561L375.352,170.564L375.373,170.565L375.555,170.568L375.576,170.569L375.758,170.573L375.779,170.574L375.961,170.579L375.982,170.579L376.164,170.585L376.185,170.586L376.367,170.592L376.387,170.593L376.569,170.6L376.59,170.601L376.772,170.609L376.793,170.61L376.975,170.619L376.996,170.62L377.178,170.629L377.198,170.63L377.38,170.64L377.401,170.641L377.583,170.652L377.604,170.653L377.786,170.665L377.806,170.666L377.988,170.679L378.009,170.68L378.191,170.693L378.211,170.695L378.393,170.708L378.414,170.71L378.595,170.724L378.616,170.726L378.798,170.741L378.818,170.743L379,170.759L379.021,170.761L379.202,170.777L379.223,170.779L379.404,170.797L379.425,170.799L379.607,170.817L379.627,170.819L379.809,170.838L379.829,170.84L380.011,170.859L380.031,170.862L380.213,170.882L380.233,170.884L380.414,170.905L380.435,170.908L380.616,170.929L380.637,170.932L380.818,170.954L380.838,170.957L381.019,170.98L381.04,170.983L381.221,171.007L381.241,171.009L381.422,171.034L381.443,171.037L381.624,171.062L381.644,171.065L381.825,171.091L381.845,171.094L382.026,171.121L382.047,171.124L382.227,171.152L382.248,171.155L382.428,171.183L382.448,171.186L382.629,171.215L382.649,171.218L382.83,171.248L382.85,171.252L383.03,171.282L383.051,171.286L383.231,171.317L383.251,171.32L383.431,171.352L383.451,171.356L383.631,171.388L383.652,171.392L383.831,171.425L383.852,171.429L384.032,171.463L384.052,171.467L384.231,171.502L384.252,171.506L384.431,171.542L384.452,171.546L384.631,171.582L384.651,171.586L384.83,171.623L384.851,171.627L385.03,171.665L385.05,171.669L385.229,171.708L385.249,171.712L385.428,171.751L385.448,171.756L385.627,171.795L385.647,171.8L385.826,171.841L385.846,171.845L386.024,171.887L386.045,171.891L386.223,171.933L386.243,171.938L386.421,171.981L386.441,171.986L386.619,172.029L386.64,172.034L386.817,172.079L386.838,172.084L387.015,172.129L387.035,172.134L387.213,172.179L387.233,172.185L387.41,172.231L387.431,172.236L387.608,172.284L387.628,172.289L387.805,172.337L387.825,172.342L388.002,172.391L388.022,172.396L388.199,172.446L388.219,172.451L388.395,172.501L388.415,172.507L388.592,172.558L388.612,172.564L388.788,172.615L388.808,172.621L388.984,172.673L389.004,172.679L389.18,172.732L389.2,172.738L389.375,172.792L389.395,172.798L389.571,172.852L389.591,172.859L389.766,172.914L389.786,172.92L389.961,172.976L389.981,172.982L390.156,173.039L390.176,173.045L390.35,173.103L390.37,173.109L390.545,173.167L390.565,173.174L390.739,173.233L390.759,173.24L390.933,173.299L390.953,173.306L391.127,173.366L391.146,173.373L391.32,173.434L391.34,173.441L391.513,173.502L391.533,173.51L391.706,173.572L391.726,173.579L391.899,173.642L391.919,173.649L392.092,173.713L392.111,173.721L392.284,173.785L392.303,173.793L392.476,173.858L392.495,173.865L392.668,173.931L392.687,173.939L392.859,174.006L392.879,174.013L393.05,174.081L393.07,174.088L393.242,174.157L393.261,174.164L393.432,174.233L393.452,174.241L393.623,174.311L393.642,174.319L393.813,174.389L393.832,174.397L394.003,174.468L394.022,174.476L394.192,174.548L394.212,174.556L394.382,174.629L394.401,174.637L394.571,174.711L394.59,174.719L394.76,174.793L394.779,174.801L394.948,174.876L394.968,174.885L395.137,174.96L395.156,174.969L395.325,175.045L395.344,175.054L395.512,175.131L395.531,175.139L395.7,175.217L395.719,175.226L395.887,175.304L395.906,175.313L396.074,175.392L396.093,175.401L396.26,175.481L396.279,175.49L396.446,175.571L396.465,175.58L396.632,175.661L396.651,175.671L396.818,175.753L396.836,175.762L397.003,175.845L397.022,175.854L397.188,175.937L397.206,175.947L397.372,176.031L397.391,176.041L397.557,176.126L397.575,176.135L397.74,176.221L397.759,176.231L397.924,176.317L397.942,176.327L398.107,176.414L398.126,176.424L398.29,176.512L398.309,176.522L398.473,176.61L398.491,176.62L398.655,176.709L398.673,176.72L398.837,176.81L398.855,176.82L399.013,176.908L399.023,176.913L482.063,223.338L482.202,223.416L482.22,223.426L482.355,223.503L482.373,223.513L482.507,223.59L482.524,223.6L482.659,223.677L482.676,223.687L482.81,223.765L482.827,223.775L482.96,223.854L482.978,223.864L483.111,223.943L483.128,223.953L483.26,224.033L483.277,224.043L483.409,224.123L483.427,224.133L483.558,224.214L483.575,224.224L483.706,224.305L483.724,224.316L483.855,224.397L483.872,224.408L484.002,224.489L484.019,224.5L484.149,224.582L484.166,224.593L484.295,224.676L484.312,224.687L484.441,224.77L484.458,224.78L484.586,224.864L484.603,224.875L484.732,224.959L484.749,224.971L484.876,225.055L484.893,225.066L485.02,225.151L485.037,225.162L485.164,225.248L485.18,225.259L485.307,225.345L485.323,225.356L485.45,225.442L485.466,225.454L485.592,225.541L485.608,225.552L485.733,225.639L485.75,225.651L485.875,225.739L485.891,225.75L486.015,225.838L486.032,225.85L486.156,225.939L486.172,225.95L486.295,226.039L486.311,226.051L486.434,226.14L486.451,226.152L486.573,226.242L486.589,226.254L486.712,226.345L486.728,226.356L486.849,226.447L486.865,226.459L486.991,226.553L487.014,226.571L487.252,226.752L487.283,226.776L487.522,226.962L487.554,226.986L487.792,227.174L487.823,227.199L488.059,227.388L488.089,227.412L488.324,227.603L488.354,227.628L488.587,227.821L488.617,227.846L488.848,228.04L488.878,228.066L489.107,228.262L489.137,228.287L489.364,228.484L489.393,228.51L489.618,228.71L489.648,228.736L489.871,228.936L489.9,228.963L490.122,229.165L490.151,229.192L490.37,229.396L490.399,229.422L490.616,229.628L490.645,229.655L490.861,229.862L490.889,229.889L491.103,230.097L491.131,230.125L491.343,230.335L491.371,230.363L491.581,230.574L491.608,230.602L491.817,230.815L491.844,230.843L492.05,231.058L492.077,231.086L492.281,231.302L492.308,231.331L492.511,231.548L492.537,231.577L492.738,231.796L492.764,231.824L492.962,232.045L492.988,232.074L493.185,232.296L493.211,232.325L493.406,232.549L493.431,232.578L493.624,232.803L493.649,232.832L493.84,233.058L493.865,233.088L494.054,233.316L494.078,233.345L494.265,233.574L494.289,233.604L494.474,233.835L494.498,233.865L494.681,234.096L494.705,234.127L494.886,234.36L494.909,234.39L495.088,234.625L495.111,234.656L495.288,234.891L495.311,234.922L495.486,235.159L495.509,235.19L495.682,235.429L495.704,235.46L495.875,235.699L495.897,235.73L496.066,235.971L496.088,236.003L496.255,236.245L496.276,236.277L496.441,236.52L496.462,236.552L496.624,236.796L496.646,236.828L496.806,237.074L496.827,237.106L496.985,237.353L497.006,237.385L497.162,237.633L497.182,237.666L497.337,237.915L497.357,237.948L497.509,238.199L497.528,238.231L497.678,238.483L497.698,238.516L497.846,238.769L497.865,238.802L498.01,239.056L498.029,239.089L498.173,239.344L498.192,239.378L498.333,239.634L498.351,239.667L498.49,239.924L498.508,239.958L498.645,240.216L498.663,240.25L498.798,240.509L498.816,240.543L498.948,240.804L498.966,240.838L499.096,241.099L499.113,241.133L499.241,241.395L499.258,241.43L499.384,241.694L499.4,241.728L499.524,241.993L499.54,242.027L499.662,242.293L499.678,242.328L499.798,242.594L499.813,242.629L499.93,242.896L499.945,242.931L500.06,243.2L500.075,243.235L500.188,243.504L500.202,243.539L500.313,243.81L500.328,243.845L500.436,244.117L500.45,244.152L500.556,244.424L500.569,244.459L500.673,244.732L500.687,244.768L500.788,245.043L500.801,245.078L500.9,245.353L500.913,245.389L501.01,245.664L501.022,245.7L501.117,245.977L501.129,246.014L501.222,246.291L501.233,246.327L501.323,246.605L501.335,246.641L501.423,246.92L501.434,246.957L501.519,247.237L501.53,247.273L501.613,247.554L501.624,247.59L501.704,247.871L501.715,247.908L501.793,248.19L501.803,248.227L501.879,248.51L501.889,248.547L501.962,248.831L501.972,248.868L502.043,249.152L502.052,249.189L502.121,249.474L502.129,249.511L502.196,249.797L502.204,249.835L502.268,250.121L502.276,250.158L502.338,250.445L502.346,250.483L502.405,250.77L502.412,250.808L502.469,251.096L502.476,251.134L502.53,251.423L502.537,251.461L502.589,251.75L502.596,251.788L502.645,252.078L502.651,252.116L502.698,252.407L502.704,252.445L502.748,252.731L502.752,252.76L502.774,252.91L502.777,252.929L502.797,253.075L502.8,253.094L502.82,253.241L502.823,253.26L502.842,253.406L502.844,253.425L502.863,253.571L502.866,253.59L502.884,253.736L502.886,253.755L502.904,253.902L502.906,253.922L502.923,254.069L502.925,254.088L502.941,254.235L502.943,254.253L502.959,254.401L502.961,254.42L502.976,254.568L502.978,254.586L502.992,254.734L502.994,254.753L503.008,254.901L503.01,254.92L503.023,255.067L503.025,255.086L503.037,255.233L503.039,255.253L503.051,255.401L503.052,255.42L503.063,255.568L503.065,255.587L503.075,255.735L503.077,255.754L503.087,255.903L503.088,255.922L503.097,256.071L503.098,256.09L503.107,256.238L503.108,256.257L503.116,256.405L503.117,256.425L503.125,256.573L503.126,256.593L503.132,256.741L503.133,256.76L503.139,256.908L503.14,256.929L503.146,257.078L503.146,257.097L503.151,257.246L503.152,257.264L503.156,257.413L503.156,257.434L503.16,257.583L503.16,257.602L503.163,257.751L503.164,257.771L503.166,257.92L503.166,257.939L503.168,258.088L503.168,258.108L503.169,258.257L503.169,258.276L503.169,258.431L503.169,353.767L503.169,353.777L503.169,353.931L503.169,353.95L503.168,354.109L503.168,354.129L503.166,354.287L503.166,354.307L503.163,354.465L503.163,354.484L503.16,354.643L503.159,354.663L503.155,354.821L503.155,354.841L503.15,354.998L503.15,355.018L503.144,355.176L503.144,355.196L503.138,355.354L503.137,355.373L503.13,355.53L503.129,355.551L503.122,355.709L503.121,355.728L503.113,355.886L503.112,355.905L503.103,356.062L503.102,356.081L503.093,356.238L503.091,356.259L503.081,356.416L503.08,356.436L503.069,356.593L503.068,356.612L503.056,356.768L503.055,356.788L503.043,356.945L503.041,356.965L503.028,357.122L503.027,357.142L503.013,357.298L503.011,357.318L502.997,357.474L502.995,357.493L502.98,357.649L502.978,357.668L502.963,357.824L502.961,357.845L502.944,358.001L502.942,358.02L502.926,358.175L502.923,358.196L502.906,358.351L502.903,358.37L502.885,358.526L502.883,358.546L502.864,358.702L502.861,358.72L502.842,358.875L502.839,358.895L502.819,359.05L502.816,359.07L502.795,359.224L502.792,359.244L502.771,359.399L502.768,359.419L502.746,359.573L502.743,359.592L502.72,359.746L502.717,359.766L502.693,359.921L502.69,359.94L502.666,360.094L502.662,360.114L502.638,360.267L502.634,360.286L502.609,360.44L502.605,360.46L502.579,360.614L502.575,360.633L502.549,360.786L502.545,360.805L502.517,360.959L502.514,360.979L502.485,361.132L502.482,361.151L502.453,361.303L502.449,361.323L502.42,361.475L502.416,361.494L502.385,361.647L502.382,361.667L502.351,361.819L502.347,361.838L502.315,361.991L502.311,362.011L502.278,362.162L502.275,362.18L502.242,362.332L502.237,362.352L502.204,362.504L502.199,362.523L502.165,362.675L502.161,362.693L502.126,362.845L502.122,362.863L502.086,363.015L502.081,363.034L502.045,363.185L502.041,363.204L502.004,363.355L501.999,363.374L501.961,363.525L501.957,363.543L501.919,363.693L501.914,363.713L501.875,363.863L501.87,363.882L501.83,364.032L501.825,364.051L501.785,364.201L501.78,364.219L501.74,364.369L501.734,364.388L501.693,364.537L501.688,364.556L501.646,364.705L501.641,364.724L501.598,364.872L501.592,364.892L501.549,365.041L501.543,365.06L501.499,365.209L501.494,365.227L501.45,365.375L501.444,365.394L501.399,365.542L501.393,365.56L501.347,365.708L501.341,365.728L501.295,365.876L501.289,365.894L501.242,366.041L501.236,366.059L501.188,366.206L501.182,366.225L501.134,366.372L501.128,366.391L501.079,366.538L501.073,366.555L501.023,366.702L501.017,366.721L500.966,366.868L500.96,366.886L500.909,367.032L500.903,367.05L500.851,367.196L500.845,367.214L500.793,367.36L500.786,367.378L500.734,367.524L500.727,367.543L500.673,367.688L500.667,367.706L500.613,367.851L500.606,367.869L500.551,368.014L500.544,368.032L500.489,368.176L500.482,368.195L500.427,368.339L500.419,368.357L500.363,368.501L500.356,368.519L500.299,368.663L500.292,368.681L500.234,368.825L500.227,368.843L500.168,368.986L500.161,369.004L500.102,369.147L500.095,369.165L500.035,369.307L500.028,369.325L499.968,369.468L499.96,369.486L499.899,369.628L499.892,369.646L499.831,369.788L499.823,369.806L499.761,369.947L499.753,369.966L499.69,370.107L499.683,370.125L499.62,370.266L499.612,370.284L499.548,370.424L499.54,370.442L499.475,370.583L499.467,370.601L499.402,370.741L499.395,370.758L499.329,370.898L499.32,370.916L499.254,371.056L499.246,371.073L499.18,371.213L499.171,371.231L499.103,371.371L499.095,371.388L499.027,371.526L499.019,371.544L498.95,371.683L498.942,371.7L498.873,371.838L498.864,371.856L498.794,371.994L498.785,372.011L498.715,372.15L498.706,372.167L498.635,372.305L498.627,372.322L498.555,372.459L498.546,372.476L498.474,372.613L498.465,372.631L498.392,372.767L498.383,372.785L498.31,372.921L498.301,372.938L498.227,373.074L498.217,373.092L498.143,373.228L498.134,373.244L498.059,373.379L498.05,373.396L497.974,373.532L497.964,373.549L497.888,373.684L497.879,373.701L497.802,373.836L497.793,373.852L497.716,373.986L497.706,374.003L497.628,374.138L497.618,374.154L497.54,374.288L497.529,374.305L497.45,374.439L497.441,374.455L497.361,374.588L497.351,374.605L497.271,374.738L497.261,374.755L497.18,374.887L497.17,374.904L497.089,375.036L497.078,375.053L496.997,375.184L496.987,375.201L496.904,375.332L496.894,375.349L496.811,375.48L496.8,375.497L496.717,375.627L496.706,375.644L496.622,375.775L496.612,375.79L496.527,375.921L496.516,375.938L496.431,376.068L496.42,376.083L496.335,376.213L496.324,376.229L496.237,376.359L496.226,376.375L496.139,376.504L496.129,376.52L496.041,376.649L496.03,376.666L495.942,376.794L495.931,376.809L495.843,376.937L495.831,376.953L495.742,377.081L495.731,377.096L495.642,377.223L495.63,377.24L495.54,377.367L495.528,377.383L495.437,377.51L495.426,377.525L495.335,377.651L495.323,377.667L495.231,377.793L495.219,377.809L495.127,377.934L495.116,377.949L495.023,378.075L495.011,378.091L494.917,378.216L494.905,378.232L494.812,378.356L494.8,378.371L494.706,378.495L494.693,378.511L494.598,378.635L494.586,378.651L494.49,378.774L494.478,378.789L494.382,378.912L494.37,378.927L494.274,379.05L494.261,379.066L494.163,379.188L494.151,379.203L494.053,379.325L494.041,379.341L493.942,379.462L493.931,379.477L493.832,379.598L493.819,379.614L493.719,379.735L493.707,379.75L493.607,379.87L493.595,379.885L493.494,380.005L493.481,380.021L493.38,380.14L493.368,380.154L493.266,380.274L493.252,380.29L493.15,380.409L493.138,380.423L493.036,380.541L493.022,380.556L492.919,380.675L492.906,380.69L492.802,380.807L492.789,380.822L492.685,380.939L492.672,380.954L492.567,381.071L492.554,381.085L492.449,381.202L492.435,381.217L492.329,381.333L492.316,381.347L492.21,381.463L492.196,381.478L492.089,381.593L492.076,381.608L491.968,381.723L491.955,381.737L491.847,381.852L491.833,381.866L491.725,381.98L491.712,381.994L491.603,382.108L491.589,382.123L491.479,382.236L491.466,382.25L491.356,382.363L491.342,382.378L491.231,382.49L491.217,382.505L491.106,382.616L491.092,382.63L490.981,382.742L490.966,382.757L490.854,382.868L490.841,382.882L490.728,382.992L490.714,383.006L490.601,383.117L490.587,383.131L490.473,383.241L490.458,383.255L490.344,383.365L490.33,383.378L490.216,383.487L490.201,383.501L490.086,383.61L490.071,383.624L489.956,383.732L489.942,383.745L489.826,383.853L489.811,383.867L489.694,383.975L489.679,383.988L489.563,384.095L489.548,384.108L489.431,384.215L489.416,384.229L489.297,384.335L489.282,384.349L489.164,384.454L489.149,384.467L489.03,384.573L489.014,384.586L488.895,384.691L488.88,384.704L488.761,384.808L488.746,384.821L488.625,384.925L488.609,384.939L488.488,385.043L488.473,385.056L488.351,385.159L488.336,385.171L488.215,385.274L488.199,385.287L488.077,385.389L488.061,385.402L487.938,385.504L487.922,385.517L487.799,385.618L487.784,385.631L487.66,385.731L487.644,385.744L487.519,385.845L487.503,385.858L487.379,385.957L487.364,385.969L487.239,386.069L487.222,386.082L487.096,386.181L487.081,386.193L486.954,386.292L486.938,386.304L486.811,386.403L486.795,386.415L486.668,386.512L486.652,386.524L486.524,386.621L486.507,386.634L486.379,386.731L486.364,386.743L486.235,386.838L486.219,386.851L486.09,386.946L486.074,386.958L485.944,387.054L485.927,387.066L485.797,387.161L485.781,387.172L485.65,387.267L485.633,387.279L485.502,387.373L485.486,387.385L485.355,387.478L485.339,387.489L485.207,387.581L485.189,387.594L485.057,387.686L485.04,387.698L484.907,387.79L484.89,387.801L484.757,387.892L484.74,387.904L484.607,387.995L484.59,388.006L484.455,388.097L484.438,388.108L484.303,388.198L484.287,388.209L484.152,388.298L484.134,388.31L483.999,388.398L483.982,388.41L483.846,388.498L483.829,388.509L483.692,388.597L483.675,388.608L483.538,388.695L483.52,388.707L483.383,388.793L483.366,388.804L483.228,388.89L483.211,388.901L483.073,388.987L483.055,388.998L482.916,389.083L482.898,389.094L482.759,389.179L482.742,389.189L482.602,389.274L482.584,389.284L482.444,389.368L482.427,389.378L482.287,389.461L482.269,389.472L482.127,389.555L482.109,389.566L481.968,389.648L481.951,389.657L481.81,389.739L481.791,389.75L481.648,389.831L481.63,389.841L481.488,389.921L481.471,389.931L481.327,390.011L481.309,390.022L481.165,390.101L481.147,390.111L481.003,390.19L480.985,390.2L480.841,390.278L480.823,390.288L480.678,390.366L480.659,390.376L480.519,390.451L480.509,390.456L395.466,435.524L395.457,435.529L395.323,435.6L395.306,435.609L395.166,435.681L395.148,435.691L395.008,435.763L394.99,435.772L394.85,435.844L394.832,435.853L394.692,435.924L394.674,435.933L394.534,436.004L394.516,436.013L394.376,436.082L394.358,436.091L394.217,436.161L394.199,436.169L394.058,436.238L394.04,436.247L393.899,436.315L393.88,436.324L393.738,436.391L393.721,436.4L393.579,436.467L393.561,436.475L393.419,436.541L393.4,436.55L393.258,436.616L393.241,436.624L393.099,436.689L393.08,436.698L392.937,436.763L392.918,436.771L392.776,436.835L392.757,436.843L392.615,436.906L392.596,436.914L392.454,436.977L392.436,436.985L392.293,437.047L392.273,437.055L392.13,437.117L392.111,437.125L391.967,437.186L391.948,437.194L391.804,437.254L391.786,437.262L391.642,437.322L391.624,437.329L391.48,437.388L391.461,437.396L391.316,437.455L391.297,437.463L391.152,437.521L391.134,437.528L390.99,437.585L390.971,437.593L390.826,437.65L390.807,437.657L390.661,437.714L390.642,437.721L390.497,437.776L390.479,437.783L390.333,437.838L390.314,437.846L390.168,437.901L390.149,437.908L390.003,437.961L389.985,437.968L389.839,438.021L389.82,438.028L389.673,438.081L389.654,438.088L389.508,438.14L389.489,438.147L389.342,438.199L389.323,438.205L389.177,438.256L389.158,438.263L389.011,438.313L388.992,438.32L388.845,438.37L388.826,438.376L388.678,438.425L388.658,438.432L388.511,438.481L388.493,438.487L388.345,438.534L388.326,438.541L388.179,438.588L388.16,438.594L388.011,438.641L387.991,438.647L387.843,438.694L387.825,438.699L387.677,438.745L387.657,438.751L387.509,438.796L387.49,438.802L387.342,438.847L387.322,438.853L387.173,438.896L387.155,438.902L387.001,438.947L386.972,438.955L386.678,439.039L386.64,439.05L386.342,439.132L386.303,439.143L386.004,439.223L385.965,439.233L385.665,439.311L385.627,439.321L385.327,439.397L385.288,439.406L384.987,439.48L384.949,439.489L384.648,439.56L384.609,439.569L384.307,439.637L384.268,439.646L383.966,439.712L383.927,439.721L383.625,439.785L383.586,439.793L383.283,439.854L383.244,439.862L382.941,439.921L382.902,439.929L382.598,439.985L382.56,439.993L382.256,440.047L382.216,440.054L381.912,440.106L381.873,440.113L381.568,440.162L381.529,440.169L381.224,440.216L381.185,440.222L380.88,440.267L380.84,440.273L380.535,440.315L380.496,440.321L380.19,440.361L380.151,440.366L379.845,440.404L379.805,440.409L379.499,440.445L379.46,440.449L379.154,440.482L379.114,440.487L378.808,440.518L378.768,440.521L378.461,440.55L378.422,440.554L378.115,440.58L378.075,440.583L377.768,440.607L377.728,440.61L377.422,440.631L377.382,440.634L377.075,440.653L377.035,440.656L376.728,440.673L376.688,440.675L376.38,440.689L376.341,440.691L376.033,440.703L375.994,440.704L375.686,440.714L375.646,440.715L375.338,440.723L375.299,440.724L374.991,440.729L374.952,440.729L374.644,440.732L374.604,440.732L374.296,440.733L374.256,440.733L373.949,440.731L373.91,440.731L373.602,440.726L373.562,440.726L373.254,440.719L373.215,440.718L372.907,440.709L372.867,440.708L372.559,440.697L372.52,440.695L372.213,440.681L372.173,440.68L371.866,440.664L371.826,440.661L371.519,440.643L371.479,440.641L371.172,440.62L371.133,440.617L370.826,440.594L370.786,440.591L370.479,440.566L370.44,440.562L370.133,440.535L370.093,440.531L369.787,440.501L369.748,440.497L369.442,440.465L369.402,440.46L369.096,440.426L369.057,440.421L368.751,440.384L368.711,440.379L368.406,440.34L368.367,440.334L368.061,440.293L368.022,440.287L367.717,440.243L367.678,440.237L367.373,440.191L367.334,440.185L367.029,440.136L366.99,440.13L366.686,440.079L366.647,440.072L366.343,440.018L366.304,440.011L366.001,439.956L365.962,439.948L365.659,439.89L365.619,439.882L365.317,439.822L365.278,439.814L364.976,439.751L364.937,439.743L364.635,439.678L364.596,439.669L364.295,439.602L364.256,439.593L363.955,439.523L363.917,439.514L363.616,439.442L363.577,439.432L363.277,439.358L363.239,439.348L362.939,439.271L362.9,439.261L362.601,439.182L362.563,439.171L362.264,439.09L362.226,439.079L361.928,438.995L361.89,438.984L361.593,438.898L361.555,438.887L361.258,438.798L361.22,438.787L360.928,438.697L360.899,438.688L360.747,438.641L360.728,438.635L360.58,438.588L360.56,438.581L360.413,438.534L360.394,438.528L360.247,438.48L360.228,438.474L360.081,438.425L360.062,438.419L359.915,438.369L359.896,438.363L359.749,438.313L359.73,438.307L359.583,438.256L359.564,438.25L359.418,438.199L359.399,438.192L359.253,438.14L359.234,438.134L359.088,438.082L359.069,438.075L358.922,438.022L358.904,438.015L358.758,437.962L358.739,437.955L358.593,437.901L358.575,437.894L358.429,437.84L358.411,437.833L358.265,437.777L358.247,437.77L358.101,437.714L358.082,437.707L357.937,437.651L357.919,437.644L357.775,437.587L357.756,437.58L357.611,437.522L357.592,437.514L357.447,437.456L357.429,437.449L357.285,437.39L357.267,437.383L357.123,437.324L357.103,437.316L356.96,437.256L356.942,437.249L356.798,437.188L356.78,437.18L356.636,437.119L356.617,437.111L356.474,437.05L356.456,437.042L356.313,436.98L356.295,436.972L356.152,436.909L356.133,436.901L355.991,436.838L355.973,436.83L355.831,436.766L355.812,436.757L355.669,436.693L355.651,436.684L355.509,436.619L355.491,436.611L355.35,436.546L355.331,436.537L355.19,436.471L355.171,436.462L355.029,436.395L355.012,436.387L354.871,436.32L354.853,436.311L354.712,436.243L354.694,436.234L354.554,436.166L354.536,436.157L354.395,436.088L354.377,436.079L354.236,436.009L354.218,436L354.078,435.93L354.061,435.921L353.921,435.85L353.903,435.84L353.763,435.769L353.746,435.76L353.607,435.688L353.589,435.679L353.45,435.606L353.432,435.597L353.293,435.524L353.275,435.514L353.137,435.44L353.119,435.431L352.981,435.356L352.964,435.347L352.826,435.272L352.807,435.262L352.67,435.187L352.653,435.177L352.52,435.104L352.511,435.099L275.701,392.378L275.692,392.373L275.531,392.283L275.514,392.273L275.349,392.18L275.331,392.17L275.167,392.077L275.15,392.067L274.986,391.973L274.968,391.962L274.804,391.867L274.787,391.857L274.624,391.762L274.607,391.752L274.444,391.656L274.426,391.645L274.265,391.549L274.247,391.538L274.086,391.441L274.068,391.43L273.908,391.333L273.891,391.323L273.731,391.224L273.713,391.213L273.553,391.114L273.536,391.104L273.377,391.005L273.36,390.994L273.201,390.894L273.184,390.883L273.025,390.782L273.008,390.771L272.85,390.67L272.834,390.659L272.676,390.557L272.659,390.546L272.503,390.444L272.486,390.433L272.33,390.33L272.313,390.319L272.157,390.216L272.14,390.204L271.985,390.1L271.968,390.089L271.814,389.985L271.797,389.973L271.642,389.868L271.626,389.857L271.472,389.751L271.456,389.74L271.303,389.633L271.287,389.622L271.134,389.515L271.118,389.504L270.966,389.396L270.949,389.385L270.798,389.277L270.781,389.265L270.63,389.156L270.614,389.145L270.463,389.036L270.448,389.024L270.298,388.915L270.281,388.903L270.132,388.792L270.116,388.78L269.967,388.67L269.951,388.658L269.803,388.547L269.787,388.535L269.639,388.423L269.623,388.411L269.476,388.299L269.46,388.287L269.313,388.174L269.297,388.161L269.151,388.048L269.135,388.036L268.99,387.923L268.974,387.91L268.829,387.796L268.813,387.784L268.669,387.668L268.653,387.656L268.509,387.54L268.494,387.528L268.351,387.413L268.335,387.4L268.191,387.283L268.176,387.271L268.034,387.154L268.019,387.141L267.877,387.024L267.862,387.011L267.72,386.893L267.705,386.88L267.564,386.762L267.55,386.749L267.409,386.63L267.394,386.617L267.254,386.498L267.239,386.485L267.1,386.365L267.085,386.352L266.947,386.231L266.932,386.218L266.794,386.097L266.78,386.085L266.642,385.963L266.627,385.949L266.49,385.827L266.476,385.814L266.34,385.692L266.325,385.679L266.189,385.556L266.175,385.543L266.04,385.419L266.025,385.406L265.89,385.282L265.876,385.268L265.742,385.144L265.727,385.13L265.594,385.005L265.58,384.992L265.447,384.867L265.433,384.853L265.3,384.727L265.286,384.714L265.154,384.587L265.14,384.574L265.009,384.447L264.995,384.433L264.864,384.306L264.851,384.292L264.721,384.164L264.707,384.151L264.577,384.022L264.563,384.008L264.434,383.879L264.42,383.866L264.292,383.736L264.278,383.722L264.151,383.593L264.137,383.579L264.01,383.449L263.996,383.435L263.87,383.304L263.856,383.29L263.73,383.159L263.717,383.145L263.592,383.013L263.578,382.999L263.453,382.867L263.44,382.853L263.315,382.72L263.302,382.706L263.179,382.574L263.166,382.559L263.043,382.426L263.029,382.411L262.907,382.278L262.894,382.264L262.772,382.129L262.759,382.115L262.638,381.98L262.625,381.965L262.504,381.83L262.491,381.816L262.371,381.68L262.359,381.666L262.239,381.53L262.226,381.515L262.107,381.379L262.095,381.364L261.976,381.227L261.964,381.212L261.846,381.075L261.834,381.06L261.716,380.923L261.704,380.908L261.587,380.77L261.575,380.755L261.459,380.616L261.447,380.601L261.331,380.462L261.319,380.448L261.205,380.308L261.192,380.293L261.078,380.153L261.066,380.138L260.953,379.998L260.941,379.983L260.828,379.842L260.816,379.827L260.704,379.686L260.691,379.671L260.58,379.529L260.568,379.514L260.457,379.372L260.445,379.357L260.335,379.215L260.323,379.199L260.213,379.056L260.202,379.041L260.093,378.898L260.081,378.883L259.972,378.739L259.961,378.724L259.853,378.58L259.841,378.564L259.734,378.42L259.723,378.405L259.616,378.26L259.605,378.244L259.499,378.099L259.487,378.084L259.382,377.938L259.371,377.922L259.266,377.776L259.254,377.761L259.15,377.614L259.139,377.599L259.036,377.452L259.025,377.436L258.922,377.289L258.911,377.273L258.808,377.126L258.798,377.11L258.696,376.962L258.685,376.947L258.584,376.799L258.573,376.782L258.473,376.634L258.462,376.618L258.363,376.469L258.352,376.453L258.253,376.304L258.242,376.287L258.144,376.138L258.133,376.121L258.035,375.971L258.025,375.956L257.928,375.805L257.917,375.789L257.821,375.638L257.81,375.622L257.714,375.47L257.704,375.455L257.609,375.303L257.599,375.287L257.504,375.135L257.494,375.118L257.4,374.966L257.39,374.95L257.297,374.797L257.287,374.781L257.194,374.628L257.184,374.611L257.092,374.458L257.082,374.442L256.991,374.288L256.981,374.271L256.89,374.117L256.881,374.101L256.791,373.946L256.781,373.93L256.692,373.775L256.682,373.759L256.593,373.603L256.584,373.587L256.496,373.431L256.486,373.415L256.399,373.259L256.389,373.242L256.303,373.086L256.293,373.069L256.207,372.913L256.198,372.896L256.113,372.739L256.103,372.723L256.019,372.565L256.009,372.548L255.925,372.391L255.916,372.374L255.833,372.216L255.824,372.199L255.741,372.041L255.732,372.024L255.65,371.866L255.641,371.849L255.56,371.691L255.551,371.673L255.47,371.514L255.461,371.497L255.381,371.337L255.373,371.321L255.293,371.161L255.285,371.144L255.206,370.984L255.197,370.967L255.119,370.806L255.111,370.789L255.033,370.628L255.025,370.611L254.948,370.45L254.94,370.433L254.864,370.272L254.856,370.254L254.78,370.093L254.772,370.076L254.698,369.914L254.689,369.896L254.615,369.734L254.607,369.716L254.534,369.554L254.526,369.537L254.453,369.374L254.446,369.357L254.374,369.193L254.366,369.176L254.294,369.012L254.287,368.995L254.216,368.831L254.209,368.814L254.139,368.65L254.131,368.632L254.062,368.468L254.054,368.45L253.986,368.286L253.978,368.268L253.91,368.103L253.903,368.086L253.836,367.921L253.829,367.903L253.762,367.737L253.755,367.719L253.689,367.554L253.682,367.536L253.617,367.37L253.61,367.353L253.545,367.186L253.538,367.168L253.475,367.002L253.468,366.984L253.405,366.817L253.398,366.799L253.335,366.632L253.329,366.615L253.267,366.447L253.261,366.429L253.2,366.262L253.193,366.244L253.133,366.076L253.126,366.058L253.067,365.89L253.06,365.872L253.001,365.703L252.995,365.685L252.937,365.517L252.931,365.499L252.873,365.33L252.867,365.311L252.81,365.142L252.804,365.124L252.748,364.955L252.742,364.937L252.687,364.767L252.681,364.749L252.626,364.579L252.62,364.561L252.566,364.391L252.561,364.372L252.507,364.202L252.502,364.184L252.449,364.013L252.444,363.995L252.392,363.824L252.386,363.806L252.335,363.634L252.33,363.616L252.279,363.445L252.274,363.426L252.224,363.255L252.219,363.237L252.17,363.065L252.165,363.046L252.117,362.874L252.112,362.856L252.064,362.683L252.059,362.665L252.012,362.492L252.007,362.474L251.961,362.301L251.956,362.283L251.911,362.11L251.906,362.091L251.862,361.918L251.857,361.899L251.813,361.726L251.808,361.708L251.765,361.534L251.761,361.515L251.718,361.341L251.714,361.323L251.672,361.149L251.668,361.13L251.627,360.956L251.622,360.937L251.582,360.763L251.578,360.744L251.538,360.569L251.534,360.55L251.495,360.376L251.491,360.357L251.453,360.182L251.449,360.163L251.412,359.988L251.408,359.969L251.372,359.793L251.368,359.775L251.332,359.599L251.328,359.58L251.293,359.404L251.289,359.385L251.255,359.209L251.252,359.19L251.218,359.014L251.214,358.995L251.182,358.819L251.178,358.8L251.146,358.623L251.143,358.604L251.111,358.427L251.108,358.409L251.078,358.232L251.074,358.213L251.045,358.035L251.041,358.016L251.012,357.839L251.009,357.82L250.981,357.643L250.978,357.623L250.95,357.446L250.948,357.427L250.921,357.249L250.918,357.23L250.892,357.052L250.889,357.032L250.864,356.854L250.861,356.835L250.837,356.657L250.834,356.638L250.81,356.459L250.808,356.44L250.785,356.261L250.782,356.242L250.76,356.063L250.758,356.044L250.736,355.865L250.734,355.846L250.714,355.667L250.711,355.647L250.691,355.468L250.689,355.449L250.67,355.269L250.668,355.25L250.65,355.07L250.648,355.051L250.63,354.871L250.628,354.852L250.612,354.672L250.61,354.653L250.594,354.473L250.592,354.453L250.577,354.273L250.575,354.254L250.561,354.073L250.559,354.054L250.545,353.874L250.544,353.854L250.531,353.674L250.53,353.654L250.517,353.474L250.516,353.454L250.505,353.273L250.504,353.254L250.493,353.073L250.492,353.053L250.482,352.872L250.481,352.853L250.472,352.671L250.471,352.652L250.463,352.471L250.462,352.451L250.454,352.27L250.453,352.25L250.447,352.069L250.446,352.049L250.44,351.867L250.44,351.848L250.434,351.666L250.434,351.647L250.43,351.465L250.429,351.445L250.426,351.263L250.425,351.244L250.422,351.061L250.422,351.042L250.42,350.859L250.42,350.84L250.419,350.658L250.419,350.638L250.418,350.46L250.418,350.451L250.418,263.09L250.418,263.081L250.419,262.902L250.419,262.883L250.42,262.7L250.42,262.681L250.422,262.498L250.422,262.479L250.425,262.296L250.425,262.277L250.429,262.094L250.429,262.074L250.434,261.892L250.434,261.873L250.439,261.69L250.44,261.671L250.446,261.488L250.446,261.469L250.453,261.287L250.453,261.268L250.461,261.085L250.462,261.066L250.47,260.884L250.471,260.865L250.48,260.683L250.481,260.664L250.49,260.482L250.491,260.463L250.502,260.281L250.503,260.262L250.514,260.08L250.515,260.061L250.527,259.879L250.529,259.86L250.541,259.679L250.543,259.66L250.556,259.478L250.558,259.46L250.572,259.278L250.573,259.259L250.588,259.078L250.59,259.059L250.606,258.878L250.607,258.859L250.624,258.679L250.626,258.66L250.643,258.479L250.645,258.46L250.663,258.279L250.665,258.261L250.684,258.08L250.686,258.061L250.705,257.881L250.707,257.862L250.728,257.682L250.73,257.663L250.751,257.483L250.753,257.464L250.775,257.284L250.777,257.266L250.8,257.086L250.802,257.067L250.826,256.888L250.828,256.869L250.852,256.69L250.855,256.671L250.879,256.492L250.882,256.473L250.908,256.294L250.91,256.275L250.937,256.096L250.939,256.078L250.966,255.899L250.969,255.88L250.997,255.702L251,255.683L251.029,255.505L251.032,255.486L251.061,255.308L251.064,255.289L251.094,255.111L251.097,255.093L251.128,254.915L251.131,254.896L251.163,254.718L251.166,254.7L251.198,254.522L251.201,254.504L251.234,254.327L251.238,254.308L251.272,254.131L251.275,254.112L251.31,253.935L251.313,253.917L251.348,253.74L251.352,253.722L251.388,253.545L251.392,253.527L251.428,253.35L251.432,253.332L251.469,253.156L251.473,253.137L251.511,252.961L251.515,252.943L251.554,252.767L251.558,252.749L251.598,252.573L251.602,252.555L251.642,252.38L251.646,252.361L251.687,252.186L251.692,252.168L251.733,251.993L251.738,251.974L251.78,251.8L251.785,251.781L251.828,251.607L251.832,251.589L251.876,251.414L251.881,251.396L251.925,251.222L251.93,251.204L251.975,251.03L251.98,251.012L252.026,250.838L252.031,250.82L252.077,250.646L252.082,250.628L252.13,250.455L252.135,250.437L252.183,250.264L252.188,250.246L252.237,250.073L252.242,250.055L252.291,249.882L252.297,249.864L252.347,249.692L252.352,249.674L252.403,249.502L252.408,249.484L252.46,249.312L252.466,249.294L252.518,249.122L252.523,249.104L252.576,248.933L252.582,248.915L252.636,248.744L252.641,248.726L252.696,248.555L252.702,248.537L252.757,248.366L252.763,248.349L252.818,248.178L252.824,248.16L252.881,247.99L252.887,247.972L252.944,247.802L252.95,247.784L253.008,247.615L253.014,247.597L253.073,247.428L253.079,247.41L253.138,247.241L253.144,247.223L253.204,247.054L253.211,247.036L253.271,246.868L253.278,246.85L253.339,246.682L253.346,246.664L253.408,246.496L253.414,246.478L253.477,246.31L253.484,246.293L253.547,246.125L253.554,246.107L253.618,245.94L253.625,245.923L253.69,245.756L253.696,245.738L253.762,245.571L253.769,245.554L253.835,245.387L253.842,245.37L253.909,245.203L253.916,245.186L253.983,245.02L253.99,245.003L254.059,244.837L254.066,244.82L254.135,244.654L254.142,244.637L254.212,244.472L254.219,244.454L254.289,244.289L254.297,244.272L254.368,244.108L254.375,244.09L254.447,243.926L254.454,243.909L254.526,243.745L254.534,243.728L254.607,243.564L254.615,243.547L254.688,243.383L254.696,243.366L254.77,243.203L254.778,243.186L254.853,243.023L254.861,243.006L254.936,242.843L254.944,242.827L255.021,242.664L255.029,242.647L255.106,242.485L255.114,242.468L255.191,242.307L255.2,242.29L255.278,242.128L255.286,242.112L255.365,241.95L255.373,241.934L255.453,241.773L255.461,241.756L255.541,241.596L255.55,241.579L255.631,241.419L255.639,241.402L255.721,241.242L255.729,241.225L255.812,241.066L255.82,241.049L255.903,240.89L255.912,240.873L255.995,240.714L256.004,240.698L256.088,240.539L256.097,240.523L256.182,240.364L256.191,240.348L256.277,240.19L256.285,240.174L256.372,240.016L256.381,239.999L256.468,239.842L256.477,239.826L256.564,239.669L256.573,239.652L256.661,239.496L256.671,239.479L256.759,239.323L256.769,239.307L256.858,239.151L256.867,239.135L256.957,238.979L256.967,238.963L257.057,238.807L257.067,238.791L257.158,238.636L257.168,238.62L257.26,238.466L257.27,238.449L257.362,238.295L257.372,238.279L257.465,238.125L257.475,238.109L257.569,237.956L257.578,237.94L257.673,237.786L257.683,237.77L257.778,237.617L257.788,237.601L257.884,237.449L257.894,237.433L257.99,237.281L258,237.265L258.097,237.113L258.108,237.097L258.205,236.946L258.215,236.93L258.314,236.779L258.324,236.763L258.423,236.613L258.433,236.597L258.533,236.447L258.543,236.431L258.643,236.281L258.654,236.265L258.755,236.116L258.765,236.1L258.867,235.951L258.877,235.935L258.979,235.786L258.99,235.771L259.093,235.622L259.104,235.607L259.207,235.459L259.218,235.443L259.322,235.295L259.332,235.28L259.437,235.133L259.448,235.117L259.553,234.97L259.564,234.955L259.67,234.808L259.681,234.793L259.787,234.647L259.798,234.632L259.905,234.486L259.917,234.471L260.024,234.325L260.036,234.31L260.144,234.165L260.155,234.15L260.264,234.005L260.275,233.99L260.385,233.846L260.396,233.831L260.506,233.687L260.518,233.672L260.629,233.528L260.64,233.513L260.751,233.37L260.763,233.355L260.875,233.213L260.887,233.198L260.999,233.055L261.011,233.041L261.124,232.899L261.136,232.884L261.249,232.742L261.261,232.728L261.376,232.587L261.388,232.572L261.503,232.431L261.515,232.417L261.63,232.276L261.642,232.262L261.758,232.122L261.77,232.107L261.887,231.968L261.899,231.953L262.017,231.814L262.029,231.8L262.147,231.661L262.159,231.647L262.278,231.509L262.29,231.494L262.409,231.357L262.421,231.342L262.541,231.205L262.554,231.191L262.674,231.054L262.687,231.039L262.807,230.903L262.82,230.889L262.941,230.753L262.954,230.739L263.076,230.603L263.089,230.589L263.212,230.454L263.224,230.44L263.348,230.305L263.36,230.291L263.484,230.157L263.497,230.142L263.622,230.009L263.635,229.995L263.76,229.861L263.773,229.847L263.898,229.715L263.911,229.701L264.037,229.568L264.051,229.554L264.177,229.422L264.191,229.408L264.318,229.277L264.331,229.263L264.459,229.132L264.472,229.118L264.601,228.988L264.614,228.974L264.743,228.844L264.757,228.83L264.886,228.7L264.9,228.687L265.03,228.557L265.043,228.544L265.174,228.415L265.188,228.402L265.319,228.273L265.333,228.26L265.465,228.132L265.479,228.119L265.611,227.991L265.625,227.978L265.758,227.851L265.772,227.838L265.905,227.711L265.919,227.698L266.053,227.572L266.067,227.559L266.202,227.433L266.216,227.42L266.351,227.295L266.365,227.282L266.501,227.157L266.515,227.144L266.652,227.02L266.666,227.007L266.803,226.883L266.817,226.87L266.955,226.747L266.969,226.734L267.107,226.612L267.122,226.599L267.26,226.477L267.275,226.464L267.414,226.342L267.428,226.329L267.568,226.208L267.583,226.196L267.723,226.075L267.738,226.062L267.878,225.942L267.893,225.929L268.034,225.81L268.049,225.797L268.191,225.678L268.206,225.665L268.348,225.547L268.363,225.534L268.506,225.416L268.521,225.404L268.665,225.286L268.68,225.274L268.824,225.157L268.839,225.144L268.983,225.028L268.999,225.015L269.144,224.899L269.159,224.887L269.305,224.771L269.32,224.759L269.466,224.644L269.481,224.632L269.628,224.517L269.644,224.505L269.791,224.391L269.806,224.379L269.954,224.266L269.97,224.254L270.118,224.141L270.133,224.129L270.282,224.016L270.298,224.005L270.448,223.893L270.463,223.881L270.613,223.77L270.629,223.758L270.779,223.647L270.795,223.635L270.946,223.525L270.962,223.513L271.113,223.403L271.129,223.392L271.281,223.283L271.297,223.271L271.45,223.162L271.466,223.151L271.619,223.043L271.635,223.031L271.788,222.923L271.805,222.912L271.959,222.805L271.975,222.794L272.129,222.687L272.146,222.676L272.301,222.57L272.317,222.559L272.473,222.453L272.489,222.442L272.645,222.337L272.662,222.326L272.818,222.222L272.835,222.211L272.992,222.107L273.009,222.096L273.166,221.993L273.183,221.982L273.341,221.879L273.358,221.868L273.516,221.766L273.533,221.756L273.692,221.654L273.709,221.643L273.869,221.542L273.885,221.532L274.046,221.431L274.062,221.421L274.223,221.321L274.24,221.31L274.401,221.211L274.418,221.2L274.58,221.101L274.597,221.091L274.759,220.993L274.776,220.983L274.939,220.885L274.956,220.875L275.119,220.778L275.136,220.768L275.296,220.674L275.304,220.669L349.011,177.421L349.02,177.416L349.177,177.324L349.195,177.314L349.356,177.221L349.374,177.21L349.536,177.118L349.554,177.107L349.716,177.015L349.735,177.005L349.897,176.914L349.915,176.903L350.078,176.813L350.096,176.803L350.259,176.713L350.277,176.703L350.441,176.614L350.459,176.604L350.623,176.516L350.641,176.506L350.805,176.418L350.824,176.409L350.988,176.322L351.007,176.312L351.171,176.226L351.19,176.216L351.354,176.131L351.373,176.121L351.538,176.036L351.557,176.027L351.722,175.943L351.741,175.934L351.906,175.85L351.925,175.841L352.091,175.758L352.11,175.749L352.276,175.667L352.295,175.658L352.462,175.577L352.481,175.568L352.647,175.487L352.666,175.478L352.833,175.399L352.852,175.39L353.019,175.311L353.039,175.302L353.206,175.224L353.225,175.215L353.393,175.138L353.412,175.129L353.58,175.052L353.599,175.043L353.768,174.967L353.787,174.959L353.956,174.884L353.975,174.875L354.144,174.801L354.163,174.792L354.332,174.718L354.351,174.71L354.521,174.637L354.54,174.628L354.71,174.556L354.729,174.548L354.899,174.476L354.918,174.468L355.089,174.397L355.108,174.389L355.278,174.319L355.298,174.311L355.468,174.242L355.488,174.234L355.659,174.165L355.678,174.157L355.849,174.089L355.869,174.081L356.04,174.014L356.06,174.006L356.231,173.94L356.251,173.932L356.423,173.866L356.442,173.859L356.614,173.794L356.634,173.786L356.806,173.722L356.826,173.714L356.998,173.651L357.018,173.644L357.191,173.581L357.21,173.573L357.383,173.511L357.403,173.504L357.576,173.443L357.596,173.436L357.769,173.375L357.789,173.368L357.962,173.308L357.982,173.301L358.156,173.242L358.176,173.235L358.35,173.176L358.37,173.17L358.544,173.112L358.564,173.105L358.738,173.048L358.758,173.041L358.933,172.985L358.952,172.978L359.127,172.923L359.147,172.916L359.322,172.861L359.342,172.855L359.517,172.801L359.537,172.795L359.712,172.741L359.732,172.735L359.908,172.682L359.928,172.676L360.104,172.624L360.124,172.618L360.299,172.567L360.319,172.561L360.495,172.51L360.516,172.504L360.692,172.454L360.712,172.449L360.888,172.399L360.908,172.394L361.085,172.345L361.105,172.34L361.282,172.292L361.302,172.287L361.479,172.24L361.499,172.234L361.676,172.188L361.696,172.183L361.873,172.137L361.893,172.132L362.071,172.087L362.091,172.082L362.269,172.038L362.289,172.033L362.466,171.989L362.487,171.984L362.665,171.941L362.685,171.937L362.863,171.895L362.883,171.89L363.061,171.849L363.081,171.844L363.26,171.803L363.28,171.799L363.458,171.759L363.479,171.754L363.657,171.715L363.677,171.711L363.856,171.672L363.876,171.668L364.055,171.63L364.076,171.626L364.254,171.589L364.275,171.585L364.454,171.549L364.474,171.545L364.653,171.509L364.674,171.505L364.853,171.47L364.873,171.467L365.053,171.432L365.073,171.429L365.253,171.395L365.273,171.392L365.453,171.359L365.473,171.355L365.653,171.323L365.674,171.32L365.853,171.289L365.874,171.285L366.054,171.255L366.074,171.251L366.254,171.221L366.275,171.218L366.455,171.189L366.475,171.186L366.656,171.158L366.676,171.154L366.857,171.127L366.877,171.124L367.058,171.097L367.078,171.094L367.259,171.068L367.279,171.065L367.46,171.039L367.48,171.037L367.661,171.012L367.682,171.009L367.862,170.985L367.883,170.983L368.064,170.959L368.084,170.957L368.265,170.934L368.286,170.932L368.467,170.91L368.487,170.908L368.669,170.887L368.689,170.884L368.87,170.864L368.891,170.862L369.072,170.842L369.093,170.84L369.274,170.821L369.295,170.819L369.476,170.801L369.497,170.799L369.678,170.781L369.699,170.779L369.88,170.763L369.901,170.761L370.082,170.745L370.103,170.743L370.285,170.728L370.305,170.726L370.487,170.712L370.508,170.71L370.689,170.696L370.71,170.695L370.892,170.682L370.912,170.68L371.094,170.668L371.115,170.666L371.297,170.655L371.317,170.653L371.499,170.643L371.52,170.641L371.702,170.631L371.723,170.63L371.904,170.621L371.925,170.62L372.107,170.611L372.128,170.61L372.31,170.602L372.331,170.601L372.513,170.594L372.533,170.593L372.715,170.586L372.736,170.586L372.918,170.58L372.939,170.579L373.121,170.574L373.142,170.574L373.324,170.569L373.344,170.569L373.527,170.565L373.547,170.565L373.729,170.562L373.75,170.561L373.932,170.559L373.953,170.559L374.135,170.558L374.156,170.557L374.338,170.557L374.359,170.557L374.541,170.557L374.562,170.557ZM374.394,189.398L374.274,189.399L374.154,189.4L374.034,189.401L373.914,189.403L373.794,189.406L373.674,189.409L373.554,189.412L373.434,189.416L373.313,189.42L373.193,189.425L373.073,189.43L372.953,189.436L372.833,189.442L372.713,189.449L372.594,189.456L372.474,189.464L372.354,189.472L372.234,189.481L372.114,189.49L371.994,189.499L371.875,189.509L371.755,189.52L371.635,189.531L371.516,189.542L371.396,189.554L371.277,189.567L371.157,189.58L371.038,189.593L370.918,189.607L370.799,189.621L370.68,189.636L370.56,189.651L370.441,189.667L370.322,189.683L370.203,189.7L370.084,189.717L369.965,189.735L369.846,189.753L369.727,189.772L369.609,189.791L369.49,189.811L369.372,189.831L369.253,189.851L369.135,189.872L369.016,189.894L368.898,189.916L368.78,189.938L368.662,189.961L368.544,189.984L368.426,190.008L368.308,190.033L368.19,190.057L368.072,190.083L367.955,190.109L367.837,190.135L367.72,190.162L367.602,190.189L367.485,190.216L367.368,190.245L367.251,190.273L367.134,190.302L367.017,190.332L366.901,190.362L366.784,190.393L366.668,190.424L366.551,190.455L366.435,190.487L366.319,190.519L366.203,190.552L366.087,190.586L365.971,190.62L365.855,190.654L365.74,190.689L365.624,190.724L365.509,190.76L365.394,190.796L365.279,190.833L365.164,190.87L365.049,190.908L364.934,190.946L364.82,190.984L364.705,191.024L364.591,191.063L364.477,191.103L364.363,191.144L364.249,191.185L364.135,191.226L364.022,191.268L363.908,191.311L363.795,191.353L363.682,191.397L363.569,191.441L363.456,191.485L363.343,191.53L363.231,191.575L363.119,191.621L363.006,191.667L362.894,191.714L362.782,191.761L362.671,191.809L362.559,191.857L362.448,191.906L362.336,191.955L362.225,192.004L362.114,192.054L362.004,192.105L361.893,192.156L361.783,192.207L361.673,192.259L361.562,192.312L361.452,192.365L361.343,192.418L361.233,192.472L361.124,192.526L361.015,192.581L360.906,192.637L360.797,192.692L360.688,192.749L360.58,192.805L360.472,192.863L360.364,192.92L360.256,192.979L360.148,193.037L360.04,193.097L359.933,193.156L359.826,193.216L359.719,193.277L359.613,193.338L359.506,193.399L359.391,193.467L285.711,236.699L285.589,236.77L285.477,236.837L285.365,236.904L285.253,236.972L285.142,237.04L285.031,237.108L284.92,237.177L284.81,237.246L284.7,237.316L284.591,237.386L284.482,237.456L284.373,237.527L284.264,237.598L284.156,237.669L284.049,237.741L283.941,237.813L283.834,237.886L283.728,237.959L283.621,238.032L283.515,238.106L283.41,238.18L283.305,238.254L283.2,238.329L283.095,238.404L282.991,238.48L282.888,238.556L282.784,238.632L282.681,238.708L282.579,238.785L282.476,238.863L282.375,238.94L282.273,239.018L282.172,239.097L282.071,239.175L281.971,239.255L281.871,239.334L281.771,239.414L281.672,239.494L281.573,239.574L281.474,239.655L281.376,239.737L281.278,239.818L281.181,239.9L281.084,239.982L280.987,240.065L280.891,240.148L280.795,240.231L280.7,240.314L280.605,240.398L280.51,240.483L280.415,240.567L280.321,240.652L280.228,240.737L280.135,240.823L280.042,240.909L279.949,240.995L279.857,241.081L279.766,241.168L279.674,241.255L279.583,241.343L279.493,241.431L279.403,241.519L279.313,241.608L279.224,241.696L279.135,241.785L279.046,241.875L278.958,241.965L278.87,242.055L278.783,242.145L278.696,242.236L278.609,242.327L278.523,242.418L278.437,242.51L278.352,242.602L278.267,242.694L278.182,242.786L278.098,242.879L278.014,242.972L277.931,243.066L277.848,243.159L277.765,243.253L277.683,243.348L277.601,243.442L277.52,243.537L277.439,243.632L277.358,243.728L277.278,243.824L277.198,243.92L277.119,244.016L277.04,244.113L276.962,244.21L276.884,244.307L276.806,244.404L276.729,244.502L276.652,244.6L276.575,244.698L276.499,244.797L276.424,244.896L276.348,244.995L276.274,245.094L276.199,245.194L276.125,245.294L276.052,245.394L275.979,245.495L275.906,245.595L275.834,245.696L275.762,245.798L275.691,245.899L275.62,246.001L275.549,246.103L275.479,246.205L275.409,246.308L275.34,246.411L275.271,246.514L275.203,246.617L275.135,246.721L275.067,246.825L275,246.929L274.933,247.033L274.867,247.138L274.801,247.243L274.736,247.348L274.671,247.453L274.606,247.558L274.542,247.664L274.478,247.77L274.415,247.876L274.353,247.983L274.29,248.09L274.228,248.197L274.167,248.304L274.106,248.411L274.045,248.519L273.985,248.627L273.926,248.735L273.866,248.843L273.808,248.952L273.749,249.061L273.691,249.17L273.634,249.279L273.577,249.388L273.52,249.498L273.464,249.608L273.409,249.718L273.354,249.828L273.299,249.939L273.245,250.049L273.191,250.16L273.137,250.271L273.085,250.383L273.032,250.494L272.98,250.606L272.929,250.718L272.878,250.83L272.827,250.943L272.777,251.055L272.727,251.168L272.678,251.281L272.629,251.394L272.581,251.507L272.533,251.621L272.486,251.734L272.439,251.848L272.392,251.963L272.347,252.077L272.301,252.191L272.256,252.306L272.212,252.421L272.167,252.536L272.124,252.651L272.081,252.766L272.038,252.882L271.996,252.997L271.954,253.113L271.913,253.23L271.872,253.346L271.832,253.462L271.792,253.579L271.753,253.695L271.714,253.812L271.676,253.929L271.638,254.047L271.6,254.164L271.563,254.282L271.527,254.399L271.491,254.517L271.456,254.635L271.421,254.754L271.386,254.872L271.352,254.99L271.319,255.109L271.286,255.228L271.253,255.347L271.221,255.466L271.189,255.585L271.158,255.705L271.128,255.824L271.098,255.944L271.068,256.064L271.039,256.184L271.01,256.304L270.982,256.424L270.955,256.545L270.928,256.665L270.901,256.786L270.875,256.907L270.849,257.028L270.824,257.149L270.799,257.27L270.775,257.391L270.752,257.513L270.729,257.634L270.706,257.756L270.684,257.878L270.662,258L270.641,258.122L270.621,258.244L270.6,258.367L270.581,258.489L270.562,258.612L270.543,258.734L270.525,258.857L270.508,258.98L270.491,259.103L270.474,259.226L270.458,259.35L270.443,259.473L270.428,259.597L270.413,259.72L270.399,259.844L270.386,259.968L270.373,260.092L270.36,260.216L270.349,260.34L270.337,260.464L270.326,260.588L270.316,260.713L270.306,260.837L270.297,260.962L270.288,261.087L270.28,261.212L270.272,261.337L270.265,261.462L270.258,261.587L270.252,261.712L270.247,261.837L270.242,261.963L270.237,262.088L270.233,262.214L270.23,262.34L270.227,262.465L270.224,262.591L270.222,262.717L270.221,262.843L270.22,262.969L270.22,263.105L270.22,350.436L270.22,350.57L270.221,350.694L270.222,350.817L270.224,350.941L270.227,351.065L270.23,351.188L270.233,351.312L270.237,351.435L270.242,351.558L270.247,351.681L270.252,351.804L270.259,351.927L270.265,352.05L270.273,352.173L270.28,352.295L270.289,352.418L270.297,352.54L270.307,352.663L270.317,352.785L270.327,352.907L270.338,353.029L270.349,353.151L270.361,353.273L270.374,353.395L270.387,353.516L270.4,353.638L270.414,353.759L270.429,353.881L270.444,354.002L270.459,354.123L270.475,354.244L270.492,354.365L270.509,354.485L270.527,354.606L270.545,354.726L270.563,354.847L270.583,354.967L270.602,355.087L270.622,355.207L270.643,355.327L270.664,355.447L270.686,355.566L270.708,355.686L270.731,355.805L270.754,355.924L270.778,356.043L270.802,356.162L270.827,356.281L270.852,356.4L270.878,356.518L270.904,356.637L270.931,356.755L270.958,356.873L270.986,356.991L271.014,357.109L271.043,357.227L271.072,357.344L271.102,357.462L271.132,357.579L271.162,357.696L271.194,357.813L271.225,357.93L271.257,358.047L271.29,358.163L271.323,358.28L271.357,358.396L271.391,358.512L271.426,358.628L271.461,358.743L271.496,358.859L271.532,358.975L271.569,359.09L271.606,359.205L271.643,359.32L271.681,359.435L271.72,359.549L271.759,359.664L271.798,359.778L271.838,359.892L271.879,360.006L271.92,360.12L271.961,360.233L272.003,360.346L272.045,360.46L272.088,360.573L272.131,360.685L272.175,360.798L272.219,360.911L272.264,361.023L272.309,361.135L272.354,361.247L272.4,361.359L272.447,361.47L272.494,361.581L272.541,361.692L272.589,361.803L272.638,361.914L272.687,362.025L272.736,362.135L272.786,362.245L272.836,362.355L272.887,362.465L272.938,362.575L272.99,362.684L273.042,362.793L273.094,362.902L273.147,363.01L273.201,363.119L273.255,363.227L273.309,363.335L273.364,363.443L273.419,363.551L273.475,363.658L273.531,363.766L273.588,363.872L273.645,363.979L273.702,364.086L273.76,364.192L273.819,364.298L273.877,364.404L273.937,364.51L273.997,364.615L274.057,364.72L274.117,364.825L274.179,364.93L274.24,365.034L274.302,365.138L274.364,365.242L274.427,365.346L274.491,365.45L274.554,365.553L274.618,365.656L274.683,365.759L274.748,365.861L274.813,365.963L274.879,366.066L274.946,366.168L275.013,366.269L275.08,366.37L275.147,366.471L275.215,366.572L275.284,366.672L275.353,366.773L275.422,366.873L275.492,366.972L275.562,367.072L275.633,367.171L275.704,367.27L275.775,367.368L275.847,367.467L275.919,367.565L275.992,367.663L276.065,367.761L276.139,367.858L276.213,367.955L276.287,368.052L276.362,368.148L276.437,368.244L276.513,368.34L276.589,368.436L276.665,368.531L276.742,368.627L276.819,368.721L276.897,368.816L276.975,368.91L277.054,369.004L277.133,369.097L277.212,369.191L277.292,369.284L277.372,369.377L277.452,369.469L277.533,369.561L277.615,369.653L277.697,369.745L277.778,369.836L277.861,369.927L277.944,370.018L278.027,370.108L278.111,370.198L278.196,370.288L278.28,370.377L278.365,370.466L278.45,370.555L278.536,370.644L278.622,370.732L278.709,370.82L278.796,370.907L278.883,370.994L278.97,371.081L279.059,371.168L279.147,371.254L279.236,371.34L279.325,371.426L279.415,371.511L279.505,371.596L279.595,371.681L279.686,371.765L279.777,371.849L279.869,371.933L279.961,372.016L280.053,372.099L280.146,372.182L280.238,372.264L280.332,372.346L280.426,372.428L280.52,372.509L280.615,372.59L280.71,372.671L280.805,372.751L280.901,372.831L280.997,372.91L281.094,372.99L281.19,373.068L281.287,373.147L281.385,373.225L281.483,373.303L281.581,373.38L281.68,373.458L281.779,373.535L281.878,373.611L281.978,373.687L282.078,373.762L282.179,373.838L282.28,373.913L282.381,373.987L282.483,374.062L282.585,374.136L282.687,374.209L282.79,374.282L282.893,374.355L282.996,374.427L283.1,374.5L283.205,374.571L283.309,374.643L283.414,374.713L283.519,374.784L283.624,374.854L283.73,374.924L283.837,374.993L283.944,375.062L284.051,375.131L284.157,375.199L284.265,375.267L284.374,375.335L284.482,375.402L284.591,375.468L284.7,375.535L284.81,375.601L284.919,375.666L285.029,375.731L285.14,375.796L285.251,375.86L285.362,375.924L285.474,375.988L285.586,376.051L285.707,376.119L362.489,418.824L362.583,418.876L362.668,418.922L362.752,418.968L362.837,419.014L362.922,419.059L363.007,419.104L363.092,419.149L363.178,419.193L363.264,419.237L363.35,419.281L363.436,419.324L363.521,419.366L363.607,419.409L363.694,419.451L363.78,419.493L363.867,419.534L363.954,419.575L364.04,419.615L364.127,419.656L364.215,419.696L364.301,419.735L364.388,419.774L364.476,419.813L364.563,419.851L364.652,419.89L364.739,419.927L364.826,419.964L364.915,420.002L365.003,420.038L365.091,420.074L365.18,420.111L365.268,420.146L365.356,420.181L365.445,420.216L365.535,420.251L365.623,420.285L365.712,420.318L365.802,420.352L365.891,420.385L365.98,420.417L366.069,420.45L366.159,420.482L366.249,420.514L366.339,420.545L366.428,420.576L366.518,420.606L366.608,420.636L366.698,420.666L366.789,420.696L366.88,420.725L366.97,420.753L367.051,420.779L367.242,420.837L367.423,420.892L367.606,420.945L367.788,420.996L367.971,421.046L368.154,421.094L368.338,421.141L368.521,421.187L368.706,421.231L368.89,421.274L369.075,421.316L369.26,421.356L369.445,421.394L369.631,421.431L369.816,421.467L370.002,421.501L370.188,421.534L370.375,421.565L370.562,421.595L370.749,421.623L370.936,421.65L371.123,421.676L371.31,421.7L371.497,421.723L371.685,421.744L371.873,421.764L372.061,421.782L372.249,421.799L372.437,421.815L372.626,421.829L372.814,421.842L373.003,421.853L373.191,421.863L373.38,421.871L373.569,421.878L373.758,421.883L373.946,421.887L374.135,421.89L374.324,421.891L374.513,421.891L374.701,421.889L374.891,421.886L375.079,421.881L375.268,421.875L375.457,421.868L375.645,421.859L375.834,421.848L376.022,421.837L376.211,421.823L376.4,421.809L376.588,421.793L376.776,421.775L376.964,421.756L377.152,421.736L377.339,421.714L377.527,421.69L377.714,421.666L377.902,421.639L378.089,421.612L378.276,421.583L378.462,421.552L378.649,421.52L378.835,421.487L379.021,421.452L379.207,421.416L379.393,421.378L379.578,421.339L379.763,421.298L379.947,421.256L380.132,421.213L380.316,421.168L380.5,421.122L380.684,421.074L380.867,421.025L381.05,420.974L381.242,420.919L381.324,420.895L381.415,420.869L381.506,420.841L381.597,420.814L381.688,420.785L381.778,420.757L381.868,420.729L381.959,420.699L382.05,420.67L382.141,420.64L382.23,420.61L382.321,420.579L382.411,420.548L382.501,420.517L382.591,420.485L382.68,420.453L382.77,420.421L382.859,420.388L382.95,420.355L383.038,420.322L383.127,420.288L383.217,420.254L383.306,420.219L383.394,420.185L383.484,420.149L383.572,420.114L383.66,420.078L383.749,420.041L383.838,420.004L383.926,419.967L384.014,419.93L384.101,419.893L384.189,419.855L384.278,419.816L384.366,419.777L384.453,419.737L384.54,419.698L384.627,419.658L384.715,419.618L384.801,419.577L384.889,419.536L384.976,419.495L385.062,419.453L385.148,419.411L385.235,419.368L385.321,419.325L385.408,419.282L385.494,419.238L385.58,419.194L385.665,419.15L385.75,419.105L385.845,419.055L470.861,374.002L470.96,373.949L471.05,373.901L471.14,373.852L471.23,373.802L471.319,373.753L471.408,373.703L471.498,373.653L471.585,373.603L471.674,373.552L471.762,373.5L471.849,373.45L471.937,373.398L472.024,373.346L472.111,373.293L472.197,373.241L472.283,373.188L472.369,373.134L472.455,373.081L472.54,373.027L472.625,372.973L472.71,372.918L472.794,372.863L472.879,372.808L472.963,372.752L473.046,372.697L473.129,372.641L473.212,372.584L473.295,372.527L473.378,372.47L473.459,372.414L473.541,372.356L473.624,372.297L473.705,372.239L473.786,372.181L473.866,372.122L473.946,372.063L474.026,372.004L474.107,371.944L474.186,371.884L474.265,371.824L474.345,371.763L474.423,371.703L474.501,371.642L474.579,371.58L474.657,371.518L474.735,371.456L474.812,371.394L474.889,371.331L474.965,371.269L475.041,371.206L475.117,371.142L475.193,371.078L475.269,371.014L475.344,370.95L475.418,370.886L475.493,370.821L475.567,370.756L475.641,370.691L475.714,370.625L475.787,370.559L475.86,370.493L475.933,370.426L476.005,370.36L476.077,370.293L476.149,370.225L476.22,370.158L476.292,370.09L476.362,370.022L476.432,369.954L476.502,369.886L476.573,369.816L476.642,369.747L476.711,369.678L476.78,369.608L476.849,369.539L476.917,369.469L476.984,369.399L477.052,369.328L477.12,369.257L477.187,369.186L477.253,369.114L477.319,369.043L477.386,368.971L477.451,368.899L477.517,368.826L477.582,368.754L477.646,368.681L477.711,368.608L477.775,368.535L477.839,368.461L477.902,368.387L477.965,368.313L478.028,368.239L478.09,368.164L478.153,368.089L478.214,368.015L478.275,367.939L478.337,367.863L478.397,367.788L478.458,367.713L478.518,367.636L478.578,367.559L478.637,367.483L478.696,367.407L478.755,367.329L478.814,367.251L478.871,367.175L478.929,367.097L478.987,367.018L479.044,366.941L479.1,366.862L479.157,366.783L479.212,366.705L479.268,366.626L479.324,366.547L479.379,366.467L479.434,366.387L479.488,366.307L479.542,366.227L479.595,366.148L479.649,366.067L479.702,365.986L479.754,365.905L479.807,365.824L479.858,365.743L479.91,365.661L479.961,365.579L480.012,365.497L480.063,365.415L480.112,365.333L480.162,365.251L480.212,365.168L480.261,365.085L480.309,365.002L480.358,364.919L480.406,364.835L480.454,364.751L480.501,364.668L480.547,364.584L480.594,364.499L480.64,364.415L480.686,364.331L480.732,364.246L480.777,364.161L480.821,364.076L480.866,363.99L480.91,363.905L480.953,363.819L480.996,363.734L481.039,363.648L481.082,363.561L481.124,363.475L481.166,363.388L481.207,363.302L481.248,363.215L481.289,363.128L481.33,363.04L481.369,362.953L481.409,362.866L481.448,362.778L481.487,362.69L481.525,362.603L481.563,362.514L481.601,362.426L481.638,362.338L481.675,362.249L481.712,362.16L481.748,362.071L481.784,361.982L481.819,361.893L481.854,361.803L481.889,361.714L481.923,361.624L481.957,361.534L481.991,361.444L482.023,361.354L482.056,361.265L482.088,361.174L482.121,361.083L482.152,360.992L482.183,360.902L482.214,360.811L482.244,360.719L482.274,360.628L482.304,360.537L482.333,360.445L482.362,360.354L482.39,360.262L482.418,360.17L482.446,360.077L482.474,359.985L482.5,359.894L482.527,359.801L482.553,359.708L482.578,359.616L482.604,359.523L482.629,359.43L482.653,359.337L482.677,359.244L482.701,359.15L482.724,359.057L482.747,358.964L482.769,358.87L482.791,358.776L482.813,358.682L482.834,358.588L482.855,358.494L482.876,358.4L482.896,358.305L482.915,358.211L482.934,358.117L482.953,358.022L482.972,357.927L482.99,357.832L483.007,357.737L483.024,357.642L483.041,357.547L483.058,357.452L483.073,357.357L483.089,357.261L483.104,357.165L483.119,357.07L483.133,356.974L483.147,356.878L483.161,356.782L483.174,356.686L483.186,356.59L483.198,356.493L483.21,356.397L483.222,356.3L483.233,356.204L483.243,356.107L483.253,356.01L483.263,355.914L483.272,355.816L483.281,355.719L483.289,355.623L483.297,355.526L483.305,355.429L483.312,355.331L483.319,355.233L483.325,355.136L483.331,355.039L483.336,354.94L483.341,354.842L483.346,354.745L483.35,354.647L483.354,354.549L483.357,354.451L483.36,354.353L483.362,354.255L483.364,354.157L483.366,354.058L483.367,353.959L483.367,353.861L483.368,353.752L483.368,258.446L483.367,258.345L483.367,258.254L483.366,258.163L483.365,258.072L483.363,257.981L483.361,257.891L483.358,257.801L483.355,257.709L483.352,257.62L483.348,257.529L483.344,257.439L483.339,257.349L483.334,257.258L483.329,257.167L483.324,257.078L483.317,256.988L483.311,256.898L483.304,256.808L483.297,256.719L483.289,256.63L483.281,256.539L483.273,256.45L483.264,256.36L483.255,256.271L483.246,256.182L483.236,256.093L483.226,256.004L483.215,255.915L483.204,255.826L483.192,255.737L483.181,255.648L483.169,255.56L483.156,255.471L483.144,255.392L483.116,255.206L483.088,255.029L483.058,254.853L483.026,254.678L482.994,254.503L482.959,254.327L482.923,254.153L482.886,253.979L482.847,253.805L482.807,253.632L482.765,253.459L482.722,253.286L482.677,253.114L482.632,252.943L482.584,252.772L482.535,252.601L482.485,252.43L482.433,252.261L482.38,252.092L482.325,251.923L482.269,251.754L482.212,251.587L482.153,251.419L482.093,251.252L482.031,251.086L481.968,250.92L481.904,250.755L481.838,250.59L481.771,250.426L481.702,250.262L481.632,250.099L481.561,249.937L481.489,249.775L481.415,249.614L481.339,249.453L481.263,249.293L481.185,249.133L481.105,248.974L481.025,248.816L480.943,248.659L480.86,248.502L480.775,248.345L480.689,248.19L480.602,248.035L480.513,247.88L480.423,247.727L480.332,247.574L480.24,247.421L480.146,247.27L480.051,247.119L479.955,246.969L479.857,246.82L479.758,246.671L479.658,246.523L479.557,246.376L479.455,246.23L479.351,246.084L479.246,245.939L479.14,245.795L479.032,245.652L478.923,245.51L478.814,245.368L478.702,245.228L478.59,245.088L478.476,244.948L478.362,244.81L478.246,244.673L478.129,244.536L478.01,244.401L477.891,244.266L477.77,244.132L477.648,243.999L477.525,243.867L477.401,243.736L477.276,243.605L477.149,243.476L477.022,243.347L476.893,243.22L476.763,243.093L476.632,242.967L476.5,242.843L476.366,242.719L476.232,242.596L476.097,242.475L475.96,242.354L475.822,242.234L475.683,242.115L475.543,241.997L475.402,241.881L475.26,241.765L475.117,241.65L474.973,241.536L474.827,241.424L474.673,241.306L474.607,241.256L474.533,241.201L474.459,241.146L474.385,241.092L474.31,241.038L474.234,240.983L474.159,240.93L474.084,240.876L474.008,240.823L473.932,240.77L473.856,240.717L473.779,240.665L473.702,240.612L473.625,240.56L473.548,240.509L473.47,240.457L473.392,240.406L473.314,240.356L473.235,240.305L473.157,240.255L473.078,240.205L472.998,240.155L472.919,240.106L472.839,240.056L472.759,240.008L472.679,239.959L472.598,239.911L472.518,239.863L472.437,239.815L472.355,239.768L472.274,239.72L472.192,239.673L472.11,239.627L472.019,239.576L389.005,193.166L388.888,193.101L388.781,193.042L388.673,192.983L388.564,192.924L388.456,192.866L388.347,192.809L388.239,192.752L388.129,192.695L388.02,192.639L387.911,192.584L387.802,192.529L387.692,192.474L387.582,192.42L387.472,192.367L387.362,192.314L387.251,192.261L387.141,192.209L387.03,192.157L386.919,192.106L386.808,192.055L386.697,192.005L386.586,191.955L386.474,191.906L386.363,191.857L386.251,191.809L386.139,191.761L386.026,191.714L385.914,191.667L385.802,191.621L385.689,191.575L385.576,191.53L385.463,191.485L385.35,191.44L385.237,191.396L385.124,191.353L385.01,191.31L384.896,191.267L384.783,191.225L384.669,191.184L384.555,191.143L384.44,191.102L384.326,191.062L384.212,191.022L384.097,190.983L383.982,190.944L383.867,190.906L383.752,190.868L383.637,190.831L383.522,190.794L383.407,190.758L383.291,190.722L383.175,190.687L383.06,190.652L382.944,190.618L382.828,190.584L382.712,190.55L382.595,190.518L382.479,190.485L382.363,190.453L382.246,190.422L382.129,190.391L382.013,190.36L381.896,190.33L381.779,190.3L381.662,190.271L381.545,190.243L381.427,190.214L381.31,190.187L381.193,190.16L381.075,190.133L380.957,190.107L380.84,190.081L380.722,190.055L380.604,190.031L380.486,190.006L380.368,189.982L380.25,189.959L380.132,189.936L380.013,189.914L379.895,189.892L379.777,189.87L379.658,189.849L379.539,189.829L379.421,189.809L379.302,189.789L379.183,189.77L379.064,189.751L378.945,189.733L378.826,189.716L378.707,189.699L378.588,189.682L378.469,189.666L378.35,189.65L378.23,189.635L378.111,189.62L377.992,189.606L377.872,189.592L377.753,189.578L377.633,189.565L377.514,189.553L377.394,189.541L377.274,189.53L377.155,189.519L377.035,189.508L376.915,189.498L376.795,189.489L376.675,189.48L376.555,189.471L376.436,189.463L376.316,189.455L376.196,189.448L376.076,189.442L375.956,189.435L375.836,189.43L375.716,189.424L375.596,189.42L375.475,189.415L375.355,189.412L375.235,189.408L375.115,189.405L374.995,189.403L374.875,189.401L374.755,189.4L374.635,189.399L374.515,189.398L374.394,189.398Z" style="fill:rgb(201,23,126);"/> + </g> + <g transform="matrix(1.29126,0,0,1.3475,-306.396,-213.151)"> + <path d="M330.703,383.498L330.703,229.716L364.279,229.716L364.279,285.731L419.973,285.731L419.973,229.716L453.645,229.716L453.645,383.498L419.973,383.498L419.973,316.258L364.279,316.258L364.279,383.498L330.703,383.498Z" style="fill:white;fill-rule:nonzero;"/> + </g> +</svg> diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/svg/hugo.svg b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/svg/hugo.svg new file mode 100644 index 000000000..58d025596 --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/svg/hugo.svg @@ -0,0 +1,10 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<svg width="100%" height="100%" viewBox="0 0 400 400" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:1.41421;"> + <g transform="matrix(1.83004,0,0,1.83004,-25.6194,-41.9158)"> + <path d="M207.83,81.074L209.287,83.605L209.287,182.87L207.803,185.419L121.073,234.649L118.185,234.648L31.596,185.417L30.114,182.869L30.114,83.606L31.569,81.077L118.156,30.691L121.102,30.69L207.83,81.074ZM41.043,88.208L41.043,178.216L119.633,222.899L198.358,178.214L198.358,88.211L119.633,42.475L41.043,88.208Z"/> + </g> + <g transform="matrix(1.7158,0,0,1.94423,-39.4209,96.8592)"> + <path d="M179.238,106.552L154.758,106.552L154.758,62.2L112.134,62.2L112.134,106.552L87.654,106.552L87.654,1.648L112.134,1.648L112.134,45.496L154.758,45.496L154.758,1.648L179.238,1.648L179.238,106.552Z" style="fill-rule:nonzero;"/> + </g> +</svg> diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/svg/ic_arrow_drop_down.svg b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/svg/ic_arrow_drop_down.svg new file mode 100644 index 000000000..3ba28c3f5 --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/svg/ic_arrow_drop_down.svg @@ -0,0 +1,4 @@ +<svg class="fill-current" height="22" viewBox="0 0 24 14" width="22" xmlns="http://www.w3.org/2000/svg"> + <path d="M7 10l5 5 5-5z"/> + <path d="M0 0h24v24H0z" fill="none"/> +</svg> diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/svg/ic_arrow_drop_up.svg b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/svg/ic_arrow_drop_up.svg new file mode 100644 index 000000000..8ec2eb766 --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/svg/ic_arrow_drop_up.svg @@ -0,0 +1,4 @@ +<svg class="fill-current" height="22" viewBox="0 0 24 14" width="22" xmlns="http://www.w3.org/2000/svg"> + <path d="M7 14l5-5 5 5z"/> + <path d="M0 0h24v24H0z" fill="none"/> +</svg> diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/svg/ic_chevron_left_black_24px.svg b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/svg/ic_chevron_left_black_24px.svg new file mode 100644 index 000000000..da37757cf --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/svg/ic_chevron_left_black_24px.svg @@ -0,0 +1,4 @@ +<svg class="fill-current" height="{{ .size }}" viewBox="0 0 24 24" width="{{ .size }}" xmlns="http://www.w3.org/2000/svg"> + <path d="M15.41 7.41L14 6l-6 6 6 6 1.41-1.41L10.83 12z"/> + <path d="M0 0h24v24H0z" fill="none"/> +</svg> diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/svg/ic_chevron_right_black_24px.svg b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/svg/ic_chevron_right_black_24px.svg new file mode 100644 index 000000000..47689a91e --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/svg/ic_chevron_right_black_24px.svg @@ -0,0 +1,4 @@ +<svg class="fill-current" height="{{ .size }}" viewBox="0 0 24 24" width="{{ .size }}" xmlns="http://www.w3.org/2000/svg"> + <path d="M10 6L8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6z"/> + <path d="M0 0h24v24H0z" fill="none"/> +</svg> diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/svg/idea.svg b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/svg/idea.svg new file mode 100644 index 000000000..5c2ccc2f4 --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/svg/idea.svg @@ -0,0 +1,61 @@ +<svg id="idea-icon" class="focus-row-icon" width="100%" height="100%" viewBox="0 0 512 512" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:1.41421;"> + <path d="M466.287,256C466.287,372.142 372.148,466.281 256.001,466.281C139.867,466.281 45.715,372.145 45.715,256C45.715,139.853 139.867,45.719 256.001,45.719C372.146,45.719 466.287,139.853 466.287,256Z" style="fill:rgb(242,242,242);fill-rule:nonzero;"/> + <path d="M213.597,97.925C232.469,97.925 247.681,113.142 247.681,132.022L247.681,379.945C247.681,395.525 237.277,408.655 222.987,412.71C222.987,412.71 222.954,412.741 222.91,412.71C221.896,412.992 220.862,413.196 219.674,413.419C218.499,413.685 217.196,413.841 215.783,413.903C215.102,414.046 214.321,414.046 213.597,414.046C195.498,414.046 181.369,400.598 179.697,383.38L179.697,383.342C174.917,385.902 169.329,387.435 163.536,387.435C144.758,387.435 129.442,372.17 129.442,353.28C129.442,349.284 130.266,345.244 131.508,341.676C130.827,341.676 130.136,341.712 129.442,341.712C110.662,341.712 95.386,326.49 95.386,307.618C95.386,299.267 98.389,291.741 103.337,285.781C92.808,279.998 85.701,268.811 85.701,255.983C85.701,241.696 94.5,229.451 106.969,224.444C101.176,218.323 97.62,210.054 97.62,200.992C97.62,182.209 112.919,166.926 131.699,166.926L132.324,166.926C131.472,163.982 130.985,160.654 130.985,157.375C130.985,138.6 146.301,123.312 165.082,123.312C170.176,123.312 175.614,124.531 179.994,126.558C182.58,110.316 196.671,97.925 213.597,97.925Z" style="fill:rgb(5,148,203);fill-rule:nonzero;"/> + <g> + <path d="M175.389,132.019C175.389,153.121 192.518,170.281 213.61,170.281C215.919,170.281 217.793,168.41 217.793,166.09C217.793,163.83 215.919,161.979 213.61,161.979C197.078,161.979 183.65,148.539 183.65,132.019C183.65,115.489 197.077,102.044 213.61,102.044C230.122,102.044 243.567,115.489 243.567,132.019L243.567,379.983C243.567,396.51 230.122,409.956 213.61,409.956C197.078,409.956 183.65,396.511 183.65,379.983C183.65,363.463 197.077,350.023 213.61,350.023C215.919,350.023 217.793,348.172 217.793,345.914C217.793,343.595 215.919,341.721 213.61,341.721C192.518,341.721 175.389,358.878 175.389,379.983C175.389,401.077 192.518,418.199 213.61,418.199C234.707,418.199 251.874,401.078 251.874,379.983L251.874,132.019C251.874,110.922 234.704,93.801 213.61,93.801C192.518,93.801 175.389,110.922 175.389,132.019Z" style="fill:rgb(0,131,192);fill-rule:nonzero;"/> + <path d="M163.565,391.578C142.448,391.578 125.342,374.398 125.342,353.291C125.342,348.839 126.084,344.423 127.597,340.253C128.416,338.087 130.792,336.945 132.899,337.747C135.083,338.482 136.222,340.868 135.403,343.044C134.213,346.321 133.588,349.825 133.588,353.289C133.588,369.814 147.031,383.267 163.566,383.267C168.499,383.267 173.404,382.061 177.7,379.716C179.735,378.633 182.247,379.37 183.388,381.388C184.456,383.426 183.728,385.935 181.701,386.997C176.132,390.011 169.865,391.578 163.565,391.578Z" style="fill:rgb(0,131,192);fill-rule:nonzero;"/> + <path d="M129.463,345.805C108.358,345.805 91.265,328.704 91.265,307.617C91.265,298.716 94.378,290.038 100.133,283.125C101.556,281.384 104.198,281.164 105.939,282.616C107.677,284.093 107.959,286.697 106.469,288.417C101.986,293.821 99.501,300.628 99.501,307.62C99.501,324.135 112.949,337.58 129.466,337.58C130.091,337.58 130.638,337.58 131.181,337.465C147.033,336.582 159.431,323.454 159.431,307.621C159.431,305.355 161.292,303.505 163.568,303.505C165.877,303.505 167.728,305.358 167.728,307.621C167.728,327.848 151.907,344.582 131.798,345.762C131.096,345.787 130.272,345.805 129.463,345.805Z" style="fill:rgb(0,131,192);fill-rule:nonzero;"/> + <path d="M214.24,311.734C211.905,311.734 210.052,309.873 210.052,307.618C210.052,295.901 200.608,286.442 188.883,286.442C177.174,286.442 167.725,295.901 167.725,307.618C167.725,309.876 165.872,311.734 163.565,311.734C161.289,311.734 159.428,309.873 159.428,307.618C159.428,291.385 172.658,278.142 188.883,278.142C205.121,278.142 218.349,291.385 218.349,307.618C218.351,309.875 216.498,311.734 214.24,311.734Z" style="fill:rgb(0,131,192);fill-rule:nonzero;"/> + <path d="M119.779,294.198C98.761,294.198 81.584,277.079 81.584,255.998C81.584,234.881 98.759,217.721 119.779,217.721C140.889,217.721 158.061,234.881 158.061,255.998C158.061,258.241 156.195,260.117 153.916,260.117C151.615,260.117 149.736,258.241 149.736,255.998C149.736,239.466 136.306,226.028 119.776,226.028C103.272,226.028 89.87,239.465 89.87,255.998C89.87,272.513 103.272,285.94 119.776,285.94C122.103,285.94 123.967,287.806 123.967,290.079C123.969,292.393 122.106,294.198 119.779,294.198Z" style="fill:rgb(0,131,192);fill-rule:nonzero;"/> + <path d="M106.958,228.559C105.89,228.559 104.772,228.098 103.935,227.23C97.225,220.108 93.506,210.818 93.506,200.995C93.506,179.888 110.681,162.784 131.778,162.784C132.016,162.784 132.344,162.784 132.638,162.792C150.778,163.053 166.366,175.149 168.596,190.908C170.127,201.714 177.29,212.622 189.79,212.622C192.107,212.622 193.953,214.486 193.953,216.805C193.953,219.058 192.107,220.927 189.79,220.927C174.625,220.927 162.828,209.317 160.404,192.078C158.551,179.181 144.64,171.234 132.305,171.04L131.775,171.032C115.253,171.032 101.803,184.472 101.803,200.992C101.803,208.662 104.688,215.971 109.987,221.58C111.556,223.249 111.503,225.83 109.846,227.389C109.006,228.188 107.985,228.559 106.958,228.559Z" style="fill:rgb(0,131,192);fill-rule:nonzero;"/> + <path d="M132.351,171.044C130.587,171.044 128.913,169.846 128.409,168.092C127.38,164.592 126.865,160.993 126.865,157.378C126.865,136.289 143.979,119.19 165.06,119.19C170.961,119.19 176.498,120.437 181.741,122.974C183.797,123.988 184.631,126.494 183.638,128.545C182.637,130.603 180.182,131.445 178.131,130.432C174.053,128.443 169.655,127.432 165.062,127.432C148.558,127.432 135.12,140.859 135.12,157.381C135.12,160.256 135.56,163.028 136.308,165.75C136.956,167.964 135.719,170.286 133.525,170.867C133.155,171.018 132.73,171.044 132.351,171.044Z" style="fill:rgb(0,131,192);fill-rule:nonzero;"/> + </g> + <path d="M298.4,97.925C279.523,97.925 264.298,113.142 264.298,132.022L264.298,379.945C264.298,395.525 274.717,408.655 289.017,412.71C289.017,412.71 289.045,412.741 289.086,412.71C290.1,412.992 291.149,413.196 292.309,413.419C293.499,413.685 294.795,413.841 296.21,413.903C296.891,414.046 297.682,414.046 298.396,414.046C316.488,414.046 330.629,400.598 332.29,383.38L332.29,383.342C337.064,385.902 342.666,387.435 348.449,387.435C367.247,387.435 382.551,372.17 382.551,353.28C382.551,349.284 381.729,345.244 380.48,341.676C381.174,341.676 381.855,341.712 382.551,341.712C401.326,341.712 416.622,326.49 416.622,307.618C416.622,299.267 413.606,291.741 408.671,285.781C419.203,279.998 426.281,268.811 426.281,255.983C426.281,241.696 417.498,229.451 405.028,224.444C410.814,218.323 414.375,210.054 414.375,200.992C414.375,182.209 399.069,166.926 380.281,166.926L379.679,166.926C380.529,163.982 381.013,160.654 381.013,157.375C381.013,138.6 365.704,123.312 346.919,123.312C341.804,123.312 336.382,124.531 332.01,126.558C329.419,110.316 315.311,97.925 298.4,97.925Z" style="fill:rgb(5,148,203);fill-rule:nonzero;"/> + <g> + <path d="M336.608,132.019C336.608,153.121 319.418,170.281 298.39,170.281C296.071,170.281 294.199,168.41 294.199,166.09C294.199,163.83 296.068,161.979 298.39,161.979C314.912,161.979 328.339,148.539 328.339,132.019C328.339,115.489 314.912,102.044 298.39,102.044C281.875,102.044 268.433,115.489 268.433,132.019L268.433,379.983C268.433,396.51 281.876,409.956 298.39,409.956C314.912,409.956 328.339,396.511 328.339,379.983C328.339,363.463 314.912,350.023 298.39,350.023C296.071,350.023 294.199,348.172 294.199,345.914C294.199,343.595 296.068,341.721 298.39,341.721C319.418,341.721 336.608,358.878 336.608,379.983C336.608,401.077 319.418,418.199 298.39,418.199C277.285,418.199 260.123,401.078 260.123,379.983L260.123,132.019C260.123,110.922 277.285,93.801 298.39,93.801C319.418,93.801 336.608,110.922 336.608,132.019Z" style="fill:rgb(0,131,192);fill-rule:nonzero;"/> + <path d="M348.435,391.578C369.488,391.578 386.653,374.398 386.653,353.291C386.653,348.839 385.926,344.423 384.387,340.253C383.578,338.087 381.215,336.945 379.037,337.747C376.912,338.482 375.778,340.868 376.605,343.044C377.777,346.321 378.351,349.825 378.351,353.289C378.351,369.814 364.975,383.267 348.435,383.267C343.435,383.267 338.592,382.061 334.294,379.716C332.264,378.633 329.735,379.37 328.624,381.388C327.546,383.426 328.273,385.935 330.288,386.997C335.863,390.011 342.138,391.578 348.435,391.578Z" style="fill:rgb(0,131,192);fill-rule:nonzero;"/> + <path d="M382.539,345.805C403.646,345.805 420.732,328.704 420.732,307.617C420.732,298.716 417.622,290.038 411.864,283.125C410.443,281.384 407.786,281.164 406.06,282.616C404.312,284.093 404.043,286.697 405.53,288.417C410.007,293.821 412.506,300.628 412.506,307.62C412.506,324.135 399.051,337.58 382.539,337.58C381.914,337.58 381.359,337.58 380.803,337.465C364.964,336.582 352.569,323.454 352.569,307.621C352.569,305.355 350.716,303.505 348.437,303.505C346.125,303.505 344.274,305.358 344.274,307.621C344.274,327.848 360.079,344.582 380.219,345.762C380.899,345.787 381.731,345.805 382.539,345.805Z" style="fill:rgb(0,131,192);fill-rule:nonzero;"/> + <path d="M297.75,311.734C300.092,311.734 301.938,309.873 301.938,307.618C301.938,295.901 311.397,286.442 323.114,286.442C334.803,286.442 344.275,295.901 344.275,307.618C344.275,309.876 346.126,311.734 348.438,311.734C350.719,311.734 352.57,309.873 352.57,307.618C352.57,291.385 339.33,278.142 323.115,278.142C306.874,278.142 293.654,291.385 293.654,307.618C293.654,309.875 295.5,311.734 297.75,311.734Z" style="fill:rgb(0,131,192);fill-rule:nonzero;"/> + <path d="M392.227,294.198C413.242,294.198 430.415,277.079 430.415,255.998C430.415,234.881 413.242,217.721 392.227,217.721C371.11,217.721 353.937,234.881 353.937,255.998C353.937,258.241 355.798,260.117 358.079,260.117C360.373,260.117 362.257,258.241 362.257,255.998C362.257,239.466 375.694,226.028 392.227,226.028C408.731,226.028 422.118,239.465 422.118,255.998C422.118,272.513 408.732,285.94 392.227,285.94C389.892,285.94 388.031,287.806 388.031,290.079C388.031,292.393 389.892,294.198 392.227,294.198Z" style="fill:rgb(0,131,192);fill-rule:nonzero;"/> + <path d="M405.029,228.559C406.107,228.559 407.233,228.098 408.063,227.23C414.765,220.108 418.492,210.818 418.492,200.995C418.492,179.888 401.312,162.784 380.228,162.784C379.982,162.784 379.665,162.784 379.358,162.792C361.228,163.053 345.64,175.149 343.4,190.908C341.867,201.714 334.716,212.622 322.213,212.622C319.886,212.622 318.053,214.486 318.053,216.805C318.053,219.058 319.886,220.927 322.213,220.927C337.366,220.927 349.178,209.317 351.594,192.078C353.447,179.181 367.358,171.234 379.7,171.04L380.23,171.032C396.734,171.032 410.19,184.472 410.19,200.992C410.19,208.662 407.292,215.971 402.003,221.58C400.441,223.249 400.493,225.83 402.167,227.389C402.984,228.188 404.005,228.559 405.029,228.559Z" style="fill:rgb(0,131,192);fill-rule:nonzero;"/> + <path d="M379.665,171.044C381.413,171.044 383.085,169.846 383.595,168.092C384.616,164.592 385.134,160.993 385.134,157.378C385.134,136.289 368.026,119.19 346.931,119.19C341.038,119.19 335.493,120.437 330.265,122.974C328.209,123.988 327.365,126.494 328.36,128.545C329.358,130.603 331.803,131.445 333.864,130.432C337.945,128.443 342.335,127.432 346.93,127.432C363.434,127.432 376.877,140.859 376.877,157.381C376.877,160.256 376.437,163.028 375.694,165.75C375.036,167.964 376.275,170.286 378.474,170.867C378.835,171.018 379.273,171.044 379.665,171.044Z" style="fill:rgb(0,131,192);fill-rule:nonzero;"/> + </g> + <g> + <rect x="252.236" y="0" width="7.511" height="28.063" style="fill:rgb(53,63,73);"/> + <path d="M199.072,6.387L206.455,4.8L212.271,32.282L204.924,33.83L199.072,6.387Z" style="fill:rgb(53,63,73);fill-rule:nonzero;"/> + <path d="M148.433,23.662L155.306,20.605L166.744,46.246L159.843,49.306L148.433,23.662Z" style="fill:rgb(53,63,73);fill-rule:nonzero;"/> + <path d="M102.499,51.085L108.553,46.669L125.062,69.394L118.977,73.81L102.499,51.085Z" style="fill:rgb(53,63,73);fill-rule:nonzero;"/> + <path d="M63.233,87.501L68.261,81.907L89.123,100.685L84.079,106.281L63.233,87.501Z" style="fill:rgb(53,63,73);fill-rule:nonzero;"/> + <path d="M32.403,131.246L36.164,124.739L60.476,138.77L56.716,145.334L32.403,131.246Z" style="fill:rgb(53,63,73);fill-rule:nonzero;"/> + <path d="M11.365,180.477L13.682,173.325L40.367,181.988L38.058,189.158L11.365,180.477Z" style="fill:rgb(53,63,73);fill-rule:nonzero;"/> + <path d="M1.007,232.996L1.78,225.475L29.682,228.442L28.906,235.912L1.007,232.996Z" style="fill:rgb(53,63,73);fill-rule:nonzero;"/> + <path d="M1.007,279.009L28.906,276.096L29.682,283.566L1.78,286.525L1.007,279.009Z" style="fill:rgb(53,63,73);fill-rule:nonzero;"/> + <path d="M11.365,331.538L38.058,322.883L40.367,330.015L13.682,338.685L11.365,331.538Z" style="fill:rgb(53,63,73);fill-rule:nonzero;"/> + <g transform="matrix(0.8661,-0.4999,0.4999,0.8661,-182.244,73.6972)"> + <rect x="32.397" y="373.243" width="28.071" height="7.527" style="fill:rgb(53,63,73);"/> + </g> + <g transform="matrix(0.743,-0.6693,0.6693,0.743,-260.139,158.394)"> + <rect x="62.142" y="414.165" width="28.068" height="7.524" style="fill:rgb(53,63,73);"/> + </g> + <path d="M102.499,460.913L118.985,438.213L125.062,442.609L108.573,465.331L102.499,460.913Z" style="fill:rgb(53,63,73);fill-rule:nonzero;"/> + <path d="M148.433,488.346L159.843,462.712L166.744,465.774L155.306,491.412L148.433,488.346Z" style="fill:rgb(53,63,73);fill-rule:nonzero;"/> + <path d="M199.072,505.669L204.924,478.188L212.271,479.775L206.455,507.197L199.072,505.669Z" style="fill:rgb(53,63,73);fill-rule:nonzero;"/> + <rect x="252.236" y="483.942" width="7.511" height="28.055" style="fill:rgb(53,63,73);"/> + <path d="M299.677,479.775L307.06,478.188L312.925,505.669L305.545,507.197L299.677,479.775Z" style="fill:rgb(53,63,73);fill-rule:nonzero;"/> + <path d="M345.302,465.774L352.147,462.712L363.565,488.346L356.678,491.412L345.302,465.774Z" style="fill:rgb(53,63,73);fill-rule:nonzero;"/> + <path d="M386.927,442.609L393.01,438.213L409.545,460.913L403.427,465.331L386.927,442.609Z" style="fill:rgb(53,63,73);fill-rule:nonzero;"/> + <g transform="matrix(0.6692,-0.7431,0.7431,0.6692,-166.397,462.098)"> + <rect x="432.046" y="403.908" width="7.514" height="28.058" style="fill:rgb(53,63,73);"/> + </g> + <path d="M451.521,373.248L455.267,366.748L479.592,380.759L475.826,387.272L451.521,373.248Z" style="fill:rgb(53,63,73);fill-rule:nonzero;"/> + <path d="M471.622,330.015L473.939,322.893L500.632,331.538L498.308,338.685L471.622,330.015Z" style="fill:rgb(53,63,73);fill-rule:nonzero;"/> + <path d="M482.31,283.584L483.083,276.116L510.99,279.009L510.219,286.525L482.31,283.584Z" style="fill:rgb(53,63,73);fill-rule:nonzero;"/> + <path d="M482.31,228.444L510.209,225.475L510.99,232.996L483.091,235.919L482.31,228.444Z" style="fill:rgb(53,63,73);fill-rule:nonzero;"/> + <path d="M471.622,181.993L498.308,173.325L500.632,180.477L473.96,189.158L471.622,181.993Z" style="fill:rgb(53,63,73);fill-rule:nonzero;"/> + <path d="M451.529,138.783L475.826,124.754L479.592,131.261L455.295,145.334L451.529,138.783Z" style="fill:rgb(53,63,73);fill-rule:nonzero;"/> + <path d="M422.895,100.685L443.741,81.907L448.756,87.501L427.918,106.281L422.895,100.685Z" style="fill:rgb(53,63,73);fill-rule:nonzero;"/> + <path d="M386.953,69.394L403.427,46.679L409.545,51.098L393.038,73.81L386.953,69.394Z" style="fill:rgb(53,63,73);fill-rule:nonzero;"/> + <path d="M345.302,46.239L356.678,20.621L363.565,23.662L352.17,49.298L345.302,46.239Z" style="fill:rgb(53,63,73);fill-rule:nonzero;"/> + <path d="M299.739,32.282L305.545,4.813L312.925,6.387L307.071,33.83L299.739,32.282Z" style="fill:rgb(53,63,73);fill-rule:nonzero;"/> + </g> +</svg> diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/svg/instagram.svg b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/svg/instagram.svg new file mode 100644 index 000000000..ae915113b --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/svg/instagram.svg @@ -0,0 +1 @@ +<svg width="32px" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg" fill-rule="evenodd" clip-rule="evenodd" stroke-linejoin="round" stroke-miterlimit="1.414"><path d="M8 0C5.827 0 5.555.01 4.702.048 3.85.088 3.27.222 2.76.42c-.526.204-.973.478-1.417.923-.445.444-.72.89-.923 1.417-.198.51-.333 1.09-.372 1.942C.008 5.555 0 5.827 0 8s.01 2.445.048 3.298c.04.852.174 1.433.372 1.942.204.526.478.973.923 1.417.444.445.89.72 1.417.923.51.198 1.09.333 1.942.372.853.04 1.125.048 3.298.048s2.445-.01 3.298-.048c.852-.04 1.433-.174 1.942-.372.526-.204.973-.478 1.417-.923.445-.444.72-.89.923-1.417.198-.51.333-1.09.372-1.942.04-.853.048-1.125.048-3.298s-.01-2.445-.048-3.298c-.04-.852-.174-1.433-.372-1.942-.204-.526-.478-.973-.923-1.417-.444-.445-.89-.72-1.417-.923-.51-.198-1.09-.333-1.942-.372C10.445.008 10.173 0 8 0zm0 1.44c2.136 0 2.39.01 3.233.048.78.036 1.203.166 1.485.276.374.145.64.318.92.598.28.28.453.546.598.92.11.282.24.705.276 1.485.038.844.047 1.097.047 3.233s-.01 2.39-.05 3.233c-.04.78-.17 1.203-.28 1.485-.15.374-.32.64-.6.92-.28.28-.55.453-.92.598-.28.11-.71.24-1.49.276-.85.038-1.1.047-3.24.047s-2.39-.01-3.24-.05c-.78-.04-1.21-.17-1.49-.28-.38-.15-.64-.32-.92-.6-.28-.28-.46-.55-.6-.92-.11-.28-.24-.71-.28-1.49-.03-.84-.04-1.1-.04-3.23s.01-2.39.04-3.24c.04-.78.17-1.21.28-1.49.14-.38.32-.64.6-.92.28-.28.54-.46.92-.6.28-.11.7-.24 1.48-.28.85-.03 1.1-.04 3.24-.04zm0 2.452c-2.27 0-4.108 1.84-4.108 4.108 0 2.27 1.84 4.108 4.108 4.108 2.27 0 4.108-1.84 4.108-4.108 0-2.27-1.84-4.108-4.108-4.108zm0 6.775c-1.473 0-2.667-1.194-2.667-2.667 0-1.473 1.194-2.667 2.667-2.667 1.473 0 2.667 1.194 2.667 2.667 0 1.473-1.194 2.667-2.667 2.667zm5.23-6.937c0 .53-.43.96-.96.96s-.96-.43-.96-.96.43-.96.96-.96.96.43.96.96z" fill="#8d99ae"/></svg> diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/svg/javascript.svg b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/svg/javascript.svg new file mode 100644 index 000000000..b0e2f5b0d --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/svg/javascript.svg @@ -0,0 +1,24 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Generator: Adobe Illustrator 17.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1 Basic//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11-basic.dtd"> +<svg version="1.1" baseProfile="basic" + id="svg2" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="80px" height="100px" + viewBox="0 0 80 100" xml:space="preserve"> +<path d="M57.537,44.892c-2.836,0.225-5.214,1.245-6.984,3.001c-1.823,1.808-2.693,4.013-2.693,6.812c0,4.186,1.718,7.112,5.551,9.43 + c0.975,0.585,2.303,1.223,4.599,2.213c3.128,1.343,4.291,1.98,5.034,2.776c0.915,0.983,1.17,2.551,0.593,3.751 + c-0.113,0.233-0.405,0.623-0.668,0.885c-0.885,0.893-2.281,1.365-4.013,1.365c-2.926,0-5.109-1.2-6.864-3.796 + c-0.24-0.345-0.458-0.63-0.488-0.63c-0.068,0-5.776,3.293-5.896,3.406c-0.075,0.068-0.015,0.225,0.278,0.705 + c2.281,3.841,5.844,6.091,10.66,6.737c1.26,0.173,3.623,0.165,4.831,0c3.031-0.428,5.304-1.433,7.067-3.143 + c1.875-1.808,2.798-4.149,2.798-7.082c0-1.875-0.308-3.338-1.005-4.786c-0.48-0.99-0.96-1.658-1.785-2.498 + c-1.583-1.605-3.631-2.821-7.719-4.576c-3.091-1.328-4.126-1.898-4.809-2.626c-0.653-0.698-0.93-1.515-0.87-2.536 + c0.053-0.81,0.278-1.358,0.773-1.89c0.713-0.773,1.538-1.095,2.813-1.088c1.448,0,2.386,0.375,3.338,1.335 + c0.338,0.33,0.773,0.863,0.975,1.185c0.233,0.368,0.405,0.57,0.465,0.548c0.195-0.083,5.649-3.608,5.649-3.661 + c0-0.03-0.278-0.465-0.615-0.975c-0.72-1.08-2.018-2.431-2.911-3.023c-1.65-1.095-3.413-1.658-5.739-1.83 + C58.76,44.81,58.61,44.81,57.537,44.892z M34.184,58.523l-0.023,13.263l-0.165,0.623c-0.218,0.818-0.473,1.305-0.923,1.755 + c-0.63,0.63-1.44,0.893-2.791,0.9c-1.928,0.008-3.083-0.81-4.426-3.106c-0.218-0.36-0.413-0.653-0.435-0.645 + c-0.03,0.015-1.388,0.833-3.016,1.815l-2.963,1.8l0.225,0.45c1.343,2.678,3.668,4.704,6.467,5.634 + c2.956,0.983,6.752,0.893,9.535-0.225c3.338-1.35,5.296-4.141,5.814-8.29c0.045-0.42,0.075-5.109,0.075-13.931V45.268h-3.676h-3.668 + L34.184,58.523z M8.858,12.252h62.284c3.667,0,6.619,2.952,6.619,6.619v62.284c0,3.667-2.952,6.619-6.619,6.619H8.858 + c-3.667,0-6.619-2.952-6.619-6.619V18.871C2.239,15.204,5.191,12.252,8.858,12.252z"/> +</svg> diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/svg/json.svg b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/svg/json.svg new file mode 100644 index 000000000..d2ba6d0fc --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/svg/json.svg @@ -0,0 +1,7 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<svg width="100%" height="100%" viewBox="0 0 40 40" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:1.41421;"> + <g transform="matrix(1.25131,0,0,1.25131,3,0)"> + <path d="M0.25,0C0.112,0 0,0.113 0,0.25L0,16L26,16L26,8L18.25,8C18.112,8 18,7.887 18,7.75L18,0L0.25,0ZM19,0L19,7L26,7L19,0ZM9.5,19.063C8.737,19.063 8.112,19.251 7.625,19.594C7.141,19.935 6.906,20.365 6.906,20.907C6.906,21.311 7.005,21.665 7.219,21.938C7.435,22.209 7.792,22.404 8.282,22.563C8.496,22.633 8.727,22.704 8.97,22.751C9.215,22.795 9.439,22.855 9.658,22.907C9.866,22.956 10.02,23.032 10.127,23.126C10.236,23.217 10.283,23.311 10.283,23.439C10.283,23.577 10.265,23.681 10.189,23.752C10.116,23.822 10.022,23.893 9.908,23.94C9.814,23.976 9.681,23.987 9.533,24.003C9.385,24.019 9.28,24.034 9.189,24.034C8.835,24.034 8.449,23.979 8.064,23.846C7.681,23.713 7.343,23.5 7.033,23.252L6.877,23.252L6.877,24.658C7.189,24.788 7.52,24.885 7.877,24.971C8.236,25.054 8.645,25.096 9.127,25.096C9.96,25.096 10.611,24.922 11.096,24.565C11.583,24.206 11.846,23.763 11.846,23.19C11.846,22.789 11.716,22.44 11.502,22.19C11.291,21.937 10.979,21.742 10.533,21.596C10.306,21.523 10.106,21.481 9.908,21.44C9.713,21.398 9.497,21.359 9.283,21.315C8.957,21.247 8.744,21.146 8.627,21.065C8.51,20.982 8.439,20.875 8.439,20.721C8.439,20.619 8.491,20.518 8.564,20.44C8.637,20.359 8.712,20.323 8.814,20.284C8.929,20.237 9.035,20.206 9.158,20.19C9.283,20.172 9.408,20.159 9.533,20.159C9.887,20.159 10.257,20.219 10.596,20.347C10.937,20.472 11.205,20.628 11.44,20.816L11.596,20.816L11.596,19.472C11.323,19.36 11.002,19.264 10.627,19.191C10.255,19.115 9.885,19.066 9.502,19.066L9.5,19.063ZM15.531,19.063C14.596,19.063 13.843,19.331 13.312,19.876C12.781,20.418 12.531,21.16 12.531,22.095C12.531,23.022 12.781,23.767 13.312,24.314C13.843,24.858 14.596,25.127 15.531,25.127C16.468,25.127 17.187,24.859 17.719,24.314C18.25,23.767 18.531,23.022 18.532,22.095C18.532,21.16 18.253,20.418 17.719,19.876C17.185,19.332 16.464,19.064 15.531,19.063L15.531,19.063ZM2.937,19.188L2.937,20.251L4.281,20.251L4.281,22.564C4.281,22.801 4.258,23.004 4.25,23.158C4.242,23.309 4.216,23.437 4.156,23.564C4.093,23.694 3.992,23.804 3.843,23.877C3.697,23.95 3.491,24.002 3.218,24.002C3.007,24.002 2.822,23.979 2.687,23.939C2.552,23.897 2.437,23.861 2.312,23.814L2.156,23.814L2.156,24.97C2.336,25.006 2.544,25.046 2.781,25.064C3.018,25.085 3.294,25.095 3.562,25.095C3.958,25.095 4.263,25.059 4.531,24.97C4.799,24.879 5.028,24.728 5.219,24.564C5.399,24.41 5.534,24.223 5.625,24.001C5.716,23.777 5.781,23.537 5.781,23.282L5.781,19.188L2.937,19.188L2.937,19.188ZM19.656,19.188L19.656,25.001L21.031,25.001L21.031,21.001L23.5,25.001L24.938,25.001L24.938,19.188L23.563,19.188L23.563,22.501L21.469,19.188L19.656,19.188ZM15.531,20.157C15.718,20.157 15.89,20.18 16.062,20.251C16.236,20.321 16.398,20.439 16.531,20.595C16.661,20.746 16.763,20.944 16.844,21.189C16.925,21.434 16.969,21.746 16.969,22.095C16.969,22.421 16.946,22.697 16.875,22.939C16.805,23.179 16.677,23.387 16.531,23.564C16.401,23.72 16.237,23.832 16.062,23.908C15.888,23.981 15.723,24.033 15.531,24.033C15.338,24.033 15.143,23.981 14.968,23.908C14.794,23.835 14.661,23.718 14.53,23.564C14.4,23.41 14.267,23.212 14.186,22.97C14.108,22.725 14.092,22.441 14.092,22.095C14.092,21.756 14.136,21.444 14.217,21.189C14.3,20.931 14.399,20.741 14.53,20.595C14.671,20.439 14.832,20.319 14.999,20.251C15.168,20.183 15.34,20.157 15.53,20.157L15.531,20.157ZM0,28.001L0,31.752C0,31.89 0.112,32.002 0.25,32.002L25.75,32.002C25.888,32.002 26,31.89 26,31.752L26,28.001L0,28.001L0,28.001Z" style="fill-rule:nonzero;"/> + </g> +</svg> diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/svg/link-ext.svg b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/svg/link-ext.svg new file mode 100644 index 000000000..ba9400b7f --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/svg/link-ext.svg @@ -0,0 +1,3 @@ +<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="{{ .size }}" height="{{ .size }}" viewBox="0 0 32 32" class="fill-current v-base" aria-label="External Link"> +<path d="M25.152 16.576v5.696q0 2.144-1.504 3.648t-3.648 1.504h-14.848q-2.144 0-3.648-1.504t-1.504-3.648v-14.848q0-2.112 1.504-3.616t3.648-1.536h12.576q0.224 0 0.384 0.16t0.16 0.416v1.152q0 0.256-0.16 0.416t-0.384 0.16h-12.576q-1.184 0-2.016 0.832t-0.864 2.016v14.848q0 1.184 0.864 2.016t2.016 0.864h14.848q1.184 0 2.016-0.864t0.832-2.016v-5.696q0-0.256 0.16-0.416t0.416-0.16h1.152q0.256 0 0.416 0.16t0.16 0.416zM32 1.152v9.12q0 0.48-0.352 0.8t-0.8 0.352-0.8-0.352l-3.136-3.136-11.648 11.648q-0.16 0.192-0.416 0.192t-0.384-0.192l-2.048-2.048q-0.192-0.16-0.192-0.384t0.192-0.416l11.648-11.648-3.136-3.136q-0.352-0.352-0.352-0.8t0.352-0.8 0.8-0.352h9.12q0.48 0 0.8 0.352t0.352 0.8z"></path> +</svg> diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/svg/link-permalink.svg b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/svg/link-permalink.svg new file mode 100644 index 000000000..f5de52d02 --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/svg/link-permalink.svg @@ -0,0 +1 @@ +<svg class="grow" fill="{{ .color }}" height="{{ .size }}" viewBox="0 0 24 24" width="{{ .size }}" xmlns="http://www.w3.org/2000/svg"><path d="M0 0h24v24H0z" fill="none"/><path d="M3.9 12c0-1.71 1.39-3.1 3.1-3.1h4V7H7c-2.76 0-5 2.24-5 5s2.24 5 5 5h4v-1.9H7c-1.71 0-3.1-1.39-3.1-3.1zM8 13h8v-2H8v2zm9-6h-4v1.9h4c1.71 0 3.1 1.39 3.1 3.1s-1.39 3.1-3.1 3.1h-4V17h4c2.76 0 5-2.24 5-5s-2.24-5-5-5z"/></svg> diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/svg/md.svg b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/svg/md.svg new file mode 100644 index 000000000..f1a794565 --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/svg/md.svg @@ -0,0 +1,4 @@ +<svg id="markdown" xmlns="http://www.w3.org/2000/svg" width="208" height="128" viewBox="0 0 208 128"> + <rect width="198" height="118" x="5" y="5" ry="10" stroke="#000" stroke-width="10" fill="none" /> + <path d="M30 98v-68h20l20 25 20-25h20v68h-20v-39l-20 25-20-25v39zM155 98l-30-33h20v-35h20v35h20z" /> +</svg> diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/svg/mdsolid.svg b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/svg/mdsolid.svg new file mode 100644 index 000000000..d0d9ae938 --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/svg/mdsolid.svg @@ -0,0 +1,7 @@ +<?xml version="1.0" encoding="utf-8"?>
+<!-- Svg Vector Icons : http://www.onlinewebfonts.com/icon -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 1000 1000" enable-background="new 0 0 1000 1000" xml:space="preserve">
+<metadata> Svg Vector Icons : http://www.onlinewebfonts.com/icon </metadata>
+<g><g><path d="M919.3,193.8H80.7c-39,0-70.7,31.7-70.7,70.7v471.2c0,39,31.7,70.7,70.7,70.7h838.7c39,0,70.7-31.7,70.7-70.7V264.4C990,225.5,958.3,193.8,919.3,193.8z M561.3,683.6l-122.5,0.1V500l-91.9,117.8L255,500v183.8H132.5V316.3H255l91.9,122.5l91.9-122.5l122.5-0.1V683.6z M744.1,714.3L591.9,500h91.9V316.3h122.5V500h91.9L744.1,714.3z"/></g></g>
+</svg>
\ No newline at end of file diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/svg/newlogo.svg b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/svg/newlogo.svg new file mode 100644 index 000000000..83b706383 --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/svg/newlogo.svg @@ -0,0 +1,35 @@ +<svg width="100%" height="100%" viewBox="0 0 700 320" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:1.41421;"> + <g transform="matrix(1.11154,0,0,1.62547,-29.7315,-55.1715)"> + <g> + <path d="M119.631,38.891L203.822,75.478L203.822,190.045L119.631,225.859L35.578,190.045L35.578,75.478L119.631,38.891Z" style="fill:rgb(201,23,126);stroke:rgb(201,23,126);stroke-width:5.03px;"/> + </g> + </g> + <g transform="matrix(0.805784,0,0,0.805784,-303.818,-0.0857045)"> + <g transform="matrix(1,0,0,1,-0.336377,-0.753301)"> + <g transform="matrix(1.24103,-0,-0,1.24103,377.383,0.859662)"> + <use xlink:href="#_Image1" x="33.352" y="77.152" width="139.936px" height="165.695px" transform="matrix(0.999541,0,0,0.998163,0,0)"/> + </g> + </g> + <g transform="matrix(1,0,0,1,5.68099,0)"> + <g transform="matrix(1.24103,-0,-0,1.24103,371.366,0.106362)"> + <use xlink:href="#_Image2" x="209.466" y="77.759" width="141.328px" height="169.408px" transform="matrix(0.995268,0,0,0.996518,0,0)"/> + </g> + </g> + <g transform="matrix(1,0,0,1,-10.8148,5.68434e-14)"> + <g transform="matrix(1.24103,-0,-0,1.24103,387.862,0.106362)"> + <use xlink:href="#_Image3" x="361.636" y="73.814" width="153.86px" height="173.353px" transform="matrix(0.999089,0,0,0.996283,0,0)"/> + </g> + </g> + <g transform="matrix(1,0,0,1,-23.8451,5.68434e-14)"> + <g transform="matrix(1.24103,-0,-0,1.24103,400.892,0.106362)"> + <use xlink:href="#_Image4" x="527.275" y="73.814" width="162.91px" height="173.353px" transform="matrix(0.999449,0,0,0.996283,0,0)"/> + </g> + </g> + </g> + <defs> + <image id="_Image1" width="140px" height="166px" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIwAAACmCAYAAAAI92duAAAACXBIWXMAAA7EAAAOxAGVKw4bAAACAUlEQVR4nO3cMU1AQRBF0V1Cjw6MUNGiBGSAAxzgAAeoGlpCaG61n+QcBa+4yXSzZ2bWtbzsvd9Oj7iCmXlea72e3vHTzekB/C+CIREMiWBIBEMiGBLBkAiGRDAkgiERDIlgSARDIhgSwZAIhkQwJIIhEQyJYEgEQyIYEsGQCIZEMCSCIREMiWBIBEMiGBLBkAiGRDAkgiERDIlgSARDIhgSwZAIhkQwJIIhEQyJYEgEQyIYEsGQCIZEMCSCIREMiWBIBEMiGBLBkAiGRDAkgiERDIlgSARDIhiS29MD/nA/M4+nR1zE/ekBv+2ZmdMj+D+cJBLBkAiGRDAkgiERDIlgSARDIhgSwZAIhkQwJIIhEQyJYEgEQyIYEsGQCIZEMCSCIREMiWBIBEMiGBLBkAiGRDAkgiG54ruPj7XW5+kRF/Gw1no6PeKnKwbztfd+Pz3iCmbmbl0sGCeJRDAkgiERDIlgSARDIhgSwZAIhkQwJIIhEQyJYEgEQyIYEsGQCIZEMCSCIREMiWBIBEMiGBLBkAiGRDAkgiERDIlgSARDIhgSwZAIhkQwJIIhEQyJYEgEQyIYEsGQCIZEMCSCIREMiWBIBEMiGBLBkAiGRDAkgiERDIlgSARDIhgSwZAIhkQwJIIhEQyJYEgEQyIYEsGQCIZEMCSCIREMiWBIBEPyDVStGK01MBbEAAAAAElFTkSuQmCC"/> + <image id="_Image2" width="142px" height="170px" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAI4AAACqCAYAAAB7wHcoAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAIF0lEQVR4nO3dbYxcVR3H8W/XhyoPVo1woD4EEU19gKAhPSZGI+gLEeoLwVhtNBgRYgRNkxqJxhtyYtQ0MaHRF0raRCuiiST4SAwWEa2QQ7WGUjVItAYEcqRYNdluLdj1xb3bbqd3dnf+OzPn3Onvk9ywDzO7f8KXmTv3nrm7IrpqlrJs8ylcnXuIkkRXbQU+mnuO+aZyDyDdpHDEROGIicIRE4UjJgpHTBSOmCgcMVE4YqJwxEThiInCEROFIyYKR0wUjpgoHDFROGKicMRE4YiJwhEThSMmCkdMFI6YKBwxUThionDEROGIicIRE4UjJgpHTBSOmCgcMVE4YqJwxEThiInCEROFIyYKR0wUjpgoHDFROGKicMRE4YiJwhEThSMmCkdMFI6YKBwxUThionDEROGIicIRE4UjJgpHTBSOmCgcMVE4YqJwxEThiInCEROFIyYKR0wUjpgoHDFROGKicMRE4YiJwhEThSMmCkdMFI6YKBwxUThionDEROGIicIRE4UjJgpHTBSOmCgcMVE4YqJwxEThiInCEROFIyYKR0wUjpgoHDFROGKicMRE4YiJwhEThSMmCkdMFI6YKBwxUThionDEROGIicIRE4UjJgpHTKaA2dxD9FiRe4AClfY/+OwUcCj3FD1OyT1AgU7PPUCPmSlgJvcUPU7NPUCBXpB7gB4KpyNKC+egwukGPVUtgcI5UWmPOAqnI0oLp8inqjNyD1CgIp+qpnNP0eO06CrF04iuOpXyjuNMTwFP5J6ixbm5ByjIS3MP0OLxKeDR3FO0UDjHvDH3AC0eKTWcV+UeoCAX5h6gRbHh6BHnmBLDebTUcM7LPUBBSgyn2Eectc2riZNadJUDzso9R48jwGNTPoVp4EDuaXqsBN6Ze4gClPhok3wKh+eOD/wl6yjtLss9QAEuyj1Ai4fh2IGl3RkH6UfhwPrcA7TYBcfC+W3GQfpZHV1V4jGMsYiuugh4Q+45WtwPZYcDsC73ABldlXuAPo57xNlLeUtIAa6LrlqVe4hxi656LvCB3HO02O9T2AdNOD6Fp4E9WUdqdwbw+dxDZPAe4MW5h2ixa+6D+WddS326+mR01atzDzFmH8k9QB+t4dybYZCleA7wldxDjEt01buAd+eeo49fz30wP5yfAf8b/yxLsi66auIPCEZXnQ7cnHuOPv4F3DP3ydFwfApPATtzTLREN0dXlbg2ZZg2Ay/PPUQfP232hYETV5b9cMzDDOKVwC+iq87OPcgoRFe9Hbg29xwLuH3+J10KB+A1wF3Nyb+J0TxFbaXctz8fot6VOeq4cHwKf6U+plOy11LHMxHrkqOrXgH8hrIXr93ZnAw/qm0R9A/GNMxyvB7Y0fWnreiqtUAEzs89yyJu7/1CWzjbKe8KFm0uAP4UXXV9dNWzcg8zqOiqK4FfUt56m14HgO/3frH1OTW66id06+z0buDjPoX7cw+ymGZ/ZhP1EfFS92nm2+xT+EzvF5/d58Zb6FY4bwLui67aCtzgUyhtYRrNoYRPAdcAXTn/9gzw1bZv9C0+uuoPwOtGNdEIPQncBHzLp/BY7mGiqy6gfoRZT30UvEu+61P4YNs3FgrnWuDrIxtp9I4AdwLfBO7yKewfxy9tzuavBd4MXNxsXbXWp7Cr7RsLhXMK9UL2Es/SDmoWeIj6yPhOYB+wv9me8imYTrU0yx/WUEcyt62hG/sui9npU3hrv28u+C8YXfVp6sPgk2yW+jzM/pZtinp/ZBXwwp5/rgKel2HecZgF3uJTuK/fDfrtHM/ZAlxNfcR2Uq0AXtRsJ9vyjX62LxQNLHIVBJ/CYWDjUEeS0v0bOOHld69FL5/hU7gDuGMYE0kn3OhTSIvdaKnXXdkIHF7ePNIBe4GvLeWGSwrHp/BnJn8n+WT3NHCNT+GZpdx4kCs93Uh9bkUm06bFdojnG+h4Q7MO5vdAp89Kywlu9SlsGOQOA11brtlpWk99DkMmw17gY4PeaeCLEvoUfgV8btD7SZH+A7zXp3Bw0DuarmbpU9gM3GK5rxRjBrjSp/Cw5c7LuQzqVcCty7i/5DMDrPMp/Nz6A5Z1Mq5Zefdtynyfs7Q7CFzuU7h7OT9k2WdxFU+nTAOX+RTuWfSWi1j2FbubJQkfQvs8pfsncOkwooEhrxuJrtoEfBno3OLxCbcbuMKn8Ldh/cChLziKrroY+B5w5rB/tphsA67zKQz1+kcjWakWXfUy4DbAj+Lny5Icog5m2yh++Ej+KolP4e/A26gXjR8Zxe+QBe2hXsE3kmhgDGtjm4sgfoP6LSwyWtPUJ6NvWupZbquxLKpuXrJ/AvgC5f3RrknxI+B6n8Ij4/hlY12NH121mvrp633j/L0Tbh+w0acw1iuNZHkbR3TVhcBngSso76+/dcVDwJeA74z6aalN1vf/RFetAW4ANrD4Oy6k9gDwReA2n0K2Fx5FvHEsuuoc6rfJbqB+35Ic7whwN7DFp/Dj3MNAIeHMia5aCVwOfBi4lO6913rY/kh9HvCW5hBHMYoKZ77oqpcA76c+D7aWgmcdsn9QH3nf7lP4Xe5h+unEf4zoqjOBS6j/htU7gHOyDjRcB6mvH7yj2R7wKRR/YatOhNMruupc6oAuoT6weB7deXV2AHiQ+uIHO4B7fQr/zTvS4DoZTq/oqudTX8vn/J4t52XSDlO/ZN5DHcoe4MHS9lWsJiKcfpqgzm621T0fnwWcRn3FibZtJfWrmUN9thnqR48ngMfnbXOfP9mFpxyr/wN2GKixWgNJfgAAAABJRU5ErkJggg=="/> + <image id="_Image3" width="154px" height="174px" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAJoAAACuCAYAAADOFBSsAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAPeklEQVR4nO2de9BdVXmHnxxukcRCkLIGvBAkXGwJCUq6UNQEqjSlFWihUUlJQShjVYq1QqGUBS4YRKhjplyGiuCAwnQYJQaQKEa5FmfJRSXcWm9EinZhMIFY7iH9Y+2TnJzv3M/e+117f+uZ2XPyneyz1+98+eVd93dNIbEFTplpwCxgr+x6M/B6YDowre21+eepwLPAM8Caltc1Hd5rvv5Ge7uxrO8lzRRpAVI4ZXYGDgb2ZbOpZgG7lSRhHXAvcA9wN3Cf9valksounUljNKfMDGA+cEh27Udc3/8l4D6C6e4G7tXePisrKT9i+kXnilNmKvA+NhtrDtAQFTUcrwGrCKa7B/ie9vY3spJGp3ZGc8ocBBwPfBDYUVZNrrwKfBu4FlhetWq2FkZzyuwKLAH+BnibsJwyWAfcAFyrvf1PaTGDUFmjOWW2Av4C+AhwGLCVrCIxHgIuAv5De7tBWkw3Kmc0p0wD+BBggH2E5cTEL4DPA1drb1+QFtNOZYzmlJkCLALOYXJUj6PyNLAUWBqT4aI3WmawowkG209YTpVYDZyuvb1BWghEbjSnzALC/845wlKqzJ3AqdrbH0uKiNJoTpkdgH8FTiRSjRVjA3AlcIbUIHB0/4hOmSOByylvKmgysRpYor29q+yCozGaU0YBlwB/Ja2l5rxGGA4x2ttXyio0CqM5ZY4jtMV2ktYyiXgAWKy9/a8yChM1mlNmW+BS4G8ldUxinidUpV8vuiAxozlldgFuJCzVScixkdBJuKjIQkSM5pR5B7CMsKgwEQdfAv5Oe/tqEQ8v3WhOmWMJX+p1ZZed6MtK4JgihkBKM1o2wn8hcHpZZSZG4ofAodrbdXk+tMyFgJeTTFYFDgBWOGWm5/nQUozmlLkE+GgZZSVy4SDgZqdMbs2bwo3mlPkC8Imiy0nkzgLgxmwIamwKNZpT5mLgk0WWkSiUhcB1Wft6LAozmlPmAuDTRT0/URrHAGeM+5BCep1OmTOAzxbx7IQIG4CF2tuVoz4gd6M5ZQ4HbqZaW9sS/VkDvF17++QoH87VaE6ZWYRNsHXa5pbYzH3Ae0bZ6pdb1MlyViwjmazOzAM+N8oH86zevkxa0z8ZOMUpo4f9UC5Vp1PmNMJiusnARuB3wPqW6wVCxqGdsivXUfUIWQW8Y5iFk1uPW2K2gaSOPcwngUfbrseBtf3STTlltgFmEEy3L/DO7DqQeiwmmA2cBlww6AfGimhOme2Bh4E9xnlOJLwM3EXoMd+ivf153gVkBpwDvAs4Fhi6CoqIF4H9tbc/GeTmcSPaeVTfZCuBfwe+rb1dX2RBWVVzf3b9m1NmLmEOeDHVq26nAlcAfzzIzSNHNKfMPOD7VDPnxQbga8BF2tsHpcVkKyUWE2ZSZgnLGZZDtbe397tpJKNlVcD9wP6jfF6QjYTe8fna219Ii2nHKbMdcBbwT0Auk9klcKf2dkG/m0Y12lnA+aN8VpDHgJO1t/dIC+mHU2ZfQnX+XmktA3KI9vaOXjcMPY6W/RLOHlWRAC8B5wJzq2AyAO3t44RlOicShk9i59x+Nwwd0ZwyKxmwARgBTwBHSeedGAenzNuBFcAu0lr60DOqDRXRnDKHUB2T3Q4cWGWTAWSdlXcT0hnEzGm9/nLYqvO8MYSUyaXAYdrbZ6SF5EE2VnUw8Ii0lh78SZbWoiMDG80ps5BqbPY9U3t7SlH7E6XQ3j5F6Bw8IK2lC1sRBqE7MkxEs+NrKRyrvb1QWkRRaG9/S1jxGuv5A8d1+4uBjJalkpqXm5xiuFh7e460iKLR3j4BnCStowsHOGU6ruDpa7RsY0Ls0exK7e2k2TOqvf0a8EVpHV3oGNUGiWhHEfcMwP1Mzu18nyTOzsGiTm8OYrSP5ywkT9YBi7S3L0sLKZss4/axhMR6MTHTKTOz/c2eRnPK7AkcWpSiHDghxjnLstDePkRYHBAbC9rf6BfRTiaSrJAd+JL29hvSIiLgfMJigZiY3/5GV6NlKzSOL1LNGDxPODll0qO9XQXcJK2jjcGNRjhnKdb5taXa219Li4iI2GZs9nDKvKX1jV5GO7lgMaPyDCNu+aor2tsHgG9J62hji6jW0WjZRuBYOwEXaG+fkxYRIZdKC2hjdusP3SLaccTZCfglcJm0iEj5LvB/0iJa2Lv1h25GO6IEIaNgqnbybllob18EviOto4W9Wn+YYDSnzJuAuaXJGZxVwFekRUTOcmkBLeyZna0KdI5of16imGE4U3sb2yh4bNxCPDMF29GS3r+T0T5QnpaBWa29/aa0iNjR3q4hbIGMhU3V5xYbiLOd5zH2Ngs/QqZGXA6slRaRsSmQte9Ufx9hB3JsJKMNiPb2euB6aR3ttFedMbbPniKu6iAxAu1GWyiiojfL+mXvScTPJqM5ZXYlzkPAYlwGkxiS1oh2oJiK7jwN3C0tIjE+rUaLcfPJsjR2Vg9ij2ipt1kTYo5o6whpDRI1oAGQbSbYWVbKBH5Ut93mk5lmRIux2nxYWkAiP2I22ippAYn8aBptH1EVnUlGqxFNo72l513ls5FUddaKptF2F1UxkdVFp2JPlEsjWxr0BmkhbaRqs2Y0iC+aQTJa7WgQX/sMktFqRzJaohRirTp/KS0gkS8N4luD9hrhPMxEjWgAvyctoo31aUVt/dga2F5aRBuxZpweCKfMqcQ5pSdKjEaregKXBYS8v4kWGsRntEpHtERnGsR3xnfVI1qiAymiJUohRqOliFZDYjRaimg1JLXREqXQADZIi2hjG2kBifxpEHL2x8QO0gIS+ROj0XaUFpDInxiNliJaDUlGS5RCMlqiFJLREqWQjJYohQZxHesCyWi1pAHEdhzhNk6Z2GYrEmPSAFZLi+jAG6UFJPKlATwhLaID+0sLSORLrBFtjrSARL7EarQU0WpGQ3v7DPH1PFNEqxnNtFWxRbWZTpnXS4tI5EesRptCqj5rRdNoPxVV0ZlUfdaIptEeEFXRmRTRakTzvM4fiKroTFUj2krgt9IiWpgCnBCDCLJD1tcSV8KXF4Gdtbex9YgrhVNmD+Dn0joaANnBXrFVn1OJ83z3qvE2aQGw5VlQMVafi6QF1IA/kBYAWxrtPjEV3flTp8x0aREVJ0W0AZgKHCEtouLEZTTt7ZPEtzYNUvU5LnEZLeNbIip6szBNR42GU2ZXItkn2260m0VU9GY74EhpERUlio4ATDTabYTxq9j4oLSAinKYtIAmWxgtGxz9npCWXhzmlInthOQqcLS0gCbtEQ3gptJV9Gdb4CxpEVXCKXMAsKe0jiadjHYz4bzM2PiYU+at0iIqxDHSAlqZYDTt7a+IbzoKQlS7QFpEhYjbaBnLS1UxOIucMn8kLSJ2nDKzgb2ldbTSzWjXEF8mSAirTS6WFlEBoopm0MVo2SzBipK1DMp7nTJpWqoL2YnSJ0nraKdbRAO4ojQVw3OhU2YraRGR8o/AbtIi2ulltBXEuYsdwvxddP9rpXHKKOB0aR2d6Gq0bDHklSVqGZbPOmVmSouIjM8AUS6r6hXRAK4CXilDyAjMAG5wymwrLSQGnDJRR/meRtPeeuAbJWkZhXnAF6RFRMLngGjbrf0iGsDSwlWMx8ecMsdKi5Ak+/5R76+YMshNTpkVwMKCtYzDy8BR2ttYh2QKwynzHsIWv6ibEINENAgT2jHOfzbZFrjRKfN+aSFl4pTZm9C0idpkMKDRtLcPAjcWrGVcpgLLnTLzpYWUQbZs6lZgJ2ktgzBoRAM4G3itKCE58Trgm06ZaNZhFYFTZiphPjqaZUD9GKiN1sQpcw2wpCAtebKRsNLjbO1tzFX+0Dhl3gB8lbjbzBMYJqIBnEu842qtTCG0K29yysSU5mEssob/j6iYyWDIiAbglFkKnFqAlqL4GfBR7e1KaSGjkuVGOQs4h4jHynoxitGmA6uAmbmrKZavAJ/S3q6RFjIM2Za5rwKHSmsZh6GNBpANI9yWs5YyWEOYdL5WexvjertNZHtZTwLOBH5fWM7YjGQ0AKfMVcBHctRSJk8Anweu1t5GdRaWU2Z3QtPkROJKIzYW4xhtB+BRIlz7NARrgMuAL2Z7JcRwyhwEfAr4SyraDuvFyEYDcMp8gDi35w3LRuBB4BbCLrAHix4Wccq8ETgYeBcwH5hbZHnSjGU0AKfM9cCHc9ASE78C7gQeI0TtR4GfaG9fHeVhWXtrT4KxmubaPR+p1SAPo+1ISHm11/hyouYVQvbytcD6tut5QntqRsu1U/a6I5tzBU9axjYabFp054CU9SfRkWFnBjqivX0M+GviXuGRECQXowFob28ijFwnEhPIzWgZ5wNfz/mZiRqQSxutFafMNOD7wOy8n52oLnlHtGaOtcMJk9mJBFBARGvilHkTcAcVWpyXKI7cI1oT7e3/AAuI8+S8RDg6c11ZhRVmNNhktkNIZouNZ4E/A+4vq8BCjQYpskXIq8Ax2ttHCPO7pVC40QC0t08RzPZoGeUletK62ri0zJ6lGA02me0gYFlZZSYmcKH29qqWn+sV0Zpob9cTUpL/C/Fv3asbNwD/3PbezwjttcIpbHijH06Zw4HriOQImZpzK3C09nbCYSVOmdsJzZpCKTWitaK9vZWQDegRKQ2ThOuAIzuZLKOUdpqY0QC0tz8ltNuukdRRYy4BjuuzYLOUdppY1dlOtrPqCiAdWpEP52pvP9PvJqfMPsDjRYsRjWitaG+/A+wHXEQY60mMxkbgE4OYLOO/CauECyWaiNaKU2YOIX/uPGktFcMDJwybJ84pczfw7mIkBaKJaK1ob39MaLv9AyV1v2vALcDsEZMRFt4hiDKitZLtHz2VYLo0FDKRF4BPa28vH/UBTpklFNwhi95oTTLD/T3BcDOE5cTCD4HF2Z6NkXHK/CHwcD6SOlMZozXJ0lCdQtjVXYlshwXwJHAe8OVR95q2kp1C8xyw/bjP6kbljNakJQnK8cD+smpK49eEBINXam9fyvPBTpl7gXfm+cxWKmu0VpwycwmZKBcDuwjLKYI1hHMELtPevlBEAU6ZS4GPF/FsqInRmjhltiZkQ1wCHAFsJ6toLDYQUoNdAyzvMYWUC06ZE4Cri3p+rYzWilNmBmEV6YLsqsrehYcI5rpee/u/ZRWa/b4KG7esrdHayTbLzGez8WZJ6mnhd8BdwHeB27S3hfb+pJg0RmvHKbMbYTR8H4LpmlfRbbynCStW7iCY6wfa2yokoB6LSWu0bmTDJ63GezMhec207Jre9jqNcL7B82zOLvRc9rqOsFfi8ealvV1b4teJhv8HeAiwFon5SlwAAAAASUVORK5CYII="/> + <image id="_Image4" width="163px" height="174px" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAKMAAACuCAYAAABa8r1eAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAQ6ElEQVR4nO2de7RcVX3HP7lYIAEkonQLQqACxQYBQWBXZa2GIM8kGOkSWhCBuiBL2oIKgspigzugxhCqqxi1LImFRWlpTRBQHj6A1gobjK9GRB4hAQndC02BJLyT9I+9J3fu3Jm58zhz9u+cOZ+1zpr7mHPOd37zPXufsx+/PYmKMThltgf2BvaJ2+7A9nHbrsXP2wIvA+uBDS1e1wNPA48BjwKPam+fz+tzFYFJqQWkwimzM/A+4B2MGm9vYJccZfyeYMyaQR8B7tPePpmjBjEMjRmdMjsBM4Aj4jYduZ9/JXB3bdPerkmsJxekfhl945SZDLyfUfMdSHE/7yOMmvNO7e1zifUMhKJ+OS1xyrwXOAM4CdgxrZqB8DJwM7AE+IH2dlNiPZlRCjM6Zd4GfAQ4Hdg3sZw8+R1wHbBEe/tYajH9UlgzOmW2Av4S+BvgKGAkraLk/JhQWt6gvX0ltZheKJwZnTIjwKnAJYQn4IqxPA1cAXxTe/tqajHdUBgzRhOeDBhCc0xFe1YTTLlEe/t6ajGdIN6MTplJwIeASwnNMRXdsRKYD1yvvd2YWkw7RJvRKXMk8A/A/qm1lIBHgPO1t7elFtIKkWZ0ykwFFhEeTiqy5V+Bc7W3z6YW0og4MzplTgSuJt9uuWHj9wRD3phaSD1izOiUeSvwVeDE1FqGiFuBj2lvn04tBIS0zTllzgAeojJi3swBHnLKnJVaCCQuGZ0yWwOLgY+m1FEBhJ6cs1M2mCczY6yWvw28N5WGinE44IPa22dSnDyJGZ0yhwDLgN1SnL+iLWsIhnwg7xPnfs/olDkV+C8qI0plV+Bep8xpeZ84t5Ix9qQsAD6V1zkr+mYR8Cnt7eY8TpaLGaMRvw6cncf5KjLlGmBeHobMq5q+msqIReUswvc3cAZuRqfMV4BzBn2eioFyTvweB8pAzeiUWQScO8hzVOTGuU6ZKwd5goGZ0SnzReCTgzp+RRLOd8p8YVAHH4gZnTKfBS4axLErkvPp+P1mTuZP006ZWYQOeDGDMCoyZxNwgvb2u1keNFPDOGX2AR6knFNEK8byHHBolrMSM6umY46aZVRGHBamAjc7ZbbL6oBZ3jNeC+yX4fEq5LMfYXpsJmRSTTtlLiR09Q0DmwkZxdbVbS8Bk4Ed6rbtGZ775gu1twv7PUjfwXLKHAF8H9iq32MJ40nCgN/67WHguU66xmIX6FTCtNrpDdu0AWlOxUbgKO3t3f0cpC8zxvuFFcCe/RxHCK8C9xBaAm7T3q4a1ImcMnsCswkjrWcAWw/qXDnyBPBO7e2LvR6gXzNeBXyin2MI4C7gG8Bd2tv1eZ88PvgdDcyLr0XmKu3t+b3u3LMZnTKHAfchZB5Nl7wO3AR8SXv7y9RiajhlDgQuJGRQe0NiOb2wEXiP9vbBXnbuyYxOmT8CllO8yfWbCUOiPq+9XZ1aTCtiNf4ZwoiZoj0E/Qo4RHv7Wrc79lqqXUTxjPhr4HDt7TzJRgTQ3q7S3s4DDic8OBWJAwile9d0fdU5Zd4B/ALYppcTJuAV4HJgQS9Xa2riDMqLgIspVszfpb19uJuderkv+SrFCcrjwFzt7YrUQnolprWb75RZBnwHeHtiSZ2wDcEnR3azU1fVtFNmJjCzm30S8gPgsCIbsZ74OQ4FfphaS4fMjG3QHdPtPeP8Lt+fii8Dx2pv16YWkiXx8xwDDHzUdUZ05ZeO7xmdMscB3+taTv5coL1dlFrEoHHKXAD03QWXA8dpb+/o5I3dlIy2RzF5cskwGBFAe3slIYuvdDr2TUdmdMrMBQ7pWU4+fF57e3lqEXmivZ0PDGwaQEYc6pT5QCdvnLCajh3+v0R2u+Ji7e3fphaRCqfMYuBjqXW04VeEpp62A0w6KRk/iGwjOuDjqUUk5jxCHKRyAMFHbenEjJJLnLXASUVszM6S+PlPBv4vtZY2TDh3vq0ZnTJ7E9bdk8hm4PRhXYG0kdjFeXpqHW2Y6ZTZq90bJioZJXfUf0Ny5v4UaG9vJQyHk8gkgp9a0tKMsU/0zKwVZcR64LLUIoRyKWHBdYmcGUd8NaVdyTgX2Dl7PZlwlfbWpxYhkRiXq1LraMEfE3zVlHZmnJe9lkx4FhhozpcSsJAQJ4m09FVTMwp/cLlce7sutQjJxPhckVpHC1o+yLQqGU9D5oPLE4SkoxUT8zVCvKQxibA2+DhamfGEwWnpi0uKtmxtKmKcpPZdz2n2x3FmdMrsBrxr4HK65xfAv6QWUTBuIMRNGgc5Zd7W+MdmJePsHMT0wqfzSnReFmK8PpNaRwvG+ayZGZsWoYl5XHt7Z2oRRSSOJVyZWkcTxvlsjBmdMlOQOa3g26kFFByJ8Tsy+m0LjSXjUcC2+enpGInBLBIS47ct8P76PzSaUeL94pMplg4rGQ8AT6UW0YQxfms047E5CumUpakFFJ34ICMxjmP8tsWMTpldkbme33+kFlASJMZxd6fMLrVf6ktGiXNc1gA/SS2iJPwESLJ07wRs8Z10My6r2hazQXu7iZBzXRpNzXhoAiETIfEpsMhIjOcW30kuGdcC/5laRMm4lxBXSYwtGWM+wLekUtOCn2lvN6YWUSZiPH+eWkcDOztl9oDRklFaqQghV3hF9kiM6yEg24z/k1pASZEY10Nh1Iz7JhTSColBKwMS4/qnMGpGaeuSbCKkPa7Inl8T5pxLYhqMmnGPhEKasbKf9UQqWqO93YC8IWXhASYO43lzYjGNSKxKyoS0+L7FKTNlBHmlIsgLVtmQGN9pI8i7XwSZwSoTEuNbmXFIkRjfaVKr6Sqz2GCRuCjTHiPA7qlVNPCa9val1CLKTIzv66l1NLD7CLBjahUNvJBawJAgLc5vHCGsIC+J51MLGBKkxXnKCDBlwrfli7QrtqxIi7NIM0q7YsuKtDhPkVhNS7tiy4q0OE+uSsbhRVqcRVbT0q7YsiItziLNKO2KLSvS4lzdMw4x0uI8eQSQNump5dIMFZkiLc4bRwBpg1il9QiVFWlxfrEy4/AyNbWABkSaUVqQyoq0i16kGaUFqaxIi3NlxiFGWpwrMw4x0uJcmXGIkRbnF0eQtxystCCVFWlx3jCCvGymk9utSVzRP3EtcWmrWjwzgszJOeOW8qrIlF1TC2jC6hFgVWoVTTggtYCSc2BqAU1YJbVklBisMiExvqulmrEqGQeLxPiuHtHe/gF5T9QSr9wyIS2+67W3a2sp8aSVjns1LnJYkQ1Ome2At6fW0cBqGM3PKM2MI8D+qUWUlP1pvrRzSsaY8bGEQlohrSopCxLj+jiMmnF5QiGtkHiTXQYkxvWnMGpGiUvoSryCy4DEuD4Ao2b8LfIm6BzslJE2WazQxIfCg1LraOAFgv+CGeMih9Kq6inArNQiSsYs5E1N/mltsdL6p6oHE4lpx0mpBZQMifHc4rt6M0q8b5xVtTdmQ2xfPD61jiZs8Z30knEKMDu1iJIwG3lVNDQrGbW3TyJvbCPIrFqKiMQ4PqO9far2S2NL/J05i+mE42MVU9EjTpntgeNS62jCHfW/NJrxlhyFdMpkYE5qEQVnDvJyKkGD3xrNeBfwSn5aOubk1AIKjsT4vUzw2xbGmDEucvijPBV1yLFOmTelFlFEYtyOSa2jCT9qXKy02egNiVX1tsBnU4soKBcjb/IVNPFZMzPeirz1iAH+3ikjcTUvsThl9gT+LrWOJmwm+GwM48yovX0a+FkeirpkG+CK1CIKxhWEuEljufZ2TeMfWw2yvHnAYnrlFKfMwalFFAGnzLuBv06towVN/dXKjP+MvIy2AJOAhalFFISFhHhJYyNwXbN/NDVjbBW/fZCK+mCmU0ZiH6sYnDKzgCNS62jB9+p7XeppNxfi6wMSkwULnDJbpRYhkRiXBal1tKGlr9qZ8XbkTdSq8U7gjNQihHImsF9qES1YRUMXYD0tzRgH3F4zAEFZscApI22t7KQ4ZaYBX0ytow3XRF81ZaIpi98EXstWT2a8GbipylgWiJnFbiLERSKvEfzUkrZm1N7+L/CdLBVlzJ9TPV3XWAjo1CLacLP21rd7QyeTub+ckZhBcZ5T5kOpRaTEKXMScG5qHRPwlYneMKEZtbf/jcxxjvVc75Q5OrWIFMTP3bTdThB3RB+1pdM0Fxf3KWbQbAPc7JSR2rY2EJwyMwm9GRK7/GpspkP/dGRG7e1yYGk/inJgMnCrU+bw1ELyIH7OW5A5aLaepdrbjsY6dJMA6BKg5WO5ELYDbnfKfCC1kEHilJlLaAeWPh1jE8E3HdFV36VT5jrgtG4VJWAzYIHP1SaIlwGnzCTgMsIXLLHfuZHrtLend/rmblOjXYbcdsd6JgGXAkudMjukFpMF8XMsAwzFMOJrBL90TFdm1N6uBL7WzT6JmQssd8rMSC2kH+KD2XKgSLcfi7W3T3SzQ9dXWJz2uAIo2qjrJcAF2tu1qYV0ilNmJ2ARxeuHXwXsr71d381OPRX3TpmjaJjZVRCeBS4AbtDeShyvCWwZeXMqcCWwc2I5vXC09vb73e7U872HU+ZawgiRIvI4cBWwRHv7UmoxNWIKwDOBTwJ7JZbTK9dqbz/ay479mHEq8BCwS6/HEMCzwNXAP8V++CQ4Zd4KnE2YPFXEkrDGGmC69vb5Xnbu66nMKXMCsgdSdMpmQirf24Bbtbc/H/QJ41ye2XE7hGI8IU/ECdrbcbP+OqXvADhlbgT+qt/jCONp4F7gN4TS/yHgMe3t690eyCnzBmBvYHrc/gz4C8q3PuKN2ttT+jlAFmacSsixt0+/xxLOq4R7zbXAOmB9fF1HWLN7CrBD3LaPrzsR7v22TqA3Tx4FDtPePtfPQTKpGpwy04H7CV9AxXCxDtDa29/0e6BMFqfR3j4EfBiZmSgqBsdm4MNZGBEyXClJe3sLXXb/VBSeS+P3nglZL9s1n9B/WlF+lgKXZ3nAzJsTYnfhfYTppBXlZAXwnm67+yYi8wUNo8DjgZVZH7tCBCuB47M2IgywoTXOab4HecvJVvTOSmBGq/Qk/TKwpV6j4BnEFTMrCs/jDNCIkEMXVCwh76a4Hf8VwYhHDNKIkFN/qFNmN0KVXRmyeORiRMhpRXbt7e8IVXYmjaMVufEwORkRcjIjbDGkRm5W3Iqx3ELo5svFiJCjGQG0t+uAEwmTiqquQ5lsBj4HzNXe5roGebIxdDG76g3Ajqk0VIxjHXCa9jbJGNWkAzqdMvsQqu3pKXVUAPBbQmn4cCoBuVbTjWhvHyWktbs+pY4K/o1wf5jMiCBoqLtT5hjCnOw/Sa1liHgKOEd7e1tqIZC4ZKxHe3snYXDFlchc9qNMbAL+kTB5SoQRQVDJWI9T5iBCPvF3p9ZSQlYAZ2lv708tpBExJWM9cXaeBs4Hepr2WDGODYSEUQdLNCIILRnriRO+Ph63qhmoezYAi4GF2ttnU4tph3gz1oimPI9gyqmJ5RSBwpiwRmHMWMMpsyMhmfongGpB9PG8SDDhl4piwhqFM2MNp8wbgbMIGbqqKQ5h4Ot1hFR0hTJhjcKasZ749H06cArFzlXTLS8A/05YBffHRc/SWwoz1oirZR0HfASYQzkzOWwCfgh8C1gmKYtav5TKjPXERJuzCOMoZ1DsuTjPEHL/3AN8Nw7HKx2lNWMjcfrDDELSpRnIHnW+hmC8e4F7tLePpJWTD0NjxkbiVIj3AfsSsoTVtjzvOZ8DHqvbHgHujwNIho6hNWMrYtNRvTl3J2QV267Ja+3nycBLhLa99fG12c9rqDOf9vYPeX2uIvD/S2ZU5sr/vsQAAAAASUVORK5CYII="/> + </defs> +</svg> diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/svg/sass.svg b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/svg/sass.svg new file mode 100644 index 000000000..da3d9cfcf --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/svg/sass.svg @@ -0,0 +1,3 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="512" height="512" viewBox="0 0 512 512"> + <path fill="#CF649A" d="M440.6 220.6c-17.9.1-33.4 4.4-46.4 10.8-4.8-9.5-9.6-17.8-10.4-24-.9-7.2-2-11.6-.9-20.2s6.1-20.8 6.1-21.8c-.1-.9-1.1-5.3-11.4-5.4-10.3-.1-19.2 2-20.2 4.7s-3 8.9-4.3 15.3c-1.8 9.4-20.6 42.7-31.3 60.2-3.5-6.8-6.5-12.8-7.1-17.6-.9-7.2-2-11.6-.9-20.2s6.1-20.8 6.1-21.8c-.1-.9-1.1-5.3-11.4-5.4-10.3-.1-19.2 2-20.2 4.7s-2.1 9.1-4.3 15.3c-2.1 6.2-27.1 61.8-33.6 76.3-3.3 7.4-6.2 13.3-8.3 17.3s-.1.3-.3.7c-1.8 3.4-2.8 5.3-2.8 5.3v.1c-1.4 2.5-2.9 4.9-3.6 4.9-.5 0-1.5-6.7.2-15.9 3.7-19.3 12.7-49.4 12.6-50.5 0-.5 1.7-5.8-5.8-8.5-7.3-2.7-9.9 1.8-10.5 1.8-.6 0-1.1 1.6-1.1 1.6s8.1-33.9-15.5-33.9c-14.8 0-35.2 16.1-45.3 30.8-6.4 3.5-20 10.9-34.4 18.8-5.5 3-11.2 6.2-16.6 9.1l-1.1-1.2c-28.6-30.5-81.5-52.1-79.3-93.1.8-14.9 6-54.2 101.6-101.8 78.3-39 141-28.3 151.9-4.5 15.5 34-33.5 97.2-114.9 106.3-31 3.5-47.3-8.5-51.4-13-4.3-4.7-4.9-4.9-6.5-4-2.6 1.4-1 5.6 0 8.1 2.4 6.3 12.4 17.5 29.4 23.1 14.9 4.9 51.3 7.6 95.3-9.4 49.3-19.1 87.8-72.1 76.5-116.4-11.5-45.1-86.3-59.9-157-34.8-42.1 15-87.7 38.4-120.5 69.1-39 36.4-45.2 68.2-42.6 81.4 9.1 47.1 74 77.8 100 100.5-1.3.7-2.5 1.4-3.6 2-13 6.4-62.5 32.3-74.9 59.7-14 31 2.2 53.3 13 56.3 33.4 9.3 67.6-7.4 86.1-34.9 18.4-27.5 16.2-63.2 7.7-79.5l-.3-.6 10.2-6c6.6-3.9 13.1-7.5 18.8-10.6-3.2 8.7-5.5 19-6.7 34-1.4 17.6 5.8 40.4 15.3 49.4 4.2 3.9 9.2 4 12.3 4 11 0 16-9.1 21.5-20 6.8-13.3 12.8-28.7 12.8-28.7s-7.5 41.7 13 41.7c7.5 0 15-9.7 18.4-14.7v.1s.2-.3.6-1c.8-1.2 1.2-1.9 1.2-1.9v-.2c3-5.2 9.7-17.1 19.7-36.8 12.9-25.4 25.3-57.2 25.3-57.2s1.2 7.8 4.9 20.6c2.2 7.6 7 15.9 10.7 24-3 4.2-4.8 6.6-4.8 6.6l.1.1c-2.4 3.2-5.1 6.6-7.9 10-10.2 12.2-22.4 26.1-24 30.1-1.9 4.7-1.5 8.2 2.2 11 2.7 2 7.5 2.4 12.6 2 9.2-.6 15.6-2.9 18.8-4.3 5-1.8 10.7-4.5 16.2-8.5 10-7.4 16.1-17.9 15.5-31.9-.3-7.7-2.8-15.3-5.9-22.5.9-1.3 1.8-2.6 2.7-4 15.8-23.1 28-48.5 28-48.5s1.2 7.8 4.9 20.6c1.9 6.5 5.7 13.6 9.1 20.6-14.8 12.1-24.1 26.1-27.3 35.3-5.9 17-1.3 24.7 7.4 26.5 3.9.8 9.5-1 13.7-2.8 5.2-1.7 11.5-4.6 17.3-8.9 10-7.4 19.6-17.7 19.1-31.6-.3-6.4-2-12.7-4.3-18.7 12.6-5.2 28.9-8.2 49.6-5.7 44.5 5.2 53.3 33 51.6 44.6-1.7 11.6-11 18-14.1 20-3.1 1.9-4.1 2.6-3.8 4 .4 2.1 1.8 2 4.5 1.6 3.7-.6 23.4-9.5 24.2-30.9 1.2-27.5-24.9-57.5-71.2-57.2zm-343.2 115.7c-14.7 16.1-35.4 22.2-44.2 17-9.5-5.5-5.8-29.2 12.3-46.3 11-10.4 25.3-20 34.7-25.9 2.1-1.3 5.3-3.2 9.1-5.5.6-.4 1-.6 1-.6.7-.4 1.5-.9 2.3-1.4 6.7 24.4.3 45.8-15.2 62.7zm107.5-73.1c-5.1 12.5-15.9 44.6-22.4 42.8-5.6-1.5-9-25.8-1.1-49.8 4-12.1 12.5-26.5 17.5-32.1 8.1-9 16.9-12 19.1-8.3 2.6 4.8-9.9 39.6-13.1 47.4zm88.7 42.4c-2.2 1.1-4.2 1.9-5.1 1.3-.7-.4.9-1.9.9-1.9s11.1-11.9 15.5-17.4c2.5-3.2 5.5-6.9 8.7-11.1v1.2c0 14.4-13.8 24-20 27.9zm68.4-15.6c-1.6-1.2-1.4-4.9 4-16.5 2.1-4.6 6.9-12.3 15.2-19.6 1 3 1.6 5.9 1.5 8.6-.1 18-12.9 24.7-20.7 27.5z" /> +</svg> diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/svg/search.svg b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/svg/search.svg new file mode 100644 index 000000000..181789b54 --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/svg/search.svg @@ -0,0 +1 @@ +<svg id="search-icon" xmlns="http://www.w3.org/2000/svg" {{ with .size }}width="{{ . }}" height="{{ . }}"{{ end }} viewBox="0 0 475.084 475.084"><path d="M464.524 412.846l-97.93-97.925C390.194 280.86 402 242.88 402 201.01c0-27.218-5.282-53.25-15.85-78.087-10.56-24.842-24.84-46.254-42.825-64.24-17.987-17.99-39.396-32.265-64.233-42.827C254.247 5.286 228.218.003 201 .003c-27.217 0-53.248 5.283-78.086 15.848-24.842 10.57-46.254 24.84-64.24 42.83-17.99 17.99-32.265 39.407-42.828 64.24C5.282 147.76 0 173.79 0 201.01c0 27.213 5.282 53.235 15.846 78.08 10.562 24.84 24.838 46.247 42.827 64.234 17.987 17.994 39.403 32.265 64.24 42.833C147.755 396.717 173.783 402 201 402c41.877 0 79.85-11.808 113.92-35.406l97.93 97.64c6.85 7.232 15.405 10.85 25.692 10.85 9.897 0 18.467-3.617 25.694-10.85 7.23-7.23 10.848-15.795 10.848-25.692.003-10.082-3.518-18.65-10.56-25.694zm-173.16-121.488c-25.03 25.033-55.15 37.55-90.365 37.55-35.21 0-65.33-12.52-90.36-37.55-25.04-25.03-37.55-55.144-37.55-90.36 0-35.21 12.52-65.334 37.54-90.36 25.025-25.032 55.15-37.546 90.36-37.546s65.33 12.52 90.363 37.546 37.55 55.15 37.55 90.36c0 35.216-12.52 65.33-37.55 90.36z"/></svg> diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/svg/twitter.svg b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/svg/twitter.svg new file mode 100644 index 000000000..247ca9062 --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/svg/twitter.svg @@ -0,0 +1 @@ +<svg{{ with .size }} height="{{ . }}" {{ end }}id="Layer_1" style="enable-background:new 0 0 67 67;" version="1.1" viewBox="0 0 67 67" width="{{ .size }}" xml:space="preserve" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><path d="M37.167,22.283c-2.619,0.953-4.274,3.411-4.086,6.101 l0.063,1.038l-1.048-0.127c-3.813-0.487-7.145-2.139-9.974-4.915l-1.383-1.377l-0.356,1.017c-0.754,2.267-0.272,4.661,1.299,6.271 c0.838,0.89,0.649,1.017-0.796,0.487c-0.503-0.169-0.943-0.296-0.985-0.233c-0.146,0.149,0.356,2.076,0.754,2.839 c0.545,1.06,1.655,2.097,2.871,2.712l1.027,0.487l-1.215,0.021c-1.173,0-1.215,0.021-1.089,0.467 c0.419,1.377,2.074,2.839,3.918,3.475l1.299,0.444l-1.131,0.678c-1.676,0.976-3.646,1.526-5.616,1.568 C19.775,43.256,19,43.341,19,43.405c0,0.211,2.557,1.397,4.044,1.864c4.463,1.377,9.765,0.783,13.746-1.568 c2.829-1.673,5.657-5,6.978-8.221c0.713-1.716,1.425-4.851,1.425-6.354c0-0.975,0.063-1.102,1.236-2.267 c0.692-0.678,1.341-1.419,1.467-1.631c0.21-0.403,0.188-0.403-0.88-0.043c-1.781,0.636-2.033,0.551-1.152-0.402 c0.649-0.678,1.425-1.907,1.425-2.267c0-0.063-0.314,0.042-0.671,0.233c-0.377,0.212-1.215,0.53-1.844,0.72l-1.131,0.361l-1.027-0.7 c-0.566-0.381-1.361-0.805-1.781-0.932C39.766,21.902,38.131,21.944,37.167,22.283z M33,64C16.432,64,3,50.569,3,34S16.432,4,33,4 s30,13.431,30,30S49.568,64,33,64z" style="fill-rule:evenodd;clip-rule:evenodd;fill:{{ .fill }};"/></svg> diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/svg/website.svg b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/svg/website.svg new file mode 100644 index 000000000..2bdcf5f94 --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/svg/website.svg @@ -0,0 +1,5 @@ +<svg xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" version="1.1" x="0px" y="0px" viewBox="0 0 100 100"> + <g transform="translate(0,-952.36218)"> + <path style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;baseline-shift:baseline;opacity:1;color:#000000;fill:#000000;fill-opacity:1;stroke:none;stroke-width:4.59459686000000020;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Sans;-inkscape-font-specification:Sans" d="M 45,6 C 23.484595,6 6,23.48459 6,45 c 0,21.51545 17.484595,39 39,39 7.216183,0 13.976999,-1.978303 19.78125,-5.40625 l 2.3125,7.9375 c 0.399602,1.306461 2.336587,1.799844 3.3125,0.84375 L 74,83.78125 l 9.59375,9.625 C 83.9572,93.773596 84.484682,94 85,94 c 0.535945,0 1.059354,-0.21155 1.4375,-0.59375 L 93.40625,86.375 C 93.759787,86.017399 94,85.504187 94,85 94,84.464803 93.783667,83.944255 93.40625,83.5625 L 83.84375,73.96875 87.4375,70.375 c 0.985383,-0.981808 0.464991,-2.970451 -0.875,-3.34375 L 78.65625,64.75 C 82.062754,58.954972 84,52.195019 84,45 84,23.48459 66.515405,6 45,6 z m -2,4.28125 0,14.28125 c -4.089365,0.109273 -8.019747,0.512478 -11.6875,1.21875 0.70119,-2.206406 1.501166,-4.252332 2.40625,-6.0625 2.638218,-5.276433 5.930878,-8.506898 9.28125,-9.4375 z m 4,0 c 3.350371,0.930602 6.643032,4.161067 9.28125,9.4375 0.905084,1.810168 1.70506,3.856094 2.40625,6.0625 C 55.019749,25.074978 51.089372,24.671773 47,24.5625 z M 34.1875,11.6875 c -1.522642,1.770515 -2.881834,3.888669 -4.0625,6.25 -1.31585,2.631698 -2.46085,5.606387 -3.34375,8.84375 -3.237369,0.8829 -6.212048,2.027901 -8.84375,3.34375 -2.361195,1.180596 -4.479839,2.542334 -6.25,4.0625 3.446423,-10.637548 11.862453,-19.053578 22.5,-22.5 z m 21.625,0 c 10.656278,3.452491 19.064971,11.898315 22.5,22.5625 -1.771337,-1.539118 -3.871735,-2.935868 -6.25,-4.125 -2.631699,-1.315849 -5.606385,-2.46085 -8.84375,-3.34375 -0.8829,-3.237363 -2.0279,-6.212052 -3.34375,-8.84375 -1.184113,-2.368224 -2.532828,-4.482318 -4.0625,-6.25 z M 43,28.53125 43,43 28.53125,43 c 0.1362,-4.569497 0.72815,-8.906858 1.625,-12.84375 3.936898,-0.89685 8.274268,-1.4888 12.84375,-1.625 z m 4,0 c 4.569491,0.1362 8.906855,0.72815 12.84375,1.625 0.89685,3.936892 1.4888,8.274253 1.625,12.84375 L 47,43 z M 25.78125,31.3125 C 25.074979,34.980249 24.671773,38.910624 24.5625,43 l -14.28125,0 c 0.9306,-3.350367 4.161058,-6.643033 9.4375,-9.28125 1.810171,-0.905084 3.856089,-1.70506 6.0625,-2.40625 z m 38.4375,0 c 2.206408,0.70119 4.252331,1.501166 6.0625,2.40625 5.276436,2.638217 8.506898,5.930883 9.4375,9.28125 L 65.4375,43 C 65.328227,38.910624 64.925021,34.980249 64.21875,31.3125 z M 10.28125,47 24.5625,47 c 0.109273,4.089378 0.512478,8.019754 1.21875,11.6875 -2.206411,-0.701197 -4.252329,-1.501155 -6.0625,-2.40625 C 14.442307,53.643083 11.21185,50.350373 10.28125,47 z m 18.25,0 L 43,47 43,61.46875 C 38.430518,61.332551 34.093148,60.740608 30.15625,59.84375 29.2594,55.906856 28.66745,51.569484 28.53125,47 z M 47,47 61.46875,47 c -0.1362,4.569484 -0.72815,8.906856 -1.625,12.84375 -3.936895,0.896858 -8.274259,1.488801 -12.84375,1.625 z m 18.4375,0 14.28125,0 c -0.930602,3.350373 -4.161064,6.643083 -9.4375,9.28125 -1.810169,0.905095 -3.856092,1.705053 -6.0625,2.40625 C 64.925022,55.019754 65.328227,51.089378 65.4375,47 z m 12.875,8.78125 c -0.894994,2.761884 -2.143595,5.368426 -3.65625,7.78125 l -6.625,-1.90625 c 1.418597,-0.544564 2.76298,-1.147119 4.03125,-1.78125 2.37111,-1.185548 4.481887,-2.56023 6.25,-4.09375 z m -66.625,0.03125 c 1.770483,1.520913 3.890879,2.882948 6.25,4.0625 2.631701,1.315842 5.606381,2.46085 8.84375,3.34375 0.8829,3.237364 2.0279,6.212029 3.34375,8.84375 1.184625,2.369235 2.533064,4.4826 4.0625,6.25 -10.637547,-3.446422 -19.053577,-11.862452 -22.5,-22.5 z m 19.625,8.40625 C 34.980253,64.925024 38.910634,65.328227 43,65.4375 l 0,14.28125 c -3.35037,-0.930586 -6.643032,-4.161 -9.28125,-9.4375 -0.905084,-1.810162 -1.70506,-3.856093 -2.40625,-6.0625 z m 27.375,0 c -0.70119,2.206407 -1.501165,4.252338 -2.40625,6.0625 -2.638219,5.2765 -5.930881,8.506914 -9.28125,9.4375 L 47,65.4375 c 4.089372,-0.109273 8.019749,-0.512476 11.6875,-1.21875 z m 6.25,0.6875 17.28125,5.03125 -2.625,2.625 c -0.749546,0.741596 -0.749546,2.102154 0,2.84375 L 89.1875,84.96875 85,89.15625 75.40625,79.5625 c -0.739355,-0.730954 -2.073145,-0.730954 -2.8125,0 L 70,82.15625 z M 61.65625,68 l 1.9375,6.625 c -2.416393,1.520807 -5.014712,2.756002 -7.78125,3.65625 1.523396,-1.763884 2.881744,-3.857253 4.0625,-6.21875 0.638229,-1.276468 1.23382,-2.63383 1.78125,-4.0625 z" transform="translate(0,952.36218)" /> + </g> +</svg> diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/svg/windows.svg b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/svg/windows.svg new file mode 100644 index 000000000..fe3bf0296 --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/svg/windows.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg" fill-rule="evenodd" clip-rule="evenodd"><path d="M0 2.3l6.5-.9v6.3H0m7.3-6.4L16 0v7.6H7.3M0 8.4h6.5v6.3L0 13.8m7.3-5.4H16V16l-8.6-1.2"/></svg>
\ No newline at end of file diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/svg/yaml.svg b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/svg/yaml.svg new file mode 100644 index 000000000..59eeb71c2 --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/svg/yaml.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="256" height="256" viewBox="0 0 256 256"><title>icon</title><circle cx="128" cy="128" r="124" fill="#c2bfbc"/><path d="M56.4,138.1c4,0,7.3,3.1,7.3,7.7a7.3,7.3,0,1,1-14.6,0C49.1,141.2,52.3,138.1,56.4,138.1Z" fill="#333" stroke="#333" stroke-linecap="round" stroke-linejoin="round" stroke-width="3"/><path d="M78,164.9c6.1,0,9.8-4,12-9.4l1.3-3.2L70.9,108.5h7.5L89,132.7c1.7,3.9,3.6,8.5,5.4,12.7h.4l4.7-12.7,9.5-24.2h7L96.8,155.8c-3.2,8.6-8.6,15.2-18.5,15.2a18.4,18.4,0,0,1-5.8-.9l1.5-5.8A14,14,0,0,0,78,164.9Z" fill="#333" stroke="#333" stroke-linecap="round" stroke-linejoin="round" stroke-width="3"/><path d="M124.5,108.5h5.8l.6,5.8h.3c2.2-4,4.9-6.8,9.8-6.8s7.2,2.5,8.3,7.6c2.6-4.6,5.5-7.6,10.3-7.6s9.5,4.8,9.5,13.5v31.3H162V121.5c0-5.1-1.5-7.7-4.8-7.7s-5.2,2.2-7.5,6.7v31.7h-5.9V121.5c0-5.1-1.7-7.7-5-7.7s-5,2.2-7.3,6.7v31.7h-7.1Z" fill="#333" stroke="#333" stroke-linecap="round" stroke-linejoin="round" stroke-width="3"/><path d="M171.9,88.1h22.3v49.9c0,6.4,3.3,9.1,8.5,9.1a19.9,19.9,0,0,0,8.3-2.1l1.9,5.6c-4,1.4-7,2.6-11.8,2.6-9.3,0-14.3-5.4-14.3-15.7V94.2H171.9Z" fill="#333" stroke="#333" stroke-linecap="round" stroke-linejoin="round" stroke-width="3"/></svg>
\ No newline at end of file diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/tags.html b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/tags.html new file mode 100644 index 000000000..59e3e51a0 --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/partials/tags.html @@ -0,0 +1,37 @@ +{{ $currentPageUrl := .RelPermalink }} +{{ if and .Params.tags .Site.Taxonomies.tags }} + {{ $name := index .Params.tags 0 }} + {{ $name := $name | urlize }} + {{ $tags := index .Site.Taxonomies.tags $name }} + + <div class="nested-lh-copy"> + <ul class="list dib nested-links ml0 pl0"> + {{ with .Params.tags }} + <li class="db mb2 b"> + Tags: + </li> + {{ range .}} + <li class="db dib-l mr3"> + <a class="tag" href="/tags/{{ .|urlize }}"> + {{ . }} + </a> + </li> + {{ end }} + {{ end }} + {{ range $i, $e := $tags.Pages }} + {{ if eq $i 1 }} + <li class="db b mt4 mb2 mr2"> + Related entries: + </li> + {{ end }} + {{ if ne .RelPermalink $currentPageUrl }} + <li class="db dib-l mb2 mr3"> + <a href="{{ .RelPermalink }}" class="link"> + {{ .LinkTitle }} + </a> + </li> + {{ end }} + {{end}} + </ul> + </div> +{{end}} diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/robots.txt b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/robots.txt new file mode 100644 index 000000000..25b9e9a0d --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/robots.txt @@ -0,0 +1,8 @@ +User-agent: * +# robotstxt.org - if ENV production variable is false robots will be disallowed. +{{ if eq (getenv "HUGO_ENV") "production" }} + Disallow: admin/ + Disallow: +{{ else }} + Disallow: / +{{ end }} diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/shortcodes/articlelist.html b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/shortcodes/articlelist.html new file mode 100644 index 000000000..2755b1e2d --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/shortcodes/articlelist.html @@ -0,0 +1,18 @@ +<table class="utils-table"> +<thead> + <tr> + <th class="col-title">Title</td> + <th class="col-author">Author</td> + <th class="col-date">Date</td> + </tr> +</thead> +<tbody> + {{ range $ind, $art := $.Site.Data.articles.article }} + <tr> + <td><a href="{{$art.url}}" target="_blank">{{$art.title | markdownify }}</a></td> + <td>{{ $art.author | markdownify }}</td> + <td>{{ $art.date }}</td> + </tr> + {{ end }} +</tbody> +</table> diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/shortcodes/chroma-lexers.html b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/shortcodes/chroma-lexers.html new file mode 100644 index 000000000..2e10c3dee --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/shortcodes/chroma-lexers.html @@ -0,0 +1,6 @@ +<dl> + {{ range .Site.Data.docs.chroma.lexers }} + <dt>{{ .Name }}</dt> + <dd>{{ with .Aliases }}{{ delimit . ", " }}{{ end }}</dd> + {{ end }} +</dl> diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/shortcodes/code-toggle.html b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/shortcodes/code-toggle.html new file mode 100644 index 000000000..d1131132d --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/shortcodes/code-toggle.html @@ -0,0 +1,101 @@ +{{- /* + Renders syntax-highlighted configuration data in JSON, TOML, and YAML formats. + + @param {string} [config] The section of site.Data.docs.config to render. + @param {bool} [copy=false] If true, display a copy to clipboard button. + @param {string} [file] The file name to display above the rendered code. + @param {bool} [fm=false] If true, render the code as front matter. + @param {bool} [skipHeader=false] If false, omit top level key(s) when rendering a section of site.Data.docs.config. + + @returns {template.HTML} +*/}} + +{{- /* Initialize. */}} +{{- $config := "" }} +{{- $dataKey := "" }} +{{- $copy := false }} +{{- $file := "" }} +{{- $fm := false }} +{{- $skipHeader := false }} + +{{- /* Get parameters. */}} +{{- $config = .Get "config" }} +{{- $dataKey = .Get "dataKey" }} +{{- $file = .Get "file" }} +{{- if in (slice "false" false 0) (.Get "copy") }} + {{- $copy = false }} +{{- else if in (slice "true" true 1) (.Get "copy") }} + {{- $copy = true }} +{{- end }} +{{- if in (slice "false" false 0) (.Get "fm") }} + {{- $fm = false }} +{{- else if in (slice "true" true 1) (.Get "fm") }} + {{- $fm = true }} +{{- end }} +{{- if in (slice "false" false 0) (.Get "skipHeader") }} + {{- $skipHeader = false }} +{{- else if in (slice "true" true 1) (.Get "skipHeader") }} + {{- $skipHeader = true }} +{{- end }} + +{{- /* Define constants. */}} +{{- $delimiters := dict "toml" "+++" "yaml" "---" }} +{{- $langs := slice "yaml" "toml" "json" }} +{{- $placeHolder := "#-hugo-placeholder-#" }} + +{{- /* Render. */}} +{{- $code := "" }} +{{- if $config }} + {{- $file = $file | default "hugo" }} + {{- $sections := (split $config ".") }} + {{- $configSection := index $.Site.Data.docs.config $sections }} + {{- $code = dict $sections $configSection }} + {{- if $skipHeader }} + {{- $code = $configSection }} + {{- end }} +{{- else if $dataKey }} + {{- $file = $file | default $dataKey }} + {{- $sections := (split $dataKey ".") }} + {{- $code = index $.Site.Data.docs $sections }} +{{- else }} + {{- $code = $.Inner }} +{{- end }} +<div class="code relative" {{ with $file }}id="{{ . | urlize }}"{{ end }}> + <div class="code-nav flex flex-nowrap items-stretch"> + {{- with $file }} + <div class="san-serif f6 dib lh-solid pl2 pv2 mr2"> + {{ . }}{{ if not $fm }}.{{ end }} + </div> + {{- end }} + {{- range $langs }} + <button + data-toggle-tab="{{ . }}" + class="tab-button {{ cond (eq . "yaml") "active" "" }} ba san-serif f6 dib lh-solid ph2 pv2"> + {{ . }} + </button> + + {{- end }} + </div> + <div class="tab-content"> + {{- range $langs }} + <div + data-pane="{{ . }}" + class="code-copy-content nt3 tab-pane {{ cond (eq . "yaml") "active" "" }}"> + {{- $hCode := $code | transform.Remarshal . }} + {{- if and $fm (in (slice "toml" "yaml") .) }} + {{- $hCode = printf "%s\n%s\n%s" $placeHolder $hCode $placeHolder }} + {{- end }} + {{- $hCode = $hCode | replaceRE `\n+` "\n" }} + {{ highlight $hCode . "" | replaceRE $placeHolder (index $delimiters .) | safeHTML }} + </div> + {{- if $copy }} + <button + class="needs-js copy copy-toggle bg-accent-color-dark f6 absolute top-0 right-0 lh-solid hover-bg-primary-color-dark bn white ph3 pv2" + title="Copy this code to your clipboard." + data-clipboard-action="copy" + aria-label="copy button"></button> + {{- /* Functionality located within filesaver.js The copy here is located in the css with .copy class so it can be replaced with JS on success */}} + {{- end }} + {{- end }} + </div> +</div> diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/shortcodes/code.html b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/shortcodes/code.html new file mode 100644 index 000000000..dd21551cb --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/shortcodes/code.html @@ -0,0 +1,35 @@ +{{- /* +Renders syntax highlighted code. + +@param {bool} [copy=false] If true, display a copy to clipboard button. +@param {string} [file] The file name to display above the rendered code. +@param {string} [lang] The code language of the inner content. + +@returns {template.HTML} +*/}} + +{{- /* Get parameters. */}} +{{- $copy := false }} +{{- if in (slice "false" false 0) (.Get "copy") }} + {{- $copy = false }} +{{- else if in (slice "true" true 1) (.Get "copy")}} + {{- $copy = true }} +{{- end }} +{{- $file := or (.Get "file") " " }} +{{- $lang := or (.Get "lang") (path.Ext $file | strings.TrimPrefix ".") "text" }} + +{{- /* Use the go-html-template Chroma lexer for HTML. */}} +{{- if eq $lang "html" }} + {{- $lang = "go-html-template" }} +{{- end }} + +{{- /* Render. */}} +<div class="code relative" id="{{ $file | urlize }}"> + <div class="f6 dib lh-solid pl2 pv2">{{ $file | htmlUnescape }}</div> + {{- if $copy }} + <button class="needs-js copy bg-accent-color-dark f6 absolute top-0 right-0 lh-solid hover-bg-primary-color-dark bn white ph3 pv2" title="Copy this code to your clipboard." data-clipboard-action="copy" aria-label="copy button"></button> + {{- end }} + <div class="code-copy-content nt3"> + {{- highlight (trim .Inner "\n\r") $lang }} + </div> +</div> diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/shortcodes/datatable-filtered.html b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/shortcodes/datatable-filtered.html new file mode 100644 index 000000000..ff3f299bd --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/shortcodes/datatable-filtered.html @@ -0,0 +1,39 @@ +{{ $package := (index .Params 0) }} +{{ $listname := (index .Params 1) }} +{{ $filter := split (index .Params 2) " " }} +{{ $filter1 := index $filter 0 }} +{{ $filter2 := index $filter 1 }} +{{ $filter3 := index $filter 2 }} + +{{ $list := (index (index .Site.Data.docs $package) $listname) }} +{{ $fields := after 3 .Params }} +{{ $list := where $list $filter1 $filter2 $filter3 }} + +<table class="table table-bordered"> + <tr> + {{ range $fields }} + <th>{{ . }}</th> + {{ end }} + </tr> + {{ range $list }} + <tr> + {{ range $k, $v := . }} + {{ $.Scratch.Set $k $v }} + {{ end }} + {{ range $k, $v := $fields }} + <td> + {{ $tdContent := $.Scratch.Get . }} + {{ if eq $k 3 }} + {{ printf "%v" $tdContent | + strings.ReplaceRE `\[` "<ol><li>" | + strings.ReplaceRE `\s` "</li><li>" | + strings.ReplaceRE `\]` "</li></ol>" | + safeHTML }} + {{ else }} + {{ $tdContent }} + {{ end}} + </td> + {{ end }} + </tr> + {{ end }} +</table> diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/shortcodes/datatable.html b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/shortcodes/datatable.html new file mode 100644 index 000000000..12054f89d --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/shortcodes/datatable.html @@ -0,0 +1,33 @@ +{{ $package := (index .Params 0) }} +{{ $listname := (index .Params 1) }} +{{ $list := (index (index .Site.Data.docs $package) $listname) }} +{{ $fields := after 2 .Params }} + + +<table class="table table-bordered"> + <tr> + {{ range $fields }} + {{ $s := . }} + {{ if eq $s "_key" }} + {{ $s = "Type" }} + {{ end }} + <th>{{ $s }}</th> + {{ end }} + </tr> + {{ range $k1, $v1 := $list }} + <tr> + {{ range $k2, $v2 := . }} + {{ $.Scratch.Set $k2 $v2 }} + {{ end }} + {{ range $fields }} + {{ $s := "" }} + {{ if eq . "_key" }} + {{ $s = $k1 }} + {{ else }} + {{ $s = $.Scratch.Get . }} + {{ end }} + <td>{{ $s }}</td> + {{ end }} + </tr> + {{ end }} +</table> diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/shortcodes/deprecated-in.html b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/shortcodes/deprecated-in.html new file mode 100644 index 000000000..7219d7f54 --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/shortcodes/deprecated-in.html @@ -0,0 +1,14 @@ +{{ $_hugo_config := `{ "version": 1 }` }} + +{{ with .Get 0 }} + {{ $version := printf "v%v" (strings.TrimLeft "vV" .) }} + {{ $href := printf "https://github.com/gohugoio/hugo/releases/tag/%s" $version }} + <aside> + <div class="admonition-content bl bw2 b--dark-red" > + <p>Deprecated in <a href="{{ $href }}">{{ $version }}</a>.</p> + {{ $.Inner }} + </div> + </aside> +{{ else }} + {{ errorf "The %q shortcode requires a single positional parameter indicating version. See %s" .Name .Position }} +{{ end }} diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/shortcodes/funcsig.html b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/shortcodes/funcsig.html new file mode 100644 index 000000000..4e96504ab --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/shortcodes/funcsig.html @@ -0,0 +1,4 @@ +<h4 class="minor mb1 pt2 primary-color-dark">Syntax</h4> +<pre class="f5 mb4 ph3 pv2 bg-light-gray overflow-x-auto" style="border-left:4px solid #0594CB;"> + {{- .Inner -}} +</pre> diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/shortcodes/gomodules-info.html b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/shortcodes/gomodules-info.html new file mode 100644 index 000000000..b56758ac3 --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/shortcodes/gomodules-info.html @@ -0,0 +1,17 @@ +{{ $text := ` +Most of the commands for **Hugo Modules** require a newer version of Go installed (see https://golang.org/dl/) and the relevant VCS client (e.g. Git, see https://git-scm.com/downloads/ ). If you have an "older" site running on Netlify, you may have to set GO_VERSION to 1.12 in your Environment settings. + +For more information about Go Modules, see: + +* https://github.com/golang/go/wiki/Modules +* https://blog.golang.org/using-go-modules +` }} + +<aside class="admonition note"> + <div class="note-icon"> + {{partial "svg/exclamation.svg" (dict "size" "20px" ) }} + </div> + <div class="admonition-content"> + {{- $text | markdownify -}} + </div> +</aside> diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/shortcodes/img.html b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/shortcodes/img.html new file mode 100644 index 000000000..50d4da9ed --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/shortcodes/img.html @@ -0,0 +1,379 @@ +{{- /* +Renders the given image using the given filter, if any. + +@param {string} src The path to the image which must be a remote, page, or global resource. +@param {string} [filter] The filter to apply to the image (case-insensitive). +@param {string} [filterArgs] A comma-delimited list of arguments to pass to the filter. +@param {bool} [example=false] If true, renders a before/after example. +@param {int} [exampleWidth=384] Image width, in pixels, when rendering a before/after example. + +@returns {template.HTML} + +@examples + + {{< img src="zion-national-park.jpg" >}} + + {{< img src="zion-national-park.jpg" alt="Zion National Park" >}} + + {{< img + src="zion-national-park.jpg" + alt="Zion National Park" + filter="grayscale" + >}} + + {{< img + src="zion-national-park.jpg" + alt="Zion National Park" + filter="process" + filterArgs="resize 400x webp" + >}} + + {{< img + src="zion-national-park.jpg" + alt="Zion National Park" + filter="colorize" + filterArgs="180,50,20" + >}} + + {{< img + src="zion-national-park.jpg" + alt="Zion National Park" + filter="grayscale" + example=true + >}} + + {{< img + src="zion-national-park.jpg" + alt="Zion National Park" + filter="grayscale" + example=true + exampleWidth=400 + >}} + + When using the text filter, provide the arguments in this order: + + 0. The text + 1. The horizontal offset, in pixels, relative to the left of the image (default 20) + 2. The vertical offset, in pixels, relative to the top of the image (default 20) + 3. The font size in pixels (default 64) + 4. The line height (default 1.2) + 5. The font color (default #ffffff) + + {{< img + src="images/examples/zion-national-park.jpg" + alt="Zion National Park" + filter="Text" + filterArgs="Zion National Park,25,250,56" + example=true + >}} + + When using the padding filter, provide all arguments in this order: + + 0. Padding top + 1. Padding right + 2. Padding bottom + 3. Padding right + 4. Canvas color + + {{< img + src="images/examples/zion-national-park.jpg" + alt="Zion National Park" + filter="Padding" + filterArgs="20,50,20,50,#0705" + example=true + >}} + +*/}} + +{{- /* Initialize. */}} +{{- $alt := "" }} +{{- $src := "" }} +{{- $filter := "" }} +{{- $filterArgs := slice }} +{{- $example := false }} +{{- $exampleWidth := 384 }} + +{{- /* Default values to use with the text filter. */}} +{{ $textFilterOpts := dict + "xOffset" 20 + "yOffset" 20 + "fontSize" 64 + "lineHeight" 1.2 + "fontColor" "#ffffff" + "fontPath" "https://github.com/google/fonts/raw/main/ofl/lato/Lato-Regular.ttf" +}} + +{{- /* Get and validate parameters. */}} +{{- with .Get "alt" }} + {{- $alt = .}} +{{- end }} + +{{- with .Get "src" }} + {{- $src = . }} +{{- else }} + {{- errorf "The %q shortcode requires a file parameter. See %s" .Name .Position }} +{{- end }} + +{{- with .Get "filter" }} + {{- $filter = . | lower }} +{{- end }} + +{{- $validFilters := slice + "autoorient" "brightness" "colorbalance" "colorize" "contrast" "gamma" + "gaussianblur" "grayscale" "hue" "invert" "none" "opacity" "overlay" + "padding" "pixelate" "process" "saturation" "sepia" "sigmoid" "text" + "unsharpmask" +}} + +{{- with $filter }} + {{- if not (in $validFilters .) }} + {{- errorf "The filter passed to the %q shortcode is invalid. The filter must be one of %s. See %s" $.Name (delimit $validFilters ", " ", or ") $.Position }} + {{- end }} +{{- end }} + +{{- with .Get "filterArgs" }} + {{- $filterArgs = split . "," }} + {{- $filterArgs = apply $filterArgs "trim" "." " " }} +{{- end }} + +{{- if in (slice "false" false 0) (.Get "example") }} + {{- $example = false }} +{{- else if in (slice "true" true 1) (.Get "example")}} + {{- $example = true }} +{{- end }} + +{{- with .Get "exampleWidth" }} + {{- $exampleWidth = . | int }} +{{- end }} + +{{- /* Get image. */}} +{{- $ctx := dict "page" .Page "src" $src "name" .Name "position" .Position }} +{{- $i := partial "inline/get-resource.html" $ctx }} + +{{- /* Resize if rendering before/after examples. */}} +{{- if $example }} + {{- $i = $i.Resize (printf "%dx" $exampleWidth) }} +{{- end }} + +{{- /* Create filter. */}} +{{- $f := "" }} +{{- $ctx := dict "filter" $filter "args" $filterArgs "name" .Name "position" .Position }} +{{- if eq $filter "autoorient" }} + {{- $ctx = merge $ctx (dict "argsRequired" 0) }} + {{- template "validate-arg-count" $ctx }} + {{- $f = images.AutoOrient }} +{{- else if eq $filter "brightness" }} + {{- $ctx = merge $ctx (dict "argsRequired" 1) }} + {{- template "validate-arg-count" $ctx }} + {{- $filterArgs = apply $filterArgs "float" "." }} + {{- $ctx = merge $ctx (dict "argName" "percentage" "argValue" (index $filterArgs 0) "min" -100 "max" 100) }} + {{- template "validate-arg-value" $ctx }} + {{- $f = images.Brightness (index $filterArgs 0) }} +{{- else if eq $filter "colorbalance" }} + {{- $ctx = merge $ctx (dict "argsRequired" 3) }} + {{- template "validate-arg-count" $ctx }} + {{- $filterArgs = apply $filterArgs "float" "." }} + {{- $ctx = merge $ctx (dict "argName" "percentage red" "argValue" (index $filterArgs 0) "min" -100 "max" 500) }} + {{- template "validate-arg-value" $ctx }} + {{- $ctx = merge $ctx (dict "argName" "percentage green" "argValue" (index $filterArgs 1) "min" -100 "max" 500) }} + {{- template "validate-arg-value" $ctx }} + {{- $ctx = merge $ctx (dict "argName" "percentage blue" "argValue" (index $filterArgs 2) "min" -100 "max" 500) }} + {{- template "validate-arg-value" $ctx }} + {{- $f = images.ColorBalance (index $filterArgs 0) (index $filterArgs 1) (index $filterArgs 2) }} +{{- else if eq $filter "colorize" }} + {{- $ctx = merge $ctx (dict "argsRequired" 3) }} + {{- template "validate-arg-count" $ctx }} + {{- $filterArgs = apply $filterArgs "float" "." }} + {{- $ctx = merge $ctx (dict "argName" "hue" "argValue" (index $filterArgs 0) "min" 0 "max" 360) }} + {{- template "validate-arg-value" $ctx }} + {{- $ctx = merge $ctx (dict "argName" "saturation" "argValue" (index $filterArgs 1) "min" 0 "max" 100) }} + {{- template "validate-arg-value" $ctx }} + {{- $ctx = merge $ctx (dict "argName" "percentage" "argValue" (index $filterArgs 2) "min" 0 "max" 100) }} + {{- template "validate-arg-value" $ctx }} + {{- $f = images.Colorize (index $filterArgs 0) (index $filterArgs 1) (index $filterArgs 2) }} +{{- else if eq $filter "contrast" }} + {{- $ctx = merge $ctx (dict "argsRequired" 1) }} + {{- template "validate-arg-count" $ctx }} + {{- $filterArgs = apply $filterArgs "float" "." }} + {{- $ctx = merge $ctx (dict "argName" "percentage" "argValue" (index $filterArgs 0) "min" -100 "max" 100) }} + {{- template "validate-arg-value" $ctx }} + {{- $f = images.Contrast (index $filterArgs 0) }} +{{- else if eq $filter "gamma" }} + {{- $ctx = merge $ctx (dict "argsRequired" 1) }} + {{- template "validate-arg-count" $ctx }} + {{- $filterArgs = apply $filterArgs "float" "." }} + {{- $ctx = merge $ctx (dict "argName" "gamma" "argValue" (index $filterArgs 0) "min" 0 "max" 100) }} + {{- template "validate-arg-value" $ctx }} + {{- $f = images.Gamma (index $filterArgs 0) }} +{{- else if eq $filter "gaussianblur" }} + {{- $ctx = merge $ctx (dict "argsRequired" 1) }} + {{- template "validate-arg-count" $ctx }} + {{- $filterArgs = apply $filterArgs "float" "." }} + {{- $ctx = merge $ctx (dict "argName" "sigma" "argValue" (index $filterArgs 0) "min" 0 "max" 1000) }} + {{- template "validate-arg-value" $ctx }} + {{- $f = images.GaussianBlur (index $filterArgs 0) }} +{{- else if eq $filter "grayscale" }} + {{- $ctx = merge $ctx (dict "argsRequired" 0) }} + {{- template "validate-arg-count" $ctx }} + {{- $f = images.Grayscale }} +{{- else if eq $filter "hue" }} + {{- $ctx = merge $ctx (dict "argsRequired" 1) }} + {{- template "validate-arg-count" $ctx }} + {{- $filterArgs = apply $filterArgs "float" "." }} + {{- $ctx = merge $ctx (dict "argName" "shift" "argValue" (index $filterArgs 0) "min" -180 "max" 180) }} + {{- template "validate-arg-value" $ctx }} + {{- $f = images.Hue (index $filterArgs 0) }} +{{- else if eq $filter "invert" }} + {{- $ctx = merge $ctx (dict "argsRequired" 0) }} + {{- template "validate-arg-count" $ctx }} + {{- $f = images.Invert }} +{{- else if eq $filter "opacity" }} + {{- $ctx = merge $ctx (dict "argsRequired" 1) }} + {{- template "validate-arg-count" $ctx }} + {{- $filterArgs = apply $filterArgs "float" "." }} + {{- $ctx = merge $ctx (dict "argName" "opacity" "argValue" (index $filterArgs 0) "min" 0 "max" 1) }} + {{- template "validate-arg-value" $ctx }} + {{- $f = images.Opacity (index $filterArgs 0) }} +{{- else if eq $filter "overlay" }} + {{- $ctx = merge $ctx (dict "argsRequired" 3) }} + {{- template "validate-arg-count" $ctx }} + {{- $ctx := dict "src" (index $filterArgs 0) "name" .Name "position" .Position }} + {{- $overlayImg := partial "inline/get-resource.html" $ctx }} + {{- $f = images.Overlay $overlayImg (index $filterArgs 1 | float ) (index $filterArgs 2 | float) }} +{{- else if eq $filter "padding" }} + {{- $ctx = merge $ctx (dict "argsRequired" 5) }} + {{- template "validate-arg-count" $ctx }} + {{- $f = images.Padding + (index $filterArgs 0 | int) + (index $filterArgs 1 | int) + (index $filterArgs 2 | int) + (index $filterArgs 3 | int) + (index $filterArgs 4) + }} +{{- else if eq $filter "pixelate" }} + {{- $ctx = merge $ctx (dict "argsRequired" 1) }} + {{- template "validate-arg-count" $ctx }} + {{- $filterArgs = apply $filterArgs "float" "." }} + {{- $ctx = merge $ctx (dict "argName" "size" "argValue" (index $filterArgs 0) "min" 0 "max" 1000) }} + {{- template "validate-arg-value" $ctx }} + {{- $f = images.Pixelate (index $filterArgs 0) }} +{{- else if eq $filter "process" }} + {{- $ctx = merge $ctx (dict "argsRequired" 1) }} + {{- template "validate-arg-count" $ctx }} + {{- $f = images.Process (index $filterArgs 0) }} +{{- else if eq $filter "saturation" }} + {{- $ctx = merge $ctx (dict "argsRequired" 1) }} + {{- template "validate-arg-count" $ctx }} + {{- $filterArgs = apply $filterArgs "float" "." }} + {{- $ctx = merge $ctx (dict "argName" "percentage" "argValue" (index $filterArgs 0) "min" -100 "max" 500) }} + {{- template "validate-arg-value" $ctx }} + {{- $f = images.Saturation (index $filterArgs 0) }} +{{- else if eq $filter "sepia" }} + {{- $ctx = merge $ctx (dict "argsRequired" 1) }} + {{- template "validate-arg-count" $ctx }} + {{- $filterArgs = apply $filterArgs "float" "." }} + {{- $ctx = merge $ctx (dict "argName" "percentage" "argValue" (index $filterArgs 0) "min" 0 "max" 100) }} + {{- template "validate-arg-value" $ctx }} + {{- $f = images.Sepia (index $filterArgs 0) }} +{{- else if eq $filter "sigmoid" }} + {{- $ctx = merge $ctx (dict "argsRequired" 2) }} + {{- template "validate-arg-count" $ctx }} + {{- $filterArgs = apply $filterArgs "float" "." }} + {{- $ctx = merge $ctx (dict "argName" "midpoint" "argValue" (index $filterArgs 0) "min" 0 "max" 1) }} + {{- template "validate-arg-value" $ctx }} + {{- $ctx = merge $ctx (dict "argName" "factor" "argValue" (index $filterArgs 1) "min" -10 "max" 10) }} + {{- template "validate-arg-value" $ctx }} + {{- $f = images.Sigmoid (index $filterArgs 0) (index $filterArgs 1) }} +{{- else if eq $filter "text" }} + {{- $ctx = merge $ctx (dict "argsRequired" 1) }} + {{- template "validate-arg-count" $ctx }} + {{- $ctx := dict "src" $textFilterOpts.fontPath "name" .Name "position" .Position }} + {{- $font := or (partial "inline/get-resource.html" $ctx) }} + {{- $fontSize := or (index $filterArgs 3 | int) $textFilterOpts.fontSize }} + {{- $lineHeight := math.Max (or (index $filterArgs 4 | float) $textFilterOpts.lineHeight) 1 }} + {{- $opts := dict + "x" (or (index $filterArgs 1 | int) $textFilterOpts.xOffset) + "y" (or (index $filterArgs 2 | int) $textFilterOpts.yOffset) + "size" $fontSize + "linespacing" (mul (sub $lineHeight 1) $fontSize) + "color" (or (index $filterArgs 5) $textFilterOpts.fontColor) + "font" $font + }} + {{- $f = images.Text (index $filterArgs 0) $opts }} +{{- else if eq $filter "unsharpmask" }} + {{- $ctx = merge $ctx (dict "argsRequired" 3) }} + {{- template "validate-arg-count" $ctx }} + {{- $filterArgs = apply $filterArgs "float" "." }} + {{- $ctx = merge $ctx (dict "argName" "sigma" "argValue" (index $filterArgs 0) "min" 0 "max" 500) }} + {{- template "validate-arg-value" $ctx }} + {{- $ctx = merge $ctx (dict "argName" "amount" "argValue" (index $filterArgs 1) "min" 0 "max" 100) }} + {{- template "validate-arg-value" $ctx }} + {{- $ctx = merge $ctx (dict "argName" "threshold" "argValue" (index $filterArgs 2) "min" 0 "max" 1) }} + {{- template "validate-arg-value" $ctx }} + {{- $f = images.UnsharpMask (index $filterArgs 0) (index $filterArgs 1) (index $filterArgs 2) }} +{{- end }} + +{{- /* Apply filter. */}} +{{- $fi := $i }} +{{- with $f }} + {{- $fi = $i.Filter . }} +{{- end }} + +{{- /* Render. */}} +{{- if $example }} + <p>Original</p> + <img class='di ba b--black-20' style="width: initial;" src="{{ $i.RelPermalink }}" alt="{{ $alt }}"> + <p>Processed</p> + <img class='di ba b--black-20' style="width: initial;" src="{{ $fi.RelPermalink }}" alt="{{ $alt }}"> +{{- else -}} + <img class='di' style="width: initial;" src="{{ $fi.RelPermalink }}" alt="{{ $alt }}"> +{{- end }} + +{{- define "validate-arg-count" }} + {{- $msg := "When using the %q filter, the %q shortcode requires an args parameter with %d %s. See %s" }} + {{- if lt (len .args) .argsRequired }} + {{- $text := "values" }} + {{- if eq 1 .argsRequired }} + {{- $text = "value" }} + {{- end }} + {{- errorf $msg .filter .name .argsRequired $text .position }} + {{- end }} +{{- end }} + +{{- define "validate-arg-value" }} + {{- $msg := "The %q argument passed to the %q shortcode is invalid. Expected a value in the range [%v,%v], but received %v. See %s" }} + {{- if or (lt .argValue .min) (gt .argValue .max) }} + {{- errorf $msg .argName .name .min .max .argValue .position }} + {{- end }} +{{- end }} + +{{- define "partials/inline/get-resource.html" }} + {{- $r := "" }} + {{- $u := urls.Parse .src }} + {{- $msg := "The %q shortcode was unable to resolve %s. See %s" }} + {{- if $u.IsAbs }} + {{- with resources.GetRemote $u.String }} + {{- with .Err }} + {{- errorf "%s" }} + {{- else }} + {{- /* This is a remote resource. */}} + {{- $r = . }} + {{- end }} + {{- else }} + {{- errorf $msg $.name $u.String $.position }} + {{- end }} + {{- else }} + {{- with .page.Resources.Get (strings.TrimPrefix "./" $u.Path) }} + {{- /* This is a page resource. */}} + {{- $r = . }} + {{- else }} + {{- with resources.Get $u.Path }} + {{- /* This is a global resource. */}} + {{- $r = . }} + {{- else }} + {{- errorf $msg $.name $u.Path $.position }} + {{- end }} + {{- end }} + {{- end }} + {{- return $r}} +{{- end -}} diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/shortcodes/imgproc.html b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/shortcodes/imgproc.html new file mode 100644 index 000000000..c09133ba8 --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/shortcodes/imgproc.html @@ -0,0 +1,37 @@ +{{- /* +Renders the given image using the given process specification. + +@param {string} (positional parameter 0) The path to the image, relative to the current page. The image must be a page resource. +@param {string}} (positional parameter 1) The image processing specification. + +@returns template.HTML + +@example {{< imgproc "sunset.jpg" "resize 300x" />}} +*/}} + +{{- with $.Get 0 }} + {{- with $i := $.Page.Resources.Get . }} + {{- with $spec := $.Get 1 }} + {{- with $i.Process . }} + <figure style="padding: 0.25rem; margin: 2rem 0; background-color: #cccc"> + <img style="max-width: 100%; width: auto; height: auto;" src="{{ .RelPermalink }}" width="{{ .Width }}" height="{{ .Height }}" alt=""> + <figcaption> + <small> + {{- with $.Inner }} + {{ . }} + {{- else }} + {{ $spec }} + {{- end }} + </small> + </figcaption> + </figure> + {{- end }} + {{- else }} + {{- errorf "The %q shortcode requires a positional parameter (1) containing the image processing specification. See %s" $.Name $.Position }} + {{- end }} + {{- else }} + {{- errorf "The %q shortcode was unable to find %q. See %s" $.Name . $.Position }} + {{- end }} +{{- else }} + {{- errorf "The %q shortcode requires a positional parameter (0) indicating the image path, relative to the current page. See %s" $.Name $.Position }} +{{- end }} diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/shortcodes/include.html b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/shortcodes/include.html new file mode 100644 index 000000000..9ad6e4ecb --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/shortcodes/include.html @@ -0,0 +1,20 @@ +{{- /* +Renders the page using the RenderShortcode method on the Page object. + +You must call this shortcode using the {{% %}} notation. + +@param {string} (positional parameter 0) The path to the page, relative to the content directory. +@returns template.HTML + +@example {{% include "functions/_common/glob-patterns" %}} +*/}} + +{{- with .Get 0 }} + {{- with site.GetPage . }} + {{- .RenderShortcodes }} + {{- else }} + {{- errorf "The %q shortcode was unable to find %q. See %s" $.Name . $.Position }} + {{- end }} +{{- else }} + {{- errorf "The %q shortcode requires a positional parameter indicating the path of the file to include. See %s" .Name .Position }} +{{- end }} diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/shortcodes/list-pages-in-section.html b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/shortcodes/list-pages-in-section.html new file mode 100644 index 000000000..73e7f85a9 --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/shortcodes/list-pages-in-section.html @@ -0,0 +1,96 @@ +{{- /* +Renders a description list of the pages in the given section. + +Render a subset of the pages in the section by specifying a predefined filter, +and whether to include those pages. + +Filters are defined in the data directory, in the file named page_filters. Each +filter is an array of paths to a file, relative to the root of the content +directory. Hugo will throw an error if the specified filter does not exist, or +if any of the pages in the filter do not exist. + +The definition term elements (dt) have an id attribute derived from the title +of the page. This is probably unique, because pages of the same title in the +same section is unlikely. + +If you render a complete list on a page, then call the shortcode again to +render a subset, you will generate duplicate element ids. In this case, set +omitElementIDs to true for the subset. + +@param {string} path The path to the section. +@param {string} [filter=""] The name of filter list. +@param {string} [filterType=""] The type of filter, either include or exclude. +@param {string} [omitElementIDs=false] Whether to omit dt element ids. +@param {string} [titlePrefix=""] The string to prepend to the link title. + +@returns template.HTML + +@example {{< list-pages-in-section path=/methods/resources >}} +@example {{< list-pages-in-section path=/functions/images filter=some_filter filterType=exclude >}} +@example {{< list-pages-in-section path=/functions/images filter=some_filter filterType=exclude titlePrefix=foo >}} +@example {{< list-pages-in-section path=/functions/images filter=some_filter filterType=exclude titlePrefix=foo omitElementIDs=true >}} +*/}} + +{{- /* Initialize. */}} +{{- $filter := or "" (.Get "filter" | lower)}} +{{- $filterType := or (.Get "filterType") "none" | lower }} +{{- $filteredPages := slice }} +{{- $titlePrefix := or (.Get "titlePrefix") "" }} +{{- $omitElementIDs := false }} + +{{- /* Get boolean parameters. */}} +{{- if in (slice "false" false 0) (.Get "omitElementIDs") }} + {{- $omitElementIDs = false }} +{{- else if in (slice "true" true 1) (.Get "omitElementIDs")}} + {{- $omitElementIDs = true }} +{{- end }} + +{{- /* Build slice of filtered pages. */}} +{{- with $filter }} + {{- with index site.Data.page_filters . }} + {{- range . }} + {{- with site.GetPage . }} + {{- $filteredPages = $filteredPages | append . }} + {{- else }} + {{- errorf "The %q shortcode was unable to find %q as specified in the page_filters data file. See %s" $.Name . $.Position }} + {{- end }} + {{- end }} + {{- else }} + {{- errorf "The %q shortcode was unable to find the %q filter in the page_filters data file. See %s" $.Name . $.Position }} + {{- end }} +{{- end }} + +{{- /* Render */}} +{{- with $sectionPath := .Get "path" }} + {{- with site.GetPage . }} + {{- with .RegularPages }} + <dl> + {{- range $page := .ByTitle }} + {{- if or + (and (eq $filterType "include") (in $filteredPages $page)) + (and (eq $filterType "exclude") (not (in $filteredPages $page))) + (eq $filterType "none") + }} + {{- $linkTitle := .LinkTitle }} + {{- with $titlePrefix }} + {{- $linkTitle = printf "%s%s" . $linkTitle }} + {{- end }} + {{- $idAttribute := "" }} + {{- if not $omitElementIDs }} + {{- $id := path.Join .File.Dir .File.ContentBaseName | replaceRE `[\|/]` ":" | lower }} + {{- $idAttribute = printf " id=%q" $id }} + {{- end }} + <dt {{- $idAttribute | safeHTMLAttr }}><a href="{{ $page.RelPermalink }}">{{ $linkTitle }}</a></dt> + <dd>{{- $page.Description | $page.RenderString }}</dd> + {{- end }} + {{- end }} + </dl> + {{- else }} + {{- warnf "The %q shortcode found no pages in the %q section. See %s" $.Name $sectionPath $.Position }} + {{- end }} + {{- else }} + {{- errorf "The %q shortcode was unable to find %q. See %s" $.Name $sectionPath $.Position }} + {{- end }} +{{- else }} + {{- errorf "The %q shortcode requires a 'path' parameter indicating the path to the section. See %s" $.Name $.Position }} +{{- end }} diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/shortcodes/module-mounts-note.html b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/shortcodes/module-mounts-note.html new file mode 100644 index 000000000..e8b2a7a7e --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/shortcodes/module-mounts-note.html @@ -0,0 +1 @@ +Also see [Module Mounts Config](/hugo-modules/configuration/#module-configuration-mounts) for an alternative way to configure this directory (from Hugo 0.56). diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/shortcodes/new-in.html b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/shortcodes/new-in.html new file mode 100644 index 000000000..e22a91f3d --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/shortcodes/new-in.html @@ -0,0 +1,36 @@ +{{- /* +Renders a "new in" button indicating the version in which a feature was added. + +When comparing the current version to the specified version, the "new in" +button will be hidden if any of the following conditions is true: + +- The major version difference exceeds the majorVersionDiffThreshold +- The minor version difference exceeds the minorVersionDiffThreshold + +@param {string} version The semantic version string, with or without a leading v. +@returns {template.HTML} + +@example {{< new-in 0.100.0 >}} +*/}} + +{{- /* Set defaults. */}} +{{- $majorVersionDiffThreshold := 0 }} +{{- $minorVersionDiffThreshold := 30 }} +{{- $displayExpirationWarning := true }} + +{{- /* Render. */}} +{{- with $version := .Get 0 | strings.TrimPrefix "v" }} + {{- $majorVersionDiff := sub (index (split hugo.Version ".") 0 | int) (index (split $version ".") 0 | int) }} + {{- $minorVersionDiff := sub (index (split hugo.Version ".") 1 | int) (index (split $version ".") 1 | int) }} + {{- if or (gt $majorVersionDiff $majorVersionDiffThreshold) (gt $minorVersionDiff $minorVersionDiffThreshold) }} + {{- if $displayExpirationWarning }} + {{- warnf "This call to the %q shortcode should be removed: %s. The button is now hidden because the specified version (%s) is older than the display threshold." $.Name $.Position $version }} + {{- end }} + {{- else }} + <button class="bg-white hover:bg-gray-100 text-gray-800 font-semibold py-2 mr2 px-4 border border-gray-400 rounded shadow"> + <a href="{{ printf "https://github.com/gohugoio/hugo/releases/tag/v%s" $version }}">New in v{{ $version }}</a> + </button> + {{- end }} +{{- else }} + {{- errorf "The %q shortcode requires a positional parameter (version). See %s" .Name .Position }} +{{- end -}} diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/shortcodes/note.html b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/shortcodes/note.html new file mode 100644 index 000000000..99818114e --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/shortcodes/note.html @@ -0,0 +1,7 @@ +{{ $_hugo_config := `{ "version": 1 }` }} + +<aside> + <div class="admonition-content bl bw2 b--blue" > + {{ .Inner }} + </div> +</aside> diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/shortcodes/quick-reference.html b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/shortcodes/quick-reference.html new file mode 100644 index 000000000..fc53c93bd --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/shortcodes/quick-reference.html @@ -0,0 +1,39 @@ +{{/* +Renders the child sections of the given top-level section, listing each child's immediate descendants. + +@param {string} section The top-level section to render. +@returns template.HTML + +@example {{% quick-reference section="functions" %}} +*/}} + +{{ $section := "" }} +{{ with .Get "section" }} + {{ $section = . }} +{{ else }} + {{ errorf "The %q shortcodes requires a 'section' parameter. See %s" .Name .Position }} +{{ end }} + +{{/* Do not change the markdown indentation, and do not remove blank lines. */}} +{{ with site.GetPage $section }} + {{ range .Sections }} + +## {{ .LinkTitle }} +{{ .RawContent }} + + {{ range .Pages }} + {{ $aliases := "" }} + {{ if eq .Section "functions" }} + {{ with .Params.action.aliases }} + {{ $aliases = delimit . " or " }} + {{ end }} + {{ end }} + +[{{ .LinkTitle }}]({{ .RelPermalink }}) {{ with $aliases }}({{ . }}){{ end }} +: {{ .Description }} + + {{ end }} + {{ end }} +{{ else }} + {{ errorf "The %q shortcodes was unable to find the %q section. See %s" .Name $section .Position }} +{{ end }} diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/shortcodes/readfile.html b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/shortcodes/readfile.html new file mode 100644 index 000000000..de8083443 --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/shortcodes/readfile.html @@ -0,0 +1,29 @@ +{{- $highlight := or (.Get "highlight") "" }} + +{{- $markdown := false }} +{{- if in (slice "false" false 0) (.Get "markdown") }} + {{- $markdown = false }} +{{- else if in (slice "true" true 1) (.Get "markdown") }} + {{- $markdown = true }} +{{- end }} + +{{- with .Get "file" }} + {{- if os.FileExists . }} + {{- with os.ReadFile . }} + {{- $content := trim . "\n\r" }} + {{- if $markdown }} + {{- $content | markdownify }} + {{- else if $highlight }} + {{- highlight $content $highlight }} + {{- else }} + {{- $content | safeHTML }} + {{- end }} + {{- else }} + {{- errorf "The %q shortcode was unable to read %q. See %s" $.Name . $.Position }} + {{- end }} + {{- else }} + {{- errorf "The %q shortcode was unable to find %q. See %s" $.Name . $.Position }} + {{- end }} +{{- else }} + {{- errorf "The %q shortcode requires a 'file' parameter. See %s" $.Name $.Position }} +{{- end }} diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/shortcodes/todo.html b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/shortcodes/todo.html new file mode 100644 index 000000000..50a099267 --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/shortcodes/todo.html @@ -0,0 +1 @@ +{{ if .Inner }}{{ end }}
\ No newline at end of file diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/showcase/list.html b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/showcase/list.html new file mode 100644 index 000000000..bff52ad8d --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/showcase/list.html @@ -0,0 +1,46 @@ +{{ define "main" }} +<div class="w-100 ph4 ph5-ns pb5 pb6-ns pt1 pt3-ns "> + <article class="cf pa3 pa4-m pa4-l nested-copy-line-height nested-img"> + <h1 class="primary-color-dark"> + {{ .Title }} + </h1> + <div class="nested-copy-line-height"> + {{ .Content }} + </div> + </article> + <section class="flex-ns flex-wrap justify-between w-100 v-top"> + {{ range (.Paginate (.Pages | shuffle ) 20).Pages }} + {{template "showcase_items" .}} + {{ end }} + </section> + <div class="nested-list-reset nested-links"> + {{/* pagination.html: https://github.com/gohugoio/hugo/blob/master/tpl/tplimpl/template_embedded.go#L117 */}} + {{ template "_internal/pagination.html" . }} + </div> + <div class="dib f3 mt4">The Showcase articles are copyrighted by their respective content authors. Any open source license will be attached.</div> +</div> +{{ end }} + + +{{define "showcase_items"}} + <a href="{{.Permalink}}" class="b--moon-gray ba bg-animate bg-white db flex-auto-ns hover-bg-near-white mb3 mr3 w-100 w-30-l" style="max-width: 1024px;"> + <div class="flex flex-column black h-100 mb2 pa3 pa4-l"> + {{ $img := (.Resources.ByType "image").GetMatch "*featured*" }} + {{ with $img }} + {{ $big := .Fill "1024x512 top" }} + {{ $small := $big.Resize "512x" }} + <img src="data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYwMCIgaGVpZ2h0PSI5MDAiIHZpZXdCb3g9IjAgMCAxNjAwIDkwMCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj48dGl0bGU+UmVjdGFuZ2xlPC90aXRsZT48ZGVzYz5DcmVhdGVkIHdpdGggU2tldGNoLjwvZGVzYz48ZyBpZD0iUGFnZS0xIiBzdHJva2U9Im5vbmUiIHN0cm9rZS13aWR0aD0iMSIgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIj48cmVjdCBpZD0iUmVjdGFuZ2xlIiB4PSIwIiB5PSIwIiB3aWR0aD0iMTYwMCIgaGVpZ2h0PSI5MDAiLz48L2c+PC9zdmc+" + data-sizes="auto" + data-srcset="{{ $small.RelPermalink }} 1x, + {{ $big.RelPermalink }} 2x" data-bg="{{ $small.RelPermalink }}" class="grow img lazyload" style="display: block; width: 100%; height: auto;" /> + {{end}} + <div style="margin-top:auto;">{{/* the margin aligns to the bottom */}} + <h2 class="dib f3 mt4"> + {{- .Title -}} + </h2> + </div> + </div> + </a> + + +{{end}} diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/showcase/single.html b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/showcase/single.html new file mode 100644 index 000000000..5ae1e07a7 --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/showcase/single.html @@ -0,0 +1,106 @@ +{{ define "title" }} +Showcase: {{ .Title }} +{{ end }} + +{{ define "main" }} + <article class="center ph3 ph4-ns pv3 pv5-ns mw9"> + + <!-- header spans the full width --> + <div class="flex flex-wrap"> + + <div class="w-100 w-20-l order-1 order-0-l"> + {{template "sc-details" .}} + </div> + + <div class="w-100 w-60-l order-0 order-1-l ph4-l"> + {{template "sc-main-column" .}} + </div> + + <aside class="dn mid-gray w-100 w-20-ns flex-l justify-center order-2"> + {{template "sc-navigation" .}} + </aside> + + </div> + + <div class="f6 gray mv6">{{/* bottom row */}} + Last Update: {{ .Lastmod.Format "January 2, 2006" }} <br> + {{ partial "page-edit.html" . }} + </div> + <div class="b">The Showcase articles are copyright the content authors. Any open source license will be attached.</div> + </article> +{{ end }} + + + +{{define "sc-main-column"}} + {{ $img := (.Resources.ByType "image").GetMatch "*featured*" }} + {{ with $img }} + {{ $big := .Fill "1024x512 top" }} + {{ $small := $big.Resize "512x" }} + <img + alt="{{ $img.Title }}" + src="{{ $big.RelPermalink }}" + srcset="{{ $small.RelPermalink }} 512w, {{ $big.RelPermalink }} 1024w" + sizes="(min-width: 1570px) 822px, (max-width: 1569px) and (min-width: 960px) 50vw, 93vw" + width="{{ $big.Width }}" + class="mw-100 b--light-gray ba" + > + {{ end }} + <div class="mid-gray nested-copy-line-height nested-img nested-links"> + {{with .Params.byline }} + <div style="margin-top: 20px; font-style: italic;">By {{ . | markdownify -}}</div> + {{ end }} + {{with .Content}} + {{- . -}} + {{end}} + </div> + +{{end}} + +{{define "sc-details"}} + <div class="mt4 mt0-ns nested-links"> + <div class="ba b--light-gray bg-white pa3"> + <h1 class="f2-fluid mt0">{{.Title}}</h1> + {{ with .Params.siteURL }} + <a href="{{ . }}" class="db f5 mb1">{{ . | replaceRE "^https?://(www\\.)?([^/]+).*" "$2"}} {{ partial "svg/link-ext.svg" (dict "size" "10") }}</a> + {{ end }} + {{ with .Params.siteSource }} + <a href="{{ . }}" class="db mb4">source {{ partial "svg/link-ext.svg" (dict "size" "10") }}</a> + {{ end }} + {{ $bio := (.Resources.ByType "page").GetMatch "bio*" }} + {{ with $bio }} + <div class="f6 mid-gray nested-copy-line-height nested-links"> + {{- .Content -}} + </div> + {{ end }} + </div> + <div class="b--light-gray bt dn-l pt3"> + <div class="f6 gray mb2">Previous/Next</div> + {{- partial "previous-next-links-in-section-with-title.html" . -}} + </div> + </div> +{{end}} + +{{define "sc-navigation"}} + {{$section := where .Site.RegularPages "Section" .Section}} + {{$number_of_entries := $section | len}} + <ul class="pa0 list"> + <li class="b f5 blTK b--light-gray pb2 pl2"> + More Sites + </li> + {{range first 20 $section}} + <li class="bl b--light-gray pl2 f6 hover-bg-light-gray hover-accent-color-light {{if eq $ .}} bg-light-gray{{end}}"> + <a href="{{.RelPermalink}}" class="db link w-100 pv1 ph1 {{ if eq $ . }} b primary-color{{else}} mid-gray {{end}}"> + {{- .Title -}} + </a> + </li> + {{end}} + {{if gt $number_of_entries 20}} + <li class="mt3"> + <a href="/showcase/page/2/" class="link blue"> + See More » + </a> + </li> + {{end}} + </ul> +{{end}} diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/template-func/page.html b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/template-func/page.html new file mode 100644 index 000000000..8b5f0da85 --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/layouts/template-func/page.html @@ -0,0 +1,55 @@ +{{ $pkg := .Params.package}} +{{ $funcs := index site.Data.docs.tpl.funcs $pkg }} + +{{ range $k, $v := $funcs }} + {{ if $v.Description }} + {{ $func := printf "%s.%s" $pkg $k }} + {{ $id := $func | anchorize | safeURL }} + <h2 id="{{ $id }}"> + <a class="header-link" href="#{{ $id }}"> + <svg class="fill-current o-60 hover-accent-color-light" height="22px" viewBox="0 0 24 24" width="22px" xmlns="http://www.w3.org/2000/svg"> + <path d="M0 0h24v24H0z" fill="none"/> + <path d="M3.9 12c0-1.71 1.39-3.1 3.1-3.1h4V7H7c-2.76 0-5 2.24-5 5s2.24 5 5 5h4v-1.9H7c-1.71 0-3.1-1.39-3.1-3.1zM8 13h8v-2H8v2zm9-6h-4v1.9h4c1.71 0 3.1 1.39 3.1 3.1s-1.39 3.1-3.1 3.1h-4V17h4c2.76 0 5-2.24 5-5s-2.24-5-5-5z"/> + </svg> + </a> + {{ $func }} + </h2> + {{ with $v.Description }} + <p class="f4 lh-copy"> + {{ . | $.RenderString | safeHTML }} + </p> + {{ end }} + <h4 class="minor mb3 pt2 primary-color-dark"> + Syntax + </h4> + <div class="f5 mb4 ph3 pv2 bg-light-gray" style="border-left:4px solid #0594CB;"> + {{ $pkg }}.{{ $k }} + {{ with $v.Args }} + <span class="ttu"> + {{ delimit $v.Args ", "}} + </span> + {{ end }} + <span></span> + </div> + {{ if $v.Examples }} + <h4 class="minor mb3 pt2 primary-color-dark"> + Examples + </h4> + {{ end }} + {{ range $v.Examples }} + {{ $input := index . 0 }} + {{ $result := index . 1 }} + {{ $example := printf "%s ---> %s" $input $result }} + + {{ highlight $example "go-html-template" "" }} + {{ end }} + {{ with $v.Aliases }} + <h4 class="minor mb3 pt2 primary-color-dark"> + Aliases + </h4> + <p> + {{ delimit . ", "}} + </p> + {{ end }} + {{ end }} +{{ end }} diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/package.json b/docs/_vendor/github.com/gohugoio/gohugoioTheme/package.json new file mode 100644 index 000000000..14d128910 --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/package.json @@ -0,0 +1,34 @@ +{ + "name": "gohugo-default-styles", + "version": "1.1.0", + "description": "Default Theme for Hugo Sites", + "main": "index.js", + "repository": "", + "author": "budparr", + "license": "MIT", + "scripts": { + "build": "NODE_ENV=production webpack", + "build-dev": "NODE_ENV=development webpack --progress --watch", + "start": "npm run build-dev" + }, + "devDependencies": { + "clean-webpack-plugin": "^1.0.0", + "clipboard": "^2.0.4", + "css-loader": "^1.0.1", + "docsearch.js": "^2.6.1", + "file-loader": "^2.0.0", + "glob-all": "^3.1.0", + "lazysizes": "^5.3.2", + "mini-css-extract-plugin": "^0.4.4", + "postcss": "^7.0.5", + "postcss-cssnext": "^3.1.0", + "postcss-import": "^12.0.1", + "postcss-loader": "^3.0.0", + "purgecss-webpack-plugin": "^1.3.1", + "scrolldir": "^1.4.0", + "tachyons": "^4.7.0", + "typeface-muli": "0.0.54", + "webpack": "^4.25.1", + "webpack-command": "^0.4.2" + } +} diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/static/android-chrome-144x144.png b/docs/_vendor/github.com/gohugoio/gohugoioTheme/static/android-chrome-144x144.png Binary files differnew file mode 100644 index 000000000..975cb33ba --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/static/android-chrome-144x144.png diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/static/android-chrome-192x192.png b/docs/_vendor/github.com/gohugoio/gohugoioTheme/static/android-chrome-192x192.png Binary files differnew file mode 100644 index 000000000..7ab6c3849 --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/static/android-chrome-192x192.png diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/static/android-chrome-256x256.png b/docs/_vendor/github.com/gohugoio/gohugoioTheme/static/android-chrome-256x256.png Binary files differnew file mode 100644 index 000000000..ed88a2224 --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/static/android-chrome-256x256.png diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/static/android-chrome-36x36.png b/docs/_vendor/github.com/gohugoio/gohugoioTheme/static/android-chrome-36x36.png Binary files differnew file mode 100644 index 000000000..3695eb088 --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/static/android-chrome-36x36.png diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/static/android-chrome-48x48.png b/docs/_vendor/github.com/gohugoio/gohugoioTheme/static/android-chrome-48x48.png Binary files differnew file mode 100644 index 000000000..ca275dad6 --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/static/android-chrome-48x48.png diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/static/android-chrome-72x72.png b/docs/_vendor/github.com/gohugoio/gohugoioTheme/static/android-chrome-72x72.png Binary files differnew file mode 100644 index 000000000..966891f25 --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/static/android-chrome-72x72.png diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/static/android-chrome-96x96.png b/docs/_vendor/github.com/gohugoio/gohugoioTheme/static/android-chrome-96x96.png Binary files differnew file mode 100644 index 000000000..feb1d3ebf --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/static/android-chrome-96x96.png diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/static/apple-touch-icon.png b/docs/_vendor/github.com/gohugoio/gohugoioTheme/static/apple-touch-icon.png Binary files differnew file mode 100644 index 000000000..ecf1fc020 --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/static/apple-touch-icon.png diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/static/browserconfig.xml b/docs/_vendor/github.com/gohugoio/gohugoioTheme/static/browserconfig.xml new file mode 100644 index 000000000..62400c5f2 --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/static/browserconfig.xml @@ -0,0 +1,10 @@ +<?xml version="1.0" encoding="utf-8"?> +<browserconfig> + <msapplication> + <tile> + <square150x150logo src="images/favicons/mstile-150x150.png"/> + <square310x310logo src="images/favicons/mstile-310x310.png"/> + <TileColor>#2d89ef</TileColor> + </tile> + </msapplication> +</browserconfig> diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/static/dist/app.bundle.js b/docs/_vendor/github.com/gohugoio/gohugoioTheme/static/dist/app.bundle.js new file mode 100644 index 000000000..6391e71e9 --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/static/dist/app.bundle.js @@ -0,0 +1,22 @@ +!function(t){function e(r){if(n[r])return n[r].exports;var i=n[r]={i:r,l:!1,exports:{}};return t[r].call(i.exports,i,i.exports,e),i.l=!0,i.exports}var n={};e.m=t,e.c=n,e.i=function(t){return t},e.d=function(t,n,r){e.o(t,n)||Object.defineProperty(t,n,{configurable:!1,enumerable:!0,get:r})},e.n=function(t){var n=t&&t.__esModule?function(){return t.default}:function(){return t};return e.d(n,"a",n),n},e.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},e.p="",e(e.s=11)}([function(t,e,n){"use strict";var r=function(t){var e=document.createElement("a");return e.className="header-link",e.href="#"+t,e.innerHTML=' <svg class="fill-current o-60 hover-accent-color-light" height="22px" viewBox="0 0 24 24" width="22px" xmlns="http://www.w3.org/2000/svg"><path d="M0 0h24v24H0z" fill="none"/><path d="M3.9 12c0-1.71 1.39-3.1 3.1-3.1h4V7H7c-2.76 0-5 2.24-5 5s2.24 5 5 5h4v-1.9H7c-1.71 0-3.1-1.39-3.1-3.1zM8 13h8v-2H8v2zm9-6h-4v1.9h4c1.71 0 3.1 1.39 3.1 3.1s-1.39 3.1-3.1 3.1h-4V17h4c2.76 0 5-2.24 5-5s-2.24-5-5-5z"/></svg>',e},i=function(t,e){for(var n=e.getElementsByTagName("h"+t),i=0;i<n.length;i++){var o=n[i];void 0!==o.id&&""!==o.id&&o.appendChild(r(o.id))}};document.onreadystatechange=function(){if("complete"===this.readyState){var t=document.getElementsByClassName("prose")[0];if(!t)return;for(var e=2;e<=4;e++)i(e,t)}}},function(t,e,n){"use strict";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)}function i(t,e){var n="cut"===e?"X":"C";return isMac?"Press ⌘-"+n:"Press Ctrl-"+n}new(n(12))(".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,i(t.action))})},function(t,e,n){"use strict";var r=function(){function t(t,e){var n=[],r=!0,i=!1,o=void 0;try{for(var s,a=t[Symbol.iterator]();!(r=(s=a.next()).done)&&(n.push(s.value),!e||n.length!==e);r=!0);}catch(t){i=!0,o=t}finally{try{!r&&a.return&&a.return()}finally{if(i)throw o}}return n}return function(e,n){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return t(e,n);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),i=document.getElementById("prose");if(i){var o=i.getElementsByTagName("code"),s=!0,a=!1,u=void 0;try{for(var c,l=Object.entries(o)[Symbol.iterator]();!(s=(c=l.next()).done);s=!0){var h=c.value,f=r(h,2),p=(f[0],f[1]);p.scrollWidth-p.clientWidth>0&&p.parentNode.classList.add("expand")}}catch(t){a=!0,u=t}finally{try{!s&&l.return&&l.return()}finally{if(a)throw u}}}},function(t,e,n){"use strict";n(13)({apiKey:"167e7998590aebda7f9fedcf86bc4a55",indexName:"hugodocs",inputSelector:"#search-input",debug:!0})},function(t,e,n){"use strict";n(14),n(15)},function(t,e,n){"use strict";function r(){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")}}for(var i=document.getElementsByClassName("js-toggle"),o=0;o<i.length;o++)i[o].addEventListener("click",r,!1)},function(t,e,n){"use strict";document.documentElement.className=document.documentElement.className.replace(/\bno-js\b/,"js")},function(t,e,n){"use strict";n(16)},function(t,e,n){"use strict";!function(){if("querySelector"in document&&"addEventListener"in window&&Array.prototype.forEach){var t=function(t,e){var n,r=window.pageYOffset,i=t.offsetTop,o=i-r,s=o/(e/16),a=function(){window.scrollBy(0,s),n()};n=s>=0?function(){var t=window.pageYOffset;(t>=i-s||window.innerHeight+t>=document.body.offsetHeight)&&clearInterval(u)}:function(){window.pageYOffset<=(i||0)&&clearInterval(u)};var u=setInterval(a,16)},e=document.querySelectorAll("#TableOfContents ul li a");[].forEach.call(e,function(e){e.addEventListener("click",function(n){n.preventDefault();var r=e.getAttribute("href"),i=document.querySelector(r),o=e.getAttribute("data-speed");i&&t(i,o||500)},!1)})}}()},function(t,e,n){"use strict";function r(t){if(t.target){t.preventDefault();var e=t.currentTarget,n=e.getAttribute("data-toggle-tab")}else var n=t;window.localStorage&&window.localStorage.setItem("configLangPref",n);for(var r=document.querySelectorAll("[data-toggle-tab='"+n+"']"),i=document.querySelectorAll("[data-pane='"+n+"']"),a=0;a<o.length;a++)o[a].classList.remove("active"),s[a].classList.remove("active");for(var a=0;a<r.length;a++)r[a].classList.add("active"),i[a].classList.add("active")}var i,o=document.querySelectorAll("[data-toggle-tab]"),s=document.querySelectorAll("[data-pane]");for(i=0;i<o.length;i++)o[i].addEventListener("click",r);window.localStorage.getItem("configLangPref")&&r(window.localStorage.getItem("configLangPref"))},function(t,e){},function(t,e,n){"use strict";var r=n(10);!function(t){t&&t.__esModule}(r);n(0),n(1),n(2),n(3),n(4),n(5),n(7),n(8),n(9),n(6)},function(t,e,n){var r,r;/*! + * clipboard.js v1.7.1 + * https://zenorocha.github.io/clipboard.js + * + * Licensed MIT © Zeno Rocha + */ +!function(e){t.exports=e()}(function(){var t;return function t(e,n,i){function o(a,u){if(!n[a]){if(!e[a]){var c="function"==typeof r&&r;if(!u&&c)return r(a,!0);if(s)return s(a,!0);var l=new Error("Cannot find module '"+a+"'");throw l.code="MODULE_NOT_FOUND",l}var h=n[a]={exports:{}};e[a][0].call(h.exports,function(t){var n=e[a][1][t];return o(n||t)},h,h.exports,t,e,n,i)}return n[a].exports}for(var s="function"==typeof r&&r,a=0;a<i.length;a++)o(i[a]);return o}({1:[function(t,e,n){function r(t,e){for(;t&&t.nodeType!==i;){if("function"==typeof t.matches&&t.matches(e))return t;t=t.parentNode}}var i=9;if("undefined"!=typeof Element&&!Element.prototype.matches){var o=Element.prototype;o.matches=o.matchesSelector||o.mozMatchesSelector||o.msMatchesSelector||o.oMatchesSelector||o.webkitMatchesSelector}e.exports=r},{}],2:[function(t,e,n){function r(t,e,n,r,o){var s=i.apply(this,arguments);return t.addEventListener(n,s,o),{destroy:function(){t.removeEventListener(n,s,o)}}}function i(t,e,n,r){return function(n){n.delegateTarget=o(n.target,e),n.delegateTarget&&r.call(t,n)}}var o=t("./closest");e.exports=r},{"./closest":1}],3:[function(t,e,n){n.node=function(t){return void 0!==t&&t instanceof HTMLElement&&1===t.nodeType},n.nodeList=function(t){var e=Object.prototype.toString.call(t);return void 0!==t&&("[object NodeList]"===e||"[object HTMLCollection]"===e)&&"length"in t&&(0===t.length||n.node(t[0]))},n.string=function(t){return"string"==typeof t||t instanceof String},n.fn=function(t){return"[object Function]"===Object.prototype.toString.call(t)}},{}],4:[function(t,e,n){function r(t,e,n){if(!t&&!e&&!n)throw new Error("Missing required arguments");if(!a.string(e))throw new TypeError("Second argument must be a String");if(!a.fn(n))throw new TypeError("Third argument must be a Function");if(a.node(t))return i(t,e,n);if(a.nodeList(t))return o(t,e,n);if(a.string(t))return s(t,e,n);throw new TypeError("First argument must be a String, HTMLElement, HTMLCollection, or NodeList")}function i(t,e,n){return t.addEventListener(e,n),{destroy:function(){t.removeEventListener(e,n)}}}function o(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)})}}}function s(t,e,n){return u(document.body,t,e,n)}var a=t("./is"),u=t("delegate");e.exports=r},{"./is":3,delegate:2}],5:[function(t,e,n){function r(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}e.exports=r},{}],6:[function(t,e,n){function r(){}r.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){function r(){i.off(t,r),e.apply(n,arguments)}var i=this;return r._=e,this.on(t,r,n)},emit:function(t){var e=[].slice.call(arguments,1),n=((this.e||(this.e={}))[t]||[]).slice(),r=0,i=n.length;for(r;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}},e.exports=r},{}],7:[function(e,n,r){!function(i,o){if("function"==typeof t&&t.amd)t(["module","select"],o);else if(void 0!==r)o(n,e("select"));else{var s={exports:{}};o(s,i.select),i.clipboardAction=s.exports}}(this,function(t,e){"use strict";function n(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}var r=function(t){return t&&t.__esModule?t:{default:t}}(e),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=function(){function t(e){n(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,r.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,r.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=s})},{select:5}],8:[function(e,n,r){!function(i,o){if("function"==typeof t&&t.amd)t(["module","./clipboard-action","tiny-emitter","good-listener"],o);else if(void 0!==r)o(n,e("./clipboard-action"),e("tiny-emitter"),e("good-listener"));else{var s={exports:{}};o(s,i.clipboardAction,i.tinyEmitter,i.goodListener),i.clipboard=s.exports}}(this,function(t,e,n,r){"use strict";function i(t){return t&&t.__esModule?t:{default:t}}function o(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function s(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}function a(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)}function u(t,e){var n="data-clipboard-"+t;if(e.hasAttribute(n))return e.getAttribute(n)}var c=i(e),l=i(n),h=i(r),f="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},p=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}}(),d=function(t){function e(t,n){o(this,e);var r=s(this,(e.__proto__||Object.getPrototypeOf(e)).call(this));return r.resolveOptions(n),r.listenClick(t),r}return a(e,t),p(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"===f(t.container)?t.container:document.body}},{key:"listenClick",value:function(t){var e=this;this.listener=(0,h.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 c.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 u("action",t)}},{key:"defaultTarget",value:function(t){var e=u("target",t);if(e)return document.querySelector(e)}},{key:"defaultText",value:function(t){return u("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}(l.default);t.exports=d})},{"./clipboard-action":7,"good-listener":4,"tiny-emitter":6}]},{},[8])(8)})},function(t,e,n){/*! docsearch 2.4.1 | © Algolia | github.com/algolia/docsearch */ +!function(e,n){t.exports=n()}(0,function(){return function(t){function e(r){if(n[r])return n[r].exports;var i=n[r]={i:r,l:!1,exports:{}};return t[r].call(i.exports,i,i.exports,e),i.l=!0,i.exports}var n={};return e.m=t,e.c=n,e.i=function(t){return t},e.d=function(t,n,r){e.o(t,n)||Object.defineProperty(t,n,{configurable:!1,enumerable:!0,get:r})},e.n=function(t){var n=t&&t.__esModule?function(){return t.default}:function(){return t};return e.d(n,"a",n),n},e.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},e.p="",e(e.s=46)}([function(t,e,n){"use strict";function r(t){return t.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&")}var i=n(1);t.exports={isArray:null,isFunction:null,isObject:null,bind:null,each:null,map:null,mixin:null,isMsie:function(){return!!/(msie|trident)/i.test(navigator.userAgent)&&navigator.userAgent.match(/(msie |rv:)(\d+(.\d+)?)/i)[2]},escapeRegExChars:function(t){return t.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&")},isNumber:function(t){return"number"==typeof t},toStr:function(t){return void 0===t||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:function(){var t=0;return function(){return t++}}(),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 i=document.createElement("div");i.appendChild(document.createTextNode(e)),n=n||"</em>";var o=document.createElement("div");o.appendChild(document.createTextNode(n));var s=document.createElement("div");return s.appendChild(document.createTextNode(t)),s.innerHTML.replace(RegExp(r(i.innerHTML),"g"),e).replace(RegExp(r(o.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){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){t.exports=function(t){return JSON.parse(JSON.stringify(t))}},function(t,e,n){"use strict";function r(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 i(t,e){function n(){var n=Array.prototype.slice.call(arguments,0);"string"!=typeof n[0]&&n.unshift(e),r.apply(this,n),this.name="AlgoliaSearch"+t+"Error"}return o(n,r),n}var o=n(20);o(r,Error),t.exports={AlgoliaSearchError:r,UnparsableJSON:i("UnparsableJSON","Could not parse the incoming response as JSON, see err.more for details"),RequestTimeout:i("RequestTimeout","Request timedout before getting a response"),Network:i("Network","Network issue, see err.more for details"),JSONPScriptFail:i("JSONPScriptFail","<script> was loaded but did not call our provided callback"),JSONPScriptError:i("JSONPScriptError","<script> unable to load due to an `error` event on it"),Unknown:i("Unknown","Unknown error occured")}},function(t,e,n){(function(r){function i(){return"undefined"!=typeof document&&"WebkitAppearance"in document.documentElement.style||window.console&&(console.firebug||console.exception&&console.table)||navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/)&&parseInt(RegExp.$1,10)>=31}function o(){var t=arguments,n=this.useColors;if(t[0]=(n?"%c":"")+this.namespace+(n?" %c":" ")+t[0]+(n?"%c ":" ")+"+"+e.humanize(this.diff),!n)return t;var r="color: "+this.color;t=[t[0],r,"color: inherit"].concat(Array.prototype.slice.call(t,1));var i=0,o=0;return t[0].replace(/%[a-z%]/g,function(t){"%%"!==t&&(i++,"%c"===t&&(o=i))}),t.splice(o,0,r),t}function s(){return"object"==typeof console&&console.log&&Function.prototype.apply.call(console.log,console,arguments)}function a(t){try{null==t?e.storage.removeItem("debug"):e.storage.debug=t}catch(t){}}function u(){try{return e.storage.debug}catch(t){}if(void 0!==r&&"env"in r)return n.i({NODE_ENV:"production"}).DEBUG}e=t.exports=n(50),e.log=s,e.formatArgs=o,e.save=a,e.load=u,e.useColors=i,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(u())}).call(e,n(11))},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){"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,n){"use strict";function r(t,e,n,r){var i;if(!n)return this;for(e=e.split(h),n=r?c(n,r):n,this._callbacks=this._callbacks||{};i=e.shift();)this._callbacks[i]=this._callbacks[i]||{sync:[],async:[]},this._callbacks[i][t].push(n);return this}function i(t,e,n){return r.call(this,"async",t,e,n)}function o(t,e,n){return r.call(this,"sync",t,e,n)}function s(t){var e;if(!this._callbacks)return this;for(t=t.split(h);e=t.shift();)delete this._callbacks[e];return this}function a(t){var e,n,r,i,o;if(!this._callbacks)return this;for(t=t.split(h),r=[].slice.call(arguments,1);(e=t.shift())&&(n=this._callbacks[e]);)i=u(n.sync,this,[e].concat(r)),o=u(n.async,this,[e].concat(r)),i()&&l(o);return this}function u(t,e,n){function r(){for(var r,i=0,o=t.length;!r&&i<o;i+=1)r=!1===t[i].apply(e,n);return!r}return r}function c(t,e){return t.bind?t.bind(e):function(){t.apply(e,[].slice.call(arguments,0))}}var l=n(56),h=/\s+/;t.exports={onSync:o,onAsync:i,off:s,trigger:a}},function(t,e){var n={}.toString;t.exports=Array.isArray||function(t){return"[object Array]"==n.call(t)}},function(t,e){function n(){throw new Error("setTimeout has not been defined")}function r(){throw new Error("clearTimeout has not been defined")}function i(t){if(l===setTimeout)return setTimeout(t,0);if((l===n||!l)&&setTimeout)return l=setTimeout,setTimeout(t,0);try{return l(t,0)}catch(e){try{return l.call(null,t,0)}catch(e){return l.call(this,t,0)}}}function o(t){if(h===clearTimeout)return clearTimeout(t);if((h===r||!h)&&clearTimeout)return h=clearTimeout,clearTimeout(t);try{return h(t)}catch(e){try{return h.call(null,t)}catch(e){return h.call(this,t)}}}function s(){g&&p&&(g=!1,p.length?d=p.concat(d):m=-1,d.length&&a())}function a(){if(!g){var t=i(s);g=!0;for(var e=d.length;e;){for(p=d,d=[];++m<e;)p&&p[m].run();m=-1,e=d.length}p=null,g=!1,o(t)}}function u(t,e){this.fun=t,this.array=e}function c(){}var l,h,f=t.exports={};!function(){try{l="function"==typeof setTimeout?setTimeout:n}catch(t){l=n}try{h="function"==typeof clearTimeout?clearTimeout:r}catch(t){h=r}}();var p,d=[],g=!1,m=-1;f.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];d.push(new u(t,e)),1!==d.length||g||i(a)},u.prototype.run=function(){this.fun.apply(null,this.array)},f.title="browser",f.browser=!0,f.env={},f.argv=[],f.version="",f.versions={},f.on=c,f.addListener=c,f.once=c,f.off=c,f.removeListener=c,f.removeAllListeners=c,f.emit=c,f.binding=function(t){throw new Error("process.binding is not supported")},f.cwd=function(){return"/"},f.chdir=function(t){throw new Error("process.chdir is not supported")},f.umask=function(){return 0}},function(t,e,n){function r(t,e){return function(n,r,o){if("function"==typeof n&&"object"==typeof r||"object"==typeof o)throw new i.AlgoliaSearchError("index.search usage is index.search(query, params, cb)");0===arguments.length||"function"==typeof n?(o=n,n=""):1!==arguments.length&&"function"!=typeof r||(o=r,r=void 0),"object"==typeof n&&null!==n?(r=n,n=void 0):void 0!==n&&null!==n||(n="");var s="";void 0!==n&&(s+=t+"="+encodeURIComponent(n));var a;return void 0!==r&&(r.additionalUA&&(a=r.additionalUA,delete r.additionalUA),s=this.as._getSearchParams(r,s)),this._search(s,e,o,a)}}t.exports=r;var i=n(5)},function(t,e,n){"use strict";function r(t){t&&t.el||i.error("EventBus initialized without el"),this.$el=o.element(t.el)}var i=n(0),o=n(1);i.mixin(r.prototype,{trigger:function(t){var e=[].slice.call(arguments,1),n=i.Event("autocomplete:"+t);return this.$el.trigger(n,e),n}}),t.exports=r},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,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){t.exports="0.28.0"},function(t,e){!function(e,n){t.exports=function(t){var e=function(){function e(t){return null==t?String(t):X[Q.call(t)]||"object"}function n(t){return"function"==e(t)}function r(t){return null!=t&&t==t.window}function i(t){return null!=t&&t.nodeType==t.DOCUMENT_NODE}function o(t){return"object"==e(t)}function s(t){return o(t)&&!r(t)&&Object.getPrototypeOf(t)==Object.prototype}function a(t){var e=!!t&&"length"in t&&t.length,n=A.type(t);return"function"!=n&&!r(t)&&("array"==n||0===e||"number"==typeof e&&e>0&&e-1 in t)}function u(t){return I.call(t,function(t){return null!=t})}function c(t){return t.length>0?A.fn.concat.apply([],t):t}function l(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 h(t){return t in R?R[t]:R[t]=new RegExp("(^|\\s)"+t+"(\\s|$)")}function f(t,e){return"number"!=typeof e||D[l(t)]?e:e+"px"}function p(t){var e,n;return P[t]||(e=L.createElement(t),L.body.appendChild(e),n=getComputedStyle(e,"").getPropertyValue("display"),e.parentNode.removeChild(e),"none"==n&&(n="block"),P[t]=n),P[t]}function d(t){return"children"in t?j.call(t.children):A.map(t.childNodes,function(t){if(1==t.nodeType)return t})}function g(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 m(t,e,n){for(C in e)n&&(s(e[C])||tt(e[C]))?(s(e[C])&&!s(t[C])&&(t[C]={}),tt(e[C])&&!tt(t[C])&&(t[C]=[]),m(t[C],e[C],n)):e[C]!==S&&(t[C]=e[C])}function v(t,e){return null==e?A(t):A(t).filter(e)}function y(t,e,r,i){return n(e)?e.call(t,r,i):e}function b(t,e,n){null==n?t.removeAttribute(e):t.setAttribute(e,n)}function w(t,e){var n=t.className||"",r=n&&n.baseVal!==S;if(e===S)return r?n.baseVal:n;r?n.baseVal=e:t.className=e}function _(t){try{return t?"true"==t||"false"!=t&&("null"==t?null:+t+""==t?+t:/^[\[\{]/.test(t)?A.parseJSON(t):t):t}catch(e){return t}}function x(t,e){e(t);for(var n=0,r=t.childNodes.length;n<r;n++)x(t.childNodes[n],e)}var S,C,A,E,T,k,O=[],N=O.concat,I=O.filter,j=O.slice,L=t.document,P={},R={},D={"column-count":1,columns:1,"font-weight":1,"line-height":1,opacity:1,"z-index":1,zoom:1},$=/^\s*<(\w+|!)[^>]*>/,M=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,q=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,H=/^(?:body|html)$/i,F=/([A-Z])/g,z=["val","css","html","text","data","width","height","offset"],B=["after","prepend","before","append"],U=L.createElement("table"),V=L.createElement("tr"),K={tr:L.createElement("tbody"),tbody:U,thead:U,tfoot:U,td:V,th:V,"*":L.createElement("div")},J=/complete|loaded|interactive/,W=/^[\w-]*$/,X={},Q=X.toString,G={},Y=L.createElement("div"),Z={tabindex:"tabIndex",readonly:"readOnly",for:"htmlFor",class:"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},tt=Array.isArray||function(t){return t instanceof Array};return G.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=Y).appendChild(t),r=~G.qsa(i,e).indexOf(t),o&&Y.removeChild(t),r},T=function(t){return t.replace(/-+(.)?/g,function(t,e){return e?e.toUpperCase():""})},k=function(t){return I.call(t,function(e,n){return t.indexOf(e)==n})},G.fragment=function(t,e,n){var r,i,o;return M.test(t)&&(r=A(L.createElement(RegExp.$1))),r||(t.replace&&(t=t.replace(q,"<$1></$2>")),e===S&&(e=$.test(t)&&RegExp.$1),e in K||(e="*"),o=K[e],o.innerHTML=""+t,r=A.each(j.call(o.childNodes),function(){o.removeChild(this)})),s(n)&&(i=A(r),A.each(n,function(t,e){z.indexOf(t)>-1?i[t](e):i.attr(t,e)})),r},G.Z=function(t,e){return new g(t,e)},G.isZ=function(t){return t instanceof G.Z},G.init=function(t,e){var r;if(!t)return G.Z();if("string"==typeof t)if(t=t.trim(),"<"==t[0]&&$.test(t))r=G.fragment(t,RegExp.$1,e),t=null;else{if(e!==S)return A(e).find(t);r=G.qsa(L,t)}else{if(n(t))return A(L).ready(t);if(G.isZ(t))return t;if(tt(t))r=u(t);else if(o(t))r=[t],t=null;else if($.test(t))r=G.fragment(t.trim(),RegExp.$1,e),t=null;else{if(e!==S)return A(e).find(t);r=G.qsa(L,t)}}return G.Z(r,t)},A=function(t,e){return G.init(t,e)},A.extend=function(t){var e,n=j.call(arguments,1);return"boolean"==typeof t&&(e=t,t=n.shift()),n.forEach(function(n){m(t,n,e)}),t},G.qsa=function(t,e){var n,r="#"==e[0],i=!r&&"."==e[0],o=r||i?e.slice(1):e,s=W.test(o);return t.getElementById&&s&&r?(n=t.getElementById(o))?[n]:[]:1!==t.nodeType&&9!==t.nodeType&&11!==t.nodeType?[]:j.call(s&&!r&&t.getElementsByClassName?i?t.getElementsByClassName(o):t.getElementsByTagName(e):t.querySelectorAll(e))},A.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},A.type=e,A.isFunction=n,A.isWindow=r,A.isArray=tt,A.isPlainObject=s,A.isEmptyObject=function(t){var e;for(e in t)return!1;return!0},A.isNumeric=function(t){var e=Number(t),n=typeof t;return null!=t&&"boolean"!=n&&("string"!=n||t.length)&&!isNaN(e)&&isFinite(e)||!1},A.inArray=function(t,e,n){return O.indexOf.call(e,t,n)},A.camelCase=T,A.trim=function(t){return null==t?"":String.prototype.trim.call(t)},A.uuid=0,A.support={},A.expr={},A.noop=function(){},A.map=function(t,e){var n,r,i,o=[];if(a(t))for(r=0;r<t.length;r++)null!=(n=e(t[r],r))&&o.push(n);else for(i in t)null!=(n=e(t[i],i))&&o.push(n);return c(o)},A.each=function(t,e){var n,r;if(a(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},A.grep=function(t,e){return I.call(t,e)},t.JSON&&(A.parseJSON=JSON.parse),A.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(t,e){X["[object "+e+"]"]=e.toLowerCase()}),A.fn={constructor:G.Z,length:0,forEach:O.forEach,reduce:O.reduce,push:O.push,sort:O.sort,splice:O.splice,indexOf:O.indexOf,concat:function(){var t,e,n=[];for(t=0;t<arguments.length;t++)e=arguments[t],n[t]=G.isZ(e)?e.toArray():e;return N.apply(G.isZ(this)?this.toArray():this,n)},map:function(t){return A(A.map(this,function(e,n){return t.call(e,n,e)}))},slice:function(){return A(j.apply(this,arguments))},ready:function(t){return J.test(L.readyState)&&L.body?t(A):L.addEventListener("DOMContentLoaded",function(){t(A)},!1),this},get:function(t){return t===S?j.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 O.every.call(this,function(e,n){return!1!==t.call(e,n,e)}),this},filter:function(t){return n(t)?this.not(this.not(t)):A(I.call(this,function(e){return G.matches(e,t)}))},add:function(t,e){return A(k(this.concat(A(t,e))))},is:function(t){return this.length>0&&G.matches(this[0],t)},not:function(t){var e=[];if(n(t)&&t.call!==S)this.each(function(n){t.call(this,n)||e.push(this)});else{var r="string"==typeof t?this.filter(t):a(t)&&n(t.item)?j.call(t):A(t);this.forEach(function(t){r.indexOf(t)<0&&e.push(t)})}return A(e)},has:function(t){return this.filter(function(){return o(t)?A.contains(this,t):A(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&&!o(t)?t:A(t)},last:function(){var t=this[this.length-1];return t&&!o(t)?t:A(t)},find:function(t){var e=this;return t?"object"==typeof t?A(t).filter(function(){var t=this;return O.some.call(e,function(e){return A.contains(e,t)})}):1==this.length?A(G.qsa(this[0],t)):this.map(function(){return G.qsa(this,t)}):A()},closest:function(t,e){var n=[],r="object"==typeof t&&A(t);return this.each(function(o,s){for(;s&&!(r?r.indexOf(s)>=0:G.matches(s,t));)s=s!==e&&!i(s)&&s.parentNode;s&&n.indexOf(s)<0&&n.push(s)}),A(n)},parents:function(t){for(var e=[],n=this;n.length>0;)n=A.map(n,function(t){if((t=t.parentNode)&&!i(t)&&e.indexOf(t)<0)return e.push(t),t});return v(e,t)},parent:function(t){return v(k(this.pluck("parentNode")),t)},children:function(t){return v(this.map(function(){return d(this)}),t)},contents:function(){return this.map(function(){return this.contentDocument||j.call(this.childNodes)})},siblings:function(t){return v(this.map(function(t,e){return I.call(d(e.parentNode),function(t){return t!==e})}),t)},empty:function(){return this.each(function(){this.innerHTML=""})},pluck:function(t){return A.map(this,function(e){return e[t]})},show:function(){return this.each(function(){"none"==this.style.display&&(this.style.display=""),"none"==getComputedStyle(this,"").getPropertyValue("display")&&(this.style.display=p(this.nodeName))})},replaceWith:function(t){return this.before(t).remove()},wrap:function(t){var e=n(t);if(this[0]&&!e)var r=A(t).get(0),i=r.parentNode||this.length>1;return this.each(function(n){A(this).wrapAll(e?t.call(this,n):i?r.cloneNode(!0):r)})},wrapAll:function(t){if(this[0]){A(this[0]).before(t=A(t));for(var e;(e=t.children()).length;)t=e.first();A(t).append(this)}return this},wrapInner:function(t){var e=n(t);return this.each(function(n){var r=A(this),i=r.contents(),o=e?t.call(this,n):t;i.length?i.wrapAll(o):r.append(o)})},unwrap:function(){return this.parent().each(function(){A(this).replaceWith(A(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=A(this);(t===S?"none"==e.css("display"):t)?e.show():e.hide()})},prev:function(t){return A(this.pluck("previousElementSibling")).filter(t||"*")},next:function(t){return A(this.pluck("nextElementSibling")).filter(t||"*")},html:function(t){return 0 in arguments?this.each(function(e){var n=this.innerHTML;A(this).empty().append(y(this,t,e,n))}):0 in this?this[0].innerHTML:null},text:function(t){return 0 in arguments?this.each(function(e){var n=y(this,t,e,this.textContent);this.textContent=null==n?"":""+n}):0 in this?this.pluck("textContent").join(""):null},attr:function(t,e){var n;return"string"!=typeof t||1 in arguments?this.each(function(n){if(1===this.nodeType)if(o(t))for(C in t)b(this,C,t[C]);else b(this,t,y(this,e,n,this.getAttribute(t)))}):0 in this&&1==this[0].nodeType&&null!=(n=this[0].getAttribute(t))?n:S},removeAttr:function(t){return this.each(function(){1===this.nodeType&&t.split(" ").forEach(function(t){b(this,t)},this)})},prop:function(t,e){return t=Z[t]||t,1 in arguments?this.each(function(n){this[t]=y(this,e,n,this[t])}):this[0]&&this[0][t]},removeProp:function(t){return t=Z[t]||t,this.each(function(){delete this[t]})},data:function(t,e){var n="data-"+t.replace(F,"-$1").toLowerCase(),r=1 in arguments?this.attr(n,e):this.attr(n);return null!==r?_(r):S},val:function(t){return 0 in arguments?(null==t&&(t=""),this.each(function(e){this.value=y(this,t,e,this.value)})):this[0]&&(this[0].multiple?A(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 n=A(this),r=y(this,e,t,n.offset()),i=n.offsetParent().offset(),o={top:r.top-i.top,left:r.left-i.left};"static"==n.css("position")&&(o.position="relative"),n.css(o)});if(!this.length)return null;if(L.documentElement!==this[0]&&!A.contains(L.documentElement,this[0]))return{top:0,left:0};var n=this[0].getBoundingClientRect();return{left:n.left+t.pageXOffset,top:n.top+t.pageYOffset,width:Math.round(n.width),height:Math.round(n.height)}},css:function(t,n){if(arguments.length<2){var r=this[0];if("string"==typeof t){if(!r)return;return r.style[T(t)]||getComputedStyle(r,"").getPropertyValue(t)}if(tt(t)){if(!r)return;var i={},o=getComputedStyle(r,"");return A.each(t,function(t,e){i[e]=r.style[T(e)]||o.getPropertyValue(e)}),i}}var s="";if("string"==e(t))n||0===n?s=l(t)+":"+f(t,n):this.each(function(){this.style.removeProperty(l(t))});else for(C in t)t[C]||0===t[C]?s+=l(C)+":"+f(C,t[C])+";":this.each(function(){this.style.removeProperty(l(C))});return this.each(function(){this.style.cssText+=";"+s})},index:function(t){return t?this.indexOf(A(t)[0]):this.parent().children().indexOf(this[0])},hasClass:function(t){return!!t&&O.some.call(this,function(t){return this.test(w(t))},h(t))},addClass:function(t){return t?this.each(function(e){if("className"in this){E=[];var n=w(this);y(this,t,e,n).split(/\s+/g).forEach(function(t){A(this).hasClass(t)||E.push(t)},this),E.length&&w(this,n+(n?" ":"")+E.join(" "))}}):this},removeClass:function(t){return this.each(function(e){if("className"in this){if(t===S)return w(this,"");E=w(this),y(this,t,e,E).split(/\s+/g).forEach(function(t){E=E.replace(h(t)," ")}),w(this,E.trim())}})},toggleClass:function(t,e){return t?this.each(function(n){var r=A(this);y(this,t,n,w(this)).split(/\s+/g).forEach(function(t){(e===S?!r.hasClass(t):e)?r.addClass(t):r.removeClass(t)})}):this},scrollTop:function(t){if(this.length){var e="scrollTop"in this[0];return t===S?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 t===S?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(),n=this.offset(),r=H.test(e[0].nodeName)?{top:0,left:0}:e.offset();return n.top-=parseFloat(A(t).css("margin-top"))||0,n.left-=parseFloat(A(t).css("margin-left"))||0,r.top+=parseFloat(A(e[0]).css("border-top-width"))||0,r.left+=parseFloat(A(e[0]).css("border-left-width"))||0,{top:n.top-r.top,left:n.left-r.left}}},offsetParent:function(){return this.map(function(){for(var t=this.offsetParent||L.body;t&&!H.test(t.nodeName)&&"static"==A(t).css("position");)t=t.offsetParent;return t})}},A.fn.detach=A.fn.remove,["width","height"].forEach(function(t){var e=t.replace(/./,function(t){return t[0].toUpperCase()});A.fn[t]=function(n){var o,s=this[0];return n===S?r(s)?s["inner"+e]:i(s)?s.documentElement["scroll"+e]:(o=this.offset())&&o[t]:this.each(function(e){s=A(this),s.css(t,y(this,n,e,s[t]()))})}}),B.forEach(function(n,r){var i=r%2;A.fn[n]=function(){var n,o,s=A.map(arguments,function(t){var r=[];return n=e(t),"array"==n?(t.forEach(function(t){return t.nodeType!==S?r.push(t):A.zepto.isZ(t)?r=r.concat(t.get()):void(r=r.concat(G.fragment(t)))}),r):"object"==n||null==t?t:G.fragment(t)}),a=this.length>1;return s.length<1?this:this.each(function(e,n){o=i?n:n.parentNode,n=0==r?n.nextSibling:1==r?n.firstChild:2==r?n:null;var u=A.contains(L.documentElement,o);s.forEach(function(e){if(a)e=e.cloneNode(!0);else if(!o)return A(e).remove();o.insertBefore(e,n),u&&x(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)}})})})},A.fn[i?n+"To":"insert"+(r?"Before":"After")]=function(t){return A(t)[n](this),this}}),G.Z.prototype=g.prototype=A.fn,G.uniq=k,G.deserializeValue=_,A.zepto=G,A}();return function(e){function n(t){return t._zid||(t._zid=p++)}function r(t,e,r,s){if(e=i(e),e.ns)var a=o(e.ns);return(v[n(t)]||[]).filter(function(t){return t&&(!e.e||t.e==e.e)&&(!e.ns||a.test(t.ns))&&(!r||n(t.fn)===n(r))&&(!s||t.sel==s)})}function i(t){var e=(""+t).split(".");return{e:e[0],ns:e.slice(1).sort().join(" ")}}function o(t){return new RegExp("(?:^| )"+t.replace(" "," .* ?")+"(?: |$)")}function s(t,e){return t.del&&!b&&t.e in w||!!e}function a(t){return _[t]||b&&w[t]||t}function u(t,r,o,u,c,h,p){var d=n(t),g=v[d]||(v[d]=[]);r.split(/\s/).forEach(function(n){if("ready"==n)return e(document).ready(o);var r=i(n);r.fn=o,r.sel=c,r.e in _&&(o=function(t){var n=t.relatedTarget;if(!n||n!==this&&!e.contains(this,n))return r.fn.apply(this,arguments)}),r.del=h;var d=h||o;r.proxy=function(e){if(e=l(e),!e.isImmediatePropagationStopped()){e.data=u;var n=d.apply(t,e._args==f?[e]:[e].concat(e._args));return!1===n&&(e.preventDefault(),e.stopPropagation()),n}},r.i=g.length,g.push(r),"addEventListener"in t&&t.addEventListener(a(r.e),r.proxy,s(r,p))})}function c(t,e,i,o,u){var c=n(t);(e||"").split(/\s/).forEach(function(e){r(t,e,i,o).forEach(function(e){delete v[c][e.i],"removeEventListener"in t&&t.removeEventListener(a(e.e),e.proxy,s(e,u))})})}function l(t,n){return!n&&t.isDefaultPrevented||(n||(n=t),e.each(A,function(e,r){var i=n[e];t[e]=function(){return this[r]=x,i&&i.apply(n,arguments)},t[r]=S}),t.timeStamp||(t.timeStamp=Date.now()),(n.defaultPrevented!==f?n.defaultPrevented:"returnValue"in n?!1===n.returnValue:n.getPreventDefault&&n.getPreventDefault())&&(t.isDefaultPrevented=x)),t}function h(t){var e,n={originalEvent:t};for(e in t)C.test(e)||t[e]===f||(n[e]=t[e]);return l(n,t)}var f,p=1,d=Array.prototype.slice,g=e.isFunction,m=function(t){return"string"==typeof t},v={},y={},b="onfocusin"in t,w={focus:"focusin",blur:"focusout"},_={mouseenter:"mouseover",mouseleave:"mouseout"};y.click=y.mousedown=y.mouseup=y.mousemove="MouseEvents",e.event={add:u,remove:c},e.proxy=function(t,r){var i=2 in arguments&&d.call(arguments,2);if(g(t)){var o=function(){return t.apply(r,i?i.concat(d.call(arguments)):arguments)};return o._zid=n(t),o}if(m(r))return i?(i.unshift(t[r],t),e.proxy.apply(null,i)):e.proxy(t[r],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 x=function(){return!0},S=function(){return!1},C=/^([A-Z]|returnValue$|layer[XY]$|webkitMovement[XY]$)/,A={preventDefault:"isDefaultPrevented",stopImmediatePropagation:"isImmediatePropagationStopped",stopPropagation:"isPropagationStopped"};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,r,i,o){var s,a,l=this;return t&&!m(t)?(e.each(t,function(t,e){l.on(t,n,r,e,o)}),l):(m(n)||g(i)||!1===i||(i=r,r=n,n=f),i!==f&&!1!==r||(i=r,r=f),!1===i&&(i=S),l.each(function(l,f){o&&(s=function(t){return c(f,t.type,i),i.apply(this,arguments)}),n&&(a=function(t){var r,o=e(t.target).closest(n,f).get(0);if(o&&o!==f)return r=e.extend(h(t),{currentTarget:o,liveFired:f}),(s||i).apply(o,[r].concat(d.call(arguments,1)))}),u(f,t,i,r,n,a||s)}))},e.fn.off=function(t,n,r){var i=this;return t&&!m(t)?(e.each(t,function(t,e){i.off(t,n,e)}),i):(m(n)||g(r)||!1===r||(r=n,n=f),!1===r&&(r=S),i.each(function(){c(this,t,r,n)}))},e.fn.trigger=function(t,n){return t=m(t)||e.isPlainObject(t)?e.Event(t):l(t),t._args=n,this.each(function(){t.type in w&&"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 i,o;return this.each(function(s,a){i=h(m(t)?e.Event(t):t),i._args=n,i.target=a,e.each(r(a,t.type||t),function(t,e){if(o=e.proxy(i),i.isImmediatePropagationStopped())return!1})}),o},"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){m(t)||(e=t,t=e.type);var n=document.createEvent(y[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),l(n)}}(e),function(t){var e,n=[];t.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))})}}(e),function(t){function e(e,r){var u=e[a],c=u&&i[u];if(void 0===r)return c||n(e);if(c){if(r in c)return c[r];var l=s(r);if(l in c)return c[l]}return o.call(t(e),r)}function n(e,n,o){var u=e[a]||(e[a]=++t.uuid),c=i[u]||(i[u]=r(e));return void 0!==n&&(c[s(n)]=o),c}function r(e){var n={};return t.each(e.attributes||u,function(e,r){0==r.name.indexOf("data-")&&(n[s(r.name.replace("data-",""))]=t.zepto.deserializeValue(r.value))}),n}var i={},o=t.fn.data,s=t.camelCase,a=t.expando="Zepto"+ +new Date,u=[];t.fn.data=function(r,i){return void 0===i?t.isPlainObject(r)?this.each(function(e,i){t.each(r,function(t,e){n(i,t,e)})}):0 in this?e(this[0],r):void 0:this.each(function(){n(this,r,i)})},t.data=function(e,n,r){return t(e).data(n,r)},t.hasData=function(e){var n=e[a],r=n&&i[n];return!!r&&!t.isEmptyObject(r)},t.fn.removeData=function(e){return"string"==typeof e&&(e=e.split(/\s+/)),this.each(function(){var n=this[a],r=n&&i[n];r&&t.each(e||r,function(t){delete r[e?s(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)}})}(e),e}(e)}(window)},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default="2.4.1"},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(17),i=function(t){return t&&t.__esModule?t:{default:t}}(r);e.default=i.default},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){"use strict";function r(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var i=n(66),o=r(i),s=n(47),a=r(s),u=n(18),c=r(u),l=(0,o.default)(a.default);l.version=c.default,e.default=l},function(t,e,n){function r(t,e,r){var o=n(6)("algoliasearch"),s=n(4),a=n(10),c=n(7),l="Usage: algoliasearch(applicationID, apiKey, opts)";if(!0!==r._allowEmptyCredentials&&!t)throw new u.AlgoliaSearchError("Please provide an application ID. "+l);if(!0!==r._allowEmptyCredentials&&!e)throw new u.AlgoliaSearchError("Please provide an API key. "+l);this.applicationID=t,this.apiKey=e,this.hosts={read:[],write:[]},r=r||{};var h=r.protocol||"https:";if(this._timeouts=r.timeouts||{connect:1e3,read:2e3,write:3e4},r.timeout&&(this._timeouts.connect=this._timeouts.read=this._timeouts.write=r.timeout),/:$/.test(h)||(h+=":"),"http:"!==r.protocol&&"https:"!==r.protocol)throw new u.AlgoliaSearchError("protocol must be `http:` or `https:` (was `"+r.protocol+"`)");if(this._checkAppIdData(),r.hosts)a(r.hosts)?(this.hosts.read=s(r.hosts),this.hosts.write=s(r.hosts)):(this.hosts.read=s(r.hosts.read),this.hosts.write=s(r.hosts.write));else{var f=c(this._shuffleResult,function(e){return t+"-"+e+".algolianet.com"});this.hosts.read=[this.applicationID+"-dsn.algolia.net"].concat(f),this.hosts.write=[this.applicationID+".algolia.net"].concat(f)}this.hosts.read=c(this.hosts.read,i(h)),this.hosts.write=c(this.hosts.write,i(h)),this.extraHeaders=[],this.cache=r._cache||{},this._ua=r._ua,this._useCache=!(void 0!==r._useCache&&!r._cache)||r._useCache,this._useFallback=void 0===r.useFallback||r.useFallback,this._setTimeout=r._setTimeout,o("init done, %j",this)}function i(t){return function(e){return t+"//"+e.toLowerCase()}}function o(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 s(t){for(var e,n,r=t.length;0!==r;)n=Math.floor(Math.random()*r),r-=1,e=t[r],t[r]=t[n],t[n]=e;return t}function a(t){var e={};for(var n in t)if(Object.prototype.hasOwnProperty.call(t,n)){var r;r="x-algolia-api-key"===n||"x-algolia-application-id"===n?"**hidden for security purposes**":t[n],e[n]=r}return e}t.exports=r;var u=n(5),c=n(31),l=n(23),h=n(35),f=n.i({NODE_ENV:"production"}).RESET_APP_DATA_TIMER&&parseInt(n.i({NODE_ENV:"production"}).RESET_APP_DATA_TIMER,10)||12e4;r.prototype.initIndex=function(t){return new l(this,t)},r.prototype.setExtraHeader=function(t,e){this.extraHeaders.push({name:t.toLowerCase(),value:e})},r.prototype.addAlgoliaAgent=function(t){-1===this._ua.indexOf(";"+t)&&(this._ua+=";"+t)},r.prototype._jsonRequest=function(t){function e(n,c){function v(t){var e=t&&t.body&&t.body.message&&t.body.status||t.statusCode||t&&t.body&&200;s("received response: statusCode: %s, computed statusCode: %d, headers: %j",t.statusCode,e,t.headers);var n=2===Math.floor(e/100),o=new Date;if(m.push({currentHost:S,headers:a(i),content:r||null,contentLength:void 0!==r?r.length:null,method:c.method,timeouts:c.timeouts,url:c.url,startTime:x,endTime:o,duration:o-x,statusCode:e}),n)return f._useCache&&h&&(h[_]=t.responseText),t.body;if(4!==Math.floor(e/100))return p+=1,b();s("unrecoverable error");var l=new u.AlgoliaSearchError(t.body&&t.body.message,{debugData:m,statusCode:e});return f._promise.reject(l)}function y(e){s("error: %s, stack: %s",e.message,e.stack);var n=new Date;return m.push({currentHost:S,headers:a(i),content:r||null,contentLength:void 0!==r?r.length:null,method:c.method,timeouts:c.timeouts,url:c.url,startTime:x,endTime:n,duration:n-x}),e instanceof u.AlgoliaSearchError||(e=new u.Unknown(e&&e.message,e)),p+=1,e instanceof u.Unknown||e instanceof u.UnparsableJSON||p>=f.hosts[t.hostType].length&&(d||!g)?(e.debugData=m,f._promise.reject(e)):e instanceof u.RequestTimeout?w():b()}function b(){return s("retrying request"),f._incrementHostIndex(t.hostType),e(n,c)}function w(){return s("retrying request with higher timeout"),f._incrementHostIndex(t.hostType),f._incrementTimeoutMultipler(),c.timeouts=f._getTimeoutsForRequest(t.hostType),e(n,c)}f._checkAppIdData();var _,x=new Date;if(f._useCache&&(_=t.url),f._useCache&&r&&(_+="_body_"+c.body),f._useCache&&h&&void 0!==h[_])return s("serving response from cache"),f._promise.resolve(JSON.parse(h[_]));if(p>=f.hosts[t.hostType].length)return!g||d?(s("could not get any response"),f._promise.reject(new u.AlgoliaSearchError("Cannot connect to the AlgoliaSearch API. Send an email to [email protected] to report and resolve the issue. Application id was: "+f.applicationID,{debugData:m}))):(s("switching to fallback"),p=0,c.method=t.fallback.method,c.url=t.fallback.url,c.jsonBody=t.fallback.body,c.jsonBody&&(c.body=o(c.jsonBody)),i=f._computeRequestHeaders(l),c.timeouts=f._getTimeoutsForRequest(t.hostType),f._setHostIndexByType(0,t.hostType),d=!0,e(f._request.fallback,c));var S=f._getHostByType(t.hostType),C=S+c.url,A={body:c.body,jsonBody:c.jsonBody,method:c.method,headers:i,timeouts:c.timeouts,debug:s};return s("method: %s, url: %s, headers: %j, timeouts: %d",A.method,C,A.headers,A.timeouts),n===f._request.fallback&&s("using fallback"),n.call(f,C,A).then(v,y)}this._checkAppIdData();var r,i,s=n(6)("algoliasearch:"+t.url),l=t.additionalUA||"",h=t.cache,f=this,p=0,d=!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,i=this._computeRequestHeaders(l,!1)):i=this._computeRequestHeaders(l),void 0!==t.body&&(r=o(t.body)),s("request start");var m=[],v=e(f._request,{url:t.url,method:t.method,body:r,jsonBody:t.body,timeouts:f._getTimeoutsForRequest(t.hostType)});if(!t.callback)return v;v.then(function(e){c(function(){t.callback(null,e)},f._setTimeout||setTimeout)},function(e){c(function(){t.callback(e)},f._setTimeout||setTimeout)})},r.prototype._getSearchParams=function(t,e){if(void 0===t||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])?o(t[n]):t[n]));return e},r.prototype._computeRequestHeaders=function(t,e){var r=n(2),i=t?this._ua+";"+t:this._ua,o={"x-algolia-agent":i,"x-algolia-application-id":this.applicationID};return!1!==e&&(o["x-algolia-api-key"]=this.apiKey),this.userToken&&(o["x-algolia-usertoken"]=this.userToken),this.securityTags&&(o["x-algolia-tagfilters"]=this.securityTags),this.extraHeaders&&r(this.extraHeaders,function(t){o[t.name]=t.value}),o},r.prototype.search=function(t,e,r){var i=n(10),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("&"),c="/1/indexes/*/queries";return void 0!==e.strategy&&(c+="?strategy="+e.strategy),this._jsonRequest({cache:this.cache,method:"POST",url:c,body:a,hostType:"read",fallback:{method:"GET",url:"/1/indexes/*",body:{params:u}},callback:r})},r.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},r.prototype.setUserToken=function(t){this.userToken=t},r.prototype.clearCache=function(){this.cache={}},r.prototype.setRequestTimeout=function(t){t&&(this._timeouts.connect=this._timeouts.read=this._timeouts.write=t)},r.prototype.setTimeouts=function(t){this._timeouts=t},r.prototype.getTimeouts=function(){return this._timeouts},r.prototype._getAppIdData=function(){var t=h.get(this.applicationID);return null!==t&&this._cacheAppIdData(t),t},r.prototype._setAppIdData=function(t){return t.lastChange=(new Date).getTime(),this._cacheAppIdData(t),h.set(this.applicationID,t)},r.prototype._checkAppIdData=function(){var t=this._getAppIdData(),e=(new Date).getTime();return null===t||e-t.lastChange>f?this._resetInitialAppIdData(t):t},r.prototype._resetInitialAppIdData=function(t){var e=t||{};return e.hostIndexes={read:0,write:0},e.timeoutMultiplier=1,e.shuffleResult=e.shuffleResult||s([1,2,3]),this._setAppIdData(e)},r.prototype._cacheAppIdData=function(t){this._hostIndexes=t.hostIndexes,this._timeoutMultiplier=t.timeoutMultiplier,this._shuffleResult=t.shuffleResult},r.prototype._partialAppIdDataUpdate=function(t){var e=n(2),r=this._getAppIdData();return e(t,function(t,e){r[e]=t}),this._setAppIdData(r)},r.prototype._getHostByType=function(t){return this.hosts[t][this._getHostIndexByType(t)]},r.prototype._getTimeoutMultiplier=function(){return this._timeoutMultiplier},r.prototype._getHostIndexByType=function(t){return this._hostIndexes[t]},r.prototype._setHostIndexByType=function(t,e){var r=n(4),i=r(this._hostIndexes);return i[e]=t,this._partialAppIdDataUpdate({hostIndexes:i}),t},r.prototype._incrementHostIndex=function(t){return this._setHostIndexByType((this._getHostIndexByType(t)+1)%this.hosts[t].length,t)},r.prototype._incrementTimeoutMultipler=function(){var t=Math.max(this._timeoutMultiplier+1,4);return this._partialAppIdDataUpdate({timeoutMultiplier:t})},r.prototype._getTimeoutsForRequest=function(t){return{connect:this._timeouts.connect*this._timeoutMultiplier,complete:this._timeouts[t]*this._timeoutMultiplier}}},function(t,e,n){function r(t,e){this.indexName=e,this.as=t,this.typeAheadArgs=null,this.typeAheadValueOption=null,this.cache={}}var i=n(12),o=n(29),s=n(30);t.exports=r,r.prototype.clearCache=function(){this.cache={}},r.prototype.search=i("query"),r.prototype.similarSearch=i("similarQuery"),r.prototype.browse=function(t,e,r){var i,o,s=n(32),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})},r.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})},r.prototype.searchForFacetValues=function(t,e){var r=n(4),i=n(33);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})},r.prototype.searchFacet=o(function(t,e){return this.searchForFacetValues(t,e)},s("index.searchFacet(params[, callback])","index.searchForFacetValues(params[, callback])")),r.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})},r.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})},r.prototype.getObjects=function(t,e,r){var i=n(10),o=n(7);if(!i(t))throw new Error("Usage: index.getObjects(arrayOfObjectIDs[, callback])");var s=this;1!==arguments.length&&"function"!=typeof e||(r=e,e=void 0);var a={requests:o(t,function(t){var n={indexName:s.indexName,objectID:t};return e&&(n.attributesToRetrieve=e.join(",")),n})};return this.as._jsonRequest({method:"POST",url:"/1/indexes/*/objects",hostType:"read",body:a,callback:r})},r.prototype.as=null,r.prototype.indexName=null,r.prototype.typeAheadArgs=null,r.prototype.typeAheadValueOption=null},function(t,e,n){"use strict";var r=n(22),i=n(25);t.exports=i(r,"(lite) ")},function(t,e,n){"use strict";var r=n(52),i=r.Promise||n(51).Promise;t.exports=function(t,e){function o(t,e,r){var i=n(4),a=n(26);return r=i(r||{}),void 0===r.protocol&&(r.protocol=a()),r._ua=r._ua||o.ua,new s(t,e,r)}function s(){t.apply(this,arguments)}var a=n(20),u=n(5),c=n(27),l=n(28),h=n(34);e=e||"",o.version=n(36),o.ua="Algolia for vanilla JavaScript "+e+o.version,o.initPlaces=h(o),r.__algolia={debug:n(6),algoliasearch:o};var f={hasXMLHttpRequest:"XMLHttpRequest"in r,hasXDomainRequest:"XDomainRequest"in r};return f.hasXMLHttpRequest&&(f.cors="withCredentials"in new XMLHttpRequest),a(s,t),s.prototype._request=function(t,e){return new i(function(n,r){function i(){if(!d){clearTimeout(p);var t;try{t={body:JSON.parse(m.responseText),responseText:m.responseText,statusCode:m.status,headers:m.getAllResponseHeaders&&m.getAllResponseHeaders()||{}}}catch(e){t=new u.UnparsableJSON({more:m.responseText})}t instanceof u.UnparsableJSON?r(t):n(t)}}function o(t){d||(clearTimeout(p),r(new u.Network({more:t})))}function s(){d=!0,m.abort(),r(new u.RequestTimeout)}function a(){v=!0,clearTimeout(p),p=setTimeout(s,e.timeouts.complete)}function l(){v||a()}function h(){!v&&m.readyState>1&&a()}if(!f.cors&&!f.hasXDomainRequest)return void r(new u.Network("CORS not supported"));t=c(t,e.headers);var p,d,g=e.body,m=f.cors?new XMLHttpRequest:new XDomainRequest,v=!1;p=setTimeout(s,e.timeouts.connect),m.onprogress=l,"onreadystatechange"in m&&(m.onreadystatechange=h),m.onload=i,m.onerror=o,m instanceof XMLHttpRequest?m.open(e.method,t,!0):m.open(e.method,t),f.cors&&(g&&("POST"===e.method?m.setRequestHeader("content-type","application/x-www-form-urlencoded"):m.setRequestHeader("content-type","application/json")),m.setRequestHeader("accept","application/json")),m.send(g)})},s.prototype._request.fallback=function(t,e){return t=c(t,e.headers),new i(function(n,r){l(t,e,function(t,e){if(t)return void r(t);n(e)})})},s.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)})}},o}},function(t,e,n){"use strict";function r(){var t=window.document.location.protocol;return"http:"!==t&&"https:"!==t&&(t="http:"),t}t.exports=r},function(t,e,n){"use strict";function r(t,e){return/\?/.test(t)?t+="&":t+="?",t+i(e)}t.exports=r;var i=n(65)},function(t,e,n){"use strict";function r(t,e,n){function r(){e.debug("JSONP: success"),m||f||(m=!0,h||(e.debug("JSONP: Fail. Script loaded but did not call the callback"),a(),n(new i.JSONPScriptFail)))}function s(){"loaded"!==this.readyState&&"complete"!==this.readyState||r()}function a(){clearTimeout(v),d.onload=null,d.onreadystatechange=null,d.onerror=null,p.removeChild(d)}function u(){try{delete window[g],delete window[g+"_loaded"]}catch(t){window[g]=window[g+"_loaded"]=void 0}}function c(){e.debug("JSONP: Script timeout"),f=!0,a(),n(new i.RequestTimeout)}function l(){e.debug("JSONP: Script error"),m||f||(a(),n(new i.JSONPScriptError))}if("GET"!==e.method)return void n(new Error("Method "+e.method+" "+t+" is not supported by JSONP."));e.debug("JSONP: start");var h=!1,f=!1;o+=1;var p=document.getElementsByTagName("head")[0],d=document.createElement("script"),g="algoliaJSONP_"+o,m=!1;window[g]=function(t){if(u(),f)return void e.debug("JSONP: Late answer, ignoring");h=!0,a(),n(null,{body:t})},t+="&callback="+g,e.jsonBody&&e.jsonBody.params&&(t+="&"+e.jsonBody.params);var v=setTimeout(c,e.timeouts.complete);d.onreadystatechange=s,d.onload=r,d.onerror=l,d.async=!0,d.defer=!0,d.src=t,p.appendChild(d)}t.exports=r;var i=n(5),o=0},function(t,e){t.exports=function(t,e){function n(){return r||(console.log(e),r=!0),t.apply(this,arguments)}var r=!1;return n}},function(t,e){t.exports=function(t,e){return"algoliasearch: `"+t+"` was replaced by `"+e+"`. Please see https://github.com/algolia/algoliasearch-client-js/wiki/Deprecated#"+t.toLowerCase().replace(".","").replace("()","")}},function(t,e){t.exports=function(t,e){e(t,0)}},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){t.exports=function(t,e){var r=n(63),i=n(2),o={};return i(r(t),function(n){!0!==e(n)&&(o[n]=t[n])}),o}},function(t,e,n){function r(t){return function(e,r,o){var s=n(4);o=o&&s(o)||{},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="",r="",o._allowEmptyCredentials=!0);var a=t(e,r,o),u=a.initIndex("places");return u.search=i("query","/1/places/query"),u}}t.exports=r;var i=n(12)},function(t,e,n){(function(e){function r(t,e){return u("localStorage failed with",e),s(),a=l,a.get(t)}function i(t,e){return 1===arguments.length?a.get(t):a.set(t,e)}function o(){try{return"localStorage"in e&&null!==e.localStorage&&(e.localStorage[c]||e.localStorage.setItem(c,JSON.stringify({})),!0)}catch(t){return!1}}function s(){try{e.localStorage.removeItem(c)}catch(t){}}var a,u=n(6)("algoliasearch:src/hostIndexState.js"),c="algoliasearch-client-js",l={state:{},set:function(t,e){return this.state[t]=e,this.state[t]},get:function(t){return this.state[t]||null}},h={set:function(t,n){l.set(t,n);try{var i=JSON.parse(e.localStorage[c]);return i[t]=n,e.localStorage[c]=JSON.stringify(i),i[t]}catch(e){return r(t,e)}},get:function(t){try{return JSON.parse(e.localStorage[c])[t]||null}catch(e){return r(t,e)}}};a=o()?h:l,t.exports={get:i,set:i,supportsLocalStorage:o}}).call(e,n(3))},function(t,e,n){"use strict";t.exports="3.22.1"},function(t,e,n){"use strict";t.exports=n(45)},function(t,e,n){"use strict";function r(t){t=t||{},t.templates=t.templates||{},t.source||l.error("missing source"),t.name&&!s(t.name)&&l.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?l.getUniqueId():t.name,this.source=t.source,this.displayFn=i(t.display||t.displayKey),this.templates=o(t.templates,this.displayFn),this.css=l.mixin({},p,t.appendTo?p.appendTo:{}),this.cssClasses=t.cssClasses=l.mixin({},p.defaultClasses,t.cssClasses||{}),this.cssClasses.prefix=t.cssClasses.formattedPrefix||l.formatPrefix(this.cssClasses.prefix,this.cssClasses.noPrefix);var e=l.className(this.cssClasses.prefix,this.cssClasses.dataset);this.$el=t.$menu&&t.$menu.find(e+"-"+this.name).length>0?h.element(t.$menu.find(e+"-"+this.name)[0]):h.element(f.dataset.replace("%CLASS%",this.name).replace("%PREFIX%",this.cssClasses.prefix).replace("%DATASET%",this.cssClasses.dataset)),this.$menu=t.$menu}function i(t){function e(e){return e[t]}return t=t||"value",l.isFunction(t)?t:e}function o(t,e){function n(t){return"<p>"+e(t)+"</p>"}return{empty:t.empty&&l.templatify(t.empty),header:t.header&&l.templatify(t.header),footer:t.footer&&l.templatify(t.footer),suggestion:t.suggestion||n}}function s(t){return/^[_a-zA-Z0-9-]+$/.test(t)}var a="aaDataset",u="aaValue",c="aaDatum",l=n(0),h=n(1),f=n(14),p=n(8),d=n(9);r.extractDatasetName=function(t){return h.element(t).data(a)},r.extractValue=function(t){return h.element(t).data(u)},r.extractDatum=function(t){var e=h.element(t).data(c);return"string"==typeof e&&(e=JSON.parse(e)),e},l.mixin(r.prototype,d,{_render:function(t,e){function n(){var e=[].slice.call(arguments,0);return e=[{query:t,isEmpty:!0}].concat(e),p.templates.empty.apply(this,e)}function r(){function t(t){var e,n=f.suggestion.replace("%PREFIX%",o.cssClasses.prefix).replace("%SUGGESTION%",o.cssClasses.suggestion);return e=h.element(n).attr({role:"option",id:["option",Math.floor(1e8*Math.random())].join("-")}).append(p.templates.suggestion.apply(this,[t].concat(i))),e.data(a,p.name),e.data(u,p.displayFn(t)||void 0),e.data(c,JSON.stringify(t)),e.children().each(function(){h.element(this).css(o.css.suggestionChild)}),e}var n,r,i=[].slice.call(arguments,0),o=this,s=f.suggestions.replace("%PREFIX%",this.cssClasses.prefix).replace("%SUGGESTIONS%",this.cssClasses.suggestions);return n=h.element(s).css(this.css.suggestions),r=l.map(e,t),n.append.apply(n,r),n}function i(){var e=[].slice.call(arguments,0);return e=[{query:t,isEmpty:!s}].concat(e),p.templates.header.apply(this,e)}function o(){var e=[].slice.call(arguments,0);return e=[{query:t,isEmpty:!s}].concat(e),p.templates.footer.apply(this,e)}if(this.$el){var s,p=this,d=[].slice.call(arguments,2);this.$el.empty(),s=e&&e.length,this._isEmpty=!s,!s&&this.templates.empty?this.$el.html(n.apply(this,d)).prepend(p.templates.header?i.apply(this,d):null).append(p.templates.footer?o.apply(this,d):null):s&&this.$el.html(r.apply(this,d)).prepend(p.templates.header?i.apply(this,d):null).append(p.templates.footer?o.apply(this,d):null),this.$menu&&this.$menu.addClass(this.cssClasses.prefix+(s?"with":"without")+"-"+this.name).removeClass(this.cssClasses.prefix+(s?"without":"with")+"-"+this.name),this.trigger("rendered",t)}},getRoot:function(){return this.$el},update:function(t){function e(e){if(!n.canceled&&t===n.query){var r=[].slice.call(arguments,1);r=[t,e].concat(r),n._render.apply(n,r)}}var n=this;this.query=t,this.canceled=!1,this.source(t,e)},cancel:function(){this.canceled=!0},clear:function(){this.cancel(),this.$el.empty(),this.trigger("rendered","")},isEmpty:function(){return this._isEmpty},destroy:function(){this.$el=null}}),t.exports=r},function(t,e,n){"use strict";function r(t){var e,n,r,a=this;t=t||{},t.menu||o.error("menu is required"),o.isArray(t.datasets)||o.isObject(t.datasets)||o.error("1 or more datasets required"),t.datasets||o.error("datasets is required"),this.isOpen=!1,this.isEmpty=!0,this.minLength=t.minLength||0,this.templates={},this.appendTo=t.appendTo||!1,this.css=o.mixin({},c,t.appendTo?c.appendTo:{}),this.cssClasses=t.cssClasses=o.mixin({},c.defaultClasses,t.cssClasses||{}),this.cssClasses.prefix=t.cssClasses.formattedPrefix||o.formatPrefix(this.cssClasses.prefix,this.cssClasses.noPrefix),e=o.bind(this._onSuggestionClick,this),n=o.bind(this._onSuggestionMouseEnter,this),r=o.bind(this._onSuggestionMouseLeave,this);var u=o.className(this.cssClasses.prefix,this.cssClasses.suggestion);this.$menu=s.element(t.menu).on("click.aa",u,e).on("mouseenter.aa",u,n).on("mouseleave.aa",u,r),this.$container=t.appendTo?t.wrapper:this.$menu,t.templates&&t.templates.header&&(this.templates.header=o.templatify(t.templates.header),this.$menu.prepend(this.templates.header())),t.templates&&t.templates.empty&&(this.templates.empty=o.templatify(t.templates.empty),this.$empty=s.element('<div class="'+o.className(this.cssClasses.prefix,this.cssClasses.empty,!0)+'"></div>'),this.$menu.append(this.$empty)),this.datasets=o.map(t.datasets,function(e){return i(a.$menu,e,t.cssClasses)}),o.each(this.datasets,function(t){var e=t.getRoot();e&&0===e.parent().length&&a.$menu.append(e),t.onSync("rendered",a._onRendered,a)}),t.templates&&t.templates.footer&&(this.templates.footer=o.templatify(t.templates.footer),this.$menu.append(this.templates.footer()));var l=this;s.element(window).resize(function(){l._redraw()})}function i(t,e,n){return new r.Dataset(o.mixin({$menu:t,cssClasses:n},e))}var o=n(0),s=n(1),a=n(9),u=n(38),c=n(8);o.mixin(r.prototype,a,{_onSuggestionClick:function(t){this.trigger("suggestionClicked",s.element(t.currentTarget))},_onSuggestionMouseEnter:function(t){var e=s.element(t.currentTarget);e.hasClass(o.className(this.cssClasses.prefix,this.cssClasses.cursor,!0))||(this._removeCursor(),this._setCursor(e,!1))},_onSuggestionMouseLeave:function(t){if(t.relatedTarget){if(s.element(t.relatedTarget).closest("."+o.className(this.cssClasses.prefix,this.cssClasses.cursor,!0)).length>0)return}this._removeCursor(),this.trigger("cursorRemoved")},_onRendered:function(t,e){function n(t){return t.isEmpty()}function r(t){return t.templates&&t.templates.empty}if(this.isEmpty=o.every(this.datasets,n),this.isEmpty)if(e.length>=this.minLength&&this.trigger("empty"),this.$empty)if(e.length<this.minLength)this._hide();else{var i=this.templates.empty({query:this.datasets[0]&&this.datasets[0].query});this.$empty.html(i),this._show()}else o.any(this.datasets,r)?e.length<this.minLength?this._hide():this._show():this._hide();else this.isOpen&&(this.$empty&&this.$empty.empty(),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(o.className(this.cssClasses.prefix,this.cssClasses.suggestion))},_getCursor:function(){return this.$menu.find(o.className(this.cssClasses.prefix,this.cssClasses.cursor)).first()},_setCursor:function(t,e){t.first().addClass(o.className(this.cssClasses.prefix,this.cssClasses.cursor,!0)).attr("aria-selected","true"),this.trigger("cursorMoved",e)},_removeCursor:function(){this._getCursor().removeClass(o.className(this.cssClasses.prefix,this.cssClasses.cursor,!0)).removeAttr("aria-selected")},_moveCursor:function(t){var e,n,r,i;if(this.isOpen){if(n=this._getCursor(),e=this._getSuggestions(),this._removeCursor(),r=e.index(n)+t,-1===(r=(r+1)%(e.length+1)-1))return void this.trigger("cursorRemoved");r<-1&&(r=e.length-1),this._setCursor(i=e.eq(r),!0),this._ensureVisible(i)}},_ensureVisible:function(t){var e,n,r,i;e=t.position().top,n=e+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("paddingTop"),10)+parseInt(this.$menu.css("paddingBottom"),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:u.extractDatum(t),value:u.extractValue(t),datasetName:u.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){function e(e){e.update(t)}o.each(this.datasets,e)},empty:function(){function t(t){t.clear()}o.each(this.datasets,t),this.isEmpty=!0},isVisible:function(){return this.isOpen&&!this.isEmpty},destroy:function(){function t(t){t.destroy()}this.$menu.off(".aa"),this.$menu=null,o.each(this.datasets,t)}}),r.Dataset=u,t.exports=r},function(t,e,n){"use strict";function r(t){var e,n,r,o,s=this;t=t||{},t.input||u.error("input is missing"),e=u.bind(this._onBlur,this),n=u.bind(this._onFocus,this),r=u.bind(this._onKeydown,this),o=u.bind(this._onInput,this),this.$hint=c.element(t.hint),this.$input=c.element(t.input).on("blur.aa",e).on("focus.aa",n).on("keydown.aa",r),0===this.$hint.length&&(this.setHint=this.getHint=this.clearHint=this.clearHintIfInvalid=u.noop),u.isMsie()?this.$input.on("keydown.aa keypress.aa cut.aa paste.aa",function(t){a[t.which||t.keyCode]||u.defer(u.bind(s._onInput,s,t))}):this.$input.on("input.aa",o),this.query=this.$input.val(),this.$overflowHelper=i(this.$input)}function i(t){return c.element('<pre aria-hidden="true"></pre>').css({position:"absolute",visibility:"hidden",whiteSpace:"pre",fontFamily:t.css("font-family"),fontSize:t.css("font-size"),fontStyle:t.css("font-style"),fontVariant:t.css("font-variant"),fontWeight:t.css("font-weight"),wordSpacing:t.css("word-spacing"),letterSpacing:t.css("letter-spacing"),textIndent:t.css("text-indent"),textRendering:t.css("text-rendering"),textTransform:t.css("text-transform")}).insertAfter(t)}function o(t,e){return r.normalizeQuery(t)===r.normalizeQuery(e)}function s(t){return t.altKey||t.ctrlKey||t.metaKey||t.shiftKey}var a;a={9:"tab",27:"esc",37:"left",39:"right",13:"enter",38:"up",40:"down"};var u=n(0),c=n(1),l=n(9);r.normalizeQuery=function(t){return(t||"").replace(/^\s*/g,"").replace(/\s{2,}/g," ")},u.mixin(r.prototype,l,{_onBlur:function(){this.resetInputValue(),this.$input.removeAttr("aria-activedescendant"),this.trigger("blurred")},_onFocus:function(){this.trigger("focused")},_onKeydown:function(t){var e=a[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&&!s(e);break;case"up":case"down":n=!s(e);break;default:n=!1}n&&e.preventDefault()},_shouldTrigger:function(t,e){var n;switch(t){case"tab":n=!s(e);break;default:n=!0}return n},_checkInputValue:function(){var t,e,n;t=this.getInputValue(),e=o(t,this.query),n=!(!e||!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,r;t=this.getInputValue(),e=this.getHint(),n=t!==e&&0===e.indexOf(t),(r=""!==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,u.isNumber(e)?e===t:!document.selection||(n=document.selection.createRange(),n.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=r},function(t,e,n){"use strict";function r(t){var e,n;if(t=t||{},t.input||u.error("missing input"),this.isActivated=!1,this.debug=!!t.debug,this.autoselect=!!t.autoselect,this.autoselectOnBlur=!!t.autoselectOnBlur,this.openOnFocus=!!t.openOnFocus,this.minLength=u.isNumber(t.minLength)?t.minLength:1,this.autoWidth=void 0===t.autoWidth||!!t.autoWidth,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=u.mixin({},d,t.appendTo?d.appendTo:{}),this.cssClasses=t.cssClasses=u.mixin({},d.defaultClasses,t.cssClasses||{}),this.cssClasses.prefix=t.cssClasses.formattedPrefix=u.formatPrefix(this.cssClasses.prefix,this.cssClasses.noPrefix),this.listboxId=t.listboxId=[this.cssClasses.root,"listbox",u.getUniqueId()].join("-");var o=i(t);this.$node=o.wrapper;var s=this.$input=o.input;e=o.menu,n=o.hint,t.dropdownMenuContainer&&c.element(t.dropdownMenuContainer).css("position","relative").append(e.css("top","0")),s.on("blur.aa",function(t){var n=document.activeElement;u.isMsie()&&(e[0]===n||e[0].contains(n))&&(t.preventDefault(),t.stopImmediatePropagation(),u.defer(function(){s.focus()}))}),e.on("mousedown.aa",function(t){t.preventDefault()}),this.eventBus=t.eventBus||new l({el:s}),this.dropdown=new r.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 r.Input({input:s,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()}function i(t){var e,n,r,i;e=c.element(t.input),n=c.element(p.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 s=p.dropdown.replace("%PREFIX%",t.cssClasses.prefix).replace("%DROPDOWN_MENU%",t.cssClasses.dropdownMenu);r=c.element(s).css(t.css.dropdown).attr({role:"listbox",id:t.listboxId}),t.templates&&t.templates.dropdownMenu&&r.html(u.templatify(t.templates.dropdownMenu)()),i=e.clone().css(t.css.hint).css(o(e)),i.val("").addClass(u.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}),i.removeData&&i.removeData(),e.data(a,{"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(u.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-labelledby":e.attr("placeholder")?e.attr("id"):null,"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(c.element(t.appendTo).eq(0)).eq(0):e.wrap(n).parent(),n.prepend(t.hint?i:null).append(r),{wrapper:n,input:e,hint:i,menu:r}}function o(t){return{backgroundAttachment:t.css("background-attachment"),backgroundClip:t.css("background-clip"),backgroundColor:t.css("background-color"),backgroundImage:t.css("background-image"),backgroundOrigin:t.css("background-origin"),backgroundPosition:t.css("background-position"),backgroundRepeat:t.css("background-repeat"),backgroundSize:t.css("background-size")}}function s(t,e){var n=t.find(u.className(e.prefix,e.input));u.each(n.data(a),function(t,e){void 0===t?n.removeAttr(e):n.attr(e,t)}),n.detach().removeClass(u.className(e.prefix,e.input,!0)).insertAfter(t),n.removeData&&n.removeData(a),t.remove()}var a="aaAttrs",u=n(0),c=n(1),l=n(13),h=n(40),f=n(39),p=n(14),d=n(8);u.mixin(r.prototype,{_bindKeyboardShortcuts:function(t){if(t.keyboardShortcuts){var e=this.$input,n=[];u.each(t.keyboardShortcuts,function(t){"string"==typeof t&&(t=t.toUpperCase().charCodeAt(0)),n.push(t)}),c.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;(n=this.dropdown.getDatumForCursor())?(this._select(n),e.preventDefault()):this._autocomplete(!0)},_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,r,i,o;t=this.dropdown.getDatumForTopSuggestion(),t&&this.dropdown.isVisible()&&!this.input.hasOverflow()?(e=this.input.getInputValue(),n=h.normalizeQuery(e),r=u.escapeRegExChars(n),i=new RegExp("^(?:"+r+")(.+$)","i"),o=i.exec(t.value),o?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(),i&&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.input.setInputValue(t.value,!0),this._setLanguageDirection(),!1===this.eventBus.trigger("selected",t.raw,t.datasetName).isDefaultPrevented()&&(this.dropdown.close(),u.defer(u.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=u.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(){this.input.destroy(),this.dropdown.destroy(),s(this.$node,this.cssClasses),this.$node=null},getWrapper:function(){return this.dropdown.$container[0]}}),r.Dropdown=f,r.Input=h,r.sources=n(43),t.exports=r},function(t,e,n){"use strict";var r=n(0),i=n(16),o=n(15);t.exports=function(t,e){function n(n,i){t.search(n,e,function(t,e){if(t)return void r.error(t.message);i(e.hits,e)})}var s=o(t.as._ua);return s&&s[0]>=3&&s[1]>20&&(e=e||{},e.additionalUA="autocomplete.js "+i),n}},function(t,e,n){"use strict";t.exports={hits:n(42),popularIn:n(44)}},function(t,e,n){"use strict";var r=n(0),i=n(16),o=n(15);t.exports=function(t,e,n,s){function a(a,u){t.search(a,e,function(t,a){if(t)return void r.error(t.message);if(a.hits.length>0){var h=a.hits[0],f=r.mixin({hitsPerPage:0},n);delete f.source,delete f.index;var p=o(l.as._ua);return p&&p[0]>=3&&p[1]>20&&(e.additionalUA="autocomplete.js "+i),void l.search(c(h),f,function(t,e){if(t)return void r.error(t.message);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]);u(n,a)})}u([])})}var u=o(t.as._ua);if(u&&u[0]>=3&&u[1]>20&&(e=e||{},e.additionalUA="autocomplete.js "+i),!n.source)return r.error("Missing 'source' key");var c=r.isFunction(n.source)?n.source:function(t){return t[n.source]};if(!n.index)return r.error("Missing 'index' key");var l=n.index;return s=s||{},a}},function(t,e,n){"use strict";function r(t,e,n,r){n=o.isArray(n)?n:[].slice.call(arguments,2);var c=i(t).each(function(t,o){var c=i(o),l=new u({el:c}),h=r||new a({input:c,eventBus:l,dropdownMenuContainer:e.dropdownMenuContainer,hint:void 0===e.hint||!!e.hint,minLength:e.minLength,autoselect:e.autoselect,autoselectOnBlur:e.autoselectOnBlur,openOnFocus:e.openOnFocus,templates:e.templates,debug:e.debug,cssClasses:e.cssClasses,datasets:n,keyboardShortcuts:e.keyboardShortcuts,appendTo:e.appendTo,autoWidth:e.autoWidth});c.data(s,h)});return c.autocomplete={},o.each(["open","close","getVal","setVal","destroy","getWrapper"],function(t){c.autocomplete[t]=function(){var e,n=arguments;return c.each(function(r,o){var a=i(o).data(s);e=a[t].apply(a,n)}),e}}),c}var i=n(17);n(1).element=i;var o=n(0);o.isArray=i.isArray,o.isFunction=i.isFunction,o.isObject=i.isPlainObject,o.bind=i.proxy,o.each=function(t,e){function n(t,n){return e(n,t)}i.each(t,n)},o.map=i.map,o.mixin=i.extend,o.Event=i.Event;var s="aaAutocomplete",a=n(41),u=n(13);r.sources=a.sources,r.escapeHighlightedString=o.escapeHighlightedString;var c="autocomplete"in window,l=window.autocomplete;r.noConflict=function(){return c?window.autocomplete=l:delete window.autocomplete,r},t.exports=r},function(t,e,n){"use strict";var r=n(21),i=function(t){return t&&t.__esModule?t:{default:t}}(r);t.exports=i.default},function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{default:t}}function i(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(e,"__esModule",{value:!0});var o=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},s=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}}(),a=n(54),u=r(a),c=n(24),l=r(c),h=n(37),f=r(h),p=n(48),d=r(p),g=n(49),m=r(g),v=n(18),y=r(v),b=n(19),w=r(b),_=function(){function t(e){var n=e.apiKey,r=e.indexName,s=e.inputSelector,a=e.appId,u=void 0===a?"BH4D9OD16A":a,c=e.debug,h=void 0!==c&&c,p=e.algoliaOptions,g=void 0===p?{}:p,m=e.autocompleteOptions,v=void 0===m?{debug:!1,hint:!1,autoselect:!0}:m,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;i(this,t),t.checkArguments({apiKey:n,indexName:r,inputSelector:s,debug:h,algoliaOptions:g,autocompleteOptions:v,transformData:w,queryHook:x,handleSelected:C,enhancedSearchInput:E,layout:k}),this.apiKey=n,this.appId=u,this.indexName=r,this.input=t.getInputFromSelector(s),this.algoliaOptions=o({hitsPerPage:5},g);var O=!(!v||!v.debug)&&v.debug;v.debug=h||O,this.autocompleteOptions=v,this.autocompleteOptions.cssClasses={prefix:"ds"},C=C||this.handleSelected,this.isSimpleLayout="simple"===k,this.client=(0,l.default)(this.appId,this.apiKey),this.client.addAlgoliaAgent("docsearch.js "+y.default),E&&(this.input=t.injectSearchBox(this.input)),this.autocomplete=(0,f.default)(this.input,v,[{source:this.getAutocompleteSource(w,x),templates:{suggestion:t.getSuggestionTemplate(this.isSimpleLayout),footer:d.default.footer,empty:t.getEmptyTemplate()}}]),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 s(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.href=n.url}},{key:"handleShown",value:function(t){var e=t.offset().left+t.width()/2,n=(0,w.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,w.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(!t.getInputFromSelector(e.inputSelector))throw new Error("Error: No input element in the page matches "+e.inputSelector)}},{key:"injectSearchBox",value:function(t){t.before(d.default.searchBox);var e=t.prev().prev().find("input");return t.remove(),e}},{key:"bindSearchBoxEvent",value:function(){(0,w.default)('.searchbox [type="reset"]').on("click",function(){(0,w.default)("input#docsearch").focus(),(0,w.default)(this).addClass("hide"),f.default.autocomplete.setVal("")}),(0,w.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,w.default)(t).filter("input");return e.length?(0,w.default)(e[0]):null}},{key:"formatHits",value:function(e){var n=m.default.deepClone(e),r=n.map(function(t){return t._highlightResult&&(t._highlightResult=m.default.mergeKeyWithParent(t._highlightResult,"hierarchy")),m.default.mergeKeyWithParent(t,"hierarchy")}),i=m.default.groupBy(r,"lvl0");return w.default.each(i,function(t,e){var n=m.default.groupBy(e,"lvl1"),r=m.default.flattenAndFlagFirst(n,"isSubCategoryHeader");i[t]=r}),i=m.default.flattenAndFlagFirst(i,"isCategoryHeader"),i.map(function(e){var n=t.formatURL(e),r=m.default.getHighlightedValue(e,"lvl0"),i=m.default.getHighlightedValue(e,"lvl1")||r,o=m.default.compact([m.default.getHighlightedValue(e,"lvl2")||i,m.default.getHighlightedValue(e,"lvl3"),m.default.getHighlightedValue(e,"lvl4"),m.default.getHighlightedValue(e,"lvl5"),m.default.getHighlightedValue(e,"lvl6")]).join('<span class="aa-suggestion-title-separator" aria-hidden="true"> › </span>'),s=m.default.getSnippetedValue(e,"content"),a=i&&""!==i||o&&""!==o,u=!i||""===i||i===r,c=o&&""!==o&&o!==i,l=!c&&i&&""!==i&&i!==r;return{isLvl0:!l&&!c,isLvl1:l,isLvl2:c,isLvl1EmptyOrDuplicate:u,isCategoryHeader:e.isCategoryHeader,isSubCategoryHeader:e.isSubCategoryHeader,isTextOrSubcatoryNonEmpty:a,category:r,subcategory:i,title:o,text:s,url:n}})}},{key:"formatURL",value:function(t){var e=t.url,n=t.anchor;if(e){return-1!==e.indexOf("#")?e:n?t.url+"#"+t.anchor:e}return n?"#"+t.anchor:(console.warn("no anchor nor url for : ",JSON.stringify(t)),null)}},{key:"getEmptyTemplate",value:function(){return function(t){return u.default.compile(d.default.empty).render(t)}}},{key:"getSuggestionTemplate",value:function(t){var e=t?d.default.suggestionSimple:d.default.suggestion,n=u.default.compile(e);return function(t){return n.render(t)}}}]),t}();e.default=_},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r="algolia-docsearch-suggestion",i={suggestion:'\n <div class="'+r+"\n {{#isCategoryHeader}}"+r+"__main{{/isCategoryHeader}}\n {{#isSubCategoryHeader}}"+r+'__secondary{{/isSubCategoryHeader}}\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 {{#isTextOrSubcatoryNonEmpty}}\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 {{/isTextOrSubcatoryNonEmpty}}\n </div>\n </div>\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="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=n(19),o=function(t){return t&&t.__esModule?t:{default:t}}(i),s={mergeKeyWithParent:function(t,e){if(void 0===t[e])return t;if("object"!==r(t[e]))return t;var n=o.default.extend({},t,t[e]);return delete n[e],n},groupBy:function(t,e){var n={};return o.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){if(!Array.isArray(t))return void e.push(t);t.forEach(function(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=s},function(t,e,n){function r(){return e.colors[l++%e.colors.length]}function i(t){function n(){}function i(){var t=i,n=+new Date,o=n-(c||n);t.diff=o,t.prev=c,t.curr=n,c=n,null==t.useColors&&(t.useColors=e.useColors()),null==t.color&&t.useColors&&(t.color=r());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=["%o"].concat(s));var u=0;s[0]=s[0].replace(/%([a-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}),s=e.formatArgs.apply(t,s),(i.log||e.log||console.log.bind(console)).apply(t,s)}n.enabled=!1,i.enabled=!0;var o=e.enabled(t)?i:n;return o.namespace=t,o}function o(t){e.save(t);for(var n=(t||"").split(/[\s,]+/),r=n.length,i=0;i<r;i++)n[i]&&(t=n[i].replace(/[\\^$+?.()|[\]{}]/g,"\\$&").replace(/\*/g,".*?"),"-"===t[0]?e.skips.push(new RegExp("^"+t.substr(1)+"$")):e.names.push(new RegExp("^"+t+"$")))}function s(){e.enable("")}function a(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}function u(t){return t instanceof Error?t.stack||t.message:t}e=t.exports=i.debug=i,e.coerce=u,e.disable=s,e.enable=o,e.enabled=a,e.humanize=n(62),e.names=[],e.skips=[],e.formatters={};var c,l=0},function(t,e,n){(function(e,r){/*! + * @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 4.0.5 + */ +!function(e,n){t.exports=n()}(0,function(){"use strict";function t(t){return"function"==typeof t||"object"==typeof t&&null!==t}function i(t){return"function"==typeof t}function o(t){V=t}function s(t){K=t}function a(){return void 0!==U?function(){U(c)}:u()}function u(){var t=setTimeout;return function(){return t(c,1)}}function c(){for(var t=0;t<B;t+=2){(0,Y[t])(Y[t+1]),Y[t]=void 0,Y[t+1]=void 0}B=0}function l(t,e){var n=arguments,r=this,i=new this.constructor(f);void 0===i[tt]&&I(i);var o=r._state;return o?function(){var t=n[o-1];K(function(){return k(o,i,t,r._result)})}():C(r,i,t,e),i}function h(t){var e=this;if(t&&"object"==typeof t&&t.constructor===e)return t;var n=new e(f);return w(n,t),n}function f(){}function p(){return new TypeError("You cannot resolve a promise with itself")}function d(){return new TypeError("A promises callback cannot return that same promise.")}function g(t){try{return t.then}catch(t){return it.error=t,it}}function m(t,e,n,r){try{t.call(e,n,r)}catch(t){return t}}function v(t,e,n){K(function(t){var r=!1,i=m(n,e,function(n){r||(r=!0,e!==n?w(t,n):x(t,n))},function(e){r||(r=!0,S(t,e))},"Settle: "+(t._label||" unknown promise"));!r&&i&&(r=!0,S(t,i))},t)}function y(t,e){e._state===nt?x(t,e._result):e._state===rt?S(t,e._result):C(e,void 0,function(e){return w(t,e)},function(e){return S(t,e)})}function b(t,e,n){e.constructor===t.constructor&&n===l&&e.constructor.resolve===h?y(t,e):n===it?S(t,it.error):void 0===n?x(t,e):i(n)?v(t,e,n):x(t,e)}function w(e,n){e===n?S(e,p()):t(n)?b(e,n,g(n)):x(e,n)}function _(t){t._onerror&&t._onerror(t._result),A(t)}function x(t,e){t._state===et&&(t._result=e,t._state=nt,0!==t._subscribers.length&&K(A,t))}function S(t,e){t._state===et&&(t._state=rt,t._result=e,K(_,t))}function C(t,e,n,r){var i=t._subscribers,o=i.length;t._onerror=null,i[o]=e,i[o+nt]=n,i[o+rt]=r,0===o&&t._state&&K(A,t)}function A(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?k(n,r,i,o):i(o);t._subscribers.length=0}}function E(){this.error=null}function T(t,e){try{return t(e)}catch(t){return ot.error=t,ot}}function k(t,e,n,r){var o=i(n),s=void 0,a=void 0,u=void 0,c=void 0;if(o){if(s=T(n,r),s===ot?(c=!0,a=s.error,s=null):u=!0,e===s)return void S(e,d())}else s=r,u=!0;e._state!==et||(o&&u?w(e,s):c?S(e,a):t===nt?x(e,s):t===rt&&S(e,s))}function O(t,e){try{e(function(e){w(t,e)},function(e){S(t,e)})}catch(e){S(t,e)}}function N(){return st++}function I(t){t[tt]=st++,t._state=void 0,t._result=void 0,t._subscribers=[]}function j(t,e){this._instanceConstructor=t,this.promise=new t(f),this.promise[tt]||I(this.promise),z(e)?(this._input=e,this.length=e.length,this._remaining=e.length,this._result=new Array(this.length),0===this.length?x(this.promise,this._result):(this.length=this.length||0,this._enumerate(),0===this._remaining&&x(this.promise,this._result))):S(this.promise,L())}function L(){return new Error("Array Methods must be provided an Array")}function P(t){return new j(this,t).promise}function R(t){var e=this;return new e(z(t)?function(n,r){for(var i=t.length,o=0;o<i;o++)e.resolve(t[o]).then(n,r)}:function(t,e){return e(new TypeError("You must pass an array to race."))})}function D(t){var e=this,n=new e(f);return S(n,t),n}function $(){throw new TypeError("You must pass a resolver function as the first argument to the promise constructor")}function M(){throw new TypeError("Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.")}function q(t){this[tt]=N(),this._result=this._state=void 0,this._subscribers=[],f!==t&&("function"!=typeof t&&$(),this instanceof q?O(this,t):M())}function H(){var t=void 0;if(void 0!==r)t=r;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 n=null;try{n=Object.prototype.toString.call(e.resolve())}catch(t){}if("[object Promise]"===n&&!e.cast)return}t.Promise=q}var F=void 0;F=Array.isArray?Array.isArray:function(t){return"[object Array]"===Object.prototype.toString.call(t)};var z=F,B=0,U=void 0,V=void 0,K=function(t,e){Y[B]=t,Y[B+1]=e,2===(B+=2)&&(V?V(c):Z())},J="undefined"!=typeof window?window:void 0,W=J||{},X=W.MutationObserver||W.WebKitMutationObserver,Q="undefined"==typeof self&&void 0!==e&&"[object process]"==={}.toString.call(e),G="undefined"!=typeof Uint8ClampedArray&&"undefined"!=typeof importScripts&&"undefined"!=typeof MessageChannel,Y=new Array(1e3),Z=void 0;Z=Q?function(){return function(){return e.nextTick(c)}}():X?function(){var t=0,e=new X(c),n=document.createTextNode("");return e.observe(n,{characterData:!0}),function(){n.data=t=++t%2}}():G?function(){var t=new MessageChannel;return t.port1.onmessage=c,function(){return t.port2.postMessage(0)}}():void 0===J?function(){try{var t=n(67);return U=t.runOnLoop||t.runOnContext,a()}catch(t){return u()}}():u();var tt=Math.random().toString(36).substring(16),et=void 0,nt=1,rt=2,it=new E,ot=new E,st=0;return j.prototype._enumerate=function(){for(var t=this.length,e=this._input,n=0;this._state===et&&n<t;n++)this._eachEntry(e[n],n)},j.prototype._eachEntry=function(t,e){var n=this._instanceConstructor,r=n.resolve;if(r===h){var i=g(t);if(i===l&&t._state!==et)this._settledAt(t._state,e,t._result);else if("function"!=typeof i)this._remaining--,this._result[e]=t;else if(n===q){var o=new n(f);b(o,t,i),this._willSettleAt(o,e)}else this._willSettleAt(new n(function(e){return e(t)}),e)}else this._willSettleAt(r(t),e)},j.prototype._settledAt=function(t,e,n){var r=this.promise;r._state===et&&(this._remaining--,t===rt?S(r,n):this._result[e]=n),0===this._remaining&&x(r,this._result)},j.prototype._willSettleAt=function(t,e){var n=this;C(t,void 0,function(t){return n._settledAt(nt,e,t)},function(t){return n._settledAt(rt,e,t)})},q.all=P,q.race=R,q.resolve=h,q.reject=D,q._setScheduler=o,q._setAsap=s,q._asap=K,q.prototype={constructor:q,then:l,catch:function(t){return this.then(null,t)}},q.polyfill=H,q.Promise=q,q})}).call(e,n(11),n(3))},function(t,e,n){(function(e){"undefined"!=typeof window?t.exports=window:void 0!==e?t.exports=e:"undefined"!=typeof self?t.exports=self:t.exports={}}).call(e,n(3))},function(t,e,n){!function(t){function e(t){"}"===t.n.substr(t.n.length-1)&&(t.n=t.n.substring(0,t.n.length-1))}function n(t){return t.trim?t.trim():t.replace(/^\s*|\s*$/g,"")}function r(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}function i(e,n,r,a){var u=[],c=null,l=null,h=null;for(l=r[r.length-1];e.length>0;){if(h=e.shift(),l&&"<"==l.tag&&!(h.tag in _))throw new Error("Illegal content in < super tag.");if(t.tags[h.tag]<=t.tags.$||o(h,a))r.push(h),h.nodes=i(e,h.tag,r,a);else{if("/"==h.tag){if(0===r.length)throw new Error("Closing tag without opener: /"+h.n);if(c=r.pop(),h.n!=c.n&&!s(h.n,c.n,a))throw new Error("Nesting error: "+c.n+" vs. "+h.n);return c.end=h.i,u}"\n"==h.tag&&(h.last=0==e.length||"\n"==e[0].tag)}u.push(h)}if(r.length>0)throw new Error("missing closing tag: "+r.pop().n);return u}function o(t,e){for(var n=0,r=e.length;n<r;n++)if(e[n].o==t.n)return t.tag="#",!0}function s(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 a(t){var e=[];for(var n in t)e.push('"'+c(n)+'": function(c,p,t,i) {'+t[n]+"}");return"{ "+e.join(",")+" }"}function u(t){var e=[];for(var n in t.partials)e.push('"'+c(n)+'":{name:"'+c(t.partials[n].name)+'", '+u(t.partials[n])+"}");return"partials: {"+e.join(",")+"}, subs: "+a(t.subs)}function c(t){return t.replace(y,"\\\\").replace(g,'\\"').replace(m,"\\n").replace(v,"\\r").replace(b,"\\u2028").replace(w,"\\u2029")}function l(t){return~t.indexOf(".")?"d":"f"}function h(t,e){var n="<"+(e.prefix||""),r=n+t.n+x++;return e.partials[r]={name:t.n,partials:{}},e.code+='t.b(t.rp("'+c(r)+'",c,p,"'+(t.indent||"")+'"));',r}function f(t,e){e.code+="t.b(t.t(t."+l(t.n)+'("'+c(t.n)+'",c,p,0)));'}function p(t){return"t.b("+t+");"}var d=/\S/,g=/\"/g,m=/\n/g,v=/\r/g,y=/\\/g,b=/\u2028/,w=/\u2029/;t.tags={"#":1,"^":2,"<":3,$:4,"/":5,"!":6,">":7,"=":8,_v:9,"{":10,"&":11,_t:12},t.scan=function(i,o){function s(){p.length>0&&(g.push({tag:"_t",text:new String(p)}),p="")}function a(){for(var e=!0,n=y;n<g.length;n++)if(!(e=t.tags[g[n].tag]<t.tags._v||"_t"==g[n].tag&&null===g[n].text.match(d)))return!1;return e}function u(t,e){if(s(),t&&a())for(var n,r=y;r<g.length;r++)g[r].text&&((n=g[r+1])&&">"==n.tag&&(n.indent=g[r].text.toString()),g.splice(r,1));else e||g.push({tag:"\n"});m=!1,y=g.length}var c=i.length,l=0,h=null,f=null,p="",g=[],m=!1,v=0,y=0,b="{{",w="}}";for(o&&(o=o.split(" "),b=o[0],w=o[1]),v=0;v<c;v++)0==l?r(b,i,v)?(--v,s(),l=1):"\n"==i.charAt(v)?u(m):p+=i.charAt(v):1==l?(v+=b.length-1,f=t.tags[i.charAt(v+1)],h=f?i.charAt(v+1):"_v","="==h?(v=function(t,e){var r="="+w,i=t.indexOf(r,e),o=n(t.substring(t.indexOf("=",e)+1,i)).split(" ");return b=o[0],w=o[o.length-1],i+r.length-1}(i,v),l=0):(f&&v++,l=2),m=v):r(w,i,v)?(g.push({tag:h,n:n(p),otag:b,ctag:w,i:"/"==h?m-b.length:v+w.length}),p="",v+=w.length-1,l=0,"{"==h&&("}}"==w?v++:e(g[g.length-1]))):p+=i.charAt(v);return u(m,!0),g};var _={_t:!0,"\n":!0,$:!0,"/":!0};t.stringify=function(e,n,r){return"{code: function (c,p,i) { "+t.wrapMain(e.code)+" },"+u(e)+"}"};var x=0;t.generate=function(e,n,r){x=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."+l(e.n)+'("'+c(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."+l(e.n)+'("'+c(e.n)+'",c,p,1),c,p,1,0,0,"")){',t.walk(e.nodes,n),n.code+="};"},">":h,"<":function(e,n){var r={partials:{},code:"",subs:{},inPartial:!0};t.walk(e.nodes,r);var i=n.partials[h(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("'+c(e.n)+'",c,p,i);')},"\n":function(t,e){e.code+=p('"\\n"'+(t.last?"":" + i"))},_v:function(t,e){e.code+="t.b(t.v(t."+l(t.n)+'("'+c(t.n)+'",c,p,0)));'},_t:function(t,e){e.code+=p('"'+c(t.text)+'"')},"{":f,"&":f},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(t,e,n){return n=n||{},i(t,"",[],n.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){var r=n(53);r.Template=n(55).Template,r.template=r.Template,t.exports=r},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}function n(t,e,n,r,i,o){function s(){}function a(){}s.prototype=t,a.prototype=t.subs;var u,c=new s;c.subs=new a,c.subsText={},c.buf="",r=r||{},c.stackSubs=r,c.subsText=o;for(u in e)r[u]||(r[u]=e[u]);for(u in r)c.subs[u]=r[u];i=i||{},c.stackPartials=i;for(u in n)i[u]||(i[u]=n[u]);for(u in i)c.partials[u]=i[u];return c}function r(t){return String(null===t||void 0===t?"":t)}function i(t){return t=r(t),l.test(t)?t.replace(o,"&").replace(s,"<").replace(a,">").replace(u,"'").replace(c,"""):t}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:i,t:r,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 r=this.partials[t],i=e[r.name];if(r.instance&&r.base==i)return r.instance;if("string"==typeof i){if(!this.c)throw new Error("No compiler available.");i=this.c.compile(i,this.options)}if(!i)return null;if(this.partials[t].base=i,r.subs){e.stackText||(e.stackText={});for(key in r.subs)e.stackText[key]||(e.stackText[key]=void 0!==this.activeSub&&e.stackText[this.activeSub]?e.stackText[this.activeSub]:this.text);i=n(i,r.subs,r.partials,this.stackSubs,this.stackPartials,e.stackText)}return this.partials[t].instance=i,i},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(!h(r))return void n(t,e,this);for(var i=0;i<r.length;i++)t.push(r[i]),n(t,e,this),t.pop()},s:function(t,e,n,r,i,o,s){var a;return(!h(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,c=null;if("."===t&&h(n[n.length-2]))a=n[n.length-1];else for(var l=1;l<s.length;l++)o=e(s[l],a,u),void 0!==o?(c=a,a=o):a="";return!(i&&!a)&&(i||"function"!=typeof a||(n.push(c),a=this.mv(a,n,r),n.pop()),a)},f:function(t,n,r,i){for(var o=!1,s=null,a=!1,u=this.options.modelGet,c=n.length-1;c>=0;c--)if(s=n[c],void 0!==(o=e(t,s,u))){a=!0;break}return a?(i||"function"!=typeof o||(o=this.mv(o,n,r)),o):!i&&""},ls:function(t,e,n,i,o){var s=this.options.delimiters;return this.options.delimiters=o,this.b(this.ct(r(t.call(e,i)),e,n)),this.options.delimiters=s,!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 i=e[e.length-1],o=t.call(i);return"function"==typeof o?this.ct(r(o.call(i)),i,n):o},sub:function(t,e,n,r){var i=this.subs[t];i&&(this.activeSub=t,i(e,n,this,r),this.activeSub=!1)}};var o=/&/g,s=/</g,a=/>/g,u=/\'/g,c=/\"/g,l=/[&<>\"\']/,h=Array.isArray||function(t){return"[object Array]"===Object.prototype.toString.call(t)}}(e)},function(t,e,n){"use strict";function r(){a&&u&&(a=!1,u.length?f=u.concat(f):h=-1,f.length&&i())}function i(){if(!a){p=!1,a=!0;for(var t=f.length,e=setTimeout(r);t;){for(u=f,f=[];u&&++h<t;)u[h].run();h=-1,t=f.length}u=null,h=-1,a=!1,clearTimeout(e)}}function o(t,e){this.fun=t,this.array=e}function s(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];f.push(new o(t,e)),p||a||(p=!0,c())}for(var a,u,c,l=[n(59),n(58),n(57),n(60),n(61)],h=-1,f=[],p=!1,d=-1,g=l.length;++d<g;)if(l[d]&&l[d].test&&l[d].test()){c=l[d].install(i);break}o.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=s},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(3))},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(3))},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(11))},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(3))},function(t,e,n){"use strict";e.test=function(){return!0},e.install=function(t){return function(){setTimeout(t,0)}}},function(t,e){function n(t){if(t=String(t),!(t.length>1e4)){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 n=parseFloat(e[1]);switch((e[2]||"ms").toLowerCase()){case"years":case"year":case"yrs":case"yr":case"y":return n*l;case"days":case"day":case"d":return n*c;case"hours":case"hour":case"hrs":case"hr":case"h":return n*u;case"minutes":case"minute":case"mins":case"min":case"m":return n*a;case"seconds":case"second":case"secs":case"sec":case"s":return n*s;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return n;default:return}}}}function r(t){return t>=c?Math.round(t/c)+"d":t>=u?Math.round(t/u)+"h":t>=a?Math.round(t/a)+"m":t>=s?Math.round(t/s)+"s":t+"ms"}function i(t){return o(t,c,"day")||o(t,u,"hour")||o(t,a,"minute")||o(t,s,"second")||t+" ms"}function o(t,e,n){if(!(t<e))return t<1.5*e?Math.floor(t/e)+" "+n:Math.ceil(t/e)+" "+n+"s"}var s=1e3,a=60*s,u=60*a,c=24*u,l=365.25*c;t.exports=function(t,e){e=e||{};var o=typeof t;if("string"===o&&t.length>0)return n(t);if("number"===o&&!1===isNaN(t))return e.long?i(t):r(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=Object.prototype.hasOwnProperty,i=Object.prototype.toString,o=Array.prototype.slice,s=n(64),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={$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},p=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}(),d=function(t){if("undefined"==typeof window||!p)return h(t);try{return h(t)}catch(t){return!1}},g=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),h=[];if(!e&&!n&&!o)throw new TypeError("Object.keys called on a non-object");var f=c&&n;if(a&&t.length>0&&!r.call(t,0))for(var p=0;p<t.length;++p)h.push(String(p));if(o&&t.length>0)for(var g=0;g<t.length;++g)h.push(String(g));else for(var m in t)f&&"prototype"===m||!r.call(t,m)||h.push(String(m));if(u)for(var v=d(t),y=0;y<l.length;++y)v&&"constructor"===l[y]||!r.call(t,l[y])||h.push(l[y]);return h};g.shim=function(){if(Object.keys){if(!function(){return 2===(Object.keys(arguments)||"").length}(1,2)){var t=Object.keys;Object.keys=function(e){return t(s(e)?o.call(e):e)}}}else Object.keys=g;return Object.keys||g},t.exports=g},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){"use strict";function r(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 i=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?r(s(t),function(s){var a=encodeURIComponent(i(s))+n;return o(t[s])?r(t[s],function(t){return a+encodeURIComponent(i(t))}).join(e):a+encodeURIComponent(i(t[s]))}).join(e):a?encodeURIComponent(i(a))+n+encodeURIComponent(i(t)):""};var o=Array.isArray||function(t){return"[object Array]"===Object.prototype.toString.call(t)},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";function r(t){var e=function(){for(var e=arguments.length,n=Array(e),r=0;r<e;r++)n[r]=arguments[r];return new(i.apply(t,[null].concat(n)))};return e.__proto__=t,e.prototype=t.prototype,e}var i=Function.prototype.bind;t.exports=r},function(t,e){}])})},function(t,e){!function(e,n){var r=function(t,e){"use strict";if(e.getElementsByClassName){var n,r=e.documentElement,i=t.Date,o=t.HTMLPictureElement,s=t.addEventListener,a=t.setTimeout,u=t.requestAnimationFrame||a,c=t.requestIdleCallback,l=/^picture$/i,h=["load","error","lazyincluded","_lazyloaded"],f={},p=Array.prototype.forEach,d=function(t,e){return f[e]||(f[e]=new RegExp("(\\s|^)"+e+"(\\s|$)")),f[e].test(t.getAttribute("class")||"")&&f[e]},g=function(t,e){d(t,e)||t.setAttribute("class",(t.getAttribute("class")||"").trim()+" "+e)},m=function(t,e){var n;(n=d(t,e))&&t.setAttribute("class",(t.getAttribute("class")||"").replace(n," "))},v=function(t,e,n){var r=n?"addEventListener":"removeEventListener";n&&v(t,e),h.forEach(function(n){t[r](n,e)})},y=function(t,n,r,i,o){var s=e.createEvent("CustomEvent");return s.initCustomEvent(n,!i,!o,r||{}),t.dispatchEvent(s),s},b=function(e,r){var i;!o&&(i=t.picturefill||n.pf)?i({reevaluate:!0,elements:[e]}):r&&r.src&&(e.src=r.src)},w=function(t,e){return(getComputedStyle(t,null)||{})[e]},_=function(t,e,r){for(r=r||t.offsetWidth;r<n.minSize&&e&&!t._lazysizesWidth;)r=e.offsetWidth,e=e.parentNode;return r},x=function(){var t,n,r=[],i=[],o=r,s=function(){var e=o;for(o=r.length?i:r,t=!0,n=!1;e.length;)e.shift()();t=!1},c=function(r,i){t&&!i?r.apply(this,arguments):(o.push(r),n||(n=!0,(e.hidden?a:u)(s)))};return c._lsFlush=s,c}(),S=function(t,e){return e?function(){x(t)}:function(){var e=this,n=arguments;x(function(){t.apply(e,n)})}},C=function(t){var e,n=0,r=666,o=function(){e=!1,n=i.now(),t()},s=c?function(){c(o,{timeout:r}),666!==r&&(r=666)}:S(function(){a(o)},!0);return function(t){var o;(t=!0===t)&&(r=44),e||(e=!0,o=125-(i.now()-n),o<0&&(o=0),t||o<9&&c?s():a(s,o))}},A=function(t){var e,n,r=function(){e=null,t()},o=function(){var t=i.now()-n;t<99?a(o,99-t):(c||r)(r)};return function(){n=i.now(),e||(e=a(o,99))}},E=function(){var o,u,c,h,f,_,E,k,O,N,I,j,L,P,R,D=/^img$/i,$=/^iframe$/i,M="onscroll"in t&&!/glebot/.test(navigator.userAgent),q=0,H=0,F=-1,z=function(t){H--,t&&t.target&&v(t.target,z),(!t||H<0||!t.target)&&(H=0)},B=function(t,n){var i,o=t,s="hidden"==w(e.body,"visibility")||"hidden"!=w(t,"visibility");for(O-=n,j+=n,N-=n,I+=n;s&&(o=o.offsetParent)&&o!=e.body&&o!=r;)(s=(w(o,"opacity")||1)>0)&&"visible"!=w(o,"overflow")&&(i=o.getBoundingClientRect(),s=I>i.left&&N<i.right&&j>i.top-1&&O<i.bottom+1);return s},U=function(){var t,i,s,a,l,h,p,d,g;if((f=n.loadMode)&&H<8&&(t=o.length)){i=0,F++,null==P&&("expand"in n||(n.expand=r.clientHeight>500&&r.clientWidth>500?500:370),L=n.expand,P=L*n.expFactor),q<P&&H<1&&F>2&&f>2&&!e.hidden?(q=P,F=0):q=f>1&&F>1&&H<6?L:0;for(;i<t;i++)if(o[i]&&!o[i]._lazyRace)if(M)if((d=o[i].getAttribute("data-expand"))&&(h=1*d)||(h=q),g!==h&&(E=innerWidth+h*R,k=innerHeight+h,p=-1*h,g=h),s=o[i].getBoundingClientRect(),(j=s.bottom)>=p&&(O=s.top)<=k&&(I=s.right)>=p*R&&(N=s.left)<=E&&(j||I||N||O)&&(c&&H<3&&!d&&(f<3||F<4)||B(o[i],h))){if(Y(o[i]),l=!0,H>9)break}else!l&&c&&!a&&H<4&&F<4&&f>2&&(u[0]||n.preloadAfterLoad)&&(u[0]||!d&&(j||I||N||O||"auto"!=o[i].getAttribute(n.sizesAttr)))&&(a=u[0]||o[i]);else Y(o[i]);a&&!l&&Y(a)}},V=C(U),K=function(t){g(t.target,n.loadedClass),m(t.target,n.loadingClass),v(t.target,W)},J=S(K),W=function(t){J({target:t.target})},X=function(t,e){try{t.contentWindow.location.replace(e)}catch(n){t.src=e}},Q=function(t){var e,r,i=t.getAttribute(n.srcsetAttr);(e=n.customMedia[t.getAttribute("data-media")||t.getAttribute("media")])&&t.setAttribute("media",e),i&&t.setAttribute("srcset",i),e&&(r=t.parentNode,r.insertBefore(t.cloneNode(),t),r.removeChild(t))},G=S(function(t,e,r,i,o){var s,u,c,f,d,w;(d=y(t,"lazybeforeunveil",e)).defaultPrevented||(i&&(r?g(t,n.autosizesClass):t.setAttribute("sizes",i)),u=t.getAttribute(n.srcsetAttr),s=t.getAttribute(n.srcAttr),o&&(c=t.parentNode,f=c&&l.test(c.nodeName||"")),w=e.firesLoad||"src"in t&&(u||s||f),d={target:t},w&&(v(t,z,!0),clearTimeout(h),h=a(z,2500),g(t,n.loadingClass),v(t,W,!0)),f&&p.call(c.getElementsByTagName("source"),Q),u?t.setAttribute("srcset",u):s&&!f&&($.test(t.nodeName)?X(t,s):t.src=s),(u||f)&&b(t,{src:s})),t._lazyRace&&delete t._lazyRace,m(t,n.lazyClass),x(function(){(!w||t.complete&&t.naturalWidth>1)&&(w?z(d):H--,K(d))},!0)}),Y=function(t){var e,r=D.test(t.nodeName),i=r&&(t.getAttribute(n.sizesAttr)||t.getAttribute("sizes")),o="auto"==i;(!o&&c||!r||!t.src&&!t.srcset||t.complete||d(t,n.errorClass))&&(e=y(t,"lazyunveilread").detail,o&&T.updateElem(t,!0,t.offsetWidth),t._lazyRace=!0,H++,G(t,e,o,i,r))},Z=function(){if(!c){if(i.now()-_<999)return void a(Z,999);var t=A(function(){n.loadMode=3,V()});c=!0,n.loadMode=3,V(),s("scroll",function(){3==n.loadMode&&(n.loadMode=2),t()},!0)}};return{_:function(){_=i.now(),o=e.getElementsByClassName(n.lazyClass),u=e.getElementsByClassName(n.lazyClass+" "+n.preloadClass),R=n.hFac,s("scroll",V,!0),s("resize",V,!0),t.MutationObserver?new MutationObserver(V).observe(r,{childList:!0,subtree:!0,attributes:!0}):(r.addEventListener("DOMNodeInserted",V,!0),r.addEventListener("DOMAttrModified",V,!0),setInterval(V,999)),s("hashchange",V,!0),["focus","mouseover","click","load","transitionend","animationend","webkitAnimationEnd"].forEach(function(t){e.addEventListener(t,V,!0)}),/d$|^c/.test(e.readyState)?Z():(s("load",Z),e.addEventListener("DOMContentLoaded",V),a(Z,2e4)),o.length?(U(),x._lsFlush()):V()},checkElems:V,unveil:Y}}(),T=function(){var t,r=S(function(t,e,n,r){var i,o,s;if(t._lazysizesWidth=r,r+="px",t.setAttribute("sizes",r),l.test(e.nodeName||""))for(i=e.getElementsByTagName("source"),o=0,s=i.length;o<s;o++)i[o].setAttribute("sizes",r);n.detail.dataAttr||b(t,n.detail)}),i=function(t,e,n){var i,o=t.parentNode;o&&(n=_(t,o,n),i=y(t,"lazybeforesizes",{width:n,dataAttr:!!e}),i.defaultPrevented||(n=i.detail.width)&&n!==t._lazysizesWidth&&r(t,o,i,n))},o=function(){var e,n=t.length;if(n)for(e=0;e<n;e++)i(t[e])},a=A(o);return{_:function(){t=e.getElementsByClassName(n.autosizesClass),s("resize",a)},checkElems:a,updateElem:i}}(),k=function(){k.i||(k.i=!0,T._(),E._())};return function(){var e,r={lazyClass:"lazyload",loadedClass:"lazyloaded",loadingClass:"lazyloading",preloadClass:"lazypreload",errorClass:"lazyerror",autosizesClass:"lazyautosizes",srcAttr:"data-src",srcsetAttr:"data-srcset",sizesAttr:"data-sizes",minSize:40,customMedia:{},init:!0,expFactor:1.5,hFac:.8,loadMode:2};n=t.lazySizesConfig||t.lazysizesConfig||{};for(e in r)e in n||(n[e]=r[e]);t.lazySizesConfig=n,a(function(){n.init&&k()})}(),{cfg:n,autoSizer:T,loader:E,init:k,uP:b,aC:g,rC:m,hC:d,fire:y,gW:_,rAF:x}}}(e,e.document);e.lazySizes=r,"object"==typeof t&&t.exports&&(t.exports=r)}(window)},function(t,e){!function(t,e){"use strict";function n(t,n){if(!o[t]){var r=e.createElement(n?"link":"script"),i=e.getElementsByTagName("script")[0];n?(r.rel="stylesheet",r.href=t):r.src=t,o[t]=!0,o[r.src||r.href]=!0,i.parentNode.insertBefore(r,i)}}var r,i,o={};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,s,a;t.defaultPrevented||("none"==t.target.preload&&(t.target.preload="auto"),e=t.target.getAttribute("data-link"),e&&n(e,!0),e=t.target.getAttribute("data-script"),e&&n(e),e=t.target.getAttribute("data-require"),e&&(lazySizes.cfg.requireJs?lazySizes.cfg.requireJs([e]):n(e)),s=t.target.getAttribute("data-bg"),s&&(t.detail.firesLoad=!0,o=function(){t.target.style.backgroundImage="url("+(i.test(s)?JSON.stringify(s):s)+")",t.detail.firesLoad=!1,lazySizes.fire(t.target,"_lazyloaded",{},!0,!0)},r(s,o)),(a=t.target.getAttribute("data-poster"))&&(t.detail.firesLoad=!0,o=function(){t.target.poster=a,t.detail.firesLoad=!1,lazySizes.fire(t.target,"_lazyloaded",{},!0,!0)},r(a,o)))},!1))}(window,document)},function(t,e,n){/** + * scrolldir - Vertical scroll direction in CSS + * @version v1.2.17 + * @link https://github.com/dollarshaveclub/scrolldir.git + * @author Patrick Fisher <[email protected]> + * @license MIT +**/ +!function(t,e){e()}(0,function(){"use strict";function t(){var t=i.scrollY||i.pageYOffset,e=f.timeStamp,n="down"===s?Math.max:Math.min,g=a.offsetHeight-i.innerHeight;if(t=Math.max(0,t),t=Math.min(g,t),h.unshift({y:t,t:e}),h.pop(),t===n(p,t))return d=e,void(p=t);var m=e-c;if(m>d){p=t;for(var v=0;v<u&&h[v]&&!(h[v].t<m);v+=1)p=n(p,h[v].y)}Math.abs(t-p)>l&&(p=t,d=e,s="down"===s?"up":"down",r.setAttribute(o,s))}function e(e){return f=e,i.requestAnimationFrame(t)}var n={el:document.documentElement,win:window,attribute:"data-scrolldir",dir:"down"},r=void 0,i=void 0,o=void 0,s=void 0,a=document.body,u=32,c=512,l=64,h=Array(u),f=void 0,p=void 0,d=0;!function(t){r=n.el,i=n.win,o=n.attribute,s=n.dir,p=i.scrollY||i.pageYOffset,r.setAttribute(o,s),i.addEventListener("scroll",e)}()})}]);
\ No newline at end of file diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/static/dist/main.css b/docs/_vendor/github.com/gohugoio/gohugoioTheme/static/dist/main.css new file mode 100644 index 000000000..51107f438 --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/static/dist/main.css @@ -0,0 +1 @@ +html{line-height:1.15;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,footer,header,nav,section{display:block}h1{font-size:2em;margin:.67em 0}figcaption,figure,main{display:block}figure{margin:1em 40px}hr{box-sizing:content-box;height:0;overflow:visible}pre{font-family:monospace,monospace;font-size:1em}a{background-color:transparent;-webkit-text-decoration-skip:objects}abbr[title]{border-bottom:none;text-decoration:underline;text-decoration:underline dotted}b,strong{font-weight:inherit;font-weight:bolder}code,kbd,samp{font-family:monospace,monospace;font-size:1em}dfn{font-style:italic}mark{background-color:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}audio,video{display:inline-block}audio:not([controls]){display:none;height:0}img{border-style:none}svg:not(:root){overflow:hidden}button,input,optgroup,select,textarea{font-family:sans-serif;font-size:100%;line-height:1.15;margin:0}button,input{overflow:visible}button,select{text-transform:none}[type=reset],[type=submit],button,html [type=button]{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{border-style:none;padding:0}[type=button]:-moz-focusring,[type=reset]:-moz-focusring,[type=submit]:-moz-focusring,button:-moz-focusring{outline:1px dotted ButtonText}fieldset{padding:.35em .75em .625em}legend{box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}progress{display:inline-block;vertical-align:baseline}textarea{overflow:auto}[type=checkbox],[type=radio]{box-sizing:border-box;padding:0}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-cancel-button,[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}details,menu{display:block}summary{display:list-item}canvas{display:inline-block}[hidden],template{display:none}.border-box,a,article,body,code,dd,div,dl,dt,fieldset,footer,form,h1,h2,h3,h4,h5,h6,header,html,input[type=email],input[type=number],input[type=password],input[type=tel],input[type=text],input[type=url],legend,li,main,ol,p,pre,section,table,td,textarea,th,tr,ul{box-sizing:border-box}img{max-width:100%}.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}}.bg-center{background-position:50%}.bg-center,.bg-top{background-repeat:no-repeat}.bg-top{background-position:top}.bg-right{background-position:100%}.bg-bottom,.bg-right{background-repeat:no-repeat}.bg-bottom{background-position:bottom}.bg-left{background-repeat:no-repeat;background-position:0}@media screen and (min-width:30em){.bg-center-ns{background-position:50%}.bg-center-ns,.bg-top-ns{background-repeat:no-repeat}.bg-top-ns{background-position:top}.bg-right-ns{background-position:100%}.bg-bottom-ns,.bg-right-ns{background-repeat:no-repeat}.bg-bottom-ns{background-position:bottom}.bg-left-ns{background-repeat:no-repeat;background-position:0}}@media screen and (min-width:30em) and (max-width:60em){.bg-center-m{background-position:50%}.bg-center-m,.bg-top-m{background-repeat:no-repeat}.bg-top-m{background-position:top}.bg-right-m{background-position:100%}.bg-bottom-m,.bg-right-m{background-repeat:no-repeat}.bg-bottom-m{background-position:bottom}.bg-left-m{background-repeat:no-repeat;background-position:0}}@media screen and (min-width:60em){.bg-center-l{background-position:50%}.bg-center-l,.bg-top-l{background-repeat:no-repeat}.bg-top-l{background-position:top}.bg-right-l{background-position:100%}.bg-bottom-l,.bg-right-l{background-repeat:no-repeat}.bg-bottom-l{background-position:bottom}.bg-left-l{background-repeat:no-repeat;background-position:0}}.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}}.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:hsla(0,0%,100%,.9)}.b--white-80{border-color:hsla(0,0%,100%,.8)}.b--white-70{border-color:hsla(0,0%,100%,.7)}.b--white-60{border-color:hsla(0,0%,100%,.6)}.b--white-50{border-color:hsla(0,0%,100%,.5)}.b--white-40{border-color:hsla(0,0%,100%,.4)}.b--white-30{border-color:hsla(0,0%,100%,.3)}.b--white-20{border-color:hsla(0,0%,100%,.2)}.b--white-10{border-color:hsla(0,0%,100%,.1)}.b--white-05{border-color:hsla(0,0%,100%,.05)}.b--white-025{border-color:hsla(0,0%,100%,.025)}.b--white-0125{border-color:hsla(0,0%,100%,.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:gold}.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}.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-right-radius:0}.br--right,.br--top{border-bottom-left-radius:0}.br--right{border-top-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-right-radius:0}.br--right-ns,.br--top-ns{border-bottom-left-radius:0}.br--right-ns{border-top-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-right-radius:0}.br--right-m,.br--top-m{border-bottom-left-radius:0}.br--right-m{border-top-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-right-radius:0}.br--right-l,.br--top-l{border-bottom-left-radius:0}.br--right-l{border-top-left-radius:0}.br--left-l{border-top-right-radius:0;border-bottom-right-radius:0}}.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}}.bw0{border-width:0}.bw1{border-width:.125rem}.bw2{border-width:.25rem}.bw3{border-width:.5rem}.bw4{border-width:1rem}.bw5{border-width:2rem}.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}}.shadow-1{box-shadow:0 0 4px 2px rgba(0,0,0,.2)}.shadow-2{box-shadow:0 0 8px 2px rgba(0,0,0,.2)}.shadow-3{box-shadow:2px 2px 4px 2px rgba(0,0,0,.2)}.shadow-4{box-shadow:2px 2px 8px 0 rgba(0,0,0,.2)}.shadow-5{box-shadow:4px 4px 8px 0 rgba(0,0,0,.2)}@media screen and (min-width:30em){.shadow-1-ns{box-shadow:0 0 4px 2px rgba(0,0,0,.2)}.shadow-2-ns{box-shadow:0 0 8px 2px rgba(0,0,0,.2)}.shadow-3-ns{box-shadow:2px 2px 4px 2px rgba(0,0,0,.2)}.shadow-4-ns{box-shadow:2px 2px 8px 0 rgba(0,0,0,.2)}.shadow-5-ns{box-shadow:4px 4px 8px 0 rgba(0,0,0,.2)}}@media screen and (min-width:30em) and (max-width:60em){.shadow-1-m{box-shadow:0 0 4px 2px rgba(0,0,0,.2)}.shadow-2-m{box-shadow:0 0 8px 2px rgba(0,0,0,.2)}.shadow-3-m{box-shadow:2px 2px 4px 2px rgba(0,0,0,.2)}.shadow-4-m{box-shadow:2px 2px 8px 0 rgba(0,0,0,.2)}.shadow-5-m{box-shadow:4px 4px 8px 0 rgba(0,0,0,.2)}}@media screen and (min-width:60em){.shadow-1-l{box-shadow:0 0 4px 2px rgba(0,0,0,.2)}.shadow-2-l{box-shadow:0 0 8px 2px rgba(0,0,0,.2)}.shadow-3-l{box-shadow:2px 2px 4px 2px rgba(0,0,0,.2)}.shadow-4-l{box-shadow:2px 2px 8px 0 rgba(0,0,0,.2)}.shadow-5-l{box-shadow:4px 4px 8px 0 rgba(0,0,0,.2)}}.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}}.cf:after,.cf:before{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}}.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}.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%}}.flex{display:-webkit-box;display:-ms-flexbox;display:flex}.inline-flex{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex}.flex-auto{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;min-width:0;min-height:0}.flex-none{-webkit-box-flex:0;-ms-flex:none;flex:none}.flex-column{-webkit-box-orient:vertical;-ms-flex-direction:column;flex-direction:column}.flex-column,.flex-row{-webkit-box-direction:normal}.flex-row{-webkit-box-orient:horizontal;-ms-flex-direction:row;flex-direction:row}.flex-wrap{-ms-flex-wrap:wrap;flex-wrap:wrap}.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}.flex-wrap-reverse{-ms-flex-wrap:wrap-reverse;flex-wrap:wrap-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;-ms-grid-row-align:center;align-self:center}.self-baseline{-ms-flex-item-align:baseline;align-self:baseline}.self-stretch{-ms-flex-item-align:stretch;-ms-grid-row-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}@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;min-height:0}.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-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}.flex-wrap-reverse-ns{-ms-flex-wrap:wrap-reverse;flex-wrap:wrap-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;-ms-grid-row-align:center;align-self:center}.self-baseline-ns{-ms-flex-item-align:baseline;align-self:baseline}.self-stretch-ns{-ms-flex-item-align:stretch;-ms-grid-row-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}}@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;min-height:0}.flex-none-m{-webkit-box-flex:0;-ms-flex:none;flex:none}.flex-column-m{-webkit-box-orient:vertical;-ms-flex-direction:column;flex-direction:column}.flex-column-m,.flex-row-m{-webkit-box-direction:normal}.flex-row-m{-webkit-box-orient:horizontal;-ms-flex-direction:row;flex-direction:row}.flex-wrap-m{-ms-flex-wrap:wrap;flex-wrap:wrap}.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}.flex-wrap-reverse-m{-ms-flex-wrap:wrap-reverse;flex-wrap:wrap-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;-ms-grid-row-align:center;align-self:center}.self-baseline-m{-ms-flex-item-align:baseline;align-self:baseline}.self-stretch-m{-ms-flex-item-align:stretch;-ms-grid-row-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}}@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;min-height:0}.flex-none-l{-webkit-box-flex:0;-ms-flex:none;flex:none}.flex-column-l{-webkit-box-orient:vertical;-ms-flex-direction:column;flex-direction:column}.flex-column-l,.flex-row-l{-webkit-box-direction:normal}.flex-row-l{-webkit-box-orient:horizontal;-ms-flex-direction:row;flex-direction:row}.flex-wrap-l{-ms-flex-wrap:wrap;flex-wrap:wrap}.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}.flex-wrap-reverse-l{-ms-flex-wrap:wrap-reverse;flex-wrap:wrap-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;-ms-grid-row-align:center;align-self:center}.self-baseline-l{-ms-flex-item-align:baseline;align-self:baseline}.self-stretch-l{-ms-flex-item-align:stretch;-ms-grid-row-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}}.fl{float:left}.fl,.fr{_display:inline}.fr{float:right}.fn{float:none}@media screen and (min-width:30em){.fl-ns{float:left}.fl-ns,.fr-ns{_display:inline}.fr-ns{float:right}.fn-ns{float:none}}@media screen and (min-width:30em) and (max-width:60em){.fl-m{float:left}.fl-m,.fr-m{_display:inline}.fr-m{float:right}.fn-m{float:none}}@media screen and (min-width:60em){.fl-l{float:left}.fl-l,.fr-l{_display:inline}.fr-l{float:right}.fn-l{float:none}}.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}}.normal{font-weight:400}.b{font-weight:700}.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:400}.b-ns{font-weight:700}.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:400}.b-m{font-weight:700}.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:400}.b-l{font-weight:700}.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}}.input-reset{-webkit-appearance:none;-moz-appearance:none}.button-reset::-moz-focus-inner,.input-reset::-moz-focus-inner{border:0;padding:0}.h1{height:1rem}.h2{height:2rem}.h3{height:4rem}.h4{height:8rem}.h5{height:16rem}.h-25{height:25%}.h-50{height:50%}.h-75{height:75%}.h-100{height:100%}.min-h-100{min-height:100%}.vh-25{height:25vh}.vh-50{height:50vh}.vh-75{height:75vh}.vh-100{height:100vh}.min-vh-100{min-height:100vh}.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}}.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}}.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}}.link{text-decoration:none}.link,.link:active,.link:focus,.link:hover,.link:link,.link:visited{transition:color .15s ease-in}.link:focus{outline:1px dotted currentColor}.list{list-style-type:none}.mw-100{max-width:100%}.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}.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}}.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-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}}.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}}.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}.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:hsla(0,0%,100%,.9)}.white-80{color:hsla(0,0%,100%,.8)}.white-70{color:hsla(0,0%,100%,.7)}.white-60{color:hsla(0,0%,100%,.6)}.white-50{color:hsla(0,0%,100%,.5)}.white-40{color:hsla(0,0%,100%,.4)}.white-30{color:hsla(0,0%,100%,.3)}.white-20{color:hsla(0,0%,100%,.2)}.white-10{color:hsla(0,0%,100%,.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:gold}.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:hsla(0,0%,100%,.9)}.bg-white-80{background-color:hsla(0,0%,100%,.8)}.bg-white-70{background-color:hsla(0,0%,100%,.7)}.bg-white-60{background-color:hsla(0,0%,100%,.6)}.bg-white-50{background-color:hsla(0,0%,100%,.5)}.bg-white-40{background-color:hsla(0,0%,100%,.4)}.bg-white-30{background-color:hsla(0,0%,100%,.3)}.bg-white-20{background-color:hsla(0,0%,100%,.2)}.bg-white-10{background-color:hsla(0,0%,100%,.1)}.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:gold}.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}.hover-black:focus,.hover-black:hover{color:#000}.hover-near-black:focus,.hover-near-black:hover{color:#111}.hover-dark-gray:focus,.hover-dark-gray:hover{color:#333}.hover-mid-gray:focus,.hover-mid-gray:hover{color:#555}.hover-gray:focus,.hover-gray:hover{color:#777}.hover-silver:focus,.hover-silver:hover{color:#999}.hover-light-silver:focus,.hover-light-silver:hover{color:#aaa}.hover-moon-gray:focus,.hover-moon-gray:hover{color:#ccc}.hover-light-gray:focus,.hover-light-gray:hover{color:#eee}.hover-near-white:focus,.hover-near-white:hover{color:#f4f4f4}.hover-white:focus,.hover-white:hover{color:#fff}.hover-black-90:focus,.hover-black-90:hover{color:rgba(0,0,0,.9)}.hover-black-80:focus,.hover-black-80:hover{color:rgba(0,0,0,.8)}.hover-black-70:focus,.hover-black-70:hover{color:rgba(0,0,0,.7)}.hover-black-60:focus,.hover-black-60:hover{color:rgba(0,0,0,.6)}.hover-black-50:focus,.hover-black-50:hover{color:rgba(0,0,0,.5)}.hover-black-40:focus,.hover-black-40:hover{color:rgba(0,0,0,.4)}.hover-black-30:focus,.hover-black-30:hover{color:rgba(0,0,0,.3)}.hover-black-20:focus,.hover-black-20:hover{color:rgba(0,0,0,.2)}.hover-black-10:focus,.hover-black-10:hover{color:rgba(0,0,0,.1)}.hover-white-90:focus,.hover-white-90:hover{color:hsla(0,0%,100%,.9)}.hover-white-80:focus,.hover-white-80:hover{color:hsla(0,0%,100%,.8)}.hover-white-70:focus,.hover-white-70:hover{color:hsla(0,0%,100%,.7)}.hover-white-60:focus,.hover-white-60:hover{color:hsla(0,0%,100%,.6)}.hover-white-50:focus,.hover-white-50:hover{color:hsla(0,0%,100%,.5)}.hover-white-40:focus,.hover-white-40:hover{color:hsla(0,0%,100%,.4)}.hover-white-30:focus,.hover-white-30:hover{color:hsla(0,0%,100%,.3)}.hover-white-20:focus,.hover-white-20:hover{color:hsla(0,0%,100%,.2)}.hover-white-10:focus,.hover-white-10:hover{color:hsla(0,0%,100%,.1)}.hover-inherit:focus,.hover-inherit:hover{color:inherit}.hover-bg-black:focus,.hover-bg-black:hover{background-color:#000}.hover-bg-near-black:focus,.hover-bg-near-black:hover{background-color:#111}.hover-bg-dark-gray:focus,.hover-bg-dark-gray:hover{background-color:#333}.hover-bg-dark-gray:focus,.hover-bg-mid-gray:hover{background-color:#555}.hover-bg-gray:focus,.hover-bg-gray:hover{background-color:#777}.hover-bg-silver:focus,.hover-bg-silver:hover{background-color:#999}.hover-bg-light-silver:focus,.hover-bg-light-silver:hover{background-color:#aaa}.hover-bg-moon-gray:focus,.hover-bg-moon-gray:hover{background-color:#ccc}.hover-bg-light-gray:focus,.hover-bg-light-gray:hover{background-color:#eee}.hover-bg-near-white:focus,.hover-bg-near-white:hover{background-color:#f4f4f4}.hover-bg-white:focus,.hover-bg-white:hover{background-color:#fff}.hover-bg-transparent:focus,.hover-bg-transparent:hover{background-color:transparent}.hover-bg-black-90:focus,.hover-bg-black-90:hover{background-color:rgba(0,0,0,.9)}.hover-bg-black-80:focus,.hover-bg-black-80:hover{background-color:rgba(0,0,0,.8)}.hover-bg-black-70:focus,.hover-bg-black-70:hover{background-color:rgba(0,0,0,.7)}.hover-bg-black-60:focus,.hover-bg-black-60:hover{background-color:rgba(0,0,0,.6)}.hover-bg-black-50:focus,.hover-bg-black-50:hover{background-color:rgba(0,0,0,.5)}.hover-bg-black-40:focus,.hover-bg-black-40:hover{background-color:rgba(0,0,0,.4)}.hover-bg-black-30:focus,.hover-bg-black-30:hover{background-color:rgba(0,0,0,.3)}.hover-bg-black-20:focus,.hover-bg-black-20:hover{background-color:rgba(0,0,0,.2)}.hover-bg-black-10:focus,.hover-bg-black-10:hover{background-color:rgba(0,0,0,.1)}.hover-bg-white-90:focus,.hover-bg-white-90:hover{background-color:hsla(0,0%,100%,.9)}.hover-bg-white-80:focus,.hover-bg-white-80:hover{background-color:hsla(0,0%,100%,.8)}.hover-bg-white-70:focus,.hover-bg-white-70:hover{background-color:hsla(0,0%,100%,.7)}.hover-bg-white-60:focus,.hover-bg-white-60:hover{background-color:hsla(0,0%,100%,.6)}.hover-bg-white-50:focus,.hover-bg-white-50:hover{background-color:hsla(0,0%,100%,.5)}.hover-bg-white-40:focus,.hover-bg-white-40:hover{background-color:hsla(0,0%,100%,.4)}.hover-bg-white-30:focus,.hover-bg-white-30:hover{background-color:hsla(0,0%,100%,.3)}.hover-bg-white-20:focus,.hover-bg-white-20:hover{background-color:hsla(0,0%,100%,.2)}.hover-bg-white-10:focus,.hover-bg-white-10:hover{background-color:hsla(0,0%,100%,.1)}.hover-dark-red:focus,.hover-dark-red:hover{color:#e7040f}.hover-red:focus,.hover-red:hover{color:#ff4136}.hover-light-red:focus,.hover-light-red:hover{color:#ff725c}.hover-orange:focus,.hover-orange:hover{color:#ff6300}.hover-gold:focus,.hover-gold:hover{color:#ffb700}.hover-yellow:focus,.hover-yellow:hover{color:gold}.hover-light-yellow:focus,.hover-light-yellow:hover{color:#fbf1a9}.hover-purple:focus,.hover-purple:hover{color:#5e2ca5}.hover-light-purple:focus,.hover-light-purple:hover{color:#a463f2}.hover-dark-pink:focus,.hover-dark-pink:hover{color:#d5008f}.hover-hot-pink:focus,.hover-hot-pink:hover{color:#ff41b4}.hover-pink:focus,.hover-pink:hover{color:#ff80cc}.hover-light-pink:focus,.hover-light-pink:hover{color:#ffa3d7}.hover-dark-green:focus,.hover-dark-green:hover{color:#137752}.hover-green:focus,.hover-green:hover{color:#19a974}.hover-light-green:focus,.hover-light-green:hover{color:#9eebcf}.hover-navy:focus,.hover-navy:hover{color:#001b44}.hover-dark-blue:focus,.hover-dark-blue:hover{color:#00449e}.hover-blue:focus,.hover-blue:hover{color:#0594cb}.hover-light-blue:focus,.hover-light-blue:hover{color:#96ccff}.hover-lightest-blue:focus,.hover-lightest-blue:hover{color:#cdecff}.hover-washed-blue:focus,.hover-washed-blue:hover{color:#f6fffe}.hover-washed-green:focus,.hover-washed-green:hover{color:#e8fdf5}.hover-washed-yellow:focus,.hover-washed-yellow:hover{color:#fffceb}.hover-washed-red:focus,.hover-washed-red:hover{color:#ffdfdf}.hover-bg-dark-red:focus,.hover-bg-dark-red:hover{background-color:#e7040f}.hover-bg-red:focus,.hover-bg-red:hover{background-color:#ff4136}.hover-bg-light-red:focus,.hover-bg-light-red:hover{background-color:#ff725c}.hover-bg-orange:focus,.hover-bg-orange:hover{background-color:#ff6300}.hover-bg-gold:focus,.hover-bg-gold:hover{background-color:#ffb700}.hover-bg-yellow:focus,.hover-bg-yellow:hover{background-color:gold}.hover-bg-light-yellow:focus,.hover-bg-light-yellow:hover{background-color:#fbf1a9}.hover-bg-purple:focus,.hover-bg-purple:hover{background-color:#5e2ca5}.hover-bg-light-purple:focus,.hover-bg-light-purple:hover{background-color:#a463f2}.hover-bg-dark-pink:focus,.hover-bg-dark-pink:hover{background-color:#d5008f}.hover-bg-hot-pink:focus,.hover-bg-hot-pink:hover{background-color:#ff41b4}.hover-bg-pink:focus,.hover-bg-pink:hover{background-color:#ff80cc}.hover-bg-light-pink:focus,.hover-bg-light-pink:hover{background-color:#ffa3d7}.hover-bg-dark-green:focus,.hover-bg-dark-green:hover{background-color:#137752}.hover-bg-green:focus,.hover-bg-green:hover{background-color:#19a974}.hover-bg-light-green:focus,.hover-bg-light-green:hover{background-color:#9eebcf}.hover-bg-navy:focus,.hover-bg-navy:hover{background-color:#001b44}.hover-bg-dark-blue:focus,.hover-bg-dark-blue:hover{background-color:#00449e}.hover-bg-blue:focus,.hover-bg-blue:hover{background-color:#0594cb}.hover-bg-light-blue:focus,.hover-bg-light-blue:hover{background-color:#96ccff}.hover-bg-lightest-blue:focus,.hover-bg-lightest-blue:hover{background-color:#cdecff}.hover-bg-washed-blue:focus,.hover-bg-washed-blue:hover{background-color:#f6fffe}.hover-bg-washed-green:focus,.hover-bg-washed-green:hover{background-color:#e8fdf5}.hover-bg-washed-yellow:focus,.hover-bg-washed-yellow:hover{background-color:#fffceb}.hover-bg-washed-red:focus,.hover-bg-washed-red:hover{background-color:#ffdfdf}.hover-bg-inherit:focus,.hover-bg-inherit:hover{background-color:inherit}.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}}.na1{margin:-.25rem}.na2{margin:-.5rem}.na3{margin:-1rem}.na4{margin:-2rem}.na5{margin:-4rem}.na6{margin:-8rem}.na7{margin:-16rem}.nl1{margin-left:-.25rem}.nl2{margin-left:-.5rem}.nl3{margin-left:-1rem}.nl4{margin-left:-2rem}.nl5{margin-left:-4rem}.nl6{margin-left:-8rem}.nl7{margin-left:-16rem}.nr1{margin-right:-.25rem}.nr2{margin-right:-.5rem}.nr3{margin-right:-1rem}.nr4{margin-right:-2rem}.nr5{margin-right:-4rem}.nr6{margin-right:-8rem}.nr7{margin-right:-16rem}.nb1{margin-bottom:-.25rem}.nb2{margin-bottom:-.5rem}.nb3{margin-bottom:-1rem}.nb4{margin-bottom:-2rem}.nb5{margin-bottom:-4rem}.nb6{margin-bottom:-8rem}.nb7{margin-bottom:-16rem}.nt1{margin-top:-.25rem}.nt2{margin-top:-.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:-.25rem}.na2-ns{margin:-.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:-.25rem}.nl2-ns{margin-left:-.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:-.25rem}.nr2-ns{margin-right:-.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:-.25rem}.nb2-ns{margin-bottom:-.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:-.25rem}.nt2-ns{margin-top:-.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:-.25rem}.na2-m{margin:-.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:-.25rem}.nl2-m{margin-left:-.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:-.25rem}.nr2-m{margin-right:-.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:-.25rem}.nb2-m{margin-bottom:-.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:-.25rem}.nt2-m{margin-top:-.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:-.25rem}.na2-l{margin:-.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:-.25rem}.nl2-l{margin-left:-.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:-.25rem}.nr2-l{margin-right:-.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:-.25rem}.nb2-l{margin-bottom:-.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:-.25rem}.nt2-l{margin-top:-.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}}.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:hsla(0,0%,100%,.1)}.stripe-dark:nth-child(odd){background-color:rgba(0,0,0,.1)}.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}}.tl{text-align:left}.tr{text-align:right}.tc{text-align:center}@media screen and (min-width:30em){.tl-ns{text-align:left}.tr-ns{text-align:right}.tc-ns{text-align:center}}@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}}@media screen and (min-width:60em){.tl-l{text-align:left}.tr-l{text-align:right}.tc-l{text-align:center}}.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}}.f-6,.f-headline{font-size:6rem}.f-5,.f-subheadline{font-size:5rem}.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}@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}}.measure{max-width:30em}.measure-wide{max-width:34em}.measure-narrow{max-width:20em}.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}.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}}.overflow-container{overflow-y:scroll}.center{margin-right:auto;margin-left:auto}@media screen and (min-width:30em){.center-ns{margin-right:auto;margin-left:auto}}@media screen and (min-width:30em) and (max-width:60em){.center-m{margin-right:auto;margin-left:auto}}@media screen and (min-width:60em){.center-l{margin-right:auto;margin-left:auto}}.clip{position:fixed!important;_position:absolute!important;clip:rect(1px 1px 1px 1px);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);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);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);clip:rect(1px,1px,1px,1px)}}.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}}.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}}.dim{opacity:1}.dim,.dim:focus,.dim:hover{transition:opacity .15s ease-in}.dim:focus,.dim:hover{opacity:.5}.dim:active{opacity:.8;transition:opacity .15s ease-out}.glow,.glow:focus,.glow:hover{transition:opacity .15s ease-in}.glow:focus,.glow:hover{opacity:1}.hide-child .child{opacity:0;transition:opacity .15s ease-in}.hide-child:active .child,.hide-child:focus .child,.hide-child:hover .child{opacity:1;transition:opacity .15s ease-in}.underline-hover:focus,.underline-hover:hover{text-decoration:underline}.grow{-moz-osx-font-smoothing:grayscale;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-transform:translateZ(0);transform:translateZ(0);transition:-webkit-transform .25s ease-out;transition:transform .25s ease-out;transition:transform .25s ease-out,-webkit-transform .25s ease-out}.grow:focus,.grow:hover{-webkit-transform:scale(1.05);transform:scale(1.05)}.grow:active{-webkit-transform:scale(.9);transform:scale(.9)}.grow-large{-moz-osx-font-smoothing:grayscale;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-transform:translateZ(0);transform:translateZ(0);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:focus,.grow-large:hover{-webkit-transform:scale(1.2);transform:scale(1.2)}.grow-large:active{-webkit-transform:scale(.95);transform:scale(.95)}.pointer:hover,.shadow-hover{cursor:pointer}.shadow-hover{position:relative;transition:all .5s cubic-bezier(.165,.84,.44,1)}.shadow-hover:after{content:"";box-shadow:0 0 16px 2px rgba(0,0,0,.2);opacity:0;position:absolute;top:0;left:0;width:100%;height:100%;z-index:-1;transition:opacity .5s cubic-bezier(.165,.84,.44,1)}.shadow-hover:focus:after,.shadow-hover:hover:after{opacity:1}.bg-animate,.bg-animate:focus,.bg-animate:hover{transition:background-color .15s ease-in-out}.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-unset{z-index:unset}.nested-copy-line-height ol,.nested-copy-line-height p,.nested-copy-line-height ul{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 ol,.nested-list-reset ul{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-seperator p+p{margin-top:1.5em}.nested-img img{width:100%;max-width:100%;display:block}.nested-links a{transition:color .15s ease-in}.nested-links a:focus,.nested-links a:hover{color:#96ccff;transition:color .15s ease-in}@font-face{font-family:Muli;font-style:normal;font-weight:200;src:url(/files/muli-latin-200.eot);src:local("Muli Extra Light "),local("Muli-Extra Light"),url(/files/muli-latin-200.eot?#iefix) format("embedded-opentype"),url(/files/muli-latin-200.woff2) format("woff2"),url(/files/muli-latin-200.woff) format("woff"),url(/files/muli-latin-200.svg#muli) format("svg")}@font-face{font-family:Muli;font-style:italic;font-weight:200;src:url(/files/muli-latin-200italic.eot);src:local("Muli Extra Light italic"),local("Muli-Extra Lightitalic"),url(/files/muli-latin-200italic.eot?#iefix) format("embedded-opentype"),url(/files/muli-latin-200italic.woff2) format("woff2"),url(/files/muli-latin-200italic.woff) format("woff"),url(/files/muli-latin-200italic.svg#muli) format("svg")}@font-face{font-family:Muli;font-style:normal;font-weight:400;src:url(/files/muli-latin-400.eot);src:local("Muli Regular "),local("Muli-Regular"),url(/files/muli-latin-400.eot?#iefix) format("embedded-opentype"),url(/files/muli-latin-400.woff2) format("woff2"),url(/files/muli-latin-400.woff) format("woff"),url(/files/muli-latin-400.svg#muli) format("svg")}@font-face{font-family:Muli;font-style:italic;font-weight:400;src:url(/files/muli-latin-400italic.eot);src:local("Muli Regular italic"),local("Muli-Regularitalic"),url(/files/muli-latin-400italic.eot?#iefix) format("embedded-opentype"),url(/files/muli-latin-400italic.woff2) format("woff2"),url(/files/muli-latin-400italic.woff) format("woff"),url(/files/muli-latin-400italic.svg#muli) format("svg")}@font-face{font-family:Muli;font-style:normal;font-weight:800;src:url(/files/muli-latin-800.eot);src:local("Muli ExtraBold "),local("Muli-ExtraBold"),url(/files/muli-latin-800.eot?#iefix) format("embedded-opentype"),url(/files/muli-latin-800.woff2) format("woff2"),url(/files/muli-latin-800.woff) format("woff"),url(/files/muli-latin-800.svg#muli) format("svg")}@font-face{font-family:Muli;font-style:italic;font-weight:800;src:url(/files/muli-latin-800italic.eot);src:local("Muli ExtraBold italic"),local("Muli-ExtraBolditalic"),url(/files/muli-latin-800italic.eot?#iefix) format("embedded-opentype"),url(/files/muli-latin-800italic.woff2) format("woff2"),url(/files/muli-latin-800italic.woff) format("woff"),url(/files/muli-latin-800italic.svg#muli) format("svg")}.header-link:after{position:relative;left:.5em;opacity:0;font-size:.8em;-moz-transition:opacity .2s ease-in-out .1s;-ms-transition:opacity .2s ease-in-out .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 a{0%{opacity:0}to{opacity:1}}@keyframes a{0%{opacity:0}to{opacity:1}}.fadeIn{-webkit-animation-name:a;animation-name:a}.animated-delay-1{-webkit-animation-delay:.5s;animation-delay:.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}.admonition-content{display:block;margin:0;padding:.125em 1em;margin-top:2em;margin-bottom:2em;overflow-x:auto;background-color:rgba(0,0,0,.05)}.hide-child-menu .child-menu{display:none}.hide-child-menu:active .child-menu,.hide-child-menu:focus .child-menu,.hide-child-menu:hover .child-menu{display:block}.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;box-sizing:border-box;visibility:visible!important}.searchbox .algolia-autocomplete{display:block;width:100%;height:100%}.searchbox__wrapper{width:100%;height:100%;z-index:1;position:relative}.searchbox__input{display:inline-block;box-sizing:border-box;transition:box-shadow .4s ease,background .4s ease;border:0;border-radius:16px;box-shadow:inset 0 0 0 1px #ccc;background:#fff!important;padding:0;padding-right:26px;padding-left: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{box-shadow:inset 0 0 0 1px #b3b3b3}.searchbox__input:active,.searchbox__input:focus{outline:0;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::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:b;animation-name:b;-webkit-animation-duration:.15s;animation-duration:.15s}@-webkit-keyframes b{0%{-webkit-transform:translate3d(-20%,0,0);transform:translate3d(-20%,0,0);opacity:0}to{-webkit-transform:none;transform:none;opacity:1}}@keyframes b{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:1;max-width:600px;min-width:500px;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:2;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:2;margin-top:8px}.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 *{box-sizing:border-box}.algolia-autocomplete .algolia-docsearch-suggestion{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{color:inherit;background:inherit}.algolia-autocomplete .algolia-docsearch-suggestion--text .algolia-docsearch-suggestion--highlight{padding:0 0 1px;background:inherit;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%;display:none;padding-left:0;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-column .algolia-docsearch-suggestion--highlight{background-color:inherit;color:inherit}.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 .algolia-docsearch-suggestion--subcategory-column{display:block}.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-column,.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;box-shadow:none}.algolia-autocomplete .algolia-docsearch-footer{width:110px;height:20px;z-index:3;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;utf8,<svg viewBox='0 0 130 18' xmlns='http://www.w3.org/2000/svg'><defs><linearGradient x1='-36.868%' y1='134.936%' x2='129.432%' y2='-27.7%' id='a'><stop stop-color='%2300AEFF' offset='0%'/><stop stop-color='%233369E7' offset='100%'/></linearGradient></defs><g fill='none' fill-rule='evenodd'><path d='M59.399.022h13.299a2.372 2.372 0 0 1 2.377 2.364V15.62a2.372 2.372 0 0 1-2.377 2.364H59.399a2.372 2.372 0 0 1-2.377-2.364V2.381A2.368 2.368 0 0 1 59.399.022z' fill='url(%23a)'/><path d='M66.257 4.56c-2.815 0-5.1 2.272-5.1 5.078 0 2.806 2.284 5.072 5.1 5.072 2.815 0 5.1-2.272 5.1-5.078 0-2.806-2.279-5.072-5.1-5.072zm0 8.652c-1.983 0-3.593-1.602-3.593-3.574 0-1.972 1.61-3.574 3.593-3.574 1.983 0 3.593 1.602 3.593 3.574a3.582 3.582 0 0 1-3.593 3.574zm0-6.418v2.664c0 .076.082.131.153.093l2.377-1.226c.055-.027.071-.093.044-.147a2.96 2.96 0 0 0-2.465-1.487c-.055 0-.11.044-.11.104l.001-.001zm-3.33-1.956l-.312-.311a.783.783 0 0 0-1.106 0l-.372.37a.773.773 0 0 0 0 1.101l.307.305c.049.049.121.038.164-.011.181-.245.378-.479.597-.697.225-.223.455-.42.707-.599.055-.033.06-.109.016-.158h-.001zm5.001-.806v-.616a.781.781 0 0 0-.783-.779h-1.824a.78.78 0 0 0-.783.779v.632c0 .071.066.12.137.104a5.736 5.736 0 0 1 1.588-.223c.52 0 1.035.071 1.534.207a.106.106 0 0 0 .131-.104z' fill='%23FFF'/><path d='M102.162 13.762c0 1.455-.372 2.517-1.123 3.193-.75.676-1.895 1.013-3.44 1.013-.564 0-1.736-.109-2.673-.316l.345-1.689c.783.163 1.819.207 2.361.207.86 0 1.473-.174 1.84-.523.367-.349.548-.866.548-1.553v-.349a6.374 6.374 0 0 1-.838.316 4.151 4.151 0 0 1-1.194.158 4.515 4.515 0 0 1-1.616-.278 3.385 3.385 0 0 1-1.254-.817 3.744 3.744 0 0 1-.811-1.351c-.192-.539-.29-1.504-.29-2.212 0-.665.104-1.498.307-2.054a3.925 3.925 0 0 1 .904-1.433 4.124 4.124 0 0 1 1.441-.926 5.31 5.31 0 0 1 1.945-.365c.696 0 1.337.087 1.961.191a15.86 15.86 0 0 1 1.588.332v8.456h-.001zm-5.954-4.206c0 .893.197 1.885.592 2.299.394.414.904.621 1.528.621.34 0 .663-.049.964-.142a2.75 2.75 0 0 0 .734-.332v-5.29a8.531 8.531 0 0 0-1.413-.18c-.778-.022-1.369.294-1.786.801-.411.507-.619 1.395-.619 2.223zm16.12 0c0 .719-.104 1.264-.318 1.858a4.389 4.389 0 0 1-.904 1.52c-.389.42-.854.746-1.402.975-.548.229-1.391.36-1.813.36-.422-.005-1.26-.125-1.802-.36a4.088 4.088 0 0 1-1.397-.975 4.486 4.486 0 0 1-.909-1.52 5.037 5.037 0 0 1-.329-1.858c0-.719.099-1.411.318-1.999.219-.588.526-1.09.92-1.509.394-.42.865-.741 1.402-.97a4.547 4.547 0 0 1 1.786-.338 4.69 4.69 0 0 1 1.791.338c.548.229 1.019.55 1.402.97.389.42.69.921.909 1.509.23.588.345 1.28.345 1.999h.001zm-2.191.005c0-.921-.203-1.689-.597-2.223-.394-.539-.948-.806-1.654-.806-.707 0-1.26.267-1.654.806-.394.539-.586 1.302-.586 2.223 0 .932.197 1.558.592 2.098.394.545.948.812 1.654.812.707 0 1.26-.272 1.654-.812.394-.545.592-1.166.592-2.098h-.001zm6.962 4.707c-3.511.016-3.511-2.822-3.511-3.274L113.583.926l2.142-.338v10.003c0 .256 0 1.88 1.375 1.885v1.792h-.001zm3.774 0h-2.153V5.072l2.153-.338v9.534zm-1.079-10.542c.718 0 1.304-.578 1.304-1.291 0-.714-.581-1.291-1.304-1.291-.723 0-1.304.578-1.304 1.291 0 .714.586 1.291 1.304 1.291zm6.431 1.013c.707 0 1.304.087 1.786.262.482.174.871.42 1.156.73.285.311.488.735.608 1.182.126.447.186.937.186 1.476v5.481a25.24 25.24 0 0 1-1.495.251c-.668.098-1.419.147-2.251.147a6.829 6.829 0 0 1-1.517-.158 3.213 3.213 0 0 1-1.178-.507 2.455 2.455 0 0 1-.761-.904c-.181-.37-.274-.893-.274-1.438 0-.523.104-.855.307-1.215.208-.36.487-.654.838-.883a3.609 3.609 0 0 1 1.227-.49 7.073 7.073 0 0 1 2.202-.103c.263.027.537.076.833.147v-.349c0-.245-.027-.479-.088-.697a1.486 1.486 0 0 0-.307-.583c-.148-.169-.34-.3-.581-.392a2.536 2.536 0 0 0-.915-.163c-.493 0-.942.06-1.353.131-.411.071-.75.153-1.008.245l-.257-1.749c.268-.093.668-.185 1.183-.278a9.335 9.335 0 0 1 1.66-.142l-.001-.001zm.181 7.731c.657 0 1.145-.038 1.484-.104v-2.168a5.097 5.097 0 0 0-1.978-.104c-.241.033-.46.098-.652.191a1.167 1.167 0 0 0-.466.392c-.121.169-.175.267-.175.523 0 .501.175.79.493.981.323.196.75.289 1.293.289h.001zM84.109 4.794c.707 0 1.304.087 1.786.262.482.174.871.42 1.156.73.29.316.487.735.608 1.182.126.447.186.937.186 1.476v5.481a25.24 25.24 0 0 1-1.495.251c-.668.098-1.419.147-2.251.147a6.829 6.829 0 0 1-1.517-.158 3.213 3.213 0 0 1-1.178-.507 2.455 2.455 0 0 1-.761-.904c-.181-.37-.274-.893-.274-1.438 0-.523.104-.855.307-1.215.208-.36.487-.654.838-.883a3.609 3.609 0 0 1 1.227-.49 7.073 7.073 0 0 1 2.202-.103c.257.027.537.076.833.147v-.349c0-.245-.027-.479-.088-.697a1.486 1.486 0 0 0-.307-.583c-.148-.169-.34-.3-.581-.392a2.536 2.536 0 0 0-.915-.163c-.493 0-.942.06-1.353.131-.411.071-.75.153-1.008.245l-.257-1.749c.268-.093.668-.185 1.183-.278a8.89 8.89 0 0 1 1.66-.142l-.001-.001zm.186 7.736c.657 0 1.145-.038 1.484-.104v-2.168a5.097 5.097 0 0 0-1.978-.104c-.241.033-.46.098-.652.191a1.167 1.167 0 0 0-.466.392c-.121.169-.175.267-.175.523 0 .501.175.79.493.981.318.191.75.289 1.293.289h.001zm8.682 1.738c-3.511.016-3.511-2.822-3.511-3.274L89.461.926l2.142-.338v10.003c0 .256 0 1.88 1.375 1.885v1.792h-.001z' fill='%23182359'/><path d='M5.027 11.025c0 .698-.252 1.246-.757 1.644-.505.397-1.201.596-2.089.596-.888 0-1.615-.138-2.181-.414v-1.214c.358.168.739.301 1.141.397.403.097.778.145 1.125.145.508 0 .884-.097 1.125-.29a.945.945 0 0 0 .363-.779.978.978 0 0 0-.333-.747c-.222-.204-.68-.446-1.375-.725-.716-.29-1.221-.621-1.515-.994-.294-.372-.44-.82-.44-1.343 0-.655.233-1.171.698-1.547.466-.376 1.09-.564 1.875-.564.752 0 1.5.165 2.245.494l-.408 1.047c-.698-.294-1.321-.44-1.869-.44-.415 0-.73.09-.945.271a.89.89 0 0 0-.322.717c0 .204.043.379.129.524.086.145.227.282.424.411.197.129.551.299 1.063.51.577.24.999.464 1.268.671.269.208.466.442.591.704.125.261.188.569.188.924l-.001.002zm3.98 2.24c-.924 0-1.646-.269-2.167-.808-.521-.539-.782-1.281-.782-2.226 0-.97.242-1.733.725-2.288.483-.555 1.148-.833 1.993-.833.784 0 1.404.238 1.858.714.455.476.682 1.132.682 1.966v.682H7.357c.018.577.174 1.02.467 1.329.294.31.707.465 1.241.465.351 0 .678-.033.98-.099a5.1 5.1 0 0 0 .975-.33v1.026a3.865 3.865 0 0 1-.935.312 5.723 5.723 0 0 1-1.08.091l.002-.001zm-.231-5.199c-.401 0-.722.127-.964.381s-.386.625-.432 1.112h2.696c-.007-.491-.125-.862-.354-1.115-.229-.252-.544-.379-.945-.379l-.001.001zm7.692 5.092l-.252-.827h-.043c-.286.362-.575.608-.865.739-.29.131-.662.196-1.117.196-.584 0-1.039-.158-1.367-.473-.328-.315-.491-.761-.491-1.337 0-.612.227-1.074.682-1.386.455-.312 1.148-.482 2.079-.51l1.026-.032v-.317c0-.38-.089-.663-.266-.851-.177-.188-.452-.282-.824-.282-.304 0-.596.045-.876.134a6.68 6.68 0 0 0-.806.317l-.408-.902a4.414 4.414 0 0 1 1.058-.384 4.856 4.856 0 0 1 1.085-.132c.756 0 1.326.165 1.711.494.385.329.577.847.577 1.552v4.002h-.902l-.001-.001zm-1.88-.859c.458 0 .826-.128 1.104-.384.278-.256.416-.615.416-1.077v-.516l-.763.032c-.594.021-1.027.121-1.297.298s-.406.448-.406.814c0 .265.079.47.236.615.158.145.394.218.709.218h.001zm7.557-5.189c.254 0 .464.018.628.054l-.124 1.176a2.383 2.383 0 0 0-.559-.064c-.505 0-.914.165-1.227.494-.313.329-.47.757-.47 1.284v3.105h-1.262V7.218h.988l.167 1.047h.064c.197-.354.454-.636.771-.843a1.83 1.83 0 0 1 1.023-.312h.001zm4.125 6.155c-.899 0-1.582-.262-2.049-.787-.467-.525-.701-1.277-.701-2.259 0-.999.244-1.767.733-2.304.489-.537 1.195-.806 2.119-.806.627 0 1.191.116 1.692.349l-.381 1.015c-.534-.208-.974-.312-1.321-.312-1.028 0-1.542.682-1.542 2.046 0 .666.128 1.166.384 1.501.256.335.631.502 1.125.502a3.23 3.23 0 0 0 1.595-.419v1.101a2.53 2.53 0 0 1-.722.285 4.356 4.356 0 0 1-.932.086v.002zm8.277-.107h-1.268V9.506c0-.458-.092-.8-.277-1.026-.184-.226-.477-.338-.878-.338-.53 0-.919.158-1.168.475-.249.317-.373.848-.373 1.593v2.949h-1.262V4.801h1.262v2.122c0 .34-.021.704-.064 1.09h.081a1.76 1.76 0 0 1 .717-.666c.306-.158.663-.236 1.072-.236 1.439 0 2.159.725 2.159 2.175v3.873l-.001-.001zm7.649-6.048c.741 0 1.319.269 1.732.806.414.537.62 1.291.62 2.261 0 .974-.209 1.732-.628 2.275-.419.542-1.001.814-1.746.814-.752 0-1.336-.27-1.751-.811h-.086l-.231.704h-.945V4.801h1.262v1.987l-.021.655-.032.553h.054c.401-.591.992-.886 1.772-.886zm-.328 1.031c-.508 0-.875.149-1.098.448-.224.299-.339.799-.346 1.501v.086c0 .723.115 1.247.344 1.571.229.324.603.486 1.123.486.448 0 .787-.177 1.018-.532.231-.354.346-.867.346-1.536 0-1.35-.462-2.025-1.386-2.025l-.001.001zm3.244-.924h1.375l1.209 3.368c.183.48.304.931.365 1.354h.043c.032-.197.091-.436.177-.717.086-.281.541-1.616 1.364-4.004h1.364l-2.541 6.73c-.462 1.235-1.232 1.853-2.31 1.853-.279 0-.551-.03-.816-.091v-.999c.19.043.406.064.65.064.609 0 1.037-.353 1.284-1.058l.22-.559-2.385-5.941h.001z' fill='%231D3657'/></g></svg>");background-repeat:no-repeat;background-position:50%;background-size:100%;overflow:hidden;text-indent:-9000px;padding:0!important;width:100%;height:100%;display:block}.overflow-x-scroll{-webkit-overflow-scrolling:touch}.row{transition:-webkit-transform .45s;transition:transform .45s;transition:transform .45s,-webkit-transform .45s;font-size:0}.tile{transition:all .45s}.details{background:linear-gradient(0deg,rgba(0,0,0,.9),transparent);transition:opacity .45s}.tile:hover .details{opacity:1}.row:hover .tile{opacity:.3}.row:hover .tile:hover{opacity:1}.chroma .lntable pre{padding:0;margin:0;border:0}.chroma .lntable pre code{padding:0;margin:0}.pre,pre{overflow-x:auto;overflow-y:hidden;overflow:scroll}code{padding:.2em;margin:0;font-size:85%;background-color:rgba(27,31,35,.05);border-radius:3px}pre code{display:block;padding: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:1px solid #ccc}.highlight pre{background-color:inherit;color:inherit;padding:.5em;font-size:.875rem}.copy:after{content:"Copy"}.copied:after{content:"Copied"}@media screen and (min-width:60em){.full-width,pre.expand:hover{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:#fff}.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}.tab-content .copied,.tab-content .copy{display:none}.tab-content .tab-pane.active+.copied,.tab-content .tab-pane.active+.copy{display:block}.primary-color{color:#0594cb}.bg-primary-color,.hover-bg-primary-color:hover{background-color:#0594cb}.primary-color-dark{color:#0a1922}.bg-primary-color-dark,.hover-bg-primary-color-dark:hover{background-color:#0a1922}.primary-color-light{color:#f9f9f9}.bg-primary-color-light,.hover-bg-primary-color-light:hover{background-color:#f9f9f9}.accent-color{color:#ebb951}.bg-accent-color,.hover-bg-accent-color:hover{background-color:#ebb951}.accent-color-light,.hover-accent-color-light:hover{color:#ff4088}.bg-accent-color-light,.hover-bg-accent-color-light:hover{background-color:#ff4088}.accent-color-dark{color:#33ba91}.bg-accent-color-dark,.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 ol,.prose ul{margin-bottom:2em}.prose ol li,.prose ul li{margin-bottom:.5em}.prose li:hover{background-color:#eee}.prose ::-moz-selection{background:#0594cb;color:#fff}.prose ::selection{background:#0594cb;color:#fff}body{line-height:1.45}p{margin-bottom:1.3em}h1,h2,h3,h4{margin:1.414em 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}.font_small,small{font-size:.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:#fff;font-weight:400;text-align:left;padding:.375em .5em}.prose table tc,.prose table td{padding:.75em .5em;text-align:left;border-right:1px solid #eee}.prose table tr:nth-child(2n){background-color:#eee}dl dt{font-weight:700;font-size:1.125rem}dd{margin:.5em 0 2em;padding:0}.f2-fluid{font-size:2.25rem}@media screen and (min-width:60em){.f2-fluid{font-size:1.25rem;font-size:calc(.875rem + .5 * ((100vw - 20rem) / 60))}}.code,.highlight pre,code,pre code{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}.courier{font-family:Courier Next,courier,monospace}.helvetica{font-family:helvetica neue,helvetica,sans-serif}.avenir{font-family:avenir next,avenir,sans-serif}.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{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:#fff;color:#333;border:1px solid #ddd;border-radius:3px;text-decoration:none}.pagination li.disabled{display:none}.pagination li.active a:active,.pagination li.active a:link,.pagination li.active a:visited{background-color:#ddd}#TableOfContents ul li ul li ul li{display:none}#TableOfContents ul li{color:#000;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:#fff}.no-js .needs-js{opacity:0}.js .needs-js{opacity:1;transition:opacity .15s ease-in}.facebook,.instagram,.twitter,.youtube{fill:#bababa}.facebook:hover{fill:#3b5998}.twitter{fill:#55acee}.twitter:hover{fill:#bababa}.instagram:hover{fill:#e95950}.youtube:hover{fill:#b00}@media (min-width:75em){[data-scrolldir=down] .sticky,[data-scrolldir=up] .sticky{position:fixed;top:100px;right:0}}.fill-current{fill:currentColor}.chroma{background-color:#fff}.chroma .err{color:#a61717;background-color:#e3d2d2}.chroma .lntd{vertical-align:top;padding:0;margin:0;border:0}.chroma .lntable{border-spacing:0;padding:0;margin:0;border:0;width:auto;overflow:auto;display:block}.chroma .hl{display:block;width:100%;background-color:#ffc}.chroma .ln,.chroma .lnt{margin-right:.4em;padding:0 .4em}.chroma .k,.chroma .kc,.chroma .kd,.chroma .kn,.chroma .kp,.chroma .kr,.chroma .kt{font-weight:700}.chroma .kt{color:#458}.chroma .na{color:teal}.chroma .nb{color:#999}.chroma .nc{color:#458;font-weight:700}.chroma .no{color:teal}.chroma .ni{color:purple}.chroma .ne,.chroma .nf{color:#900;font-weight:700}.chroma .nn{color:#555}.chroma .nt{color:navy}.chroma .nv{color:teal}.chroma .dl,.chroma .s,.chroma .s2,.chroma .sa,.chroma .sb,.chroma .sc,.chroma .sd,.chroma .se,.chroma .sh,.chroma .si,.chroma .sx{color:#b84}.chroma .sr{color:olive}.chroma .s1,.chroma .ss{color:#b84}.chroma .il,.chroma .m,.chroma .mb,.chroma .mf,.chroma .mh,.chroma .mi,.chroma .mo{color:#099}.chroma .o,.chroma .ow{font-weight:700}.chroma .c,.chroma .c1,.chroma .ch,.chroma .cm{color:#998;font-style:italic}.chroma .cs{font-style:italic}.chroma .cp,.chroma .cpf,.chroma .cs{color:#999;font-weight:700}.chroma .gd{color:#000;background-color:#fdd}.chroma .ge{font-style:italic}.chroma .gr{color:#a00}.chroma .gh{color:#999}.chroma .gi{color:#000;background-color:#dfd}.chroma .go{color:#888}.chroma .gp{color:#555}.chroma .gs{font-weight:700}.chroma .gu{color:#aaa}.chroma .gt{color:#a00}.chroma .w{color:#bbb}.nested-blockquote blockquote{border-left:4px solid #0594cb;padding-left:1em}.mw-90{max-width:90%}
\ No newline at end of file diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/static/favicon-16x16.png b/docs/_vendor/github.com/gohugoio/gohugoioTheme/static/favicon-16x16.png Binary files differnew file mode 100644 index 000000000..c62ce6fb2 --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/static/favicon-16x16.png diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/static/favicon-32x32.png b/docs/_vendor/github.com/gohugoio/gohugoioTheme/static/favicon-32x32.png Binary files differnew file mode 100644 index 000000000..57a018e35 --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/static/favicon-32x32.png diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/static/favicon.ico b/docs/_vendor/github.com/gohugoio/gohugoioTheme/static/favicon.ico Binary files differnew file mode 100644 index 000000000..dc007a99e --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/static/favicon.ico diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/static/fonts/muli-latin-200.woff b/docs/_vendor/github.com/gohugoio/gohugoioTheme/static/fonts/muli-latin-200.woff Binary files differnew file mode 100644 index 000000000..97602c761 --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/static/fonts/muli-latin-200.woff diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/static/fonts/muli-latin-200.woff2 b/docs/_vendor/github.com/gohugoio/gohugoioTheme/static/fonts/muli-latin-200.woff2 Binary files differnew file mode 100644 index 000000000..858a4e9af --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/static/fonts/muli-latin-200.woff2 diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/static/fonts/muli-latin-200italic.woff b/docs/_vendor/github.com/gohugoio/gohugoioTheme/static/fonts/muli-latin-200italic.woff Binary files differnew file mode 100644 index 000000000..472e5740a --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/static/fonts/muli-latin-200italic.woff diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/static/fonts/muli-latin-200italic.woff2 b/docs/_vendor/github.com/gohugoio/gohugoioTheme/static/fonts/muli-latin-200italic.woff2 Binary files differnew file mode 100644 index 000000000..449772391 --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/static/fonts/muli-latin-200italic.woff2 diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/static/fonts/muli-latin-300.woff b/docs/_vendor/github.com/gohugoio/gohugoioTheme/static/fonts/muli-latin-300.woff Binary files differnew file mode 100644 index 000000000..4579c75d7 --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/static/fonts/muli-latin-300.woff diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/static/fonts/muli-latin-300.woff2 b/docs/_vendor/github.com/gohugoio/gohugoioTheme/static/fonts/muli-latin-300.woff2 Binary files differnew file mode 100644 index 000000000..6c211a7ed --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/static/fonts/muli-latin-300.woff2 diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/static/fonts/muli-latin-300italic.woff b/docs/_vendor/github.com/gohugoio/gohugoioTheme/static/fonts/muli-latin-300italic.woff Binary files differnew file mode 100644 index 000000000..c739550ce --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/static/fonts/muli-latin-300italic.woff diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/static/fonts/muli-latin-300italic.woff2 b/docs/_vendor/github.com/gohugoio/gohugoioTheme/static/fonts/muli-latin-300italic.woff2 Binary files differnew file mode 100644 index 000000000..db9e434c5 --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/static/fonts/muli-latin-300italic.woff2 diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/static/fonts/muli-latin-400.woff b/docs/_vendor/github.com/gohugoio/gohugoioTheme/static/fonts/muli-latin-400.woff Binary files differnew file mode 100644 index 000000000..342b3aad2 --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/static/fonts/muli-latin-400.woff diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/static/fonts/muli-latin-400.woff2 b/docs/_vendor/github.com/gohugoio/gohugoioTheme/static/fonts/muli-latin-400.woff2 Binary files differnew file mode 100644 index 000000000..f3e9d31af --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/static/fonts/muli-latin-400.woff2 diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/static/fonts/muli-latin-400italic.woff b/docs/_vendor/github.com/gohugoio/gohugoioTheme/static/fonts/muli-latin-400italic.woff Binary files differnew file mode 100644 index 000000000..89bdcbd90 --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/static/fonts/muli-latin-400italic.woff diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/static/fonts/muli-latin-400italic.woff2 b/docs/_vendor/github.com/gohugoio/gohugoioTheme/static/fonts/muli-latin-400italic.woff2 Binary files differnew file mode 100644 index 000000000..b78e3bd39 --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/static/fonts/muli-latin-400italic.woff2 diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/static/fonts/muli-latin-600.woff b/docs/_vendor/github.com/gohugoio/gohugoioTheme/static/fonts/muli-latin-600.woff Binary files differnew file mode 100644 index 000000000..e31fd2c52 --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/static/fonts/muli-latin-600.woff diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/static/fonts/muli-latin-600.woff2 b/docs/_vendor/github.com/gohugoio/gohugoioTheme/static/fonts/muli-latin-600.woff2 Binary files differnew file mode 100644 index 000000000..6f1f8026b --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/static/fonts/muli-latin-600.woff2 diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/static/fonts/muli-latin-600italic.woff b/docs/_vendor/github.com/gohugoio/gohugoioTheme/static/fonts/muli-latin-600italic.woff Binary files differnew file mode 100644 index 000000000..e2b4a0154 --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/static/fonts/muli-latin-600italic.woff diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/static/fonts/muli-latin-600italic.woff2 b/docs/_vendor/github.com/gohugoio/gohugoioTheme/static/fonts/muli-latin-600italic.woff2 Binary files differnew file mode 100644 index 000000000..fafd8076a --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/static/fonts/muli-latin-600italic.woff2 diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/static/fonts/muli-latin-700.woff b/docs/_vendor/github.com/gohugoio/gohugoioTheme/static/fonts/muli-latin-700.woff Binary files differnew file mode 100644 index 000000000..d2152c4ea --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/static/fonts/muli-latin-700.woff diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/static/fonts/muli-latin-700.woff2 b/docs/_vendor/github.com/gohugoio/gohugoioTheme/static/fonts/muli-latin-700.woff2 Binary files differnew file mode 100644 index 000000000..1cedfcd14 --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/static/fonts/muli-latin-700.woff2 diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/static/fonts/muli-latin-700italic.woff b/docs/_vendor/github.com/gohugoio/gohugoioTheme/static/fonts/muli-latin-700italic.woff Binary files differnew file mode 100644 index 000000000..016fa059c --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/static/fonts/muli-latin-700italic.woff diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/static/fonts/muli-latin-700italic.woff2 b/docs/_vendor/github.com/gohugoio/gohugoioTheme/static/fonts/muli-latin-700italic.woff2 Binary files differnew file mode 100644 index 000000000..fa9697232 --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/static/fonts/muli-latin-700italic.woff2 diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/static/fonts/muli-latin-800.woff b/docs/_vendor/github.com/gohugoio/gohugoioTheme/static/fonts/muli-latin-800.woff Binary files differnew file mode 100644 index 000000000..9fd9939dc --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/static/fonts/muli-latin-800.woff diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/static/fonts/muli-latin-800.woff2 b/docs/_vendor/github.com/gohugoio/gohugoioTheme/static/fonts/muli-latin-800.woff2 Binary files differnew file mode 100644 index 000000000..4cdf7bc78 --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/static/fonts/muli-latin-800.woff2 diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/static/fonts/muli-latin-800italic.woff b/docs/_vendor/github.com/gohugoio/gohugoioTheme/static/fonts/muli-latin-800italic.woff Binary files differnew file mode 100644 index 000000000..2d0c0d2ff --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/static/fonts/muli-latin-800italic.woff diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/static/fonts/muli-latin-800italic.woff2 b/docs/_vendor/github.com/gohugoio/gohugoioTheme/static/fonts/muli-latin-800italic.woff2 Binary files differnew file mode 100644 index 000000000..ee51dd38a --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/static/fonts/muli-latin-800italic.woff2 diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/static/fonts/muli-latin-900.woff b/docs/_vendor/github.com/gohugoio/gohugoioTheme/static/fonts/muli-latin-900.woff Binary files differnew file mode 100644 index 000000000..1b343ad2c --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/static/fonts/muli-latin-900.woff diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/static/fonts/muli-latin-900.woff2 b/docs/_vendor/github.com/gohugoio/gohugoioTheme/static/fonts/muli-latin-900.woff2 Binary files differnew file mode 100644 index 000000000..1252216a0 --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/static/fonts/muli-latin-900.woff2 diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/static/fonts/muli-latin-900italic.woff b/docs/_vendor/github.com/gohugoio/gohugoioTheme/static/fonts/muli-latin-900italic.woff Binary files differnew file mode 100644 index 000000000..0aad09765 --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/static/fonts/muli-latin-900italic.woff diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/static/fonts/muli-latin-900italic.woff2 b/docs/_vendor/github.com/gohugoio/gohugoioTheme/static/fonts/muli-latin-900italic.woff2 Binary files differnew file mode 100644 index 000000000..fd4e66bfb --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/static/fonts/muli-latin-900italic.woff2 diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/static/images/GitHub-Mark-64px.png b/docs/_vendor/github.com/gohugoio/gohugoioTheme/static/images/GitHub-Mark-64px.png Binary files differnew file mode 100644 index 000000000..9965f8d33 --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/static/images/GitHub-Mark-64px.png diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/static/images/gohugoio-card.png b/docs/_vendor/github.com/gohugoio/gohugoioTheme/static/images/gohugoio-card.png Binary files differnew file mode 100644 index 000000000..93dedacfa --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/static/images/gohugoio-card.png diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/static/images/gopher-hero.svg b/docs/_vendor/github.com/gohugoio/gohugoioTheme/static/images/gopher-hero.svg new file mode 100644 index 000000000..36d9f1c41 --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/static/images/gopher-hero.svg @@ -0,0 +1,58 @@ +<svg id="gopher" width="100%" height="100%" viewBox="0 0 272 282" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:1.5;"> + <g transform="matrix(1.09329,0,0,1.09329,-135.183,-11.6982)"> + <path class="gopher-cape animated" d="M167.376,132.778C165.4,163.47 157.387,172.184 150.142,191.552C140.361,210.573 133.102,214.357 127.626,223.012C131.508,226.814 144.79,238.814 159.006,243.911C199.917,251.86 250.261,251.499 284.105,243.911C312.297,238.453 330.566,241.986 350.858,258.146C352.025,218.523 351.604,171.276 333.752,132.778" style="fill:rgb(201,23,126);stroke:rgb(201,23,126);stroke-width:4px;"/> + </g> + <g transform="matrix(1.09329,0,0,1.09329,20.0647,-11.6982)"> + <path d="M207.3,44.6C200.6,30.9 184.4,43 180.3,38.7C159.3,17.1 133.9,11.7 114,10.7L103,10.7C83,11.2 57.6,17 36.7,38.7C32.6,43 16.3,30.9 9.7,44.6C2,60.6 25.4,62.2 24.2,69.3C21.9,82.1 23.4,101.1 25.2,119.8C28,151.5 4.3,227.4 53.6,257.9C62.9,263.7 88,266.9 109.8,267.4L110,267.4C131.8,266.9 153.9,263.7 163.2,257.9C212.6,227.4 188.9,151.5 191.8,119.8C193.5,101.1 195,82.1 192.8,69.3C191.6,62.2 215,60.5 207.3,44.6Z" style="fill:rgb(140,197,231);fill-rule:nonzero;"/> + </g> + <g transform="matrix(1.09329,0,0,1.09329,20.0647,-11.6982)"> + <path d="M143.2,54.3C109.8,58.2 114.3,93 127.2,104.3C151.2,125.3 176.2,104.3 173.4,83.1C170.9,62.7 153.6,53.1 143.2,54.3Z" style="fill:rgb(224,222,220);fill-rule:nonzero;"/> + </g> + <g transform="matrix(1.09329,0,0,1.09329,20.0647,-11.6982)"> + <path class="eyes" d="M145.5,72.9C151.792,72.9 156.9,78.008 156.9,84.3C156.9,90.592 151.792,95.7 145.5,95.7C139.208,95.7 134.1,90.592 134.1,84.3C134.1,78.008 139.208,72.9 145.5,72.9ZM71.356,72.746C77.648,72.746 82.756,77.854 82.756,84.146C82.756,90.438 77.648,95.546 71.356,95.546C65.064,95.546 59.956,90.438 59.956,84.146C59.956,77.854 65.064,72.746 71.356,72.746Z" style="fill:rgb(17,18,18);"/> + </g> + <g transform="matrix(1.09329,0,0,1.09329,20.0647,-11.6982)"> + <path d="M142.5,75.8C144.487,75.8 146.1,77.413 146.1,79.4C146.1,81.387 144.487,83 142.5,83C140.513,83 138.9,81.387 138.9,79.4C138.9,77.413 140.513,75.8 142.5,75.8ZM74.274,75.192C76.261,75.192 77.874,76.805 77.874,78.792C77.874,80.779 76.261,82.392 74.274,82.392C72.287,82.392 70.674,80.779 70.674,78.792C70.674,76.805 72.287,75.192 74.274,75.192Z" style="fill:white;"/> + </g> + <g transform="matrix(1.09329,0,0,1.09329,20.0647,-11.6982)"> + <path d="M108.5,107C92.5,109.4 86.8,114 88,121.2C90,133 127.7,131.7 128.9,121.8C129.9,113.3 114.8,106.1 108.5,107Z" style="fill:rgb(184,147,127);fill-rule:nonzero;"/> + </g> + <g transform="matrix(1.09329,0,0,1.09329,20.0647,-11.6982)"> + <path d="M98.2,111.8C95.5,121.6 119.9,120.1 119.3,113.8C119,110.1 115.7,105.4 107,105.6C103.6,105.7 99.4,107.2 98.2,111.8Z" style="fill-rule:nonzero;"/> + </g> + <g transform="matrix(1.09329,0,0,1.09329,20.0647,-11.6982)"> + <path d="M99,127.7C98.1,128.1 96.6,137.9 101.2,138.4C104.3,138.7 112.8,139.7 114.8,138.4C118.7,135.9 118.3,129.9 116.1,128.4C112.4,126 100,127.2 99,127.7ZM73.6,54.3C107,58.2 102.5,93 89.6,104.3C65.6,125.3 40.6,104.3 43.4,83.1C46,62.7 63.3,53.1 73.6,54.3Z" style="fill:rgb(224,222,220);fill-rule:nonzero;"/> + </g> + <g transform="matrix(1.09329,0,0,1.09329,20.0647,-11.6982)"> + <circle class="eyes" cx="71.4" cy="84.3" r="11.4" style="fill:rgb(17,18,18);"/> + </g> + <g transform="matrix(1.09329,0,0,1.09329,20.0647,-11.6982)"> + <circle cx="74.4" cy="79.4" r="3.6" style="fill:white;"/> + </g> + <g transform="matrix(1.09329,0,0,1.09329,20.0647,-11.6982)"> + <path d="M193.6,186.7C204.6,186.8 199.2,163.2 192.4,167.9C189.1,170.2 188.5,175.5 188.5,180C188.5,182.5 190.5,186.6 193.6,186.7ZM23.3,186.7C12.3,186.8 17.7,163.2 24.5,167.9C27.8,170.2 28.4,175.5 28.4,180C28.4,182.5 26.4,186.6 23.3,186.7ZM172.7,259.2C166.7,250.3 161.3,257.2 152.6,261.6C148.5,263.7 159.4,271.2 171.6,265.6C174.8,264.1 174.7,262.1 172.7,259.2ZM44.2,260.2C50.2,251.3 55.6,258.2 64.3,262.6C68.4,264.7 57.5,272.2 45.3,266.6C42.1,265.1 42.2,263.1 44.2,260.2Z" style="fill:rgb(184,147,127);fill-rule:nonzero;"/> + </g> + <g transform="matrix(1.09329,0,0,1.09329,20.0647,-11.6982)"> + <path d="M188.6,47C188,49.1 190.7,48.8 191.7,55.3C192.1,57.7 200.7,51.8 197.2,47.5C194.3,43.9 189.1,44.9 188.6,47ZM28.3,47C28.9,49.1 26.2,48.8 25.2,55.3C24.8,57.7 16.2,51.8 19.7,47.5C22.5,43.9 27.7,44.9 28.3,47Z" style="fill:rgb(0,131,192);fill-rule:nonzero;"/> + </g> + <g transform="matrix(0.219817,0,0,0.219817,92.037,155.985)"> + <g transform="matrix(2.08706,0,0,2.08706,-39.3863,-48.2414)"> + <path class="gopher-badge animated" d="M119.631,36.154L203.822,85.066L203.822,181.395L119.631,229.184L35.578,181.395L35.578,85.066L119.631,36.154Z" style="fill:rgb(255,64,136);"/> + <path class="gopher-badge animated" d="M207.664,81.239L209.061,83.666L209.061,182.809L207.638,185.253L121.013,234.423L118.245,234.422L31.761,185.251L30.34,182.808L30.34,83.667L31.735,81.242L118.217,30.916L121.041,30.915L207.664,81.239ZM40.817,88.078L40.817,178.348L119.633,223.159L198.584,178.345L198.584,88.081L119.633,42.214L40.817,88.078Z" style="fill:rgb(201,23,126);"/> + </g> + <g transform="matrix(1.95678,0,0,2.21729,-55.1262,110.024)"> + <path class="gopher-badge animated" d="M179.238,106.552L154.758,106.552L154.758,62.2L112.134,62.2L112.134,106.552L87.654,106.552L87.654,1.648L112.134,1.648L112.134,45.496L154.758,45.496L154.758,1.648L179.238,1.648L179.238,106.552Z" style="fill:white;fill-rule:nonzero;"/> + </g> + </g> + <g transform="matrix(1.09329,0,0,1.09329,-135.318,-8.1299)"> + <path class="gopher-cape animated" d="M167.5,129.514C184.792,131.141 216.708,134.608 250.124,148.407C283.576,136.181 294.915,129.585 333.876,129.514" style="fill:none;stroke:rgb(201,23,126);stroke-width:4px;"/> + </g> + <g transform="matrix(1,0,0,1,-1.47026,0)"> + <g transform="matrix(1.09203,0,0,1,-11.2404,3.14785)"> + <path class="gopher-cape animated" d="M103.229,44.41C127.646,44.41 141.964,60.067 145.637,76.405C149.492,93.554 120.688,108.4 96.272,108.4C71.856,108.4 58.627,77.601 58.627,59.942C58.627,42.284 78.813,44.41 103.229,44.41ZM103.229,59.942C117.928,59.942 128.366,65.775 128.366,76.405C128.366,87.035 117.928,95.666 103.229,95.666C88.531,95.666 75.079,82.622 75.079,71.992C75.079,61.361 88.531,59.942 103.229,59.942Z" style="fill:rgb(201,23,126);"/> + </g> + <g transform="matrix(1.05263,0,0,1,75.8327,3.14785)"> + <path class="gopher-cape animated" d="M101.398,44.41C125.814,44.41 141.107,42.439 141.107,60.097C141.107,77.755 125.814,108.4 101.398,108.4C76.982,108.4 57.159,94.063 57.159,76.405C57.159,58.747 76.982,44.41 101.398,44.41ZM98.548,60.097C113.14,60.097 125.888,60.912 125.888,71.466C125.888,82.019 113.14,95.527 98.548,95.527C83.955,95.527 72.108,86.959 72.108,76.405C72.108,65.851 83.955,60.097 98.548,60.097Z" style="fill:rgb(201,23,126);"/> + </g> + </g> +</svg> diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/static/images/gopher-side_color.svg b/docs/_vendor/github.com/gohugoio/gohugoioTheme/static/images/gopher-side_color.svg new file mode 100644 index 000000000..85f949783 --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/static/images/gopher-side_color.svg @@ -0,0 +1,31 @@ +<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 18.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="レイヤー_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"
+ y="0px" viewBox="0 0 397.8 535.6" enable-background="new 0 0 397.8 535.6" xml:space="preserve">
+<g>
+ <path fill="#E0DEDC" d="M68.5,64c0,0-45.3-8-56.4,40.2c-11.7,50.6,27,46.7,27,46.7L68.5,64z"/>
+ <g>
+ <path fill="#040000" stroke="#040000" stroke-width="1.3483" stroke-miterlimit="10" d="M23.9,86.2c-8.5-0.3-15.5,25.8-13.1,35.2
+ c0.9,3.5,10,6.3,14-3.7C27.7,110.4,34.5,86.5,23.9,86.2z"/>
+ <path fill="#FFFFFF" d="M17.6,94c-1.9-0.6-4,4.5-4.7,6.3c-1.8,5.3,2.1,5.1,4.4,2C18.5,100.7,19.5,94.7,17.6,94z"/>
+ </g>
+ <path fill="#B8937F" d="M46.3,487.8c5.2,7.3,41.6,6.4,46.1-1.3c4.2-7.1-21.4-14.9-30.7-16.1C47.6,468.6,42.6,482.5,46.3,487.8z"/>
+ <path fill="#B8937F" d="M351,446c5.2,7.3,29.4,3.7,34-4c4.2-7.1-9.3-12.2-18.6-13.4C352.3,426.8,347.3,440.7,351,446z"/>
+ <path fill="#8CC5E7" d="M189.6,13.4c0,0-182.1-8.9-161,217.6c6.3,68-43.8,182.8,29.2,239.8c0,0,102.1,61.7,238.9,41.5
+ c20-3,45.5-10,63.2-57.1c22.3-59.5,6.6-121.5-13.2-165.5c-22.3-49.7-21.2-105.8-19.6-115.3C354.3,14.2,189.6,13.4,189.6,13.4z"/>
+ <path fill="#8CC5E7" d="M282.3,38.8c19.2-5,32.6-10.5,43.4-5c30.5,15.7-4.9,45.4-12.4,51C302.3,93.2,268.4,42.4,282.3,38.8z"/>
+ <path fill="#3C89BF" d="M306,40.5c-18.8,4.2-19.6,13.7-14.8,16.4c2.8,1.6,0.8-8.1,13.6-3.8c5.2,1.7-2.5,14.3,12.1,0.2
+ C324.7,45.6,310.1,39.6,306,40.5z"/>
+ <path fill="#E0DEDC" d="M137.9,29.2c-22.9,1.7-76.1,28.5-50,94.2c9.1,23,104.6,10.3,105.8-54C194.1,42.6,158.1,27.7,137.9,29.2z"/>
+ <path fill="#040000" stroke="#040000" stroke-width="1.3483" stroke-miterlimit="10" d="M109.9,51.8C88.5,53.7,83.3,84,91.3,91.1
+ c4.5,4,20.1,8.6,28.5-19C122.5,63.3,117.8,51,109.9,51.8z"/>
+ <path fill="#FFFFFF" d="M101.7,57.4c-3.1-0.9-8.8,7-7.1,10.3c0.6,1.2,3.2,2.9,5.3,1.3C102.2,67.2,107.8,59.1,101.7,57.4z"/>
+ <path fill="#B8937F" d="M74.6,130.1C34.9,122.3,30,165,43.9,172.3c10.1,5.4,38.8-3.5,43.6-13.4C92.2,148.9,95,134.1,74.6,130.1z"/>
+ <path fill="#040000" d="M48,126.4c-12.5,4.3-11.8,25.4-5.1,26c7.6,0.7,21-14.7,24.2-20.9C69.5,126.9,53,124.7,48,126.4z"/>
+ <path fill="#E0DEDC" d="M52.5,169.9c-3.2,1.4-2.9,18.8,3.3,21.5c19.6,8.3,20.9-20.4,17.1-24.9C70,162.9,54.7,168.9,52.5,169.9z"/>
+ <path fill="#B8937F" d="M272,269.2c-11.2,0.5-19.7,23.3-16.9,34.3c1.5,5.9,12.9,5,11.3,9.6c-2.7,7.6,17.4,12.9,21.2,4.7
+ C306.9,277,282.3,268.8,272,269.2z"/>
+ <path fill="#B8937F" d="M251.8,497.4c-39.7-4.3-51.7,14.7-44.4,21.8c7.7,7.5,38.1,5.3,54.7,3.9
+ C268.7,522.6,261.8,498.5,251.8,497.4z"/>
+</g>
+</svg>
diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/static/images/home-page-templating-example.png b/docs/_vendor/github.com/gohugoio/gohugoioTheme/static/images/home-page-templating-example.png Binary files differnew file mode 100644 index 000000000..771da8d88 --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/static/images/home-page-templating-example.png diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/static/images/homepage-screenshot-hugo-themes.jpg b/docs/_vendor/github.com/gohugoio/gohugoioTheme/static/images/homepage-screenshot-hugo-themes.jpg Binary files differnew file mode 100644 index 000000000..9ac768bb0 --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/static/images/homepage-screenshot-hugo-themes.jpg diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/static/images/homepage-screenshot-hugo-themes_not-optimized-according-to-google.jpg b/docs/_vendor/github.com/gohugoio/gohugoioTheme/static/images/homepage-screenshot-hugo-themes_not-optimized-according-to-google.jpg Binary files differnew file mode 100644 index 000000000..64424b24e --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/static/images/homepage-screenshot-hugo-themes_not-optimized-according-to-google.jpg diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/static/images/hugo-logo-wide.svg b/docs/_vendor/github.com/gohugoio/gohugoioTheme/static/images/hugo-logo-wide.svg new file mode 100644 index 000000000..1f6a79ea6 --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/static/images/hugo-logo-wide.svg @@ -0,0 +1,7 @@ +<svg xmlns="http://www.w3.org/2000/svg" fill-rule="evenodd" stroke-width="27" aria-label="Logo" viewBox="0 0 1493 391"> + <path fill="#ebb951" stroke="#fcd804" d="M1345.211 24.704l112.262 64.305a43 43 0 0 1 21.627 37.312v142.237a40 40 0 0 1-20.702 35.037l-120.886 66.584a42 42 0 0 1-41.216-.389l-106.242-61.155a57 57 0 0 1-28.564-49.4V138.71a64 64 0 0 1 31.172-54.939l98.01-58.564a54 54 0 0 1 54.54-.503z"/> + <path fill="#33ba91" stroke="#00a88a" d="M958.07 22.82l117.31 66.78a41 41 0 0 1 20.72 35.64v139.5a45 45 0 0 1-23.1 39.32L955.68 369.4a44 44 0 0 1-43.54-.41l-105.82-61.6a56 56 0 0 1-27.83-48.4V140.07a68 68 0 0 1 33.23-58.44l98.06-58.35a48 48 0 0 1 48.3-.46z"/> + <path fill="#0594cb" stroke="#0083c0" d="M575.26 20.97l117.23 68.9a40 40 0 0 1 19.73 34.27l.73 138.67a48 48 0 0 1-24.64 42.2l-115.13 64.11a45 45 0 0 1-44.53-.42l-105.83-61.6a55 55 0 0 1-27.33-47.53V136.52a63 63 0 0 1 29.87-53.59l99.3-61.4a49 49 0 0 1 50.6-.56z"/> + <path fill="#ff4088" stroke="#c9177e" d="M195.81 24.13l114.41 66.54a44 44 0 0 1 21.88 38.04v136.43a48 48 0 0 1-24.45 41.82L194.1 370.9a49 49 0 0 1-48.48-.23L41.05 310.48a53 53 0 0 1-26.56-45.93V135.08a55 55 0 0 1 26.1-46.8l102.8-63.46a51 51 0 0 1 52.42-.69z"/> + <path fill="#fff" d="M1320.72 89.15c58.79 0 106.52 47.73 106.52 106.51 0 58.8-47.73 106.52-106.52 106.52-58.78 0-106.52-47.73-106.52-106.52 0-58.78 47.74-106.51 106.52-106.51zm0 39.57c36.95 0 66.94 30 66.94 66.94a66.97 66.97 0 0 1-66.94 66.94c-36.95 0-66.94-29.99-66.94-66.94a66.97 66.97 0 0 1 66.93-66.94h.01zm-283.8 65.31c0 47.18-8.94 60.93-26.81 80.58-17.87 19.65-41.57 27.57-71.1 27.57-27 0-48.75-9.58-67.61-26.23-20.88-18.45-36.08-47.04-36.08-78.95 0-31.37 11.72-58.48 32.49-78.67 18.22-17.67 45.34-29.18 73.3-29.18 33.77 0 68.83 15.98 90.44 47.53l-31.73 26.82c-13.45-25.03-32.94-33.46-60.82-34.26-30.83-.88-64.77 28.53-62.25 67.75 1.4 21.94 11.65 59.65 60.96 66.57 25.9 3.63 55.36-24.02 55.36-39.04H944.4v-37.5h92.5V194l.02.03zm-562.6-94.65h42.29v112.17c0 17.8.49 29.33 1.47 34.61 1.69 8.48 4.81 14.37 11.17 19.5 6.37 5.13 13.8 6.59 24.84 6.59 11.2 0 14.96-1.74 20.66-6.6 5.69-4.85 9.12-9.46 10.28-16.53 1.15-7.07 3.07-18.8 3.07-35.18V99.38h42.28v108.78c0 24.86-1.07 42.43-3.21 52.69-2.14 10.27-6.08 18.93-11.82 26-5.74 7.06-13.42 12.69-23.03 16.88-9.62 4.19-22.16 6.28-37.65 6.28-18.7 0-32.87-2.28-42.52-6.85-9.66-4.57-17.3-10.5-22.9-17.8-5.61-7.3-9.3-14.95-11.08-22.96-2.58-11.86-3.88-29.38-3.88-52.55V99.38h.03zM93.91 299.92V92.7h43.35v75.48h71.92V92.7h43.48v207.22h-43.48v-90.61h-71.92v90.61z"/> +</svg> diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/static/images/icon-built-in-templates.svg b/docs/_vendor/github.com/gohugoio/gohugoioTheme/static/images/icon-built-in-templates.svg new file mode 100644 index 000000000..40cb249c6 --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/static/images/icon-built-in-templates.svg @@ -0,0 +1,14 @@ +<?xml version="1.0" encoding="UTF-8"?> +<svg fill="#777777" width="100pt" height="100pt" version="1.1" viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg"> + <g> + <path d="m87.5 0h-75c-1.25 0-2.082 0.83203-2.082 2.082v95.832c0 1.25 0.83203 2.082 2.082 2.082h75c1.25 0 2.082-0.83203 2.082-2.082v-95.832c0-1.25-0.83203-2.082-2.082-2.082zm-2.082 95.832h-70.836v-91.664h70.832z"/> + <path d="m22.5 29.375h55c1.25 0 2.082-0.83203 2.082-2.082v-15.836c0-1.25-0.83203-2.082-2.082-2.082h-55c-1.25 0-2.082 0.83203-2.082 2.082v15.832c0 1.2539 1.0391 2.0859 2.082 2.0859zm2.082-15.832h50.832v11.668l-50.832-0.003907z"/> + <path d="m77.5 35.832h-23.125c-1.25 0-2.082 0.83203-2.082 2.082v30.832c0 1.25 0.83203 2.082 2.082 2.082h23.125c1.25 0 2.082-0.83203 2.082-2.082v-30.828c0-1.25-1.0391-2.0859-2.082-2.0859zm-2.082 30.625h-18.957l-0.003907-26.457h18.957z"/> + <path d="m22.5 40h23.125c1.25 0 2.082-0.83203 2.082-2.082s-0.83203-2.082-2.082-2.082l-23.125-0.003907c-1.25 0-2.082 0.83203-2.082 2.082 0 1.043 1.0391 2.0859 2.082 2.0859z"/> + <path d="m22.5 50.625h23.125c1.25 0 2.082-0.83203 2.082-2.082s-0.83203-2.082-2.082-2.082l-23.125-0.003907c-1.25 0-2.082 0.83203-2.082 2.082 0 1.043 1.0391 2.0859 2.082 2.0859z"/> + <path d="m22.5 61.043h23.125c1.25 0 2.082-0.83203 2.082-2.082s-0.83203-2.082-2.082-2.082l-23.125-0.003906c-1.25 0-2.082 0.83203-2.082 2.082s1.0391 2.0859 2.082 2.0859z"/> + <path d="m22.5 71.668h23.125c1.25 0 2.082-0.83203 2.082-2.082s-0.83203-2.082-2.082-2.082l-23.125-0.003906c-1.25 0-2.082 0.83203-2.082 2.082s1.0391 2.0859 2.082 2.0859z"/> + <path d="m22.5 81.25h55c1.25 0 2.082-0.83203 2.082-2.082s-0.83203-2.082-2.082-2.082l-55-0.003907c-1.25 0-2.082 0.83203-2.082 2.082 0 1.2539 1.0391 2.0859 2.082 2.0859z"/> + <path d="m22.5 90.207h55c1.25 0 2.082-0.83203 2.082-2.082s-0.83203-2.082-2.082-2.082h-55c-1.25 0-2.082 0.83203-2.082 2.082s1.0391 2.082 2.082 2.082z"/> + </g> +</svg> diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/static/images/icon-content-management.svg b/docs/_vendor/github.com/gohugoio/gohugoioTheme/static/images/icon-content-management.svg new file mode 100644 index 000000000..e6df93b9d --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/static/images/icon-content-management.svg @@ -0,0 +1,11 @@ +<?xml version="1.0" encoding="UTF-8"?> +<svg fill="#777" width="100pt" height="100pt" version="1.1" viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg"> + <g> + <path d="m77.609 96.633h-55.238c-6.5195 0-11.824-5.3125-11.824-11.84v-69.602c0-6.5195 5.3047-11.824 11.824-11.824h55.238c6.5312 0 11.84 5.3047 11.84 11.824v69.602c0.003906 6.5273-5.3086 11.84-11.84 11.84zm-55.238-89.594c-4.4961 0-8.1523 3.6562-8.1523 8.1523v69.602c0 4.5039 3.6562 8.1719 8.1523 8.1719h55.238c4.5039 0 8.1719-3.6641 8.1719-8.1719v-69.602c0-4.4961-3.6641-8.1523-8.1719-8.1523z"/> + <path d="m28.172 21.121h43.652v1.4688h-43.652z"/> + <path d="m28.172 33.066h43.652v1.4688h-43.652z"/> + <path d="m28.172 45.086h43.652v1.4688h-43.652z"/> + <path d="m72.105 75.855c-1.6172-0.32422-3.0391-2.8906-3.0859-4.7578-0.015625-0.54297 0.085938-1.0117 0.29297-1.3359 1-1.6445 2.0273-4.125-0.64844-6.6953-1.1172-1.0703-2.3945-2.2773-4.2305-2.2773-1.0586 0-2.0703 0.39844-3.1133 1.2344-0.10156 0.085937-0.35156 0.17578-0.86719 0.30859l-0.21875 0.058594-0.03125-0.015625c-2.0273-0.16016-4.6836-2.0547-4.875-2.7891-0.32422-1.293-1.0859-4.2734-4.832-4.2734h-0.96875c-3.832 0-4.6094 3.2148-4.8594 4.2734-0.23438 0.82031-2.9531 2.6289-4.875 2.7891l-0.03125 0.015625-0.41016-0.10156c-0.30859-0.085937-0.57031-0.16016-0.69141-0.25-1.0273-0.85156-2.0391-1.25-3.0859-1.25-1.793 0-3.0391 1.1602-4.125 2.1875l-0.15234 0.14844c-2.6133 2.5391-1.5859 5.0234-0.57031 6.668 0.35156 0.55859 0.44141 1.8516-0.21875 3.3633-0.58594 1.4102-1.6289 2.4961-2.6133 2.7031-3.7148 0.79297-3.9062 3.5078-3.9805 4.5391l0.015626 2.1602c0.17578 2.3945 1.5117 3.8633 3.9648 4.332 0.96875 0.20703 1.9844 1.25 2.6133 2.6719 0.042969 0.085938 0.074219 0.16016 0.10156 0.23438h3.8203c-0.11719-0.52734-0.32422-1.0859-0.57422-1.6875-1.1172-2.5547-3.0859-4.3477-5.2422-4.8008-0.88281-0.17578-1-0.28125-1.043-0.88281v-1.8945c0.042969-0.77734 0.16016-0.88281 1.0703-1.0859 2.1719-0.45312 4.125-2.2617 5.2266-4.8438 1.0586-2.4805 1.043-4.9922-0.042969-6.7109-0.75-1.2344-0.69141-1.4531 0.085937-2.2031l0.13281-0.11719c0.82031-0.76562 1.2617-1.1328 1.543-1.1328 0.058593 0 0.29297 0.03125 0.71875 0.38281 0.73437 0.64844 1.6172 0.86719 2.2617 1.0273l0.058594 0.015625c0.058594 0.03125 0.11719 0.042969 0.17578 0.042969l0.074219 0.03125 0.33594 0.13281h0.32422c3.2031-0.042968 8.0039-2.7461 8.6953-5.5938 0.32422-1.3516 0.55859-1.5117 1.3047-1.5117h1.0273c0.69141 0 0.88281 0.14844 1.2344 1.5273 0.73438 2.8359 5.5078 5.5352 8.6641 5.5781h0.33594l0.29297-0.11719c0.042968-0.015625 0.10156-0.03125 0.17578-0.042969 0.058594-0.015625 0.11719-0.03125 0.17578-0.058594 0.66016-0.16016 1.5-0.38281 2.2188-0.98437 0.46875-0.39844 0.70312-0.42578 0.77734-0.42578 0.20703 0 0.55859 0.14844 1.7188 1.3203 0.70312 0.64844 0.77734 0.88281 0.042969 2.1016-0.57422 0.91016-0.86719 2.0703-0.83594 3.3477 0.085938 3.3789 2.4062 7.4883 6.0078 8.2383 0.89453 0.19141 1.0117 0.29297 1.0703 0.91016v1.9219c-0.015625 0.074219-0.015625 0.11719-0.015625 0.16016 0 0.042969-0.015625 0.10156-0.015625 0.16016-0.085937 0.39844-0.25 0.55859-1.0586 0.70313-2.1602 0.45312-4.1133 2.2617-5.1992 4.8438-0.25 0.55859-0.44141 1.1172-0.55859 1.6445h3.8203c0.03125-0.074219 0.058594-0.14844 0.085938-0.21875 0.61719-1.4258 1.6172-2.4805 2.5547-2.6875 2.8203-0.52734 3.6875-2.2461 3.9219-3.5977 0.058594-0.29297 0.085938-0.54297 0.10156-0.89453v-2.1445c-0.050781-0.89844-0.25781-3.6016-3.9727-4.3945z"/> + <path d="m62.367 80.469c-0.11719-1.3945-0.46875-2.7617-1.043-4.0234-2.0117-4.4492-6.4453-7.3594-11.32-7.4023-6.4766 0.042969-11.82 5.0078-12.395 11.543v1.7188c0.26562 2.8477 1.5 5.5352 3.4531 7.5625h2.2773c-2.4062-1.8672-3.9492-4.625-4.2148-7.6211v-1.5859c0.51562-5.7109 5.1836-10.047 10.883-10.102 4.2734 0.03125 8.1641 2.5859 9.9414 6.5039 0.48438 1.1016 0.80859 2.3047 0.91016 3.4648l0.015625 1.5859c-0.28125 3.0977-1.8203 5.9023-4.2305 7.7539h2.2617c1.9844-2.0547 3.2148-4.7734 3.4961-7.6641z"/> + </g> +</svg> diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/static/images/icon-fast.svg b/docs/_vendor/github.com/gohugoio/gohugoioTheme/static/images/icon-fast.svg new file mode 100644 index 000000000..0db21fce1 --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/static/images/icon-fast.svg @@ -0,0 +1,4 @@ +<?xml version="1.0" encoding="UTF-8"?> +<svg fill="#777" width="100pt" height="100pt" version="1.1" viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg"> + <path d="m88.34 31.191l-2.7812 2.8086c5.832 7.7695 8.6602 17.387 7.9648 27.078-0.69141 9.6914-4.8633 18.805-11.746 25.664-6.8789 6.8594-16.004 11.004-25.699 11.668-0.92188 0.058594-1.832 0.089844-2.7383 0.089844-11.41 0.023438-22.297-4.8086-29.93-13.289-0.88672-1.0312-0.78906-2.5781 0.21875-3.4883 1.0078-0.91016 2.5586-0.84766 3.4922 0.13672 8.3633 9.2617 20.996 13.418 33.227 10.941 12.23-2.4805 22.242-11.23 26.344-23.016 4.0977-11.789 1.6719-24.863-6.3828-34.395-0.84375-0.99609-0.78125-2.4688 0.14062-3.3906l4.3594-4.3594c0.63281-0.69922 0.60547-1.7734-0.058594-2.4375-0.66797-0.66797-1.7422-0.69531-2.4414-0.0625l-4.5312 4.5312h0.003906c-0.88281 0.87891-2.2773 0.97656-3.2695 0.22656-5.0195-3.7617-10.949-6.1172-17.184-6.8203-1.2656-0.13672-2.2266-1.2031-2.2266-2.4766v-8.0625c-0.011718-0.66797 0.24609-1.3164 0.71484-1.793 0.47266-0.47656 1.1133-0.74609 1.7852-0.74609h2.2891c0.97656 0 1.7695-0.79297 1.7695-1.7695 0-0.97656-0.79297-1.7695-1.7695-1.7695h-13.121c-0.97656 0-1.7695 0.79297-1.7695 1.7695 0 0.97656 0.79297 1.7695 1.7695 1.7695h2.2891c0.66406 0 1.3008 0.26172 1.7695 0.73047s0.73047 1.1055 0.73047 1.7695v8.1016c0 1.2695-0.95703 2.3359-2.2188 2.4766-8.082 0.92578-15.598 4.6094-21.281 10.434-0.96875 0.98828-2.5547 1.0039-3.543 0.035156-0.98828-0.97266-1.0039-2.5586-0.035156-3.5469 5.957-6.0859 13.684-10.137 22.078-11.57v-3.4297c-3.5273-0.32031-6.207-3.3047-6.1523-6.8477 0.054688-3.5391 2.8281-6.4414 6.3633-6.6523h13.121c3.5352 0.21094 6.3086 3.1133 6.3633 6.6523 0.054688 3.543-2.6289 6.5273-6.1523 6.8477v3.3906c5.5859 0.94531 10.914 3.0625 15.629 6.2109l3-3c2.6406-2.6484 6.9297-2.6484 9.5742-0.007812 2.6445 2.6445 2.6484 6.9297 0.003906 9.5781zm-82 14.18c0 0.66016 0.26172 1.2969 0.73047 1.7656 0.47266 0.46875 1.1055 0.73438 1.7695 0.73438h17.359c1.3828 0 2.5-1.1211 2.5-2.5 0-1.3828-1.1172-2.5-2.5-2.5h-17.348c-1.3789 0-2.4961 1.1133-2.5 2.4883zm28.422 12.117c0-0.66016-0.26562-1.2969-0.73438-1.7656s-1.1055-0.73438-1.7656-0.73438h-17.352c-1.3828 0-2.5 1.1211-2.5 2.5 0 1.3828 1.1172 2.5 2.5 2.5h17.352c0.66016 0 1.2969-0.26172 1.7656-0.73047s0.73438-1.1055 0.73438-1.7695zm-25.91 14.633h17.348c1.3828 0 2.5-1.1211 2.5-2.5 0-1.3828-1.1172-2.5-2.5-2.5h-17.348c-1.3828 0-2.5 1.1172-2.5 2.5 0 1.3789 1.1172 2.5 2.5 2.5zm58.348-24.281l-6.4102 6.4102c1.9492 3.6953 0.89844 8.2617-2.4648 10.738-3.3633 2.4805-8.0312 2.1289-10.984-0.82812-2.957-2.9531-3.3086-7.6211-0.82812-10.984 2.4766-3.3633 7.043-4.4141 10.738-2.4648l6.4102-6.4102c0.97656-0.97656 2.5625-0.97656 3.5391 0 0.97656 0.97656 0.97656 2.5625 0 3.5391zm-10.438 10.34c0-1.3867-0.83594-2.6367-2.1172-3.168-1.2852-0.53125-2.7578-0.23828-3.7383 0.74219-0.98438 0.98047-1.2773 2.457-0.74609 3.7383s1.7812 2.1172 3.168 2.1172c1.8945-0.003906 3.4258-1.5391 3.4336-3.4297zm-3.4336 29.75c9.9453 0.015624 19.242-4.9375 24.773-13.199 5.5352-8.2617 6.5781-18.738 2.7773-27.93-3.7969-9.1914-11.938-15.875-21.688-17.816-9.7539-1.9453-19.832 1.1133-26.863 8.1445-0.97656 0.98047-0.97656 2.5625 0 3.543 0.98047 0.97656 2.5625 0.97656 3.543 0 4.6406-4.6523 10.941-7.2695 17.516-7.2734 6.5703-0.003907 12.875 2.6055 17.523 7.25 4.6484 4.6484 7.2617 10.949 7.2617 17.523 0 6.5703-2.6133 12.871-7.2617 17.52-4.6484 4.6445-10.953 7.2539-17.523 7.25-6.5742-0.003906-12.875-2.6211-17.516-7.2695-0.98047-0.98047-2.5625-0.98047-3.543 0-0.97656 0.97656-0.97656 2.5625 0 3.5391 5.5664 5.5781 13.121 8.7148 21 8.7188z"/> +</svg> diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/static/images/icon-h/hugo-h-1.svg b/docs/_vendor/github.com/gohugoio/gohugoioTheme/static/images/icon-h/hugo-h-1.svg new file mode 100644 index 000000000..a3a3ba35b --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/static/images/icon-h/hugo-h-1.svg @@ -0,0 +1,11 @@ +<svg width="521" height="594" viewBox="0 0 521 594" fill="none" xmlns="http://www.w3.org/2000/svg"> +<mask id="mask0_4_3" style="mask-type:luminance" maskUnits="userSpaceOnUse" x="0" y="0" width="521" height="594"> +<path d="M0 0H520.787V593.521H0V0Z" fill="white"/> +</mask> +<g mask="url(#mask0_4_3)"> +<path d="M509.245 139.75C515.594 143.416 520.792 152.416 520.792 159.75V433.776C520.792 441.109 515.594 450.109 509.245 453.776L271.932 590.771C265.583 594.437 255.188 594.437 248.839 590.771L11.5469 453.776C5.19792 450.109 0 441.109 0 433.776V159.75C0 152.416 5.19792 143.416 11.5469 139.75L248.839 2.75488C255.188 -0.911784 265.583 -0.911784 271.932 2.75488" fill="#CB007C"/> +</g> +<path d="M460.031 168.161C466.385 171.828 471.583 180.828 471.583 188.161V405.365C471.583 412.698 466.385 421.698 460.031 425.365L271.932 533.948C265.583 537.615 255.193 537.615 248.839 533.948L60.7604 425.365C54.4062 421.698 49.2083 412.698 49.2083 405.365V188.161C49.2083 180.828 54.4062 171.828 60.7604 168.161L248.839 59.5781C255.193 55.9115 265.583 55.9115 271.932 59.5781" fill="#FF41B4"/> +<path d="M195.112 264.739H322.591V149.114H367.195V444.656H322.591V306.656H195.112V444.656H150.529V149.114H195.112V264.739Z" fill="white"/> +<path d="M195.052 149.365H150.495V444.656H195.052V306.766H322.427V444.656H366.99V149.365H322.427V264.88H195.052V149.365Z" stroke="white" stroke-width="14.6667" stroke-miterlimit="10"/> +</svg> diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/static/images/icon-h/hugo-h-2.svg b/docs/_vendor/github.com/gohugoio/gohugoioTheme/static/images/icon-h/hugo-h-2.svg new file mode 100644 index 000000000..d587f9a1f --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/static/images/icon-h/hugo-h-2.svg @@ -0,0 +1,62 @@ +<svg width="531" height="600" viewBox="0 0 531 600" fill="none" xmlns="http://www.w3.org/2000/svg"> +<g clip-path="url(#clip0_4_14)"> +<mask id="mask0_4_14" style="mask-type:luminance" maskUnits="userSpaceOnUse" x="0" y="0" width="532" height="600"> +<path d="M0 0H531.001V600H0V0Z" fill="white"/> +</mask> +<g mask="url(#mask0_4_14)"> +<path d="M512.069 135.868C522.479 141.877 531.001 156.626 531.001 168.644V431.374C531.001 443.391 522.479 458.141 512.069 464.15L284.425 595.493C274.015 601.502 256.969 601.502 246.56 595.493L18.9326 464.15C8.52267 458.141 0 443.391 0 431.374V168.644C0 156.626 8.52267 141.877 18.9326 135.868L246.56 4.51551C256.969 -1.49345 274.015 -1.49345 284.425 4.51551" fill="#FF41B4"/> +</g> +<path d="M475.997 159.588C486.407 165.597 494.93 180.346 494.93 192.364V413.466C494.93 425.484 486.407 440.233 475.997 446.242L284.425 556.776C274.015 562.785 256.969 562.785 246.56 556.776L55.0045 446.242C44.5945 440.233 36.0719 425.484 36.0719 413.466V192.364C36.0719 180.346 44.5945 165.597 55.0045 159.588L246.56 49.0536C256.969 43.0446 274.015 43.0446 284.425 49.0536" fill="#CB007C"/> +<path d="M81.8834 291.29H124.548V252.642H139.441V351.482H124.548V305.322H81.8834V351.482H66.9559V252.642H81.8834V291.29Z" fill="white"/> +<path d="M178.031 252.642V312.185C178.031 320.678 179.415 326.883 182.199 330.792C186.341 336.485 192.173 339.328 199.688 339.328C207.22 339.328 213.061 336.485 217.212 330.792C219.987 326.994 221.379 320.789 221.379 312.185V252.642H236.307V316.282C236.307 326.687 233.053 335.256 226.571 341.991C219.261 349.528 210.295 353.292 199.688 353.292C189.048 353.292 180.098 349.528 172.839 341.991C166.349 335.256 163.104 326.687 163.104 316.282V252.642H178.031Z" fill="white"/> +<path d="M81.8791 252.641H66.9516V351.481H81.8791V305.33H124.535V351.481H139.454V252.641H124.535V291.307H81.8791V252.641Z" stroke="white" stroke-width="4" stroke-miterlimit="10"/> +<path d="M163.152 252.64V316.272C163.152 326.686 166.397 335.264 172.887 342.007C180.146 349.518 189.087 353.273 199.728 353.273C210.351 353.273 219.318 349.518 226.619 342.007C233.118 335.264 236.355 326.686 236.355 316.272V252.64H221.436V312.133C221.436 320.745 220.044 326.95 217.277 330.748C213.126 336.424 207.285 339.258 199.728 339.258C192.204 339.258 186.38 336.424 182.238 330.748C179.463 326.822 178.071 320.617 178.071 312.133V252.64H163.152Z" stroke="white" stroke-width="4" stroke-miterlimit="10"/> +<path d="M310.923 299.997H351.777V303.275C351.777 310.701 350.898 317.281 349.147 323.009C347.439 328.292 344.553 333.243 340.505 337.86C331.325 348.171 319.642 353.327 305.458 353.327C291.632 353.327 279.787 348.342 269.932 338.373C260.069 328.343 255.142 316.3 255.142 302.25C255.142 287.919 260.146 275.748 270.172 265.753C280.206 255.741 292.426 250.73 306.824 250.73C314.536 250.73 321.752 252.31 328.447 255.442C334.86 258.609 341.171 263.73 347.371 270.806L336.713 281.014C328.601 270.208 318.72 264.797 307.063 264.797C296.611 264.797 287.84 268.407 280.761 275.62C273.656 282.704 270.103 291.581 270.103 302.25C270.103 313.27 274.049 322.343 281.956 329.461C289.352 336.085 297.362 339.397 305.97 339.397C313.323 339.397 319.924 336.921 325.782 331.954C331.632 326.978 334.903 320.994 335.586 314.029H310.923V299.997Z" fill="white"/> +<path d="M310.915 314.036H335.569C334.886 320.975 331.624 326.933 325.774 331.918C319.924 336.851 313.323 339.318 305.979 339.318C297.354 339.318 289.352 336.015 281.965 329.4C274.058 322.273 270.112 313.2 270.112 302.189C270.112 291.52 273.656 282.643 280.744 275.558C287.832 268.346 296.611 264.744 307.072 264.744C318.72 264.744 328.609 270.147 336.722 280.936L347.354 270.761C341.163 263.694 334.869 258.581 328.456 255.44C321.761 252.299 314.544 250.72 306.816 250.72C292.427 250.72 280.215 255.739 270.18 265.768C260.138 275.755 255.125 287.918 255.125 302.257C255.125 316.298 260.052 328.333 269.924 338.362C279.788 348.349 291.632 353.342 305.467 353.342C319.643 353.342 331.317 348.178 340.505 337.85C344.562 333.241 347.44 328.29 349.147 322.998C350.898 317.28 351.769 310.707 351.769 303.281V300.012H310.915V314.036Z" stroke="white" stroke-width="4" stroke-miterlimit="10"/> +<path d="M368.248 301.602C368.248 287.698 373.346 275.748 383.551 265.753C393.705 255.792 405.908 250.799 420.169 250.799C434.26 250.799 446.344 255.835 456.412 265.89C466.54 275.978 471.613 288.073 471.613 302.182C471.613 316.411 466.532 328.48 456.378 338.373C446.147 348.325 433.824 353.293 419.418 353.293C406.642 353.293 395.174 348.871 385.02 340.011C373.833 330.255 368.248 317.444 368.248 301.602ZM383.278 301.807C383.278 312.732 386.95 321.72 394.311 328.745C401.595 335.803 410.024 339.329 419.589 339.329C429.965 339.329 438.726 335.744 445.857 328.574C452.979 321.319 456.549 312.476 456.549 302.046C456.549 291.513 453.022 282.679 445.994 275.552C438.974 268.39 430.306 264.797 419.999 264.797C409.7 264.797 400.998 268.39 393.901 275.552C386.813 282.636 383.278 291.385 383.278 301.807Z" fill="white"/> +<mask id="mask1_4_14" style="mask-type:luminance" maskUnits="userSpaceOnUse" x="275" y="157" width="257" height="291"> +<path d="M275.458 157.325H531.001V447.94H275.458V157.325Z" fill="white"/> +</mask> +<g mask="url(#mask1_4_14)"> +<path d="M385.014 340.026C395.177 348.861 406.637 353.273 419.404 353.273C433.836 353.273 446.15 348.306 456.364 338.362C466.526 328.461 471.607 316.4 471.607 302.197C471.607 288.063 466.543 275.968 456.424 265.896C446.347 255.824 434.263 250.788 420.173 250.788C405.911 250.788 393.699 255.781 383.537 265.768C373.332 275.754 368.234 287.704 368.234 301.617C368.234 317.45 373.827 330.253 385.014 340.026ZM393.913 275.55C401.001 268.388 409.694 264.803 419.985 264.803C430.318 264.803 438.986 268.388 445.988 275.55C453.033 282.668 456.552 291.494 456.552 302.027C456.552 312.431 452.982 321.265 445.86 328.512C438.729 335.673 429.976 339.258 419.6 339.258C410.036 339.258 401.599 335.742 394.297 328.7C386.953 321.667 383.281 312.687 383.281 301.779C383.281 291.374 386.825 282.625 393.913 275.55Z" stroke="white" stroke-width="4" stroke-miterlimit="10"/> +</g> +<path d="M457.688 389.839C457.688 389.839 451.684 389.959 441.172 390.155C430.659 390.317 415.646 390.727 397.628 390.889C379.617 391.043 358.592 391.393 336.073 391.453C313.545 391.529 289.523 391.615 265.501 391.7C241.478 391.615 217.456 391.529 194.928 391.453C172.409 391.384 151.384 391.043 133.365 390.889C115.355 390.719 100.333 390.317 89.8296 390.155C79.3171 389.959 73.3052 389.839 73.3052 389.839V389.626H457.688" fill="white"/> +<path d="M73.3137 213.66C73.3137 213.66 79.3172 213.54 89.8296 213.344C100.342 213.19 115.355 212.772 133.374 212.61C151.393 212.456 172.409 212.106 194.928 212.046C217.456 211.97 241.478 211.884 265.501 211.799C289.523 211.884 313.545 211.97 336.065 212.046C358.592 212.115 379.609 212.465 397.628 212.618C415.646 212.78 430.659 213.19 441.172 213.344C451.684 213.54 457.688 213.66 457.688 213.66V213.873H73.3137" fill="white"/> +<path d="M112.991 432.463H106.467L104.486 437.345H103.529L109.746 422.016L115.929 437.345H114.972L112.991 432.463ZM112.65 431.575L109.746 424.44L106.843 431.575H112.65Z" fill="white"/> +<path d="M129.721 423.415H124.666V428.775H129.585V429.663H124.666V437.345H123.744V422.527H129.721V423.415Z" fill="white"/> +<path d="M135.895 428.878C134.888 428.878 134.042 429.271 133.368 430.039C132.702 430.816 132.377 431.72 132.377 432.736C132.377 433.829 132.702 434.776 133.368 435.57C134.042 436.347 134.913 436.731 135.964 436.731C137.074 436.731 137.953 436.347 138.594 435.57C139.226 434.776 139.55 433.794 139.55 432.634C139.55 431.567 139.2 430.679 138.526 429.971C137.86 429.245 136.98 428.878 135.895 428.878ZM140.37 428.263V437.345H139.482V435.706H139.448C139.123 436.278 138.637 436.739 137.979 437.072C137.339 437.388 136.673 437.55 135.998 437.55C134.632 437.55 133.53 437.098 132.719 436.184C131.899 435.254 131.489 434.102 131.489 432.736C131.489 431.396 131.899 430.278 132.719 429.39C133.53 428.511 134.614 428.059 135.964 428.059C136.664 428.059 137.33 428.221 137.945 428.537C138.551 428.835 139.055 429.271 139.448 429.834H139.482V428.263H140.37Z" fill="white"/> +<path d="M148.007 429.527L147.221 429.902C146.897 429.228 146.359 428.878 145.616 428.878C145.223 428.878 144.873 429.032 144.557 429.322C144.232 429.595 144.079 429.928 144.079 430.312C144.079 430.705 144.224 431.02 144.523 431.268C144.813 431.524 145.18 431.729 145.616 431.882C146.043 432.019 146.478 432.181 146.914 432.36C147.366 432.548 147.742 432.83 148.041 433.214C148.357 433.607 148.519 434.11 148.519 434.716C148.519 435.536 148.229 436.227 147.665 436.765C147.093 437.294 146.393 437.55 145.582 437.55C144.804 437.55 144.13 437.337 143.566 436.901C142.994 436.475 142.618 435.877 142.439 435.126L143.293 434.853C143.677 436.108 144.437 436.731 145.582 436.731C146.12 436.731 146.606 436.543 147.016 436.15C147.418 435.749 147.631 435.254 147.631 434.682C147.631 434.187 147.469 433.811 147.153 433.555C146.854 433.308 146.418 433.077 145.855 432.873C145.419 432.719 145.086 432.591 144.864 432.497C144.659 432.412 144.395 432.258 144.079 432.053C143.78 431.857 143.549 431.609 143.395 431.336C143.259 431.072 143.19 430.747 143.19 430.38C143.19 429.706 143.43 429.143 143.908 428.707C144.403 428.281 145.001 428.059 145.684 428.059C146.137 428.059 146.581 428.204 147.016 428.468C147.469 428.741 147.802 429.1 148.007 429.527Z" fill="white"/> +<path d="M151.764 429.083V437.346H150.876V429.083H149.886V428.264H150.876V425.021H151.764V428.264H153.37V429.083H151.764Z" fill="white"/> +<path d="M165.699 423.143C165.17 423.143 164.726 423.356 164.367 423.757C164 424.167 163.821 424.653 163.821 425.191C163.821 425.447 163.863 425.712 163.957 425.976C164.043 426.232 164.145 426.446 164.265 426.625C164.376 426.787 164.521 427.018 164.709 427.308C164.888 427.581 165.025 427.794 165.119 427.922C165.247 427.811 165.469 427.649 165.768 427.444C166.058 427.248 166.28 427.086 166.417 426.966C166.57 426.838 166.758 426.659 166.963 426.454C167.16 426.232 167.305 426.002 167.373 425.771C167.458 425.524 167.51 425.259 167.51 424.986C167.51 424.466 167.322 424.03 166.963 423.689C166.622 423.33 166.195 423.143 165.699 423.143ZM171.131 437.346L169.252 434.887C168.244 435.732 167.296 436.407 166.417 436.902C165.546 437.397 164.666 437.653 163.786 437.653C162.693 437.653 161.762 437.269 161.019 436.492C160.285 435.724 159.926 434.802 159.926 433.727C159.926 433.231 160.029 432.753 160.234 432.293C160.43 431.823 160.652 431.422 160.883 431.098C161.13 430.782 161.506 430.432 162.01 430.039C162.505 429.638 162.881 429.339 163.137 429.152C163.402 428.972 163.838 428.699 164.435 428.332C164.384 428.289 164.256 428.144 164.06 427.888C163.872 427.624 163.744 427.436 163.684 427.342C163.633 427.257 163.53 427.094 163.376 426.864C163.24 426.617 163.146 426.42 163.103 426.284C163.052 426.13 162.992 425.942 162.932 425.737C162.881 425.515 162.864 425.294 162.864 425.089C162.864 424.32 163.146 423.655 163.718 423.108C164.282 422.545 164.965 422.255 165.768 422.255C166.511 422.255 167.151 422.537 167.68 423.074C168.201 423.603 168.466 424.244 168.466 424.986C168.466 425.396 168.389 425.789 168.261 426.147C168.125 426.488 167.894 426.821 167.578 427.137C167.279 427.436 166.989 427.692 166.724 427.888C166.468 428.093 166.118 428.349 165.665 428.639L169.354 433.658L171.233 431.576L171.95 431.985L169.901 434.341L172.155 437.346H171.131ZM164.982 429.083L164.025 429.732C163.547 430.031 163.163 430.287 162.898 430.483C162.625 430.688 162.3 430.97 161.942 431.302C161.575 431.644 161.301 432.011 161.122 432.395C160.934 432.788 160.849 433.197 160.849 433.624C160.849 434.495 161.122 435.237 161.668 435.843C162.232 436.458 162.941 436.765 163.786 436.765C164.324 436.765 164.922 436.612 165.563 436.287C166.22 435.971 166.741 435.664 167.134 435.365C167.535 435.075 168.065 434.665 168.705 434.136L164.982 429.083Z" fill="white"/> +<path d="M194.781 437.345L192.253 425.088H192.219L187.026 437.823L181.868 425.088H181.834L179.307 437.345H178.384L181.561 422.016L187.026 435.502L192.492 422.016L195.669 437.345H194.781Z" fill="white"/> +<path d="M201.225 428.059C202.541 428.059 203.668 428.52 204.607 429.424C205.538 430.338 206.008 431.464 206.008 432.804C206.008 434.153 205.538 435.28 204.607 436.184C203.668 437.098 202.541 437.55 201.225 437.55C199.927 437.55 198.809 437.098 197.878 436.184C196.938 435.254 196.477 434.136 196.477 432.838C196.477 431.524 196.93 430.397 197.844 429.458C198.775 428.528 199.902 428.059 201.225 428.059ZM201.157 428.878C200.081 428.878 199.184 429.271 198.459 430.039C197.724 430.816 197.365 431.754 197.365 432.838C197.365 433.888 197.724 434.802 198.459 435.57C199.184 436.347 200.081 436.731 201.157 436.731C202.267 436.731 203.207 436.355 203.958 435.604C204.727 434.861 205.12 433.931 205.12 432.838C205.12 431.729 204.727 430.79 203.958 430.039C203.207 429.271 202.267 428.878 201.157 428.878Z" fill="white"/> +<path d="M211.715 436.731C212.825 436.731 213.704 436.347 214.345 435.57C214.977 434.776 215.301 433.795 215.301 432.634C215.301 431.567 214.951 430.679 214.277 429.971C213.611 429.245 212.731 428.878 211.646 428.878C210.639 428.878 209.793 429.271 209.119 430.039C208.452 430.816 208.128 431.72 208.128 432.736C208.128 433.829 208.452 434.776 209.119 435.57C209.793 436.347 210.664 436.731 211.715 436.731ZM215.233 437.345V435.706H215.199C214.874 436.278 214.388 436.739 213.73 437.072C213.09 437.388 212.423 437.55 211.749 437.55C210.382 437.55 209.281 437.098 208.47 436.184C207.65 435.254 207.24 434.102 207.24 432.736C207.24 431.396 207.65 430.278 208.47 429.39C209.281 428.511 210.365 428.059 211.715 428.059C212.415 428.059 213.081 428.221 213.696 428.537C214.302 428.835 214.806 429.271 215.199 429.834H215.233V421.128H216.121V437.345H215.233Z" fill="white"/> +<path d="M227.037 432.873H219.146C219.121 434.016 219.454 434.947 220.137 435.672C220.837 436.381 221.725 436.731 222.801 436.731C223.476 436.731 224.099 436.551 224.646 436.184C225.21 435.8 225.671 435.288 226.012 434.648L226.764 435.092C225.893 436.731 224.526 437.55 222.665 437.55C221.367 437.55 220.299 437.098 219.488 436.184C218.668 435.254 218.258 434.119 218.258 432.77C218.258 431.481 218.668 430.372 219.488 429.458C220.299 428.528 221.367 428.059 222.665 428.059C224.005 428.059 225.073 428.528 225.876 429.458C226.67 430.397 227.054 431.533 227.037 432.873ZM219.146 432.053H226.149C226.029 431.191 225.654 430.449 225.022 429.834C224.381 429.202 223.604 428.878 222.699 428.878C221.785 428.878 220.982 429.202 220.308 429.834C219.625 430.449 219.232 431.191 219.146 432.053Z" fill="white"/> +<path d="M230.069 428.263V429.424H230.103C230.505 428.52 231.171 428.059 232.084 428.059C232.4 428.059 232.716 428.135 233.041 428.263L232.563 429.083C232.358 428.955 232.144 428.878 231.948 428.878C231.674 428.878 231.427 428.929 231.23 429.015C231.043 429.108 230.88 429.228 230.752 429.356C230.616 429.475 230.496 429.646 230.411 429.868C230.317 430.099 230.248 430.303 230.206 430.483C230.18 430.645 230.146 430.884 230.103 431.2C230.078 431.498 230.069 431.72 230.069 431.848C230.069 431.985 230.069 432.207 230.069 432.497C230.069 432.591 230.069 432.659 230.069 432.702V437.345H229.181V428.263H230.069Z" fill="white"/> +<path d="M235.696 428.263V429.663H235.73C235.995 429.168 236.362 428.776 236.823 428.502C237.293 428.212 237.831 428.059 238.429 428.059C239.539 428.059 240.316 428.383 240.752 429.015C241.204 429.655 241.435 430.602 241.435 431.848V437.345H240.547V431.848C240.547 431.396 240.521 431.012 240.478 430.688C240.427 430.372 240.333 430.064 240.205 429.766C240.069 429.475 239.838 429.254 239.522 429.117C239.223 428.963 238.83 428.878 238.361 428.878C236.584 428.878 235.696 430.218 235.696 432.873V437.345H234.808V428.263H235.696Z" fill="white"/> +<path d="M258.166 424.405L257.517 424.951C256.765 423.799 255.758 423.21 254.511 423.21C253.708 423.21 253.034 423.492 252.496 424.029C251.966 424.576 251.71 425.25 251.71 426.044C251.71 426.411 251.778 426.744 251.915 427.034C252.043 427.307 252.274 427.572 252.598 427.819C252.931 428.075 253.213 428.254 253.418 428.365C253.614 428.459 253.939 428.613 254.374 428.809L257.209 430.277C258.345 430.986 258.917 431.976 258.917 433.248C258.917 434.46 258.448 435.484 257.517 436.32C256.578 437.14 255.493 437.55 254.272 437.55C253.247 437.55 252.342 437.268 251.573 436.696C250.796 436.107 250.233 435.322 249.899 434.34L250.719 433.999C251.42 435.774 252.615 436.662 254.306 436.662C255.28 436.662 256.133 436.32 256.868 435.638C257.594 434.963 257.961 434.127 257.961 433.145C257.961 432.855 257.884 432.565 257.756 432.292C257.636 432.027 257.508 431.805 257.38 431.643C257.244 431.489 257.013 431.302 256.697 431.097C256.373 430.9 256.142 430.755 256.014 430.687C255.877 430.602 255.613 430.465 255.228 430.277C255.109 430.218 255.015 430.166 254.955 430.141L252.291 428.741C251.266 428.109 250.753 427.222 250.753 426.078C250.753 424.994 251.104 424.089 251.812 423.381C252.513 422.681 253.426 422.322 254.545 422.322C255.288 422.322 255.997 422.519 256.663 422.903C257.32 423.27 257.824 423.773 258.166 424.405Z" fill="white"/> +<path d="M262.243 429.082V437.345H261.354V429.082H260.364V428.263H261.354V425.02H262.243V428.263H263.848V429.082H262.243Z" fill="white"/> +<path d="M268.883 428.878C267.875 428.878 267.029 429.271 266.355 430.039C265.689 430.816 265.364 431.72 265.364 432.736C265.364 433.829 265.689 434.776 266.355 435.57C267.029 436.347 267.9 436.731 268.951 436.731C270.061 436.731 270.941 436.347 271.581 435.57C272.213 434.776 272.538 433.794 272.538 432.634C272.538 431.567 272.187 430.679 271.513 429.971C270.847 429.245 269.967 428.878 268.883 428.878ZM273.357 428.263V437.345H272.469V435.706H272.435C272.111 436.278 271.624 436.739 270.966 437.072C270.326 437.388 269.66 437.55 268.985 437.55C267.619 437.55 266.517 437.098 265.706 436.184C264.886 435.254 264.476 434.102 264.476 432.736C264.476 431.396 264.886 430.278 265.706 429.39C266.517 428.511 267.602 428.059 268.951 428.059C269.651 428.059 270.317 428.221 270.932 428.537C271.538 428.835 272.042 429.271 272.435 429.834H272.469V428.263H273.357Z" fill="white"/> +<path d="M277.373 429.082V437.345H276.485V429.082H275.494V428.263H276.485V425.02H277.373V428.263H278.979V429.082H277.373Z" fill="white"/> +<path d="M281.724 428.263V437.345H280.836V428.263H281.724ZM280.734 424.678C280.888 424.525 281.075 424.439 281.28 424.439C281.502 424.439 281.699 424.525 281.861 424.678C282.015 424.815 282.1 425.003 282.1 425.225C282.1 425.455 282.015 425.651 281.861 425.805C281.699 425.967 281.502 426.044 281.28 426.044C281.075 426.044 280.888 425.967 280.734 425.805C280.572 425.651 280.495 425.455 280.495 425.225C280.495 425.003 280.572 424.815 280.734 424.678Z" fill="white"/> +<path d="M292.067 429.185V430.38C291.179 429.382 290.103 428.878 288.856 428.878C287.806 428.878 286.918 429.271 286.192 430.039C285.457 430.816 285.099 431.729 285.099 432.77C285.099 433.82 285.457 434.742 286.192 435.536C286.918 436.338 287.806 436.731 288.856 436.731C290.197 436.731 291.316 436.184 292.204 435.092V436.287C291.247 437.132 290.137 437.55 288.89 437.55C287.541 437.55 286.422 437.098 285.543 436.184C284.655 435.254 284.211 434.119 284.211 432.77C284.211 431.456 284.655 430.338 285.543 429.424C286.448 428.52 287.575 428.059 288.925 428.059C290.146 428.059 291.196 428.443 292.067 429.185Z" fill="white"/> +<path d="M300.276 422.527L304.443 435.262L309.977 421.776L315.545 435.262L319.644 422.527H320.601L315.579 437.823L309.909 424.132L304.273 437.823L299.32 422.527H300.276Z" fill="white"/> +<path d="M329.036 432.873H321.145C321.119 434.016 321.452 434.947 322.135 435.672C322.836 436.381 323.724 436.731 324.8 436.731C325.474 436.731 326.098 436.551 326.644 436.184C327.208 435.8 327.669 435.288 328.011 434.648L328.762 435.092C327.891 436.731 326.525 437.55 324.663 437.55C323.365 437.55 322.298 437.098 321.486 436.184C320.667 435.254 320.257 434.119 320.257 432.77C320.257 431.481 320.667 430.372 321.486 429.458C322.298 428.528 323.365 428.059 324.663 428.059C326.004 428.059 327.071 428.528 327.874 429.458C328.668 430.397 329.053 431.533 329.036 432.873ZM321.145 432.053H328.147C328.028 431.191 327.652 430.449 327.02 429.834C326.38 429.202 325.603 428.878 324.697 428.878C323.784 428.878 322.981 429.202 322.306 429.834C321.623 430.449 321.23 431.191 321.145 432.053Z" fill="white"/> +<path d="M335.586 436.731C336.67 436.731 337.541 436.347 338.182 435.57C338.839 434.776 339.173 433.829 339.173 432.736C339.173 431.72 338.822 430.816 338.148 430.039C337.482 429.271 336.653 428.878 335.654 428.878C334.535 428.878 333.647 429.262 332.99 430.005C332.349 430.739 332.033 431.661 332.033 432.77C332.033 433.863 332.349 434.802 332.99 435.57C333.647 436.347 334.51 436.731 335.586 436.731ZM331.179 437.345V421.128H332.067V429.834H332.102C332.486 429.271 332.99 428.835 333.605 428.537C334.237 428.221 334.911 428.059 335.62 428.059C336.961 428.059 338.028 428.511 338.831 429.39C339.642 430.278 340.061 431.396 340.061 432.736C340.061 434.102 339.642 435.254 338.831 436.184C338.011 437.098 336.927 437.55 335.586 437.55C334.877 437.55 334.202 437.388 333.57 437.072C332.93 436.739 332.435 436.278 332.102 435.706H332.067V437.345H331.179Z" fill="white"/> +<path d="M346.809 429.527L346.023 429.902C345.699 429.228 345.161 428.878 344.418 428.878C344.025 428.878 343.675 429.032 343.359 429.322C343.035 429.595 342.881 429.928 342.881 430.312C342.881 430.705 343.026 431.02 343.325 431.268C343.615 431.524 343.982 431.729 344.418 431.882C344.845 432.019 345.281 432.181 345.716 432.36C346.169 432.548 346.544 432.83 346.843 433.214C347.159 433.607 347.322 434.11 347.322 434.716C347.322 435.536 347.031 436.227 346.468 436.765C345.895 437.294 345.195 437.55 344.384 437.55C343.607 437.55 342.932 437.337 342.368 436.901C341.796 436.475 341.421 435.877 341.241 435.126L342.095 434.853C342.479 436.108 343.24 436.731 344.384 436.731C344.922 436.731 345.409 436.543 345.819 436.15C346.22 435.749 346.433 435.254 346.433 434.682C346.433 434.187 346.271 433.811 345.955 433.555C345.656 433.308 345.221 433.077 344.657 432.873C344.222 432.719 343.889 432.591 343.667 432.497C343.462 432.412 343.197 432.258 342.881 432.053C342.582 431.857 342.351 431.609 342.198 431.336C342.061 431.072 341.993 430.747 341.993 430.38C341.993 429.706 342.232 429.143 342.71 428.707C343.205 428.281 343.803 428.059 344.486 428.059C344.939 428.059 345.383 428.204 345.819 428.468C346.271 428.741 346.604 429.1 346.809 429.527Z" fill="white"/> +<path d="M350.806 428.263V437.345H349.918V428.263H350.806ZM349.815 424.678C349.969 424.525 350.157 424.439 350.362 424.439C350.584 424.439 350.78 424.525 350.942 424.678C351.096 424.815 351.181 425.003 351.181 425.225C351.181 425.455 351.096 425.651 350.942 425.805C350.78 425.967 350.584 426.044 350.362 426.044C350.157 426.044 349.969 425.967 349.815 425.805C349.653 425.651 349.576 425.455 349.576 425.225C349.576 425.003 349.653 424.815 349.815 424.678Z" fill="white"/> +<path d="M355.171 429.083V437.346H354.283V429.083H353.292V428.264H354.283V425.021H355.171V428.264H356.776V429.083H355.171Z" fill="white"/> +<path d="M366.183 432.873H358.292C358.267 434.016 358.6 434.947 359.283 435.672C359.983 436.381 360.871 436.731 361.947 436.731C362.622 436.731 363.245 436.551 363.792 436.184C364.356 435.8 364.817 435.288 365.158 434.648L365.91 435.092C365.039 436.731 363.672 437.55 361.811 437.55C360.513 437.55 359.445 437.098 358.634 436.184C357.814 435.254 357.404 434.119 357.404 432.77C357.404 431.481 357.814 430.372 358.634 429.458C359.445 428.528 360.513 428.059 361.811 428.059C363.151 428.059 364.219 428.528 365.022 429.458C365.816 430.397 366.2 431.533 366.183 432.873ZM358.292 432.053H365.295C365.175 431.191 364.8 430.449 364.168 429.834C363.527 429.202 362.75 428.878 361.845 428.878C360.931 428.878 360.128 429.202 359.454 429.834C358.771 430.449 358.378 431.191 358.292 432.053Z" fill="white"/> +<path d="M381.206 423.415H375.057V428.775H381.035V429.663H375.057V436.457H381.206V437.345H374.135V422.527H381.206V423.415Z" fill="white"/> +<path d="M384.896 428.263V429.663H384.93C385.195 429.168 385.562 428.776 386.023 428.502C386.493 428.212 387.031 428.059 387.629 428.059C388.739 428.059 389.516 428.383 389.952 429.015C390.404 429.655 390.635 430.602 390.635 431.848V437.345H389.747V431.848C389.747 431.396 389.721 431.012 389.678 430.688C389.627 430.372 389.533 430.064 389.405 429.766C389.269 429.475 389.038 429.254 388.722 429.117C388.423 428.963 388.03 428.878 387.561 428.878C385.784 428.878 384.896 430.218 384.896 432.873V437.345H384.008V428.263H384.896Z" fill="white"/> +<path d="M397.304 428.878C396.296 428.878 395.451 429.271 394.776 430.039C394.11 430.816 393.786 431.72 393.786 432.736C393.786 433.829 394.11 434.776 394.776 435.57C395.451 436.347 396.322 436.731 397.372 436.731C398.483 436.731 399.362 436.347 400.003 435.57C400.635 434.776 400.959 433.794 400.959 432.634C400.959 431.567 400.609 430.679 399.934 429.971C399.268 429.245 398.389 428.878 397.304 428.878ZM401.779 428.263V436.901C401.779 437.49 401.762 437.96 401.745 438.301C401.719 438.634 401.634 439.035 401.506 439.496C401.369 439.966 401.156 440.392 400.891 440.759C400.02 441.912 398.816 442.501 397.27 442.501C396.04 442.501 394.99 442.142 394.127 441.442C393.282 440.759 392.821 439.812 392.761 438.608H393.649C393.709 439.539 394.076 440.281 394.742 440.828C395.417 441.391 396.228 441.681 397.168 441.681C398.483 441.681 399.465 441.229 400.105 440.35C400.626 439.547 400.891 438.395 400.891 436.901V435.775H400.857C400.447 436.321 399.917 436.756 399.285 437.072C398.645 437.388 397.979 437.55 397.304 437.55C396.023 437.55 394.964 437.089 394.127 436.15C393.308 435.22 392.898 434.093 392.898 432.77C392.898 431.456 393.316 430.338 394.162 429.424C395.024 428.52 396.117 428.059 397.441 428.059C398.85 428.059 399.986 428.656 400.857 429.834H400.891V428.263H401.779Z" fill="white"/> +<path d="M406.035 428.263V437.345H405.147V428.263H406.035ZM405.044 424.678C405.198 424.525 405.386 424.439 405.591 424.439C405.813 424.439 406.009 424.525 406.172 424.678C406.325 424.815 406.411 425.003 406.411 425.225C406.411 425.455 406.325 425.651 406.172 425.805C406.009 425.967 405.813 426.044 405.591 426.044C405.386 426.044 405.198 425.967 405.044 425.805C404.882 425.651 404.805 425.455 404.805 425.225C404.805 425.003 404.882 424.815 405.044 424.678Z" fill="white"/> +<path d="M410.297 428.263V429.663H410.332C410.596 429.168 410.964 428.776 411.425 428.502C411.894 428.212 412.432 428.059 413.03 428.059C414.14 428.059 414.917 428.383 415.353 429.015C415.806 429.655 416.036 430.602 416.036 431.848V437.345H415.148V431.848C415.148 431.396 415.122 431.012 415.08 430.688C415.028 430.372 414.934 430.064 414.806 429.766C414.67 429.475 414.439 429.254 414.123 429.117C413.824 428.963 413.431 428.878 412.962 428.878C411.186 428.878 410.297 430.218 410.297 432.873V437.345H409.409V428.263H410.297Z" fill="white"/> +<path d="M426.941 432.873H419.05C419.025 434.016 419.358 434.947 420.041 435.672C420.741 436.381 421.629 436.731 422.705 436.731C423.38 436.731 424.003 436.551 424.55 436.184C425.114 435.8 425.575 435.288 425.916 434.648L426.668 435.092C425.797 436.731 424.43 437.55 422.569 437.55C421.271 437.55 420.203 437.098 419.392 436.184C418.572 435.254 418.162 434.119 418.162 432.77C418.162 431.481 418.572 430.372 419.392 429.458C420.203 428.528 421.271 428.059 422.569 428.059C423.909 428.059 424.977 428.528 425.78 429.458C426.574 430.397 426.958 431.533 426.941 432.873ZM419.05 432.053H426.053C425.933 431.191 425.558 430.449 424.926 429.834C424.285 429.202 423.508 428.878 422.603 428.878C421.689 428.878 420.886 429.202 420.212 429.834C419.529 430.449 419.136 431.191 419.05 432.053Z" fill="white"/> +</g> +<defs> +<clipPath id="clip0_4_14"> +<rect width="531" height="600" fill="white"/> +</clipPath> +</defs> +</svg> diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/static/images/icon-h/hugo-h-3.svg b/docs/_vendor/github.com/gohugoio/gohugoioTheme/static/images/icon-h/hugo-h-3.svg new file mode 100644 index 000000000..c5c3af884 --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/static/images/icon-h/hugo-h-3.svg @@ -0,0 +1,62 @@ +<svg width="324" height="367" viewBox="0 0 324 367" fill="none" xmlns="http://www.w3.org/2000/svg"> +<g clip-path="url(#clip0_4_115)"> +<mask id="mask0_4_115" style="mask-type:luminance" maskUnits="userSpaceOnUse" x="0" y="0" width="324" height="367"> +<path d="M0 0H323.854V366.12H0V0Z" fill="white"/> +</mask> +<g mask="url(#mask0_4_115)"> +<path d="M312.307 82.9059C318.656 86.5726 323.854 95.5726 323.854 102.906V263.224C323.854 270.557 318.656 279.557 312.307 283.224L173.469 363.369C167.12 367.036 156.724 367.036 150.375 363.369L11.5469 283.224C5.19792 279.557 0 270.557 0 263.224V102.906C0 95.5726 5.19792 86.5726 11.5469 82.9059L150.375 2.75488C156.724 -0.911784 167.12 -0.911784 173.469 2.75488" fill="#CB007C"/> +</g> +<path d="M290.307 97.3805C296.656 101.047 301.854 110.047 301.854 117.381V252.297C301.854 259.631 296.656 268.631 290.307 272.297L173.469 339.745C167.12 343.412 156.724 343.412 150.375 339.745L33.5469 272.297C27.1979 268.631 22 259.631 22 252.297V117.381C22 110.047 27.1979 101.047 33.5469 97.3805L150.375 29.9326C156.724 26.266 167.12 26.266 173.469 29.9326" fill="#FF41B4"/> +<path d="M49.9396 177.745H75.9605V154.162H85.0438V214.475H75.9605V186.308H49.9396V214.475H40.8354V154.162H49.9396V177.745Z" fill="white"/> +<path d="M108.58 154.162V190.495C108.58 195.678 109.423 199.464 111.121 201.85C113.647 205.324 117.205 207.058 121.788 207.058C126.382 207.058 129.944 205.324 132.475 201.85C134.168 199.532 135.017 195.745 135.017 190.495V154.162H144.121V192.995C144.121 199.344 142.137 204.574 138.184 208.683C133.725 213.282 128.257 215.579 121.788 215.579C115.298 215.579 109.84 213.282 105.413 208.683C101.455 204.574 99.4755 199.344 99.4755 192.995V154.162H108.58Z" fill="white"/> +<path d="M49.9323 154.161H40.8333V214.474H49.9323V186.312H75.9479V214.474H85.0521V154.161H75.9479V177.755H49.9323V154.161Z" stroke="white" stroke-width="4" stroke-miterlimit="10"/> +<path d="M99.5052 154.161V192.989C99.5052 199.343 101.484 204.578 105.443 208.692C109.87 213.276 115.323 215.567 121.807 215.567C128.292 215.567 133.76 213.276 138.214 208.692C142.172 204.578 144.151 199.343 144.151 192.989V154.161H135.052V190.463C135.052 195.718 134.203 199.505 132.51 201.823C129.984 205.286 126.422 207.015 121.807 207.015C117.224 207.015 113.672 205.286 111.146 201.823C109.453 199.427 108.604 195.64 108.604 190.463V154.161H99.5052Z" stroke="white" stroke-width="4" stroke-miterlimit="10"/> +<path d="M189.629 183.058H214.545V185.058C214.545 189.589 214.009 193.604 212.941 197.099C211.9 200.323 210.139 203.344 207.67 206.162C202.071 212.453 194.946 215.599 186.295 215.599C177.863 215.599 170.639 212.558 164.629 206.474C158.613 200.354 155.608 193.006 155.608 184.433C155.608 175.688 158.66 168.261 164.775 162.162C170.894 156.052 178.347 152.995 187.129 152.995C191.832 152.995 196.233 153.959 200.316 155.87C204.228 157.802 208.077 160.927 211.858 165.245L205.358 171.474C200.41 164.881 194.384 161.578 187.275 161.578C180.9 161.578 175.551 163.782 171.233 168.183C166.9 172.506 164.733 177.922 164.733 184.433C164.733 191.157 167.139 196.693 171.962 201.037C176.472 205.078 181.358 207.099 186.608 207.099C191.092 207.099 195.118 205.589 198.691 202.558C202.259 199.521 204.254 195.87 204.67 191.62H189.629V183.058Z" fill="white"/> +<path d="M189.62 191.625H204.661C204.245 195.859 202.25 199.495 198.682 202.536C195.115 205.547 191.094 207.052 186.615 207.052C181.354 207.052 176.469 205.036 171.964 201C167.146 196.651 164.74 191.115 164.74 184.396C164.74 177.885 166.901 172.469 171.224 168.146C175.547 163.745 180.896 161.547 187.276 161.547C194.385 161.547 200.417 164.844 205.365 171.427L211.849 165.219C208.073 160.906 204.229 157.786 200.323 155.87C196.234 153.953 191.833 152.99 187.12 152.99C178.344 152.99 170.896 156.052 164.776 162.172C158.656 168.266 155.599 175.687 155.599 184.437C155.599 193.005 158.604 200.349 164.62 206.469C170.635 212.562 177.865 215.609 186.302 215.609C194.948 215.609 202.068 212.458 207.667 206.156C210.141 203.344 211.901 200.323 212.943 197.094C214.01 193.604 214.542 189.594 214.542 185.062V183.068H189.62V191.625Z" stroke="white" stroke-width="4" stroke-miterlimit="10"/> +<path d="M224.592 184.037C224.592 175.553 227.701 168.261 233.925 162.162C240.118 156.084 247.561 153.037 256.259 153.037C264.852 153.037 272.222 156.11 278.363 162.245C284.54 168.402 287.634 175.782 287.634 184.391C287.634 193.074 284.535 200.438 278.342 206.475C272.102 212.548 264.587 215.579 255.8 215.579C248.009 215.579 241.014 212.881 234.821 207.475C227.998 201.521 224.592 193.704 224.592 184.037ZM233.759 184.162C233.759 190.829 235.998 196.313 240.488 200.6C244.93 204.907 250.071 207.058 255.904 207.058C262.232 207.058 267.576 204.87 271.925 200.495C276.269 196.068 278.446 190.673 278.446 184.308C278.446 177.881 276.295 172.49 272.009 168.141C267.727 163.771 262.441 161.579 256.154 161.579C249.873 161.579 244.566 163.771 240.238 168.141C235.915 172.464 233.759 177.803 233.759 184.162Z" fill="white"/> +<mask id="mask1_4_115" style="mask-type:luminance" maskUnits="userSpaceOnUse" x="168" y="96" width="156" height="178"> +<path d="M168 96H323.854V273.333H168V96Z" fill="white"/> +</mask> +<g mask="url(#mask1_4_115)"> +<path d="M234.818 207.484C241.016 212.875 248.005 215.567 255.792 215.567C264.594 215.567 272.104 212.536 278.333 206.468C284.531 200.427 287.63 193.067 287.63 184.401C287.63 175.776 284.542 168.396 278.37 162.25C272.224 156.104 264.854 153.031 256.26 153.031C247.562 153.031 240.115 156.078 233.917 162.172C227.693 168.265 224.583 175.557 224.583 184.047C224.583 193.708 227.995 201.521 234.818 207.484ZM240.245 168.14C244.568 163.771 249.87 161.583 256.146 161.583C262.448 161.583 267.734 163.771 272.005 168.14C276.302 172.484 278.448 177.869 278.448 184.297C278.448 190.646 276.271 196.036 271.927 200.458C267.578 204.828 262.24 207.015 255.911 207.015C250.078 207.015 244.932 204.869 240.479 200.573C236 196.281 233.76 190.802 233.76 184.146C233.76 177.797 235.922 172.458 240.245 168.14Z" stroke="white" stroke-width="4" stroke-miterlimit="10"/> +</g> +<path d="M279.141 237.88C279.141 237.88 275.479 237.953 269.068 238.073C262.656 238.172 253.5 238.422 242.51 238.521C231.526 238.615 218.703 238.828 204.969 238.865C191.229 238.911 176.578 238.964 161.927 239.016C147.276 238.964 132.625 238.911 118.885 238.865C105.151 238.823 92.3281 238.615 81.3385 238.521C70.3541 238.417 61.1927 238.172 54.7864 238.073C48.375 237.953 44.7083 237.88 44.7083 237.88V237.75H279.141" fill="white"/> +<path d="M44.7136 130.375C44.7136 130.375 48.375 130.302 54.7865 130.182C61.1979 130.088 70.3542 129.833 81.3438 129.734C92.3334 129.64 105.151 129.427 118.885 129.39C132.625 129.343 147.276 129.291 161.927 129.239C176.578 129.291 191.229 129.343 204.964 129.39C218.703 129.432 231.521 129.646 242.51 129.739C253.5 129.838 262.656 130.088 269.068 130.182C275.479 130.302 279.141 130.375 279.141 130.375V130.505H44.7136" fill="white"/> +<path d="M68.9115 263.889H64.9323L63.724 266.868H63.1406L66.9323 257.514L70.7031 266.868H70.1198L68.9115 263.889ZM68.7031 263.347L66.9323 258.993L65.1615 263.347H68.7031Z" fill="white"/> +<path d="M79.1151 258.368H76.0318V261.639H79.0318V262.18H76.0318V266.868H75.4693V257.826H79.1151V258.368Z" fill="white"/> +<path d="M82.8806 261.701C82.266 261.701 81.7504 261.941 81.3389 262.41C80.9327 262.883 80.7348 263.436 80.7348 264.055C80.7348 264.722 80.9327 265.3 81.3389 265.785C81.7504 266.258 82.2817 266.493 82.9223 266.493C83.5994 266.493 84.1358 266.258 84.5264 265.785C84.9119 265.3 85.1098 264.701 85.1098 263.993C85.1098 263.342 84.8962 262.8 84.4848 262.368C84.0785 261.925 83.5421 261.701 82.8806 261.701ZM85.6098 261.326V266.868H85.0681V265.868H85.0473C84.8494 266.217 84.5525 266.498 84.1514 266.701C83.7608 266.894 83.3546 266.993 82.9431 266.993C82.1098 266.993 81.4379 266.717 80.9431 266.16C80.4431 265.592 80.1931 264.889 80.1931 264.055C80.1931 263.238 80.4431 262.555 80.9431 262.014C81.4379 261.477 82.0994 261.201 82.9223 261.201C83.3494 261.201 83.7556 261.3 84.1306 261.493C84.5004 261.675 84.8077 261.941 85.0473 262.285H85.0681V261.326H85.6098Z" fill="white"/> +<path d="M90.2673 262.097L89.7881 262.326C89.5902 261.915 89.2621 261.701 88.809 261.701C88.5694 261.701 88.3558 261.795 88.1631 261.972C87.9652 262.139 87.8715 262.342 87.8715 262.576C87.8715 262.816 87.96 263.008 88.1423 263.16C88.3194 263.316 88.5433 263.441 88.809 263.535C89.0694 263.618 89.335 263.717 89.6006 263.826C89.8767 263.941 90.1058 264.113 90.2881 264.347C90.4808 264.587 90.5798 264.894 90.5798 265.264C90.5798 265.764 90.4027 266.186 90.059 266.514C89.71 266.837 89.2829 266.993 88.7881 266.993C88.3142 266.993 87.9027 266.863 87.559 266.597C87.21 266.337 86.9808 265.972 86.8715 265.514L87.3923 265.347C87.6267 266.113 88.0902 266.493 88.7881 266.493C89.1163 266.493 89.4131 266.378 89.6631 266.139C89.9079 265.894 90.0381 265.592 90.0381 265.243C90.0381 264.941 89.9392 264.712 89.7465 264.555C89.5642 264.404 89.2985 264.264 88.9548 264.139C88.6892 264.045 88.486 263.967 88.3506 263.91C88.2256 263.857 88.0642 263.764 87.8715 263.639C87.6892 263.519 87.5485 263.368 87.4548 263.201C87.3715 263.04 87.3298 262.842 87.3298 262.618C87.3298 262.206 87.4756 261.863 87.7673 261.597C88.0694 261.337 88.434 261.201 88.8506 261.201C89.1267 261.201 89.3975 261.29 89.6631 261.451C89.9392 261.618 90.1423 261.837 90.2673 262.097Z" fill="white"/> +<path d="M92.559 261.826V266.868H92.0173V261.826H91.4131V261.326H92.0173V259.347H92.559V261.326H93.5381V261.826H92.559Z" fill="white"/> +<path d="M101.058 258.201C100.735 258.201 100.464 258.331 100.245 258.576C100.021 258.826 99.912 259.123 99.912 259.451C99.912 259.607 99.938 259.769 99.9953 259.93C100.047 260.086 100.11 260.216 100.183 260.326C100.251 260.425 100.339 260.565 100.454 260.743C100.563 260.909 100.646 261.039 100.704 261.118C100.782 261.05 100.917 260.951 101.099 260.826C101.277 260.706 101.412 260.607 101.495 260.534C101.589 260.456 101.704 260.347 101.829 260.222C101.948 260.086 102.037 259.946 102.079 259.805C102.131 259.654 102.162 259.493 102.162 259.326C102.162 259.008 102.047 258.743 101.829 258.534C101.62 258.315 101.36 258.201 101.058 258.201ZM104.37 266.868L103.224 265.368C102.61 265.883 102.032 266.295 101.495 266.597C100.964 266.899 100.428 267.055 99.8912 267.055C99.2245 267.055 98.6568 266.821 98.2037 266.347C97.7557 265.878 97.537 265.315 97.537 264.659C97.537 264.357 97.5995 264.065 97.7245 263.784C97.8443 263.498 97.9797 263.253 98.1203 263.055C98.2714 262.862 98.5005 262.649 98.8078 262.409C99.1099 262.164 99.3391 261.982 99.4953 261.868C99.6568 261.758 99.9224 261.591 100.287 261.368C100.256 261.341 100.178 261.253 100.058 261.097C99.9432 260.935 99.8651 260.821 99.8287 260.763C99.7974 260.711 99.7349 260.612 99.6412 260.472C99.5578 260.321 99.5005 260.201 99.4745 260.118C99.4432 260.024 99.4068 259.909 99.3703 259.784C99.3391 259.649 99.3287 259.513 99.3287 259.388C99.3287 258.92 99.5005 258.513 99.8495 258.18C100.193 257.836 100.61 257.659 101.099 257.659C101.553 257.659 101.943 257.831 102.266 258.159C102.584 258.482 102.745 258.873 102.745 259.326C102.745 259.576 102.698 259.815 102.62 260.034C102.537 260.243 102.396 260.446 102.204 260.638C102.021 260.821 101.844 260.977 101.683 261.097C101.527 261.222 101.313 261.378 101.037 261.555L103.287 264.618L104.433 263.347L104.87 263.597L103.62 265.034L104.995 266.868H104.37ZM100.62 261.826L100.037 262.222C99.7453 262.404 99.5109 262.56 99.3495 262.68C99.1828 262.805 98.9849 262.977 98.7662 263.18C98.5422 263.388 98.3755 263.612 98.2662 263.847C98.1516 264.086 98.0995 264.336 98.0995 264.597C98.0995 265.128 98.2662 265.581 98.5995 265.951C98.9432 266.326 99.3755 266.513 99.8912 266.513C100.219 266.513 100.584 266.42 100.974 266.222C101.376 266.029 101.693 265.841 101.933 265.659C102.178 265.482 102.501 265.232 102.891 264.909L100.62 261.826Z" fill="white"/> +<path d="M118.794 266.868L117.253 259.389H117.232L114.065 267.16L110.919 259.389H110.898L109.357 266.868H108.794L110.732 257.514L114.065 265.743L117.398 257.514L119.336 266.868H118.794Z" fill="white"/> +<path d="M122.725 261.201C123.527 261.201 124.215 261.482 124.787 262.035C125.355 262.592 125.642 263.279 125.642 264.097C125.642 264.92 125.355 265.607 124.787 266.16C124.215 266.717 123.527 266.993 122.725 266.993C121.933 266.993 121.251 266.717 120.683 266.16C120.11 265.592 119.829 264.91 119.829 264.118C119.829 263.316 120.105 262.628 120.662 262.055C121.23 261.488 121.918 261.201 122.725 261.201ZM122.683 261.701C122.027 261.701 121.48 261.941 121.037 262.41C120.59 262.883 120.371 263.456 120.371 264.118C120.371 264.758 120.59 265.316 121.037 265.785C121.48 266.258 122.027 266.493 122.683 266.493C123.36 266.493 123.933 266.264 124.392 265.805C124.86 265.352 125.1 264.785 125.1 264.118C125.1 263.441 124.86 262.868 124.392 262.41C123.933 261.941 123.36 261.701 122.683 261.701Z" fill="white"/> +<path d="M129.122 266.493C129.799 266.493 130.336 266.258 130.726 265.784C131.112 265.3 131.31 264.701 131.31 263.993C131.31 263.341 131.096 262.8 130.685 262.368C130.279 261.925 129.742 261.701 129.081 261.701C128.466 261.701 127.95 261.94 127.539 262.409C127.133 262.883 126.935 263.435 126.935 264.055C126.935 264.722 127.133 265.3 127.539 265.784C127.95 266.258 128.482 266.493 129.122 266.493ZM131.268 266.868V265.868H131.247C131.049 266.216 130.753 266.498 130.351 266.701C129.961 266.894 129.555 266.993 129.143 266.993C128.31 266.993 127.638 266.716 127.143 266.159C126.643 265.591 126.393 264.888 126.393 264.055C126.393 263.237 126.643 262.555 127.143 262.013C127.638 261.477 128.299 261.201 129.122 261.201C129.549 261.201 129.956 261.3 130.331 261.493C130.7 261.675 131.008 261.94 131.247 262.284H131.268V256.972H131.81V266.868H131.268Z" fill="white"/> +<path d="M138.467 264.139H133.655C133.639 264.837 133.842 265.404 134.259 265.847C134.686 266.279 135.228 266.493 135.884 266.493C136.295 266.493 136.676 266.383 137.009 266.16C137.353 265.925 137.634 265.613 137.842 265.222L138.301 265.493C137.769 266.493 136.936 266.993 135.801 266.993C135.009 266.993 134.358 266.717 133.863 266.16C133.363 265.592 133.113 264.899 133.113 264.076C133.113 263.29 133.363 262.613 133.863 262.055C134.358 261.488 135.009 261.201 135.801 261.201C136.618 261.201 137.269 261.488 137.759 262.055C138.243 262.628 138.478 263.321 138.467 264.139ZM133.655 263.639H137.926C137.853 263.113 137.624 262.66 137.238 262.285C136.847 261.899 136.374 261.701 135.821 261.701C135.264 261.701 134.775 261.899 134.363 262.285C133.946 262.66 133.707 263.113 133.655 263.639Z" fill="white"/> +<path d="M140.316 261.326V262.035H140.337C140.582 261.482 140.988 261.201 141.546 261.201C141.738 261.201 141.931 261.248 142.129 261.326L141.837 261.826C141.712 261.748 141.582 261.701 141.462 261.701C141.296 261.701 141.145 261.732 141.025 261.785C140.91 261.842 140.811 261.915 140.733 261.993C140.65 262.066 140.577 262.17 140.525 262.305C140.467 262.446 140.426 262.571 140.4 262.68C140.384 262.779 140.363 262.925 140.337 263.118C140.322 263.3 140.316 263.436 140.316 263.514C140.316 263.597 140.316 263.732 140.316 263.91C140.316 263.967 140.316 264.008 140.316 264.035V266.868H139.775V261.326H140.316Z" fill="white"/> +<path d="M143.748 261.326V262.18H143.769C143.931 261.878 144.155 261.639 144.436 261.472C144.722 261.295 145.051 261.201 145.415 261.201C146.092 261.201 146.566 261.399 146.832 261.785C147.108 262.175 147.248 262.753 147.248 263.514V266.868H146.707V263.514C146.707 263.238 146.691 263.003 146.665 262.805C146.634 262.613 146.577 262.425 146.498 262.243C146.415 262.066 146.274 261.93 146.082 261.847C145.899 261.753 145.66 261.701 145.373 261.701C144.29 261.701 143.748 262.519 143.748 264.139V266.868H143.207V261.326H143.748Z" fill="white"/> +<path d="M157.453 258.972L157.057 259.305C156.598 258.602 155.984 258.243 155.223 258.243C154.734 258.243 154.322 258.415 153.994 258.743C153.671 259.076 153.515 259.488 153.515 259.972C153.515 260.196 153.557 260.399 153.64 260.576C153.718 260.743 153.859 260.904 154.057 261.055C154.26 261.212 154.432 261.321 154.557 261.389C154.677 261.446 154.874 261.54 155.14 261.66L156.869 262.555C157.562 262.988 157.911 263.592 157.911 264.368C157.911 265.107 157.624 265.732 157.057 266.243C156.484 266.743 155.822 266.993 155.078 266.993C154.453 266.993 153.901 266.821 153.432 266.472C152.958 266.113 152.614 265.633 152.411 265.035L152.911 264.826C153.338 265.91 154.067 266.451 155.098 266.451C155.692 266.451 156.213 266.243 156.661 265.826C157.104 265.415 157.328 264.904 157.328 264.305C157.328 264.128 157.281 263.951 157.203 263.785C157.13 263.623 157.052 263.488 156.973 263.389C156.89 263.295 156.749 263.18 156.557 263.055C156.359 262.936 156.218 262.847 156.14 262.805C156.057 262.753 155.895 262.67 155.661 262.555C155.588 262.519 155.531 262.488 155.494 262.472L153.869 261.618C153.244 261.232 152.932 260.691 152.932 259.993C152.932 259.331 153.145 258.779 153.578 258.347C154.005 257.92 154.562 257.701 155.244 257.701C155.697 257.701 156.13 257.821 156.536 258.055C156.937 258.279 157.244 258.587 157.453 258.972Z" fill="white"/> +<path d="M159.939 261.827V266.868H159.397V261.827H158.793V261.327H159.397V259.348H159.939V261.327H160.918V261.827H159.939Z" fill="white"/> +<path d="M163.989 261.701C163.374 261.701 162.858 261.941 162.447 262.41C162.041 262.883 161.843 263.436 161.843 264.055C161.843 264.722 162.041 265.3 162.447 265.785C162.858 266.258 163.39 266.493 164.03 266.493C164.707 266.493 165.244 266.258 165.634 265.785C166.02 265.3 166.218 264.701 166.218 263.993C166.218 263.342 166.004 262.8 165.593 262.368C165.187 261.925 164.65 261.701 163.989 261.701ZM166.718 261.326V266.868H166.176V265.868H166.155C165.957 266.217 165.661 266.498 165.259 266.701C164.869 266.894 164.463 266.993 164.051 266.993C163.218 266.993 162.546 266.717 162.051 266.16C161.551 265.592 161.301 264.889 161.301 264.055C161.301 263.238 161.551 262.555 162.051 262.014C162.546 261.477 163.207 261.201 164.03 261.201C164.457 261.201 164.864 261.3 165.239 261.493C165.608 261.675 165.916 261.941 166.155 262.285H166.176V261.326H166.718Z" fill="white"/> +<path d="M169.167 261.827V266.868H168.625V261.827H168.021V261.327H168.625V259.348H169.167V261.327H170.146V261.827H169.167Z" fill="white"/> +<path d="M171.821 261.326V266.868H171.279V261.326H171.821ZM171.217 259.139C171.31 259.045 171.425 258.993 171.55 258.993C171.685 258.993 171.805 259.045 171.904 259.139C171.998 259.222 172.05 259.337 172.05 259.472C172.05 259.613 171.998 259.733 171.904 259.826C171.805 259.925 171.685 259.972 171.55 259.972C171.425 259.972 171.31 259.925 171.217 259.826C171.118 259.733 171.071 259.613 171.071 259.472C171.071 259.337 171.118 259.222 171.217 259.139Z" fill="white"/> +<path d="M178.129 261.889V262.618C177.587 262.008 176.931 261.701 176.17 261.701C175.53 261.701 174.988 261.941 174.545 262.41C174.098 262.883 173.879 263.441 173.879 264.076C173.879 264.717 174.098 265.279 174.545 265.764C174.988 266.253 175.53 266.493 176.17 266.493C176.988 266.493 177.67 266.16 178.212 265.493V266.222C177.629 266.738 176.952 266.993 176.191 266.993C175.368 266.993 174.686 266.717 174.15 266.16C173.608 265.592 173.337 264.899 173.337 264.076C173.337 263.274 173.608 262.592 174.15 262.035C174.702 261.482 175.389 261.201 176.212 261.201C176.957 261.201 177.598 261.436 178.129 261.889Z" fill="white"/> +<path d="M183.135 257.826L185.677 265.597L189.052 257.368L192.448 265.597L194.948 257.826H195.531L192.469 267.16L189.01 258.806L185.573 267.16L182.552 257.826H183.135Z" fill="white"/> +<path d="M200.676 264.139H195.863C195.847 264.837 196.051 265.404 196.467 265.847C196.894 266.279 197.436 266.493 198.092 266.493C198.504 266.493 198.884 266.383 199.217 266.16C199.561 265.925 199.842 265.613 200.051 265.222L200.509 265.493C199.978 266.493 199.144 266.993 198.009 266.993C197.217 266.993 196.566 266.717 196.071 266.16C195.571 265.592 195.321 264.899 195.321 264.076C195.321 263.29 195.571 262.613 196.071 262.055C196.566 261.488 197.217 261.201 198.009 261.201C198.827 261.201 199.478 261.488 199.967 262.055C200.452 262.628 200.686 263.321 200.676 264.139ZM195.863 263.639H200.134C200.061 263.113 199.832 262.66 199.446 262.285C199.056 261.899 198.582 261.701 198.03 261.701C197.472 261.701 196.983 261.899 196.571 262.285C196.155 262.66 195.915 263.113 195.863 263.639Z" fill="white"/> +<path d="M204.671 266.493C205.332 266.493 205.863 266.258 206.254 265.784C206.655 265.3 206.858 264.722 206.858 264.055C206.858 263.435 206.644 262.883 206.233 262.409C205.827 261.94 205.322 261.701 204.712 261.701C204.03 261.701 203.488 261.935 203.087 262.388C202.697 262.836 202.504 263.399 202.504 264.076C202.504 264.743 202.697 265.315 203.087 265.784C203.488 266.258 204.014 266.493 204.671 266.493ZM201.983 266.868V256.972H202.525V262.284H202.546C202.78 261.94 203.087 261.675 203.462 261.493C203.848 261.3 204.259 261.201 204.691 261.201C205.509 261.201 206.16 261.477 206.65 262.013C207.144 262.555 207.4 263.237 207.4 264.055C207.4 264.888 207.144 265.591 206.65 266.159C206.15 266.716 205.488 266.993 204.671 266.993C204.238 266.993 203.827 266.894 203.441 266.701C203.051 266.498 202.749 266.216 202.546 265.868H202.525V266.868H201.983Z" fill="white"/> +<path d="M211.515 262.097L211.036 262.326C210.838 261.915 210.51 261.701 210.057 261.701C209.818 261.701 209.604 261.795 209.411 261.972C209.213 262.139 209.12 262.342 209.12 262.576C209.12 262.816 209.208 263.008 209.39 263.16C209.568 263.316 209.792 263.441 210.057 263.535C210.318 263.618 210.583 263.717 210.849 263.826C211.125 263.941 211.354 264.113 211.536 264.347C211.729 264.587 211.828 264.894 211.828 265.264C211.828 265.764 211.651 266.186 211.307 266.514C210.958 266.837 210.531 266.993 210.036 266.993C209.562 266.993 209.151 266.863 208.807 266.597C208.458 266.337 208.229 265.972 208.12 265.514L208.64 265.347C208.875 266.113 209.338 266.493 210.036 266.493C210.364 266.493 210.661 266.378 210.911 266.139C211.156 265.894 211.286 265.592 211.286 265.243C211.286 264.941 211.187 264.712 210.995 264.555C210.812 264.404 210.547 264.264 210.203 264.139C209.937 264.045 209.734 263.967 209.599 263.91C209.474 263.857 209.312 263.764 209.12 263.639C208.937 263.519 208.797 263.368 208.703 263.201C208.62 263.04 208.578 262.842 208.578 262.618C208.578 262.206 208.724 261.863 209.015 261.597C209.318 261.337 209.682 261.201 210.099 261.201C210.375 261.201 210.646 261.29 210.911 261.451C211.187 261.618 211.39 261.837 211.515 262.097Z" fill="white"/> +<path d="M213.953 261.326V266.867H213.411V261.326H213.953ZM213.349 259.138C213.443 259.044 213.557 258.992 213.682 258.992C213.818 258.992 213.937 259.044 214.036 259.138C214.13 259.221 214.182 259.336 214.182 259.471C214.182 259.612 214.13 259.732 214.036 259.826C213.937 259.924 213.818 259.971 213.682 259.971C213.557 259.971 213.443 259.924 213.349 259.826C213.25 259.732 213.203 259.612 213.203 259.471C213.203 259.336 213.25 259.221 213.349 259.138Z" fill="white"/> +<path d="M216.615 261.826V266.868H216.074V261.826H215.469V261.326H216.074V259.347H216.615V261.326H217.594V261.826H216.615Z" fill="white"/> +<path d="M223.331 264.139H218.519C218.503 264.837 218.706 265.404 219.123 265.847C219.55 266.279 220.092 266.493 220.748 266.493C221.16 266.493 221.54 266.383 221.873 266.16C222.217 265.925 222.498 265.613 222.706 265.222L223.165 265.493C222.634 266.493 221.8 266.993 220.665 266.993C219.873 266.993 219.222 266.717 218.727 266.16C218.227 265.592 217.977 264.899 217.977 264.076C217.977 263.29 218.227 262.613 218.727 262.055C219.222 261.488 219.873 261.201 220.665 261.201C221.483 261.201 222.134 261.488 222.623 262.055C223.108 262.628 223.342 263.321 223.331 264.139ZM218.519 263.639H222.79C222.717 263.113 222.488 262.66 222.102 262.285C221.712 261.899 221.238 261.701 220.686 261.701C220.128 261.701 219.639 261.899 219.227 262.285C218.811 262.66 218.571 263.113 218.519 263.639Z" fill="white"/> +<path d="M232.493 258.368H228.743V261.639H232.389V262.18H228.743V266.326H232.493V266.868H228.181V257.826H232.493V258.368Z" fill="white"/> +<path d="M234.744 261.326V262.18H234.765C234.926 261.878 235.15 261.639 235.432 261.472C235.718 261.295 236.046 261.201 236.411 261.201C237.088 261.201 237.562 261.399 237.827 261.785C238.103 262.175 238.244 262.753 238.244 263.514V266.868H237.702V263.514C237.702 263.238 237.687 263.003 237.661 262.805C237.629 262.613 237.572 262.425 237.494 262.243C237.411 262.066 237.27 261.93 237.077 261.847C236.895 261.753 236.656 261.701 236.369 261.701C235.286 261.701 234.744 262.519 234.744 264.139V266.868H234.202V261.326H234.744Z" fill="white"/> +<path d="M242.312 261.701C241.697 261.701 241.181 261.941 240.77 262.41C240.364 262.883 240.166 263.436 240.166 264.055C240.166 264.722 240.364 265.3 240.77 265.785C241.181 266.258 241.713 266.493 242.353 266.493C243.03 266.493 243.567 266.258 243.957 265.785C244.343 265.3 244.541 264.701 244.541 263.993C244.541 263.342 244.327 262.8 243.916 262.368C243.509 261.925 242.973 261.701 242.312 261.701ZM245.041 261.326V266.597C245.041 266.956 245.03 267.243 245.02 267.451C245.004 267.654 244.952 267.899 244.874 268.18C244.791 268.467 244.661 268.727 244.499 268.951C243.968 269.654 243.233 270.014 242.291 270.014C241.541 270.014 240.9 269.795 240.374 269.368C239.858 268.951 239.577 268.373 239.541 267.639H240.082C240.119 268.206 240.343 268.66 240.749 268.993C241.161 269.337 241.655 269.514 242.228 269.514C243.03 269.514 243.629 269.238 244.02 268.701C244.338 268.212 244.499 267.508 244.499 266.597V265.91H244.478C244.228 266.243 243.905 266.508 243.52 266.701C243.129 266.894 242.723 266.993 242.312 266.993C241.53 266.993 240.884 266.712 240.374 266.139C239.874 265.571 239.624 264.883 239.624 264.076C239.624 263.274 239.879 262.592 240.395 262.035C240.921 261.482 241.588 261.201 242.395 261.201C243.254 261.201 243.947 261.566 244.478 262.285H244.499V261.326H245.041Z" fill="white"/> +<path d="M247.636 261.326V266.868H247.095V261.326H247.636ZM247.032 259.139C247.126 259.045 247.241 258.993 247.366 258.993C247.501 258.993 247.621 259.045 247.72 259.139C247.813 259.222 247.866 259.337 247.866 259.472C247.866 259.613 247.813 259.733 247.72 259.826C247.621 259.925 247.501 259.972 247.366 259.972C247.241 259.972 247.126 259.925 247.032 259.826C246.933 259.733 246.886 259.613 246.886 259.472C246.886 259.337 246.933 259.222 247.032 259.139Z" fill="white"/> +<path d="M250.236 261.326V262.18H250.257C250.418 261.878 250.642 261.639 250.924 261.472C251.21 261.295 251.538 261.201 251.903 261.201C252.58 261.201 253.054 261.399 253.319 261.785C253.595 262.175 253.736 262.753 253.736 263.514V266.868H253.194V263.514C253.194 263.238 253.179 263.003 253.153 262.805C253.121 262.613 253.064 262.425 252.986 262.243C252.903 262.066 252.762 261.93 252.569 261.847C252.387 261.753 252.147 261.701 251.861 261.701C250.778 261.701 250.236 262.519 250.236 264.139V266.868H249.694V261.326H250.236Z" fill="white"/> +<path d="M260.387 264.139H255.574C255.559 264.837 255.762 265.404 256.179 265.847C256.606 266.279 257.147 266.493 257.804 266.493C258.215 266.493 258.595 266.383 258.929 266.16C259.272 265.925 259.554 265.613 259.762 265.222L260.22 265.493C259.689 266.493 258.856 266.993 257.72 266.993C256.929 266.993 256.278 266.717 255.783 266.16C255.283 265.592 255.033 264.899 255.033 264.076C255.033 263.29 255.283 262.613 255.783 262.055C256.278 261.488 256.929 261.201 257.72 261.201C258.538 261.201 259.189 261.488 259.679 262.055C260.163 262.628 260.397 263.321 260.387 264.139ZM255.574 263.639H259.845C259.772 263.113 259.543 262.66 259.158 262.285C258.767 261.899 258.293 261.701 257.741 261.701C257.184 261.701 256.694 261.899 256.283 262.285C255.866 262.66 255.626 263.113 255.574 263.639Z" fill="white"/> +</g> +<defs> +<clipPath id="clip0_4_115"> +<rect width="323.853" height="366.12" fill="white"/> +</clipPath> +</defs> +</svg> diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/static/images/icon-h/hugo-h-4.svg b/docs/_vendor/github.com/gohugoio/gohugoioTheme/static/images/icon-h/hugo-h-4.svg new file mode 100644 index 000000000..181bc14b0 --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/static/images/icon-h/hugo-h-4.svg @@ -0,0 +1,62 @@ +<svg width="325" height="364" viewBox="0 0 325 364" fill="none" xmlns="http://www.w3.org/2000/svg"> +<g clip-path="url(#clip0_4_216)"> +<mask id="mask0_4_216" style="mask-type:luminance" maskUnits="userSpaceOnUse" x="0" y="0" width="326" height="364"> +<path d="M0 0H325.001V363.999H0V0Z" fill="white"/> +</mask> +<g mask="url(#mask0_4_216)"> +<path d="M309.224 79.2331C317.899 84.2353 325.001 96.5065 325.001 106.511V257.488C325.001 267.492 317.899 279.771 309.224 284.773L178.271 360.247C169.596 365.249 155.391 365.249 146.716 360.247L15.7775 284.773C7.10237 279.771 0 267.492 0 257.488V106.511C0 96.5065 7.10237 84.2353 15.7775 79.2331L146.716 3.75169C155.391 -1.25056 169.596 -1.25056 178.271 3.75169" fill="#FF41B4"/> +</g> +<path d="M287.148 93.7353C295.823 98.7376 302.925 111.016 302.925 121.02V246.538C302.925 256.543 295.823 268.821 287.148 273.823L178.271 336.572C169.596 341.574 155.391 341.574 146.716 336.572L37.8532 273.823C29.1781 268.821 22.0757 256.543 22.0757 246.538V121.02C22.0757 111.016 29.1781 98.7376 37.8532 93.7353L146.716 30.987C155.391 25.9847 169.596 25.9847 178.271 30.9798" fill="#CB007C"/> +<path d="M50.093 176.726H76.1683V153.136H85.2775V213.475H76.1683V185.309H50.093V213.475H40.9553V153.136H50.093V176.726Z" fill="white"/> +<path d="M108.941 153.136V189.487C108.941 194.66 109.78 198.454 111.474 200.856C114.015 204.324 117.58 206.057 122.178 206.057C126.782 206.057 130.355 204.324 132.881 200.856C134.582 198.533 135.443 194.738 135.443 189.487V153.136H144.552V191.988C144.552 198.341 142.567 203.57 138.603 207.677C134.141 212.282 128.661 214.584 122.178 214.584C115.666 214.584 110.186 212.282 105.752 207.677C101.781 203.57 99.803 198.341 99.803 191.988V153.136H108.941Z" fill="white"/> +<path d="M50.108 153.045H40.9774V213.477H50.108V185.254H76.2188V213.477H85.3495V153.045H76.2188V176.684H50.108V153.045Z" stroke="white" stroke-width="4" stroke-miterlimit="10"/> +<path d="M99.8531 153.045V191.947C99.8531 198.314 101.839 203.558 105.817 207.686C110.258 212.276 115.73 214.571 122.242 214.571C128.747 214.571 134.233 212.276 138.703 207.686C142.674 203.558 144.659 198.314 144.659 191.947V153.045H135.529V189.418C135.529 194.683 134.675 198.477 132.981 200.801C130.447 204.268 126.868 206.002 122.242 206.002C117.637 206.002 114.072 204.268 111.539 200.801C109.838 198.399 108.991 194.605 108.991 189.418V153.045H99.8531Z" stroke="white" stroke-width="4" stroke-miterlimit="10"/> +<path d="M190.231 182.041H215.196V184.059C215.196 188.592 214.663 192.6 213.602 196.081C212.556 199.322 210.791 202.348 208.307 205.148C202.707 211.458 195.569 214.613 186.901 214.613C178.453 214.613 171.209 211.564 165.181 205.461C159.16 199.343 156.157 192.003 156.157 183.434C156.157 174.687 159.217 167.255 165.352 161.151C171.479 155.033 178.937 151.971 187.726 151.971C192.444 151.971 196.864 152.93 200.963 154.841C204.87 156.774 208.72 159.908 212.52 164.221L206.002 170.445C201.048 163.858 195.006 160.554 187.897 160.554C181.499 160.554 176.133 162.764 171.813 167.176C167.465 171.497 165.295 176.918 165.295 183.434C165.295 190.141 167.714 195.676 172.554 200.032C177.065 204.068 181.955 206.086 187.214 206.086C191.704 206.086 195.739 204.58 199.312 201.567C202.892 198.519 204.899 194.874 205.318 190.624H190.231V182.041Z" fill="white"/> +<path d="M190.291 190.575H205.385C204.965 194.825 202.966 198.463 199.386 201.511C195.806 204.531 191.771 206.037 187.273 206.037C181.993 206.037 177.097 204.019 172.571 199.969C167.738 195.613 165.319 190.071 165.319 183.335C165.319 176.812 167.489 171.391 171.83 167.056C176.164 162.644 181.537 160.441 187.942 160.441C195.073 160.441 201.122 163.745 206.09 170.346L212.601 164.122C208.808 159.802 204.951 156.675 201.037 154.75C196.931 152.831 192.518 151.872 187.786 151.872C178.976 151.872 171.503 154.934 165.361 161.066C159.22 167.17 156.153 174.609 156.153 183.378C156.153 191.961 159.17 199.322 165.205 205.454C171.24 211.558 178.492 214.613 186.96 214.613C195.643 214.613 202.788 211.451 208.403 205.142C210.886 202.321 212.651 199.294 213.697 196.061C214.772 192.565 215.306 188.543 215.306 184.003V182.006H190.291V190.575Z" stroke="white" stroke-width="4" stroke-miterlimit="10"/> +<path d="M225.383 183.036C225.383 174.552 228.493 167.254 234.72 161.151C240.919 155.054 248.391 151.999 257.123 151.999C265.713 151.999 273.1 155.083 279.27 161.236C285.455 167.375 288.55 174.758 288.55 183.377C288.55 192.06 285.44 199.421 279.242 205.461C272.993 211.543 265.457 214.584 256.639 214.584C248.84 214.584 241.83 211.884 235.631 206.484C228.799 200.522 225.383 192.699 225.383 183.036ZM234.578 183.149C234.578 189.821 236.813 195.307 241.296 199.606C245.751 203.912 250.903 206.057 256.753 206.057C263.087 206.057 268.439 203.869 272.808 199.492C277.171 195.065 279.356 189.658 279.356 183.292C279.356 176.875 277.199 171.482 272.894 167.119C268.602 162.75 263.308 160.554 257.009 160.554C250.704 160.554 245.388 162.75 241.068 167.119C236.741 171.44 234.578 176.79 234.578 183.149Z" fill="white"/> +<mask id="mask1_4_216" style="mask-type:luminance" maskUnits="userSpaceOnUse" x="147" y="74" width="179" height="219"> +<path d="M147.57 74.5791H325.001V292.859H147.57V74.5791Z" fill="white"/> +</mask> +<g mask="url(#mask1_4_216)"> +<path d="M235.645 206.471C241.865 211.871 248.882 214.571 256.696 214.571C265.528 214.571 273.071 211.53 279.32 205.448C285.532 199.401 288.65 192.026 288.65 183.336C288.65 174.703 285.547 167.306 279.355 161.145C273.185 154.985 265.791 151.908 257.166 151.908C248.434 151.908 240.961 154.964 234.748 161.067C228.5 167.171 225.376 174.482 225.376 182.987C225.376 192.665 228.799 200.495 235.645 206.471ZM241.096 167.05C245.43 162.673 250.754 160.484 257.052 160.484C263.371 160.484 268.68 162.673 272.965 167.05C277.277 171.406 279.434 176.799 279.434 183.236C279.434 189.603 277.249 194.996 272.886 199.43C268.524 203.814 263.165 206.002 256.817 206.002C250.96 206.002 245.8 203.849 241.331 199.543C236.833 195.244 234.585 189.759 234.585 183.087C234.585 176.72 236.755 171.377 241.096 167.05Z" stroke="white" stroke-width="4" stroke-miterlimit="10"/> +</g> +<path d="M280.131 236.953C280.131 236.953 276.452 237.046 270.025 237.216C263.592 237.344 254.397 237.692 243.374 237.82C232.343 237.948 219.476 238.239 205.691 238.296C191.906 238.36 177.203 238.431 162.501 238.495C147.798 238.431 133.095 238.36 119.31 238.289C105.525 238.232 92.6582 237.948 81.6274 237.82C70.6038 237.685 61.4092 237.344 54.9758 237.209C48.5423 237.046 44.8702 236.953 44.8702 236.953V236.769H280.131" fill="white"/> +<path d="M44.8702 129.184C44.8702 129.184 48.5495 129.092 54.9829 128.922C61.4163 128.794 70.6038 128.445 81.6274 128.31C92.6582 128.19 105.525 127.891 119.31 127.842C133.095 127.778 147.798 127.707 162.501 127.643C177.203 127.707 191.906 127.778 205.691 127.842C219.476 127.905 232.343 128.19 243.374 128.318C254.397 128.453 263.585 128.794 270.018 128.929C276.452 129.092 280.131 129.184 280.131 129.184V129.362H44.8702" fill="white"/> +<path d="M109.798 261.907H104.361L102.71 265.971H101.913L107.094 253.21L112.246 265.971H111.449L109.798 261.907ZM109.513 261.168L107.094 255.228L104.674 261.168H109.513Z" fill="white"/> +<path d="M123.74 254.375H119.527V258.837H123.626V259.576H119.527V265.971H118.758V253.636H123.74V254.375Z" fill="white"/> +<path d="M128.885 258.922C128.045 258.922 127.341 259.249 126.779 259.889C126.224 260.535 125.953 261.288 125.953 262.134C125.953 263.044 126.224 263.832 126.779 264.493C127.341 265.14 128.067 265.459 128.942 265.459C129.867 265.459 130.6 265.14 131.134 264.493C131.661 263.832 131.931 263.015 131.931 262.049C131.931 261.161 131.639 260.422 131.077 259.832C130.522 259.228 129.789 258.922 128.885 258.922ZM132.614 258.411V265.971H131.874V264.607H131.846C131.575 265.083 131.17 265.466 130.622 265.744C130.088 266.007 129.533 266.142 128.971 266.142C127.832 266.142 126.914 265.765 126.238 265.005C125.555 264.23 125.213 263.271 125.213 262.134C125.213 261.018 125.555 260.088 126.238 259.349C126.914 258.617 127.818 258.24 128.942 258.24C129.526 258.24 130.081 258.375 130.593 258.638C131.098 258.887 131.518 259.249 131.846 259.718H131.874V258.411H132.614Z" fill="white"/> +<path d="M138.978 259.462L138.323 259.775C138.053 259.214 137.605 258.922 136.986 258.922C136.658 258.922 136.366 259.05 136.103 259.292C135.833 259.519 135.705 259.796 135.705 260.116C135.705 260.443 135.826 260.706 136.075 260.912C136.317 261.125 136.623 261.296 136.986 261.423C137.341 261.537 137.704 261.672 138.067 261.821C138.444 261.978 138.758 262.212 139.007 262.532C139.27 262.859 139.405 263.278 139.405 263.782C139.405 264.465 139.163 265.04 138.694 265.488C138.217 265.928 137.633 266.142 136.957 266.142C136.309 266.142 135.747 265.964 135.278 265.601C134.801 265.246 134.488 264.749 134.338 264.124L135.05 263.896C135.37 264.941 136.003 265.459 136.957 265.459C137.405 265.459 137.811 265.303 138.153 264.976C138.487 264.642 138.665 264.23 138.665 263.754C138.665 263.342 138.53 263.029 138.267 262.816C138.017 262.61 137.655 262.418 137.185 262.248C136.822 262.12 136.544 262.013 136.359 261.935C136.188 261.864 135.968 261.736 135.705 261.566C135.455 261.402 135.263 261.196 135.135 260.969C135.021 260.748 134.964 260.478 134.964 260.173C134.964 259.612 135.164 259.143 135.562 258.78C135.975 258.425 136.473 258.24 137.042 258.24C137.42 258.24 137.79 258.361 138.153 258.581C138.53 258.809 138.807 259.107 138.978 259.462Z" fill="white"/> +<path d="M142.11 259.093V265.971H141.369V259.093H140.544V258.411H141.369V255.711H142.11V258.411H143.447V259.093H142.11Z" fill="white"/> +<path d="M153.722 254.147C153.281 254.147 152.911 254.325 152.612 254.659C152.306 255 152.157 255.405 152.157 255.852C152.157 256.066 152.192 256.286 152.27 256.506C152.342 256.719 152.427 256.897 152.527 257.046C152.619 257.181 152.74 257.373 152.897 257.615C153.046 257.842 153.16 258.02 153.238 258.126C153.345 258.034 153.53 257.899 153.779 257.728C154.021 257.565 154.206 257.43 154.32 257.33C154.448 257.224 154.605 257.075 154.775 256.904C154.939 256.719 155.06 256.528 155.117 256.336C155.188 256.13 155.231 255.909 155.231 255.682C155.231 255.249 155.074 254.886 154.775 254.602C154.491 254.303 154.135 254.147 153.722 254.147ZM158.248 265.971L156.683 263.924C155.843 264.628 155.053 265.189 154.32 265.601C153.594 266.013 152.861 266.226 152.128 266.226C151.217 266.226 150.441 265.907 149.822 265.26C149.21 264.621 148.911 263.853 148.911 262.958C148.911 262.546 148.997 262.148 149.168 261.764C149.331 261.373 149.516 261.039 149.708 260.769C149.915 260.507 150.228 260.215 150.648 259.888C151.061 259.554 151.374 259.306 151.587 259.149C151.808 259 152.171 258.773 152.669 258.467C152.626 258.432 152.52 258.311 152.356 258.098C152.199 257.878 152.093 257.721 152.043 257.643C152 257.572 151.915 257.437 151.787 257.245C151.673 257.039 151.594 256.876 151.559 256.762C151.516 256.634 151.466 256.478 151.416 256.307C151.374 256.122 151.36 255.938 151.36 255.767C151.36 255.128 151.594 254.573 152.071 254.119C152.541 253.65 153.11 253.408 153.779 253.408C154.398 253.408 154.932 253.643 155.373 254.09C155.807 254.531 156.028 255.064 156.028 255.682C156.028 256.023 155.964 256.35 155.857 256.648C155.743 256.933 155.551 257.21 155.288 257.473C155.039 257.721 154.797 257.934 154.576 258.098C154.363 258.268 154.071 258.482 153.694 258.723L156.768 262.901L158.334 261.167L158.932 261.508L157.224 263.47L159.102 265.971H158.248ZM153.124 259.093L152.327 259.633C151.929 259.881 151.609 260.094 151.388 260.258C151.16 260.428 150.89 260.663 150.591 260.94C150.285 261.224 150.057 261.53 149.908 261.849C149.751 262.176 149.68 262.517 149.68 262.873C149.68 263.597 149.908 264.216 150.363 264.72C150.833 265.232 151.424 265.487 152.128 265.487C152.576 265.487 153.075 265.36 153.608 265.09C154.156 264.827 154.59 264.571 154.918 264.322C155.252 264.081 155.694 263.74 156.227 263.299L153.124 259.093Z" fill="white"/> +<path d="M177.957 265.971L175.851 255.768H175.822L171.495 266.369L167.197 255.768H167.168L165.062 265.971H164.293L166.941 253.21L171.495 264.437L176.05 253.21L178.697 265.971H177.957Z" fill="white"/> +<path d="M183.328 258.24C184.424 258.24 185.363 258.624 186.146 259.377C186.922 260.137 187.313 261.075 187.313 262.191C187.313 263.314 186.922 264.251 186.146 265.005C185.363 265.765 184.424 266.142 183.328 266.142C182.246 266.142 181.314 265.765 180.538 265.005C179.755 264.23 179.371 263.299 179.371 262.219C179.371 261.125 179.748 260.187 180.51 259.406C181.286 258.631 182.225 258.24 183.328 258.24ZM183.271 258.922C182.374 258.922 181.627 259.249 181.022 259.889C180.41 260.535 180.111 261.317 180.111 262.219C180.111 263.093 180.41 263.854 181.022 264.493C181.627 265.14 182.374 265.459 183.271 265.459C184.196 265.459 184.979 265.147 185.605 264.521C186.246 263.903 186.573 263.129 186.573 262.219C186.573 261.296 186.246 260.514 185.605 259.889C184.979 259.249 184.196 258.922 183.271 258.922Z" fill="white"/> +<path d="M192.069 265.459C192.994 265.459 193.727 265.14 194.261 264.493C194.788 263.832 195.058 263.015 195.058 262.049C195.058 261.161 194.766 260.422 194.204 259.832C193.649 259.228 192.916 258.922 192.012 258.922C191.173 258.922 190.468 259.249 189.906 259.889C189.351 260.535 189.08 261.289 189.08 262.134C189.08 263.044 189.351 263.832 189.906 264.493C190.468 265.14 191.194 265.459 192.069 265.459ZM195.001 265.971V264.607H194.973C194.702 265.083 194.297 265.467 193.749 265.744C193.215 266.007 192.66 266.142 192.098 266.142C190.959 266.142 190.041 265.765 189.365 265.005C188.682 264.23 188.34 263.271 188.34 262.134C188.34 261.019 188.682 260.088 189.365 259.349C190.041 258.617 190.945 258.24 192.069 258.24C192.653 258.24 193.208 258.375 193.72 258.638C194.226 258.887 194.645 259.249 194.973 259.718H195.001V252.471H195.741V265.971H195.001Z" fill="white"/> +<path d="M204.838 262.248H198.262C198.241 263.2 198.519 263.974 199.088 264.578C199.671 265.168 200.412 265.459 201.308 265.459C201.871 265.459 202.39 265.31 202.845 265.005C203.315 264.685 203.699 264.259 203.984 263.726L204.61 264.095C203.885 265.459 202.746 266.142 201.194 266.142C200.113 266.142 199.223 265.765 198.547 265.005C197.864 264.23 197.522 263.285 197.522 262.162C197.522 261.09 197.864 260.166 198.547 259.406C199.223 258.631 200.113 258.24 201.194 258.24C202.312 258.24 203.201 258.631 203.87 259.406C204.532 260.187 204.852 261.132 204.838 262.248ZM198.262 261.566H204.098C203.998 260.848 203.685 260.23 203.159 259.718C202.625 259.192 201.977 258.922 201.223 258.922C200.461 258.922 199.792 259.192 199.23 259.718C198.661 260.23 198.334 260.848 198.262 261.566Z" fill="white"/> +<path d="M207.365 258.411V259.377H207.393C207.728 258.624 208.283 258.24 209.044 258.24C209.308 258.24 209.571 258.304 209.841 258.411L209.443 259.093C209.272 258.986 209.094 258.922 208.93 258.922C208.703 258.922 208.496 258.965 208.333 259.036C208.176 259.114 208.041 259.214 207.934 259.32C207.82 259.42 207.721 259.562 207.649 259.747C207.571 259.938 207.514 260.109 207.479 260.258C207.457 260.393 207.429 260.592 207.393 260.855C207.372 261.104 207.365 261.288 207.365 261.395C207.365 261.509 207.365 261.693 207.365 261.935C207.365 262.013 207.365 262.07 207.365 262.106V265.971H206.625V258.411H207.365Z" fill="white"/> +<path d="M212.054 258.411V259.576H212.083C212.303 259.164 212.609 258.837 212.994 258.61C213.385 258.368 213.833 258.24 214.332 258.24C215.257 258.24 215.904 258.51 216.267 259.036C216.644 259.569 216.837 260.358 216.837 261.395V265.971H216.096V261.395C216.096 261.018 216.075 260.699 216.039 260.429C215.997 260.166 215.919 259.91 215.812 259.661C215.698 259.42 215.506 259.235 215.242 259.121C214.993 258.993 214.666 258.922 214.275 258.922C212.794 258.922 212.054 260.038 212.054 262.248V265.971H211.314V258.411H212.054Z" fill="white"/> +<path d="M95.7198 274.844L95.1789 275.299C94.5527 274.34 93.7129 273.849 92.6739 273.849C92.0049 273.849 91.4427 274.084 90.9944 274.531C90.5532 274.986 90.3397 275.548 90.3397 276.208C90.3397 276.514 90.3966 276.791 90.5105 277.033C90.6172 277.26 90.8093 277.48 91.0798 277.686C91.3573 277.899 91.5922 278.049 91.763 278.141C91.9267 278.219 92.1971 278.347 92.56 278.511L94.9227 279.733C95.8693 280.322 96.3461 281.147 96.3461 282.205C96.3461 283.214 95.9547 284.067 95.1789 284.763C94.3961 285.445 93.4923 285.787 92.4746 285.787C91.6206 285.787 90.8663 285.552 90.2258 285.076C89.5782 284.586 89.1085 283.932 88.8309 283.115L89.5141 282.831C90.0977 284.309 91.094 285.048 92.5031 285.048C93.3144 285.048 94.0261 284.763 94.6381 284.195C95.243 283.634 95.549 282.937 95.549 282.12C95.549 281.878 95.485 281.637 95.3782 281.41C95.2786 281.189 95.1718 281.005 95.0651 280.87C94.9512 280.742 94.7591 280.585 94.4958 280.415C94.2253 280.251 94.0332 280.131 93.9264 280.074C93.8126 280.003 93.5919 279.889 93.2717 279.733C93.1721 279.683 93.0938 279.64 93.044 279.619L90.8236 278.454C89.9696 277.928 89.5426 277.189 89.5426 276.237C89.5426 275.334 89.8344 274.581 90.4251 273.991C91.0086 273.409 91.7701 273.11 92.7024 273.11C93.3215 273.11 93.9122 273.274 94.4673 273.594C95.0153 273.899 95.4351 274.318 95.7198 274.844Z" fill="white"/> +<path d="M99.1171 278.738V285.616H98.377V278.738H97.5515V278.056H98.377V275.355H99.1171V278.056H100.455V278.738H99.1171Z" fill="white"/> +<path d="M104.651 278.567C103.811 278.567 103.106 278.894 102.544 279.533C101.989 280.18 101.718 280.933 101.718 281.779C101.718 282.688 101.989 283.477 102.544 284.138C103.106 284.784 103.832 285.104 104.707 285.104C105.633 285.104 106.366 284.784 106.899 284.138C107.426 283.477 107.696 282.66 107.696 281.693C107.696 280.805 107.405 280.066 106.842 279.476C106.287 278.872 105.554 278.567 104.651 278.567ZM108.38 278.055V285.616H107.64V284.251H107.611C107.341 284.727 106.935 285.111 106.387 285.388C105.853 285.651 105.298 285.786 104.736 285.786C103.597 285.786 102.679 285.409 102.003 284.649C101.32 283.875 100.978 282.915 100.978 281.779C100.978 280.663 101.32 279.732 102.003 278.993C102.679 278.261 103.583 277.885 104.707 277.885C105.291 277.885 105.846 278.02 106.359 278.283C106.864 278.531 107.284 278.894 107.611 279.363H107.64V278.055H108.38Z" fill="white"/> +<path d="M111.726 278.738V285.616H110.986V278.738H110.16V278.056H110.986V275.355H111.726V278.056H113.064V278.738H111.726Z" fill="white"/> +<path d="M115.352 278.055V285.616H114.612V278.055H115.352ZM114.527 275.071C114.655 274.943 114.811 274.872 114.982 274.872C115.167 274.872 115.331 274.943 115.466 275.071C115.594 275.185 115.665 275.341 115.665 275.526C115.665 275.718 115.594 275.881 115.466 276.009C115.331 276.144 115.167 276.208 114.982 276.208C114.811 276.208 114.655 276.144 114.527 276.009C114.392 275.881 114.328 275.718 114.328 275.526C114.328 275.341 114.392 275.185 114.527 275.071Z" fill="white"/> +<path d="M123.971 278.823V279.817C123.231 278.986 122.335 278.567 121.296 278.567C120.42 278.567 119.68 278.894 119.075 279.533C118.463 280.18 118.164 280.94 118.164 281.807C118.164 282.681 118.463 283.448 119.075 284.109C119.68 284.777 120.42 285.104 121.296 285.104C122.413 285.104 123.345 284.649 124.085 283.74V284.734C123.288 285.438 122.363 285.786 121.324 285.786C120.2 285.786 119.267 285.409 118.534 284.649C117.794 283.875 117.424 282.93 117.424 281.807C117.424 280.713 117.794 279.782 118.534 279.022C119.289 278.268 120.228 277.885 121.353 277.885C122.37 277.885 123.246 278.205 123.971 278.823Z" fill="white"/> +<path d="M130.812 273.281L134.285 283.882L138.897 272.655L143.537 283.882L146.953 273.281H147.75L143.565 286.014L138.84 274.616L134.143 286.014L130.015 273.281H130.812Z" fill="white"/> +<path d="M154.779 281.892H148.203C148.182 282.844 148.46 283.619 149.029 284.223C149.612 284.813 150.353 285.104 151.249 285.104C151.811 285.104 152.331 284.955 152.786 284.649C153.256 284.329 153.64 283.903 153.925 283.37L154.551 283.74C153.825 285.104 152.687 285.786 151.135 285.786C150.054 285.786 149.164 285.409 148.488 284.649C147.805 283.875 147.463 282.93 147.463 281.807C147.463 280.734 147.805 279.81 148.488 279.05C149.164 278.276 150.054 277.885 151.135 277.885C152.253 277.885 153.142 278.276 153.811 279.05C154.473 279.832 154.793 280.777 154.779 281.892ZM148.203 281.21H154.039C153.939 280.492 153.626 279.874 153.1 279.363C152.566 278.837 151.918 278.567 151.164 278.567C150.402 278.567 149.733 278.837 149.171 279.363C148.602 279.874 148.274 280.492 148.203 281.21Z" fill="white"/> +<path d="M160.238 285.104C161.142 285.104 161.867 284.784 162.401 284.138C162.949 283.477 163.227 282.688 163.227 281.779C163.227 280.933 162.935 280.18 162.373 279.533C161.818 278.894 161.127 278.567 160.295 278.567C159.362 278.567 158.622 278.887 158.074 279.505C157.541 280.116 157.277 280.883 157.277 281.807C157.277 282.717 157.541 283.498 158.074 284.138C158.622 284.784 159.341 285.104 160.238 285.104ZM156.566 285.616V272.115H157.306V279.363H157.334C157.654 278.894 158.074 278.531 158.587 278.283C159.113 278.02 159.676 277.885 160.266 277.885C161.384 277.885 162.273 278.261 162.942 278.993C163.618 279.732 163.967 280.663 163.967 281.779C163.967 282.916 163.618 283.875 162.942 284.649C162.259 285.41 161.355 285.786 160.238 285.786C159.647 285.786 159.085 285.651 158.558 285.388C158.025 285.111 157.612 284.727 157.334 284.251H157.306V285.616H156.566Z" fill="white"/> +<path d="M169.591 279.107L168.936 279.42C168.666 278.858 168.217 278.567 167.598 278.567C167.271 278.567 166.979 278.695 166.716 278.936C166.445 279.164 166.317 279.441 166.317 279.761C166.317 280.087 166.438 280.35 166.687 280.556C166.929 280.77 167.235 280.94 167.598 281.068C167.954 281.182 168.317 281.317 168.68 281.466C169.057 281.622 169.37 281.857 169.619 282.176C169.882 282.503 170.018 282.923 170.018 283.427C170.018 284.109 169.776 284.685 169.306 285.132C168.829 285.573 168.246 285.786 167.57 285.786C166.922 285.786 166.36 285.608 165.89 285.246C165.413 284.891 165.1 284.393 164.951 283.768L165.662 283.541C165.983 284.585 166.616 285.104 167.57 285.104C168.018 285.104 168.424 284.948 168.765 284.621C169.1 284.287 169.278 283.875 169.278 283.399C169.278 282.986 169.142 282.674 168.879 282.461C168.63 282.255 168.267 282.063 167.797 281.892C167.434 281.764 167.157 281.658 166.972 281.58C166.801 281.509 166.58 281.381 166.317 281.21C166.068 281.047 165.876 280.841 165.748 280.613C165.634 280.393 165.577 280.123 165.577 279.817C165.577 279.256 165.776 278.787 166.175 278.425C166.588 278.07 167.086 277.885 167.655 277.885C168.032 277.885 168.402 278.006 168.765 278.226C169.142 278.453 169.42 278.752 169.591 279.107Z" fill="white"/> +<path d="M172.921 278.055V285.616H172.181V278.055H172.921ZM172.096 275.071C172.224 274.943 172.38 274.872 172.551 274.872C172.736 274.872 172.9 274.943 173.035 275.071C173.163 275.185 173.234 275.341 173.234 275.526C173.234 275.718 173.163 275.881 173.035 276.009C172.9 276.144 172.736 276.208 172.551 276.208C172.38 276.208 172.224 276.144 172.096 276.009C171.961 275.881 171.896 275.718 171.896 275.526C171.896 275.341 171.961 275.185 172.096 275.071Z" fill="white"/> +<path d="M176.559 278.738V285.616H175.819V278.738H174.993V278.056H175.819V275.355H176.559V278.056H177.897V278.738H176.559Z" fill="white"/> +<path d="M185.736 281.892H179.16C179.139 282.844 179.416 283.619 179.986 284.223C180.569 284.813 181.309 285.104 182.206 285.104C182.768 285.104 183.288 284.955 183.743 284.649C184.213 284.329 184.597 283.903 184.882 283.37L185.508 283.74C184.782 285.104 183.644 285.786 182.092 285.786C181.011 285.786 180.121 285.409 179.445 284.649C178.762 283.875 178.42 282.93 178.42 281.807C178.42 280.734 178.762 279.81 179.445 279.05C180.121 278.276 181.011 277.885 182.092 277.885C183.21 277.885 184.099 278.276 184.768 279.05C185.43 279.832 185.75 280.777 185.736 281.892ZM179.16 281.21H184.996C184.896 280.492 184.583 279.874 184.056 279.363C183.523 278.837 182.875 278.567 182.121 278.567C181.359 278.567 180.69 278.837 180.128 279.363C179.559 279.874 179.231 280.492 179.16 281.21Z" fill="white"/> +<path d="M198.255 274.02H193.131V278.482H198.113V279.221H193.131V284.877H198.255V285.616H192.363V273.281H198.255V274.02Z" fill="white"/> +<path d="M201.331 278.056V279.222H201.359C201.58 278.809 201.886 278.483 202.27 278.255C202.661 278.014 203.11 277.886 203.608 277.886C204.533 277.886 205.181 278.156 205.544 278.682C205.921 279.214 206.113 280.003 206.113 281.041V285.616H205.373V281.041C205.373 280.664 205.352 280.344 205.316 280.074C205.273 279.811 205.195 279.556 205.088 279.307C204.974 279.065 204.782 278.881 204.519 278.767C204.27 278.639 203.942 278.568 203.551 278.568C202.071 278.568 201.331 279.683 201.331 281.893V285.616H200.591V278.056H201.331Z" fill="white"/> +<path d="M211.671 278.568C210.831 278.568 210.126 278.895 209.564 279.534C209.009 280.181 208.739 280.934 208.739 281.78C208.739 282.689 209.009 283.478 209.564 284.139C210.126 284.785 210.852 285.105 211.728 285.105C212.653 285.105 213.386 284.785 213.92 284.139C214.446 283.478 214.717 282.661 214.717 281.694C214.717 280.806 214.425 280.067 213.863 279.477C213.308 278.873 212.575 278.568 211.671 278.568ZM215.4 278.056V285.247C215.4 285.737 215.386 286.128 215.371 286.412C215.35 286.689 215.279 287.023 215.172 287.407C215.058 287.798 214.88 288.153 214.66 288.459C213.934 289.418 212.93 289.908 211.642 289.908C210.618 289.908 209.742 289.61 209.023 289.027C208.319 288.459 207.935 287.67 207.885 286.668H208.625C208.675 287.443 208.981 288.061 209.536 288.516C210.098 288.984 210.774 289.226 211.557 289.226C212.653 289.226 213.471 288.849 214.005 288.118C214.439 287.45 214.66 286.49 214.66 285.247V284.309H214.631C214.29 284.764 213.848 285.126 213.322 285.389C212.788 285.652 212.233 285.787 211.671 285.787C210.603 285.787 209.721 285.403 209.023 284.622C208.34 283.847 207.999 282.909 207.999 281.808C207.999 280.714 208.347 279.783 209.052 279.023C209.771 278.269 210.682 277.886 211.785 277.886C212.959 277.886 213.905 278.383 214.631 279.364H214.66V278.056H215.4Z" fill="white"/> +<path d="M218.947 278.056V285.617H218.206V278.056H218.947ZM218.121 275.072C218.249 274.944 218.406 274.873 218.577 274.873C218.762 274.873 218.925 274.944 219.06 275.072C219.189 275.186 219.26 275.342 219.26 275.527C219.26 275.719 219.189 275.882 219.06 276.01C218.925 276.145 218.762 276.209 218.577 276.209C218.406 276.209 218.249 276.145 218.121 276.01C217.986 275.882 217.922 275.719 217.922 275.527C217.922 275.342 217.986 275.186 218.121 275.072Z" fill="white"/> +<path d="M222.499 278.056V279.222H222.527C222.748 278.809 223.054 278.483 223.438 278.255C223.83 278.014 224.278 277.886 224.776 277.886C225.701 277.886 226.349 278.156 226.712 278.682C227.089 279.214 227.281 280.003 227.281 281.041V285.616H226.541V281.041C226.541 280.664 226.52 280.344 226.484 280.074C226.441 279.811 226.363 279.556 226.256 279.307C226.142 279.065 225.95 278.881 225.687 278.767C225.438 278.639 225.111 278.568 224.719 278.568C223.239 278.568 222.499 279.683 222.499 281.893V285.616H221.759V278.056H222.499Z" fill="white"/> +<path d="M236.369 281.893H229.793C229.772 282.845 230.049 283.62 230.619 284.224C231.202 284.814 231.942 285.105 232.839 285.105C233.401 285.105 233.921 284.956 234.376 284.65C234.846 284.33 235.23 283.904 235.515 283.371L236.141 283.741C235.415 285.105 234.276 285.787 232.725 285.787C231.643 285.787 230.754 285.41 230.078 284.65C229.394 283.876 229.053 282.931 229.053 281.808C229.053 280.735 229.394 279.811 230.078 279.051C230.754 278.277 231.643 277.886 232.725 277.886C233.842 277.886 234.732 278.277 235.401 279.051C236.063 279.833 236.383 280.778 236.369 281.893ZM229.793 281.211H235.629C235.529 280.493 235.216 279.875 234.689 279.364C234.155 278.838 233.508 278.568 232.753 278.568C231.992 278.568 231.323 278.838 230.761 279.364C230.192 279.875 229.864 280.493 229.793 281.211Z" fill="white"/> +</g> +<defs> +<clipPath id="clip0_4_216"> +<rect width="325" height="364" fill="white"/> +</clipPath> +</defs> +</svg> diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/static/images/icon-multilingual.svg b/docs/_vendor/github.com/gohugoio/gohugoioTheme/static/images/icon-multilingual.svg new file mode 100644 index 000000000..2ac859285 --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/static/images/icon-multilingual.svg @@ -0,0 +1,12 @@ +<?xml version="1.0" encoding="UTF-8"?> +<svg fill="#777" stroke="#fff" width="100pt" height="100pt" version="1.1" viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg"> + <g> + <path d="m96.875 53.125h-93.75c-1.7266 0-3.125-1.3984-3.125-3.125s1.3984-3.125 3.125-3.125h93.75c1.7266 0 3.125 1.3984 3.125 3.125s-1.3984 3.125-3.125 3.125z"/> + <path d="m50 100c-1.7266 0-3.125-1.3984-3.125-3.125v-93.75c0-1.7266 1.3984-3.125 3.125-3.125s3.125 1.3984 3.125 3.125v93.75c0 1.7266-1.3984 3.125-3.125 3.125z"/> + <path d="m50.367 37.543c-12.438 0-24.945-5.418-37.441-16.262-1.3047-1.1328-1.4453-3.1055-0.3125-4.4102 1.1289-1.3047 3.1016-1.4453 4.4102-0.3125 22.5 19.527 44.105 19.586 66.055 0.1875 1.293-1.1406 3.2695-1.0195 4.4102 0.27344 1.1445 1.293 1.0234 3.2695-0.27344 4.4141-12.148 10.738-24.465 16.109-36.848 16.109z"/> + <path d="m50 100c-27.57 0-50-22.43-50-50s22.43-50 50-50 50 22.43 50 50-22.43 50-50 50zm0-93.75c-24.125 0-43.75 19.625-43.75 43.75s19.625 43.75 43.75 43.75 43.75-19.625 43.75-43.75-19.625-43.75-43.75-43.75z"/> + <path d="m85.023 84.203c-0.72656 0-1.457-0.25-2.0469-0.76562-22.492-19.523-44.098-19.586-66.055-0.19141-1.293 1.1406-3.2695 1.0234-4.4141-0.27344-1.1445-1.293-1.0234-3.2695 0.27344-4.4102 24.367-21.539 49.367-21.488 74.285 0.15234 1.3047 1.1289 1.4453 3.1016 0.3125 4.4062-0.61328 0.71875-1.4844 1.082-2.3555 1.082z"/> + <path d="m50 100c-0.77344 0-1.5508-0.28906-2.1523-0.85938-17.102-16.281-25.84-32.805-25.973-49.117-0.13672-16.59 8.6133-33.141 26.008-49.195 1.2734-1.168 3.2461-1.0859 4.4141 0.17969 1.1719 1.2695 1.0898 3.2461-0.17969 4.4141-16.043 14.809-24.117 29.797-23.992 44.551 0.12109 14.551 8.2031 29.57 24.027 44.637 1.25 1.1914 1.3008 3.1719 0.10938 4.418-0.61328 0.64844-1.4375 0.97266-2.2617 0.97266z"/> + <path d="m50 100c-0.84375 0-1.6797-0.33594-2.2969-1.0078-1.1719-1.2656-1.0898-3.2422 0.17969-4.4141 16.043-14.809 24.117-29.797 23.992-44.555-0.11719-14.555-8.207-29.57-24.027-44.641-1.25-1.1914-1.3008-3.168-0.10938-4.418 1.1914-1.2539 3.168-1.3008 4.418-0.10938 17.098 16.285 25.836 32.809 25.969 49.121 0.13672 16.59-8.6133 33.141-26.008 49.195-0.59766 0.55469-1.3594 0.82812-2.1172 0.82812z"/> + </g> +</svg> diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/static/images/icon-multilingual2.svg b/docs/_vendor/github.com/gohugoio/gohugoioTheme/static/images/icon-multilingual2.svg new file mode 100644 index 000000000..a65c77208 --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/static/images/icon-multilingual2.svg @@ -0,0 +1,4 @@ +<?xml version="1.0" encoding="UTF-8"?> +<svg fill="#777777" width="100pt" height="100pt" version="1.1" viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg"> + <path d="m66.57 40.375c-1.1172 0-2.2109 0.11328-3.2812 0.28516v-32.242c0-4.1367-3.3633-7.5-7.5-7.5h-35.797c-4.1367 0-7.5 3.3633-7.5 7.5v83.164c0 4.1367 3.3633 7.5 7.5 7.5h35.797c4.1367 0 7.5-3.3633 7.5-7.5v-9.4609c1.0703 0.17188 2.1641 0.28516 3.2812 0.28516 11.547 0 20.938-9.4219 20.938-21 0-11.594-9.3906-21.031-20.938-21.031zm-1.5664 37.766c-3.3945-2.1875-5.9453-5.4141-7.3828-9.2305h7.3828zm-8.2578-12.234c-0.29688-1.4141-0.45312-2.8828-0.45312-4.3906 0-1.5781 0.17969-3.1211 0.50781-4.6094h8.2031v9zm-8.1094-4.5c0-1.5586 0.21875-3.0586 0.58984-4.5h4.3711c-0.28516 1.4961-0.44531 3.0391-0.44531 4.6094 0 1.5039 0.14453 2.9688 0.40234 4.3906h-4.3281c-0.37109-1.4414-0.58984-2.9414-0.58984-4.5zm9.0625-7.5c1.4609-3.8047 3.9961-7.0508 7.3047-9.2188v9.2188zm10.445-9.2188c3.3047 2.1719 5.8438 5.4141 7.3047 9.2188h-7.3047zm-13.773 9.2188h-4.0898c1.9453-4.2539 5.4805-7.6094 9.8477-9.3086-2.6094 2.5391-4.5859 5.7383-5.7578 9.3086zm-0.074219 15c1.1328 3.543 3.0703 6.6953 5.668 9.2188-4.2852-1.7109-7.7578-5.0312-9.6797-9.2188zm13.848 9.2344v-9.2305h7.3828c-1.4414 3.8164-3.9922 7.0391-7.3828 9.2305zm0-12.234v-9h8.2031c0.32812 1.4883 0.50781 3.0312 0.50781 4.6094 0 1.5078-0.16016 2.9766-0.45312 4.3906zm11.406-9h4.3672c0.37109 1.4414 0.58984 2.9453 0.58984 4.5s-0.21875 3.0586-0.58984 4.5h-4.3242c0.25781-1.4258 0.40234-2.8906 0.40234-4.3906 0-1.5703-0.16016-3.1094-0.44531-4.6094zm3.3125-3h-4.0898c-1.1719-3.5703-3.1484-6.7695-5.7578-9.3086 4.3633 1.6992 7.9023 5.0547 9.8477 9.3086zm-36.508-47.094h0.75c0.82812 0 1.5 0.67188 1.5 1.5s-0.67188 1.5-1.5 1.5h-0.75c-0.82812 0-1.5-0.67188-1.5-1.5s0.67188-1.5 1.5-1.5zm-15.5 0h10.75c0.82812 0 1.5 0.67188 1.5 1.5s-0.67188 1.5-1.5 1.5h-10.75c-0.82812 0-1.5-0.67188-1.5-1.5s0.67188-1.5 1.5-1.5zm7.0352 89.051c-2.457 0-4.4492-1.9922-4.4492-4.4492 0-2.457 1.9922-4.4492 4.4492-4.4492 2.4609 0 4.4492 1.9922 4.4492 4.4492 0 2.457-1.9922 4.4492-4.4492 4.4492zm20.906-11.57h-41.812v-68.461h41.812v26.066c-7.7031 3.1094-13.16 10.676-13.16 19.512 0 8.8203 5.4609 16.379 13.16 19.48zm14.383-6.168c2.6016-2.5234 4.5391-5.6758 5.668-9.2188h4.0078c-1.9219 4.1875-5.3906 7.5078-9.6758 9.2188z"/> +</svg> diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/static/images/icon-search.png b/docs/_vendor/github.com/gohugoio/gohugoioTheme/static/images/icon-search.png Binary files differnew file mode 100644 index 000000000..2eb9c504e --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/static/images/icon-search.png diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/static/images/icon-shortcodes.svg b/docs/_vendor/github.com/gohugoio/gohugoioTheme/static/images/icon-shortcodes.svg new file mode 100644 index 000000000..b5cc252d6 --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/static/images/icon-shortcodes.svg @@ -0,0 +1,28 @@ +<svg fill="#777" width="100pt" height="100pt" version="1.1" viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg"> + <g> + <path d="m11.668 65h-3.3359v33.332c0 0.92188 0.74609 1.668 1.668 1.668h28.332v-3.332h-26.664z"/> + <path d="m11.668 3.332h60v15c0 0.92188 0.74609 1.668 1.668 1.668h15v46.668h3.332v-48.336c0-0.035156-0.019531-0.066406-0.019531-0.10156-0.011719-0.14844-0.039063-0.29297-0.085938-0.43359-0.019531-0.054687-0.03125-0.10547-0.054688-0.15625-0.082031-0.17578-0.18359-0.34375-0.32812-0.48828l-16.668-16.668c-0.14453-0.14453-0.3125-0.24609-0.48828-0.32812-0.050782-0.023438-0.10156-0.035156-0.15234-0.054688-0.14453-0.050781-0.28906-0.078124-0.4375-0.085937-0.035156 0.0039062-0.066406-0.015625-0.10156-0.015625h-63.332c-0.92188 0-1.668 0.74609-1.668 1.668v26.668h3.332zm74.309 13.336h-10.977v-10.977z"/> + <path d="m16.668 8.332h3.332v3.332h-3.332z"/> + <path d="m16.668 15h23.332v3.332h-23.332z"/> + <path d="m16.668 21.668h23.332v3.332h-23.332z"/> + <path d="m23.332 8.332h3.332v3.332h-3.332z"/> + <path d="m56.668 58.332v-12.645l9.5117-9.5117c0.47656-0.47656 0.62109-1.1914 0.36328-1.8164-0.25781-0.62109-0.87109-1.0273-1.543-1.0273h-63.332c-0.92188 0-1.668 0.74609-1.668 1.668v23.332c0 0.92188 0.74609 1.668 1.668 1.668h53.332c0.92188 0 1.668-0.74609 1.668-1.668zm-3.3359-13.332v11.668h-50v-20h57.645l-7.1562 7.1562c-0.3125 0.30859-0.48828 0.73438-0.48828 1.1758z" fill="#777"/> + <path d="m98.332 73.332h-61.664c-0.64844 0-1.2344 0.375-1.5078 0.96094-0.27344 0.58594-0.18359 1.2773 0.22656 1.7734l7.9453 9.5352v12.73c0 0.92188 0.74609 1.668 1.668 1.668h53.332c0.92188 0 1.668-0.74609 1.668-1.668v-23.332c0-0.92188-0.74609-1.668-1.668-1.668zm-1.6641 23.336h-50v-11.668c0-0.39062-0.13672-0.76953-0.38672-1.0664l-6.0547-7.2656h56.441z"/> + <path d="m6.668 41.668h3.332v3.332h-3.332z"/> + <path d="m13.332 41.668h3.332v3.332h-3.332z"/> + <path d="m20 41.668h30v3.332h-30z"/> + <path d="m13.332 48.332h36.668v3.332h-36.668z"/> + <path d="m56.668 81.668h36.668v3.332h-36.668z"/> + <path d="m50 88.332h3.332v3.332h-3.332z"/> + <path d="m56.668 88.332h3.332v3.332h-3.332z"/> + <path d="m63.332 88.332h30v3.332h-30z"/> + <path d="m70 36.668h13.332v3.332h-13.332z"/> + <path d="m66.668 43.332h16.668v3.332h-16.668z"/> + <path d="m60 50h23.332v3.332h-23.332z"/> + <path d="m60 56.668h23.332v3.332h-23.332z"/> + <path d="m15 90h3.332v3.332h-3.332z"/> + <path d="m21.668 90h3.332v3.332h-3.332z"/> + <path d="m15 83.332h3.332v3.332h-3.332z"/> + </g> +</svg> +<!-- content management by Unlimiticon --> diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/static/images/netlify-dark.svg b/docs/_vendor/github.com/gohugoio/gohugoioTheme/static/images/netlify-dark.svg new file mode 100644 index 000000000..2d2724070 --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/static/images/netlify-dark.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="114" height="51" viewBox="0 0 114 51"><title>Netlify Callout Dark</title><g fill="none" fill-rule="evenodd"><rect width="114" height="51" fill="#313D3E" rx="4"/><path fill="#FFF" d="M31.616 20.024c.171.086.314.2.427.33.015.014.015.014.029.014h.014l3.276-1.416c.015-.014.029-.029.029-.043 0-.014 0-.028-.014-.043l-3.063-3.074c-.014-.014-.028-.014-.028-.014h-.015c-.014 0-.028.014-.028.043l-.67 4.16c.015.015.029.043.043.043zm-6.794-2.788c.157.243.256.53.285.815 0 .015.014.029.028.043l4.872 2.102h.014c.014 0 .028 0 .028-.014.143-.115.314-.2.499-.258.014 0 .028-.014.028-.043l.798-5.018c0-.014 0-.029-.014-.043l-3.048-3.074c-.015-.014-.015-.014-.029-.014a.03.03 0 0 0-.028.028l-3.433 5.405c-.014.028-.014.057 0 .071zm16.637 7.735L36.23 19.71c-.014-.014-.028-.014-.028-.014h-.015l-3.546 1.53c-.015.014-.029.028-.029.042 0 .015.014.043.029.043l8.745 3.76h.015c.014 0 .028 0 .028-.014l.029-.028c.028 0 .028-.043 0-.058zm-.87.858L32.2 22.226h-.014c-.014 0-.029 0-.043.015-.228.314-.57.514-.968.571-.015 0-.043.015-.043.043l-.897 5.59c0 .015 0 .03.014.044.313.243.498.6.541 1 0 .03.014.043.043.043l5.07 1.073h.015c.014 0 .028 0 .028-.015l4.644-4.675c.014-.014.014-.029.014-.043 0-.014 0-.028-.014-.043zm-11.11-4.775l-4.586-1.973h-.014c-.014 0-.029.014-.043.028a1.67 1.67 0 0 1-1.41.772c-.085 0-.17-.014-.27-.028h-.015c-.014 0-.028.014-.043.028l-3.774 5.934a.044.044 0 0 0 0 .057c.014.014.028.014.043.014h.014l10.07-4.36c.014-.015.029-.029.029-.043v-.129c0-.086.014-.171.028-.243 0-.029-.014-.043-.028-.057zm5.527 10.38l-4.458-.93h-.014c-.015 0-.029.015-.043.015a1.544 1.544 0 0 1-.641.486c-.014 0-.029.029-.029.043l-1.068 6.663c0 .028.014.043.029.057h.028c.014 0 .029 0 .029-.014l6.181-6.22c.015-.014.015-.029.015-.043 0-.043-.015-.057-.029-.057zm-6.224-.458a1.47 1.47 0 0 1-.855-1c0-.015-.014-.029-.043-.043l-8.261-1.73h-.014c-.015 0-.029.014-.043.028-.043.072-.071.129-.114.186a.044.044 0 0 0 0 .057l7.52 11.038c.015.014.015.014.03.014.013 0 .028 0 .028-.014l.455-.457c0-.015.015-.015.015-.029l1.282-8.007c.028 0 .028-.028 0-.043zm-8.988-3.788c0 .028.014.042.043.042l8.19 1.716h.014c.014 0 .028-.014.043-.028a1.43 1.43 0 0 1 1.153-.744c.029 0 .043-.014.043-.043l.883-5.504c0-.015 0-.043-.028-.043a1.554 1.554 0 0 1-.185-.158c-.015-.014-.029-.014-.029-.014h-.014l-10.127 4.39c-.029.014-.029.028-.029.057.014.114.043.214.043.329zm-3.433 1.386a2.116 2.116 0 0 1-.128-.185c-.014-.015-.029-.029-.043-.029h-.014l-3.533 1.53a.03.03 0 0 0-.028.028c0 .015 0 .029.014.043l1.724 1.73c.014.015.028.015.028.015.014 0 .029-.015.043-.029l1.951-3.074s0-.014-.014-.029zm2.336.558c-.014-.014-.028-.029-.043-.029h-.014a1.89 1.89 0 0 1-.783.172 1.93 1.93 0 0 1-.627-.1h-.014c-.015 0-.029.014-.043.029l-2.051 3.23-.014.015a.044.044 0 0 0 0 .057l9.429 9.48c.014.014.029.014.029.014.014 0 .028 0 .028-.014l1.652-1.673a.044.044 0 0 0 0-.057l-7.549-11.124zM17.372 25.4c.015.015.029.029.043.029h.014c.143-.029.3-.057.442-.057.157 0 .328.028.484.071h.014c.015 0 .029-.014.043-.028l3.818-6.005a.044.044 0 0 0 0-.058 1.695 1.695 0 0 1-.428-1.558c0-.029-.014-.043-.028-.057-.485-.215-4.772-2.045-4.772-2.06h-.014c-.014 0-.029 0-.029.015l-3.632 3.66a.044.044 0 0 0 0 .058l4.045 5.99zm.413-10.466s4.33 1.86 4.516 1.945h.014c.014 0 .014 0 .028-.014a1.718 1.718 0 0 1 1.624-.3h.015c.014 0 .028-.015.042-.03l3.518-5.532a.044.044 0 0 0 0-.058l-2.92-2.93C24.608 8 24.608 8 24.594 8s-.028 0-.028.014l-6.78 6.835c-.015.014-.015.028-.015.043-.014.028 0 .028.014.042zm-1.68 11.51c.014 0 .028-.014.042-.029.086-.171.214-.328.342-.471a.044.044 0 0 0 0-.058c-.042-.057-3.903-5.719-3.903-5.733-.014-.014-.014-.014-.042-.029-.014 0-.029 0-.029.015l-4.5 4.518C8 24.67 8 24.685 8 24.7c0 .014.014.028.043.028l8.062 1.716c-.015 0-.015 0 0 0zm-.37.987c0-.029-.015-.043-.043-.043l-6.994-1.473h-.014c-.015 0-.029.014-.043.029-.014.014 0 .043.014.057l3.12 3.145c.014.015.028.015.028.015h.014l3.875-1.673c.028-.029.042-.043.042-.057zm59.767-4.666h2.275v14.547h-2.275V22.765zm-23.28 4.104c-1.223 0-2.204.461-2.958 1.369l-.07-1.187H47.06v10.247h2.275v-7.287c.455-.838 1.138-1.257 2.048-1.257.626 0 1.081.154 1.365.475.285.307.413.796.413 1.438v6.631h2.275v-6.77c-.028-2.43-1.095-3.659-3.214-3.659zm9.827 0c-.868 0-1.65.224-2.36.67-.712.447-1.252 1.076-1.65 1.885-.384.81-.583 1.717-.583 2.737v.279c0 1.521.455 2.75 1.35 3.671.896.922 2.063 1.383 3.513 1.383.84 0 1.607-.168 2.29-.503a3.979 3.979 0 0 0 1.62-1.424l-1.222-1.187c-.654.852-1.508 1.285-2.546 1.285-.74 0-1.365-.252-1.848-.74-.498-.489-.768-1.159-.84-2.01H66.4v-.922c0-1.633-.383-2.89-1.123-3.783-.782-.894-1.849-1.34-3.228-1.34zm2.076 4.356h-4.337c.1-.796.355-1.41.74-1.843.383-.446.895-.656 1.52-.656.627 0 1.124.196 1.48.587.355.39.554.977.611 1.745v.167h-.014zm7.395 4.105c-.156-.168-.228-.461-.228-.852v-5.724h1.792v-1.703h-1.792v-2.485h-2.275v2.485h-1.664v1.703h1.664v5.808c0 1.954.882 2.932 2.631 2.932.484 0 .981-.07 1.507-.224v-1.787c-.27.07-.54.098-.796.098-.412.014-.683-.07-.839-.251zm9.784-8.265h2.275v10.247h-2.275V27.065zm15.188 6.952l-2.147-6.952h-2.46l3.569 10.191-.327.88c-.17.502-.398.851-.697 1.06-.284.21-.725.322-1.294.322l-.427-.028v1.787a4.11 4.11 0 0 0 1.095.167c1.48 0 2.532-.865 3.157-2.582L101 27.065h-2.432l-2.076 6.952zm-8.447-10.526c-.626.614-.939 1.494-.939 2.639v.935h-1.55v1.703h1.55v8.544h2.275v-8.544h2.063v-1.703H89.38v-.908c0-1.13.54-1.689 1.636-1.689.327 0 .626.028.867.07l.057-1.801a5.293 5.293 0 0 0-1.28-.167c-1.109-.014-1.99.307-2.616.92zm-4.466-.935v2.01h-2.275v-2.01h2.275z"/><path fill="#BCBCBC" d="M47 18.709V13.08h1.933c.688 0 1.254.22 1.7.66.446.439.669 1.002.669 1.69v.932c0 .69-.223 1.254-.669 1.69-.446.437-1.012.656-1.7.656H47zm1.129-4.758v3.892h.746c.404 0 .721-.137.95-.41.23-.273.344-.63.344-1.07v-.94c0-.435-.114-.79-.344-1.062-.229-.274-.546-.41-.95-.41h-.746zm8.507 2.284h-2.33v1.608h2.724v.866h-3.853V13.08h3.845v.87h-2.717v1.414h2.33v.87zm3.204.433v2.04h-1.129v-5.627h2.242c.647 0 1.156.165 1.527.495.371.33.557.764.557 1.302 0 .539-.186.972-.557 1.3-.371.326-.88.49-1.527.49H59.84zm0-.87h1.113c.315 0 .553-.085.715-.257a.914.914 0 0 0 .244-.655c0-.27-.08-.494-.242-.67-.16-.177-.4-.265-.717-.265H59.84v1.847zm6.146 2.045h2.504v.866h-3.633V13.08h1.129v4.762zm8.441-1.442c0 .69-.218 1.262-.655 1.713-.437.45-1.004.676-1.703.676-.693 0-1.256-.225-1.689-.676-.433-.451-.649-1.022-.649-1.713V15.39c0-.688.216-1.258.647-1.71.432-.453.994-.679 1.688-.679.698 0 1.266.226 1.704.678.438.453.657 1.023.657 1.71v1.013zm-1.128-1.02c0-.438-.11-.798-.329-1.078-.22-.281-.52-.422-.904-.422s-.682.14-.893.42c-.212.28-.317.64-.317 1.08v1.02c0 .446.107.81.32 1.09.214.281.512.422.893.422.387 0 .688-.14.905-.422.216-.28.325-.644.325-1.09v-1.02zm4.765.294h.023l1.23-2.594h1.236l-1.932 3.649v1.979h-1.125v-2.037l-1.898-3.59h1.237l1.23 2.593zm6.988 1.565a.653.653 0 0 0-.23-.522c-.153-.131-.421-.255-.805-.37-.67-.194-1.177-.423-1.52-.689-.342-.265-.513-.629-.513-1.09 0-.461.196-.838.589-1.13.393-.293.895-.439 1.505-.439.619 0 1.123.164 1.512.493.389.328.577.734.564 1.215l-.008.024h-1.094a.824.824 0 0 0-.26-.632c-.174-.161-.419-.242-.733-.242-.301 0-.535.067-.7.201a.633.633 0 0 0-.247.514c0 .19.088.347.265.47.176.122.481.252.914.388.621.173 1.091.4 1.41.684.32.284.48.656.48 1.117 0 .482-.19.862-.57 1.14-.38.279-.882.418-1.506.418-.613 0-1.147-.158-1.604-.473-.456-.316-.677-.759-.664-1.328l.007-.023h1.098c0 .335.102.58.307.736.205.156.49.234.856.234.307 0 .542-.063.704-.19a.609.609 0 0 0 .243-.506zm5.933 1.469V13.08h1.902c.662 0 1.179.129 1.55.387.371.257.557.643.557 1.155 0 .26-.07.493-.207.698a1.249 1.249 0 0 1-.601.462c.337.072.59.227.76.464.168.237.252.511.252.823 0 .539-.177.946-.533 1.223-.356.277-.86.416-1.511.416h-2.169zm1.13-2.49v1.624h1.039c.299 0 .527-.065.684-.195.157-.13.236-.323.236-.578 0-.276-.067-.486-.201-.632-.134-.146-.346-.218-.634-.218h-1.125zm0-.78h.81c.302 0 .534-.062.696-.186.163-.123.244-.304.244-.54 0-.261-.082-.453-.245-.577-.164-.123-.408-.185-.733-.185h-.773v1.488zm6.396.236h.023l1.23-2.594H101l-1.933 3.649v1.979h-1.124v-2.037l-1.898-3.59h1.237l1.229 2.593z"/></g></svg>
\ No newline at end of file diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/static/images/site-hierarchy.svg b/docs/_vendor/github.com/gohugoio/gohugoioTheme/static/images/site-hierarchy.svg new file mode 100644 index 000000000..7d1a043e8 --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/static/images/site-hierarchy.svg @@ -0,0 +1,634 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<svg width="1800px" height="100%" viewBox="0 0 3900 1080" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:1.5;"> + <g transform="matrix(1.00649,0,0,1.00649,25.8182,35.9777)"> + <g transform="matrix(1.50472,0,0,1.50472,15.1711,-25.8885)"> + <path d="M119.631,36.154L203.822,85.066L203.822,181.395L119.631,229.184L35.578,181.395L35.578,85.066L119.631,36.154Z" style="fill:rgb(255,64,136);"/> + <path d="M208.665,80.243L210.425,83.301L210.425,183.178L208.632,186.258L121.373,235.788L117.884,235.786L30.766,186.255L28.975,183.176L28.975,83.302L30.733,80.245L117.848,29.552L121.409,29.551L208.665,80.243ZM42.181,88.863L42.181,177.554L119.634,221.59L197.22,177.551L197.22,88.866L119.634,43.792L42.181,88.863Z" style="fill:rgb(201,23,126);"/> + </g> + <g transform="matrix(1.41079,0,0,1.59861,3.82297,88.2168)"> + <path d="M179.238,106.552L154.758,106.552L154.758,62.2L112.134,62.2L112.134,106.552L87.654,106.552L87.654,1.648L112.134,1.648L112.134,45.496L154.758,45.496L154.758,1.648L179.238,1.648L179.238,106.552Z" style="fill:white;fill-rule:nonzero;"/> + </g> + </g> + <g transform="matrix(1.17016,0,0,1.00319,-96.1682,5.61636)"> + <rect x="759.403" y="100.455" width="487.587" height="249.829" style="fill:rgb(0,131,192);"/> + <path d="M1246.99,350.284L759.403,350.284L759.403,100.455L1246.99,100.455L1246.99,350.284ZM764.103,105.938L764.103,344.801L1242.29,344.801L1242.29,105.938L764.103,105.938Z"/> + </g> + <g transform="matrix(0.565324,0,0,0.565324,625.187,85.961)"> + <path d="M468.111,106.218L482.028,106.218L482.028,227.059L468.111,227.059L468.111,171.561L395.64,171.561L395.64,227.059L381.893,227.059L381.893,106.218L395.64,106.218L395.64,159.85L468.111,159.85L468.111,106.218Z" style="fill:rgb(242,242,242);fill-rule:nonzero;"/> + <path d="M524.288,222.816C518.179,219.196 513.455,214.047 510.117,207.372C506.779,200.696 505.11,192.889 505.11,183.95C505.11,175.012 506.779,167.204 510.117,160.529C513.455,153.853 518.179,148.705 524.288,145.084C530.398,141.463 537.47,139.653 545.504,139.653C553.537,139.653 560.609,141.463 566.719,145.084C572.829,148.705 577.552,153.853 580.89,160.529C584.228,167.204 585.897,175.012 585.897,183.95C585.897,192.889 584.228,200.696 580.89,207.372C577.552,214.047 572.829,219.196 566.719,222.816C560.609,226.437 553.537,228.247 545.504,228.247C537.47,228.247 530.398,226.437 524.288,222.816ZM565.021,208.475C569.547,202.874 571.81,194.699 571.81,183.95C571.81,173.541 569.491,165.479 564.852,159.765C560.213,154.051 553.763,151.194 545.504,151.194C537.131,151.194 530.625,154.051 525.986,159.765C521.347,165.479 519.027,173.541 519.027,183.95C519.027,194.699 521.318,202.874 525.901,208.475C530.483,214.076 537.018,216.876 545.504,216.876C553.99,216.876 560.496,214.076 565.021,208.475Z" style="fill:rgb(242,242,242);fill-rule:nonzero;"/> + <path d="M730.329,173.427L730.329,227.059L716.582,227.059L716.582,174.106C716.582,166.073 715.196,160.246 712.424,156.625C709.652,153.004 705.154,151.194 698.931,151.194C691.69,151.194 686.032,153.627 681.959,158.492C677.886,163.357 675.849,169.977 675.849,178.349L675.849,227.059L662.102,227.059L662.102,174.106C662.102,166.186 660.687,160.387 657.859,156.71C655.03,153.033 650.504,151.194 644.281,151.194C637.04,151.194 631.354,153.627 627.224,158.492C623.094,163.357 621.029,169.977 621.029,178.349L621.029,227.059L607.282,227.059L607.282,165.62C607.282,156.795 606.829,148.818 605.924,141.69L618.993,141.69L620.35,156.625C622.726,151.194 626.262,147.008 630.958,144.066C635.654,141.124 641.113,139.653 647.336,139.653C654.125,139.653 659.669,141.011 663.969,143.726C668.268,146.442 671.436,150.628 673.473,156.286C676.075,151.194 679.894,147.149 684.929,144.151C689.964,141.152 695.65,139.653 701.986,139.653C720.882,139.653 730.329,150.911 730.329,173.427Z" style="fill:rgb(242,242,242);fill-rule:nonzero;"/> + <path d="M827.919,183.95L765.292,183.95C765.405,194.812 767.923,203.015 772.844,208.56C777.766,214.104 784.923,216.876 794.314,216.876C804.271,216.876 813.436,213.538 821.809,206.862L826.391,216.876C822.657,220.384 817.877,223.156 812.05,225.192C806.223,227.229 800.254,228.247 794.144,228.247C780.793,228.247 770.327,224.315 762.746,216.452C755.165,208.588 751.375,197.811 751.375,184.12C751.375,175.408 753.072,167.685 756.466,160.953C759.861,154.221 764.613,148.988 770.723,145.254C776.833,141.52 783.791,139.653 791.599,139.653C802.913,139.653 811.795,143.359 818.245,150.77C824.694,158.181 827.919,168.392 827.919,181.404L827.919,183.95ZM774.372,156.795C769.903,161.094 767.046,167.148 765.801,174.955L815.529,174.955C814.85,166.922 812.502,160.812 808.486,156.625C804.469,152.439 798.897,150.345 791.768,150.345C784.64,150.345 778.841,152.495 774.372,156.795Z" style="fill:rgb(242,242,242);fill-rule:nonzero;"/> + <path d="M911.252,145.254C917.022,148.988 921.491,154.221 924.66,160.953C927.828,167.685 929.412,175.464 929.412,184.29C929.412,193.115 927.828,200.837 924.66,207.456C921.491,214.076 917.05,219.196 911.337,222.816C905.623,226.437 898.975,228.247 891.394,228.247C884.719,228.247 878.892,226.776 873.913,223.835C868.935,220.893 865.144,216.706 862.542,211.275L862.542,263.719L848.794,263.719L848.794,165.62C848.794,156.795 848.342,148.818 847.437,141.69L860.505,141.69L861.863,158.153C864.239,152.269 868.001,147.715 873.149,144.49C878.298,141.265 884.379,139.653 891.394,139.653C898.862,139.653 905.481,141.52 911.252,145.254ZM908.282,208.39C912.864,202.733 915.155,194.699 915.155,184.29C915.155,173.88 912.836,165.762 908.197,159.935C903.558,154.108 897.108,151.194 888.849,151.194C880.362,151.194 873.857,154.023 869.331,159.68C864.805,165.337 862.542,173.427 862.542,183.95C862.542,194.473 864.805,202.591 869.331,208.305C873.857,214.019 880.362,216.876 888.849,216.876C897.221,216.876 903.699,214.047 908.282,208.39Z" style="fill:rgb(242,242,242);fill-rule:nonzero;"/> + <path d="M1025.81,141.69L1025.81,227.059L1012.24,227.059L1012.24,211.615C1009.75,216.933 1005.98,221.034 1000.95,223.919C995.914,226.805 990.059,228.247 983.383,228.247C975.802,228.247 969.155,226.437 963.441,222.816C957.727,219.196 953.314,214.076 950.203,207.456C947.091,200.837 945.535,193.115 945.535,184.29C945.535,175.464 947.119,167.685 950.287,160.953C953.456,154.221 957.897,148.988 963.61,145.254C969.324,141.52 975.915,139.653 983.383,139.653C990.059,139.653 995.886,141.124 1000.86,144.066C1005.84,147.008 1009.63,151.138 1012.24,156.455L1012.24,141.69L1025.81,141.69ZM1005.45,208.305C1009.97,202.591 1012.24,194.473 1012.24,183.95C1012.24,173.427 1009.97,165.337 1005.45,159.68C1000.92,154.023 994.471,151.194 986.098,151.194C977.726,151.194 971.191,154.108 966.496,159.935C961.8,165.762 959.452,173.88 959.452,184.29C959.452,194.699 961.772,202.733 966.411,208.39C971.05,214.047 977.612,216.876 986.098,216.876C994.471,216.876 1000.92,214.019 1005.45,208.305Z" style="fill:rgb(242,242,242);fill-rule:nonzero;"/> + <path d="M1128.49,141.69L1128.49,226.38C1128.49,239.053 1125.24,248.642 1118.74,255.148C1112.23,261.654 1102.64,264.907 1089.97,264.907C1076.96,264.907 1065.75,261.965 1056.36,256.081L1058.74,244.88C1064.17,247.935 1069.29,250.141 1074.1,251.499C1078.91,252.857 1084.2,253.536 1089.97,253.536C1098.23,253.536 1104.45,251.358 1108.64,247.001C1112.82,242.645 1114.92,236.168 1114.92,227.568L1114.92,207.372C1112.31,212.803 1108.5,217.017 1103.46,220.016C1098.42,223.014 1092.46,224.513 1085.56,224.513C1078.09,224.513 1071.44,222.76 1065.61,219.252C1059.79,215.745 1055.29,210.766 1052.12,204.317C1048.95,197.867 1047.37,190.456 1047.37,182.083C1047.37,173.71 1048.95,166.299 1052.12,159.85C1055.29,153.4 1059.79,148.422 1065.61,144.914C1071.44,141.407 1078.09,139.653 1085.56,139.653C1092.34,139.653 1098.26,141.124 1103.29,144.066C1108.33,147.008 1112.14,151.138 1114.75,156.455L1114.75,141.69L1128.49,141.69ZM1107.7,204.741C1112.4,199.253 1114.75,191.701 1114.75,182.083C1114.75,172.466 1112.4,164.913 1107.7,159.426C1103.01,153.938 1096.53,151.194 1088.27,151.194C1079.9,151.194 1073.31,153.938 1068.5,159.426C1063.69,164.913 1061.29,172.466 1061.29,182.083C1061.29,191.701 1063.69,199.253 1068.5,204.741C1073.31,210.229 1079.9,212.972 1088.27,212.972C1096.53,212.972 1103.01,210.229 1107.7,204.741Z" style="fill:rgb(242,242,242);fill-rule:nonzero;"/> + <path d="M1226.42,183.95L1163.8,183.95C1163.91,194.812 1166.43,203.015 1171.35,208.56C1176.27,214.104 1183.43,216.876 1192.82,216.876C1202.78,216.876 1211.94,213.538 1220.31,206.862L1224.89,216.876C1221.16,220.384 1216.38,223.156 1210.55,225.192C1204.73,227.229 1198.76,228.247 1192.65,228.247C1179.3,228.247 1168.83,224.315 1161.25,216.452C1153.67,208.588 1149.88,197.811 1149.88,184.12C1149.88,175.408 1151.58,167.685 1154.97,160.953C1158.37,154.221 1163.12,148.988 1169.23,145.254C1175.34,141.52 1182.3,139.653 1190.1,139.653C1201.42,139.653 1210.3,143.359 1216.75,150.77C1223.2,158.181 1226.42,168.392 1226.42,181.404L1226.42,183.95ZM1172.88,156.795C1168.41,161.094 1165.55,167.148 1164.31,174.955L1214.03,174.955C1213.35,166.922 1211.01,160.812 1206.99,156.625C1202.97,152.439 1197.4,150.345 1190.27,150.345C1183.14,150.345 1177.35,152.495 1172.88,156.795Z" style="fill:rgb(242,242,242);fill-rule:nonzero;"/> + </g> + <g transform="matrix(0.303961,0,0,0.303961,833.43,229.447)"> + <path d="M-14.066,227.059L-4.731,106.218L17.333,106.218L9.016,209.069L65.533,209.069L64.176,227.059L-14.066,227.059Z" style="fill:rgb(242,242,242);fill-rule:nonzero;"/> + <path d="M79.111,227.059L85.9,141.35L107.115,141.35L100.326,227.059L79.111,227.059ZM87.597,102.484L111.188,102.484L109.661,123.36L86.07,123.36L87.597,102.484Z" style="fill:rgb(242,242,242);fill-rule:nonzero;"/> + <path d="M118.486,217.555L125.784,202.789C135.402,209.465 145.642,212.803 156.504,212.803C167.479,212.803 172.967,209.635 172.967,203.298C172.967,200.357 171.524,198.122 168.639,196.594C165.754,195.067 161.143,193.341 154.807,191.418C148.81,189.721 143.831,188.023 139.871,186.326C135.911,184.629 132.545,182.168 129.773,178.943C127.001,175.719 125.615,171.504 125.615,166.299C125.615,158.153 128.896,151.59 135.458,146.612C142.021,141.633 150.733,139.144 161.595,139.144C167.932,139.144 174.042,140.106 179.925,142.029C185.809,143.953 190.731,146.612 194.691,150.006L187.563,164.432C179.077,157.983 170.308,154.758 161.256,154.758C155.938,154.758 151.865,155.607 149.036,157.304C146.207,159.001 144.793,161.49 144.793,164.772C144.793,167.827 146.236,170.118 149.121,171.645C152.006,173.173 156.673,174.898 163.123,176.822C169.346,178.632 174.381,180.358 178.228,181.998C182.075,183.639 185.385,186.1 188.157,189.381C190.929,192.663 192.315,196.906 192.315,202.11C192.315,210.37 189.034,216.819 182.471,221.458C175.908,226.097 167.083,228.417 155.995,228.417C142.077,228.417 129.575,224.796 118.486,217.555Z" style="fill:rgb(242,242,242);fill-rule:nonzero;"/> + <path d="M237.121,195.661C236.329,205.731 240.572,210.766 249.85,210.766C252.453,210.766 255.394,210.37 258.676,209.578L257.318,226.211C253.584,227.568 248.945,228.247 243.401,228.247C234.462,228.247 227.617,225.899 222.865,221.204C218.112,216.508 215.736,209.691 215.736,200.753C215.736,199.055 215.793,197.754 215.906,196.849L218.961,157.304L202.498,157.304L203.856,141.35L220.149,141.35L221.846,120.475L243.57,113.346L241.364,141.35L264.276,141.35L262.919,157.304L240.176,157.304L237.121,195.661Z" style="fill:rgb(242,242,242);fill-rule:nonzero;"/> + <path d="M266.992,217.555L274.29,202.789C283.907,209.465 294.147,212.803 305.009,212.803C315.985,212.803 321.472,209.635 321.472,203.298C321.472,200.357 320.03,198.122 317.144,196.594C314.259,195.067 309.648,193.341 303.312,191.418C297.315,189.721 292.337,188.023 288.377,186.326C284.417,184.629 281.05,182.168 278.278,178.943C275.506,175.719 274.12,171.504 274.12,166.299C274.12,158.153 277.401,151.59 283.964,146.612C290.527,141.633 299.239,139.144 310.101,139.144C316.437,139.144 322.547,140.106 328.431,142.029C334.314,143.953 339.236,146.612 343.197,150.006L336.068,164.432C327.582,157.983 318.813,154.758 309.762,154.758C304.444,154.758 300.37,155.607 297.542,157.304C294.713,159.001 293.299,161.49 293.299,164.772C293.299,167.827 294.741,170.118 297.627,171.645C300.512,173.173 305.179,174.898 311.628,176.822C317.852,178.632 322.887,180.358 326.734,181.998C330.581,183.639 333.89,186.1 336.662,189.381C339.434,192.663 340.82,196.906 340.82,202.11C340.82,210.37 337.539,216.819 330.977,221.458C324.414,226.097 315.589,228.417 304.5,228.417C290.583,228.417 278.08,224.796 266.992,217.555Z" style="fill:rgb(242,242,242);fill-rule:nonzero;"/> + <path d="M401.241,213.142L406.502,202.45C412.499,207.541 418.609,211.162 424.832,213.312C431.055,215.462 438.297,216.537 446.556,216.537C456.287,216.537 463.783,214.641 469.044,210.851C474.306,207.06 476.936,201.714 476.936,194.812C476.936,190.739 475.664,187.429 473.118,184.884C470.572,182.338 467.234,180.329 463.104,178.859C458.974,177.388 453.458,175.86 446.556,174.276C437.278,172.239 429.641,170.033 423.644,167.657C417.647,165.281 412.782,161.858 409.048,157.389C405.314,152.92 403.447,147.064 403.447,139.823C403.447,132.921 405.258,126.839 408.878,121.578C412.499,116.316 417.619,112.215 424.238,109.273C430.857,106.331 438.58,104.86 447.405,104.86C455.778,104.86 463.585,106.162 470.826,108.764C478.068,111.366 484.178,115.157 489.156,120.135L483.725,130.828C478.068,125.962 472.326,122.398 466.499,120.135C460.672,117.872 454.307,116.741 447.405,116.741C438.014,116.741 430.659,118.749 425.341,122.766C420.023,126.783 417.364,132.299 417.364,139.314C417.364,145.424 419.684,150.006 424.323,153.061C428.962,156.116 436.09,158.775 445.708,161.038C456.117,163.527 464.292,165.818 470.232,167.912C476.173,170.005 481.123,173.173 485.083,177.416C489.043,181.659 491.023,187.288 491.023,194.303C491.023,201.092 489.213,207.06 485.592,212.209C481.971,217.357 476.795,221.345 470.063,224.174C463.33,227.003 455.438,228.417 446.387,228.417C427.491,228.417 412.443,223.325 401.241,213.142Z" style="fill:rgb(242,242,242);fill-rule:nonzero;"/> + <path d="M583.521,183.95L520.894,183.95C521.007,194.812 523.525,203.015 528.447,208.56C533.369,214.104 540.525,216.876 549.916,216.876C559.873,216.876 569.038,213.538 577.411,206.862L581.994,216.876C578.26,220.384 573.479,223.156 567.652,225.192C561.825,227.229 555.857,228.247 549.747,228.247C536.395,228.247 525.929,224.315 518.348,216.452C510.767,208.588 506.977,197.811 506.977,184.12C506.977,175.408 508.674,167.685 512.069,160.953C515.463,154.221 520.215,148.988 526.325,145.254C532.435,141.52 539.394,139.653 547.201,139.653C558.515,139.653 567.398,143.359 573.847,150.77C580.296,158.181 583.521,168.392 583.521,181.404L583.521,183.95ZM529.974,156.795C525.505,161.094 522.648,167.148 521.403,174.955L571.131,174.955C570.453,166.922 568.105,160.812 564.088,156.625C560.071,152.439 554.499,150.345 547.37,150.345C540.242,150.345 534.443,152.495 529.974,156.795Z" style="fill:rgb(242,242,242);fill-rule:nonzero;"/> + <path d="M618.568,222.816C612.402,219.196 607.65,214.076 604.312,207.456C600.974,200.837 599.305,193.115 599.305,184.29C599.305,175.464 601.002,167.685 604.397,160.953C607.791,154.221 612.628,148.988 618.908,145.254C625.187,141.52 632.514,139.653 640.887,139.653C646.657,139.653 652.23,140.643 657.604,142.623C662.979,144.603 667.42,147.347 670.927,150.855L666.345,161.038C662.045,157.643 657.887,155.154 653.87,153.57C649.853,151.986 645.752,151.194 641.565,151.194C632.853,151.194 626.008,154.108 621.029,159.935C616.051,165.762 613.562,173.88 613.562,184.29C613.562,194.586 616.023,202.591 620.944,208.305C625.866,214.019 632.74,216.876 641.565,216.876C645.752,216.876 649.853,216.084 653.87,214.5C657.887,212.916 662.045,210.427 666.345,207.032L670.927,217.215C667.306,220.61 662.752,223.297 657.265,225.277C651.777,227.257 646.091,228.247 640.208,228.247C631.948,228.247 624.735,226.437 618.568,222.816Z" style="fill:rgb(242,242,242);fill-rule:nonzero;"/> + <path d="M706.908,152.552L706.908,199.225C706.908,205.561 708.209,210.002 710.812,212.548C713.414,215.094 717.091,216.367 721.843,216.367C725.011,216.367 728.066,215.858 731.008,214.839L731.008,226.55C727.501,227.682 723.541,228.247 719.128,228.247C710.981,228.247 704.617,225.956 700.034,221.374C695.452,216.791 693.161,210.031 693.161,201.092L693.161,152.552L676.528,152.552L676.528,141.69L693.161,141.69L693.161,119.796L706.908,114.874L706.908,141.69L731.348,141.69L731.348,152.552L706.908,152.552Z" style="fill:rgb(242,242,242);fill-rule:nonzero;"/> + <path d="M747.98,227.059L747.98,141.69L761.728,141.69L761.728,227.059L747.98,227.059ZM746.623,105.539L763.425,105.539L763.425,121.154L746.623,121.154L746.623,105.539Z" style="fill:rgb(242,242,242);fill-rule:nonzero;"/> + <path d="M802.461,222.816C796.351,219.196 791.627,214.047 788.289,207.372C784.951,200.696 783.282,192.889 783.282,183.95C783.282,175.012 784.951,167.204 788.289,160.529C791.627,153.853 796.351,148.705 802.461,145.084C808.571,141.463 815.642,139.653 823.676,139.653C831.709,139.653 838.781,141.463 844.891,145.084C851.001,148.705 855.725,153.853 859.063,160.529C862.4,167.204 864.069,175.012 864.069,183.95C864.069,192.889 862.4,200.696 859.063,207.372C855.725,214.047 851.001,219.196 844.891,222.816C838.781,226.437 831.709,228.247 823.676,228.247C815.642,228.247 808.571,226.437 802.461,222.816ZM843.194,208.475C847.72,202.874 849.982,194.699 849.982,183.95C849.982,173.541 847.663,165.479 843.024,159.765C838.385,154.051 831.936,151.194 823.676,151.194C815.303,151.194 808.797,154.051 804.158,159.765C799.519,165.479 797.199,173.541 797.199,183.95C797.199,194.699 799.491,202.874 804.073,208.475C808.655,214.076 815.19,216.876 823.676,216.876C832.162,216.876 838.668,214.076 843.194,208.475Z" style="fill:rgb(242,242,242);fill-rule:nonzero;"/> + <path d="M958.773,173.427L958.773,227.059L945.026,227.059L945.026,174.106C945.026,166.186 943.442,160.387 940.274,156.71C937.106,153.033 932.127,151.194 925.338,151.194C917.418,151.194 911.082,153.627 906.33,158.492C901.578,163.357 899.201,169.92 899.201,178.18L899.201,227.059L885.454,227.059L885.454,165.62C885.454,156.795 885.002,148.818 884.096,141.69L897.165,141.69L898.523,156.965C901.125,151.42 905.029,147.149 910.233,144.151C915.438,141.152 921.378,139.653 928.054,139.653C948.534,139.653 958.773,150.911 958.773,173.427Z" style="fill:rgb(242,242,242);fill-rule:nonzero;"/> + <path d="M979.479,217.215L984.062,207.032C988.701,210.653 993.396,213.255 998.149,214.839C1002.9,216.423 1008.22,217.215 1014.1,217.215C1020.55,217.215 1025.44,216.112 1028.78,213.906C1032.12,211.7 1033.79,208.503 1033.79,204.317C1033.79,200.922 1032.66,198.207 1030.4,196.17C1028.13,194.133 1024.4,192.549 1019.19,191.418L1004.77,188.023C997.639,186.439 992.124,183.611 988.22,179.537C984.316,175.464 982.365,170.599 982.365,164.941C982.365,157.474 985.363,151.392 991.36,146.696C997.357,142.001 1005.28,139.653 1015.12,139.653C1021.12,139.653 1026.78,140.615 1032.09,142.538C1037.41,144.462 1041.88,147.234 1045.5,150.855L1040.92,160.868C1032.88,154.192 1024.29,150.855 1015.12,150.855C1009.01,150.855 1004.29,152.014 1000.95,154.334C997.611,156.653 995.942,159.906 995.942,164.093C995.942,167.6 996.989,170.373 999.082,172.409C1001.18,174.446 1004.54,176.03 1009.18,177.161L1023.61,180.725C1031.53,182.536 1037.41,185.336 1041.26,189.127C1045.11,192.917 1047.03,197.867 1047.03,203.977C1047.03,211.332 1044.03,217.215 1038.03,221.628C1032.04,226.041 1023.89,228.247 1013.59,228.247C999.224,228.247 987.852,224.57 979.479,217.215Z" style="fill:rgb(242,242,242);fill-rule:nonzero;"/> + <path d="M1207.25,227.059L1194.01,196L1130.87,196L1117.46,227.059L1103.04,227.059L1156.16,106.218L1168.38,106.218L1221.5,227.059L1207.25,227.059ZM1135.79,184.459L1189.08,184.459L1162.44,122.342L1135.79,184.459Z" style="fill:rgb(242,242,242);fill-rule:nonzero;"/> + <path d="M1256.29,209.578L1256.29,221.968C1256.29,226.72 1255.5,231.076 1253.92,235.036C1252.33,238.996 1249.67,242.843 1245.94,246.577L1239.49,241.655C1243.9,236.564 1246.39,231.698 1246.96,227.059L1238.81,227.059L1238.81,209.578L1256.29,209.578Z" style="fill:rgb(242,242,242);fill-rule:nonzero;"/> + <path d="M1411.08,175.379C1414.93,180.414 1416.85,186.666 1416.85,194.133C1416.85,204.656 1413.34,212.774 1406.33,218.488C1399.31,224.202 1389.41,227.059 1376.63,227.059L1326.39,227.059L1326.39,106.218L1374.93,106.218C1387.26,106.218 1396.85,108.962 1403.7,114.45C1410.54,119.937 1413.96,127.716 1413.96,137.786C1413.96,144.236 1412.3,149.808 1408.96,154.504C1405.62,159.199 1400.95,162.679 1394.96,164.941C1401.86,166.865 1407.23,170.344 1411.08,175.379ZM1340.14,159.85L1372.72,159.85C1381.77,159.85 1388.62,158.039 1393.26,154.419C1397.9,150.798 1400.22,145.48 1400.22,138.465C1400.22,124.661 1391.05,117.759 1372.72,117.759L1340.14,117.759L1340.14,159.85ZM1396.4,210.172C1400.87,206.608 1403.1,201.149 1403.1,193.794C1403.1,178.972 1393.88,171.561 1375.44,171.561L1340.14,171.561L1340.14,215.518L1375.44,215.518C1384.94,215.518 1391.93,213.736 1396.4,210.172Z" style="fill:rgb(242,242,242);fill-rule:nonzero;"/> + <path d="M1453.85,209.578L1453.85,221.968C1453.85,226.72 1453.06,231.076 1451.47,235.036C1449.89,238.996 1447.23,242.843 1443.5,246.577L1437.05,241.655C1441.46,236.564 1443.95,231.698 1444.51,227.059L1436.37,227.059L1436.37,209.578L1453.85,209.578Z" style="fill:rgb(242,242,242);fill-rule:nonzero;"/> + <path d="M1545.75,220.949C1537.32,215.971 1530.85,208.814 1526.32,199.48C1521.79,190.145 1519.53,179.141 1519.53,166.469C1519.53,153.796 1521.79,142.849 1526.32,133.628C1530.85,124.407 1537.32,117.307 1545.75,112.328C1554.18,107.35 1564.11,104.86 1575.54,104.86C1583.91,104.86 1591.58,106.133 1598.54,108.679C1605.49,111.225 1611.52,115.044 1616.61,120.135L1611.35,130.828C1605.58,125.849 1599.89,122.285 1594.29,120.135C1588.69,117.985 1582.5,116.911 1575.71,116.911C1562.47,116.911 1552.2,121.21 1544.9,129.809C1537.61,138.408 1533.96,150.628 1533.96,166.469C1533.96,182.423 1537.58,194.727 1544.82,203.383C1552.06,212.039 1562.36,216.367 1575.71,216.367C1582.5,216.367 1588.69,215.292 1594.29,213.142C1599.89,210.992 1605.58,207.428 1611.35,202.45L1616.61,213.142C1611.52,218.234 1605.49,222.052 1598.54,224.598C1591.58,227.144 1583.91,228.417 1575.54,228.417C1564.11,228.417 1554.18,225.928 1545.75,220.949Z" style="fill:rgb(242,242,242);fill-rule:nonzero;"/> + </g> + <g transform="matrix(1.17016,0,0,0.922959,-810.571,447.236)"> + <rect x="759.403" y="100.455" width="487.587" height="249.829" style="fill:rgb(201,23,126);"/> + <path d="M1246.99,350.284L759.403,350.284L759.403,100.455L1246.99,100.455L1246.99,350.284ZM764.103,106.414L764.103,344.325L1242.29,344.325L1242.29,106.414L764.103,106.414Z"/> + </g> + <g transform="matrix(0.313837,0,0,0.703144,-159.104,767.346)"> + <rect x="759.403" y="100.455" width="487.587" height="249.829" style="fill:rgb(0,168,138);"/> + <path d="M1246.99,350.284L759.403,350.284L759.403,100.455L1246.99,100.455L1246.99,350.284ZM776.928,108.277L776.928,342.462L1229.46,342.462L1229.46,108.277L776.928,108.277Z"/> + </g> + <g transform="matrix(0.313837,0,0,0.703144,49.662,767.346)"> + <rect x="759.403" y="100.455" width="487.587" height="249.829" style="fill:rgb(0,168,138);"/> + <path d="M1246.99,350.284L759.403,350.284L759.403,100.455L1246.99,100.455L1246.99,350.284ZM776.928,108.277L776.928,342.462L1229.46,342.462L1229.46,108.277L776.928,108.277Z"/> + </g> + <g transform="matrix(0.313837,0,0,0.703144,258.428,767.346)"> + <rect x="759.403" y="100.455" width="487.587" height="249.829" style="fill:rgb(0,168,138);"/> + <path d="M1246.99,350.284L759.403,350.284L759.403,100.455L1246.99,100.455L1246.99,350.284ZM776.928,108.277L776.928,342.462L1229.46,342.462L1229.46,108.277L776.928,108.277Z"/> + </g> + <g transform="matrix(0.313837,0,0,0.703144,552.302,769.023)"> + <rect x="759.403" y="100.455" width="487.587" height="249.829" style="fill:rgb(0,168,138);"/> + <path d="M1246.99,350.284L759.403,350.284L759.403,100.455L1246.99,100.455L1246.99,350.284ZM776.928,108.277L776.928,342.462L1229.46,342.462L1229.46,108.277L776.928,108.277Z"/> + </g> + <g transform="matrix(0.313837,0,0,0.703144,761.069,769.023)"> + <rect x="759.403" y="100.455" width="487.587" height="249.829" style="fill:rgb(0,168,138);"/> + <path d="M1246.99,350.284L759.403,350.284L759.403,100.455L1246.99,100.455L1246.99,350.284ZM776.928,108.277L776.928,342.462L1229.46,342.462L1229.46,108.277L776.928,108.277Z"/> + </g> + <g transform="matrix(0.313837,0,0,0.703144,974.126,769.023)"> + <rect x="759.403" y="100.455" width="487.587" height="249.829" style="fill:rgb(0,168,138);"/> + <path d="M1246.99,350.284L759.403,350.284L759.403,100.455L1246.99,100.455L1246.99,350.284ZM776.928,108.277L776.928,342.462L1229.46,342.462L1229.46,108.277L776.928,108.277Z"/> + </g> + <g transform="matrix(0.313837,0,0,0.703144,1269.17,766.789)"> + <rect x="759.403" y="100.455" width="487.587" height="249.829" style="fill:rgb(0,168,138);"/> + <path d="M1246.99,350.284L759.403,350.284L759.403,100.455L1246.99,100.455L1246.99,350.284ZM776.928,108.277L776.928,342.462L1229.46,342.462L1229.46,108.277L776.928,108.277Z"/> + </g> + <g transform="matrix(0.313837,0,0,0.703144,1477.94,766.789)"> + <rect x="759.403" y="100.455" width="487.587" height="249.829" style="fill:rgb(0,168,138);"/> + <path d="M1246.99,350.284L759.403,350.284L759.403,100.455L1246.99,100.455L1246.99,350.284ZM776.928,108.277L776.928,342.462L1229.46,342.462L1229.46,108.277L776.928,108.277Z"/> + </g> + <g transform="matrix(0.313837,0,0,0.703144,1686.7,766.789)"> + <rect x="759.403" y="100.455" width="487.587" height="249.829" style="fill:rgb(0,168,138);"/> + <path d="M1246.99,350.284L759.403,350.284L759.403,100.455L1246.99,100.455L1246.99,350.284ZM776.928,108.277L776.928,342.462L1229.46,342.462L1229.46,108.277L776.928,108.277Z"/> + </g> + <g transform="matrix(0.617288,0,0,0.617288,-133.676,514.244)"> + <path d="M435.015,213.142L440.277,202.45C446.274,207.541 452.383,211.162 458.607,213.312C464.83,215.462 472.071,216.537 480.331,216.537C490.061,216.537 497.557,214.641 502.819,210.851C508.08,207.06 510.711,201.714 510.711,194.812C510.711,190.739 509.438,187.429 506.892,184.884C504.346,182.338 501.008,180.329 496.879,178.859C492.749,177.388 487.233,175.86 480.331,174.276C471.053,172.239 463.415,170.033 457.419,167.657C451.422,165.281 446.556,161.858 442.823,157.389C439.089,152.92 437.222,147.064 437.222,139.823C437.222,132.921 439.032,126.839 442.653,121.578C446.274,116.316 451.393,112.215 458.013,109.273C464.632,106.331 472.354,104.86 481.179,104.86C489.552,104.86 497.359,106.162 504.601,108.764C511.842,111.366 517.952,115.157 522.931,120.135L517.5,130.828C511.842,125.962 506.1,122.398 500.273,120.135C494.446,117.872 488.081,116.741 481.179,116.741C471.788,116.741 464.434,118.749 459.116,122.766C453.798,126.783 451.139,132.299 451.139,139.314C451.139,145.424 453.458,150.006 458.097,153.061C462.736,156.116 469.865,158.775 479.482,161.038C489.892,163.527 498.067,165.818 504.007,167.912C509.947,170.005 514.897,173.173 518.857,177.416C522.818,181.659 524.798,187.288 524.798,194.303C524.798,201.092 522.987,207.06 519.367,212.209C515.746,217.357 510.569,221.345 503.837,224.174C497.105,227.003 489.213,228.417 480.161,228.417C461.266,228.417 446.217,223.325 435.015,213.142Z" style="fill:rgb(242,242,242);fill-rule:nonzero;"/> + <path d="M617.295,183.95L554.668,183.95C554.782,194.812 557.299,203.015 562.221,208.56C567.143,214.104 574.3,216.876 583.691,216.876C593.648,216.876 602.813,213.538 611.185,206.862L615.768,216.876C612.034,220.384 607.254,223.156 601.427,225.192C595.599,227.229 589.631,228.247 583.521,228.247C570.17,228.247 559.704,224.315 552.123,216.452C544.542,208.588 540.751,197.811 540.751,184.12C540.751,175.408 542.449,167.685 545.843,160.953C549.237,154.221 553.99,148.988 560.1,145.254C566.209,141.52 573.168,139.653 580.975,139.653C592.29,139.653 601.172,143.359 607.621,150.77C614.071,158.181 617.295,168.392 617.295,181.404L617.295,183.95ZM563.749,156.795C559.279,161.094 556.422,167.148 555.178,174.955L604.906,174.955C604.227,166.922 601.879,160.812 597.862,156.625C593.846,152.439 588.273,150.345 581.145,150.345C574.017,150.345 568.218,152.495 563.749,156.795Z" style="fill:rgb(242,242,242);fill-rule:nonzero;"/> + <path d="M652.343,222.816C646.176,219.196 641.424,214.076 638.086,207.456C634.748,200.837 633.079,193.115 633.079,184.29C633.079,175.464 634.777,167.685 638.171,160.953C641.565,154.221 646.403,148.988 652.682,145.254C658.962,141.52 666.288,139.653 674.661,139.653C680.432,139.653 686.004,140.643 691.378,142.623C696.753,144.603 701.194,147.347 704.702,150.855L700.119,161.038C695.82,157.643 691.661,155.154 687.645,153.57C683.628,151.986 679.526,151.194 675.34,151.194C666.628,151.194 659.782,154.108 654.804,159.935C649.825,165.762 647.336,173.88 647.336,184.29C647.336,194.586 649.797,202.591 654.719,208.305C659.641,214.019 666.514,216.876 675.34,216.876C679.526,216.876 683.628,216.084 687.645,214.5C691.661,212.916 695.82,210.427 700.119,207.032L704.702,217.215C701.081,220.61 696.527,223.297 691.039,225.277C685.551,227.257 679.866,228.247 673.982,228.247C665.722,228.247 658.509,226.437 652.343,222.816Z" style="fill:rgb(242,242,242);fill-rule:nonzero;"/> + <path d="M740.682,152.552L740.682,199.225C740.682,205.561 741.984,210.002 744.586,212.548C747.188,215.094 750.866,216.367 755.618,216.367C758.786,216.367 761.841,215.858 764.783,214.839L764.783,226.55C761.275,227.682 757.315,228.247 752.902,228.247C744.756,228.247 738.391,225.956 733.809,221.374C729.226,216.791 726.935,210.031 726.935,201.092L726.935,152.552L710.302,152.552L710.302,141.69L726.935,141.69L726.935,119.796L740.682,114.874L740.682,141.69L765.122,141.69L765.122,152.552L740.682,152.552Z" style="fill:rgb(242,242,242);fill-rule:nonzero;"/> + <path d="M781.755,227.059L781.755,141.69L795.502,141.69L795.502,227.059L781.755,227.059ZM780.397,105.539L797.199,105.539L797.199,121.154L780.397,121.154L780.397,105.539Z" style="fill:rgb(242,242,242);fill-rule:nonzero;"/> + <path d="M836.235,222.816C830.125,219.196 825.401,214.047 822.063,207.372C818.726,200.696 817.057,192.889 817.057,183.95C817.057,175.012 818.726,167.204 822.063,160.529C825.401,153.853 830.125,148.705 836.235,145.084C842.345,141.463 849.417,139.653 857.45,139.653C865.484,139.653 872.555,141.463 878.665,145.084C884.775,148.705 889.499,153.853 892.837,160.529C896.175,167.204 897.844,175.012 897.844,183.95C897.844,192.889 896.175,200.696 892.837,207.372C889.499,214.047 884.775,219.196 878.665,222.816C872.555,226.437 865.484,228.247 857.45,228.247C849.417,228.247 842.345,226.437 836.235,222.816ZM876.968,208.475C881.494,202.874 883.757,194.699 883.757,183.95C883.757,173.541 881.437,165.479 876.798,159.765C872.159,154.051 865.71,151.194 857.45,151.194C849.077,151.194 842.571,154.051 837.932,159.765C833.293,165.479 830.974,173.541 830.974,183.95C830.974,194.699 833.265,202.874 837.847,208.475C842.43,214.076 848.964,216.876 857.45,216.876C865.936,216.876 872.442,214.076 876.968,208.475Z" style="fill:rgb(242,242,242);fill-rule:nonzero;"/> + <path d="M992.548,173.427L992.548,227.059L978.8,227.059L978.8,174.106C978.8,166.186 977.216,160.387 974.048,156.71C970.88,153.033 965.902,151.194 959.113,151.194C951.193,151.194 944.856,153.627 940.104,158.492C935.352,163.357 932.976,169.92 932.976,178.18L932.976,227.059L919.229,227.059L919.229,165.62C919.229,156.795 918.776,148.818 917.871,141.69L930.939,141.69L932.297,156.965C934.899,151.42 938.803,147.149 944.008,144.151C949.213,141.152 955.153,139.653 961.828,139.653C982.308,139.653 992.548,150.911 992.548,173.427Z" style="fill:rgb(242,242,242);fill-rule:nonzero;"/> + <path d="M1156.84,227.059L1143.6,196L1080.46,196L1067.06,227.059L1052.63,227.059L1105.75,106.218L1117.97,106.218L1171.09,227.059L1156.84,227.059ZM1085.38,184.459L1138.68,184.459L1112.03,122.342L1085.38,184.459Z" style="fill:rgb(242,242,242);fill-rule:nonzero;"/> + </g> + <g transform="matrix(0.349245,0,0,0.349245,82.0207,649.5)"> + <path d="M127.289,227.059L137.391,98.622L165.712,98.622L157.234,204.15L214.598,204.15L212.794,227.059L127.289,227.059Z" style="fill:rgb(242,242,242);fill-rule:nonzero;"/> + <path d="M228.127,227.059L235.342,135.602L262.581,135.602L255.366,227.059L228.127,227.059ZM237.507,92.669L266.73,92.669L264.746,118.285L235.523,118.285L237.507,92.669Z" style="fill:rgb(242,242,242);fill-rule:nonzero;"/> + <path d="M272.142,217.318L280.981,198.377C286.032,201.865 291.443,204.541 297.216,206.405C302.988,208.269 308.761,209.201 314.533,209.201C319.584,209.201 323.312,208.479 325.717,207.036C328.122,205.593 329.325,203.669 329.325,201.264C329.325,198.738 327.912,196.754 325.086,195.311C322.26,193.868 317.66,192.184 311.286,190.26C304.672,188.456 299.26,186.652 295.051,184.848C290.842,183.044 287.204,180.369 284.138,176.821C281.071,173.273 279.538,168.673 279.538,163.021C279.538,157.128 281.191,151.957 284.498,147.508C287.805,143.058 292.496,139.571 298.569,137.045C304.642,134.52 311.587,133.257 319.404,133.257C326.258,133.257 332.963,134.279 339.517,136.324C346.071,138.368 351.573,141.134 356.023,144.622L347.364,162.841C342.914,159.594 338.224,157.128 333.294,155.445C328.363,153.761 323.553,152.919 318.862,152.919C313.932,152.919 310.204,153.641 307.678,155.084C305.153,156.527 303.89,158.511 303.89,161.037C303.89,163.683 305.393,165.787 308.4,167.351C311.406,168.914 315.976,170.537 322.109,172.221C328.724,174.145 334.105,176.009 338.254,177.813C342.403,179.617 346.011,182.293 349.078,185.84C352.144,189.388 353.677,193.988 353.677,199.64C353.677,208.66 350.1,215.725 342.944,220.836C335.789,225.947 326.138,228.502 313.992,228.502C298.358,228.502 284.408,224.774 272.142,217.318Z" style="fill:rgb(242,242,242);fill-rule:nonzero;"/> + <path d="M404.367,191.523C404.006,196.574 405.028,200.302 407.433,202.707C409.839,205.112 413.146,206.315 417.355,206.315C420.121,206.315 423.187,205.833 426.555,204.871L424.751,225.977C420.662,227.661 415.371,228.502 408.877,228.502C398.534,228.502 390.627,225.736 385.155,220.204C379.684,214.673 376.948,206.856 376.948,196.754C376.948,194.709 377.008,193.146 377.128,192.064L380.014,155.986L362.697,155.986L364.32,135.602L381.638,135.602L383.261,114.136L411.222,105.297L408.877,135.602L432.147,135.602L430.523,155.986L407.253,155.986L404.367,191.523Z" style="fill:rgb(242,242,242);fill-rule:nonzero;"/> + <path d="M433.409,217.318L442.248,198.377C447.299,201.865 452.711,204.541 458.483,206.405C464.256,208.269 470.028,209.201 475.801,209.201C480.852,209.201 484.58,208.479 486.985,207.036C489.39,205.593 490.593,203.669 490.593,201.264C490.593,198.738 489.18,196.754 486.354,195.311C483.527,193.868 478.928,192.184 472.554,190.26C465.94,188.456 460.528,186.652 456.319,184.848C452.11,183.044 448.472,180.369 445.405,176.821C442.339,173.273 440.805,168.673 440.805,163.021C440.805,157.128 442.459,151.957 445.766,147.508C449.073,143.058 453.763,139.571 459.836,137.045C465.909,134.52 472.854,133.257 480.671,133.257C487.526,133.257 494.231,134.279 500.785,136.324C507.339,138.368 512.841,141.134 517.29,144.622L508.632,162.841C504.182,159.594 499.492,157.128 494.561,155.445C489.631,153.761 484.82,152.919 480.13,152.919C475.199,152.919 471.471,153.641 468.946,155.084C466.421,156.527 465.158,158.511 465.158,161.037C465.158,163.683 466.661,165.787 469.668,167.351C472.674,168.914 477.244,170.537 483.377,172.221C489.991,174.145 495.373,176.009 499.522,177.813C503.671,179.617 507.279,182.293 510.345,185.84C513.412,189.388 514.945,193.988 514.945,199.64C514.945,208.66 511.367,215.725 504.212,220.836C497.057,225.947 487.406,228.502 475.26,228.502C459.626,228.502 445.676,224.774 433.409,217.318Z" style="fill:rgb(242,242,242);fill-rule:nonzero;"/> + <path d="M581.213,106.218L629.414,106.218C641.86,106.218 651.562,109.217 658.521,115.213C665.479,121.21 668.958,129.47 668.958,139.993C668.958,150.515 665.451,158.803 658.436,164.857C651.421,170.91 641.747,173.937 629.414,173.937L595.13,173.937L595.13,227.059L581.213,227.059L581.213,106.218ZM628.225,162.396C637.164,162.396 643.896,160.472 648.422,156.625C652.948,152.778 655.211,147.234 655.211,139.993C655.211,132.751 652.948,127.235 648.422,123.445C643.896,119.654 637.164,117.759 628.225,117.759L595.13,117.759L595.13,162.396L628.225,162.396Z" style="fill:rgb(242,242,242);fill-rule:nonzero;"/> + <path d="M762.475,141.69L762.475,227.059L748.897,227.059L748.897,211.615C746.408,216.933 742.646,221.034 737.61,223.919C732.575,226.805 726.72,228.247 720.044,228.247C712.464,228.247 705.816,226.437 700.102,222.816C694.388,219.196 689.976,214.076 686.864,207.456C683.752,200.837 682.197,193.115 682.197,184.29C682.197,175.464 683.781,167.685 686.949,160.953C690.117,154.221 694.558,148.988 700.272,145.254C705.986,141.52 712.577,139.653 720.044,139.653C726.72,139.653 732.547,141.124 737.526,144.066C742.504,147.008 746.295,151.138 748.897,156.455L748.897,141.69L762.475,141.69ZM742.108,208.305C746.634,202.591 748.897,194.473 748.897,183.95C748.897,173.427 746.634,165.337 742.108,159.68C737.582,154.023 731.133,151.194 722.76,151.194C714.387,151.194 707.853,154.108 703.157,159.935C698.462,165.762 696.114,173.88 696.114,184.29C696.114,194.699 698.433,202.733 703.072,208.39C707.711,214.047 714.274,216.876 722.76,216.876C731.133,216.876 737.582,214.019 742.108,208.305Z" style="fill:rgb(242,242,242);fill-rule:nonzero;"/> + <path d="M865.156,141.69L865.156,226.38C865.156,239.053 861.903,248.642 855.397,255.148C848.891,261.654 839.301,264.907 826.629,264.907C813.617,264.907 802.415,261.965 793.024,256.081L795.4,244.88C800.831,247.935 805.951,250.141 810.76,251.499C815.569,252.857 820.858,253.536 826.629,253.536C834.889,253.536 841.112,251.358 845.298,247.001C849.485,242.645 851.578,236.168 851.578,227.568L851.578,207.372C848.976,212.803 845.157,217.017 840.122,220.016C835.087,223.014 829.118,224.513 822.216,224.513C814.749,224.513 808.101,222.76 802.274,219.252C796.447,215.745 791.949,210.766 788.781,204.317C785.613,197.867 784.029,190.456 784.029,182.083C784.029,173.71 785.613,166.299 788.781,159.85C791.949,153.4 796.447,148.422 802.274,144.914C808.101,141.407 814.749,139.653 822.216,139.653C829.005,139.653 834.917,141.124 839.952,144.066C844.987,147.008 848.806,151.138 851.408,156.455L851.408,141.69L865.156,141.69ZM844.365,204.741C849.06,199.253 851.408,191.701 851.408,182.083C851.408,172.466 849.06,164.913 844.365,159.426C839.669,153.938 833.192,151.194 824.932,151.194C816.559,151.194 809.968,153.938 805.159,159.426C800.351,164.913 797.946,172.466 797.946,182.083C797.946,191.701 800.351,199.253 805.159,204.741C809.968,210.229 816.559,212.972 824.932,212.972C833.192,212.972 839.669,210.229 844.365,204.741Z" style="fill:rgb(242,242,242);fill-rule:nonzero;"/> + <path d="M963.084,183.95L900.457,183.95C900.571,194.812 903.088,203.015 908.01,208.56C912.932,214.104 920.089,216.876 929.48,216.876C939.437,216.876 948.602,213.538 956.974,206.862L961.557,216.876C957.823,220.384 953.043,223.156 947.216,225.192C941.388,227.229 935.42,228.247 929.31,228.247C915.959,228.247 905.493,224.315 897.912,216.452C890.331,208.588 886.54,197.811 886.54,184.12C886.54,175.408 888.238,167.685 891.632,160.953C895.026,154.221 899.779,148.988 905.889,145.254C911.998,141.52 918.957,139.653 926.764,139.653C938.079,139.653 946.961,143.359 953.41,150.77C959.86,158.181 963.084,168.392 963.084,181.404L963.084,183.95ZM909.538,156.795C905.068,161.094 902.211,167.148 900.967,174.955L950.695,174.955C950.016,166.922 947.668,160.812 943.651,156.625C939.635,152.439 934.062,150.345 926.934,150.345C919.806,150.345 914.007,152.495 909.538,156.795Z" style="fill:rgb(242,242,242);fill-rule:nonzero;"/> + <path d="M978.699,217.215L983.281,207.032C987.92,210.653 992.616,213.255 997.368,214.839C1002.12,216.423 1007.44,217.215 1013.32,217.215C1019.77,217.215 1024.66,216.112 1028,213.906C1031.34,211.7 1033.01,208.503 1033.01,204.317C1033.01,200.922 1031.88,198.207 1029.62,196.17C1027.35,194.133 1023.62,192.549 1018.41,191.418L1003.99,188.023C996.859,186.439 991.343,183.611 987.439,179.537C983.536,175.464 981.584,170.599 981.584,164.941C981.584,157.474 984.582,151.392 990.579,146.696C996.576,142.001 1004.5,139.653 1014.34,139.653C1020.34,139.653 1025.99,140.615 1031.31,142.538C1036.63,144.462 1041.1,147.234 1044.72,150.855L1040.14,160.868C1032.1,154.192 1023.5,150.855 1014.34,150.855C1008.23,150.855 1003.51,152.014 1000.17,154.334C996.831,156.653 995.162,159.906 995.162,164.093C995.162,167.6 996.208,170.373 998.301,172.409C1000.39,174.446 1003.76,176.03 1008.4,177.161L1022.83,180.725C1030.75,182.536 1036.63,185.336 1040.48,189.127C1044.32,192.917 1046.25,197.867 1046.25,203.977C1046.25,211.332 1043.25,217.215 1037.25,221.628C1031.26,226.041 1023.11,228.247 1012.81,228.247C998.443,228.247 987.072,224.57 978.699,217.215Z" style="fill:rgb(242,242,242);fill-rule:nonzero;"/> + <path d="M1161.66,215.349L1188.3,215.349L1188.3,227.059L1120.92,227.059L1120.92,215.349L1147.57,215.349L1147.57,123.53L1122.79,139.314L1122.79,125.906L1153.68,106.218L1161.66,106.218L1161.66,215.349Z" style="fill:rgb(242,242,242);fill-rule:nonzero;"/> + <path d="M1229.38,209.578L1229.38,221.968C1229.38,226.72 1228.58,231.076 1227,235.036C1225.42,238.996 1222.76,242.843 1219.02,246.577L1212.57,241.655C1216.99,236.564 1219.48,231.698 1220.04,227.059L1211.89,227.059L1211.89,209.578L1229.38,209.578Z" style="fill:rgb(242,242,242);fill-rule:nonzero;"/> + <path d="M1332.06,215.349L1332.06,227.059L1254.33,227.059L1254.33,216.537L1296.59,169.694C1302.24,163.357 1306.37,157.643 1308.98,152.552C1311.58,147.46 1312.88,142.369 1312.88,137.277C1312.88,130.601 1310.95,125.481 1307.11,121.917C1303.26,118.353 1297.77,116.571 1290.64,116.571C1279.1,116.571 1267.68,121.21 1256.36,130.488L1251.1,119.796C1255.85,115.27 1261.85,111.649 1269.09,108.934C1276.33,106.218 1283.63,104.86 1290.99,104.86C1302.07,104.86 1310.84,107.717 1317.29,113.431C1323.74,119.145 1326.97,126.867 1326.97,136.598C1326.97,143.5 1325.41,150.147 1322.3,156.54C1319.19,162.933 1314.01,170.09 1306.77,178.01L1272.32,215.349L1332.06,215.349Z" style="fill:rgb(242,242,242);fill-rule:nonzero;"/> + <path d="M1370.41,209.578L1370.41,221.968C1370.41,226.72 1369.62,231.076 1368.04,235.036C1366.45,238.996 1363.8,242.843 1360.06,246.577L1353.61,241.655C1358.02,236.564 1360.51,231.698 1361.08,227.059L1352.93,227.059L1352.93,209.578L1370.41,209.578Z" style="fill:rgb(242,242,242);fill-rule:nonzero;"/> + <path d="M1465.12,175.464C1468.85,180.443 1470.72,186.722 1470.72,194.303C1470.72,204.826 1467.15,213.114 1460.03,219.167C1452.9,225.221 1443.22,228.247 1431,228.247C1423.2,228.247 1415.7,226.946 1408.52,224.344C1401.33,221.741 1395.25,218.064 1390.27,213.312L1395.7,202.619C1406.9,211.898 1418.56,216.537 1430.66,216.537C1439.26,216.537 1445.8,214.613 1450.27,210.766C1454.74,206.919 1456.97,201.262 1456.97,193.794C1456.97,178.972 1447.69,171.561 1429.14,171.561L1415.22,171.561L1415.22,159.85L1426.42,159.85C1435.36,159.85 1442.21,157.87 1446.96,153.91C1451.71,149.949 1454.09,144.292 1454.09,136.938C1454.09,130.375 1452.13,125.34 1448.23,121.832C1444.33,118.325 1438.81,116.571 1431.68,116.571C1420.14,116.571 1408.71,121.21 1397.4,130.488L1392.14,119.796C1397,115.157 1402.97,111.508 1410.04,108.849C1417.12,106.19 1424.5,104.86 1432.19,104.86C1443.06,104.86 1451.74,107.632 1458.25,113.177C1464.75,118.721 1468,126.189 1468,135.58C1468,142.482 1466.31,148.535 1462.91,153.74C1459.52,158.945 1454.82,162.679 1448.83,164.941C1455.95,166.978 1461.38,170.486 1465.12,175.464Z" style="fill:rgb(242,242,242);fill-rule:nonzero;"/> + </g> + <g transform="matrix(1.17016,0,0,0.922959,-96.1682,447.236)"> + <rect x="759.403" y="100.455" width="487.587" height="249.829" style="fill:rgb(201,23,126);"/> + <path d="M1246.99,350.284L759.403,350.284L759.403,100.455L1246.99,100.455L1246.99,350.284ZM764.103,106.414L764.103,344.325L1242.29,344.325L1242.29,106.414L764.103,106.414Z"/> + </g> + <g transform="matrix(0.617288,0,0,0.617288,584.538,514.244)"> + <path d="M439.513,213.142L444.774,202.45C450.771,207.541 456.881,211.162 463.104,213.312C469.327,215.462 476.569,216.537 484.828,216.537C494.559,216.537 502.055,214.641 507.316,210.851C512.578,207.06 515.208,201.714 515.208,194.812C515.208,190.739 513.936,187.429 511.39,184.884C508.844,182.338 505.506,180.329 501.376,178.859C497.246,177.388 491.73,175.86 484.828,174.276C475.55,172.239 467.913,170.033 461.916,167.657C455.919,165.281 451.054,161.858 447.32,157.389C443.586,152.92 441.719,147.064 441.719,139.823C441.719,132.921 443.53,126.839 447.15,121.578C450.771,116.316 455.891,112.215 462.51,109.273C469.129,106.331 476.852,104.86 485.677,104.86C494.05,104.86 501.857,106.162 509.098,108.764C516.34,111.366 522.45,115.157 527.428,120.135L521.997,130.828C516.34,125.962 510.598,122.398 504.771,120.135C498.944,117.872 492.579,116.741 485.677,116.741C476.286,116.741 468.931,118.749 463.613,122.766C458.295,126.783 455.636,132.299 455.636,139.314C455.636,145.424 457.956,150.006 462.595,153.061C467.234,156.116 474.362,158.775 483.98,161.038C494.389,163.527 502.564,165.818 508.504,167.912C514.445,170.005 519.395,173.173 523.355,177.416C527.315,181.659 529.295,187.288 529.295,194.303C529.295,201.092 527.485,207.06 523.864,212.209C520.243,217.357 515.067,221.345 508.335,224.174C501.602,227.003 493.71,228.417 484.659,228.417C465.763,228.417 450.715,223.325 439.513,213.142Z" style="fill:rgb(242,242,242);fill-rule:nonzero;"/> + <path d="M621.793,183.95L559.166,183.95C559.279,194.812 561.797,203.015 566.719,208.56C571.641,214.104 578.797,216.876 588.188,216.876C598.145,216.876 607.31,213.538 615.683,206.862L620.266,216.876C616.532,220.384 611.751,223.156 605.924,225.192C600.097,227.229 594.129,228.247 588.019,228.247C574.667,228.247 564.201,224.315 556.62,216.452C549.039,208.588 545.249,197.811 545.249,184.12C545.249,175.408 546.946,167.685 550.341,160.953C553.735,154.221 558.487,148.988 564.597,145.254C570.707,141.52 577.666,139.653 585.473,139.653C596.787,139.653 605.67,143.359 612.119,150.77C618.568,158.181 621.793,168.392 621.793,181.404L621.793,183.95ZM568.246,156.795C563.777,161.094 560.92,167.148 559.675,174.955L609.403,174.955C608.725,166.922 606.377,160.812 602.36,156.625C598.343,152.439 592.771,150.345 585.643,150.345C578.514,150.345 572.715,152.495 568.246,156.795Z" style="fill:rgb(242,242,242);fill-rule:nonzero;"/> + <path d="M656.84,222.816C650.674,219.196 645.922,214.076 642.584,207.456C639.246,200.837 637.577,193.115 637.577,184.29C637.577,175.464 639.274,167.685 642.669,160.953C646.063,154.221 650.9,148.988 657.18,145.254C663.459,141.52 670.786,139.653 679.159,139.653C684.929,139.653 690.502,140.643 695.876,142.623C701.251,144.603 705.692,147.347 709.199,150.855L704.617,161.038C700.317,157.643 696.159,155.154 692.142,153.57C688.126,151.986 684.024,151.194 679.837,151.194C671.125,151.194 664.28,154.108 659.301,159.935C654.323,165.762 651.834,173.88 651.834,184.29C651.834,194.586 654.295,202.591 659.216,208.305C664.138,214.019 671.012,216.876 679.837,216.876C684.024,216.876 688.126,216.084 692.142,214.5C696.159,212.916 700.317,210.427 704.617,207.032L709.199,217.215C705.578,220.61 701.024,223.297 695.537,225.277C690.049,227.257 684.363,228.247 678.48,228.247C670.22,228.247 663.007,226.437 656.84,222.816Z" style="fill:rgb(242,242,242);fill-rule:nonzero;"/> + <path d="M745.18,152.552L745.18,199.225C745.18,205.561 746.481,210.002 749.084,212.548C751.686,215.094 755.363,216.367 760.115,216.367C763.283,216.367 766.338,215.858 769.28,214.839L769.28,226.55C765.773,227.682 761.813,228.247 757.4,228.247C749.253,228.247 742.889,225.956 738.306,221.374C733.724,216.791 731.433,210.031 731.433,201.092L731.433,152.552L714.8,152.552L714.8,141.69L731.433,141.69L731.433,119.796L745.18,114.874L745.18,141.69L769.62,141.69L769.62,152.552L745.18,152.552Z" style="fill:rgb(242,242,242);fill-rule:nonzero;"/> + <path d="M786.252,227.059L786.252,141.69L800,141.69L800,227.059L786.252,227.059ZM784.895,105.539L801.697,105.539L801.697,121.154L784.895,121.154L784.895,105.539Z" style="fill:rgb(242,242,242);fill-rule:nonzero;"/> + <path d="M840.733,222.816C834.623,219.196 829.899,214.047 826.561,207.372C823.223,200.696 821.554,192.889 821.554,183.95C821.554,175.012 823.223,167.204 826.561,160.529C829.899,153.853 834.623,148.705 840.733,145.084C846.843,141.463 853.914,139.653 861.948,139.653C869.981,139.653 877.053,141.463 883.163,145.084C889.273,148.705 893.997,153.853 897.335,160.529C900.672,167.204 902.341,175.012 902.341,183.95C902.341,192.889 900.672,200.696 897.335,207.372C893.997,214.047 889.273,219.196 883.163,222.816C877.053,226.437 869.981,228.247 861.948,228.247C853.914,228.247 846.843,226.437 840.733,222.816ZM881.466,208.475C885.992,202.874 888.254,194.699 888.254,183.95C888.254,173.541 885.935,165.479 881.296,159.765C876.657,154.051 870.208,151.194 861.948,151.194C853.575,151.194 847.069,154.051 842.43,159.765C837.791,165.479 835.471,173.541 835.471,183.95C835.471,194.699 837.763,202.874 842.345,208.475C846.928,214.076 853.462,216.876 861.948,216.876C870.434,216.876 876.94,214.076 881.466,208.475Z" style="fill:rgb(242,242,242);fill-rule:nonzero;"/> + <path d="M997.045,173.427L997.045,227.059L983.298,227.059L983.298,174.106C983.298,166.186 981.714,160.387 978.546,156.71C975.378,153.033 970.399,151.194 963.61,151.194C955.69,151.194 949.354,153.627 944.602,158.492C939.85,163.357 937.473,169.92 937.473,178.18L937.473,227.059L923.726,227.059L923.726,165.62C923.726,156.795 923.274,148.818 922.368,141.69L935.437,141.69L936.795,156.965C939.397,151.42 943.301,147.149 948.505,144.151C953.71,141.152 959.65,139.653 966.326,139.653C986.806,139.653 997.045,150.911 997.045,173.427Z" style="fill:rgb(242,242,242);fill-rule:nonzero;"/> + <path d="M1153.7,175.379C1157.55,180.414 1159.47,186.666 1159.47,194.133C1159.47,204.656 1155.96,212.774 1148.94,218.488C1141.93,224.202 1132.03,227.059 1119.24,227.059L1069.01,227.059L1069.01,106.218L1117.55,106.218C1129.88,106.218 1139.47,108.962 1146.32,114.45C1153.16,119.937 1156.58,127.716 1156.58,137.786C1156.58,144.236 1154.91,149.808 1151.58,154.504C1148.24,159.199 1143.57,162.679 1137.57,164.941C1144.48,166.865 1149.85,170.344 1153.7,175.379ZM1082.75,159.85L1115.34,159.85C1124.39,159.85 1131.24,158.039 1135.88,154.419C1140.52,150.798 1142.84,145.48 1142.84,138.465C1142.84,124.661 1133.67,117.759 1115.34,117.759L1082.75,117.759L1082.75,159.85ZM1139.02,210.172C1143.49,206.608 1145.72,201.149 1145.72,193.794C1145.72,178.972 1136.5,171.561 1118.06,171.561L1082.75,171.561L1082.75,215.518L1118.06,215.518C1127.56,215.518 1134.55,213.736 1139.02,210.172Z" style="fill:rgb(242,242,242);fill-rule:nonzero;"/> + </g> + <g transform="matrix(0.339095,0,0,0.339095,803.293,652.189)"> + <path d="M138.683,227.059L148.187,106.218L174.834,106.218L166.857,205.505L220.828,205.505L219.131,227.059L138.683,227.059Z" style="fill:rgb(242,242,242);fill-rule:nonzero;"/> + <path d="M233.557,227.059L240.346,141.011L265.974,141.011L259.185,227.059L233.557,227.059ZM242.382,100.617L269.877,100.617L268.01,124.718L240.515,124.718L242.382,100.617Z" style="fill:rgb(242,242,242);fill-rule:nonzero;"/> + <path d="M274.969,217.894L283.285,200.074C288.037,203.355 293.129,205.872 298.56,207.626C303.991,209.38 309.422,210.257 314.853,210.257C319.605,210.257 323.113,209.578 325.376,208.22C327.639,206.862 328.77,205.052 328.77,202.789C328.77,200.413 327.441,198.546 324.782,197.188C322.123,195.831 317.795,194.247 311.798,192.436C305.575,190.739 300.483,189.042 296.523,187.345C292.563,185.647 289.14,183.13 286.255,179.792C283.37,176.454 281.927,172.126 281.927,166.808C281.927,161.264 283.483,156.399 286.595,152.212C289.706,148.026 294.119,144.745 299.833,142.369C305.547,139.993 312.081,138.804 319.436,138.804C325.885,138.804 332.193,139.766 338.359,141.69C344.526,143.613 349.702,146.216 353.889,149.497L345.742,166.639C341.556,163.584 337.143,161.264 332.504,159.68C327.865,158.096 323.339,157.304 318.926,157.304C314.287,157.304 310.78,157.983 308.404,159.341C306.028,160.698 304.84,162.565 304.84,164.941C304.84,167.431 306.254,169.411 309.083,170.882C311.911,172.353 316.211,173.88 321.981,175.464C328.205,177.274 333.268,179.028 337.171,180.725C341.075,182.423 344.469,184.94 347.355,188.278C350.24,191.616 351.683,195.944 351.683,201.262C351.683,209.748 348.316,216.395 341.584,221.204C334.852,226.013 325.772,228.417 314.344,228.417C299.635,228.417 286.51,224.909 274.969,217.894Z" style="fill:rgb(242,242,242);fill-rule:nonzero;"/> + <path d="M399.374,193.624C399.035,198.376 399.996,201.884 402.259,204.147C404.522,206.41 407.634,207.541 411.594,207.541C414.196,207.541 417.082,207.089 420.25,206.184L418.552,226.041C414.705,227.625 409.727,228.417 403.617,228.417C393.886,228.417 386.447,225.815 381.299,220.61C376.151,215.405 373.577,208.051 373.577,198.546C373.577,196.623 373.633,195.152 373.746,194.133L376.462,160.189L360.169,160.189L361.696,141.011L377.989,141.011L379.517,120.814L405.823,112.498L403.617,141.011L425.511,141.011L423.984,160.189L402.09,160.189L399.374,193.624Z" style="fill:rgb(242,242,242);fill-rule:nonzero;"/> + <path d="M426.699,217.894L435.015,200.074C439.768,203.355 444.859,205.872 450.29,207.626C455.721,209.38 461.152,210.257 466.583,210.257C471.336,210.257 474.843,209.578 477.106,208.22C479.369,206.862 480.501,205.052 480.501,202.789C480.501,200.413 479.171,198.546 476.512,197.188C473.853,195.831 469.525,194.247 463.528,192.436C457.305,190.739 452.214,189.042 448.254,187.345C444.293,185.647 440.871,183.13 437.986,179.792C435.1,176.454 433.658,172.126 433.658,166.808C433.658,161.264 435.213,156.399 438.325,152.212C441.436,148.026 445.849,144.745 451.563,142.369C457.277,139.993 463.811,138.804 471.166,138.804C477.615,138.804 483.923,139.766 490.09,141.69C496.256,143.613 501.433,146.216 505.619,149.497L497.473,166.639C493.286,163.584 488.873,161.264 484.234,159.68C479.595,158.096 475.069,157.304 470.657,157.304C466.018,157.304 462.51,157.983 460.134,159.341C457.758,160.698 456.57,162.565 456.57,164.941C456.57,167.431 457.984,169.411 460.813,170.882C463.642,172.353 467.941,173.88 473.712,175.464C479.935,177.274 484.998,179.028 488.902,180.725C492.805,182.423 496.2,184.94 499.085,188.278C501.97,191.616 503.413,195.944 503.413,201.262C503.413,209.748 500.047,216.395 493.314,221.204C486.582,226.013 477.502,228.417 466.074,228.417C451.365,228.417 438.24,224.909 426.699,217.894Z" style="fill:rgb(242,242,242);fill-rule:nonzero;"/> + <path d="M569.264,106.218L617.465,106.218C629.911,106.218 639.614,109.217 646.572,115.213C653.531,121.21 657.01,129.47 657.01,139.993C657.01,150.515 653.502,158.803 646.487,164.857C639.472,170.91 629.798,173.937 617.465,173.937L583.182,173.937L583.182,227.059L569.264,227.059L569.264,106.218ZM616.277,162.396C625.216,162.396 631.948,160.472 636.474,156.625C641,152.778 643.263,147.234 643.263,139.993C643.263,132.751 641,127.235 636.474,123.445C631.948,119.654 625.216,117.759 616.277,117.759L583.182,117.759L583.182,162.396L616.277,162.396Z" style="fill:rgb(242,242,242);fill-rule:nonzero;"/> + <path d="M750.526,141.69L750.526,227.059L736.948,227.059L736.948,211.615C734.459,216.933 730.697,221.034 725.662,223.919C720.627,226.805 714.772,228.247 708.096,228.247C700.515,228.247 693.868,226.437 688.154,222.816C682.44,219.196 678.027,214.076 674.916,207.456C671.804,200.837 670.248,193.115 670.248,184.29C670.248,175.464 671.832,167.685 675,160.953C678.169,154.221 682.61,148.988 688.324,145.254C694.037,141.52 700.628,139.653 708.096,139.653C714.772,139.653 720.599,141.124 725.577,144.066C730.556,147.008 734.346,151.138 736.948,156.455L736.948,141.69L750.526,141.69ZM730.16,208.305C734.686,202.591 736.948,194.473 736.948,183.95C736.948,173.427 734.686,165.337 730.16,159.68C725.634,154.023 719.184,151.194 710.812,151.194C702.439,151.194 695.904,154.108 691.209,159.935C686.513,165.762 684.165,173.88 684.165,184.29C684.165,194.699 686.485,202.733 691.124,208.39C695.763,214.047 702.325,216.876 710.812,216.876C719.184,216.876 725.634,214.019 730.16,208.305Z" style="fill:rgb(242,242,242);fill-rule:nonzero;"/> + <path d="M853.207,141.69L853.207,226.38C853.207,239.053 849.954,248.642 843.448,255.148C836.942,261.654 827.353,264.907 814.681,264.907C801.669,264.907 790.467,261.965 781.076,256.081L783.452,244.88C788.883,247.935 794.003,250.141 798.812,251.499C803.62,252.857 808.91,253.536 814.681,253.536C822.94,253.536 829.163,251.358 833.35,247.001C837.536,242.645 839.63,236.168 839.63,227.568L839.63,207.372C837.027,212.803 833.208,217.017 828.173,220.016C823.138,223.014 817.17,224.513 810.268,224.513C802.8,224.513 796.153,222.76 790.326,219.252C784.499,215.745 780.001,210.766 776.833,204.317C773.665,197.867 772.081,190.456 772.081,182.083C772.081,173.71 773.665,166.299 776.833,159.85C780.001,153.4 784.499,148.422 790.326,144.914C796.153,141.407 802.8,139.653 810.268,139.653C817.057,139.653 822.969,141.124 828.004,144.066C833.039,147.008 836.857,151.138 839.46,156.455L839.46,141.69L853.207,141.69ZM832.416,204.741C837.112,199.253 839.46,191.701 839.46,182.083C839.46,172.466 837.112,164.913 832.416,159.426C827.721,153.938 821.243,151.194 812.983,151.194C804.61,151.194 798.02,153.938 793.211,159.426C788.402,164.913 785.998,172.466 785.998,182.083C785.998,191.701 788.402,199.253 793.211,204.741C798.02,210.229 804.61,212.972 812.983,212.972C821.243,212.972 827.721,210.229 832.416,204.741Z" style="fill:rgb(242,242,242);fill-rule:nonzero;"/> + <path d="M951.136,183.95L888.509,183.95C888.622,194.812 891.14,203.015 896.062,208.56C900.984,214.104 908.14,216.876 917.531,216.876C927.488,216.876 936.653,213.538 945.026,206.862L949.609,216.876C945.875,220.384 941.094,223.156 935.267,225.192C929.44,227.229 923.472,228.247 917.362,228.247C904.01,228.247 893.544,224.315 885.963,216.452C878.382,208.588 874.592,197.811 874.592,184.12C874.592,175.408 876.289,167.685 879.684,160.953C883.078,154.221 887.83,148.988 893.94,145.254C900.05,141.52 907.009,139.653 914.816,139.653C926.13,139.653 935.013,143.359 941.462,150.77C947.911,158.181 951.136,168.392 951.136,181.404L951.136,183.95ZM897.589,156.795C893.12,161.094 890.263,167.148 889.018,174.955L938.746,174.955C938.068,166.922 935.72,160.812 931.703,156.625C927.686,152.439 922.114,150.345 914.985,150.345C907.857,150.345 902.058,152.495 897.589,156.795Z" style="fill:rgb(242,242,242);fill-rule:nonzero;"/> + <path d="M966.75,217.215L971.333,207.032C975.972,210.653 980.667,213.255 985.42,214.839C990.172,216.423 995.49,217.215 1001.37,217.215C1007.82,217.215 1012.72,216.112 1016.05,213.906C1019.39,211.7 1021.06,208.503 1021.06,204.317C1021.06,200.922 1019.93,198.207 1017.67,196.17C1015.4,194.133 1011.67,192.549 1006.47,191.418L992.039,188.023C984.91,186.439 979.394,183.611 975.491,179.537C971.587,175.464 969.636,170.599 969.636,164.941C969.636,157.474 972.634,151.392 978.631,146.696C984.628,142.001 992.548,139.653 1002.39,139.653C1008.39,139.653 1014.05,140.615 1019.36,142.538C1024.68,144.462 1029.15,147.234 1032.77,150.855L1028.19,160.868C1020.16,154.192 1011.56,150.855 1002.39,150.855C996.282,150.855 991.558,152.014 988.22,154.334C984.882,156.653 983.213,159.906 983.213,164.093C983.213,167.6 984.26,170.373 986.353,172.409C988.446,174.446 991.812,176.03 996.451,177.161L1010.88,180.725C1018.8,182.536 1024.68,185.336 1028.53,189.127C1032.38,192.917 1034.3,197.867 1034.3,203.977C1034.3,211.332 1031.3,217.215 1025.3,221.628C1019.31,226.041 1011.16,228.247 1000.86,228.247C986.494,228.247 975.123,224.57 966.75,217.215Z" style="fill:rgb(242,242,242);fill-rule:nonzero;"/> + <path d="M1183.48,189.212L1183.48,200.753L1165.15,200.753L1165.15,227.059L1151.24,227.059L1151.24,200.753L1095.57,200.753L1095.57,190.23L1153.78,106.218L1165.15,106.218L1165.15,189.212L1183.48,189.212ZM1110,189.212L1151.24,189.212L1151.24,129.809L1110,189.212Z" style="fill:rgb(242,242,242);fill-rule:nonzero;"/> + <path d="M1217.43,209.578L1217.43,221.968C1217.43,226.72 1216.64,231.076 1215.05,235.036C1213.47,238.996 1210.81,242.843 1207.08,246.577L1200.62,241.655C1205.04,236.564 1207.53,231.698 1208.09,227.059L1199.95,227.059L1199.95,209.578L1217.43,209.578Z" style="fill:rgb(242,242,242);fill-rule:nonzero;"/> + <path d="M1304.24,156.031C1309.95,159.256 1314.34,163.753 1317.39,169.524C1320.45,175.294 1321.98,181.97 1321.98,189.551C1321.98,197.132 1320.31,203.864 1316.97,209.748C1313.63,215.631 1308.88,220.186 1302.71,223.41C1296.55,226.635 1289.33,228.247 1281.07,228.247C1273.72,228.247 1266.48,226.918 1259.35,224.259C1252.22,221.6 1246.22,217.951 1241.36,213.312L1246.62,202.619C1257.82,211.898 1269.31,216.537 1281.07,216.537C1289.56,216.537 1296.21,214.132 1301.02,209.323C1305.82,204.515 1308.23,197.98 1308.23,189.721C1308.23,181.687 1305.85,175.21 1301.1,170.288C1296.35,165.366 1290.01,162.905 1282.09,162.905C1270.55,162.905 1261.33,167.6 1254.43,176.992L1244.75,176.992L1244.75,106.218L1317.22,106.218L1317.22,117.759L1258.67,117.759L1258.67,160.868C1265.35,154.419 1273.89,151.194 1284.3,151.194C1291.88,151.194 1298.53,152.806 1304.24,156.031Z" style="fill:rgb(242,242,242);fill-rule:nonzero;"/> + <path d="M1358.47,209.578L1358.47,221.968C1358.47,226.72 1357.67,231.076 1356.09,235.036C1354.51,238.996 1351.85,242.843 1348.11,246.577L1341.66,241.655C1346.08,236.564 1348.57,231.698 1349.13,227.059L1340.98,227.059L1340.98,209.578L1358.47,209.578Z" style="fill:rgb(242,242,242);fill-rule:nonzero;"/> + <path d="M1444.94,156.031C1450.65,159.256 1455.09,163.782 1458.26,169.609C1461.43,175.436 1463.01,182.083 1463.01,189.551C1463.01,197.019 1461.35,203.694 1458.01,209.578C1454.67,215.462 1450.06,220.072 1444.17,223.41C1438.29,226.748 1431.62,228.417 1424.15,228.417C1409.55,228.417 1398.29,223.325 1390.37,213.142C1382.45,202.959 1378.49,188.476 1378.49,169.694C1378.49,156.116 1380.33,144.462 1384.01,134.731C1387.69,125.001 1393,117.589 1399.96,112.498C1406.92,107.406 1415.27,104.86 1425,104.86C1432.01,104.86 1438.83,106.162 1445.45,108.764C1452.07,111.366 1457.87,115.044 1462.84,119.796L1457.58,130.488C1451.92,125.736 1446.49,122.228 1441.29,119.965C1436.09,117.703 1430.77,116.571 1425.34,116.571C1414.93,116.571 1406.84,121.21 1401.07,130.488C1395.3,139.766 1392.41,152.778 1392.41,169.524L1392.41,172.07C1395.01,165.62 1399.26,160.529 1405.14,156.795C1411.02,153.061 1417.76,151.194 1425.34,151.194C1432.69,151.194 1439.22,152.806 1444.94,156.031ZM1442.14,209.323C1446.89,204.402 1449.27,197.867 1449.27,189.721C1449.27,181.687 1446.86,175.21 1442.05,170.288C1437.24,165.366 1430.99,162.905 1423.3,162.905C1415.38,162.905 1408.93,165.394 1403.95,170.373C1398.97,175.351 1396.48,181.8 1396.48,189.721C1396.48,197.754 1398.97,204.26 1403.95,209.239C1408.93,214.217 1415.43,216.706 1423.47,216.706C1431.16,216.706 1437.39,214.245 1442.14,209.323Z" style="fill:rgb(242,242,242);fill-rule:nonzero;"/> + </g> + <g transform="matrix(1.17016,0,0,0.922959,618.874,447.236)"> + <rect x="759.403" y="100.455" width="487.587" height="249.829" style="fill:rgb(201,23,126);"/> + <path d="M1246.99,350.284L759.403,350.284L759.403,100.455L1246.99,100.455L1246.99,350.284ZM764.103,106.414L764.103,344.325L1242.29,344.325L1242.29,106.414L764.103,106.414Z"/> + </g> + <g transform="matrix(0.617288,0,0,0.617288,1298.32,514.244)"> + <path d="M439.258,213.142L444.52,202.45C450.517,207.541 456.626,211.162 462.85,213.312C469.073,215.462 476.314,216.537 484.574,216.537C494.304,216.537 501.8,214.641 507.062,210.851C512.323,207.06 514.954,201.714 514.954,194.812C514.954,190.739 513.681,187.429 511.135,184.884C508.589,182.338 505.251,180.329 501.122,178.859C496.992,177.388 491.476,175.86 484.574,174.276C475.296,172.239 467.658,170.033 461.662,167.657C455.665,165.281 450.799,161.858 447.066,157.389C443.332,152.92 441.465,147.064 441.465,139.823C441.465,132.921 443.275,126.839 446.896,121.578C450.517,116.316 455.636,112.215 462.256,109.273C468.875,106.331 476.597,104.86 485.422,104.86C493.795,104.86 501.602,106.162 508.844,108.764C516.085,111.366 522.195,115.157 527.174,120.135L521.743,130.828C516.085,125.962 510.343,122.398 504.516,120.135C498.689,117.872 492.324,116.741 485.422,116.741C476.031,116.741 468.677,118.749 463.359,122.766C458.041,126.783 455.382,132.299 455.382,139.314C455.382,145.424 457.701,150.006 462.34,153.061C466.979,156.116 474.108,158.775 483.725,161.038C494.135,163.527 502.31,165.818 508.25,167.912C514.19,170.005 519.14,173.173 523.1,177.416C527.061,181.659 529.041,187.288 529.041,194.303C529.041,201.092 527.23,207.06 523.61,212.209C519.989,217.357 514.812,221.345 508.08,224.174C501.348,227.003 493.456,228.417 484.404,228.417C465.509,228.417 450.46,223.325 439.258,213.142Z" style="fill:rgb(242,242,242);fill-rule:nonzero;"/> + <path d="M621.538,183.95L558.911,183.95C559.025,194.812 561.542,203.015 566.464,208.56C571.386,214.104 578.543,216.876 587.934,216.876C597.891,216.876 607.056,213.538 615.428,206.862L620.011,216.876C616.277,220.384 611.497,223.156 605.67,225.192C599.842,227.229 593.874,228.247 587.764,228.247C574.413,228.247 563.947,224.315 556.366,216.452C548.785,208.588 544.994,197.811 544.994,184.12C544.994,175.408 546.692,167.685 550.086,160.953C553.48,154.221 558.233,148.988 564.343,145.254C570.453,141.52 577.411,139.653 585.218,139.653C596.533,139.653 605.415,143.359 611.864,150.77C618.314,158.181 621.538,168.392 621.538,181.404L621.538,183.95ZM567.992,156.795C563.522,161.094 560.665,167.148 559.421,174.955L609.149,174.955C608.47,166.922 606.122,160.812 602.105,156.625C598.089,152.439 592.516,150.345 585.388,150.345C578.26,150.345 572.461,152.495 567.992,156.795Z" style="fill:rgb(242,242,242);fill-rule:nonzero;"/> + <path d="M656.586,222.816C650.419,219.196 645.667,214.076 642.329,207.456C638.991,200.837 637.322,193.115 637.322,184.29C637.322,175.464 639.02,167.685 642.414,160.953C645.808,154.221 650.646,148.988 656.925,145.254C663.205,141.52 670.531,139.653 678.904,139.653C684.675,139.653 690.247,140.643 695.622,142.623C700.996,144.603 705.437,147.347 708.945,150.855L704.362,161.038C700.063,157.643 695.904,155.154 691.888,153.57C687.871,151.986 683.769,151.194 679.583,151.194C670.871,151.194 664.025,154.108 659.047,159.935C654.068,165.762 651.579,173.88 651.579,184.29C651.579,194.586 654.04,202.591 658.962,208.305C663.884,214.019 670.757,216.876 679.583,216.876C683.769,216.876 687.871,216.084 691.888,214.5C695.904,212.916 700.063,210.427 704.362,207.032L708.945,217.215C705.324,220.61 700.77,223.297 695.282,225.277C689.794,227.257 684.109,228.247 678.225,228.247C669.965,228.247 662.752,226.437 656.586,222.816Z" style="fill:rgb(242,242,242);fill-rule:nonzero;"/> + <path d="M744.925,152.552L744.925,199.225C744.925,205.561 746.227,210.002 748.829,212.548C751.431,215.094 755.109,216.367 759.861,216.367C763.029,216.367 766.084,215.858 769.026,214.839L769.026,226.55C765.518,227.682 761.558,228.247 757.145,228.247C748.999,228.247 742.634,225.956 738.052,221.374C733.469,216.791 731.178,210.031 731.178,201.092L731.178,152.552L714.545,152.552L714.545,141.69L731.178,141.69L731.178,119.796L744.925,114.874L744.925,141.69L769.365,141.69L769.365,152.552L744.925,152.552Z" style="fill:rgb(242,242,242);fill-rule:nonzero;"/> + <path d="M785.998,227.059L785.998,141.69L799.745,141.69L799.745,227.059L785.998,227.059ZM784.64,105.539L801.442,105.539L801.442,121.154L784.64,121.154L784.64,105.539Z" style="fill:rgb(242,242,242);fill-rule:nonzero;"/> + <path d="M840.478,222.816C834.368,219.196 829.644,214.047 826.306,207.372C822.969,200.696 821.3,192.889 821.3,183.95C821.3,175.012 822.969,167.204 826.306,160.529C829.644,153.853 834.368,148.705 840.478,145.084C846.588,141.463 853.66,139.653 861.693,139.653C869.727,139.653 876.798,141.463 882.908,145.084C889.018,148.705 893.742,153.853 897.08,160.529C900.418,167.204 902.087,175.012 902.087,183.95C902.087,192.889 900.418,200.696 897.08,207.372C893.742,214.047 889.018,219.196 882.908,222.816C876.798,226.437 869.727,228.247 861.693,228.247C853.66,228.247 846.588,226.437 840.478,222.816ZM881.211,208.475C885.737,202.874 888,194.699 888,183.95C888,173.541 885.68,165.479 881.041,159.765C876.402,154.051 869.953,151.194 861.693,151.194C853.32,151.194 846.814,154.051 842.175,159.765C837.536,165.479 835.217,173.541 835.217,183.95C835.217,194.699 837.508,202.874 842.09,208.475C846.673,214.076 853.207,216.876 861.693,216.876C870.179,216.876 876.685,214.076 881.211,208.475Z" style="fill:rgb(242,242,242);fill-rule:nonzero;"/> + <path d="M996.791,173.427L996.791,227.059L983.043,227.059L983.043,174.106C983.043,166.186 981.459,160.387 978.291,156.71C975.123,153.033 970.145,151.194 963.356,151.194C955.436,151.194 949.099,153.627 944.347,158.492C939.595,163.357 937.219,169.92 937.219,178.18L937.219,227.059L923.472,227.059L923.472,165.62C923.472,156.795 923.019,148.818 922.114,141.69L935.182,141.69L936.54,156.965C939.142,151.42 943.046,147.149 948.251,144.151C953.456,141.152 959.396,139.653 966.071,139.653C986.551,139.653 996.791,150.911 996.791,173.427Z" style="fill:rgb(242,242,242);fill-rule:nonzero;"/> + <path d="M1090.56,220.949C1082.13,215.971 1075.65,208.814 1071.13,199.48C1066.6,190.145 1064.34,179.141 1064.34,166.469C1064.34,153.796 1066.6,142.849 1071.13,133.628C1075.65,124.407 1082.13,117.307 1090.56,112.328C1098.99,107.35 1108.92,104.86 1120.35,104.86C1128.72,104.86 1136.39,106.133 1143.35,108.679C1150.3,111.225 1156.33,115.044 1161.42,120.135L1156.16,130.828C1150.39,125.849 1144.7,122.285 1139.1,120.135C1133.5,117.985 1127.31,116.911 1120.52,116.911C1107.28,116.911 1097.01,121.21 1089.71,129.809C1082.41,138.408 1078.77,150.628 1078.77,166.469C1078.77,182.423 1082.39,194.727 1089.63,203.383C1096.87,212.039 1107.17,216.367 1120.52,216.367C1127.31,216.367 1133.5,215.292 1139.1,213.142C1144.7,210.992 1150.39,207.428 1156.16,202.45L1161.42,213.142C1156.33,218.234 1150.3,222.052 1143.35,224.598C1136.39,227.144 1128.72,228.417 1120.35,228.417C1108.92,228.417 1098.99,225.928 1090.56,220.949Z" style="fill:rgb(242,242,242);fill-rule:nonzero;"/> + </g> + <g transform="matrix(0.347283,0,0,0.347283,1511.01,651.331)"> + <path d="M138.683,227.059L148.187,106.218L174.834,106.218L166.857,205.505L220.828,205.505L219.131,227.059L138.683,227.059Z" style="fill:rgb(242,242,242);fill-rule:nonzero;"/> + <path d="M233.557,227.059L240.346,141.011L265.974,141.011L259.185,227.059L233.557,227.059ZM242.382,100.617L269.877,100.617L268.01,124.718L240.515,124.718L242.382,100.617Z" style="fill:rgb(242,242,242);fill-rule:nonzero;"/> + <path d="M274.969,217.894L283.285,200.074C288.037,203.355 293.129,205.872 298.56,207.626C303.991,209.38 309.422,210.257 314.853,210.257C319.605,210.257 323.113,209.578 325.376,208.22C327.639,206.862 328.77,205.052 328.77,202.789C328.77,200.413 327.441,198.546 324.782,197.188C322.123,195.831 317.795,194.247 311.798,192.436C305.575,190.739 300.483,189.042 296.523,187.345C292.563,185.647 289.14,183.13 286.255,179.792C283.37,176.454 281.927,172.126 281.927,166.808C281.927,161.264 283.483,156.399 286.595,152.212C289.706,148.026 294.119,144.745 299.833,142.369C305.547,139.993 312.081,138.804 319.436,138.804C325.885,138.804 332.193,139.766 338.359,141.69C344.526,143.613 349.702,146.216 353.889,149.497L345.742,166.639C341.556,163.584 337.143,161.264 332.504,159.68C327.865,158.096 323.339,157.304 318.926,157.304C314.287,157.304 310.78,157.983 308.404,159.341C306.028,160.698 304.84,162.565 304.84,164.941C304.84,167.431 306.254,169.411 309.083,170.882C311.911,172.353 316.211,173.88 321.981,175.464C328.205,177.274 333.268,179.028 337.171,180.725C341.075,182.423 344.469,184.94 347.355,188.278C350.24,191.616 351.683,195.944 351.683,201.262C351.683,209.748 348.316,216.395 341.584,221.204C334.852,226.013 325.772,228.417 314.344,228.417C299.635,228.417 286.51,224.909 274.969,217.894Z" style="fill:rgb(242,242,242);fill-rule:nonzero;"/> + <path d="M399.374,193.624C399.035,198.376 399.996,201.884 402.259,204.147C404.522,206.41 407.634,207.541 411.594,207.541C414.196,207.541 417.082,207.089 420.25,206.184L418.552,226.041C414.705,227.625 409.727,228.417 403.617,228.417C393.886,228.417 386.447,225.815 381.299,220.61C376.151,215.405 373.577,208.051 373.577,198.546C373.577,196.623 373.633,195.152 373.746,194.133L376.462,160.189L360.169,160.189L361.696,141.011L377.989,141.011L379.517,120.814L405.823,112.498L403.617,141.011L425.511,141.011L423.984,160.189L402.09,160.189L399.374,193.624Z" style="fill:rgb(242,242,242);fill-rule:nonzero;"/> + <path d="M426.699,217.894L435.015,200.074C439.768,203.355 444.859,205.872 450.29,207.626C455.721,209.38 461.152,210.257 466.583,210.257C471.336,210.257 474.843,209.578 477.106,208.22C479.369,206.862 480.501,205.052 480.501,202.789C480.501,200.413 479.171,198.546 476.512,197.188C473.853,195.831 469.525,194.247 463.528,192.436C457.305,190.739 452.214,189.042 448.254,187.345C444.293,185.647 440.871,183.13 437.986,179.792C435.1,176.454 433.658,172.126 433.658,166.808C433.658,161.264 435.213,156.399 438.325,152.212C441.436,148.026 445.849,144.745 451.563,142.369C457.277,139.993 463.811,138.804 471.166,138.804C477.615,138.804 483.923,139.766 490.09,141.69C496.256,143.613 501.433,146.216 505.619,149.497L497.473,166.639C493.286,163.584 488.873,161.264 484.234,159.68C479.595,158.096 475.069,157.304 470.657,157.304C466.018,157.304 462.51,157.983 460.134,159.341C457.758,160.698 456.57,162.565 456.57,164.941C456.57,167.431 457.984,169.411 460.813,170.882C463.642,172.353 467.941,173.88 473.712,175.464C479.935,177.274 484.998,179.028 488.902,180.725C492.805,182.423 496.2,184.94 499.085,188.278C501.97,191.616 503.413,195.944 503.413,201.262C503.413,209.748 500.047,216.395 493.314,221.204C486.582,226.013 477.502,228.417 466.074,228.417C451.365,228.417 438.24,224.909 426.699,217.894Z" style="fill:rgb(242,242,242);fill-rule:nonzero;"/> + <path d="M569.264,106.218L617.465,106.218C629.911,106.218 639.614,109.217 646.572,115.213C653.531,121.21 657.01,129.47 657.01,139.993C657.01,150.515 653.502,158.803 646.487,164.857C639.472,170.91 629.798,173.937 617.465,173.937L583.182,173.937L583.182,227.059L569.264,227.059L569.264,106.218ZM616.277,162.396C625.216,162.396 631.948,160.472 636.474,156.625C641,152.778 643.263,147.234 643.263,139.993C643.263,132.751 641,127.235 636.474,123.445C631.948,119.654 625.216,117.759 616.277,117.759L583.182,117.759L583.182,162.396L616.277,162.396Z" style="fill:rgb(242,242,242);fill-rule:nonzero;"/> + <path d="M750.526,141.69L750.526,227.059L736.948,227.059L736.948,211.615C734.459,216.933 730.697,221.034 725.662,223.919C720.627,226.805 714.772,228.247 708.096,228.247C700.515,228.247 693.868,226.437 688.154,222.816C682.44,219.196 678.027,214.076 674.916,207.456C671.804,200.837 670.248,193.115 670.248,184.29C670.248,175.464 671.832,167.685 675,160.953C678.169,154.221 682.61,148.988 688.324,145.254C694.037,141.52 700.628,139.653 708.096,139.653C714.772,139.653 720.599,141.124 725.577,144.066C730.556,147.008 734.346,151.138 736.948,156.455L736.948,141.69L750.526,141.69ZM730.16,208.305C734.686,202.591 736.948,194.473 736.948,183.95C736.948,173.427 734.686,165.337 730.16,159.68C725.634,154.023 719.184,151.194 710.812,151.194C702.439,151.194 695.904,154.108 691.209,159.935C686.513,165.762 684.165,173.88 684.165,184.29C684.165,194.699 686.485,202.733 691.124,208.39C695.763,214.047 702.325,216.876 710.812,216.876C719.184,216.876 725.634,214.019 730.16,208.305Z" style="fill:rgb(242,242,242);fill-rule:nonzero;"/> + <path d="M853.207,141.69L853.207,226.38C853.207,239.053 849.954,248.642 843.448,255.148C836.942,261.654 827.353,264.907 814.681,264.907C801.669,264.907 790.467,261.965 781.076,256.081L783.452,244.88C788.883,247.935 794.003,250.141 798.812,251.499C803.62,252.857 808.91,253.536 814.681,253.536C822.94,253.536 829.163,251.358 833.35,247.001C837.536,242.645 839.63,236.168 839.63,227.568L839.63,207.372C837.027,212.803 833.208,217.017 828.173,220.016C823.138,223.014 817.17,224.513 810.268,224.513C802.8,224.513 796.153,222.76 790.326,219.252C784.499,215.745 780.001,210.766 776.833,204.317C773.665,197.867 772.081,190.456 772.081,182.083C772.081,173.71 773.665,166.299 776.833,159.85C780.001,153.4 784.499,148.422 790.326,144.914C796.153,141.407 802.8,139.653 810.268,139.653C817.057,139.653 822.969,141.124 828.004,144.066C833.039,147.008 836.857,151.138 839.46,156.455L839.46,141.69L853.207,141.69ZM832.416,204.741C837.112,199.253 839.46,191.701 839.46,182.083C839.46,172.466 837.112,164.913 832.416,159.426C827.721,153.938 821.243,151.194 812.983,151.194C804.61,151.194 798.02,153.938 793.211,159.426C788.402,164.913 785.998,172.466 785.998,182.083C785.998,191.701 788.402,199.253 793.211,204.741C798.02,210.229 804.61,212.972 812.983,212.972C821.243,212.972 827.721,210.229 832.416,204.741Z" style="fill:rgb(242,242,242);fill-rule:nonzero;"/> + <path d="M951.136,183.95L888.509,183.95C888.622,194.812 891.14,203.015 896.062,208.56C900.984,214.104 908.14,216.876 917.531,216.876C927.488,216.876 936.653,213.538 945.026,206.862L949.609,216.876C945.875,220.384 941.094,223.156 935.267,225.192C929.44,227.229 923.472,228.247 917.362,228.247C904.01,228.247 893.544,224.315 885.963,216.452C878.382,208.588 874.592,197.811 874.592,184.12C874.592,175.408 876.289,167.685 879.684,160.953C883.078,154.221 887.83,148.988 893.94,145.254C900.05,141.52 907.009,139.653 914.816,139.653C926.13,139.653 935.013,143.359 941.462,150.77C947.911,158.181 951.136,168.392 951.136,181.404L951.136,183.95ZM897.589,156.795C893.12,161.094 890.263,167.148 889.018,174.955L938.746,174.955C938.068,166.922 935.72,160.812 931.703,156.625C927.686,152.439 922.114,150.345 914.985,150.345C907.857,150.345 902.058,152.495 897.589,156.795Z" style="fill:rgb(242,242,242);fill-rule:nonzero;"/> + <path d="M966.75,217.215L971.333,207.032C975.972,210.653 980.667,213.255 985.42,214.839C990.172,216.423 995.49,217.215 1001.37,217.215C1007.82,217.215 1012.72,216.112 1016.05,213.906C1019.39,211.7 1021.06,208.503 1021.06,204.317C1021.06,200.922 1019.93,198.207 1017.67,196.17C1015.4,194.133 1011.67,192.549 1006.47,191.418L992.039,188.023C984.91,186.439 979.394,183.611 975.491,179.537C971.587,175.464 969.636,170.599 969.636,164.941C969.636,157.474 972.634,151.392 978.631,146.696C984.628,142.001 992.548,139.653 1002.39,139.653C1008.39,139.653 1014.05,140.615 1019.36,142.538C1024.68,144.462 1029.15,147.234 1032.77,150.855L1028.19,160.868C1020.16,154.192 1011.56,150.855 1002.39,150.855C996.282,150.855 991.558,152.014 988.22,154.334C984.882,156.653 983.213,159.906 983.213,164.093C983.213,167.6 984.26,170.373 986.353,172.409C988.446,174.446 991.812,176.03 996.451,177.161L1010.88,180.725C1018.8,182.536 1024.68,185.336 1028.53,189.127C1032.38,192.917 1034.3,197.867 1034.3,203.977C1034.3,211.332 1031.3,217.215 1025.3,221.628C1019.31,226.041 1011.16,228.247 1000.86,228.247C986.494,228.247 975.123,224.57 966.75,217.215Z" style="fill:rgb(242,242,242);fill-rule:nonzero;"/> + <path d="M1098.28,106.218L1178.05,106.218L1178.05,116.571L1121.37,227.059L1106.43,227.059L1162.78,117.929L1098.28,117.929L1098.28,106.218Z" style="fill:rgb(242,242,242);fill-rule:nonzero;"/> + <path d="M1217.43,209.578L1217.43,221.968C1217.43,226.72 1216.64,231.076 1215.05,235.036C1213.47,238.996 1210.81,242.843 1207.08,246.577L1200.62,241.655C1205.04,236.564 1207.53,231.698 1208.09,227.059L1199.95,227.059L1199.95,209.578L1217.43,209.578Z" style="fill:rgb(242,242,242);fill-rule:nonzero;"/> + <path d="M1315.95,176.058C1320.31,181.32 1322.49,187.627 1322.49,194.982C1322.49,205.278 1318.58,213.397 1310.77,219.337C1302.97,225.277 1292.44,228.247 1279.21,228.247C1265.97,228.247 1255.44,225.277 1247.64,219.337C1239.83,213.397 1235.93,205.278 1235.93,194.982C1235.93,187.627 1238.16,181.291 1242.63,175.973C1247.1,170.655 1253.24,166.978 1261.05,164.941C1253.81,162.792 1248.26,159.256 1244.41,154.334C1240.57,149.412 1238.64,143.613 1238.64,136.938C1238.64,130.488 1240.34,124.859 1243.73,120.05C1247.13,115.242 1251.91,111.508 1258.08,108.849C1264.24,106.19 1271.29,104.86 1279.21,104.86C1287.13,104.86 1294.17,106.19 1300.34,108.849C1306.5,111.508 1311.28,115.242 1314.68,120.05C1318.07,124.859 1319.77,130.488 1319.77,136.938C1319.77,143.613 1317.82,149.412 1313.91,154.334C1310.01,159.256 1304.55,162.792 1297.54,164.941C1305.46,167.091 1311.59,170.797 1315.95,176.058ZM1259.77,153.655C1264.58,157.672 1271.06,160.133 1279.21,161.038C1287.35,160.133 1293.83,157.672 1298.64,153.655C1303.45,149.638 1305.85,144.405 1305.85,137.956C1305.85,131.28 1303.5,126.019 1298.81,122.172C1294.11,118.325 1287.58,116.401 1279.21,116.401C1270.83,116.401 1264.3,118.325 1259.6,122.172C1254.91,126.019 1252.56,131.28 1252.56,137.956C1252.56,144.405 1254.96,149.638 1259.77,153.655ZM1301.1,210.936C1306.19,207.089 1308.74,201.488 1308.74,194.133C1308.74,187.458 1306.05,182.112 1300.68,178.095C1295.3,174.078 1288.14,171.617 1279.21,170.712C1270.27,171.617 1263.11,174.078 1257.74,178.095C1252.36,182.112 1249.67,187.458 1249.67,194.133C1249.67,201.488 1252.22,207.089 1257.31,210.936C1262.4,214.783 1269.7,216.706 1279.21,216.706C1288.71,216.706 1296.01,214.783 1301.1,210.936Z" style="fill:rgb(242,242,242);fill-rule:nonzero;"/> + <path d="M1358.47,209.578L1358.47,221.968C1358.47,226.72 1357.67,231.076 1356.09,235.036C1354.51,238.996 1351.85,242.843 1348.11,246.577L1341.66,241.655C1346.08,236.564 1348.57,231.698 1349.13,227.059L1340.98,227.059L1340.98,209.578L1358.47,209.578Z" style="fill:rgb(242,242,242);fill-rule:nonzero;"/> + <path d="M1450.29,120.135C1458.2,130.318 1462.16,144.801 1462.16,163.584C1462.16,184.063 1458.06,199.989 1449.86,211.36C1441.66,222.731 1430.2,228.417 1415.49,228.417C1408.59,228.417 1401.83,227.116 1395.21,224.513C1388.59,221.911 1382.74,218.234 1377.64,213.482L1383.08,202.789C1388.85,207.655 1394.33,211.19 1399.54,213.397C1404.74,215.603 1410,216.706 1415.32,216.706C1425.73,216.706 1433.79,212.067 1439.51,202.789C1445.22,193.511 1448.08,180.499 1448.08,163.753L1448.08,161.547C1445.48,167.883 1441.23,172.89 1435.35,176.567C1429.46,180.245 1422.73,182.083 1415.15,182.083C1407.8,182.083 1401.29,180.471 1395.63,177.246C1389.98,174.022 1385.56,169.496 1382.4,163.669C1379.23,157.841 1377.64,151.194 1377.64,143.726C1377.64,136.259 1379.31,129.583 1382.65,123.699C1385.99,117.816 1390.6,113.205 1396.48,109.867C1402.37,106.529 1409.04,104.86 1416.51,104.86C1431.11,104.86 1442.36,109.952 1450.29,120.135ZM1436.71,162.905C1441.68,157.926 1444.17,151.477 1444.17,143.557C1444.17,135.523 1441.68,129.017 1436.71,124.039C1431.73,119.06 1425.22,116.571 1417.19,116.571C1409.5,116.571 1403.27,119.032 1398.52,123.954C1393.77,128.876 1391.39,135.41 1391.39,143.557C1391.39,151.59 1393.77,158.068 1398.52,162.99C1403.27,167.912 1409.55,170.373 1417.36,170.373C1425.28,170.373 1431.73,167.883 1436.71,162.905Z" style="fill:rgb(242,242,242);fill-rule:nonzero;"/> + </g> + <g transform="matrix(0.92983,0,0,0.92983,-46.5234,169.171)"> + <path d="M224.566,862.452L251.212,862.452L251.212,874.163L183.833,874.163L183.833,862.452L210.479,862.452L210.479,770.633L185.7,786.417L185.7,773.009L216.589,753.321L224.566,753.321L224.566,862.452Z" style="fill:rgb(242,242,242);fill-rule:nonzero;"/> + </g> + <g transform="matrix(0.92983,0,0,0.92983,162.243,169.171)"> + <path d="M253.927,862.452L253.927,874.163L176.195,874.163L176.195,863.64L218.456,816.797C224.113,810.461 228.243,804.747 230.845,799.655C233.448,794.564 234.749,789.472 234.749,784.38C234.749,777.705 232.825,772.585 228.978,769.021C225.131,765.456 219.644,763.674 212.515,763.674C200.974,763.674 189.547,768.313 178.232,777.592L172.97,766.899C177.723,762.373 183.719,758.753 190.961,756.037C198.202,753.321 205.5,751.964 212.855,751.964C223.943,751.964 232.712,754.821 239.162,760.535C245.611,766.249 248.836,773.971 248.836,783.701C248.836,790.603 247.28,797.251 244.168,803.644C241.057,810.036 235.88,817.193 228.639,825.113L194.186,862.452L253.927,862.452Z" style="fill:rgb(242,242,242);fill-rule:nonzero;"/> + </g> + <g transform="matrix(0.92983,0,0,0.92983,374.061,169.171)"> + <path d="M245.95,822.567C249.684,827.546 251.551,833.826 251.551,841.406C251.551,851.929 247.987,860.217 240.859,866.271C233.73,872.324 224.056,875.351 211.837,875.351C204.029,875.351 196.533,874.049 189.349,871.447C182.164,868.845 176.082,865.167 171.104,860.415L176.535,849.723C187.736,859.001 199.39,863.64 211.497,863.64C220.096,863.64 226.631,861.716 231.1,857.869C235.569,854.022 237.804,848.365 237.804,840.897C237.804,826.075 228.526,818.664 209.97,818.664L196.052,818.664L196.052,806.953L207.254,806.953C216.193,806.953 223.038,804.973 227.79,801.013C232.542,797.053 234.919,791.395 234.919,784.041C234.919,777.478 232.967,772.443 229.063,768.936C225.16,765.428 219.644,763.674 212.515,763.674C200.974,763.674 189.547,768.313 178.232,777.592L172.97,766.899C177.836,762.26 183.804,758.611 190.876,755.952C197.948,753.293 205.331,751.964 213.025,751.964C223.887,751.964 232.571,754.736 239.077,760.28C245.583,765.824 248.836,773.292 248.836,782.683C248.836,789.585 247.138,795.638 243.744,800.843C240.35,806.048 235.654,809.782 229.657,812.045C236.785,814.081 242.217,817.589 245.95,822.567Z" style="fill:rgb(242,242,242);fill-rule:nonzero;"/> + </g> + <g transform="matrix(0.92983,0,0,0.92983,664.984,170.849)"> + <path d="M258.34,836.315L258.34,847.856L240.01,847.856L240.01,874.163L226.093,874.163L226.093,847.856L170.425,847.856L170.425,837.333L228.639,753.321L240.01,753.321L240.01,836.315L258.34,836.315ZM184.851,836.315L226.093,836.315L226.093,776.913L184.851,836.315Z" style="fill:rgb(242,242,242);fill-rule:nonzero;"/> + </g> + <g transform="matrix(0.92983,0,0,0.92983,873.65,170.849)"> + <path d="M238.058,803.134C243.772,806.359 248.157,810.857 251.212,816.627C254.267,822.398 255.794,829.073 255.794,836.654C255.794,844.235 254.125,850.967 250.787,856.851C247.45,862.735 242.697,867.289 236.531,870.514C230.364,873.738 223.151,875.351 214.891,875.351C207.537,875.351 200.296,874.021 193.167,871.362C186.039,868.703 180.042,865.054 175.177,860.415L180.438,849.723C191.64,859.001 203.124,863.64 214.891,863.64C223.378,863.64 230.025,861.236 234.834,856.427C239.642,851.618 242.047,845.084 242.047,836.824C242.047,828.791 239.671,822.313 234.919,817.391C230.166,812.469 223.83,810.008 215.91,810.008C204.369,810.008 195.147,814.704 188.245,824.095L178.571,824.095L178.571,753.321L251.042,753.321L251.042,764.862L192.488,764.862L192.488,807.972C199.164,801.522 207.707,798.297 218.116,798.297C225.697,798.297 232.344,799.91 238.058,803.134Z" style="fill:rgb(242,242,242);fill-rule:nonzero;"/> + </g> + <g transform="matrix(0.92983,0,0,0.92983,1086.71,170.849)"> + <path d="M237.719,803.134C243.433,806.359 247.874,810.885 251.042,816.712C254.21,822.539 255.794,829.187 255.794,836.654C255.794,844.122 254.125,850.798 250.787,856.681C247.45,862.565 242.839,867.176 236.955,870.514C231.072,873.851 224.396,875.52 216.928,875.52C202.332,875.52 191.074,870.429 183.154,860.245C175.233,850.062 171.273,835.579 171.273,816.797C171.273,803.219 173.112,791.565 176.789,781.835C180.466,772.104 185.784,764.693 192.743,759.601C199.701,754.509 208.046,751.964 217.777,751.964C224.792,751.964 231.609,753.265 238.228,755.867C244.847,758.47 250.646,762.147 255.624,766.899L250.363,777.592C244.706,772.839 239.275,769.332 234.07,767.069C228.865,764.806 223.547,763.674 218.116,763.674C207.707,763.674 199.617,768.313 193.846,777.592C188.076,786.87 185.19,799.881 185.19,816.627L185.19,819.173C187.793,812.724 192.036,807.632 197.919,803.898C203.803,800.164 210.535,798.297 218.116,798.297C225.471,798.297 232.005,799.91 237.719,803.134ZM234.919,856.427C239.671,851.505 242.047,844.971 242.047,836.824C242.047,828.791 239.642,822.313 234.834,817.391C230.025,812.469 223.774,810.008 216.08,810.008C208.159,810.008 201.71,812.497 196.731,817.476C191.753,822.454 189.264,828.904 189.264,836.824C189.264,844.857 191.753,851.363 196.731,856.342C201.71,861.32 208.216,863.81 216.249,863.81C223.943,863.81 230.166,861.349 234.919,856.427Z" style="fill:rgb(242,242,242);fill-rule:nonzero;"/> + </g> + <g transform="matrix(0.92983,0,0,0.92983,1386.78,168.615)"> + <path d="M173.14,753.321L252.909,753.321L252.909,763.674L196.222,874.163L181.287,874.163L237.634,765.032L173.14,765.032L173.14,753.321Z" style="fill:rgb(242,242,242);fill-rule:nonzero;"/> + </g> + <g transform="matrix(0.92983,0,0,0.92983,1596.01,169.877)"> + <path d="M249.769,823.162C254.125,828.423 256.303,834.731 256.303,842.085C256.303,852.382 252.4,860.5 244.593,866.44C236.785,872.381 226.263,875.351 213.025,875.351C199.786,875.351 189.264,872.381 181.457,866.44C173.649,860.5 169.746,852.382 169.746,842.085C169.746,834.731 171.98,828.395 176.45,823.077C180.919,817.759 187.057,814.081 194.864,812.045C187.623,809.895 182.079,806.359 178.232,801.437C174.385,796.515 172.461,790.717 172.461,784.041C172.461,777.592 174.159,771.962 177.553,767.154C180.947,762.345 185.728,758.611 191.894,755.952C198.061,753.293 205.104,751.964 213.025,751.964C220.945,751.964 227.988,753.293 234.155,755.952C240.321,758.611 245.102,762.345 248.496,767.154C251.891,771.962 253.588,777.592 253.588,784.041C253.588,790.717 251.636,796.515 247.732,801.437C243.829,806.359 238.37,809.895 231.354,812.045C239.275,814.195 245.413,817.9 249.769,823.162ZM193.592,800.758C198.4,804.775 204.878,807.236 213.025,808.141C221.171,807.236 227.649,804.775 232.458,800.758C237.266,796.742 239.671,791.509 239.671,785.059C239.671,778.384 237.323,773.122 232.627,769.275C227.932,765.428 221.397,763.505 213.025,763.505C204.652,763.505 198.117,765.428 193.422,769.275C188.726,773.122 186.378,778.384 186.378,785.059C186.378,791.509 188.783,796.742 193.592,800.758ZM234.919,858.039C240.01,854.192 242.556,848.591 242.556,841.237C242.556,834.561 239.869,829.215 234.494,825.198C229.12,821.181 221.963,818.72 213.025,817.815C204.086,818.72 196.929,821.181 191.555,825.198C186.18,829.215 183.493,834.561 183.493,841.237C183.493,848.591 186.039,854.192 191.131,858.039C196.222,861.886 203.52,863.81 213.025,863.81C222.529,863.81 229.827,861.886 234.919,858.039Z" style="fill:rgb(242,242,242);fill-rule:nonzero;"/> + </g> + <g transform="matrix(0.92983,0,0,0.92983,1799.28,168.615)"> + <path d="M243.065,767.239C250.985,777.422 254.946,791.905 254.946,810.687C254.946,831.167 250.844,847.092 242.641,858.463C234.438,869.835 222.982,875.52 208.272,875.52C201.37,875.52 194.61,874.219 187.991,871.617C181.372,869.014 175.516,865.337 170.425,860.585L175.856,849.893C181.626,854.758 187.114,858.294 192.319,860.5C197.523,862.706 202.785,863.81 208.103,863.81C218.512,863.81 226.574,859.171 232.288,849.893C238.002,840.614 240.859,827.603 240.859,810.857L240.859,808.65C238.256,814.987 234.013,819.993 228.13,823.671C222.246,827.348 215.514,829.187 207.933,829.187C200.578,829.187 194.072,827.574 188.415,824.35C182.758,821.125 178.345,816.599 175.177,810.772C172.009,804.945 170.425,798.297 170.425,790.83C170.425,783.362 172.094,776.686 175.431,770.803C178.769,764.919 183.38,760.308 189.264,756.97C195.147,753.633 201.823,751.964 209.291,751.964C223.887,751.964 235.145,757.055 243.065,767.239ZM229.487,810.008C234.466,805.03 236.955,798.58 236.955,790.66C236.955,782.627 234.466,776.121 229.487,771.142C224.509,766.164 218.003,763.674 209.97,763.674C202.276,763.674 196.052,766.135 191.3,771.057C186.548,775.979 184.172,782.513 184.172,790.66C184.172,798.693 186.548,805.171 191.3,810.093C196.052,815.015 202.332,817.476 210.139,817.476C218.06,817.476 224.509,814.987 229.487,810.008Z" style="fill:rgb(242,242,242);fill-rule:nonzero;"/> + </g> + <g transform="matrix(1.17016,0,0,1.17016,-233.077,-107.087)"> + <path d="M1120.2,396.615L1120.2,552.949L1120.2,474.16L509.798,474.16L509.798,552.949" style="fill:none;stroke:black;stroke-width:4.7px;"/> + </g> + <g transform="matrix(1.17016,0,0,1.17016,-233.077,-107.087)"> + <path d="M1120.2,474.782L1729.96,474.782L1729.96,552.949" style="fill:none;stroke:black;stroke-width:4.7px;"/> + </g> + <g transform="matrix(1.17016,0,0,0.594821,-233.077,326.47)"> + <path d="M331.99,802.778L331.99,859.94" style="fill:none;stroke:black;stroke-width:5.93px;"/> + </g> + <g transform="matrix(1.17016,0,0,1.17016,-233.077,-168.289)"> + <path d="M509.68,802.778L509.68,859.94" style="fill:none;stroke:black;stroke-width:4.7px;"/> + </g> + <g transform="matrix(1.17016,0,0,0.594821,-233.077,326.47)"> + <path d="M688.806,802.778L688.806,859.94" style="fill:none;stroke:black;stroke-width:5.93px;"/> + </g> + <g transform="matrix(0.902494,0,0,0.902494,2027.65,-1280.25)"> + <g> + <g> + <g> + <g transform="matrix(1.17719,0,0,0.817775,-122.471,1454.31)"> + <rect x="759.403" y="100.455" width="487.587" height="249.829" style="fill:rgb(0,131,192);"/> + <path d="M1246.99,350.284L759.403,350.284L759.403,100.455L1246.99,100.455L1246.99,350.284ZM764.58,107.907L764.58,342.832L1241.81,342.832L1241.81,107.907L764.58,107.907Z"/> + </g> + <g transform="matrix(1.0988,0,0,0.502285,-698.084,1726.61)"> + <rect x="759.403" y="100.455" width="487.587" height="249.829" style="fill:rgb(201,23,126);"/> + <path d="M1246.99,350.284L759.403,350.284L759.403,100.455L1246.99,100.455L1246.99,350.284ZM764.949,112.588L764.949,338.151L1241.44,338.151L1241.44,112.588L764.949,112.588Z"/> + </g> + <g transform="matrix(1.09385,0,0,0.502285,-34.0849,1726.61)"> + <rect x="759.403" y="100.455" width="487.587" height="249.829" style="fill:rgb(201,23,126);"/> + <path d="M1246.99,350.284L759.403,350.284L759.403,100.455L1246.99,100.455L1246.99,350.284ZM764.975,112.588L764.975,338.151L1241.42,338.151L1241.42,112.588L764.975,112.588Z"/> + </g> + <g transform="matrix(1.17016,0,0,1.17016,-106.926,453.583)"> + <path d="M1001.57,1238.26L1001.57,1256.06L814.157,1256.06L814.157,1273.85" style="fill:none;stroke:black;stroke-width:5.21px;"/> + </g> + <g transform="matrix(1.08821,0,0,0.502285,624.555,1726.61)"> + <rect x="759.403" y="100.455" width="487.587" height="249.829" style="fill:rgb(201,23,126);"/> + <path d="M1246.99,350.284L759.403,350.284L759.403,100.455L1246.99,100.455L1246.99,350.284ZM765.003,112.588L765.003,338.151L1241.39,338.151L1241.39,112.588L765.003,112.588Z"/> + </g> + <g transform="matrix(0.211311,0,0,0.473437,123.947,1896.64)"> + <rect x="759.403" y="100.455" width="487.587" height="249.829" style="fill:rgb(0,168,138);"/> + <path d="M1246.99,350.284L759.403,350.284L759.403,100.455L1246.99,100.455L1246.99,350.284ZM788.243,113.327L788.243,337.412L1218.15,337.412L1218.15,113.327L788.243,113.327Z"/> + </g> + <g transform="matrix(0.626068,0,0,0.626068,201.091,1493.51)"> + <path d="M245.95,822.567C249.684,827.546 251.551,833.826 251.551,841.406C251.551,851.929 247.987,860.217 240.859,866.271C233.73,872.324 224.056,875.351 211.837,875.351C204.029,875.351 196.533,874.049 189.349,871.447C182.164,868.845 176.082,865.167 171.104,860.415L176.535,849.723C187.736,859.001 199.39,863.64 211.497,863.64C220.096,863.64 226.631,861.716 231.1,857.869C235.569,854.022 237.804,848.365 237.804,840.897C237.804,826.075 228.526,818.664 209.97,818.664L196.052,818.664L196.052,806.953L207.254,806.953C216.193,806.953 223.038,804.973 227.79,801.013C232.542,797.053 234.919,791.395 234.919,784.041C234.919,777.478 232.967,772.443 229.063,768.936C225.16,765.428 219.644,763.674 212.515,763.674C200.974,763.674 189.547,768.313 178.232,777.592L172.97,766.899C177.836,762.26 183.804,758.611 190.876,755.952C197.948,753.293 205.331,751.964 213.025,751.964C223.887,751.964 232.571,754.736 239.077,760.28C245.583,765.824 248.836,773.292 248.836,782.683C248.836,789.585 247.138,795.638 243.744,800.843C240.35,806.048 235.654,809.782 229.657,812.045C236.785,814.081 242.217,817.589 245.95,822.567Z" style="fill:rgb(242,242,242);fill-rule:nonzero;"/> + </g> + <g transform="matrix(0.211311,0,0,0.473437,267.401,1896.64)"> + <rect x="759.403" y="100.455" width="487.587" height="249.829" style="fill:rgb(0,168,138);"/> + <path d="M1246.99,350.284L759.403,350.284L759.403,100.455L1246.99,100.455L1246.99,350.284ZM788.243,113.327L788.243,337.412L1218.15,337.412L1218.15,113.327L788.243,113.327Z"/> + </g> + <g transform="matrix(0.626068,0,0,0.626068,344.545,1493.51)"> + <path d="M238.058,803.134C243.772,806.359 248.157,810.857 251.212,816.627C254.267,822.398 255.794,829.073 255.794,836.654C255.794,844.235 254.125,850.967 250.787,856.851C247.45,862.735 242.697,867.289 236.531,870.514C230.364,873.738 223.151,875.351 214.891,875.351C207.537,875.351 200.296,874.021 193.167,871.362C186.039,868.703 180.042,865.054 175.177,860.415L180.438,849.723C191.64,859.001 203.124,863.64 214.891,863.64C223.378,863.64 230.025,861.236 234.834,856.427C239.642,851.618 242.047,845.084 242.047,836.824C242.047,828.791 239.671,822.313 234.919,817.391C230.166,812.469 223.83,810.008 215.91,810.008C204.369,810.008 195.147,814.704 188.245,824.095L178.571,824.095L178.571,753.321L251.042,753.321L251.042,764.862L192.488,764.862L192.488,807.972C199.164,801.522 207.707,798.297 218.116,798.297C225.697,798.297 232.344,799.91 238.058,803.134Z" style="fill:rgb(242,242,242);fill-rule:nonzero;"/> + </g> + <g transform="matrix(0.211311,0,0,0.473437,411.536,1896.64)"> + <rect x="759.403" y="100.455" width="487.587" height="249.829" style="fill:rgb(0,168,138);"/> + <path d="M1246.99,350.284L759.403,350.284L759.403,100.455L1246.99,100.455L1246.99,350.284ZM788.243,113.327L788.243,337.412L1218.15,337.412L1218.15,113.327L788.243,113.327Z"/> + </g> + <g transform="matrix(0.626068,0,0,0.626068,488.68,1493.51)"> + <path d="M237.719,803.134C243.433,806.359 247.874,810.885 251.042,816.712C254.21,822.539 255.794,829.187 255.794,836.654C255.794,844.122 254.125,850.798 250.787,856.681C247.45,862.565 242.839,867.176 236.955,870.514C231.072,873.851 224.396,875.52 216.928,875.52C202.332,875.52 191.074,870.429 183.154,860.245C175.233,850.062 171.273,835.579 171.273,816.797C171.273,803.219 173.112,791.565 176.789,781.835C180.466,772.104 185.784,764.693 192.743,759.601C199.701,754.509 208.046,751.964 217.777,751.964C224.792,751.964 231.609,753.265 238.228,755.867C244.847,758.47 250.646,762.147 255.624,766.899L250.363,777.592C244.706,772.839 239.275,769.332 234.07,767.069C228.865,764.806 223.547,763.674 218.116,763.674C207.707,763.674 199.617,768.313 193.846,777.592C188.076,786.87 185.19,799.881 185.19,816.627L185.19,819.173C187.793,812.724 192.036,807.632 197.919,803.898C203.803,800.164 210.535,798.297 218.116,798.297C225.471,798.297 232.005,799.91 237.719,803.134ZM234.919,856.427C239.671,851.505 242.047,844.971 242.047,836.824C242.047,828.791 239.642,822.313 234.834,817.391C230.025,812.469 223.774,810.008 216.08,810.008C208.159,810.008 201.71,812.497 196.731,817.476C191.753,822.454 189.264,828.904 189.264,836.824C189.264,844.857 191.753,851.363 196.731,856.342C201.71,861.32 208.216,863.81 216.249,863.81C223.943,863.81 230.166,861.349 234.919,856.427Z" style="fill:rgb(242,242,242);fill-rule:nonzero;"/> + </g> + <g transform="matrix(0.211311,0,0,0.473437,-23.3963,1896.64)"> + <rect x="759.403" y="100.455" width="487.587" height="249.829" style="fill:rgb(0,168,138);"/> + <path d="M1246.99,350.284L759.403,350.284L759.403,100.455L1246.99,100.455L1246.99,350.284ZM788.244,113.327L788.244,337.412L1218.15,337.412L1218.15,113.327L788.244,113.327Z"/> + </g> + <g transform="matrix(0.626068,0,0,0.626068,53.7475,1493.51)"> + <path d="M224.566,862.452L251.212,862.452L251.212,874.163L183.833,874.163L183.833,862.452L210.479,862.452L210.479,770.633L185.7,786.417L185.7,773.009L216.589,753.321L224.566,753.321L224.566,862.452Z" style="fill:rgb(242,242,242);fill-rule:nonzero;"/> + </g> + <g transform="matrix(0.211311,0,0,0.473437,633.784,1896.21)"> + <rect x="759.403" y="100.455" width="487.587" height="249.829" style="fill:rgb(0,168,138);"/> + <path d="M1246.99,350.284L759.403,350.284L759.403,100.455L1246.99,100.455L1246.99,350.284ZM788.244,113.327L788.244,337.412L1218.15,337.412L1218.15,113.327L788.244,113.327Z"/> + </g> + <g transform="matrix(0.626068,0,0,0.626068,712.136,1493.44)"> + <path d="M253.927,862.452L253.927,874.163L176.195,874.163L176.195,863.64L218.456,816.797C224.113,810.461 228.243,804.747 230.845,799.655C233.448,794.564 234.749,789.472 234.749,784.38C234.749,777.705 232.825,772.585 228.978,769.021C225.131,765.456 219.644,763.674 212.515,763.674C200.974,763.674 189.547,768.313 178.232,777.592L172.97,766.899C177.723,762.373 183.719,758.753 190.961,756.037C198.202,753.321 205.5,751.964 212.855,751.964C223.943,751.964 232.712,754.821 239.162,760.535C245.611,766.249 248.836,773.971 248.836,783.701C248.836,790.603 247.28,797.251 244.168,803.644C241.057,810.036 235.88,817.193 228.639,825.113L194.186,862.452L253.927,862.452Z" style="fill:rgb(242,242,242);fill-rule:nonzero;"/> + </g> + <g transform="matrix(0.211311,0,0,0.473437,781.127,1896.21)"> + <rect x="759.403" y="100.455" width="487.587" height="249.829" style="fill:rgb(0,168,138);"/> + <path d="M1246.99,350.284L759.403,350.284L759.403,100.455L1246.99,100.455L1246.99,350.284ZM788.243,113.327L788.243,337.412L1218.15,337.412L1218.15,113.327L788.243,113.327Z"/> + </g> + <g transform="matrix(0.626068,0,0,0.626068,856.93,1493.46)"> + <path d="M258.34,836.315L258.34,847.856L240.01,847.856L240.01,874.163L226.093,874.163L226.093,847.856L170.425,847.856L170.425,837.333L228.639,753.321L240.01,753.321L240.01,836.315L258.34,836.315ZM184.851,836.315L226.093,836.315L226.093,776.913L184.851,836.315Z" style="fill:rgb(242,242,242);fill-rule:nonzero;"/> + </g> + <g transform="matrix(1.17016,0,0,1.17016,107.033,497.127)"> + <path d="M71.23,1159.88L71.23,1132.92L60.814,1132.92L60.814,1129.98L85.132,1129.98L85.132,1132.92L74.716,1132.92L74.716,1159.88L71.23,1159.88Z" style="fill:white;fill-rule:nonzero;"/> + <path d="M103.36,1149.21L87.862,1149.21C87.89,1151.9 88.513,1153.93 89.731,1155.3C90.949,1156.67 92.72,1157.36 95.044,1157.36C97.508,1157.36 99.776,1156.53 101.848,1154.88L102.982,1157.36C102.058,1158.23 100.875,1158.91 99.433,1159.42C97.991,1159.92 96.514,1160.17 95.002,1160.17C91.698,1160.17 89.108,1159.2 87.232,1157.26C85.356,1155.31 84.418,1152.64 84.418,1149.25C84.418,1147.1 84.838,1145.19 85.678,1143.52C86.518,1141.86 87.694,1140.56 89.206,1139.64C90.718,1138.71 92.44,1138.25 94.372,1138.25C97.172,1138.25 99.37,1139.17 100.966,1141C102.562,1142.84 103.36,1145.36 103.36,1148.58L103.36,1149.21ZM90.109,1142.49C89.003,1143.56 88.296,1145.05 87.988,1146.99L100.294,1146.99C100.126,1145 99.545,1143.49 98.551,1142.45C97.557,1141.41 96.178,1140.9 94.414,1140.9C92.65,1140.9 91.215,1141.43 90.109,1142.49Z" style="fill:white;fill-rule:nonzero;"/> + <path d="M120.286,1138.5L120.202,1141.61C119.558,1141.39 118.816,1141.27 117.976,1141.27C115.932,1141.27 114.413,1141.91 113.419,1143.18C112.425,1144.46 111.928,1146.01 111.928,1147.83L111.928,1159.88L108.526,1159.88L108.526,1144.68C108.526,1142.49 108.414,1140.52 108.19,1138.75L111.424,1138.75L111.76,1142.66C112.292,1141.23 113.146,1140.14 114.322,1139.38C115.498,1138.63 116.842,1138.25 118.354,1138.25C119.054,1138.25 119.698,1138.33 120.286,1138.5Z" style="fill:white;fill-rule:nonzero;"/> + <path d="M154.18,1146.61L154.18,1159.88L150.778,1159.88L150.778,1146.78C150.778,1144.79 150.435,1143.35 149.749,1142.45C149.063,1141.55 147.95,1141.11 146.41,1141.11C144.618,1141.11 143.218,1141.71 142.21,1142.91C141.202,1144.12 140.698,1145.75 140.698,1147.83L140.698,1159.88L137.296,1159.88L137.296,1146.78C137.296,1144.82 136.946,1143.38 136.246,1142.47C135.546,1141.56 134.426,1141.11 132.886,1141.11C131.094,1141.11 129.687,1141.71 128.665,1142.91C127.643,1144.12 127.132,1145.75 127.132,1147.83L127.132,1159.88L123.73,1159.88L123.73,1144.68C123.73,1142.49 123.618,1140.52 123.394,1138.75L126.628,1138.75L126.964,1142.45C127.552,1141.11 128.427,1140.07 129.589,1139.34C130.751,1138.61 132.102,1138.25 133.642,1138.25C135.322,1138.25 136.694,1138.59 137.758,1139.26C138.822,1139.93 139.606,1140.97 140.11,1142.37C140.754,1141.11 141.699,1140.11 142.945,1139.36C144.191,1138.62 145.598,1138.25 147.166,1138.25C151.842,1138.25 154.18,1141.04 154.18,1146.61Z" style="fill:white;fill-rule:nonzero;"/> + <path d="M183.79,1156.98L190.384,1156.98L190.384,1159.88L173.71,1159.88L173.71,1156.98L180.304,1156.98L180.304,1134.26L174.172,1138.17L174.172,1134.85L181.816,1129.98L183.79,1129.98L183.79,1156.98Z" style="fill:white;fill-rule:nonzero;"/> + <path d="M196.222,1139.22L200.548,1139.22L200.548,1143.58L196.222,1143.58L196.222,1139.22ZM196.222,1155.55L200.548,1155.55L200.548,1158.62C200.548,1159.8 200.352,1160.87 199.96,1161.85C199.568,1162.83 198.91,1163.79 197.986,1164.71L196.39,1163.49C197.482,1162.23 198.098,1161.03 198.238,1159.88L196.222,1159.88L196.222,1155.55Z" style="fill:white;fill-rule:nonzero;"/> + <path d="M216.382,1159.88L218.734,1129.98L225.328,1129.98L223.354,1154.55L236.71,1154.55L236.29,1159.88L216.382,1159.88Z" style="fill:white;fill-rule:nonzero;"/> + <path d="M239.86,1159.88L241.54,1138.59L247.882,1138.59L246.202,1159.88L239.86,1159.88ZM242.044,1128.59L248.848,1128.59L248.386,1134.55L241.582,1134.55L242.044,1128.59Z" style="fill:white;fill-rule:nonzero;"/> + <path d="M250.108,1157.61L252.166,1153.2C253.342,1154.01 254.602,1154.64 255.946,1155.07C257.29,1155.51 258.634,1155.72 259.978,1155.72C261.154,1155.72 262.022,1155.55 262.582,1155.22C263.142,1154.88 263.422,1154.43 263.422,1153.87C263.422,1153.29 263.093,1152.82 262.435,1152.49C261.777,1152.15 260.706,1151.76 259.222,1151.31C257.682,1150.89 256.422,1150.47 255.442,1150.05C254.462,1149.63 253.615,1149.01 252.901,1148.18C252.187,1147.36 251.83,1146.29 251.83,1144.97C251.83,1143.6 252.215,1142.39 252.985,1141.36C253.755,1140.32 254.847,1139.51 256.261,1138.92C257.675,1138.33 259.292,1138.04 261.112,1138.04C262.708,1138.04 264.269,1138.28 265.795,1138.75C267.321,1139.23 268.602,1139.87 269.638,1140.69L267.622,1144.93C266.586,1144.17 265.494,1143.6 264.346,1143.21C263.198,1142.81 262.078,1142.62 260.986,1142.62C259.838,1142.62 258.97,1142.79 258.382,1143.12C257.794,1143.46 257.5,1143.92 257.5,1144.51C257.5,1145.12 257.85,1145.61 258.55,1145.98C259.25,1146.34 260.314,1146.72 261.742,1147.11C263.282,1147.56 264.535,1147.99 265.501,1148.41C266.467,1148.83 267.307,1149.46 268.021,1150.28C268.735,1151.11 269.092,1152.18 269.092,1153.5C269.092,1155.6 268.259,1157.24 266.593,1158.43C264.927,1159.62 262.68,1160.22 259.852,1160.22C256.212,1160.22 252.964,1159.35 250.108,1157.61Z" style="fill:white;fill-rule:nonzero;"/> + <path d="M280.894,1151.61C280.81,1152.78 281.048,1153.65 281.608,1154.21C282.168,1154.77 282.938,1155.05 283.918,1155.05C284.562,1155.05 285.276,1154.94 286.06,1154.71L285.64,1159.63C284.688,1160.02 283.456,1160.22 281.944,1160.22C279.536,1160.22 277.695,1159.57 276.421,1158.28C275.147,1157 274.51,1155.18 274.51,1152.82C274.51,1152.35 274.524,1151.98 274.552,1151.73L275.224,1143.33L271.192,1143.33L271.57,1138.59L275.602,1138.59L275.98,1133.59L282.49,1131.53L281.944,1138.59L287.362,1138.59L286.984,1143.33L281.566,1143.33L280.894,1151.61Z" style="fill:white;fill-rule:nonzero;"/> + <path d="M287.656,1157.61L289.714,1153.2C290.89,1154.01 292.15,1154.64 293.494,1155.07C294.838,1155.51 296.182,1155.72 297.526,1155.72C298.702,1155.72 299.57,1155.55 300.13,1155.22C300.69,1154.88 300.97,1154.43 300.97,1153.87C300.97,1153.29 300.641,1152.82 299.983,1152.49C299.325,1152.15 298.254,1151.76 296.77,1151.31C295.23,1150.89 293.97,1150.47 292.99,1150.05C292.01,1149.63 291.163,1149.01 290.449,1148.18C289.735,1147.36 289.378,1146.29 289.378,1144.97C289.378,1143.6 289.763,1142.39 290.533,1141.36C291.303,1140.32 292.395,1139.51 293.809,1138.92C295.223,1138.33 296.84,1138.04 298.66,1138.04C300.256,1138.04 301.817,1138.28 303.343,1138.75C304.869,1139.23 306.15,1139.87 307.186,1140.69L305.17,1144.93C304.134,1144.17 303.042,1143.6 301.894,1143.21C300.746,1142.81 299.626,1142.62 298.534,1142.62C297.386,1142.62 296.518,1142.79 295.93,1143.12C295.342,1143.46 295.048,1143.92 295.048,1144.51C295.048,1145.12 295.398,1145.61 296.098,1145.98C296.798,1146.34 297.862,1146.72 299.29,1147.11C300.83,1147.56 302.083,1147.99 303.049,1148.41C304.015,1148.83 304.855,1149.46 305.569,1150.28C306.283,1151.11 306.64,1152.18 306.64,1153.5C306.64,1155.6 305.807,1157.24 304.141,1158.43C302.475,1159.62 300.228,1160.22 297.4,1160.22C293.76,1160.22 290.512,1159.35 287.656,1157.61Z" style="fill:white;fill-rule:nonzero;"/> + <path d="M334.696,1156.98L341.29,1156.98L341.29,1159.88L324.616,1159.88L324.616,1156.98L331.21,1156.98L331.21,1134.26L325.078,1138.17L325.078,1134.85L332.722,1129.98L334.696,1129.98L334.696,1156.98Z" style="fill:white;fill-rule:nonzero;"/> + <path d="M351.454,1155.55L351.454,1158.62C351.454,1159.8 351.258,1160.87 350.866,1161.85C350.474,1162.83 349.816,1163.79 348.892,1164.71L347.296,1163.49C348.388,1162.23 349.004,1161.03 349.144,1159.88L347.128,1159.88L347.128,1155.55L351.454,1155.55Z" style="fill:white;fill-rule:nonzero;"/> + <path d="M374.89,1147.11C375.814,1148.34 376.276,1149.9 376.276,1151.77C376.276,1154.38 375.394,1156.43 373.63,1157.93C371.866,1159.42 369.472,1160.17 366.448,1160.17C364.516,1160.17 362.661,1159.85 360.883,1159.21C359.105,1158.56 357.6,1157.65 356.368,1156.48L357.712,1153.83C360.484,1156.13 363.368,1157.28 366.364,1157.28C368.492,1157.28 370.109,1156.8 371.215,1155.85C372.321,1154.9 372.874,1153.5 372.874,1151.65C372.874,1147.98 370.578,1146.15 365.986,1146.15L362.542,1146.15L362.542,1143.25L365.314,1143.25C367.526,1143.25 369.22,1142.76 370.396,1141.78C371.572,1140.8 372.16,1139.4 372.16,1137.58C372.16,1135.95 371.677,1134.71 370.711,1133.84C369.745,1132.97 368.38,1132.54 366.616,1132.54C363.76,1132.54 360.932,1133.69 358.132,1135.98L356.83,1133.34C358.034,1132.19 359.511,1131.29 361.261,1130.63C363.011,1129.97 364.838,1129.64 366.742,1129.64C369.43,1129.64 371.579,1130.33 373.189,1131.7C374.799,1133.07 375.604,1134.92 375.604,1137.24C375.604,1138.95 375.184,1140.45 374.344,1141.74C373.504,1143.02 372.342,1143.95 370.858,1144.51C372.622,1145.01 373.966,1145.88 374.89,1147.11Z" style="fill:white;fill-rule:nonzero;"/> + <path d="M386.356,1155.55L386.356,1158.62C386.356,1159.8 386.16,1160.87 385.768,1161.85C385.376,1162.83 384.718,1163.79 383.794,1164.71L382.198,1163.49C383.29,1162.23 383.906,1161.03 384.046,1159.88L382.03,1159.88L382.03,1155.55L386.356,1155.55Z" style="fill:white;fill-rule:nonzero;"/> + <path d="M412.858,1150.51L412.858,1153.37L408.322,1153.37L408.322,1159.88L404.878,1159.88L404.878,1153.37L391.102,1153.37L391.102,1150.77L405.508,1129.98L408.322,1129.98L408.322,1150.51L412.858,1150.51ZM394.672,1150.51L404.878,1150.51L404.878,1135.81L394.672,1150.51Z" style="fill:white;fill-rule:nonzero;"/> + <path d="M421.258,1155.55L421.258,1158.62C421.258,1159.8 421.062,1160.87 420.67,1161.85C420.278,1162.83 419.62,1163.79 418.696,1164.71L417.1,1163.49C418.192,1162.23 418.808,1161.03 418.948,1159.88L416.932,1159.88L416.932,1155.55L421.258,1155.55Z" style="fill:white;fill-rule:nonzero;"/> + <path d="M442.741,1142.3C444.155,1143.1 445.24,1144.21 445.996,1145.64C446.752,1147.07 447.13,1148.72 447.13,1150.6C447.13,1152.47 446.717,1154.14 445.891,1155.6C445.065,1157.05 443.889,1158.18 442.363,1158.98C440.837,1159.78 439.052,1160.17 437.008,1160.17C435.188,1160.17 433.396,1159.85 431.632,1159.19C429.868,1158.53 428.384,1157.63 427.18,1156.48L428.482,1153.83C431.254,1156.13 434.096,1157.28 437.008,1157.28C439.108,1157.28 440.753,1156.68 441.943,1155.49C443.133,1154.3 443.728,1152.68 443.728,1150.64C443.728,1148.65 443.14,1147.05 441.964,1145.83C440.788,1144.61 439.22,1144 437.26,1144C434.404,1144 432.122,1145.17 430.414,1147.49L428.02,1147.49L428.02,1129.98L445.954,1129.98L445.954,1132.83L431.464,1132.83L431.464,1143.5C433.116,1141.9 435.23,1141.11 437.806,1141.11C439.682,1141.11 441.327,1141.51 442.741,1142.3Z" style="fill:white;fill-rule:nonzero;"/> + </g> + <g transform="matrix(1.17016,0,0,1.17016,766.077,497.426)"> + <path d="M71.23,1159.88L71.23,1132.92L60.814,1132.92L60.814,1129.98L85.132,1129.98L85.132,1132.92L74.716,1132.92L74.716,1159.88L71.23,1159.88Z" style="fill:white;fill-rule:nonzero;"/> + <path d="M103.36,1149.21L87.862,1149.21C87.89,1151.9 88.513,1153.93 89.731,1155.3C90.949,1156.67 92.72,1157.36 95.044,1157.36C97.508,1157.36 99.776,1156.53 101.848,1154.88L102.982,1157.36C102.058,1158.23 100.875,1158.91 99.433,1159.42C97.991,1159.92 96.514,1160.17 95.002,1160.17C91.698,1160.17 89.108,1159.2 87.232,1157.26C85.356,1155.31 84.418,1152.64 84.418,1149.25C84.418,1147.1 84.838,1145.19 85.678,1143.52C86.518,1141.86 87.694,1140.56 89.206,1139.64C90.718,1138.71 92.44,1138.25 94.372,1138.25C97.172,1138.25 99.37,1139.17 100.966,1141C102.562,1142.84 103.36,1145.36 103.36,1148.58L103.36,1149.21ZM90.109,1142.49C89.003,1143.56 88.296,1145.05 87.988,1146.99L100.294,1146.99C100.126,1145 99.545,1143.49 98.551,1142.45C97.557,1141.41 96.178,1140.9 94.414,1140.9C92.65,1140.9 91.215,1141.43 90.109,1142.49Z" style="fill:white;fill-rule:nonzero;"/> + <path d="M120.286,1138.5L120.202,1141.61C119.558,1141.39 118.816,1141.27 117.976,1141.27C115.932,1141.27 114.413,1141.91 113.419,1143.18C112.425,1144.46 111.928,1146.01 111.928,1147.83L111.928,1159.88L108.526,1159.88L108.526,1144.68C108.526,1142.49 108.414,1140.52 108.19,1138.75L111.424,1138.75L111.76,1142.66C112.292,1141.23 113.146,1140.14 114.322,1139.38C115.498,1138.63 116.842,1138.25 118.354,1138.25C119.054,1138.25 119.698,1138.33 120.286,1138.5Z" style="fill:white;fill-rule:nonzero;"/> + <path d="M154.18,1146.61L154.18,1159.88L150.778,1159.88L150.778,1146.78C150.778,1144.79 150.435,1143.35 149.749,1142.45C149.063,1141.55 147.95,1141.11 146.41,1141.11C144.618,1141.11 143.218,1141.71 142.21,1142.91C141.202,1144.12 140.698,1145.75 140.698,1147.83L140.698,1159.88L137.296,1159.88L137.296,1146.78C137.296,1144.82 136.946,1143.38 136.246,1142.47C135.546,1141.56 134.426,1141.11 132.886,1141.11C131.094,1141.11 129.687,1141.71 128.665,1142.91C127.643,1144.12 127.132,1145.75 127.132,1147.83L127.132,1159.88L123.73,1159.88L123.73,1144.68C123.73,1142.49 123.618,1140.52 123.394,1138.75L126.628,1138.75L126.964,1142.45C127.552,1141.11 128.427,1140.07 129.589,1139.34C130.751,1138.61 132.102,1138.25 133.642,1138.25C135.322,1138.25 136.694,1138.59 137.758,1139.26C138.822,1139.93 139.606,1140.97 140.11,1142.37C140.754,1141.11 141.699,1140.11 142.945,1139.36C144.191,1138.62 145.598,1138.25 147.166,1138.25C151.842,1138.25 154.18,1141.04 154.18,1146.61Z" style="fill:white;fill-rule:nonzero;"/> + <path d="M191.056,1156.98L191.056,1159.88L171.82,1159.88L171.82,1157.28L182.278,1145.68C183.678,1144.12 184.7,1142.7 185.344,1141.44C185.988,1140.18 186.31,1138.92 186.31,1137.66C186.31,1136.01 185.834,1134.74 184.882,1133.86C183.93,1132.98 182.572,1132.54 180.808,1132.54C177.952,1132.54 175.124,1133.69 172.324,1135.98L171.022,1133.34C172.198,1132.22 173.682,1131.32 175.474,1130.65C177.266,1129.98 179.072,1129.64 180.892,1129.64C183.636,1129.64 185.806,1130.35 187.402,1131.76C188.998,1133.17 189.796,1135.09 189.796,1137.49C189.796,1139.2 189.411,1140.85 188.641,1142.43C187.871,1144.01 186.59,1145.78 184.798,1147.74L176.272,1156.98L191.056,1156.98Z" style="fill:white;fill-rule:nonzero;"/> + <path d="M196.222,1139.22L200.548,1139.22L200.548,1143.58L196.222,1143.58L196.222,1139.22ZM196.222,1155.55L200.548,1155.55L200.548,1158.62C200.548,1159.8 200.352,1160.87 199.96,1161.85C199.568,1162.83 198.91,1163.79 197.986,1164.71L196.39,1163.49C197.482,1162.23 198.098,1161.03 198.238,1159.88L196.222,1159.88L196.222,1155.55Z" style="fill:white;fill-rule:nonzero;"/> + <path d="M216.382,1159.88L218.734,1129.98L225.328,1129.98L223.354,1154.55L236.71,1154.55L236.29,1159.88L216.382,1159.88Z" style="fill:white;fill-rule:nonzero;"/> + <path d="M239.86,1159.88L241.54,1138.59L247.882,1138.59L246.202,1159.88L239.86,1159.88ZM242.044,1128.59L248.848,1128.59L248.386,1134.55L241.582,1134.55L242.044,1128.59Z" style="fill:white;fill-rule:nonzero;"/> + <path d="M250.108,1157.61L252.166,1153.2C253.342,1154.01 254.602,1154.64 255.946,1155.07C257.29,1155.51 258.634,1155.72 259.978,1155.72C261.154,1155.72 262.022,1155.55 262.582,1155.22C263.142,1154.88 263.422,1154.43 263.422,1153.87C263.422,1153.29 263.093,1152.82 262.435,1152.49C261.777,1152.15 260.706,1151.76 259.222,1151.31C257.682,1150.89 256.422,1150.47 255.442,1150.05C254.462,1149.63 253.615,1149.01 252.901,1148.18C252.187,1147.36 251.83,1146.29 251.83,1144.97C251.83,1143.6 252.215,1142.39 252.985,1141.36C253.755,1140.32 254.847,1139.51 256.261,1138.92C257.675,1138.33 259.292,1138.04 261.112,1138.04C262.708,1138.04 264.269,1138.28 265.795,1138.75C267.321,1139.23 268.602,1139.87 269.638,1140.69L267.622,1144.93C266.586,1144.17 265.494,1143.6 264.346,1143.21C263.198,1142.81 262.078,1142.62 260.986,1142.62C259.838,1142.62 258.97,1142.79 258.382,1143.12C257.794,1143.46 257.5,1143.92 257.5,1144.51C257.5,1145.12 257.85,1145.61 258.55,1145.98C259.25,1146.34 260.314,1146.72 261.742,1147.11C263.282,1147.56 264.535,1147.99 265.501,1148.41C266.467,1148.83 267.307,1149.46 268.021,1150.28C268.735,1151.11 269.092,1152.18 269.092,1153.5C269.092,1155.6 268.259,1157.24 266.593,1158.43C264.927,1159.62 262.68,1160.22 259.852,1160.22C256.212,1160.22 252.964,1159.35 250.108,1157.61Z" style="fill:white;fill-rule:nonzero;"/> + <path d="M280.894,1151.61C280.81,1152.78 281.048,1153.65 281.608,1154.21C282.168,1154.77 282.938,1155.05 283.918,1155.05C284.562,1155.05 285.276,1154.94 286.06,1154.71L285.64,1159.63C284.688,1160.02 283.456,1160.22 281.944,1160.22C279.536,1160.22 277.695,1159.57 276.421,1158.28C275.147,1157 274.51,1155.18 274.51,1152.82C274.51,1152.35 274.524,1151.98 274.552,1151.73L275.224,1143.33L271.192,1143.33L271.57,1138.59L275.602,1138.59L275.98,1133.59L282.49,1131.53L281.944,1138.59L287.362,1138.59L286.984,1143.33L281.566,1143.33L280.894,1151.61Z" style="fill:white;fill-rule:nonzero;"/> + <path d="M287.656,1157.61L289.714,1153.2C290.89,1154.01 292.15,1154.64 293.494,1155.07C294.838,1155.51 296.182,1155.72 297.526,1155.72C298.702,1155.72 299.57,1155.55 300.13,1155.22C300.69,1154.88 300.97,1154.43 300.97,1153.87C300.97,1153.29 300.641,1152.82 299.983,1152.49C299.325,1152.15 298.254,1151.76 296.77,1151.31C295.23,1150.89 293.97,1150.47 292.99,1150.05C292.01,1149.63 291.163,1149.01 290.449,1148.18C289.735,1147.36 289.378,1146.29 289.378,1144.97C289.378,1143.6 289.763,1142.39 290.533,1141.36C291.303,1140.32 292.395,1139.51 293.809,1138.92C295.223,1138.33 296.84,1138.04 298.66,1138.04C300.256,1138.04 301.817,1138.28 303.343,1138.75C304.869,1139.23 306.15,1139.87 307.186,1140.69L305.17,1144.93C304.134,1144.17 303.042,1143.6 301.894,1143.21C300.746,1142.81 299.626,1142.62 298.534,1142.62C297.386,1142.62 296.518,1142.79 295.93,1143.12C295.342,1143.46 295.048,1143.92 295.048,1144.51C295.048,1145.12 295.398,1145.61 296.098,1145.98C296.798,1146.34 297.862,1146.72 299.29,1147.11C300.83,1147.56 302.083,1147.99 303.049,1148.41C304.015,1148.83 304.855,1149.46 305.569,1150.28C306.283,1151.11 306.64,1152.18 306.64,1153.5C306.64,1155.6 305.807,1157.24 304.141,1158.43C302.475,1159.62 300.228,1160.22 297.4,1160.22C293.76,1160.22 290.512,1159.35 287.656,1157.61Z" style="fill:white;fill-rule:nonzero;"/> + <path d="M341.962,1156.98L341.962,1159.88L322.726,1159.88L322.726,1157.28L333.184,1145.68C334.584,1144.12 335.606,1142.7 336.25,1141.44C336.894,1140.18 337.216,1138.92 337.216,1137.66C337.216,1136.01 336.74,1134.74 335.788,1133.86C334.836,1132.98 333.478,1132.54 331.714,1132.54C328.858,1132.54 326.03,1133.69 323.23,1135.98L321.928,1133.34C323.104,1132.22 324.588,1131.32 326.38,1130.65C328.172,1129.98 329.978,1129.64 331.798,1129.64C334.542,1129.64 336.712,1130.35 338.308,1131.76C339.904,1133.17 340.702,1135.09 340.702,1137.49C340.702,1139.2 340.317,1140.85 339.547,1142.43C338.777,1144.01 337.496,1145.78 335.704,1147.74L327.178,1156.98L341.962,1156.98Z" style="fill:white;fill-rule:nonzero;"/> + <path d="M351.454,1155.55L351.454,1158.62C351.454,1159.8 351.258,1160.87 350.866,1161.85C350.474,1162.83 349.816,1163.79 348.892,1164.71L347.296,1163.49C348.388,1162.23 349.004,1161.03 349.144,1159.88L347.128,1159.88L347.128,1155.55L351.454,1155.55Z" style="fill:white;fill-rule:nonzero;"/> + <path d="M377.956,1150.51L377.956,1153.37L373.42,1153.37L373.42,1159.88L369.976,1159.88L369.976,1153.37L356.2,1153.37L356.2,1150.77L370.606,1129.98L373.42,1129.98L373.42,1150.51L377.956,1150.51ZM359.77,1150.51L369.976,1150.51L369.976,1135.81L359.77,1150.51Z" style="fill:white;fill-rule:nonzero;"/> + <path d="M386.356,1155.55L386.356,1158.62C386.356,1159.8 386.16,1160.87 385.768,1161.85C385.376,1162.83 384.718,1163.79 383.794,1164.71L382.198,1163.49C383.29,1162.23 383.906,1161.03 384.046,1159.88L382.03,1159.88L382.03,1155.55L386.356,1155.55Z" style="fill:white;fill-rule:nonzero;"/> + <path d="M407.839,1142.3C409.253,1143.1 410.338,1144.21 411.094,1145.64C411.85,1147.07 412.228,1148.72 412.228,1150.6C412.228,1152.47 411.815,1154.14 410.989,1155.6C410.163,1157.05 408.987,1158.18 407.461,1158.98C405.935,1159.78 404.15,1160.17 402.106,1160.17C400.286,1160.17 398.494,1159.85 396.73,1159.19C394.966,1158.53 393.482,1157.63 392.278,1156.48L393.58,1153.83C396.352,1156.13 399.194,1157.28 402.106,1157.28C404.206,1157.28 405.851,1156.68 407.041,1155.49C408.231,1154.3 408.826,1152.68 408.826,1150.64C408.826,1148.65 408.238,1147.05 407.062,1145.83C405.886,1144.61 404.318,1144 402.358,1144C399.502,1144 397.22,1145.17 395.512,1147.49L393.118,1147.49L393.118,1129.98L411.052,1129.98L411.052,1132.83L396.562,1132.83L396.562,1143.5C398.214,1141.9 400.328,1141.11 402.904,1141.11C404.78,1141.11 406.425,1141.51 407.839,1142.3Z" style="fill:white;fill-rule:nonzero;"/> + <path d="M421.258,1155.55L421.258,1158.62C421.258,1159.8 421.062,1160.87 420.67,1161.85C420.278,1162.83 419.62,1163.79 418.696,1164.71L417.1,1163.49C418.192,1162.23 418.808,1161.03 418.948,1159.88L416.932,1159.88L416.932,1155.55L421.258,1155.55Z" style="fill:white;fill-rule:nonzero;"/> + <path d="M445.639,1147.26C446.717,1148.56 447.256,1150.12 447.256,1151.94C447.256,1154.49 446.29,1156.5 444.358,1157.97C442.426,1159.44 439.822,1160.17 436.546,1160.17C433.27,1160.17 430.666,1159.44 428.734,1157.97C426.802,1156.5 425.836,1154.49 425.836,1151.94C425.836,1150.12 426.389,1148.55 427.495,1147.24C428.601,1145.92 430.12,1145.01 432.052,1144.51C430.26,1143.98 428.888,1143.1 427.936,1141.88C426.984,1140.66 426.508,1139.23 426.508,1137.58C426.508,1135.98 426.928,1134.59 427.768,1133.4C428.608,1132.21 429.791,1131.29 431.317,1130.63C432.843,1129.97 434.586,1129.64 436.546,1129.64C438.506,1129.64 440.249,1129.97 441.775,1130.63C443.301,1131.29 444.484,1132.21 445.324,1133.4C446.164,1134.59 446.584,1135.98 446.584,1137.58C446.584,1139.23 446.101,1140.66 445.135,1141.88C444.169,1143.1 442.818,1143.98 441.082,1144.51C443.042,1145.04 444.561,1145.96 445.639,1147.26ZM431.737,1141.71C432.927,1142.71 434.53,1143.32 436.546,1143.54C438.562,1143.32 440.165,1142.71 441.355,1141.71C442.545,1140.72 443.14,1139.43 443.14,1137.83C443.14,1136.18 442.559,1134.88 441.397,1133.92C440.235,1132.97 438.618,1132.5 436.546,1132.5C434.474,1132.5 432.857,1132.97 431.695,1133.92C430.533,1134.88 429.952,1136.18 429.952,1137.83C429.952,1139.43 430.547,1140.72 431.737,1141.71ZM441.964,1155.89C443.224,1154.94 443.854,1153.55 443.854,1151.73C443.854,1150.08 443.189,1148.76 441.859,1147.76C440.529,1146.77 438.758,1146.16 436.546,1145.94C434.334,1146.16 432.563,1146.77 431.233,1147.76C429.903,1148.76 429.238,1150.08 429.238,1151.73C429.238,1153.55 429.868,1154.94 431.128,1155.89C432.388,1156.84 434.194,1157.32 436.546,1157.32C438.898,1157.32 440.704,1156.84 441.964,1155.89Z" style="fill:white;fill-rule:nonzero;"/> + </g> + <g transform="matrix(1.17016,0,0,1.17016,1419.05,497.426)"> + <path d="M71.23,1159.88L71.23,1132.92L60.814,1132.92L60.814,1129.98L85.132,1129.98L85.132,1132.92L74.716,1132.92L74.716,1159.88L71.23,1159.88Z" style="fill:white;fill-rule:nonzero;"/> + <path d="M103.36,1149.21L87.862,1149.21C87.89,1151.9 88.513,1153.93 89.731,1155.3C90.949,1156.67 92.72,1157.36 95.044,1157.36C97.508,1157.36 99.776,1156.53 101.848,1154.88L102.982,1157.36C102.058,1158.23 100.875,1158.91 99.433,1159.42C97.991,1159.92 96.514,1160.17 95.002,1160.17C91.698,1160.17 89.108,1159.2 87.232,1157.26C85.356,1155.31 84.418,1152.64 84.418,1149.25C84.418,1147.1 84.838,1145.19 85.678,1143.52C86.518,1141.86 87.694,1140.56 89.206,1139.64C90.718,1138.71 92.44,1138.25 94.372,1138.25C97.172,1138.25 99.37,1139.17 100.966,1141C102.562,1142.84 103.36,1145.36 103.36,1148.58L103.36,1149.21ZM90.109,1142.49C89.003,1143.56 88.296,1145.05 87.988,1146.99L100.294,1146.99C100.126,1145 99.545,1143.49 98.551,1142.45C97.557,1141.41 96.178,1140.9 94.414,1140.9C92.65,1140.9 91.215,1141.43 90.109,1142.49Z" style="fill:white;fill-rule:nonzero;"/> + <path d="M120.286,1138.5L120.202,1141.61C119.558,1141.39 118.816,1141.27 117.976,1141.27C115.932,1141.27 114.413,1141.91 113.419,1143.18C112.425,1144.46 111.928,1146.01 111.928,1147.83L111.928,1159.88L108.526,1159.88L108.526,1144.68C108.526,1142.49 108.414,1140.52 108.19,1138.75L111.424,1138.75L111.76,1142.66C112.292,1141.23 113.146,1140.14 114.322,1139.38C115.498,1138.63 116.842,1138.25 118.354,1138.25C119.054,1138.25 119.698,1138.33 120.286,1138.5Z" style="fill:white;fill-rule:nonzero;"/> + <path d="M154.18,1146.61L154.18,1159.88L150.778,1159.88L150.778,1146.78C150.778,1144.79 150.435,1143.35 149.749,1142.45C149.063,1141.55 147.95,1141.11 146.41,1141.11C144.618,1141.11 143.218,1141.71 142.21,1142.91C141.202,1144.12 140.698,1145.75 140.698,1147.83L140.698,1159.88L137.296,1159.88L137.296,1146.78C137.296,1144.82 136.946,1143.38 136.246,1142.47C135.546,1141.56 134.426,1141.11 132.886,1141.11C131.094,1141.11 129.687,1141.71 128.665,1142.91C127.643,1144.12 127.132,1145.75 127.132,1147.83L127.132,1159.88L123.73,1159.88L123.73,1144.68C123.73,1142.49 123.618,1140.52 123.394,1138.75L126.628,1138.75L126.964,1142.45C127.552,1141.11 128.427,1140.07 129.589,1139.34C130.751,1138.61 132.102,1138.25 133.642,1138.25C135.322,1138.25 136.694,1138.59 137.758,1139.26C138.822,1139.93 139.606,1140.97 140.11,1142.37C140.754,1141.11 141.699,1140.11 142.945,1139.36C144.191,1138.62 145.598,1138.25 147.166,1138.25C151.842,1138.25 154.18,1141.04 154.18,1146.61Z" style="fill:white;fill-rule:nonzero;"/> + <path d="M189.082,1147.11C190.006,1148.34 190.468,1149.9 190.468,1151.77C190.468,1154.38 189.586,1156.43 187.822,1157.93C186.058,1159.42 183.664,1160.17 180.64,1160.17C178.708,1160.17 176.853,1159.85 175.075,1159.21C173.297,1158.56 171.792,1157.65 170.56,1156.48L171.904,1153.83C174.676,1156.13 177.56,1157.28 180.556,1157.28C182.684,1157.28 184.301,1156.8 185.407,1155.85C186.513,1154.9 187.066,1153.5 187.066,1151.65C187.066,1147.98 184.77,1146.15 180.178,1146.15L176.734,1146.15L176.734,1143.25L179.506,1143.25C181.718,1143.25 183.412,1142.76 184.588,1141.78C185.764,1140.8 186.352,1139.4 186.352,1137.58C186.352,1135.95 185.869,1134.71 184.903,1133.84C183.937,1132.97 182.572,1132.54 180.808,1132.54C177.952,1132.54 175.124,1133.69 172.324,1135.98L171.022,1133.34C172.226,1132.19 173.703,1131.29 175.453,1130.63C177.203,1129.97 179.03,1129.64 180.934,1129.64C183.622,1129.64 185.771,1130.33 187.381,1131.7C188.991,1133.07 189.796,1134.92 189.796,1137.24C189.796,1138.95 189.376,1140.45 188.536,1141.74C187.696,1143.02 186.534,1143.95 185.05,1144.51C186.814,1145.01 188.158,1145.88 189.082,1147.11Z" style="fill:white;fill-rule:nonzero;"/> + <path d="M196.222,1139.22L200.548,1139.22L200.548,1143.58L196.222,1143.58L196.222,1139.22ZM196.222,1155.55L200.548,1155.55L200.548,1158.62C200.548,1159.8 200.352,1160.87 199.96,1161.85C199.568,1162.83 198.91,1163.79 197.986,1164.71L196.39,1163.49C197.482,1162.23 198.098,1161.03 198.238,1159.88L196.222,1159.88L196.222,1155.55Z" style="fill:white;fill-rule:nonzero;"/> + <path d="M216.382,1159.88L218.734,1129.98L225.328,1129.98L223.354,1154.55L236.71,1154.55L236.29,1159.88L216.382,1159.88Z" style="fill:white;fill-rule:nonzero;"/> + <path d="M239.86,1159.88L241.54,1138.59L247.882,1138.59L246.202,1159.88L239.86,1159.88ZM242.044,1128.59L248.848,1128.59L248.386,1134.55L241.582,1134.55L242.044,1128.59Z" style="fill:white;fill-rule:nonzero;"/> + <path d="M250.108,1157.61L252.166,1153.2C253.342,1154.01 254.602,1154.64 255.946,1155.07C257.29,1155.51 258.634,1155.72 259.978,1155.72C261.154,1155.72 262.022,1155.55 262.582,1155.22C263.142,1154.88 263.422,1154.43 263.422,1153.87C263.422,1153.29 263.093,1152.82 262.435,1152.49C261.777,1152.15 260.706,1151.76 259.222,1151.31C257.682,1150.89 256.422,1150.47 255.442,1150.05C254.462,1149.63 253.615,1149.01 252.901,1148.18C252.187,1147.36 251.83,1146.29 251.83,1144.97C251.83,1143.6 252.215,1142.39 252.985,1141.36C253.755,1140.32 254.847,1139.51 256.261,1138.92C257.675,1138.33 259.292,1138.04 261.112,1138.04C262.708,1138.04 264.269,1138.28 265.795,1138.75C267.321,1139.23 268.602,1139.87 269.638,1140.69L267.622,1144.93C266.586,1144.17 265.494,1143.6 264.346,1143.21C263.198,1142.81 262.078,1142.62 260.986,1142.62C259.838,1142.62 258.97,1142.79 258.382,1143.12C257.794,1143.46 257.5,1143.92 257.5,1144.51C257.5,1145.12 257.85,1145.61 258.55,1145.98C259.25,1146.34 260.314,1146.72 261.742,1147.11C263.282,1147.56 264.535,1147.99 265.501,1148.41C266.467,1148.83 267.307,1149.46 268.021,1150.28C268.735,1151.11 269.092,1152.18 269.092,1153.5C269.092,1155.6 268.259,1157.24 266.593,1158.43C264.927,1159.62 262.68,1160.22 259.852,1160.22C256.212,1160.22 252.964,1159.35 250.108,1157.61Z" style="fill:white;fill-rule:nonzero;"/> + <path d="M280.894,1151.61C280.81,1152.78 281.048,1153.65 281.608,1154.21C282.168,1154.77 282.938,1155.05 283.918,1155.05C284.562,1155.05 285.276,1154.94 286.06,1154.71L285.64,1159.63C284.688,1160.02 283.456,1160.22 281.944,1160.22C279.536,1160.22 277.695,1159.57 276.421,1158.28C275.147,1157 274.51,1155.18 274.51,1152.82C274.51,1152.35 274.524,1151.98 274.552,1151.73L275.224,1143.33L271.192,1143.33L271.57,1138.59L275.602,1138.59L275.98,1133.59L282.49,1131.53L281.944,1138.59L287.362,1138.59L286.984,1143.33L281.566,1143.33L280.894,1151.61Z" style="fill:white;fill-rule:nonzero;"/> + <path d="M287.656,1157.61L289.714,1153.2C290.89,1154.01 292.15,1154.64 293.494,1155.07C294.838,1155.51 296.182,1155.72 297.526,1155.72C298.702,1155.72 299.57,1155.55 300.13,1155.22C300.69,1154.88 300.97,1154.43 300.97,1153.87C300.97,1153.29 300.641,1152.82 299.983,1152.49C299.325,1152.15 298.254,1151.76 296.77,1151.31C295.23,1150.89 293.97,1150.47 292.99,1150.05C292.01,1149.63 291.163,1149.01 290.449,1148.18C289.735,1147.36 289.378,1146.29 289.378,1144.97C289.378,1143.6 289.763,1142.39 290.533,1141.36C291.303,1140.32 292.395,1139.51 293.809,1138.92C295.223,1138.33 296.84,1138.04 298.66,1138.04C300.256,1138.04 301.817,1138.28 303.343,1138.75C304.869,1139.23 306.15,1139.87 307.186,1140.69L305.17,1144.93C304.134,1144.17 303.042,1143.6 301.894,1143.21C300.746,1142.81 299.626,1142.62 298.534,1142.62C297.386,1142.62 296.518,1142.79 295.93,1143.12C295.342,1143.46 295.048,1143.92 295.048,1144.51C295.048,1145.12 295.398,1145.61 296.098,1145.98C296.798,1146.34 297.862,1146.72 299.29,1147.11C300.83,1147.56 302.083,1147.99 303.049,1148.41C304.015,1148.83 304.855,1149.46 305.569,1150.28C306.283,1151.11 306.64,1152.18 306.64,1153.5C306.64,1155.6 305.807,1157.24 304.141,1158.43C302.475,1159.62 300.228,1160.22 297.4,1160.22C293.76,1160.22 290.512,1159.35 287.656,1157.61Z" style="fill:white;fill-rule:nonzero;"/> + <path d="M343.054,1150.51L343.054,1153.37L338.518,1153.37L338.518,1159.88L335.074,1159.88L335.074,1153.37L321.298,1153.37L321.298,1150.77L335.704,1129.98L338.518,1129.98L338.518,1150.51L343.054,1150.51ZM324.868,1150.51L335.074,1150.51L335.074,1135.81L324.868,1150.51Z" style="fill:white;fill-rule:nonzero;"/> + <path d="M351.454,1155.55L351.454,1158.62C351.454,1159.8 351.258,1160.87 350.866,1161.85C350.474,1162.83 349.816,1163.79 348.892,1164.71L347.296,1163.49C348.388,1162.23 349.004,1161.03 349.144,1159.88L347.128,1159.88L347.128,1155.55L351.454,1155.55Z" style="fill:white;fill-rule:nonzero;"/> + <path d="M372.853,1142.3C374.267,1143.1 375.366,1144.22 376.15,1145.66C376.934,1147.11 377.326,1148.75 377.326,1150.6C377.326,1152.45 376.913,1154.1 376.087,1155.55C375.261,1157.01 374.12,1158.15 372.664,1158.98C371.208,1159.8 369.556,1160.22 367.708,1160.22C364.096,1160.22 361.31,1158.96 359.35,1156.44C357.39,1153.92 356.41,1150.33 356.41,1145.68C356.41,1142.32 356.865,1139.44 357.775,1137.03C358.685,1134.62 360.001,1132.79 361.723,1131.53C363.445,1130.27 365.51,1129.64 367.918,1129.64C369.654,1129.64 371.341,1129.96 372.979,1130.61C374.617,1131.25 376.052,1132.16 377.284,1133.34L375.982,1135.98C374.582,1134.81 373.238,1133.94 371.95,1133.38C370.662,1132.82 369.346,1132.54 368.002,1132.54C365.426,1132.54 363.424,1133.69 361.996,1135.98C360.568,1138.28 359.854,1141.5 359.854,1145.64L359.854,1146.27C360.498,1144.68 361.548,1143.42 363.004,1142.49C364.46,1141.57 366.126,1141.11 368.002,1141.11C369.822,1141.11 371.439,1141.51 372.853,1142.3ZM372.16,1155.49C373.336,1154.27 373.924,1152.66 373.924,1150.64C373.924,1148.65 373.329,1147.05 372.139,1145.83C370.949,1144.61 369.402,1144 367.498,1144C365.538,1144 363.942,1144.62 362.71,1145.85C361.478,1147.08 360.862,1148.68 360.862,1150.64C360.862,1152.63 361.478,1154.24 362.71,1155.47C363.942,1156.7 365.552,1157.32 367.54,1157.32C369.444,1157.32 370.984,1156.71 372.16,1155.49Z" style="fill:white;fill-rule:nonzero;"/> + <path d="M386.356,1155.55L386.356,1158.62C386.356,1159.8 386.16,1160.87 385.768,1161.85C385.376,1162.83 384.718,1163.79 383.794,1164.71L382.198,1163.49C383.29,1162.23 383.906,1161.03 384.046,1159.88L382.03,1159.88L382.03,1155.55L386.356,1155.55Z" style="fill:white;fill-rule:nonzero;"/> + <path d="M391.774,1129.98L411.514,1129.98L411.514,1132.54L397.486,1159.88L393.79,1159.88L407.734,1132.87L391.774,1132.87L391.774,1129.98Z" style="fill:white;fill-rule:nonzero;"/> + <path d="M421.258,1155.55L421.258,1158.62C421.258,1159.8 421.062,1160.87 420.67,1161.85C420.278,1162.83 419.62,1163.79 418.696,1164.71L417.1,1163.49C418.192,1162.23 418.808,1161.03 418.948,1159.88L416.932,1159.88L416.932,1155.55L421.258,1155.55Z" style="fill:white;fill-rule:nonzero;"/> + <path d="M443.98,1133.42C445.94,1135.94 446.92,1139.52 446.92,1144.17C446.92,1149.24 445.905,1153.18 443.875,1156C441.845,1158.81 439.01,1160.22 435.37,1160.22C433.662,1160.22 431.989,1159.89 430.351,1159.25C428.713,1158.61 427.264,1157.7 426.004,1156.52L427.348,1153.87C428.776,1155.08 430.134,1155.95 431.422,1156.5C432.71,1157.05 434.012,1157.32 435.328,1157.32C437.904,1157.32 439.899,1156.17 441.313,1153.87C442.727,1151.58 443.434,1148.36 443.434,1144.21L443.434,1143.67C442.79,1145.24 441.74,1146.48 440.284,1147.38C438.828,1148.3 437.162,1148.75 435.286,1148.75C433.466,1148.75 431.856,1148.35 430.456,1147.55C429.056,1146.76 427.964,1145.63 427.18,1144.19C426.396,1142.75 426.004,1141.11 426.004,1139.26C426.004,1137.41 426.417,1135.76 427.243,1134.3C428.069,1132.85 429.21,1131.7 430.666,1130.88C432.122,1130.05 433.774,1129.64 435.622,1129.64C439.234,1129.64 442.02,1130.9 443.98,1133.42ZM440.62,1144C441.852,1142.77 442.468,1141.18 442.468,1139.22C442.468,1137.23 441.852,1135.62 440.62,1134.39C439.388,1133.15 437.778,1132.54 435.79,1132.54C433.886,1132.54 432.346,1133.15 431.17,1134.37C429.994,1135.58 429.406,1137.2 429.406,1139.22C429.406,1141.2 429.994,1142.81 431.17,1144.03C432.346,1145.24 433.9,1145.85 435.832,1145.85C437.792,1145.85 439.388,1145.24 440.62,1144Z" style="fill:white;fill-rule:nonzero;"/> + </g> + <g transform="matrix(0.211311,0,0,0.473437,924.581,1896.21)"> + <rect x="759.403" y="100.455" width="487.587" height="249.829" style="fill:rgb(0,168,138);"/> + <path d="M1246.99,350.284L759.403,350.284L759.403,100.455L1246.99,100.455L1246.99,350.284ZM788.243,113.327L788.243,337.412L1218.15,337.412L1218.15,113.327L788.243,113.327Z"/> + </g> + <g transform="matrix(0.626068,0,0,0.626068,1000.38,1493.46)"> + <path d="M238.058,803.134C243.772,806.359 248.157,810.857 251.212,816.627C254.267,822.398 255.794,829.073 255.794,836.654C255.794,844.235 254.125,850.967 250.787,856.851C247.45,862.735 242.697,867.289 236.531,870.514C230.364,873.738 223.151,875.351 214.891,875.351C207.537,875.351 200.296,874.021 193.167,871.362C186.039,868.703 180.042,865.054 175.177,860.415L180.438,849.723C191.64,859.001 203.124,863.64 214.891,863.64C223.378,863.64 230.025,861.236 234.834,856.427C239.642,851.618 242.047,845.084 242.047,836.824C242.047,828.791 239.671,822.313 234.919,817.391C230.166,812.469 223.83,810.008 215.91,810.008C204.369,810.008 195.147,814.704 188.245,824.095L178.571,824.095L178.571,753.321L251.042,753.321L251.042,764.862L192.488,764.862L192.488,807.972C199.164,801.522 207.707,798.297 218.116,798.297C225.697,798.297 232.344,799.91 238.058,803.134Z" style="fill:rgb(242,242,242);fill-rule:nonzero;"/> + </g> + <g transform="matrix(0.211311,0,0,0.473437,1068.72,1896.64)"> + <rect x="759.403" y="100.455" width="487.587" height="249.829" style="fill:rgb(0,168,138);"/> + <path d="M1246.99,350.284L759.403,350.284L759.403,100.455L1246.99,100.455L1246.99,350.284ZM788.243,113.327L788.243,337.412L1218.15,337.412L1218.15,113.327L788.243,113.327Z"/> + </g> + <g transform="matrix(0.626068,0,0,0.626068,1144.52,1493.88)"> + <path d="M249.769,823.162C254.125,828.423 256.303,834.731 256.303,842.085C256.303,852.382 252.4,860.5 244.593,866.44C236.785,872.381 226.263,875.351 213.025,875.351C199.786,875.351 189.264,872.381 181.457,866.44C173.649,860.5 169.746,852.382 169.746,842.085C169.746,834.731 171.98,828.395 176.45,823.077C180.919,817.759 187.057,814.081 194.864,812.045C187.623,809.895 182.079,806.359 178.232,801.437C174.385,796.515 172.461,790.717 172.461,784.041C172.461,777.592 174.159,771.962 177.553,767.154C180.947,762.345 185.728,758.611 191.894,755.952C198.061,753.293 205.104,751.964 213.025,751.964C220.945,751.964 227.988,753.293 234.155,755.952C240.321,758.611 245.102,762.345 248.496,767.154C251.891,771.962 253.588,777.592 253.588,784.041C253.588,790.717 251.636,796.515 247.732,801.437C243.829,806.359 238.37,809.895 231.354,812.045C239.275,814.195 245.413,817.9 249.769,823.162ZM193.592,800.758C198.4,804.775 204.878,807.236 213.025,808.141C221.171,807.236 227.649,804.775 232.458,800.758C237.266,796.742 239.671,791.509 239.671,785.059C239.671,778.384 237.323,773.122 232.627,769.275C227.932,765.428 221.397,763.505 213.025,763.505C204.652,763.505 198.117,765.428 193.422,769.275C188.726,773.122 186.378,778.384 186.378,785.059C186.378,791.509 188.783,796.742 193.592,800.758ZM234.919,858.039C240.01,854.192 242.556,848.591 242.556,841.237C242.556,834.561 239.869,829.215 234.494,825.198C229.12,821.181 221.963,818.72 213.025,817.815C204.086,818.72 196.929,821.181 191.555,825.198C186.18,829.215 183.493,834.561 183.493,841.237C183.493,848.591 186.039,854.192 191.131,858.039C196.222,861.886 203.52,863.81 213.025,863.81C222.529,863.81 229.827,861.886 234.919,858.039Z" style="fill:rgb(242,242,242);fill-rule:nonzero;"/> + </g> + <g transform="matrix(0.211311,0,0,0.473437,1288.44,1896.64)"> + <rect x="759.403" y="100.455" width="487.587" height="249.829" style="fill:rgb(0,168,138);"/> + <path d="M1246.99,350.284L759.403,350.284L759.403,100.455L1246.99,100.455L1246.99,350.284ZM788.244,113.327L788.244,337.412L1218.15,337.412L1218.15,113.327L788.244,113.327Z"/> + </g> + <g transform="matrix(0.626068,0,0,0.626068,1364.24,1493.88)"> + <path d="M258.34,836.315L258.34,847.856L240.01,847.856L240.01,874.163L226.093,874.163L226.093,847.856L170.425,847.856L170.425,837.333L228.639,753.321L240.01,753.321L240.01,836.315L258.34,836.315ZM184.851,836.315L226.093,836.315L226.093,776.913L184.851,836.315Z" style="fill:rgb(242,242,242);fill-rule:nonzero;"/> + </g> + <g transform="matrix(0.211311,0,0,0.473437,1435.79,1896.64)"> + <rect x="759.403" y="100.455" width="487.587" height="249.829" style="fill:rgb(0,168,138);"/> + <path d="M1246.99,350.284L759.403,350.284L759.403,100.455L1246.99,100.455L1246.99,350.284ZM788.244,113.327L788.244,337.412L1218.15,337.412L1218.15,113.327L788.244,113.327Z"/> + </g> + <g transform="matrix(0.626068,0,0,0.626068,1511.59,1493.88)"> + <path d="M237.719,803.134C243.433,806.359 247.874,810.885 251.042,816.712C254.21,822.539 255.794,829.187 255.794,836.654C255.794,844.122 254.125,850.798 250.787,856.681C247.45,862.565 242.839,867.176 236.955,870.514C231.072,873.851 224.396,875.52 216.928,875.52C202.332,875.52 191.074,870.429 183.154,860.245C175.233,850.062 171.273,835.579 171.273,816.797C171.273,803.219 173.112,791.565 176.789,781.835C180.466,772.104 185.784,764.693 192.743,759.601C199.701,754.509 208.046,751.964 217.777,751.964C224.792,751.964 231.609,753.265 238.228,755.867C244.847,758.47 250.646,762.147 255.624,766.899L250.363,777.592C244.706,772.839 239.275,769.332 234.07,767.069C228.865,764.806 223.547,763.674 218.116,763.674C207.707,763.674 199.617,768.313 193.846,777.592C188.076,786.87 185.19,799.881 185.19,816.627L185.19,819.173C187.793,812.724 192.036,807.632 197.919,803.898C203.803,800.164 210.535,798.297 218.116,798.297C225.471,798.297 232.005,799.91 237.719,803.134ZM234.919,856.427C239.671,851.505 242.047,844.971 242.047,836.824C242.047,828.791 239.642,822.313 234.834,817.391C230.025,812.469 223.774,810.008 216.08,810.008C208.159,810.008 201.71,812.497 196.731,817.476C191.753,822.454 189.264,828.904 189.264,836.824C189.264,844.857 191.753,851.363 196.731,856.342C201.71,861.32 208.216,863.81 216.249,863.81C223.943,863.81 230.166,861.349 234.919,856.427Z" style="fill:rgb(242,242,242);fill-rule:nonzero;"/> + </g> + <g transform="matrix(0.211311,0,0,0.473437,1579.24,1896.64)"> + <rect x="759.403" y="100.455" width="487.587" height="249.829" style="fill:rgb(0,168,138);"/> + <path d="M1246.99,350.284L759.403,350.284L759.403,100.455L1246.99,100.455L1246.99,350.284ZM788.244,113.327L788.244,337.412L1218.15,337.412L1218.15,113.327L788.244,113.327Z"/> + </g> + <g transform="matrix(0.626068,0,0,0.626068,1657.86,1494.73)"> + <path d="M173.14,753.321L252.909,753.321L252.909,763.674L196.222,874.163L181.287,874.163L237.634,765.032L173.14,765.032L173.14,753.321Z" style="fill:rgb(242,242,242);fill-rule:nonzero;"/> + </g> + <g transform="matrix(0.211311,0,0,0.473437,1723.37,1896.64)"> + <rect x="759.403" y="100.455" width="487.587" height="249.829" style="fill:rgb(0,168,138);"/> + <path d="M1246.99,350.284L759.403,350.284L759.403,100.455L1246.99,100.455L1246.99,350.284ZM788.243,113.327L788.243,337.412L1218.15,337.412L1218.15,113.327L788.243,113.327Z"/> + </g> + <g transform="matrix(0.626068,0,0,0.626068,1799.18,1493.88)"> + <path d="M243.065,767.239C250.985,777.422 254.946,791.905 254.946,810.687C254.946,831.167 250.844,847.092 242.641,858.463C234.438,869.835 222.982,875.52 208.272,875.52C201.37,875.52 194.61,874.219 187.991,871.617C181.372,869.014 175.516,865.337 170.425,860.585L175.856,849.893C181.626,854.758 187.114,858.294 192.319,860.5C197.523,862.706 202.785,863.81 208.103,863.81C218.512,863.81 226.574,859.171 232.288,849.893C238.002,840.614 240.859,827.603 240.859,810.857L240.859,808.65C238.256,814.987 234.013,819.993 228.13,823.671C222.246,827.348 215.514,829.187 207.933,829.187C200.578,829.187 194.072,827.574 188.415,824.35C182.758,821.125 178.345,816.599 175.177,810.772C172.009,804.945 170.425,798.297 170.425,790.83C170.425,783.362 172.094,776.686 175.431,770.803C178.769,764.919 183.38,760.308 189.264,756.97C195.147,753.633 201.823,751.964 209.291,751.964C223.887,751.964 235.145,757.055 243.065,767.239ZM229.487,810.008C234.466,805.03 236.955,798.58 236.955,790.66C236.955,782.627 234.466,776.121 229.487,771.142C224.509,766.164 218.003,763.674 209.97,763.674C202.276,763.674 196.052,766.135 191.3,771.057C186.548,775.979 184.172,782.513 184.172,790.66C184.172,798.693 186.548,805.171 191.3,810.093C196.052,815.015 202.332,817.476 210.139,817.476C218.06,817.476 224.509,814.987 229.487,810.008Z" style="fill:rgb(242,242,242);fill-rule:nonzero;"/> + </g> + <g transform="matrix(1.17016,0,0,1.17016,-106.926,453.583)"> + <path d="M1000,1100L1000,1131.02L1000,1115.54L437.697,1115.54L437.697,1131.02" style="fill:none;stroke:black;stroke-width:5.21px;"/> + </g> + <g transform="matrix(1.17016,0,0,1.17016,-106.926,453.583)"> + <path d="M1000,1115.51L1559.46,1115.51L1559.46,1131.02" style="fill:none;stroke:black;stroke-width:5.21px;"/> + </g> + <g transform="matrix(1.17016,0,0,1.17016,-106.926,453.583)"> + <path d="M438.385,1238.26L438.385,1255.91L252.909,1255.91L252.909,1273.85" style="fill:none;stroke:black;stroke-width:5.21px;"/> + </g> + <g transform="matrix(1.17016,0,0,1.17016,-106.926,453.583)"> + <path d="M378.697,1256.06L378.697,1273.85" style="fill:none;stroke:black;stroke-width:5.21px;"/> + </g> + <g transform="matrix(1.17016,0,0,1.17016,-106.926,453.583)"> + <path d="M438.385,1256.06L623.174,1256.06L623.174,1273.85" style="fill:none;stroke:black;stroke-width:5.21px;"/> + </g> + <g transform="matrix(1.17016,0,0,1.17016,-106.926,453.583)"> + <path d="M501.146,1256.06L501.146,1273.85" style="fill:none;stroke:black;stroke-width:5.21px;"/> + </g> + <g transform="matrix(1.17016,0,0,1.17016,-106.926,453.583)"> + <path d="M941.433,1256.06L941.433,1273.85" style="fill:none;stroke:black;stroke-width:5.21px;"/> + </g> + <g transform="matrix(1.17016,0,0,1.17016,-106.926,453.583)"> + <path d="M1001.57,1256.06L1183.44,1256.06L1183.44,1273.85" style="fill:none;stroke:black;stroke-width:5.21px;"/> + </g> + <g transform="matrix(1.17016,0,0,1.17016,-106.926,453.583)"> + <path d="M1062.39,1256.06L1062.39,1273.85" style="fill:none;stroke:black;stroke-width:5.21px;"/> + </g> + <g transform="matrix(1.17016,0,0,1.17016,-106.926,453.583)"> + <path d="M1559.46,1238.26L1559.46,1256.06L1374.65,1256.06L1374.65,1273.85" style="fill:none;stroke:black;stroke-width:5.21px;"/> + </g> + <g transform="matrix(1.17016,0,0,1.17016,-106.926,453.583)"> + <path d="M1498.49,1256.06L1498.49,1273.85" style="fill:none;stroke:black;stroke-width:5.21px;"/> + </g> + <g transform="matrix(1.17016,0,0,1.17016,-106.926,453.583)"> + <path d="M1559.46,1256.06L1744.68,1256.06L1744.68,1273.85" style="fill:none;stroke:black;stroke-width:5.21px;"/> + </g> + <g transform="matrix(1.17016,0,0,1.17016,-106.926,453.583)"> + <path d="M1621.13,1256.06L1621.13,1273.85" style="fill:none;stroke:black;stroke-width:5.21px;"/> + </g> + <g transform="matrix(0.819173,0,0,0.819173,395.392,1435.61)"> + <path d="M605.323,227.059L605.323,168.366L582.65,168.366L582.65,161.967L635.584,161.967L635.584,168.366L612.911,168.366L612.911,227.059L605.323,227.059Z" style="fill:rgb(242,242,242);fill-rule:nonzero;"/> + <path d="M677.272,181.074L677.272,227.059L669.958,227.059L669.958,218.74C668.618,221.604 666.591,223.814 663.879,225.368C661.167,226.922 658.013,227.699 654.417,227.699C650.333,227.699 646.752,226.724 643.675,224.774C640.597,222.823 638.22,220.065 636.544,216.5C634.868,212.935 634.03,208.775 634.03,204.021C634.03,199.267 634.883,195.077 636.589,191.45C638.296,187.824 640.688,185.005 643.766,182.994C646.844,180.983 650.394,179.977 654.417,179.977C658.013,179.977 661.151,180.769 663.833,182.354C666.515,183.939 668.557,186.163 669.958,189.028L669.958,181.074L677.272,181.074ZM666.302,216.957C668.739,213.879 669.958,209.506 669.958,203.838C669.958,198.17 668.739,193.812 666.302,190.765C663.864,187.717 660.39,186.194 655.879,186.194C651.369,186.194 647.85,187.763 645.32,190.902C642.791,194.041 641.526,198.414 641.526,204.021C641.526,209.628 642.776,213.955 645.274,217.003C647.773,220.05 651.308,221.574 655.879,221.574C660.39,221.574 663.864,220.035 666.302,216.957Z" style="fill:rgb(242,242,242);fill-rule:nonzero;"/> + <path d="M713.384,203.381L732.308,227.059L723.44,227.059L708.904,208.958L694.551,227.059L685.5,227.059L704.607,203.381L686.597,181.074L695.557,181.074L708.904,197.987L722.252,181.074L731.302,181.074L713.384,203.381Z" style="fill:rgb(242,242,242);fill-rule:nonzero;"/> + <path d="M747.21,224.774C743.919,222.823 741.374,220.05 739.576,216.454C737.778,212.858 736.879,208.653 736.879,203.838C736.879,199.023 737.778,194.818 739.576,191.222C741.374,187.626 743.919,184.853 747.21,182.902C750.501,180.952 754.31,179.977 758.638,179.977C762.965,179.977 766.774,180.952 770.065,182.902C773.357,184.853 775.901,187.626 777.699,191.222C779.497,194.818 780.396,199.023 780.396,203.838C780.396,208.653 779.497,212.858 777.699,216.454C775.901,220.05 773.357,222.823 770.065,224.774C766.774,226.724 762.965,227.699 758.638,227.699C754.31,227.699 750.501,226.724 747.21,224.774ZM769.151,217.049C771.589,214.032 772.808,209.628 772.808,203.838C772.808,198.231 771.559,193.888 769.06,190.81C766.561,187.733 763.087,186.194 758.638,186.194C754.128,186.194 750.623,187.733 748.124,190.81C745.625,193.888 744.376,198.231 744.376,203.838C744.376,209.628 745.61,214.032 748.078,217.049C750.547,220.065 754.067,221.574 758.638,221.574C763.209,221.574 766.713,220.065 769.151,217.049Z" style="fill:rgb(242,242,242);fill-rule:nonzero;"/> + <path d="M831.41,198.17L831.41,227.059L824.004,227.059L824.004,198.536C824.004,194.269 823.151,191.146 821.445,189.165C819.738,187.184 817.056,186.194 813.399,186.194C809.133,186.194 805.72,187.504 803.16,190.125C800.6,192.746 799.32,196.281 799.32,200.73L799.32,227.059L791.915,227.059L791.915,193.964C791.915,189.211 791.671,184.914 791.184,181.074L798.223,181.074L798.955,189.302C800.357,186.316 802.459,184.015 805.263,182.4C808.066,180.785 811.266,179.977 814.862,179.977C825.894,179.977 831.41,186.041 831.41,198.17Z" style="fill:rgb(242,242,242);fill-rule:nonzero;"/> + <path d="M852.985,224.774C849.694,222.823 847.149,220.05 845.351,216.454C843.553,212.858 842.654,208.653 842.654,203.838C842.654,199.023 843.553,194.818 845.351,191.222C847.149,187.626 849.694,184.853 852.985,182.902C856.276,180.952 860.086,179.977 864.413,179.977C868.74,179.977 872.549,180.952 875.841,182.902C879.132,184.853 881.676,187.626 883.474,191.222C885.272,194.818 886.171,199.023 886.171,203.838C886.171,208.653 885.272,212.858 883.474,216.454C881.676,220.05 879.132,222.823 875.841,224.774C872.549,226.724 868.74,227.699 864.413,227.699C860.086,227.699 856.276,226.724 852.985,224.774ZM874.926,217.049C877.364,214.032 878.583,209.628 878.583,203.838C878.583,198.231 877.334,193.888 874.835,190.81C872.336,187.733 868.862,186.194 864.413,186.194C859.903,186.194 856.398,187.733 853.899,190.81C851.4,193.888 850.151,198.231 850.151,203.838C850.151,209.628 851.385,214.032 853.854,217.049C856.322,220.065 859.842,221.574 864.413,221.574C868.984,221.574 872.488,220.065 874.926,217.049Z" style="fill:rgb(242,242,242);fill-rule:nonzero;"/> + <path d="M963.971,198.17L963.971,227.059L956.566,227.059L956.566,198.536C956.566,194.208 955.82,191.069 954.326,189.119C952.833,187.169 950.41,186.194 947.058,186.194C943.158,186.194 940.11,187.504 937.916,190.125C935.722,192.746 934.625,196.311 934.625,200.821L934.625,227.059L927.22,227.059L927.22,198.536C927.22,194.269 926.458,191.146 924.934,189.165C923.41,187.184 920.973,186.194 917.62,186.194C913.72,186.194 910.657,187.504 908.432,190.125C906.208,192.746 905.096,196.311 905.096,200.821L905.096,227.059L897.69,227.059L897.69,193.964C897.69,189.211 897.447,184.914 896.959,181.074L903.999,181.074L904.73,189.119C906.01,186.194 907.914,183.939 910.444,182.354C912.973,180.769 915.914,179.977 919.266,179.977C922.923,179.977 925.909,180.708 928.225,182.171C930.541,183.634 932.248,185.889 933.345,188.936C934.747,186.194 936.804,184.015 939.516,182.4C942.228,180.785 945.291,179.977 948.704,179.977C958.882,179.977 963.971,186.041 963.971,198.17Z" style="fill:rgb(242,242,242);fill-rule:nonzero;"/> + <path d="M1018.46,181.074L996.975,231.265C994.72,236.506 991.885,240.346 988.472,242.784C985.059,245.222 980.854,246.898 975.856,247.812L974.302,242.052C978.629,241.077 981.905,239.782 984.13,238.167C986.354,236.552 988.198,234.068 989.661,230.716L991.489,226.602L972.016,181.074L979.787,181.074L995.329,219.014L1011.05,181.074L1018.46,181.074Z" style="fill:rgb(242,242,242);fill-rule:nonzero;"/> + </g> + <g transform="matrix(0.819173,0,0,0.819173,396.058,1512.7)"> + <path d="M518.311,227.059L522.401,175.053L533.868,175.053L530.436,217.783L553.663,217.783L552.933,227.059L518.311,227.059Z" style="fill:rgb(242,242,242);fill-rule:nonzero;"/> + <path d="M559.141,227.059L562.063,190.027L573.092,190.027L570.17,227.059L559.141,227.059ZM562.939,172.643L574.772,172.643L573.969,183.015L562.136,183.015L562.939,172.643Z" style="fill:rgb(242,242,242);fill-rule:nonzero;"/> + <path d="M576.963,223.115L580.542,215.446C582.588,216.858 584.779,217.941 587.116,218.696C589.454,219.451 591.791,219.828 594.128,219.828C596.173,219.828 597.683,219.536 598.657,218.952C599.631,218.367 600.118,217.588 600.118,216.614C600.118,215.592 599.546,214.788 598.401,214.204C597.257,213.619 595.394,212.938 592.814,212.159C590.135,211.428 587.944,210.698 586.24,209.967C584.535,209.237 583.062,208.153 581.821,206.717C580.579,205.28 579.958,203.418 579.958,201.129C579.958,198.743 580.628,196.649 581.967,194.848C583.306,193.046 585.205,191.634 587.664,190.611C590.123,189.589 592.935,189.077 596.1,189.077C598.876,189.077 601.591,189.491 604.245,190.319C606.898,191.147 609.126,192.267 610.928,193.679L607.422,201.056C605.62,199.741 603.721,198.743 601.725,198.061C599.728,197.38 597.78,197.039 595.881,197.039C593.885,197.039 592.375,197.331 591.353,197.915C590.33,198.5 589.819,199.303 589.819,200.326C589.819,201.397 590.427,202.249 591.645,202.882C592.862,203.515 594.713,204.173 597.196,204.854C599.874,205.634 602.053,206.388 603.733,207.119C605.413,207.849 606.874,208.933 608.116,210.369C609.358,211.806 609.978,213.668 609.978,215.957C609.978,219.609 608.53,222.47 605.632,224.539C602.735,226.609 598.827,227.644 593.909,227.644C587.579,227.644 581.93,226.134 576.963,223.115Z" style="fill:rgb(242,242,242);fill-rule:nonzero;"/> + <path d="M630.503,212.67C630.357,214.715 630.771,216.225 631.745,217.199C632.719,218.172 634.058,218.659 635.762,218.659C636.882,218.659 638.124,218.465 639.487,218.075L638.757,226.621C637.101,227.303 634.959,227.644 632.329,227.644C628.142,227.644 624.94,226.524 622.724,224.284C620.509,222.044 619.401,218.879 619.401,214.788C619.401,213.96 619.425,213.327 619.474,212.889L620.643,198.281L613.631,198.281L614.288,190.027L621.3,190.027L621.957,181.335L633.279,177.756L632.329,190.027L641.752,190.027L641.094,198.281L631.672,198.281L630.503,212.67Z" style="fill:rgb(242,242,242);fill-rule:nonzero;"/> + <path d="M642.263,223.115L645.842,215.446C647.887,216.858 650.079,217.941 652.416,218.696C654.753,219.451 657.091,219.828 659.428,219.828C661.473,219.828 662.983,219.536 663.957,218.952C664.93,218.367 665.417,217.588 665.417,216.614C665.417,215.592 664.845,214.788 663.701,214.204C662.557,213.619 660.694,212.938 658.113,212.159C655.435,211.428 653.244,210.698 651.539,209.967C649.835,209.237 648.362,208.153 647.12,206.717C645.879,205.28 645.258,203.418 645.258,201.129C645.258,198.743 645.927,196.649 647.266,194.848C648.606,193.046 650.505,191.634 652.964,190.611C655.423,189.589 658.235,189.077 661.4,189.077C664.176,189.077 666.89,189.491 669.544,190.319C672.198,191.147 674.426,192.267 676.228,193.679L672.722,201.056C670.92,199.741 669.021,198.743 667.024,198.061C665.028,197.38 663.08,197.039 661.181,197.039C659.184,197.039 657.675,197.331 656.652,197.915C655.63,198.5 655.118,199.303 655.118,200.326C655.118,201.397 655.727,202.249 656.945,202.882C658.162,203.515 660.012,204.173 662.496,204.854C665.174,205.634 667.353,206.388 669.033,207.119C670.713,207.849 672.174,208.933 673.416,210.369C674.657,211.806 675.278,213.668 675.278,215.957C675.278,219.609 673.829,222.47 670.932,224.539C668.035,226.609 664.127,227.644 659.209,227.644C652.879,227.644 647.23,226.134 642.263,223.115Z" style="fill:rgb(242,242,242);fill-rule:nonzero;"/> + <path d="M716.182,227.059L716.182,180.166L698.067,180.166L698.067,175.053L740.359,175.053L740.359,180.166L722.244,180.166L722.244,227.059L716.182,227.059Z" style="fill:rgb(242,242,242);fill-rule:nonzero;"/> + <path d="M772.059,208.507L745.106,208.507C745.155,213.181 746.239,216.712 748.357,219.098C750.475,221.484 753.555,222.677 757.597,222.677C761.882,222.677 765.826,221.24 769.429,218.367L771.402,222.677C769.795,224.186 767.737,225.379 765.23,226.256C762.722,227.132 760.153,227.571 757.524,227.571C751.778,227.571 747.273,225.878 744.011,222.494C740.748,219.11 739.117,214.472 739.117,208.58C739.117,204.83 739.847,201.507 741.308,198.609C742.769,195.712 744.814,193.46 747.444,191.853C750.073,190.246 753.068,189.443 756.428,189.443C761.297,189.443 765.12,191.037 767.896,194.227C770.671,197.416 772.059,201.811 772.059,207.411L772.059,208.507ZM749.014,196.82C747.091,198.67 745.861,201.275 745.326,204.635L766.727,204.635C766.435,201.178 765.424,198.548 763.696,196.747C761.967,194.945 759.569,194.044 756.501,194.044C753.433,194.044 750.938,194.969 749.014,196.82Z" style="fill:rgb(242,242,242);fill-rule:nonzero;"/> + <path d="M801.495,189.881L801.349,195.286C800.229,194.896 798.938,194.702 797.478,194.702C793.923,194.702 791.281,195.809 789.553,198.025C787.824,200.241 786.96,202.931 786.96,206.096L786.96,227.059L781.043,227.059L781.043,200.618C781.043,196.82 780.848,193.387 780.459,190.319L786.083,190.319L786.667,197.112C787.593,194.629 789.078,192.729 791.123,191.415C793.168,190.1 795.506,189.443 798.135,189.443C799.352,189.443 800.472,189.589 801.495,189.881Z" style="fill:rgb(242,242,242);fill-rule:nonzero;"/> + <path d="M860.44,203.978L860.44,227.059L854.524,227.059L854.524,204.27C854.524,200.813 853.927,198.305 852.734,196.747C851.541,195.189 849.605,194.409 846.927,194.409C843.811,194.409 841.376,195.456 839.623,197.55C837.87,199.644 836.993,202.493 836.993,206.096L836.993,227.059L831.077,227.059L831.077,204.27C831.077,200.861 830.468,198.366 829.251,196.783C828.034,195.201 826.086,194.409 823.408,194.409C820.291,194.409 817.844,195.456 816.067,197.55C814.29,199.644 813.401,202.493 813.401,206.096L813.401,227.059L807.484,227.059L807.484,200.618C807.484,196.82 807.29,193.387 806.9,190.319L812.524,190.319L813.109,196.747C814.131,194.409 815.653,192.608 817.674,191.342C819.695,190.076 822.044,189.443 824.722,189.443C827.644,189.443 830.03,190.027 831.88,191.196C833.731,192.364 835.094,194.166 835.971,196.601C837.091,194.409 838.734,192.669 840.901,191.378C843.068,190.088 845.515,189.443 848.242,189.443C856.374,189.443 860.44,194.288 860.44,203.978Z" style="fill:rgb(242,242,242);fill-rule:nonzero;"/> + <path d="M869.424,222.823L871.396,218.44C873.393,219.998 875.414,221.118 877.459,221.8C879.504,222.482 881.793,222.823 884.325,222.823C887.1,222.823 889.206,222.348 890.643,221.398C892.079,220.449 892.798,219.073 892.798,217.272C892.798,215.811 892.311,214.642 891.337,213.766C890.363,212.889 888.756,212.207 886.516,211.72L880.307,210.26C877.24,209.578 874.866,208.36 873.186,206.607C871.506,204.854 870.666,202.761 870.666,200.326C870.666,197.112 871.956,194.495 874.537,192.474C877.118,190.453 880.527,189.443 884.763,189.443C887.344,189.443 889.779,189.856 892.067,190.684C894.356,191.512 896.279,192.705 897.838,194.263L895.865,198.573C892.408,195.7 888.707,194.263 884.763,194.263C882.134,194.263 880.1,194.762 878.664,195.761C877.228,196.759 876.509,198.159 876.509,199.961C876.509,201.47 876.96,202.663 877.861,203.54C878.761,204.416 880.21,205.098 882.207,205.585L888.415,207.119C891.824,207.898 894.356,209.103 896.012,210.734C897.667,212.366 898.495,214.496 898.495,217.125C898.495,220.291 897.205,222.823 894.624,224.722C892.043,226.621 888.537,227.571 884.106,227.571C877.921,227.571 873.028,225.988 869.424,222.823Z" style="fill:rgb(242,242,242);fill-rule:nonzero;"/> + <path d="M948.164,222.019L959.631,222.019L959.631,227.059L930.633,227.059L930.633,222.019L942.101,222.019L942.101,182.504L931.437,189.296L931.437,183.526L944.731,175.053L948.164,175.053L948.164,222.019Z" style="fill:rgb(242,242,242);fill-rule:nonzero;"/> + <path d="M977.307,219.536L977.307,224.868C977.307,226.913 976.967,228.788 976.285,230.492C975.603,232.197 974.459,233.852 972.852,235.459L970.076,233.341C971.975,231.15 973.047,229.056 973.29,227.059L969.784,227.059L969.784,219.536L977.307,219.536Z" style="fill:rgb(242,242,242);fill-rule:nonzero;"/> + <path d="M1021.5,222.019L1021.5,227.059L988.045,227.059L988.045,222.531L1006.23,202.371C1008.67,199.644 1010.44,197.185 1011.56,194.994C1012.68,192.802 1013.24,190.611 1013.24,188.42C1013.24,185.547 1012.42,183.344 1010.76,181.81C1009.11,180.276 1006.74,179.509 1003.68,179.509C998.709,179.509 993.791,181.505 988.921,185.498L986.657,180.897C988.702,178.949 991.283,177.391 994.399,176.222C997.516,175.053 1000.66,174.469 1003.82,174.469C1008.59,174.469 1012.37,175.698 1015.14,178.158C1017.92,180.617 1019.31,183.94 1019.31,188.128C1019.31,191.098 1018.64,193.959 1017.3,196.71C1015.96,199.461 1013.73,202.541 1010.62,205.95L995.787,222.019L1021.5,222.019Z" style="fill:rgb(242,242,242);fill-rule:nonzero;"/> + <path d="M1038.01,219.536L1038.01,224.868C1038.01,226.913 1037.66,228.788 1036.98,230.492C1036.3,232.197 1035.16,233.852 1033.55,235.459L1030.77,233.341C1032.67,231.15 1033.75,229.056 1033.99,227.059L1030.48,227.059L1030.48,219.536L1038.01,219.536Z" style="fill:rgb(242,242,242);fill-rule:nonzero;"/> + <path d="M1078.76,204.854C1080.37,206.997 1081.17,209.7 1081.17,212.962C1081.17,217.491 1079.64,221.058 1076.57,223.663C1073.5,226.268 1069.34,227.571 1064.08,227.571C1060.72,227.571 1057.5,227.011 1054.4,225.891C1051.31,224.771 1048.69,223.188 1046.55,221.143L1048.89,216.541C1053.71,220.534 1058.72,222.531 1063.93,222.531C1067.64,222.531 1070.45,221.703 1072.37,220.047C1074.3,218.392 1075.26,215.957 1075.26,212.743C1075.26,206.364 1071.26,203.174 1063.28,203.174L1057.29,203.174L1057.29,198.135L1062.11,198.135C1065.96,198.135 1068.9,197.282 1070.95,195.578C1072.99,193.874 1074.02,191.439 1074.02,188.274C1074.02,185.45 1073.17,183.283 1071.5,181.773C1069.82,180.264 1067.44,179.509 1064.37,179.509C1059.41,179.509 1054.49,181.505 1049.62,185.498L1047.36,180.897C1049.45,178.9 1052.02,177.33 1055.06,176.185C1058.1,175.041 1061.28,174.469 1064.59,174.469C1069.27,174.469 1073.01,175.662 1075.81,178.048C1078.61,180.434 1080.01,183.648 1080.01,187.69C1080.01,190.66 1079.27,193.265 1077.81,195.505C1076.35,197.745 1074.33,199.352 1071.75,200.326C1074.82,201.202 1077.16,202.712 1078.76,204.854Z" style="fill:rgb(242,242,242);fill-rule:nonzero;"/> + </g> + </g> + </g> + </g> + </g> + <g transform="matrix(1.04093,0,0,1.04093,1943.89,-1055.94)"> + <g transform="matrix(0.838555,0,0,0.571615,148.452,1635.59)"> + <rect x="759.403" y="100.455" width="487.587" height="249.829" style="fill:rgb(0,131,192);"/> + <path d="M1246.99,350.284L759.403,350.284L759.403,100.455L1246.99,100.455L1246.99,350.284ZM765.704,109.699L765.704,341.04L1240.69,341.04L1240.69,109.699L765.704,109.699Z"/> + </g> + <g transform="matrix(1.59331,0,0,1.59331,562.512,-689.213)"> + <path d="M153.743,1571.85L155.087,1554.76L158.855,1554.76L157.727,1568.8L165.359,1568.8L165.119,1571.85L153.743,1571.85Z" style="fill:rgb(242,242,242);fill-rule:nonzero;"/> + <path d="M167.159,1571.85L168.119,1559.68L171.743,1559.68L170.783,1571.85L167.159,1571.85ZM168.407,1553.97L172.295,1553.97L172.031,1557.38L168.143,1557.38L168.407,1553.97Z" style="fill:rgb(242,242,242);fill-rule:nonzero;"/> + <path d="M173.015,1570.55L174.191,1568.03C174.863,1568.5 175.583,1568.85 176.351,1569.1C177.119,1569.35 177.887,1569.47 178.655,1569.47C179.327,1569.47 179.823,1569.38 180.143,1569.19C180.463,1568.99 180.623,1568.74 180.623,1568.42C180.623,1568.08 180.435,1567.82 180.059,1567.63C179.683,1567.43 179.071,1567.21 178.223,1566.95C177.343,1566.71 176.623,1566.47 176.063,1566.23C175.503,1565.99 175.019,1565.64 174.611,1565.17C174.203,1564.69 173.999,1564.08 173.999,1563.33C173.999,1562.55 174.219,1561.86 174.659,1561.27C175.099,1560.67 175.723,1560.21 176.531,1559.87C177.339,1559.54 178.263,1559.37 179.303,1559.37C180.215,1559.37 181.107,1559.51 181.979,1559.78C182.851,1560.05 183.583,1560.42 184.175,1560.88L183.023,1563.31C182.431,1562.87 181.807,1562.55 181.151,1562.32C180.495,1562.1 179.855,1561.99 179.231,1561.99C178.575,1561.99 178.079,1562.08 177.743,1562.27C177.407,1562.47 177.239,1562.73 177.239,1563.07C177.239,1563.42 177.439,1563.7 177.839,1563.91C178.239,1564.11 178.847,1564.33 179.663,1564.55C180.543,1564.81 181.259,1565.06 181.811,1565.3C182.363,1565.54 182.843,1565.89 183.251,1566.37C183.659,1566.84 183.863,1567.45 183.863,1568.2C183.863,1569.4 183.387,1570.34 182.435,1571.02C181.483,1571.7 180.199,1572.04 178.583,1572.04C176.503,1572.04 174.647,1571.55 173.015,1570.55Z" style="fill:rgb(242,242,242);fill-rule:nonzero;"/> + <path d="M190.607,1567.12C190.559,1567.79 190.695,1568.29 191.015,1568.61C191.335,1568.93 191.775,1569.09 192.335,1569.09C192.703,1569.09 193.111,1569.03 193.559,1568.9L193.319,1571.71C192.775,1571.93 192.071,1572.04 191.207,1572.04C189.831,1572.04 188.779,1571.67 188.051,1570.94C187.323,1570.2 186.959,1569.16 186.959,1567.82C186.959,1567.55 186.967,1567.34 186.983,1567.19L187.367,1562.39L185.063,1562.39L185.279,1559.68L187.583,1559.68L187.799,1556.83L191.519,1555.65L191.207,1559.68L194.303,1559.68L194.087,1562.39L190.991,1562.39L190.607,1567.12Z" style="fill:rgb(242,242,242);fill-rule:nonzero;"/> + <path d="M194.471,1570.55L195.647,1568.03C196.319,1568.5 197.039,1568.85 197.807,1569.1C198.575,1569.35 199.343,1569.47 200.111,1569.47C200.783,1569.47 201.279,1569.38 201.599,1569.19C201.919,1568.99 202.079,1568.74 202.079,1568.42C202.079,1568.08 201.891,1567.82 201.515,1567.63C201.139,1567.43 200.527,1567.21 199.679,1566.95C198.799,1566.71 198.079,1566.47 197.519,1566.23C196.959,1565.99 196.475,1565.64 196.067,1565.17C195.659,1564.69 195.455,1564.08 195.455,1563.33C195.455,1562.55 195.675,1561.86 196.115,1561.27C196.555,1560.67 197.179,1560.21 197.987,1559.87C198.795,1559.54 199.719,1559.37 200.759,1559.37C201.671,1559.37 202.563,1559.51 203.435,1559.78C204.307,1560.05 205.039,1560.42 205.631,1560.88L204.479,1563.31C203.887,1562.87 203.263,1562.55 202.607,1562.32C201.951,1562.1 201.311,1561.99 200.687,1561.99C200.031,1561.99 199.535,1562.08 199.199,1562.27C198.863,1562.47 198.695,1562.73 198.695,1563.07C198.695,1563.42 198.895,1563.7 199.295,1563.91C199.695,1564.11 200.303,1564.33 201.119,1564.55C201.999,1564.81 202.715,1565.06 203.267,1565.3C203.819,1565.54 204.299,1565.89 204.707,1566.37C205.115,1566.84 205.319,1567.45 205.319,1568.2C205.319,1569.4 204.843,1570.34 203.891,1571.02C202.939,1571.7 201.655,1572.04 200.039,1572.04C197.959,1572.04 196.103,1571.55 194.471,1570.55Z" style="fill:rgb(242,242,242);fill-rule:nonzero;"/> + <path d="M221.351,1570.19L225.119,1570.19L225.119,1571.85L215.591,1571.85L215.591,1570.19L219.359,1570.19L219.359,1557.21L215.855,1559.44L215.855,1557.55L220.223,1554.76L221.351,1554.76L221.351,1570.19Z" style="fill:rgb(242,242,242);fill-rule:nonzero;"/> + <path d="M230.927,1569.38L230.927,1571.13C230.927,1571.8 230.815,1572.42 230.591,1572.98C230.367,1573.54 229.991,1574.08 229.463,1574.61L228.551,1573.91C229.175,1573.19 229.527,1572.51 229.607,1571.85L228.455,1571.85L228.455,1569.38L230.927,1569.38Z" style="fill:rgb(242,242,242);fill-rule:nonzero;"/> + <path d="M245.447,1570.19L245.447,1571.85L234.455,1571.85L234.455,1570.36L240.431,1563.74C241.231,1562.84 241.815,1562.03 242.183,1561.31C242.551,1560.59 242.735,1559.87 242.735,1559.15C242.735,1558.21 242.463,1557.49 241.919,1556.98C241.375,1556.48 240.599,1556.23 239.591,1556.23C237.959,1556.23 236.343,1556.88 234.743,1558.19L233.999,1556.68C234.671,1556.04 235.519,1555.53 236.543,1555.15C237.567,1554.76 238.599,1554.57 239.639,1554.57C241.207,1554.57 242.447,1554.97 243.359,1555.78C244.271,1556.59 244.727,1557.68 244.727,1559.06C244.727,1560.03 244.507,1560.97 244.067,1561.88C243.627,1562.78 242.895,1563.79 241.871,1564.91L236.999,1570.19L245.447,1570.19Z" style="fill:rgb(242,242,242);fill-rule:nonzero;"/> + <path d="M250.871,1569.38L250.871,1571.13C250.871,1571.8 250.759,1572.42 250.535,1572.98C250.311,1573.54 249.935,1574.08 249.407,1574.61L248.495,1573.91C249.119,1573.19 249.471,1572.51 249.551,1571.85L248.399,1571.85L248.399,1569.38L250.871,1569.38Z" style="fill:rgb(242,242,242);fill-rule:nonzero;"/> + <path d="M264.263,1564.55C264.791,1565.26 265.055,1566.15 265.055,1567.22C265.055,1568.71 264.551,1569.88 263.543,1570.73C262.535,1571.59 261.167,1572.02 259.439,1572.02C258.335,1572.02 257.275,1571.83 256.259,1571.47C255.243,1571.1 254.383,1570.58 253.679,1569.91L254.447,1568.39C256.031,1569.71 257.679,1570.36 259.391,1570.36C260.607,1570.36 261.531,1570.09 262.163,1569.55C262.795,1569 263.111,1568.2 263.111,1567.15C263.111,1565.05 261.799,1564 259.175,1564L257.207,1564L257.207,1562.35L258.791,1562.35C260.055,1562.35 261.023,1562.07 261.695,1561.51C262.367,1560.95 262.703,1560.15 262.703,1559.11C262.703,1558.18 262.427,1557.47 261.875,1556.97C261.323,1556.47 260.543,1556.23 259.535,1556.23C257.903,1556.23 256.287,1556.88 254.687,1558.19L253.943,1556.68C254.631,1556.03 255.475,1555.51 256.475,1555.13C257.475,1554.76 258.519,1554.57 259.607,1554.57C261.143,1554.57 262.371,1554.96 263.291,1555.75C264.211,1556.53 264.671,1557.59 264.671,1558.91C264.671,1559.89 264.431,1560.75 263.951,1561.48C263.471,1562.22 262.807,1562.75 261.959,1563.07C262.967,1563.35 263.735,1563.85 264.263,1564.55Z" style="fill:rgb(242,242,242);fill-rule:nonzero;"/> + <path d="M270.815,1569.38L270.815,1571.13C270.815,1571.8 270.703,1572.42 270.479,1572.98C270.255,1573.54 269.879,1574.08 269.351,1574.61L268.439,1573.91C269.063,1573.19 269.415,1572.51 269.495,1571.85L268.343,1571.85L268.343,1569.38L270.815,1569.38Z" style="fill:rgb(242,242,242);fill-rule:nonzero;"/> + <path d="M285.959,1566.5L285.959,1568.13L283.367,1568.13L283.367,1571.85L281.399,1571.85L281.399,1568.13L273.527,1568.13L273.527,1566.64L281.759,1554.76L283.367,1554.76L283.367,1566.5L285.959,1566.5ZM275.567,1566.5L281.399,1566.5L281.399,1558.1L275.567,1566.5Z" style="fill:rgb(242,242,242);fill-rule:nonzero;"/> + <path d="M290.759,1569.38L290.759,1571.13C290.759,1571.8 290.647,1572.42 290.423,1572.98C290.199,1573.54 289.823,1574.08 289.295,1574.61L288.383,1573.91C289.007,1573.19 289.359,1572.51 289.439,1571.85L288.287,1571.85L288.287,1569.38L290.759,1569.38Z" style="fill:rgb(242,242,242);fill-rule:nonzero;"/> + <path d="M303.035,1561.81C303.843,1562.26 304.463,1562.9 304.895,1563.71C305.327,1564.53 305.543,1565.47 305.543,1566.55C305.543,1567.62 305.307,1568.57 304.835,1569.4C304.363,1570.23 303.691,1570.88 302.819,1571.33C301.947,1571.79 300.927,1572.02 299.759,1572.02C298.719,1572.02 297.695,1571.83 296.687,1571.45C295.679,1571.08 294.831,1570.56 294.143,1569.91L294.887,1568.39C296.471,1569.71 298.095,1570.36 299.759,1570.36C300.959,1570.36 301.899,1570.02 302.579,1569.34C303.259,1568.66 303.599,1567.74 303.599,1566.57C303.599,1565.43 303.263,1564.52 302.591,1563.82C301.919,1563.13 301.023,1562.78 299.903,1562.78C298.271,1562.78 296.967,1563.44 295.991,1564.77L294.623,1564.77L294.623,1554.76L304.871,1554.76L304.871,1556.39L296.591,1556.39L296.591,1562.49C297.535,1561.58 298.743,1561.12 300.215,1561.12C301.287,1561.12 302.227,1561.35 303.035,1561.81Z" style="fill:rgb(242,242,242);fill-rule:nonzero;"/> + <path d="M310.703,1569.38L310.703,1571.13C310.703,1571.8 310.591,1572.42 310.367,1572.98C310.143,1573.54 309.767,1574.08 309.239,1574.61L308.327,1573.91C308.951,1573.19 309.303,1572.51 309.383,1571.85L308.231,1571.85L308.231,1569.38L310.703,1569.38Z" style="fill:rgb(242,242,242);fill-rule:nonzero;"/> + <path d="M322.931,1561.81C323.739,1562.26 324.367,1562.9 324.815,1563.73C325.263,1564.55 325.487,1565.49 325.487,1566.55C325.487,1567.6 325.251,1568.55 324.779,1569.38C324.307,1570.21 323.655,1570.86 322.823,1571.33C321.991,1571.81 321.047,1572.04 319.991,1572.04C317.927,1572.04 316.335,1571.32 315.215,1569.88C314.095,1568.44 313.535,1566.39 313.535,1563.74C313.535,1561.82 313.795,1560.17 314.315,1558.79C314.835,1557.42 315.587,1556.37 316.571,1555.65C317.555,1554.93 318.735,1554.57 320.111,1554.57C321.103,1554.57 322.067,1554.75 323.003,1555.12C323.939,1555.49 324.759,1556.01 325.463,1556.68L324.719,1558.19C323.919,1557.52 323.151,1557.03 322.415,1556.71C321.679,1556.39 320.927,1556.23 320.159,1556.23C318.687,1556.23 317.543,1556.88 316.727,1558.19C315.911,1559.51 315.503,1561.35 315.503,1563.71L315.503,1564.07C315.871,1563.16 316.471,1562.44 317.303,1561.91C318.135,1561.39 319.087,1561.12 320.159,1561.12C321.199,1561.12 322.123,1561.35 322.931,1561.81ZM322.535,1569.34C323.207,1568.65 323.543,1567.72 323.543,1566.57C323.543,1565.43 323.203,1564.52 322.523,1563.82C321.843,1563.13 320.959,1562.78 319.871,1562.78C318.751,1562.78 317.839,1563.13 317.135,1563.83C316.431,1564.54 316.079,1565.45 316.079,1566.57C316.079,1567.71 316.431,1568.63 317.135,1569.33C317.839,1570.03 318.759,1570.39 319.895,1570.39C320.983,1570.39 321.863,1570.04 322.535,1569.34Z" style="fill:rgb(242,242,242);fill-rule:nonzero;"/> + <path d="M330.647,1569.38L330.647,1571.13C330.647,1571.8 330.535,1572.42 330.311,1572.98C330.087,1573.54 329.711,1574.08 329.183,1574.61L328.271,1573.91C328.895,1573.19 329.247,1572.51 329.327,1571.85L328.175,1571.85L328.175,1569.38L330.647,1569.38Z" style="fill:rgb(242,242,242);fill-rule:nonzero;"/> + <path d="M333.743,1554.76L345.023,1554.76L345.023,1556.23L337.007,1571.85L334.895,1571.85L342.863,1556.42L333.743,1556.42L333.743,1554.76Z" style="fill:rgb(242,242,242);fill-rule:nonzero;"/> + <path d="M350.591,1569.38L350.591,1571.13C350.591,1571.8 350.479,1572.42 350.255,1572.98C350.031,1573.54 349.655,1574.08 349.127,1574.61L348.215,1573.91C348.839,1573.19 349.191,1572.51 349.271,1571.85L348.119,1571.85L348.119,1569.38L350.591,1569.38Z" style="fill:rgb(242,242,242);fill-rule:nonzero;"/> + <path d="M364.523,1564.64C365.139,1565.38 365.447,1566.27 365.447,1567.31C365.447,1568.77 364.895,1569.92 363.791,1570.76C362.687,1571.6 361.199,1572.02 359.327,1572.02C357.455,1572.02 355.967,1571.6 354.863,1570.76C353.759,1569.92 353.207,1568.77 353.207,1567.31C353.207,1566.27 353.523,1565.38 354.155,1564.63C354.787,1563.87 355.655,1563.35 356.759,1563.07C355.735,1562.76 354.951,1562.26 354.407,1561.57C353.863,1560.87 353.591,1560.05 353.591,1559.11C353.591,1558.19 353.831,1557.4 354.311,1556.72C354.791,1556.04 355.467,1555.51 356.339,1555.13C357.211,1554.76 358.207,1554.57 359.327,1554.57C360.447,1554.57 361.443,1554.76 362.315,1555.13C363.187,1555.51 363.863,1556.04 364.343,1556.72C364.823,1557.4 365.063,1558.19 365.063,1559.11C365.063,1560.05 364.787,1560.87 364.235,1561.57C363.683,1562.26 362.911,1562.76 361.919,1563.07C363.039,1563.37 363.907,1563.89 364.523,1564.64ZM356.579,1561.47C357.259,1562.04 358.175,1562.39 359.327,1562.51C360.479,1562.39 361.395,1562.04 362.075,1561.47C362.755,1560.9 363.095,1560.16 363.095,1559.25C363.095,1558.31 362.763,1557.56 362.099,1557.02C361.435,1556.47 360.511,1556.2 359.327,1556.2C358.143,1556.2 357.219,1556.47 356.555,1557.02C355.891,1557.56 355.559,1558.31 355.559,1559.25C355.559,1560.16 355.899,1560.9 356.579,1561.47ZM362.423,1569.57C363.143,1569.03 363.503,1568.23 363.503,1567.19C363.503,1566.25 363.123,1565.49 362.363,1564.93C361.603,1564.36 360.591,1564.01 359.327,1563.88C358.063,1564.01 357.051,1564.36 356.291,1564.93C355.531,1565.49 355.151,1566.25 355.151,1567.19C355.151,1568.23 355.511,1569.03 356.231,1569.57C356.951,1570.11 357.983,1570.39 359.327,1570.39C360.671,1570.39 361.703,1570.11 362.423,1569.57Z" style="fill:rgb(242,242,242);fill-rule:nonzero;"/> + <path d="M370.535,1569.38L370.535,1571.13C370.535,1571.8 370.423,1572.42 370.199,1572.98C369.975,1573.54 369.599,1574.08 369.071,1574.61L368.159,1573.91C368.783,1573.19 369.135,1572.51 369.215,1571.85L368.063,1571.85L368.063,1569.38L370.535,1569.38Z" style="fill:rgb(242,242,242);fill-rule:nonzero;"/> + <path d="M383.519,1556.73C384.639,1558.17 385.199,1560.22 385.199,1562.87C385.199,1565.77 384.619,1568.02 383.459,1569.63C382.299,1571.24 380.679,1572.04 378.599,1572.04C377.623,1572.04 376.667,1571.86 375.731,1571.49C374.795,1571.12 373.967,1570.6 373.247,1569.93L374.015,1568.42C374.831,1569.11 375.607,1569.61 376.343,1569.92C377.079,1570.23 377.823,1570.39 378.575,1570.39C380.047,1570.39 381.187,1569.73 381.995,1568.42C382.803,1567.11 383.207,1565.27 383.207,1562.9L383.207,1562.59C382.839,1563.48 382.239,1564.19 381.407,1564.71C380.575,1565.23 379.623,1565.49 378.551,1565.49C377.511,1565.49 376.591,1565.26 375.791,1564.81C374.991,1564.35 374.367,1563.71 373.919,1562.89C373.471,1562.06 373.247,1561.12 373.247,1560.07C373.247,1559.01 373.483,1558.07 373.955,1557.23C374.427,1556.4 375.079,1555.75 375.911,1555.28C376.743,1554.81 377.687,1554.57 378.743,1554.57C380.807,1554.57 382.399,1555.29 383.519,1556.73ZM381.599,1562.78C382.303,1562.07 382.655,1561.16 382.655,1560.04C382.655,1558.91 382.303,1557.99 381.599,1557.28C380.895,1556.58 379.975,1556.23 378.839,1556.23C377.751,1556.23 376.871,1556.57 376.199,1557.27C375.527,1557.97 375.191,1558.89 375.191,1560.04C375.191,1561.18 375.527,1562.09 376.199,1562.79C376.871,1563.49 377.759,1563.83 378.863,1563.83C379.983,1563.83 380.895,1563.48 381.599,1562.78Z" style="fill:rgb(242,242,242);fill-rule:nonzero;"/> + </g> + <g transform="matrix(1.92666,0,0,1.92666,-562.222,1327.03)"> + <path d="M790.995,227.059L788.425,227.059L785.825,220.057C785.51,219.19 785.071,218.609 784.51,218.314C783.949,218.018 783.156,217.871 782.131,217.871L776.872,217.871L776.872,227.059L774.479,227.059L774.479,206.023L782.841,206.023C785.106,206.023 786.844,206.525 788.055,207.53C789.267,208.534 789.872,209.982 789.872,211.873C789.872,213.252 789.513,214.409 788.794,215.344C788.075,216.28 787.036,216.945 785.677,217.339C786.288,217.437 786.81,217.698 787.243,218.122C787.676,218.545 788.041,219.151 788.336,219.939L790.995,227.059ZM782.634,215.861C785.864,215.861 787.479,214.542 787.479,211.902C787.479,210.602 787.085,209.632 786.297,208.992C785.51,208.352 784.288,208.032 782.634,208.032L776.872,208.032L776.872,215.861L782.634,215.861Z" style="fill:rgb(242,242,242);fill-rule:nonzero;"/> + <path d="M793.743,224.636L794.659,222.775C795.703,223.661 796.766,224.292 797.85,224.666C798.933,225.04 800.194,225.227 801.632,225.227C803.326,225.227 804.631,224.897 805.546,224.238C806.462,223.578 806.92,222.647 806.92,221.446C806.92,220.736 806.699,220.16 806.256,219.717C805.812,219.274 805.231,218.924 804.512,218.668C803.793,218.412 802.833,218.146 801.632,217.871C800.016,217.516 798.687,217.132 797.643,216.718C796.599,216.305 795.752,215.709 795.102,214.931C794.452,214.153 794.127,213.133 794.127,211.873C794.127,210.671 794.442,209.613 795.072,208.697C795.703,207.781 796.594,207.067 797.746,206.555C798.899,206.042 800.243,205.786 801.779,205.786C803.237,205.786 804.596,206.013 805.857,206.466C807.117,206.919 808.181,207.579 809.048,208.445L808.102,210.307C807.117,209.46 806.118,208.839 805.103,208.445C804.089,208.052 802.981,207.855 801.779,207.855C800.144,207.855 798.864,208.204 797.938,208.903C797.013,209.603 796.55,210.563 796.55,211.784C796.55,212.848 796.954,213.645 797.761,214.177C798.569,214.709 799.81,215.172 801.484,215.566C803.296,215.999 804.719,216.398 805.753,216.763C806.787,217.127 807.649,217.678 808.338,218.417C809.028,219.156 809.373,220.136 809.373,221.357C809.373,222.539 809.057,223.578 808.427,224.474C807.797,225.37 806.896,226.065 805.724,226.557C804.552,227.049 803.178,227.296 801.602,227.296C798.313,227.296 795.693,226.409 793.743,224.636Z" style="fill:rgb(242,242,242);fill-rule:nonzero;"/> + <path d="M812.15,224.636L813.066,222.775C814.11,223.661 815.173,224.292 816.257,224.666C817.34,225.04 818.601,225.227 820.039,225.227C821.733,225.227 823.037,224.897 823.953,224.238C824.869,223.578 825.327,222.647 825.327,221.446C825.327,220.736 825.106,220.16 824.662,219.717C824.219,219.274 823.638,218.924 822.919,218.668C822.2,218.412 821.24,218.146 820.039,217.871C818.423,217.516 817.094,217.132 816.05,216.718C815.006,216.305 814.159,215.709 813.509,214.931C812.859,214.153 812.534,213.133 812.534,211.873C812.534,210.671 812.849,209.613 813.479,208.697C814.11,207.781 815.001,207.067 816.153,206.555C817.306,206.042 818.65,205.786 820.186,205.786C821.644,205.786 823.003,206.013 824.264,206.466C825.524,206.919 826.588,207.579 827.455,208.445L826.509,210.307C825.524,209.46 824.525,208.839 823.51,208.445C822.496,208.052 821.388,207.855 820.186,207.855C818.551,207.855 817.271,208.204 816.345,208.903C815.42,209.603 814.957,210.563 814.957,211.784C814.957,212.848 815.361,213.645 816.168,214.177C816.976,214.709 818.217,215.172 819.891,215.566C821.703,215.999 823.126,216.398 824.16,216.763C825.194,217.127 826.056,217.678 826.745,218.417C827.435,219.156 827.78,220.136 827.78,221.357C827.78,222.539 827.464,223.578 826.834,224.474C826.204,225.37 825.303,226.065 824.131,226.557C822.959,227.049 821.585,227.296 820.009,227.296C816.72,227.296 814.1,226.409 812.15,224.636Z" style="fill:rgb(242,242,242);fill-rule:nonzero;"/> + </g> + <g transform="matrix(0.203003,0,0,0.454823,410.646,1827.37)"> + <rect x="759.403" y="100.455" width="487.587" height="249.829" style="fill:rgb(0,168,138);"/> + <path d="M1246.99,350.284L759.403,350.284L759.403,100.455L1246.99,100.455L1246.99,350.284ZM785.431,112.072L785.431,338.667L1220.96,338.667L1220.96,112.072L785.431,112.072Z"/> + </g> + <g transform="matrix(0.601453,0,0,0.601453,485.918,1441.27)"> + <path d="M253.927,862.452L253.927,874.163L176.195,874.163L176.195,863.64L218.456,816.797C224.113,810.461 228.243,804.747 230.845,799.655C233.448,794.564 234.749,789.472 234.749,784.38C234.749,777.705 232.825,772.585 228.978,769.021C225.131,765.456 219.644,763.674 212.515,763.674C200.974,763.674 189.547,768.313 178.232,777.592L172.97,766.899C177.723,762.373 183.719,758.753 190.961,756.037C198.202,753.321 205.5,751.964 212.855,751.964C223.943,751.964 232.712,754.821 239.162,760.535C245.611,766.249 248.836,773.971 248.836,783.701C248.836,790.603 247.28,797.251 244.168,803.644C241.057,810.036 235.88,817.193 228.639,825.113L194.186,862.452L253.927,862.452Z" style="fill:rgb(242,242,242);fill-rule:nonzero;"/> + </g> + <g transform="matrix(0.203003,0,0,0.454823,532.111,1827.37)"> + <rect x="759.403" y="100.455" width="487.587" height="249.829" style="fill:rgb(0,168,138);"/> + <path d="M1246.99,350.284L759.403,350.284L759.403,100.455L1246.99,100.455L1246.99,350.284ZM785.432,112.072L785.432,338.667L1220.96,338.667L1220.96,112.072L785.432,112.072Z"/> + </g> + <g transform="matrix(0.601453,0,0,0.601453,608.659,1439.74)"> + <path d="M245.95,822.567C249.684,827.546 251.551,833.826 251.551,841.406C251.551,851.929 247.987,860.217 240.859,866.271C233.73,872.324 224.056,875.351 211.837,875.351C204.029,875.351 196.533,874.049 189.349,871.447C182.164,868.845 176.082,865.167 171.104,860.415L176.535,849.723C187.736,859.001 199.39,863.64 211.497,863.64C220.096,863.64 226.631,861.716 231.1,857.869C235.569,854.022 237.804,848.365 237.804,840.897C237.804,826.075 228.526,818.664 209.97,818.664L196.052,818.664L196.052,806.953L207.254,806.953C216.193,806.953 223.038,804.973 227.79,801.013C232.542,797.053 234.919,791.395 234.919,784.041C234.919,777.478 232.967,772.443 229.063,768.936C225.16,765.428 219.644,763.674 212.515,763.674C200.974,763.674 189.547,768.313 178.232,777.592L172.97,766.899C177.836,762.26 183.804,758.611 190.876,755.952C197.948,753.293 205.331,751.964 213.025,751.964C223.887,751.964 232.571,754.736 239.077,760.28C245.583,765.824 248.836,773.292 248.836,782.683C248.836,789.585 247.138,795.638 243.744,800.843C240.35,806.048 235.654,809.782 229.657,812.045C236.785,814.081 242.217,817.589 245.95,822.567Z" style="fill:rgb(242,242,242);fill-rule:nonzero;"/> + </g> + <g transform="matrix(0.203003,0,0,0.454823,654.23,1827.73)"> + <rect x="759.403" y="100.455" width="487.587" height="249.829" style="fill:rgb(0,168,138);"/> + <path d="M1246.99,350.284L759.403,350.284L759.403,100.455L1246.99,100.455L1246.99,350.284ZM785.431,112.072L785.431,338.667L1220.96,338.667L1220.96,112.072L785.431,112.072Z"/> + </g> + <g transform="matrix(0.601453,0,0,0.601453,728.341,1440.45)"> + <path d="M258.34,836.315L258.34,847.856L240.01,847.856L240.01,874.163L226.093,874.163L226.093,847.856L170.425,847.856L170.425,837.333L228.639,753.321L240.01,753.321L240.01,836.315L258.34,836.315ZM184.851,836.315L226.093,836.315L226.093,776.913L184.851,836.315Z" style="fill:rgb(242,242,242);fill-rule:nonzero;"/> + </g> + <g transform="matrix(0.203003,0,0,0.454823,284.446,1827.73)"> + <rect x="759.403" y="100.455" width="487.587" height="249.829" style="fill:rgb(0,168,138);"/> + <path d="M1246.99,350.284L759.403,350.284L759.403,100.455L1246.99,100.455L1246.99,350.284ZM785.432,112.072L785.432,338.667L1220.96,338.667L1220.96,112.072L785.432,112.072Z"/> + </g> + <g transform="matrix(0.601453,0,0,0.601453,358.557,1440.45)"> + <path d="M224.566,862.452L251.212,862.452L251.212,874.163L183.833,874.163L183.833,862.452L210.479,862.452L210.479,770.633L185.7,786.417L185.7,773.009L216.589,753.321L224.566,753.321L224.566,862.452Z" style="fill:rgb(242,242,242);fill-rule:nonzero;"/> + </g> + <g transform="matrix(0.203003,0,0,0.454823,779.778,1828.36)"> + <rect x="759.403" y="100.455" width="487.587" height="249.829" style="fill:rgb(0,168,138);"/> + <path d="M1246.99,350.284L759.403,350.284L759.403,100.455L1246.99,100.455L1246.99,350.284ZM785.431,112.072L785.431,338.667L1220.96,338.667L1220.96,112.072L785.431,112.072Z"/> + </g> + <g transform="matrix(0.601453,0,0,0.601453,855.05,1441.43)"> + <path d="M238.058,803.134C243.772,806.359 248.157,810.857 251.212,816.627C254.267,822.398 255.794,829.073 255.794,836.654C255.794,844.235 254.125,850.967 250.787,856.851C247.45,862.735 242.697,867.289 236.531,870.514C230.364,873.738 223.151,875.351 214.891,875.351C207.537,875.351 200.296,874.021 193.167,871.362C186.039,868.703 180.042,865.054 175.177,860.415L180.438,849.723C191.64,859.001 203.124,863.64 214.891,863.64C223.378,863.64 230.025,861.236 234.834,856.427C239.642,851.618 242.047,845.084 242.047,836.824C242.047,828.791 239.671,822.313 234.919,817.391C230.166,812.469 223.83,810.008 215.91,810.008C204.369,810.008 195.147,814.704 188.245,824.095L178.571,824.095L178.571,753.321L251.042,753.321L251.042,764.862L192.488,764.862L192.488,807.972C199.164,801.522 207.707,798.297 218.116,798.297C225.697,798.297 232.344,799.91 238.058,803.134Z" style="fill:rgb(242,242,242);fill-rule:nonzero;"/> + </g> + <g transform="matrix(0.203003,0,0,0.454823,913.042,1828.36)"> + <rect x="759.403" y="100.455" width="487.587" height="249.829" style="fill:rgb(0,168,138);"/> + <path d="M1246.99,350.284L759.403,350.284L759.403,100.455L1246.99,100.455L1246.99,350.284ZM785.431,112.072L785.431,338.667L1220.96,338.667L1220.96,112.072L785.431,112.072Z"/> + </g> + <g transform="matrix(0.601453,0,0,0.601453,985.864,1441.44)"> + <path d="M237.719,803.134C243.433,806.359 247.874,810.885 251.042,816.712C254.21,822.539 255.794,829.187 255.794,836.654C255.794,844.122 254.125,850.798 250.787,856.681C247.45,862.565 242.839,867.176 236.955,870.514C231.072,873.851 224.396,875.52 216.928,875.52C202.332,875.52 191.074,870.429 183.154,860.245C175.233,850.062 171.273,835.579 171.273,816.797C171.273,803.219 173.112,791.565 176.789,781.835C180.466,772.104 185.784,764.693 192.743,759.601C199.701,754.509 208.046,751.964 217.777,751.964C224.792,751.964 231.609,753.265 238.228,755.867C244.847,758.47 250.646,762.147 255.624,766.899L250.363,777.592C244.706,772.839 239.275,769.332 234.07,767.069C228.865,764.806 223.547,763.674 218.116,763.674C207.707,763.674 199.617,768.313 193.846,777.592C188.076,786.87 185.19,799.881 185.19,816.627L185.19,819.173C187.793,812.724 192.036,807.632 197.919,803.898C203.803,800.164 210.535,798.297 218.116,798.297C225.471,798.297 232.005,799.91 237.719,803.134ZM234.919,856.427C239.671,851.505 242.047,844.971 242.047,836.824C242.047,828.791 239.642,822.313 234.834,817.391C230.025,812.469 223.774,810.008 216.08,810.008C208.159,810.008 201.71,812.497 196.731,817.476C191.753,822.454 189.264,828.904 189.264,836.824C189.264,844.857 191.753,851.363 196.731,856.342C201.71,861.32 208.216,863.81 216.249,863.81C223.943,863.81 230.166,861.349 234.919,856.427Z" style="fill:rgb(242,242,242);fill-rule:nonzero;"/> + </g> + <g transform="matrix(0.203003,0,0,0.454823,1043.49,1828.36)"> + <rect x="759.403" y="100.455" width="487.587" height="249.829" style="fill:rgb(0,168,138);"/> + <path d="M1246.99,350.284L759.403,350.284L759.403,100.455L1246.99,100.455L1246.99,350.284ZM785.43,112.072L785.43,338.667L1220.96,338.667L1220.96,112.072L785.43,112.072Z"/> + </g> + <g transform="matrix(0.601453,0,0,0.601453,1116.31,1441.44)"> + <path d="M173.14,753.321L252.909,753.321L252.909,763.674L196.222,874.163L181.287,874.163L237.634,765.032L173.14,765.032L173.14,753.321Z" style="fill:rgb(242,242,242);fill-rule:nonzero;"/> + </g> + <g transform="matrix(0.203003,0,0,0.454823,1174.2,1828.36)"> + <rect x="759.403" y="100.455" width="487.587" height="249.829" style="fill:rgb(0,168,138);"/> + <path d="M1246.99,350.284L759.403,350.284L759.403,100.455L1246.99,100.455L1246.99,350.284ZM785.431,112.072L785.431,338.667L1220.96,338.667L1220.96,112.072L785.431,112.072Z"/> + </g> + <g transform="matrix(0.601453,0,0,0.601453,1247.02,1441.44)"> + <path d="M249.769,823.162C254.125,828.423 256.303,834.731 256.303,842.085C256.303,852.382 252.4,860.5 244.593,866.44C236.785,872.381 226.263,875.351 213.025,875.351C199.786,875.351 189.264,872.381 181.457,866.44C173.649,860.5 169.746,852.382 169.746,842.085C169.746,834.731 171.98,828.395 176.45,823.077C180.919,817.759 187.057,814.081 194.864,812.045C187.623,809.895 182.079,806.359 178.232,801.437C174.385,796.515 172.461,790.717 172.461,784.041C172.461,777.592 174.159,771.962 177.553,767.154C180.947,762.345 185.728,758.611 191.894,755.952C198.061,753.293 205.104,751.964 213.025,751.964C220.945,751.964 227.988,753.293 234.155,755.952C240.321,758.611 245.102,762.345 248.496,767.154C251.891,771.962 253.588,777.592 253.588,784.041C253.588,790.717 251.636,796.515 247.732,801.437C243.829,806.359 238.37,809.895 231.354,812.045C239.275,814.195 245.413,817.9 249.769,823.162ZM193.592,800.758C198.4,804.775 204.878,807.236 213.025,808.141C221.171,807.236 227.649,804.775 232.458,800.758C237.266,796.742 239.671,791.509 239.671,785.059C239.671,778.384 237.323,773.122 232.627,769.275C227.932,765.428 221.397,763.505 213.025,763.505C204.652,763.505 198.117,765.428 193.422,769.275C188.726,773.122 186.378,778.384 186.378,785.059C186.378,791.509 188.783,796.742 193.592,800.758ZM234.919,858.039C240.01,854.192 242.556,848.591 242.556,841.237C242.556,834.561 239.869,829.215 234.494,825.198C229.12,821.181 221.963,818.72 213.025,817.815C204.086,818.72 196.929,821.181 191.555,825.198C186.18,829.215 183.493,834.561 183.493,841.237C183.493,848.591 186.039,854.192 191.131,858.039C196.222,861.886 203.52,863.81 213.025,863.81C222.529,863.81 229.827,861.886 234.919,858.039Z" style="fill:rgb(242,242,242);fill-rule:nonzero;"/> + </g> + <g transform="matrix(0.203003,0,0,0.454823,1310.06,1828.36)"> + <rect x="759.403" y="100.455" width="487.587" height="249.829" style="fill:rgb(0,168,138);"/> + <path d="M1246.99,350.284L759.403,350.284L759.403,100.455L1246.99,100.455L1246.99,350.284ZM785.431,112.072L785.431,338.667L1220.96,338.667L1220.96,112.072L785.431,112.072Z"/> + </g> + <g transform="matrix(0.601453,0,0,0.601453,1382.88,1441.44)"> + <path d="M243.065,767.239C250.985,777.422 254.946,791.905 254.946,810.687C254.946,831.167 250.844,847.092 242.641,858.463C234.438,869.835 222.982,875.52 208.272,875.52C201.37,875.52 194.61,874.219 187.991,871.617C181.372,869.014 175.516,865.337 170.425,860.585L175.856,849.893C181.626,854.758 187.114,858.294 192.319,860.5C197.523,862.706 202.785,863.81 208.103,863.81C218.512,863.81 226.574,859.171 232.288,849.893C238.002,840.614 240.859,827.603 240.859,810.857L240.859,808.65C238.256,814.987 234.013,819.993 228.13,823.671C222.246,827.348 215.514,829.187 207.933,829.187C200.578,829.187 194.072,827.574 188.415,824.35C182.758,821.125 178.345,816.599 175.177,810.772C172.009,804.945 170.425,798.297 170.425,790.83C170.425,783.362 172.094,776.686 175.431,770.803C178.769,764.919 183.38,760.308 189.264,756.97C195.147,753.633 201.823,751.964 209.291,751.964C223.887,751.964 235.145,757.055 243.065,767.239ZM229.487,810.008C234.466,805.03 236.955,798.58 236.955,790.66C236.955,782.627 234.466,776.121 229.487,771.142C224.509,766.164 218.003,763.674 209.97,763.674C202.276,763.674 196.052,766.135 191.3,771.057C186.548,775.979 184.172,782.513 184.172,790.66C184.172,798.693 186.548,805.171 191.3,810.093C196.052,815.015 202.332,817.476 210.139,817.476C218.06,817.476 224.509,814.987 229.487,810.008Z" style="fill:rgb(242,242,242);fill-rule:nonzero;"/> + </g> + <g transform="matrix(1.12416,0,0,0.562078,203.296,970.539)"> + <path d="M253.227,1575.22L253.227,1607.45" style="fill:none;stroke:black;stroke-width:5.95px;"/> + </g> + <g transform="matrix(1,0,0,1,327.452,-60.2647)"> + <path d="M657.203,1916.2L160.511,1916.2" style="fill:none;stroke:black;stroke-width:5.28px;"/> + </g> + <g transform="matrix(1.12416,0,0,0.562078,203.296,970.539)"> + <path d="M366.126,1575.22L366.126,1607.45" style="fill:none;stroke:black;stroke-width:5.95px;"/> + </g> + <g transform="matrix(1.12416,0,0,0.562078,203.296,970.539)"> + <path d="M472.919,1575.22L472.919,1607.45" style="fill:none;stroke:black;stroke-width:5.95px;"/> + </g> + <g transform="matrix(1.12416,0,0,0.562078,203.296,970.539)"> + <path d="M582.288,1575.22L582.288,1607.45" style="fill:none;stroke:black;stroke-width:5.95px;"/> + </g> + <g transform="matrix(1.11822,0,0,1.12416,210.208,67.0263)"> + <path d="M691.478,1575.22L691.478,1591.33L1163.66,1591.33L1163.66,1607.45" style="fill:none;stroke:black;stroke-width:4.71px;"/> + </g> + <g transform="matrix(1.12416,0,0,1.12416,203.296,67.0263)"> + <path d="M1042.22,1591.33L1042.22,1607.45" style="fill:none;stroke:black;stroke-width:4.7px;"/> + </g> + <g transform="matrix(1.12416,0,0,1.12416,203.296,67.0263)"> + <path d="M927.57,1591.33L927.57,1607.45" style="fill:none;stroke:black;stroke-width:4.7px;"/> + </g> + <g transform="matrix(1.12416,0,0,1.12416,203.296,67.0263)"> + <path d="M812.587,1591.33L812.587,1607.45" style="fill:none;stroke:black;stroke-width:4.7px;"/> + </g> + </g> + <g transform="matrix(1.17016,0,0,1.17016,-234.903,-166.612)"> + <path d="M1120.2,802.778L1120.2,859.94" style="fill:none;stroke:black;stroke-width:4.7px;"/> + </g> + <g transform="matrix(1.17016,0,0,0.576838,-234.903,343.611)"> + <path d="M1294.85,802.778L1294.85,859.94" style="fill:none;stroke:black;stroke-width:5.96px;"/> + </g> + <g transform="matrix(1.17016,0,0,0.537752,-233.077,374.989)"> + <path d="M1552.85,802.778L1552.85,859.94" style="fill:none;stroke:black;stroke-width:6.04px;"/> + </g> + <g transform="matrix(1.17016,0,0,1.17016,-233.077,-168.846)"> + <path d="M1729.39,859.94L1729.39,802.778" style="fill:none;stroke:black;stroke-width:4.7px;"/> + </g> + <g transform="matrix(1.17016,0,0,0.537752,-233.077,374.989)"> + <path d="M1909.1,859.94L1909.1,802.778" style="fill:none;stroke:black;stroke-width:6.04px;"/> + </g> + <g transform="matrix(-0.849549,0,0,0.561845,1662.41,418.175)"> + <path d="M928.049,750L929.086,691.489" style="fill:none;stroke:black;stroke-width:7.64px;"/> + </g> + <g transform="matrix(0.921744,0,0,0.921744,1374.93,-23.3561)"> + <g transform="matrix(0.160763,0,0,0.360187,182.349,102.289)"> + <g> + <g> + <rect x="759.403" y="100.455" width="487.587" height="249.829" style="fill:rgb(0,168,138);"/> + <path d="M1246.99,350.284L759.403,350.284L759.403,100.455L1246.99,100.455L1246.99,350.284ZM796.52,117.021L796.52,333.718L1209.87,333.718L1209.87,117.021L796.52,117.021Z"/> + </g> + </g> + </g> + <g transform="matrix(0.353176,0,0,0.353176,612.173,-130.648)"> + <path d="M-499.304,862.116L-499.304,872.808L-582.806,872.808L-582.806,862.116L-499.304,862.116ZM-499.304,896.399L-499.304,907.092L-582.806,907.092L-582.806,896.399L-499.304,896.399Z" style="fill-rule:nonzero;"/> + <path d="M-409.097,927.288C-417.979,922.197 -424.796,914.984 -429.548,905.649C-434.301,896.314 -436.677,885.367 -436.677,872.808C-436.677,860.362 -434.301,849.471 -429.548,840.137C-424.796,830.802 -417.979,823.617 -409.097,818.582C-400.215,813.547 -389.834,811.03 -377.953,811.03C-369.807,811.03 -362.141,812.303 -354.956,814.848C-347.771,817.394 -341.803,820.93 -337.051,825.456L-344.179,841.41C-349.61,836.997 -355.013,833.8 -360.387,831.82C-365.762,829.84 -371.504,828.85 -377.614,828.85C-389.268,828.85 -398.292,832.641 -404.684,840.222C-411.077,847.802 -414.274,858.665 -414.274,872.808C-414.274,887.064 -411.105,898.011 -404.769,905.649C-398.433,913.286 -389.381,917.105 -377.614,917.105C-371.504,917.105 -365.762,916.115 -360.387,914.135C-355.013,912.155 -349.61,908.958 -344.179,904.546L-337.051,920.499C-341.803,925.025 -347.771,928.561 -354.956,931.107C-362.141,933.653 -369.807,934.926 -377.953,934.926C-389.834,934.926 -400.215,932.38 -409.097,927.288Z" style="fill-rule:nonzero;"/> + <path d="M-303.87,929.325C-310.489,925.704 -315.581,920.528 -319.145,913.796C-322.709,907.063 -324.491,899.171 -324.491,890.119C-324.491,881.068 -322.709,873.176 -319.145,866.443C-315.581,859.711 -310.489,854.535 -303.87,850.914C-297.251,847.293 -289.585,845.483 -280.873,845.483C-272.274,845.483 -264.693,847.293 -258.131,850.914C-251.568,854.535 -246.505,859.711 -242.941,866.443C-239.376,873.176 -237.594,881.068 -237.594,890.119C-237.594,899.171 -239.376,907.063 -242.941,913.796C-246.505,920.528 -251.568,925.704 -258.131,929.325C-264.693,932.946 -272.274,934.756 -280.873,934.756C-289.585,934.756 -297.251,932.946 -303.87,929.325ZM-264.495,911.08C-260.705,906.384 -258.809,899.398 -258.809,890.119C-258.809,880.955 -260.733,873.968 -264.58,869.159C-268.427,864.35 -273.858,861.946 -280.873,861.946C-288.001,861.946 -293.489,864.35 -297.336,869.159C-301.183,873.968 -303.107,880.955 -303.107,890.119C-303.107,899.398 -301.211,906.384 -297.421,911.08C-293.63,915.776 -288.171,918.123 -281.043,918.123C-273.801,918.123 -268.286,915.776 -264.495,911.08Z" style="fill-rule:nonzero;"/> + <path d="M-139.496,880.785L-139.496,933.398L-160.711,933.398L-160.711,881.803C-160.711,875.014 -162.012,870.064 -164.614,866.953C-167.217,863.841 -171.234,862.285 -176.665,862.285C-183.114,862.285 -188.319,864.35 -192.279,868.48C-196.239,872.61 -198.219,878.069 -198.219,884.858L-198.219,933.398L-219.265,933.398L-219.265,871.959C-219.265,862.908 -219.717,854.818 -220.622,847.689L-200.765,847.689L-199.237,861.776C-196.296,856.571 -192.307,852.555 -187.272,849.726C-182.237,846.897 -176.551,845.483 -170.215,845.483C-149.736,845.483 -139.496,857.25 -139.496,880.785Z" style="fill-rule:nonzero;"/> + <path d="M-89.937,863.643L-89.937,902C-89.937,912.07 -85.242,917.105 -75.851,917.105C-73.248,917.105 -70.419,916.652 -67.364,915.747L-67.364,932.55C-71.098,933.907 -75.624,934.586 -80.942,934.586C-90.673,934.586 -98.141,931.871 -103.345,926.44C-108.55,921.009 -111.152,913.201 -111.152,903.018L-111.152,863.643L-127.615,863.643L-127.615,847.689L-111.152,847.689L-111.152,826.814L-89.937,819.685L-89.937,847.689L-67.195,847.689L-67.195,863.643L-89.937,863.643Z" style="fill-rule:nonzero;"/> + <path d="M22.418,891.647L-36.645,891.647C-36.192,900.812 -33.901,907.572 -29.771,911.929C-25.641,916.285 -19.503,918.463 -11.357,918.463C-1.965,918.463 6.747,915.408 14.78,909.298L20.89,923.894C16.817,927.175 11.81,929.806 5.87,931.786C-0.07,933.766 -6.095,934.756 -12.205,934.756C-26.236,934.756 -37.267,930.796 -45.301,922.876C-53.334,914.955 -57.351,904.093 -57.351,890.289C-57.351,881.577 -55.597,873.826 -52.09,867.037C-48.582,860.249 -43.66,854.959 -37.324,851.169C-30.988,847.378 -23.803,845.483 -15.769,845.483C-4.002,845.483 5.304,849.302 12.15,856.939C18.995,864.577 22.418,875.071 22.418,888.422L22.418,891.647ZM-29.092,865.765C-32.657,869.102 -34.948,873.939 -35.966,880.276L3.918,880.276C3.239,873.826 1.288,868.961 -1.937,865.68C-5.162,862.398 -9.603,860.758 -15.26,860.758C-20.918,860.758 -25.528,862.427 -29.092,865.765Z" style="fill-rule:nonzero;"/> + <path d="M120.177,880.785L120.177,933.398L98.962,933.398L98.962,881.803C98.962,875.014 97.661,870.064 95.058,866.953C92.456,863.841 88.439,862.285 83.008,862.285C76.559,862.285 71.354,864.35 67.394,868.48C63.434,872.61 61.454,878.069 61.454,884.858L61.454,933.398L40.408,933.398L40.408,871.959C40.408,862.908 39.956,854.818 39.05,847.689L58.908,847.689L60.435,861.776C63.377,856.571 67.365,852.555 72.4,849.726C77.436,846.897 83.121,845.483 89.457,845.483C109.937,845.483 120.177,857.25 120.177,880.785Z" style="fill-rule:nonzero;"/> + <path d="M169.735,863.643L169.735,902C169.735,912.07 174.431,917.105 183.822,917.105C186.425,917.105 189.253,916.652 192.308,915.747L192.308,932.55C188.574,933.907 184.048,934.586 178.731,934.586C169,934.586 161.532,931.871 156.327,926.44C151.123,921.009 148.52,913.201 148.52,903.018L148.52,863.643L132.057,863.643L132.057,847.689L148.52,847.689L148.52,826.814L169.735,819.685L169.735,847.689L192.478,847.689L192.478,863.643L169.735,863.643Z" style="fill-rule:nonzero;"/> + <path d="M255.105,812.557L307.549,812.557C320.56,812.557 330.687,815.697 337.929,821.977C345.17,828.256 348.791,836.827 348.791,847.689C348.791,858.551 345.142,867.151 337.844,873.487C330.546,879.823 320.447,882.991 307.549,882.991L276.999,882.991L276.999,933.398L255.105,933.398L255.105,812.557ZM305.003,866.019C312.584,866.019 318.326,864.463 322.229,861.352C326.133,858.24 328.085,853.743 328.085,847.859C328.085,841.862 326.161,837.308 322.314,834.197C318.467,831.085 312.697,829.529 305.003,829.529L276.999,829.529L276.999,866.019L305.003,866.019Z" style="fill-rule:nonzero;"/> + <path d="M445.362,847.689L445.362,933.398L424.486,933.398L424.486,919.651C421.884,924.403 418.15,928.109 413.284,930.768C408.419,933.427 402.875,934.756 396.652,934.756C389.184,934.756 382.565,932.946 376.795,929.325C371.024,925.704 366.555,920.556 363.387,913.88C360.218,907.205 358.634,899.454 358.634,890.629C358.634,881.803 360.247,873.968 363.471,867.122C366.696,860.277 371.194,854.959 376.964,851.169C382.735,847.378 389.297,845.483 396.652,845.483C402.875,845.483 408.419,846.812 413.284,849.471C418.15,852.13 421.884,855.836 424.486,860.588L424.486,847.689L445.362,847.689ZM418.716,910.825C422.563,905.96 424.486,899.115 424.486,890.289C424.486,881.237 422.563,874.279 418.716,869.414C414.869,864.548 409.381,862.116 402.253,862.116C395.238,862.116 389.778,864.633 385.875,869.668C381.971,874.703 380.019,881.69 380.019,890.629C380.019,899.454 381.971,906.243 385.875,910.995C389.778,915.747 395.294,918.123 402.422,918.123C409.437,918.123 414.869,915.691 418.716,910.825Z" style="fill-rule:nonzero;"/> + <path d="M551.267,847.689L551.267,930.683C551.267,944.034 547.59,954.161 540.236,961.063C532.881,967.965 522.075,971.416 507.819,971.416C494.581,971.416 482.927,968.644 472.856,963.099L476.251,946.976C486.66,952.407 497.013,955.122 507.31,955.122C522.585,955.122 530.222,947.542 530.222,932.38L530.222,915.408C527.62,920.047 523.829,923.809 518.851,926.694C513.872,929.58 508.271,931.022 502.048,931.022C494.581,931.022 487.933,929.24 482.106,925.676C476.279,922.112 471.753,917.077 468.529,910.571C465.304,904.065 463.692,896.625 463.692,888.253C463.692,879.88 465.304,872.44 468.529,865.934C471.753,859.428 476.279,854.393 482.106,850.829C487.933,847.265 494.581,845.483 502.048,845.483C508.385,845.483 514.014,846.812 518.936,849.471C523.858,852.13 527.62,855.836 530.222,860.588L530.222,847.689L551.267,847.689ZM524.197,907.431C528.214,902.792 530.222,896.399 530.222,888.253C530.222,880.106 528.242,873.713 524.282,869.074C520.322,864.435 514.777,862.116 507.649,862.116C500.634,862.116 495.118,864.435 491.101,869.074C487.085,873.713 485.076,880.106 485.076,888.253C485.076,896.399 487.085,902.792 491.101,907.431C495.118,912.07 500.634,914.39 507.649,914.39C514.664,914.39 520.18,912.07 524.197,907.431Z" style="fill-rule:nonzero;"/> + <path d="M649.196,891.647L590.133,891.647C590.586,900.812 592.877,907.572 597.007,911.929C601.137,916.285 607.275,918.463 615.422,918.463C624.813,918.463 633.525,915.408 641.559,909.298L647.669,923.894C643.595,927.175 638.589,929.806 632.648,931.786C626.708,933.766 620.683,934.756 614.573,934.756C600.543,934.756 589.511,930.796 581.478,922.876C573.444,914.955 569.428,904.093 569.428,890.289C569.428,881.577 571.181,873.826 574.689,867.037C578.196,860.249 583.118,854.959 589.455,851.169C595.791,847.378 602.976,845.483 611.009,845.483C622.776,845.483 632.083,849.302 638.928,856.939C645.774,864.577 649.196,875.071 649.196,888.422L649.196,891.647ZM597.686,865.765C594.122,869.102 591.831,873.939 590.812,880.276L630.697,880.276C630.018,873.826 628.066,868.961 624.841,865.68C621.617,862.398 617.176,860.758 611.518,860.758C605.861,860.758 601.25,862.427 597.686,865.765Z" style="fill-rule:nonzero;"/> + </g> + </g> + <g transform="matrix(1,0,0,1,28.2875,0)"> + <path d="M845.696,806.684L1049.45,806.684" style="fill:none;stroke:black;stroke-width:5.5px;"/> + </g> + <g transform="matrix(1,0,0,1,28.2875,0)"> + <path d="M1049.45,806.684L1252,806.684" style="fill:none;stroke:black;stroke-width:5.5px;"/> + </g> + <g transform="matrix(1,0,0,1,28.2875,0)"> + <path d="M1555.72,806.684L1764.49,803.979L1972.59,806.684" style="fill:none;stroke:black;stroke-width:5.5px;"/> + </g> + <g transform="matrix(1,0,0,1,28.2875,0)"> + <path d="M127.118,803.979L335.044,803.979L544.651,806.684" style="fill:none;stroke:black;stroke-width:5.5px;"/> + </g> +</svg> diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/static/manifest.json b/docs/_vendor/github.com/gohugoio/gohugoioTheme/static/manifest.json new file mode 100644 index 000000000..e671ac45a --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/static/manifest.json @@ -0,0 +1,45 @@ +{ + "name": "Hugo", + "short_name": "Hugo", + "icons": [ + { + "src": "/android-chrome-36x36.png", + "sizes": "36x36", + "type": "image/png" + }, + { + "src": "/android-chrome-48x48.png", + "sizes": "48x48", + "type": "image/png" + }, + { + "src": "/android-chrome-72x72.png", + "sizes": "72x72", + "type": "image/png" + }, + { + "src": "/android-chrome-96x96.png", + "sizes": "96x96", + "type": "image/png" + }, + { + "src": "/android-chrome-144x144.png", + "sizes": "144x144", + "type": "image/png" + }, + { + "src": "/android-chrome-192x192.png", + "sizes": "192x192", + "type": "image/png" + }, + { + "src": "/android-chrome-256x256.png", + "sizes": "256x256", + "type": "image/png" + } + ], + "start_url": "./?utm_source=web_app_manifest", + "theme_color": "#0A1922", + "background_color": "#FFF", + "display": "standalone" +} diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/static/mstile-144x144.png b/docs/_vendor/github.com/gohugoio/gohugoioTheme/static/mstile-144x144.png Binary files differnew file mode 100644 index 000000000..e54b4bd75 --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/static/mstile-144x144.png diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/static/mstile-150x150.png b/docs/_vendor/github.com/gohugoio/gohugoioTheme/static/mstile-150x150.png Binary files differnew file mode 100644 index 000000000..c7b84c690 --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/static/mstile-150x150.png diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/static/mstile-310x310.png b/docs/_vendor/github.com/gohugoio/gohugoioTheme/static/mstile-310x310.png Binary files differnew file mode 100644 index 000000000..2cde5c08c --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/static/mstile-310x310.png diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/static/safari-pinned-tab.svg b/docs/_vendor/github.com/gohugoio/gohugoioTheme/static/safari-pinned-tab.svg new file mode 100644 index 000000000..80ff2dae3 --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/static/safari-pinned-tab.svg @@ -0,0 +1,22 @@ +<?xml version="1.0" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN" + "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd"> +<svg version="1.0" xmlns="http://www.w3.org/2000/svg" + width="16.000000pt" height="16.000000pt" viewBox="0 0 16.000000 16.000000" + preserveAspectRatio="xMidYMid meet"> +<metadata> +Created by potrace 1.11, written by Peter Selinger 2001-2013 +</metadata> +<g transform="translate(0.000000,16.000000) scale(0.006250,-0.006250)" +fill="#000000" stroke="none"> +<path d="M1118 2481 c-76 -45 -139 -81 -141 -81 -3 0 -53 -29 -112 -65 -59 +-36 -108 -65 -110 -65 -2 0 -32 -17 -67 -37 -35 -21 -79 -47 -99 -58 -239 +-133 -399 -233 -414 -258 -16 -26 -17 -84 -17 -637 0 -493 3 -613 14 -636 13 +-28 166 -131 196 -133 6 -1 12 -5 12 -11 0 -5 4 -10 9 -10 5 0 91 -48 192 +-106 101 -59 200 -116 219 -127 19 -10 124 -71 232 -134 245 -142 248 -143 +360 -78 45 26 97 56 116 66 44 25 334 195 375 219 18 11 41 24 52 29 74 34 +433 254 449 274 17 23 18 57 18 640 0 569 -1 618 -17 645 -13 21 -65 57 -173 +118 -254 146 -349 201 -689 398 -111 64 -216 119 -235 122 -28 4 -54 -7 -170 +-75z"/> +</g> +</svg> diff --git a/docs/_vendor/github.com/gohugoio/gohugoioTheme/theme.toml b/docs/_vendor/github.com/gohugoio/gohugoioTheme/theme.toml new file mode 100644 index 000000000..8d678e7b8 --- /dev/null +++ b/docs/_vendor/github.com/gohugoio/gohugoioTheme/theme.toml @@ -0,0 +1,15 @@ +# theme.toml template for a Hugo theme +# See https://github.com/gohugoio/hugoThemes#themetoml for an example + +name = "Hugo Theme" +license = "MIT" +licenselink = "https://github.com/gohugoio/gohugoioTheme/blob/master/license.md" +description = "" +homepage = "https://github.com/gohugoio/gohugoioTheme" +tags = ["website"] +features = ["", ""] +min_version = 0.38 + +[author] + name = "Bud Parr" + homepage = "https://github.com/budparr" diff --git a/docs/_vendor/modules.txt b/docs/_vendor/modules.txt new file mode 100644 index 000000000..c21962edd --- /dev/null +++ b/docs/_vendor/modules.txt @@ -0,0 +1 @@ +# github.com/gohugoio/gohugoioTheme v0.0.0-20240126181647-31e47d550511 diff --git a/docs/archetypes/functions.md b/docs/archetypes/functions.md new file mode 100644 index 000000000..44a2a5635 --- /dev/null +++ b/docs/archetypes/functions.md @@ -0,0 +1,11 @@ +--- +title: {{ replace .File.ContentBaseName "-" " " | title }} +description: +categories: [] +keywords: [] +action: + aliases: [] + related: [] + returnType: + signatures: [] +--- diff --git a/docs/archetypes/methods.md b/docs/archetypes/methods.md new file mode 100644 index 000000000..2c415547d --- /dev/null +++ b/docs/archetypes/methods.md @@ -0,0 +1,10 @@ +--- +title: {{ replace .File.ContentBaseName "-" " " | title }} +description: +categories: [] +keywords: [] +action: + related: [] + returnType: + signatures: [] +--- diff --git a/docs/archetypes/news/index.md b/docs/archetypes/news/index.md new file mode 100644 index 000000000..fcc5b5835 --- /dev/null +++ b/docs/archetypes/news/index.md @@ -0,0 +1,5 @@ +--- +title: {{ replace .File.ContentBaseName "-" " " | title }} +description: +date: {{ .Date }} +--- diff --git a/docs/archetypes/showcase/bio.md b/docs/archetypes/showcase/bio.md new file mode 100644 index 000000000..5d1708978 --- /dev/null +++ b/docs/archetypes/showcase/bio.md @@ -0,0 +1,7 @@ + +Add some **general info** about {{ replace .Name "-" " " | title }} here. + +The site is built by: + +* [Person 1](https://example.org) +* [Person 1](https://example.org) diff --git a/docs/archetypes/showcase/featured.png b/docs/archetypes/showcase/featured.png Binary files differnew file mode 100644 index 000000000..4f390132e --- /dev/null +++ b/docs/archetypes/showcase/featured.png diff --git a/docs/archetypes/showcase/index.md b/docs/archetypes/showcase/index.md new file mode 100644 index 000000000..04d454575 --- /dev/null +++ b/docs/archetypes/showcase/index.md @@ -0,0 +1,36 @@ +--- + +title: {{ replace .File.ContentBaseName "-" " " | title }} +date: {{ now.Format "2006-01-02" }} + +description: A short description of this page. + +# The URL to the site on the internet. +siteURL: https://gohugo.io/ + +# Link to the site's Hugo source code if public and you can/want to share. +# Remove or leave blank if not needed/wanted. +siteSource: https://github.com/gohugoio/hugoDocs + +# Add credit to the article author. Leave blank or remove if not needed/wanted. +byline: "[bep](https://github.com/bep), Hugo Lead" + +--- + +To complete this showcase: + +1. Write the story about your site in this file. +2. Add a summary to the `bio.md` file in this folder. +3. Replace the `featured-template.png` with a screenshot of your site. You can rename it, but it must contain the word `featured`. +4. Create a new pull request in https://github.com/gohugoio/hugoDocs/pulls + +The content of this bundle explained: + +index.md +: The main content file. Fill in required front matter metadata and write your story. I does not have to be a novel. It can even be self-promotional, but it should include Hugo in some form. + +bio.md +: A short summary of the website. Site credits (who built it) fits nicely here. + +featured.png +: A reasonably sized screenshot of your website. It can be named anything, but the name must start with "featured". The sample image is `1500x750` (2:1 aspect ratio). diff --git a/docs/assets/images/examples/landscape-exif-orientation-5.jpg b/docs/assets/images/examples/landscape-exif-orientation-5.jpg Binary files differnew file mode 100644 index 000000000..ad64835eb --- /dev/null +++ b/docs/assets/images/examples/landscape-exif-orientation-5.jpg diff --git a/docs/assets/images/examples/zion-national-park-grayscale.jpg b/docs/assets/images/examples/zion-national-park-grayscale.jpg Binary files differnew file mode 100644 index 000000000..908bd88c6 --- /dev/null +++ b/docs/assets/images/examples/zion-national-park-grayscale.jpg diff --git a/docs/assets/images/examples/zion-national-park.jpg b/docs/assets/images/examples/zion-national-park.jpg Binary files differnew file mode 100644 index 000000000..7980abccb --- /dev/null +++ b/docs/assets/images/examples/zion-national-park.jpg diff --git a/docs/assets/images/logos/logo-128x128.png b/docs/assets/images/logos/logo-128x128.png Binary files differnew file mode 100644 index 000000000..ec1a2d6e1 --- /dev/null +++ b/docs/assets/images/logos/logo-128x128.png diff --git a/docs/assets/images/logos/logo-256x256.png b/docs/assets/images/logos/logo-256x256.png Binary files differnew file mode 100644 index 000000000..d9fdb888a --- /dev/null +++ b/docs/assets/images/logos/logo-256x256.png diff --git a/docs/assets/images/logos/logo-512x512.png b/docs/assets/images/logos/logo-512x512.png Binary files differnew file mode 100644 index 000000000..76d463600 --- /dev/null +++ b/docs/assets/images/logos/logo-512x512.png diff --git a/docs/assets/images/logos/logo-64x64.png b/docs/assets/images/logos/logo-64x64.png Binary files differnew file mode 100644 index 000000000..9857bcea1 --- /dev/null +++ b/docs/assets/images/logos/logo-64x64.png diff --git a/docs/assets/images/logos/logo-96x96.png b/docs/assets/images/logos/logo-96x96.png Binary files differnew file mode 100644 index 000000000..48d0cb98e --- /dev/null +++ b/docs/assets/images/logos/logo-96x96.png diff --git a/docs/config/_default/languages.toml b/docs/config/_default/languages.toml new file mode 100644 index 000000000..cfddb5398 --- /dev/null +++ b/docs/config/_default/languages.toml @@ -0,0 +1,4 @@ +[en] +contentDir = "content/en" +languageName = "English" +weight = 1 diff --git a/docs/config/_default/markup.toml b/docs/config/_default/markup.toml new file mode 100644 index 000000000..a0c1e83a7 --- /dev/null +++ b/docs/config/_default/markup.toml @@ -0,0 +1,40 @@ +defaultMarkdownHandler = "goldmark" + +[goldmark.extensions] +definitionList = true +footnote = true +linkify = true +strikethrough = true +table = true +taskList = true +typographer = true + + [goldmark.extensions.passthrough] + enable = true + + [goldmark.extensions.passthrough.delimiters] + block = [['\[', '\]'], ['$$', '$$']] + inline = [['\(', '\)']] + +[goldmark.parser] +autoHeadingID = true +autoHeadingIDType = "github" + + [goldmark.parser.attribute] + block = true + title = true + +[goldmark.renderer] +hardWraps = false +unsafe = false +xhtml = false + +[highlight] +style = "trac" +lineNumbersInTable = true +noClasses = false + +[tableOfContents] +endLevel = 2 +ordered = false +startLevel = 2 diff --git a/docs/config/_default/menus/menus.en.toml b/docs/config/_default/menus/menus.en.toml new file mode 100644 index 000000000..cd337cbee --- /dev/null +++ b/docs/config/_default/menus/menus.en.toml @@ -0,0 +1,152 @@ +[[docs]] +identifier = 'about' +name = 'About Hugo' +pageRef = '/about/' +weight = 10 + +[[docs]] +name = 'Installation' +weight = 20 +identifier = 'installation' +pageRef = '/installation/' + +[[docs]] +name = 'Getting started' +weight = 30 +identifier = 'getting-started' +pageRef = '/getting-started/' +post = 'break' + +[[docs]] +name = 'Content management' +weight = 40 +identifier = 'content-management' +post = 'expanded' +pageRef = '/content-management/' + +[[docs]] +name = 'Templates' +weight = 50 +identifier = 'templates' +pageRef = '/templates/' + +[[docs]] +name = 'Functions' +weight = 60 +identifier = 'functions' +pageRef = '/functions/' + +[[docs]] +name = 'Methods' +weight = 70 +identifier = 'methods' +pageRef = '/methods/' + +[[docs]] +name = 'Quick reference' +weight = 80 +identifier = 'quick-reference' +pageRef = '/quick-reference/' + +[[docs]] +name = 'Variables' +weight = 85 +identifier = 'variables' +pageRef = '/variables/' + +[[docs]] +name = 'Hugo Modules' +weight = 90 +identifier = 'modules' +pageRef = '/hugo-modules/' + +[[docs]] +name = 'Hugo Pipes' +weight = 100 +identifier = 'hugo-pipes' +pageRef = '/hugo-pipes/' + +[[docs]] +name = 'CLI' +weight = 110 +post = 'break' +identifier = 'commands' +pageRef = '/commands/' + +# Low level items + +[[docs]] +name = 'Troubleshooting' +weight = 120 +identifier = 'troubleshooting' +pageRef = '/troubleshooting/' + +[[docs]] +name = 'Developer tools' +weight = 130 +identifier = 'developer-tools' +pageRef = '/tools/' + +[[docs]] +name = 'Hosting and deployment' +weight = 140 +identifier = 'hosting-and-deployment' +pageRef = '/hosting-and-deployment/' + +[[docs]] +name = 'Contribute' +weight = 150 +post = 'break' +identifier = 'contribute' +pageRef = '/contribute/' + +######## QUICKLINKS + +[[quicklinks]] +identifier = 'fundamentals' +name = 'Fundamentals' +pageRef = '/tags/fundamentals/' +weight = 1 + +######## GLOBAL ITEMS TO BE SHARED WITH THE HUGO SITES + +[[global]] +name = 'News' +weight = 1 +identifier = 'news' +pageRef = '/news/' + +[[global]] +name = 'Docs' +weight = 5 +identifier = 'docs' +url = '/documentation/' + +[[global]] +name = 'Themes' +weight = 10 +identifier = 'themes' +url = 'https://themes.gohugo.io/' + +[[global]] +name = 'Showcase' +weight = 20 +identifier = 'showcase' +pageRef = '/showcase/' + +# Anything with a weight > 100 gets an external icon + +[[global]] +name = 'Community' +weight = 150 +icon = true +identifier = 'community' +post = 'external' +url = 'https://discourse.gohugo.io/' + +[[global]] +name = 'GitHub' +weight = 200 +identifier = 'github' +post = 'external' +url = 'https://github.com/gohugoio/hugo' diff --git a/docs/config/_default/params.toml b/docs/config/_default/params.toml new file mode 100644 index 000000000..378c8071e --- /dev/null +++ b/docs/config/_default/params.toml @@ -0,0 +1,28 @@ +description = "The world’s fastest framework for building websites" +## Setting this to true will add a "noindex" to *EVERY* page on the site. +removefromexternalsearch = false +## Gh repo for site footer (include trailing slash) +ghrepo = "https://github.com/gohugoio/hugoDocs/" +## GH Repo for filing a new issue +github_repo = "https://github.com/gohugoio/hugo/issues/new" +### Edit content repo (set to automatically enter "edit" mode; this is good for "improve this page" links) +ghdocsrepo = "https://github.com/gohugoio/hugoDocs/tree/master/docs" +## Discuss Forum URL +forum = "https://discourse.gohugo.io/" +## Google Tag Manager +gtmid = "" +## Setting this to true will load layouts/partials/math.html on every page on the site. +math = false + +# First one is picked as the Twitter card image if not set on page. +images = ["images/gohugoio-card.png"] + +flex_box_interior_classes = "flex-auto w-100 w-40-l mr3 mb3 bg-white ba b--moon-gray nested-copy-line-height" + +#sidebar_direction = "sidebar_left" + +[social] + twitter = "GoHugoIOv2" + +[render_hooks.link] + errorLevel = 'warning' # ignore (default), warning, or error (fails the build) diff --git a/docs/config/_default/security.toml b/docs/config/_default/security.toml new file mode 100644 index 000000000..8bd91945f --- /dev/null +++ b/docs/config/_default/security.toml @@ -0,0 +1,9 @@ + + enableInlineShortcodes = false + + [funcs] + getenv = ['^HUGO_', '^REPOSITORY_URL$', '^BRANCH$'] + + [http] + methods = ['(?i)GET|POST'] + urls = ['.*'] diff --git a/docs/config/development/params.toml b/docs/config/development/params.toml new file mode 100644 index 000000000..4cd7314ab --- /dev/null +++ b/docs/config/development/params.toml @@ -0,0 +1 @@ +# Params for development (server mode) diff --git a/docs/config/production/config.toml b/docs/config/production/config.toml new file mode 100644 index 000000000..a54fe5669 --- /dev/null +++ b/docs/config/production/config.toml @@ -0,0 +1,6 @@ +# Config for production + +# This is turned off in development as it is relatively slow. +# This is needed to get accurate lastMod and Git commit info +# on the docs pages. +enableGitInfo = true
\ No newline at end of file diff --git a/docs/config/production/params.toml b/docs/config/production/params.toml new file mode 100644 index 000000000..d0071fe65 --- /dev/null +++ b/docs/config/production/params.toml @@ -0,0 +1,2 @@ +# Params for production + diff --git a/docs/content/en/_index.md b/docs/content/en/_index.md new file mode 100644 index 000000000..69d40ebcf --- /dev/null +++ b/docs/content/en/_index.md @@ -0,0 +1,49 @@ +--- +title: The world’s fastest framework for building websites +date: 2017-03-02T12:00:00-05:00 +features: + - heading: Blistering Speed + image_path: /images/icon-fast.svg + tagline: What's modern about waiting for your site to build? + copy: Hugo is the fastest tool of its kind. At <1 ms per page, the average site builds in less than a second. + + - heading: Robust Content Management + image_path: /images/icon-content-management.svg + tagline: Flexibility rules. Hugo is a content strategist's dream. + copy: Hugo supports unlimited content types, taxonomies, menus, dynamic API-driven content, and more, all without plugins. + + - heading: Shortcodes + image_path: /images/icon-shortcodes.svg + tagline: Hugo's shortcodes are Markdown's hidden superpower. + copy: We love the beautiful simplicity of markdown’s syntax, but there are times when we want more flexibility. Hugo shortcodes allow for both beauty and flexibility. + + - heading: Built-in Templates + image_path: /images/icon-built-in-templates.svg + tagline: Hugo has common patterns to get your work done quickly. + copy: Hugo ships with pre-made templates to make quick work of SEO, commenting, analytics and other functions. One line of code, and you're done. + + - heading: Multilingual and i18n + image_path: /images/icon-multilingual2.svg + tagline: Polyglot baked in. + copy: Hugo provides full i18n support for multi-language sites with the same straightforward development experience Hugo users love in single-language sites. + + - heading: Custom Outputs + image_path: /images/icon-custom-outputs.svg + tagline: HTML not enough? + copy: Hugo allows you to output your content in multiple formats, including JSON or AMP, and makes it easy to create your own. +sections: + - heading: "300+ Themes" + cta: Check out the Hugo themes. + link: https://themes.gohugo.io/ + color_classes: bg-accent-color white + image: /images/homepage-screenshot-hugo-themes.jpg + copy: "Hugo provides a robust theming system that is easy to implement but capable of producing even the most complicated websites." + - heading: "Capable Templating" + cta: Get Started. + link: templates/ + color_classes: bg-primary-color-light black + image: /images/home-page-templating-example.png + copy: "Hugo's Go-based templating provides just the right amount of logic to build anything from the simple to complex." +--- + +Hugo is one of the most popular open-source static site generators. With its amazing speed and flexibility, Hugo makes building websites fun again. diff --git a/docs/content/en/about/_index.md b/docs/content/en/about/_index.md new file mode 100644 index 000000000..3a8319029 --- /dev/null +++ b/docs/content/en/about/_index.md @@ -0,0 +1,16 @@ +--- +title: About Hugo +linkTitle: Overview +description: Hugo's features, roadmap, license, and motivation. +categories: [] +keywords: [] +menu: + docs: + identifier: about-hugo-overview + parent: about + weight: 10 +weight: 10 +aliases: [/about-hugo/,/docs/] +--- + +Hugo is not your average static site generator. diff --git a/docs/content/en/about/benefits.md b/docs/content/en/about/benefits.md new file mode 100644 index 000000000..82952c4e6 --- /dev/null +++ b/docs/content/en/about/benefits.md @@ -0,0 +1,36 @@ +--- +title: Benefits of static site generators +linkTitle: Static site generators +description: Improved performance, security and ease of use are just a few of the reasons static site generators are so appealing. +categories: [about] +keywords: [ssg,static,performance,security] +menu: + docs: + parent: about + weight: 40 +weight: 40 +--- + +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 + +* ["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 diff --git a/docs/content/en/about/features.md b/docs/content/en/about/features.md new file mode 100644 index 000000000..a94ce5526 --- /dev/null +++ b/docs/content/en/about/features.md @@ -0,0 +1,80 @@ +--- +title: 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. +categories: [about] +keywords: [] +menu: + docs: + parent: about + weight: 30 +weight: 30 +toc: true +--- + +## General + +* [Extremely fast] build times (< 1 ms per page) +* Completely cross platform, with [easy installation][install] on macOS, Linux, Windows, and more +* Renders changes on the fly with [LiveReload] as you develop +* [Powerful theming] +* [Host your site anywhere][hostanywhere] + +## Organization + +* 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 + +* 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/ diff --git a/docs/content/en/about/hugo-and-gdpr.md b/docs/content/en/about/hugo-and-gdpr.md new file mode 100644 index 000000000..daf4e80f0 --- /dev/null +++ b/docs/content/en/about/hugo-and-gdpr.md @@ -0,0 +1,134 @@ +--- +title: Hugo and the General Data Protection Regulation +linkTitle: Hugo and the GDPR +description: About how to configure your Hugo site to meet the new regulations. +categories: [about] +keywords: ["GDPR", "Privacy", "Data Protection"] +menu: + docs: + parent: about + weight: 60 +weight: 60 +toc: true +aliases: [/privacy/,/gdpr/] +--- + + General Data Protection Regulation ([GDPR](https://en.wikipedia.org/wiki/General_Data_Protection_Regulation)) is a regulation in EU law on data protection and privacy for all individuals within the European Union and the European Economic Area. It became enforceable on 25 May 2018. + + **Hugo is a static site generator. By using Hugo you are already standing on very solid ground. Static HTML files on disk are much easier to reason about compared to server and database driven web sites.** + + But even static websites can integrate with external services, so from version `0.41`, Hugo provides a **privacy configuration** that covers the relevant built-in templates. + + Note that: + + * These settings have their defaults setting set to _off_, i.e. how it worked before Hugo `0.41`. You must do your own evaluation of your site and apply the appropriate settings. + * These settings work with the [internal templates](/templates/internal/). Some theme may contain custom templates for embedding services like Google Analytics. In that case these options have no effect. + * We will continue this work and improve this further in future Hugo versions. + +## All privacy settings + +Below are all privacy settings and their default value. These settings need to be put in your site configuration (e.g. `hugo.toml`). + +{{< code-toggle file=hugo >}} +[privacy] +[privacy.disqus] +disable = false +[privacy.googleAnalytics] +disable = false +respectDoNotTrack = false +anonymizeIP = false +useSessionStorage = false +[privacy.instagram] +disable = false +simple = false +[privacy.twitter] +disable = false +enableDNT = false +simple = false +[privacy.vimeo] +disable = false +enableDNT = false +simple = false +[privacy.youtube] +disable = false +privacyEnhanced = false +{{< /code-toggle >}} + +## Disable all services + +An example privacy configuration that disables all the relevant services in Hugo. With this configuration, the other settings will not matter. + +{{< code-toggle file=hugo >}} +[privacy] +[privacy.disqus] +disable = true +[privacy.googleAnalytics] +disable = true +[privacy.instagram] +disable = true +[privacy.twitter] +disable = true +[privacy.vimeo] +disable = true +[privacy.youtube] +disable = true +{{< /code-toggle >}} + +## The privacy settings explained + +### GoogleAnalytics + +anonymizeIP +: Enabling this will make it so the users' IP addresses are anonymized within Google Analytics. + +respectDoNotTrack +: Enabling this will make the GA templates respect the "Do Not Track" HTTP header. + +useSessionStorage +: Enabling this will disable the use of Cookies and use Session Storage to Store the GA Client ID. + +{{% note %}} +`useSessionStorage` is not supported when using Google Analytics v4 (gtag.js). +{{% /note %}} + +### Instagram + +simple +: If simple mode is enabled, a static and no-JS version of the Instagram image card will be built. Note that this only supports image cards and the image itself will be fetched from Instagram's servers. + +**Note:** If you use the _simple mode_ for Instagram and a site styled with Bootstrap 4, you may want to disable the inline styles provided by Hugo: + +{{< code-toggle file=hugo >}} +[services] +[services.instagram] +disableInlineCSS = true +{{< /code-toggle >}} + +### Twitter + +enableDNT +: Enabling this for the twitter/tweet shortcode, the tweet and its embedded page on your site are not used for purposes that include personalized suggestions and personalized ads. + +simple +: If simple mode is enabled, a static and no-JS version of a tweet will be built. + +**Note:** If you use the _simple mode_ for Twitter, you may want to disable the inline styles provided by Hugo: + +{{< code-toggle file=hugo >}} +[services] +[services.twitter] +disableInlineCSS = true +{{< /code-toggle >}} + +### YouTube + +privacyEnhanced +: When you turn on privacy-enhanced mode, YouTube won’t store information about visitors on your website unless the user plays the embedded video. + +### Vimeo + +enableDNT +: Enabling this for the vimeo shortcode, the Vimeo player will be blocked from tracking any session data, including all cookies and stats. + +simple +: If simple mode is enabled, the video thumbnail is fetched from Vimeo's servers and it is overlaid with a play button. If the user clicks to play the video, it will open in a new tab directly on Vimeo's website. diff --git a/docs/content/en/about/license.md b/docs/content/en/about/license.md new file mode 100644 index 000000000..e488bb87a --- /dev/null +++ b/docs/content/en/about/license.md @@ -0,0 +1,80 @@ +--- +title: License +description: Hugo is released under the Apache 2.0 license. +categories: [about] +keywords: [license,apache] +menu: + docs: + parent: about + weight: 70 +weight: 70 +--- + +## Apache License + + +_Version 2.0, January 2004_ +_<http://www.apache.org/licenses/>_ + +### Terms and Conditions for use, reproduction, and distribution + +#### 1. Definitions + +“License” shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. + +“Licensor” shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. + +“Legal Entity” shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, “control” means **(i)** the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or **(ii)** ownership of fifty percent (50%) or more of the outstanding shares, or **(iii)** beneficial ownership of such entity. + +“You” (or “Your”) shall mean an individual or Legal Entity exercising permissions granted by this License. + +“Source” form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. + +“Object” form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. + +“Work” shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). + +“Derivative Works” shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. + +“Contribution” shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, “submitted” means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as “Not a Contribution.” + +“Contributor” shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. + +#### 2. Grant of Copyright License + +Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. + +#### 3. Grant of Patent License + +Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. + +#### 4. Redistribution + +You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: + +* **(a)** You must give any other recipients of the Work or Derivative Works a copy of this License; and +* **(b)** You must cause any modified files to carry prominent notices stating that You changed the files; and +* **(c)** You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and +* **(d)** If the Work includes a “NOTICE” text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. + +You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. + +#### 5. Submission of Contributions + +Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. + +#### 6. Trademarks + +This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. + +#### 7. Disclaimer of Warranty + +Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an “AS IS” BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. + +#### 8. Limitation of Liability + +In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. + +#### 9. Accepting Warranty or Additional Liability + +While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. diff --git a/docs/content/en/about/security-model.md b/docs/content/en/about/security-model.md new file mode 100644 index 000000000..af1dd7d75 --- /dev/null +++ b/docs/content/en/about/security-model.md @@ -0,0 +1,63 @@ +--- +title: Hugo's security model +description: A summary of Hugo's security model. +categories: [about] +keywords: [security,privacy] +menu: + docs: + parent: about + weight: 50 +weight: 50 +toc: true +aliases: [/security/] +--- + +## Runtime security + +Hugo produces static output, so once built, the runtime is the browser (assuming the output is HTML) and any server (API) that you integrate with. + +But when developing and building your site, the runtime is the `hugo` executable. Securing a runtime can be [a real challenge](https://blog.logrocket.com/how-to-protect-your-node-js-applications-from-malicious-dependencies-5f2e60ea08f9/). + +**Hugo's main approach is that of sandboxing and a security policy with strict defaults:** + +* Hugo has a virtual file system and only the main project (not third-party components) is allowed to mount directories or files outside the project root. +* Only the main project can walk symbolic links. +* User-defined components have read-only access to the filesystem. +* We shell out to some external binaries to support [Asciidoctor](/content-management/formats/#list-of-content-formats) and similar, but those binaries and their flags are predefined and disabled by default (see [Security Policy](#security-policy)). General functions to run arbitrary external OS commands have been [discussed](https://github.com/gohugoio/hugo/issues/796), but not implemented because of security concerns. + +## Security policy + +Hugo has a built-in security policy that restricts access to [os/exec](https://pkg.go.dev/os/exec), remote communication and similar. + +The default configuration is listed below. Any build using features not in the allow list of the security policy will fail with a detailed message about what needs to be done. Most of these settings are allow lists (string or slice, [Regular Expressions](https://pkg.go.dev/regexp) or `none` which matches nothing). + +{{< code-toggle config=security />}} + +Note that these and other configuration settings in Hugo can be overridden by the OS environment. If you want to block all remote HTTP fetching of data: + +```txt +HUGO_SECURITY_HTTP_URLS=none hugo +``` + +## Dependency security + +Hugo is built as a static binary using [Go Modules](https://github.com/golang/go/wiki/Modules) to manage its dependencies. Go Modules have several safeguards, one of them being the `go.sum` file. This is a database of the expected cryptographic checksums of all of your dependencies, including transitive dependencies. + +[Hugo Modules](/hugo-modules/) is a feature built on top of the functionality of Go Modules. Like Go Modules, a Hugo project using Hugo Modules will have a `go.sum` file. We recommend that you commit this file to your version control system. The Hugo build will fail if there is a checksum mismatch, which would be an indication of [dependency tampering](https://julienrenaux.fr/2019/12/20/github-actions-security-risk/). + +## Web application security + +These are the security threats as defined by [OWASP](https://en.wikipedia.org/wiki/OWASP). + +For HTML output, this is the core security model: + +<https://pkg.go.dev/html/template#hdr-Security_Model> + +In short: + +Template and configuration authors (you) are trusted, but the data you send in is not. +This is why you sometimes need to use the _safe_ functions, such as `safeHTML`, to avoid escaping of data you know is safe. +There is one exception to the above, as noted in the documentation: If you enable inline shortcodes, you also say that the shortcodes and data handling in content files are trusted, as those macros are treated as pure text. +It may be worth adding that Hugo is a static site generator with no concept of dynamic user input. + +For content, the default Markdown renderer is [configured](/getting-started/configuration-markup) to remove or escape potentially unsafe content. This behavior can be reconfigured if you trust your content. diff --git a/docs/content/en/about/what-is-hugo.md b/docs/content/en/about/what-is-hugo.md new file mode 100644 index 000000000..e4326d173 --- /dev/null +++ b/docs/content/en/about/what-is-hugo.md @@ -0,0 +1,57 @@ +--- +title: What is Hugo +description: Hugo is a fast and modern static site generator written in Go, and designed to make website creation fun again. +categories: [about] +keywords: [] +menu: + docs: + parent: about + weight: 20 +weight: 20 +toc: true +aliases: [/overview/introduction/,/about/why-i-built-hugo/] +--- + +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/ +[DreamHost]: https://www.dreamhost.com/ +[Firebase]: https://firebase.google.com/docs/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/ +[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/ diff --git a/docs/content/en/commands/hugo.md b/docs/content/en/commands/hugo.md new file mode 100644 index 000000000..fa8f6d1ed --- /dev/null +++ b/docs/content/en/commands/hugo.md @@ -0,0 +1,84 @@ +--- +title: "hugo" +slug: hugo +url: /commands/hugo/ +--- +## hugo + +hugo builds your site + +### Synopsis + +hugo is the main command, used to build your Hugo site. + +Hugo is a Fast and Flexible Static Site Generator +built with love by spf13 and friends in Go. + +Complete documentation is available at https://gohugo.io/. + +``` +hugo [flags] +``` + +### Options + +``` + -b, --baseURL string hostname (and path) to the root, e.g. https://spf13.com/ + -D, --buildDrafts include content marked as draft + -E, --buildExpired include expired content + -F, --buildFuture include content with publishdate in the future + --cacheDir string filesystem path to cache directory + --cleanDestinationDir remove files from destination not found in static directories + --clock string set the clock used by Hugo, e.g. --clock 2021-11-06T22:30:00.00+09:00 + --config string config file (default is hugo.yaml|json|toml) + --configDir string config dir (default "config") + -c, --contentDir string filesystem path to content directory + --debug debug output + -d, --destination string filesystem path to write files to + --disableKinds strings disable different kind of pages (home, RSS etc.) + --enableGitInfo add Git revision, date, author, and CODEOWNERS info to the pages + -e, --environment string build environment + --forceSyncStatic copy all files when static is changed. + --gc enable to run some cleanup tasks (remove unused cache files) after the build + -h, --help help for hugo + --ignoreCache ignores the cache directory + --ignoreVendorPaths string ignores any _vendor for module paths matching the given Glob pattern + -l, --layoutDir string filesystem path to layout directory + --logLevel string log level (debug|info|warn|error) + --minify minify any supported output format (HTML, XML etc.) + --noBuildLock don't create .hugo_build.lock file + --noChmod don't sync permission mode of files + --noTimes don't sync modification time of files + --panicOnWarning panic on first WARNING log + --poll string set this to a poll interval, e.g --poll 700ms, to use a poll based approach to watch for file system changes + --printI18nWarnings print missing translations + --printMemoryUsage print memory usage to screen at intervals + --printPathWarnings print warnings on duplicate target paths etc. + --printUnusedTemplates print warnings on unused templates. + --quiet build in quiet mode + --renderToMemory render to memory (only useful for benchmark testing) + -s, --source string filesystem path to read files relative from + --templateMetrics display metrics about template executions + --templateMetricsHints calculate some improvement hints when combined with --templateMetrics + -t, --theme strings themes to use (located in /themes/THEMENAME/) + --themesDir string filesystem path to themes directory + --trace file write trace to file (not useful in general) + -v, --verbose verbose output + -w, --watch watch filesystem for changes and recreate as needed +``` + +### SEE ALSO + +* [hugo completion](/commands/hugo_completion/) - Generate the autocompletion script for the specified shell +* [hugo config](/commands/hugo_config/) - Print the site configuration +* [hugo convert](/commands/hugo_convert/) - Convert your content to different formats +* [hugo deploy](/commands/hugo_deploy/) - Deploy your site to a Cloud provider. +* [hugo env](/commands/hugo_env/) - Print Hugo version and environment info +* [hugo gen](/commands/hugo_gen/) - A collection of several useful generators. +* [hugo import](/commands/hugo_import/) - Import your site from others. +* [hugo list](/commands/hugo_list/) - Listing out various types of content +* [hugo mod](/commands/hugo_mod/) - Various Hugo Modules helpers. +* [hugo new](/commands/hugo_new/) - Create new content for your site +* [hugo server](/commands/hugo_server/) - A high performance webserver +* [hugo version](/commands/hugo_version/) - Print Hugo version and environment info + diff --git a/docs/content/en/commands/hugo_completion.md b/docs/content/en/commands/hugo_completion.md new file mode 100644 index 000000000..c9b370da6 --- /dev/null +++ b/docs/content/en/commands/hugo_completion.md @@ -0,0 +1,46 @@ +--- +title: "hugo completion" +slug: hugo_completion +url: /commands/hugo_completion/ +--- +## hugo completion + +Generate the autocompletion script for the specified shell + +### Synopsis + +Generate the autocompletion script for hugo for the specified shell. +See each sub-command's help for details on how to use the generated script. + + +### Options + +``` + -h, --help help for completion +``` + +### Options inherited from parent commands + +``` + --clock string set the clock used by Hugo, e.g. --clock 2021-11-06T22:30:00.00+09:00 + --config string config file (default is hugo.yaml|json|toml) + --configDir string config dir (default "config") + --debug debug output + -d, --destination string filesystem path to write files to + -e, --environment string build environment + --ignoreVendorPaths string ignores any _vendor for module paths matching the given Glob pattern + --logLevel string log level (debug|info|warn|error) + --quiet build in quiet mode + -s, --source string filesystem path to read files relative from + --themesDir string filesystem path to themes directory + -v, --verbose verbose output +``` + +### SEE ALSO + +* [hugo](/commands/hugo/) - hugo builds your site +* [hugo completion bash](/commands/hugo_completion_bash/) - Generate the autocompletion script for bash +* [hugo completion fish](/commands/hugo_completion_fish/) - Generate the autocompletion script for fish +* [hugo completion powershell](/commands/hugo_completion_powershell/) - Generate the autocompletion script for powershell +* [hugo completion zsh](/commands/hugo_completion_zsh/) - Generate the autocompletion script for zsh + diff --git a/docs/content/en/commands/hugo_completion_bash.md b/docs/content/en/commands/hugo_completion_bash.md new file mode 100644 index 000000000..875ecfc19 --- /dev/null +++ b/docs/content/en/commands/hugo_completion_bash.md @@ -0,0 +1,65 @@ +--- +title: "hugo completion bash" +slug: hugo_completion_bash +url: /commands/hugo_completion_bash/ +--- +## hugo completion bash + +Generate the autocompletion script for bash + +### Synopsis + +Generate the autocompletion script for the bash shell. + +This script depends on the 'bash-completion' package. +If it is not installed already, you can install it via your OS's package manager. + +To load completions in your current shell session: + + source <(hugo completion bash) + +To load completions for every new session, execute once: + +#### Linux: + + hugo completion bash > /etc/bash_completion.d/hugo + +#### macOS: + + hugo completion bash > $(brew --prefix)/etc/bash_completion.d/hugo + +You will need to start a new shell for this setup to take effect. + + +``` +hugo completion bash +``` + +### Options + +``` + -h, --help help for bash + --no-descriptions disable completion descriptions +``` + +### Options inherited from parent commands + +``` + --clock string set the clock used by Hugo, e.g. --clock 2021-11-06T22:30:00.00+09:00 + --config string config file (default is hugo.yaml|json|toml) + --configDir string config dir (default "config") + --debug debug output + -d, --destination string filesystem path to write files to + -e, --environment string build environment + --ignoreVendorPaths string ignores any _vendor for module paths matching the given Glob pattern + --logLevel string log level (debug|info|warn|error) + --quiet build in quiet mode + -s, --source string filesystem path to read files relative from + --themesDir string filesystem path to themes directory + -v, --verbose verbose output +``` + +### SEE ALSO + +* [hugo completion](/commands/hugo_completion/) - Generate the autocompletion script for the specified shell + diff --git a/docs/content/en/commands/hugo_completion_fish.md b/docs/content/en/commands/hugo_completion_fish.md new file mode 100644 index 000000000..87b84a702 --- /dev/null +++ b/docs/content/en/commands/hugo_completion_fish.md @@ -0,0 +1,56 @@ +--- +title: "hugo completion fish" +slug: hugo_completion_fish +url: /commands/hugo_completion_fish/ +--- +## hugo completion fish + +Generate the autocompletion script for fish + +### Synopsis + +Generate the autocompletion script for the fish shell. + +To load completions in your current shell session: + + hugo completion fish | source + +To load completions for every new session, execute once: + + hugo completion fish > ~/.config/fish/completions/hugo.fish + +You will need to start a new shell for this setup to take effect. + + +``` +hugo completion fish [flags] +``` + +### Options + +``` + -h, --help help for fish + --no-descriptions disable completion descriptions +``` + +### Options inherited from parent commands + +``` + --clock string set the clock used by Hugo, e.g. --clock 2021-11-06T22:30:00.00+09:00 + --config string config file (default is hugo.yaml|json|toml) + --configDir string config dir (default "config") + --debug debug output + -d, --destination string filesystem path to write files to + -e, --environment string build environment + --ignoreVendorPaths string ignores any _vendor for module paths matching the given Glob pattern + --logLevel string log level (debug|info|warn|error) + --quiet build in quiet mode + -s, --source string filesystem path to read files relative from + --themesDir string filesystem path to themes directory + -v, --verbose verbose output +``` + +### SEE ALSO + +* [hugo completion](/commands/hugo_completion/) - Generate the autocompletion script for the specified shell + diff --git a/docs/content/en/commands/hugo_completion_powershell.md b/docs/content/en/commands/hugo_completion_powershell.md new file mode 100644 index 000000000..77cfeda5f --- /dev/null +++ b/docs/content/en/commands/hugo_completion_powershell.md @@ -0,0 +1,53 @@ +--- +title: "hugo completion powershell" +slug: hugo_completion_powershell +url: /commands/hugo_completion_powershell/ +--- +## hugo completion powershell + +Generate the autocompletion script for powershell + +### Synopsis + +Generate the autocompletion script for powershell. + +To load completions in your current shell session: + + hugo completion powershell | Out-String | Invoke-Expression + +To load completions for every new session, add the output of the above command +to your powershell profile. + + +``` +hugo completion powershell [flags] +``` + +### Options + +``` + -h, --help help for powershell + --no-descriptions disable completion descriptions +``` + +### Options inherited from parent commands + +``` + --clock string set the clock used by Hugo, e.g. --clock 2021-11-06T22:30:00.00+09:00 + --config string config file (default is hugo.yaml|json|toml) + --configDir string config dir (default "config") + --debug debug output + -d, --destination string filesystem path to write files to + -e, --environment string build environment + --ignoreVendorPaths string ignores any _vendor for module paths matching the given Glob pattern + --logLevel string log level (debug|info|warn|error) + --quiet build in quiet mode + -s, --source string filesystem path to read files relative from + --themesDir string filesystem path to themes directory + -v, --verbose verbose output +``` + +### SEE ALSO + +* [hugo completion](/commands/hugo_completion/) - Generate the autocompletion script for the specified shell + diff --git a/docs/content/en/commands/hugo_completion_zsh.md b/docs/content/en/commands/hugo_completion_zsh.md new file mode 100644 index 000000000..84856b6b3 --- /dev/null +++ b/docs/content/en/commands/hugo_completion_zsh.md @@ -0,0 +1,67 @@ +--- +title: "hugo completion zsh" +slug: hugo_completion_zsh +url: /commands/hugo_completion_zsh/ +--- +## hugo completion zsh + +Generate the autocompletion script for zsh + +### Synopsis + +Generate the autocompletion script for the zsh shell. + +If shell completion is not already enabled in your environment you will need +to enable it. You can execute the following once: + + echo "autoload -U compinit; compinit" >> ~/.zshrc + +To load completions in your current shell session: + + source <(hugo completion zsh) + +To load completions for every new session, execute once: + +#### Linux: + + hugo completion zsh > "${fpath[1]}/_hugo" + +#### macOS: + + hugo completion zsh > $(brew --prefix)/share/zsh/site-functions/_hugo + +You will need to start a new shell for this setup to take effect. + + +``` +hugo completion zsh [flags] +``` + +### Options + +``` + -h, --help help for zsh + --no-descriptions disable completion descriptions +``` + +### Options inherited from parent commands + +``` + --clock string set the clock used by Hugo, e.g. --clock 2021-11-06T22:30:00.00+09:00 + --config string config file (default is hugo.yaml|json|toml) + --configDir string config dir (default "config") + --debug debug output + -d, --destination string filesystem path to write files to + -e, --environment string build environment + --ignoreVendorPaths string ignores any _vendor for module paths matching the given Glob pattern + --logLevel string log level (debug|info|warn|error) + --quiet build in quiet mode + -s, --source string filesystem path to read files relative from + --themesDir string filesystem path to themes directory + -v, --verbose verbose output +``` + +### SEE ALSO + +* [hugo completion](/commands/hugo_completion/) - Generate the autocompletion script for the specified shell + diff --git a/docs/content/en/commands/hugo_config.md b/docs/content/en/commands/hugo_config.md new file mode 100644 index 000000000..3ec3748a3 --- /dev/null +++ b/docs/content/en/commands/hugo_config.md @@ -0,0 +1,51 @@ +--- +title: "hugo config" +slug: hugo_config +url: /commands/hugo_config/ +--- +## hugo config + +Print the site configuration + +### Synopsis + +Print the site configuration, both default and custom settings. + +``` +hugo config [command] [flags] +``` + +### Options + +``` + -b, --baseURL string hostname (and path) to the root, e.g. https://spf13.com/ + --cacheDir string filesystem path to cache directory + -c, --contentDir string filesystem path to content directory + --format string preferred file format (toml, yaml or json) (default "toml") + -h, --help help for config + --lang string the language to display config for. Defaults to the first language defined. + -t, --theme strings themes to use (located in /themes/THEMENAME/) +``` + +### Options inherited from parent commands + +``` + --clock string set the clock used by Hugo, e.g. --clock 2021-11-06T22:30:00.00+09:00 + --config string config file (default is hugo.yaml|json|toml) + --configDir string config dir (default "config") + --debug debug output + -d, --destination string filesystem path to write files to + -e, --environment string build environment + --ignoreVendorPaths string ignores any _vendor for module paths matching the given Glob pattern + --logLevel string log level (debug|info|warn|error) + --quiet build in quiet mode + -s, --source string filesystem path to read files relative from + --themesDir string filesystem path to themes directory + -v, --verbose verbose output +``` + +### SEE ALSO + +* [hugo](/commands/hugo/) - hugo builds your site +* [hugo config mounts](/commands/hugo_config_mounts/) - Print the configured file mounts + diff --git a/docs/content/en/commands/hugo_config_mounts.md b/docs/content/en/commands/hugo_config_mounts.md new file mode 100644 index 000000000..90b171912 --- /dev/null +++ b/docs/content/en/commands/hugo_config_mounts.md @@ -0,0 +1,44 @@ +--- +title: "hugo config mounts" +slug: hugo_config_mounts +url: /commands/hugo_config_mounts/ +--- +## hugo config mounts + +Print the configured file mounts + +``` +hugo config mounts [flags] [args] +``` + +### Options + +``` + -b, --baseURL string hostname (and path) to the root, e.g. https://spf13.com/ + --cacheDir string filesystem path to cache directory + -c, --contentDir string filesystem path to content directory + -h, --help help for mounts + -t, --theme strings themes to use (located in /themes/THEMENAME/) +``` + +### Options inherited from parent commands + +``` + --clock string set the clock used by Hugo, e.g. --clock 2021-11-06T22:30:00.00+09:00 + --config string config file (default is hugo.yaml|json|toml) + --configDir string config dir (default "config") + --debug debug output + -d, --destination string filesystem path to write files to + -e, --environment string build environment + --ignoreVendorPaths string ignores any _vendor for module paths matching the given Glob pattern + --logLevel string log level (debug|info|warn|error) + --quiet build in quiet mode + -s, --source string filesystem path to read files relative from + --themesDir string filesystem path to themes directory + -v, --verbose verbose output +``` + +### SEE ALSO + +* [hugo config](/commands/hugo_config/) - Print the site configuration + diff --git a/docs/content/en/commands/hugo_convert.md b/docs/content/en/commands/hugo_convert.md new file mode 100644 index 000000000..07f7f9c13 --- /dev/null +++ b/docs/content/en/commands/hugo_convert.md @@ -0,0 +1,47 @@ +--- +title: "hugo convert" +slug: hugo_convert +url: /commands/hugo_convert/ +--- +## hugo convert + +Convert your content to different formats + +### Synopsis + +Convert your content (e.g. front matter) to different formats. + +See convert's subcommands toJSON, toTOML and toYAML for more information. + +### Options + +``` + -h, --help help for convert + -o, --output string filesystem path to write files to + --unsafe enable less safe operations, please backup first +``` + +### Options inherited from parent commands + +``` + --clock string set the clock used by Hugo, e.g. --clock 2021-11-06T22:30:00.00+09:00 + --config string config file (default is hugo.yaml|json|toml) + --configDir string config dir (default "config") + --debug debug output + -d, --destination string filesystem path to write files to + -e, --environment string build environment + --ignoreVendorPaths string ignores any _vendor for module paths matching the given Glob pattern + --logLevel string log level (debug|info|warn|error) + --quiet build in quiet mode + -s, --source string filesystem path to read files relative from + --themesDir string filesystem path to themes directory + -v, --verbose verbose output +``` + +### SEE ALSO + +* [hugo](/commands/hugo/) - hugo builds your site +* [hugo convert toJSON](/commands/hugo_convert_tojson/) - Convert front matter to JSON +* [hugo convert toTOML](/commands/hugo_convert_totoml/) - Convert front matter to TOML +* [hugo convert toYAML](/commands/hugo_convert_toyaml/) - Convert front matter to YAML + diff --git a/docs/content/en/commands/hugo_convert_toJSON.md b/docs/content/en/commands/hugo_convert_toJSON.md new file mode 100644 index 000000000..23d6a1032 --- /dev/null +++ b/docs/content/en/commands/hugo_convert_toJSON.md @@ -0,0 +1,47 @@ +--- +title: "hugo convert toJSON" +slug: hugo_convert_toJSON +url: /commands/hugo_convert_tojson/ +--- +## hugo convert toJSON + +Convert front matter to JSON + +### Synopsis + +toJSON converts all front matter in the content directory +to use JSON for the front matter. + +``` +hugo convert toJSON [flags] [args] +``` + +### Options + +``` + -h, --help help for toJSON +``` + +### Options inherited from parent commands + +``` + --clock string set the clock used by Hugo, e.g. --clock 2021-11-06T22:30:00.00+09:00 + --config string config file (default is hugo.yaml|json|toml) + --configDir string config dir (default "config") + --debug debug output + -d, --destination string filesystem path to write files to + -e, --environment string build environment + --ignoreVendorPaths string ignores any _vendor for module paths matching the given Glob pattern + --logLevel string log level (debug|info|warn|error) + -o, --output string filesystem path to write files to + --quiet build in quiet mode + -s, --source string filesystem path to read files relative from + --themesDir string filesystem path to themes directory + --unsafe enable less safe operations, please backup first + -v, --verbose verbose output +``` + +### SEE ALSO + +* [hugo convert](/commands/hugo_convert/) - Convert your content to different formats + diff --git a/docs/content/en/commands/hugo_convert_toTOML.md b/docs/content/en/commands/hugo_convert_toTOML.md new file mode 100644 index 000000000..431547a79 --- /dev/null +++ b/docs/content/en/commands/hugo_convert_toTOML.md @@ -0,0 +1,47 @@ +--- +title: "hugo convert toTOML" +slug: hugo_convert_toTOML +url: /commands/hugo_convert_totoml/ +--- +## hugo convert toTOML + +Convert front matter to TOML + +### Synopsis + +toTOML converts all front matter in the content directory +to use TOML for the front matter. + +``` +hugo convert toTOML [flags] [args] +``` + +### Options + +``` + -h, --help help for toTOML +``` + +### Options inherited from parent commands + +``` + --clock string set the clock used by Hugo, e.g. --clock 2021-11-06T22:30:00.00+09:00 + --config string config file (default is hugo.yaml|json|toml) + --configDir string config dir (default "config") + --debug debug output + -d, --destination string filesystem path to write files to + -e, --environment string build environment + --ignoreVendorPaths string ignores any _vendor for module paths matching the given Glob pattern + --logLevel string log level (debug|info|warn|error) + -o, --output string filesystem path to write files to + --quiet build in quiet mode + -s, --source string filesystem path to read files relative from + --themesDir string filesystem path to themes directory + --unsafe enable less safe operations, please backup first + -v, --verbose verbose output +``` + +### SEE ALSO + +* [hugo convert](/commands/hugo_convert/) - Convert your content to different formats + diff --git a/docs/content/en/commands/hugo_convert_toYAML.md b/docs/content/en/commands/hugo_convert_toYAML.md new file mode 100644 index 000000000..03f7fbb25 --- /dev/null +++ b/docs/content/en/commands/hugo_convert_toYAML.md @@ -0,0 +1,47 @@ +--- +title: "hugo convert toYAML" +slug: hugo_convert_toYAML +url: /commands/hugo_convert_toyaml/ +--- +## hugo convert toYAML + +Convert front matter to YAML + +### Synopsis + +toYAML converts all front matter in the content directory +to use YAML for the front matter. + +``` +hugo convert toYAML [flags] [args] +``` + +### Options + +``` + -h, --help help for toYAML +``` + +### Options inherited from parent commands + +``` + --clock string set the clock used by Hugo, e.g. --clock 2021-11-06T22:30:00.00+09:00 + --config string config file (default is hugo.yaml|json|toml) + --configDir string config dir (default "config") + --debug debug output + -d, --destination string filesystem path to write files to + -e, --environment string build environment + --ignoreVendorPaths string ignores any _vendor for module paths matching the given Glob pattern + --logLevel string log level (debug|info|warn|error) + -o, --output string filesystem path to write files to + --quiet build in quiet mode + -s, --source string filesystem path to read files relative from + --themesDir string filesystem path to themes directory + --unsafe enable less safe operations, please backup first + -v, --verbose verbose output +``` + +### SEE ALSO + +* [hugo convert](/commands/hugo_convert/) - Convert your content to different formats + diff --git a/docs/content/en/commands/hugo_deploy.md b/docs/content/en/commands/hugo_deploy.md new file mode 100644 index 000000000..b4ab3e618 --- /dev/null +++ b/docs/content/en/commands/hugo_deploy.md @@ -0,0 +1,55 @@ +--- +title: "hugo deploy" +slug: hugo_deploy +url: /commands/hugo_deploy/ +--- +## hugo deploy + +Deploy your site to a Cloud provider. + +### Synopsis + +Deploy your site to a Cloud provider. + +See https://gohugo.io/hosting-and-deployment/hugo-deploy/ for detailed +documentation. + + +``` +hugo deploy [flags] [args] +``` + +### Options + +``` + --confirm ask for confirmation before making changes to the target + --dryRun dry run + --force force upload of all files + -h, --help help for deploy + --invalidateCDN invalidate the CDN cache listed in the deployment target (default true) + --maxDeletes int maximum # of files to delete, or -1 to disable (default 256) + --target string target deployment from deployments section in config file; defaults to the first one + --workers int number of workers to transfer files. defaults to 10 (default 10) +``` + +### Options inherited from parent commands + +``` + --clock string set the clock used by Hugo, e.g. --clock 2021-11-06T22:30:00.00+09:00 + --config string config file (default is hugo.yaml|json|toml) + --configDir string config dir (default "config") + --debug debug output + -d, --destination string filesystem path to write files to + -e, --environment string build environment + --ignoreVendorPaths string ignores any _vendor for module paths matching the given Glob pattern + --logLevel string log level (debug|info|warn|error) + --quiet build in quiet mode + -s, --source string filesystem path to read files relative from + --themesDir string filesystem path to themes directory + -v, --verbose verbose output +``` + +### SEE ALSO + +* [hugo](/commands/hugo/) - hugo builds your site + diff --git a/docs/content/en/commands/hugo_env.md b/docs/content/en/commands/hugo_env.md new file mode 100644 index 000000000..076ddef26 --- /dev/null +++ b/docs/content/en/commands/hugo_env.md @@ -0,0 +1,44 @@ +--- +title: "hugo env" +slug: hugo_env +url: /commands/hugo_env/ +--- +## hugo env + +Print Hugo version and environment info + +### Synopsis + +Print Hugo version and environment info. This is useful in Hugo bug reports + +``` +hugo env [flags] [args] +``` + +### Options + +``` + -h, --help help for env +``` + +### Options inherited from parent commands + +``` + --clock string set the clock used by Hugo, e.g. --clock 2021-11-06T22:30:00.00+09:00 + --config string config file (default is hugo.yaml|json|toml) + --configDir string config dir (default "config") + --debug debug output + -d, --destination string filesystem path to write files to + -e, --environment string build environment + --ignoreVendorPaths string ignores any _vendor for module paths matching the given Glob pattern + --logLevel string log level (debug|info|warn|error) + --quiet build in quiet mode + -s, --source string filesystem path to read files relative from + --themesDir string filesystem path to themes directory + -v, --verbose verbose output +``` + +### SEE ALSO + +* [hugo](/commands/hugo/) - hugo builds your site + diff --git a/docs/content/en/commands/hugo_gen.md b/docs/content/en/commands/hugo_gen.md new file mode 100644 index 000000000..5c8bd6f2c --- /dev/null +++ b/docs/content/en/commands/hugo_gen.md @@ -0,0 +1,39 @@ +--- +title: "hugo gen" +slug: hugo_gen +url: /commands/hugo_gen/ +--- +## hugo gen + +A collection of several useful generators. + +### Options + +``` + -h, --help help for gen +``` + +### Options inherited from parent commands + +``` + --clock string set the clock used by Hugo, e.g. --clock 2021-11-06T22:30:00.00+09:00 + --config string config file (default is hugo.yaml|json|toml) + --configDir string config dir (default "config") + --debug debug output + -d, --destination string filesystem path to write files to + -e, --environment string build environment + --ignoreVendorPaths string ignores any _vendor for module paths matching the given Glob pattern + --logLevel string log level (debug|info|warn|error) + --quiet build in quiet mode + -s, --source string filesystem path to read files relative from + --themesDir string filesystem path to themes directory + -v, --verbose verbose output +``` + +### SEE ALSO + +* [hugo](/commands/hugo/) - hugo builds your site +* [hugo gen chromastyles](/commands/hugo_gen_chromastyles/) - Generate CSS stylesheet for the Chroma code highlighter +* [hugo gen doc](/commands/hugo_gen_doc/) - Generate Markdown documentation for the Hugo CLI. +* [hugo gen man](/commands/hugo_gen_man/) - Generate man pages for the Hugo CLI + diff --git a/docs/content/en/commands/hugo_gen_chromastyles.md b/docs/content/en/commands/hugo_gen_chromastyles.md new file mode 100644 index 000000000..3ec890412 --- /dev/null +++ b/docs/content/en/commands/hugo_gen_chromastyles.md @@ -0,0 +1,49 @@ +--- +title: "hugo gen chromastyles" +slug: hugo_gen_chromastyles +url: /commands/hugo_gen_chromastyles/ +--- +## hugo gen chromastyles + +Generate CSS stylesheet for the Chroma code highlighter + +### Synopsis + +Generate CSS stylesheet for the Chroma code highlighter for a given style. This stylesheet is needed if markup.highlight.noClasses is disabled in config. + +See https://xyproto.github.io/splash/docs/all.html for a preview of the available styles + +``` +hugo gen chromastyles [flags] [args] +``` + +### Options + +``` + -h, --help help for chromastyles + --highlightStyle string style used for highlighting lines (see https://github.com/alecthomas/chroma) + --linesStyle string style used for line numbers (see https://github.com/alecthomas/chroma) + --style string highlighter style (see https://xyproto.github.io/splash/docs/) (default "friendly") +``` + +### Options inherited from parent commands + +``` + --clock string set the clock used by Hugo, e.g. --clock 2021-11-06T22:30:00.00+09:00 + --config string config file (default is hugo.yaml|json|toml) + --configDir string config dir (default "config") + --debug debug output + -d, --destination string filesystem path to write files to + -e, --environment string build environment + --ignoreVendorPaths string ignores any _vendor for module paths matching the given Glob pattern + --logLevel string log level (debug|info|warn|error) + --quiet build in quiet mode + -s, --source string filesystem path to read files relative from + --themesDir string filesystem path to themes directory + -v, --verbose verbose output +``` + +### SEE ALSO + +* [hugo gen](/commands/hugo_gen/) - A collection of several useful generators. + diff --git a/docs/content/en/commands/hugo_gen_doc.md b/docs/content/en/commands/hugo_gen_doc.md new file mode 100644 index 000000000..13fb23106 --- /dev/null +++ b/docs/content/en/commands/hugo_gen_doc.md @@ -0,0 +1,50 @@ +--- +title: "hugo gen doc" +slug: hugo_gen_doc +url: /commands/hugo_gen_doc/ +--- +## hugo gen doc + +Generate Markdown documentation for the Hugo CLI. + +### Synopsis + +Generate Markdown documentation for the Hugo CLI. + This command is, mostly, used to create up-to-date documentation + of Hugo's command-line interface for https://gohugo.io/. + + It creates one Markdown file per command with front matter suitable + for rendering in Hugo. + +``` +hugo gen doc [flags] [args] +``` + +### Options + +``` + --dir string the directory to write the doc. (default "/tmp/hugodoc/") + -h, --help help for doc +``` + +### Options inherited from parent commands + +``` + --clock string set the clock used by Hugo, e.g. --clock 2021-11-06T22:30:00.00+09:00 + --config string config file (default is hugo.yaml|json|toml) + --configDir string config dir (default "config") + --debug debug output + -d, --destination string filesystem path to write files to + -e, --environment string build environment + --ignoreVendorPaths string ignores any _vendor for module paths matching the given Glob pattern + --logLevel string log level (debug|info|warn|error) + --quiet build in quiet mode + -s, --source string filesystem path to read files relative from + --themesDir string filesystem path to themes directory + -v, --verbose verbose output +``` + +### SEE ALSO + +* [hugo gen](/commands/hugo_gen/) - A collection of several useful generators. + diff --git a/docs/content/en/commands/hugo_gen_man.md b/docs/content/en/commands/hugo_gen_man.md new file mode 100644 index 000000000..6a63a583e --- /dev/null +++ b/docs/content/en/commands/hugo_gen_man.md @@ -0,0 +1,47 @@ +--- +title: "hugo gen man" +slug: hugo_gen_man +url: /commands/hugo_gen_man/ +--- +## hugo gen man + +Generate man pages for the Hugo CLI + +### Synopsis + +This command automatically generates up-to-date man pages of Hugo's + command-line interface. By default, it creates the man page files + in the "man" directory under the current directory. + +``` +hugo gen man [flags] [args] +``` + +### Options + +``` + --dir string the directory to write the man pages. (default "man/") + -h, --help help for man +``` + +### Options inherited from parent commands + +``` + --clock string set the clock used by Hugo, e.g. --clock 2021-11-06T22:30:00.00+09:00 + --config string config file (default is hugo.yaml|json|toml) + --configDir string config dir (default "config") + --debug debug output + -d, --destination string filesystem path to write files to + -e, --environment string build environment + --ignoreVendorPaths string ignores any _vendor for module paths matching the given Glob pattern + --logLevel string log level (debug|info|warn|error) + --quiet build in quiet mode + -s, --source string filesystem path to read files relative from + --themesDir string filesystem path to themes directory + -v, --verbose verbose output +``` + +### SEE ALSO + +* [hugo gen](/commands/hugo_gen/) - A collection of several useful generators. + diff --git a/docs/content/en/commands/hugo_import.md b/docs/content/en/commands/hugo_import.md new file mode 100644 index 000000000..a6bd40f34 --- /dev/null +++ b/docs/content/en/commands/hugo_import.md @@ -0,0 +1,43 @@ +--- +title: "hugo import" +slug: hugo_import +url: /commands/hugo_import/ +--- +## hugo import + +Import your site from others. + +### Synopsis + +Import your site from other web site generators like Jekyll. + +Import requires a subcommand, e.g. `hugo import jekyll jekyll_root_path target_path`. + +### Options + +``` + -h, --help help for import +``` + +### Options inherited from parent commands + +``` + --clock string set the clock used by Hugo, e.g. --clock 2021-11-06T22:30:00.00+09:00 + --config string config file (default is hugo.yaml|json|toml) + --configDir string config dir (default "config") + --debug debug output + -d, --destination string filesystem path to write files to + -e, --environment string build environment + --ignoreVendorPaths string ignores any _vendor for module paths matching the given Glob pattern + --logLevel string log level (debug|info|warn|error) + --quiet build in quiet mode + -s, --source string filesystem path to read files relative from + --themesDir string filesystem path to themes directory + -v, --verbose verbose output +``` + +### SEE ALSO + +* [hugo](/commands/hugo/) - hugo builds your site +* [hugo import jekyll](/commands/hugo_import_jekyll/) - hugo import from Jekyll + diff --git a/docs/content/en/commands/hugo_import_jekyll.md b/docs/content/en/commands/hugo_import_jekyll.md new file mode 100644 index 000000000..af751348c --- /dev/null +++ b/docs/content/en/commands/hugo_import_jekyll.md @@ -0,0 +1,47 @@ +--- +title: "hugo import jekyll" +slug: hugo_import_jekyll +url: /commands/hugo_import_jekyll/ +--- +## hugo import jekyll + +hugo import from Jekyll + +### Synopsis + +hugo import from Jekyll. + +Import from Jekyll requires two paths, e.g. `hugo import jekyll jekyll_root_path target_path`. + +``` +hugo import jekyll [flags] [args] +``` + +### Options + +``` + --force allow import into non-empty target directory + -h, --help help for jekyll +``` + +### Options inherited from parent commands + +``` + --clock string set the clock used by Hugo, e.g. --clock 2021-11-06T22:30:00.00+09:00 + --config string config file (default is hugo.yaml|json|toml) + --configDir string config dir (default "config") + --debug debug output + -d, --destination string filesystem path to write files to + -e, --environment string build environment + --ignoreVendorPaths string ignores any _vendor for module paths matching the given Glob pattern + --logLevel string log level (debug|info|warn|error) + --quiet build in quiet mode + -s, --source string filesystem path to read files relative from + --themesDir string filesystem path to themes directory + -v, --verbose verbose output +``` + +### SEE ALSO + +* [hugo import](/commands/hugo_import/) - Import your site from others. + diff --git a/docs/content/en/commands/hugo_list.md b/docs/content/en/commands/hugo_list.md new file mode 100644 index 000000000..294a8eaa4 --- /dev/null +++ b/docs/content/en/commands/hugo_list.md @@ -0,0 +1,46 @@ +--- +title: "hugo list" +slug: hugo_list +url: /commands/hugo_list/ +--- +## hugo list + +Listing out various types of content + +### Synopsis + +Listing out various types of content. + +List requires a subcommand, e.g. hugo list drafts + +### Options + +``` + -h, --help help for list +``` + +### Options inherited from parent commands + +``` + --clock string set the clock used by Hugo, e.g. --clock 2021-11-06T22:30:00.00+09:00 + --config string config file (default is hugo.yaml|json|toml) + --configDir string config dir (default "config") + --debug debug output + -d, --destination string filesystem path to write files to + -e, --environment string build environment + --ignoreVendorPaths string ignores any _vendor for module paths matching the given Glob pattern + --logLevel string log level (debug|info|warn|error) + --quiet build in quiet mode + -s, --source string filesystem path to read files relative from + --themesDir string filesystem path to themes directory + -v, --verbose verbose output +``` + +### SEE ALSO + +* [hugo](/commands/hugo/) - hugo builds your site +* [hugo list all](/commands/hugo_list_all/) - List all posts +* [hugo list drafts](/commands/hugo_list_drafts/) - List all drafts +* [hugo list expired](/commands/hugo_list_expired/) - List all posts already expired +* [hugo list future](/commands/hugo_list_future/) - List all posts dated in the future + diff --git a/docs/content/en/commands/hugo_list_all.md b/docs/content/en/commands/hugo_list_all.md new file mode 100644 index 000000000..49f692de0 --- /dev/null +++ b/docs/content/en/commands/hugo_list_all.md @@ -0,0 +1,44 @@ +--- +title: "hugo list all" +slug: hugo_list_all +url: /commands/hugo_list_all/ +--- +## hugo list all + +List all posts + +### Synopsis + +List all of the posts in your content directory, include drafts, future and expired pages. + +``` +hugo list all [flags] [args] +``` + +### Options + +``` + -h, --help help for all +``` + +### Options inherited from parent commands + +``` + --clock string set the clock used by Hugo, e.g. --clock 2021-11-06T22:30:00.00+09:00 + --config string config file (default is hugo.yaml|json|toml) + --configDir string config dir (default "config") + --debug debug output + -d, --destination string filesystem path to write files to + -e, --environment string build environment + --ignoreVendorPaths string ignores any _vendor for module paths matching the given Glob pattern + --logLevel string log level (debug|info|warn|error) + --quiet build in quiet mode + -s, --source string filesystem path to read files relative from + --themesDir string filesystem path to themes directory + -v, --verbose verbose output +``` + +### SEE ALSO + +* [hugo list](/commands/hugo_list/) - Listing out various types of content + diff --git a/docs/content/en/commands/hugo_list_drafts.md b/docs/content/en/commands/hugo_list_drafts.md new file mode 100644 index 000000000..e84e582e6 --- /dev/null +++ b/docs/content/en/commands/hugo_list_drafts.md @@ -0,0 +1,44 @@ +--- +title: "hugo list drafts" +slug: hugo_list_drafts +url: /commands/hugo_list_drafts/ +--- +## hugo list drafts + +List all drafts + +### Synopsis + +List all of the drafts in your content directory. + +``` +hugo list drafts [flags] [args] +``` + +### Options + +``` + -h, --help help for drafts +``` + +### Options inherited from parent commands + +``` + --clock string set the clock used by Hugo, e.g. --clock 2021-11-06T22:30:00.00+09:00 + --config string config file (default is hugo.yaml|json|toml) + --configDir string config dir (default "config") + --debug debug output + -d, --destination string filesystem path to write files to + -e, --environment string build environment + --ignoreVendorPaths string ignores any _vendor for module paths matching the given Glob pattern + --logLevel string log level (debug|info|warn|error) + --quiet build in quiet mode + -s, --source string filesystem path to read files relative from + --themesDir string filesystem path to themes directory + -v, --verbose verbose output +``` + +### SEE ALSO + +* [hugo list](/commands/hugo_list/) - Listing out various types of content + diff --git a/docs/content/en/commands/hugo_list_expired.md b/docs/content/en/commands/hugo_list_expired.md new file mode 100644 index 000000000..43feb5d8e --- /dev/null +++ b/docs/content/en/commands/hugo_list_expired.md @@ -0,0 +1,44 @@ +--- +title: "hugo list expired" +slug: hugo_list_expired +url: /commands/hugo_list_expired/ +--- +## hugo list expired + +List all posts already expired + +### Synopsis + +List all of the posts in your content directory which has already expired. + +``` +hugo list expired [flags] [args] +``` + +### Options + +``` + -h, --help help for expired +``` + +### Options inherited from parent commands + +``` + --clock string set the clock used by Hugo, e.g. --clock 2021-11-06T22:30:00.00+09:00 + --config string config file (default is hugo.yaml|json|toml) + --configDir string config dir (default "config") + --debug debug output + -d, --destination string filesystem path to write files to + -e, --environment string build environment + --ignoreVendorPaths string ignores any _vendor for module paths matching the given Glob pattern + --logLevel string log level (debug|info|warn|error) + --quiet build in quiet mode + -s, --source string filesystem path to read files relative from + --themesDir string filesystem path to themes directory + -v, --verbose verbose output +``` + +### SEE ALSO + +* [hugo list](/commands/hugo_list/) - Listing out various types of content + diff --git a/docs/content/en/commands/hugo_list_future.md b/docs/content/en/commands/hugo_list_future.md new file mode 100644 index 000000000..419accd6c --- /dev/null +++ b/docs/content/en/commands/hugo_list_future.md @@ -0,0 +1,44 @@ +--- +title: "hugo list future" +slug: hugo_list_future +url: /commands/hugo_list_future/ +--- +## hugo list future + +List all posts dated in the future + +### Synopsis + +List all of the posts in your content directory which will be posted in the future. + +``` +hugo list future [flags] [args] +``` + +### Options + +``` + -h, --help help for future +``` + +### Options inherited from parent commands + +``` + --clock string set the clock used by Hugo, e.g. --clock 2021-11-06T22:30:00.00+09:00 + --config string config file (default is hugo.yaml|json|toml) + --configDir string config dir (default "config") + --debug debug output + -d, --destination string filesystem path to write files to + -e, --environment string build environment + --ignoreVendorPaths string ignores any _vendor for module paths matching the given Glob pattern + --logLevel string log level (debug|info|warn|error) + --quiet build in quiet mode + -s, --source string filesystem path to read files relative from + --themesDir string filesystem path to themes directory + -v, --verbose verbose output +``` + +### SEE ALSO + +* [hugo list](/commands/hugo_list/) - Listing out various types of content + diff --git a/docs/content/en/commands/hugo_mod.md b/docs/content/en/commands/hugo_mod.md new file mode 100644 index 000000000..dc712b1de --- /dev/null +++ b/docs/content/en/commands/hugo_mod.md @@ -0,0 +1,59 @@ +--- +title: "hugo mod" +slug: hugo_mod +url: /commands/hugo_mod/ +--- +## hugo mod + +Various Hugo Modules helpers. + +### Synopsis + +Various helpers to help manage the modules in your project's dependency graph. +Most operations here requires a Go version installed on your system (>= Go 1.12) and the relevant VCS client (typically Git). +This is not needed if you only operate on modules inside /themes or if you have vendored them via "hugo mod vendor". + + +Note that Hugo will always start out by resolving the components defined in the site +configuration, provided by a _vendor directory (if no --ignoreVendorPaths flag provided), +Go Modules, or a folder inside the themes directory, in that order. + +See https://gohugo.io/hugo-modules/ for more information. + + + +### Options + +``` + -h, --help help for mod +``` + +### Options inherited from parent commands + +``` + --clock string set the clock used by Hugo, e.g. --clock 2021-11-06T22:30:00.00+09:00 + --config string config file (default is hugo.yaml|json|toml) + --configDir string config dir (default "config") + --debug debug output + -d, --destination string filesystem path to write files to + -e, --environment string build environment + --ignoreVendorPaths string ignores any _vendor for module paths matching the given Glob pattern + --logLevel string log level (debug|info|warn|error) + --quiet build in quiet mode + -s, --source string filesystem path to read files relative from + --themesDir string filesystem path to themes directory + -v, --verbose verbose output +``` + +### SEE ALSO + +* [hugo](/commands/hugo/) - hugo builds your site +* [hugo mod clean](/commands/hugo_mod_clean/) - Delete the Hugo Module cache for the current project. +* [hugo mod get](/commands/hugo_mod_get/) - Resolves dependencies in your current Hugo Project. +* [hugo mod graph](/commands/hugo_mod_graph/) - Print a module dependency graph. +* [hugo mod init](/commands/hugo_mod_init/) - Initialize this project as a Hugo Module. +* [hugo mod npm](/commands/hugo_mod_npm/) - Various npm helpers. +* [hugo mod tidy](/commands/hugo_mod_tidy/) - Remove unused entries in go.mod and go.sum. +* [hugo mod vendor](/commands/hugo_mod_vendor/) - Vendor all module dependencies into the _vendor directory. +* [hugo mod verify](/commands/hugo_mod_verify/) - Verify dependencies. + diff --git a/docs/content/en/commands/hugo_mod_clean.md b/docs/content/en/commands/hugo_mod_clean.md new file mode 100644 index 000000000..c1c2b0c0d --- /dev/null +++ b/docs/content/en/commands/hugo_mod_clean.md @@ -0,0 +1,50 @@ +--- +title: "hugo mod clean" +slug: hugo_mod_clean +url: /commands/hugo_mod_clean/ +--- +## hugo mod clean + +Delete the Hugo Module cache for the current project. + +### Synopsis + +Delete the Hugo Module cache for the current project. + +``` +hugo mod clean [flags] [args] +``` + +### Options + +``` + --all clean entire module cache + -b, --baseURL string hostname (and path) to the root, e.g. https://spf13.com/ + --cacheDir string filesystem path to cache directory + -c, --contentDir string filesystem path to content directory + -h, --help help for clean + --pattern string pattern matching module paths to clean (all if not set), e.g. "**hugo*" + -t, --theme strings themes to use (located in /themes/THEMENAME/) +``` + +### Options inherited from parent commands + +``` + --clock string set the clock used by Hugo, e.g. --clock 2021-11-06T22:30:00.00+09:00 + --config string config file (default is hugo.yaml|json|toml) + --configDir string config dir (default "config") + --debug debug output + -d, --destination string filesystem path to write files to + -e, --environment string build environment + --ignoreVendorPaths string ignores any _vendor for module paths matching the given Glob pattern + --logLevel string log level (debug|info|warn|error) + --quiet build in quiet mode + -s, --source string filesystem path to read files relative from + --themesDir string filesystem path to themes directory + -v, --verbose verbose output +``` + +### SEE ALSO + +* [hugo mod](/commands/hugo_mod/) - Various Hugo Modules helpers. + diff --git a/docs/content/en/commands/hugo_mod_get.md b/docs/content/en/commands/hugo_mod_get.md new file mode 100644 index 000000000..f4803d723 --- /dev/null +++ b/docs/content/en/commands/hugo_mod_get.md @@ -0,0 +1,75 @@ +--- +title: "hugo mod get" +slug: hugo_mod_get +url: /commands/hugo_mod_get/ +--- +## hugo mod get + +Resolves dependencies in your current Hugo Project. + +### Synopsis + + +Resolves dependencies in your current Hugo Project. + +Some examples: + +Install the latest version possible for a given module: + + hugo mod get github.com/gohugoio/testshortcodes + +Install a specific version: + + hugo mod get github.com/gohugoio/[email protected] + +Install the latest versions of all direct module dependencies: + + hugo mod get + hugo mod get ./... (recursive) + +Install the latest versions of all module dependencies (direct and indirect): + + hugo mod get -u + hugo mod get -u ./... (recursive) + +Run "go help get" for more information. All flags available for "go get" is also relevant here. + +Note that Hugo will always start out by resolving the components defined in the site +configuration, provided by a _vendor directory (if no --ignoreVendorPaths flag provided), +Go Modules, or a folder inside the themes directory, in that order. + +See https://gohugo.io/hugo-modules/ for more information. + + + +``` +hugo mod get [flags] [args] +``` + +### Options + +``` + -h, --help help for get +``` + +### Options inherited from parent commands + +``` + --clock string set the clock used by Hugo, e.g. --clock 2021-11-06T22:30:00.00+09:00 + --config string config file (default is hugo.yaml|json|toml) + --configDir string config dir (default "config") + --debug debug output + -d, --destination string filesystem path to write files to + -e, --environment string build environment + --ignoreVendorPaths string ignores any _vendor for module paths matching the given Glob pattern + --logLevel string log level (debug|info|warn|error) + --quiet build in quiet mode + -s, --source string filesystem path to read files relative from + --themesDir string filesystem path to themes directory + -v, --verbose verbose output +``` + +### SEE ALSO + +* [hugo mod](/commands/hugo_mod/) - Various Hugo Modules helpers. + diff --git a/docs/content/en/commands/hugo_mod_graph.md b/docs/content/en/commands/hugo_mod_graph.md new file mode 100644 index 000000000..a2e2b51a3 --- /dev/null +++ b/docs/content/en/commands/hugo_mod_graph.md @@ -0,0 +1,51 @@ +--- +title: "hugo mod graph" +slug: hugo_mod_graph +url: /commands/hugo_mod_graph/ +--- +## hugo mod graph + +Print a module dependency graph. + +### Synopsis + +Print a module dependency graph with information about module status (disabled, vendored). +Note that for vendored modules, that is the version listed and not the one from go.mod. + + +``` +hugo mod graph [flags] [args] +``` + +### Options + +``` + -b, --baseURL string hostname (and path) to the root, e.g. https://spf13.com/ + --cacheDir string filesystem path to cache directory + --clean delete module cache for dependencies that fail verification + -c, --contentDir string filesystem path to content directory + -h, --help help for graph + -t, --theme strings themes to use (located in /themes/THEMENAME/) +``` + +### Options inherited from parent commands + +``` + --clock string set the clock used by Hugo, e.g. --clock 2021-11-06T22:30:00.00+09:00 + --config string config file (default is hugo.yaml|json|toml) + --configDir string config dir (default "config") + --debug debug output + -d, --destination string filesystem path to write files to + -e, --environment string build environment + --ignoreVendorPaths string ignores any _vendor for module paths matching the given Glob pattern + --logLevel string log level (debug|info|warn|error) + --quiet build in quiet mode + -s, --source string filesystem path to read files relative from + --themesDir string filesystem path to themes directory + -v, --verbose verbose output +``` + +### SEE ALSO + +* [hugo mod](/commands/hugo_mod/) - Various Hugo Modules helpers. + diff --git a/docs/content/en/commands/hugo_mod_init.md b/docs/content/en/commands/hugo_mod_init.md new file mode 100644 index 000000000..49b2609e1 --- /dev/null +++ b/docs/content/en/commands/hugo_mod_init.md @@ -0,0 +1,55 @@ +--- +title: "hugo mod init" +slug: hugo_mod_init +url: /commands/hugo_mod_init/ +--- +## hugo mod init + +Initialize this project as a Hugo Module. + +### Synopsis + +Initialize this project as a Hugo Module. + It will try to guess the module path, but you may help by passing it as an argument, e.g: + + hugo mod init github.com/gohugoio/testshortcodes + + Note that Hugo Modules supports multi-module projects, so you can initialize a Hugo Module + inside a subfolder on GitHub, as one example. + + +``` +hugo mod init [flags] [args] +``` + +### Options + +``` + -b, --baseURL string hostname (and path) to the root, e.g. https://spf13.com/ + --cacheDir string filesystem path to cache directory + -c, --contentDir string filesystem path to content directory + -h, --help help for init + -t, --theme strings themes to use (located in /themes/THEMENAME/) +``` + +### Options inherited from parent commands + +``` + --clock string set the clock used by Hugo, e.g. --clock 2021-11-06T22:30:00.00+09:00 + --config string config file (default is hugo.yaml|json|toml) + --configDir string config dir (default "config") + --debug debug output + -d, --destination string filesystem path to write files to + -e, --environment string build environment + --ignoreVendorPaths string ignores any _vendor for module paths matching the given Glob pattern + --logLevel string log level (debug|info|warn|error) + --quiet build in quiet mode + -s, --source string filesystem path to read files relative from + --themesDir string filesystem path to themes directory + -v, --verbose verbose output +``` + +### SEE ALSO + +* [hugo mod](/commands/hugo_mod/) - Various Hugo Modules helpers. + diff --git a/docs/content/en/commands/hugo_mod_npm.md b/docs/content/en/commands/hugo_mod_npm.md new file mode 100644 index 000000000..fcd834798 --- /dev/null +++ b/docs/content/en/commands/hugo_mod_npm.md @@ -0,0 +1,45 @@ +--- +title: "hugo mod npm" +slug: hugo_mod_npm +url: /commands/hugo_mod_npm/ +--- +## hugo mod npm + +Various npm helpers. + +### Synopsis + +Various npm (Node package manager) helpers. + +``` +hugo mod npm [command] [flags] +``` + +### Options + +``` + -h, --help help for npm +``` + +### Options inherited from parent commands + +``` + --clock string set the clock used by Hugo, e.g. --clock 2021-11-06T22:30:00.00+09:00 + --config string config file (default is hugo.yaml|json|toml) + --configDir string config dir (default "config") + --debug debug output + -d, --destination string filesystem path to write files to + -e, --environment string build environment + --ignoreVendorPaths string ignores any _vendor for module paths matching the given Glob pattern + --logLevel string log level (debug|info|warn|error) + --quiet build in quiet mode + -s, --source string filesystem path to read files relative from + --themesDir string filesystem path to themes directory + -v, --verbose verbose output +``` + +### SEE ALSO + +* [hugo mod](/commands/hugo_mod/) - Various Hugo Modules helpers. +* [hugo mod npm pack](/commands/hugo_mod_npm_pack/) - Experimental: Prepares and writes a composite package.json file for your project. + diff --git a/docs/content/en/commands/hugo_mod_npm_pack.md b/docs/content/en/commands/hugo_mod_npm_pack.md new file mode 100644 index 000000000..30214d556 --- /dev/null +++ b/docs/content/en/commands/hugo_mod_npm_pack.md @@ -0,0 +1,58 @@ +--- +title: "hugo mod npm pack" +slug: hugo_mod_npm_pack +url: /commands/hugo_mod_npm_pack/ +--- +## hugo mod npm pack + +Experimental: Prepares and writes a composite package.json file for your project. + +### Synopsis + +Prepares and writes a composite package.json file for your project. + +On first run it creates a "package.hugo.json" in the project root if not already there. This file will be used as a template file +with the base dependency set. + +This set will be merged with all "package.hugo.json" files found in the dependency tree, picking the version closest to the project. + +This command is marked as 'Experimental'. We think it's a great idea, so it's not likely to be +removed from Hugo, but we need to test this out in "real life" to get a feel of it, +so this may/will change in future versions of Hugo. + + +``` +hugo mod npm pack [flags] [args] +``` + +### Options + +``` + -b, --baseURL string hostname (and path) to the root, e.g. https://spf13.com/ + --cacheDir string filesystem path to cache directory + -c, --contentDir string filesystem path to content directory + -h, --help help for pack + -t, --theme strings themes to use (located in /themes/THEMENAME/) +``` + +### Options inherited from parent commands + +``` + --clock string set the clock used by Hugo, e.g. --clock 2021-11-06T22:30:00.00+09:00 + --config string config file (default is hugo.yaml|json|toml) + --configDir string config dir (default "config") + --debug debug output + -d, --destination string filesystem path to write files to + -e, --environment string build environment + --ignoreVendorPaths string ignores any _vendor for module paths matching the given Glob pattern + --logLevel string log level (debug|info|warn|error) + --quiet build in quiet mode + -s, --source string filesystem path to read files relative from + --themesDir string filesystem path to themes directory + -v, --verbose verbose output +``` + +### SEE ALSO + +* [hugo mod npm](/commands/hugo_mod_npm/) - Various npm helpers. + diff --git a/docs/content/en/commands/hugo_mod_tidy.md b/docs/content/en/commands/hugo_mod_tidy.md new file mode 100644 index 000000000..803ef1c5b --- /dev/null +++ b/docs/content/en/commands/hugo_mod_tidy.md @@ -0,0 +1,44 @@ +--- +title: "hugo mod tidy" +slug: hugo_mod_tidy +url: /commands/hugo_mod_tidy/ +--- +## hugo mod tidy + +Remove unused entries in go.mod and go.sum. + +``` +hugo mod tidy [flags] [args] +``` + +### Options + +``` + -b, --baseURL string hostname (and path) to the root, e.g. https://spf13.com/ + --cacheDir string filesystem path to cache directory + -c, --contentDir string filesystem path to content directory + -h, --help help for tidy + -t, --theme strings themes to use (located in /themes/THEMENAME/) +``` + +### Options inherited from parent commands + +``` + --clock string set the clock used by Hugo, e.g. --clock 2021-11-06T22:30:00.00+09:00 + --config string config file (default is hugo.yaml|json|toml) + --configDir string config dir (default "config") + --debug debug output + -d, --destination string filesystem path to write files to + -e, --environment string build environment + --ignoreVendorPaths string ignores any _vendor for module paths matching the given Glob pattern + --logLevel string log level (debug|info|warn|error) + --quiet build in quiet mode + -s, --source string filesystem path to read files relative from + --themesDir string filesystem path to themes directory + -v, --verbose verbose output +``` + +### SEE ALSO + +* [hugo mod](/commands/hugo_mod/) - Various Hugo Modules helpers. + diff --git a/docs/content/en/commands/hugo_mod_vendor.md b/docs/content/en/commands/hugo_mod_vendor.md new file mode 100644 index 000000000..3a829d5fd --- /dev/null +++ b/docs/content/en/commands/hugo_mod_vendor.md @@ -0,0 +1,50 @@ +--- +title: "hugo mod vendor" +slug: hugo_mod_vendor +url: /commands/hugo_mod_vendor/ +--- +## hugo mod vendor + +Vendor all module dependencies into the _vendor directory. + +### Synopsis + +Vendor all module dependencies into the _vendor directory. + If a module is vendored, that is where Hugo will look for it's dependencies. + + +``` +hugo mod vendor [flags] [args] +``` + +### Options + +``` + -b, --baseURL string hostname (and path) to the root, e.g. https://spf13.com/ + --cacheDir string filesystem path to cache directory + -c, --contentDir string filesystem path to content directory + -h, --help help for vendor + -t, --theme strings themes to use (located in /themes/THEMENAME/) +``` + +### Options inherited from parent commands + +``` + --clock string set the clock used by Hugo, e.g. --clock 2021-11-06T22:30:00.00+09:00 + --config string config file (default is hugo.yaml|json|toml) + --configDir string config dir (default "config") + --debug debug output + -d, --destination string filesystem path to write files to + -e, --environment string build environment + --ignoreVendorPaths string ignores any _vendor for module paths matching the given Glob pattern + --logLevel string log level (debug|info|warn|error) + --quiet build in quiet mode + -s, --source string filesystem path to read files relative from + --themesDir string filesystem path to themes directory + -v, --verbose verbose output +``` + +### SEE ALSO + +* [hugo mod](/commands/hugo_mod/) - Various Hugo Modules helpers. + diff --git a/docs/content/en/commands/hugo_mod_verify.md b/docs/content/en/commands/hugo_mod_verify.md new file mode 100644 index 000000000..b647a2cbb --- /dev/null +++ b/docs/content/en/commands/hugo_mod_verify.md @@ -0,0 +1,49 @@ +--- +title: "hugo mod verify" +slug: hugo_mod_verify +url: /commands/hugo_mod_verify/ +--- +## hugo mod verify + +Verify dependencies. + +### Synopsis + +Verify checks that the dependencies of the current module, which are stored in a local downloaded source cache, have not been modified since being downloaded. + +``` +hugo mod verify [flags] [args] +``` + +### Options + +``` + -b, --baseURL string hostname (and path) to the root, e.g. https://spf13.com/ + --cacheDir string filesystem path to cache directory + --clean delete module cache for dependencies that fail verification + -c, --contentDir string filesystem path to content directory + -h, --help help for verify + -t, --theme strings themes to use (located in /themes/THEMENAME/) +``` + +### Options inherited from parent commands + +``` + --clock string set the clock used by Hugo, e.g. --clock 2021-11-06T22:30:00.00+09:00 + --config string config file (default is hugo.yaml|json|toml) + --configDir string config dir (default "config") + --debug debug output + -d, --destination string filesystem path to write files to + -e, --environment string build environment + --ignoreVendorPaths string ignores any _vendor for module paths matching the given Glob pattern + --logLevel string log level (debug|info|warn|error) + --quiet build in quiet mode + -s, --source string filesystem path to read files relative from + --themesDir string filesystem path to themes directory + -v, --verbose verbose output +``` + +### SEE ALSO + +* [hugo mod](/commands/hugo_mod/) - Various Hugo Modules helpers. + diff --git a/docs/content/en/commands/hugo_new.md b/docs/content/en/commands/hugo_new.md new file mode 100644 index 000000000..ef0ff4cd4 --- /dev/null +++ b/docs/content/en/commands/hugo_new.md @@ -0,0 +1,50 @@ +--- +title: "hugo new" +slug: hugo_new +url: /commands/hugo_new/ +--- +## hugo new + +Create new content for your site + +### Synopsis + +Create a new content file and automatically set the date and title. +It will guess which kind of file to create based on the path provided. + +You can also specify the kind with `-k KIND`. + +If archetypes are provided in your theme or site, they will be used. + +Ensure you run this within the root directory of your site. + +### Options + +``` + -h, --help help for new +``` + +### Options inherited from parent commands + +``` + --clock string set the clock used by Hugo, e.g. --clock 2021-11-06T22:30:00.00+09:00 + --config string config file (default is hugo.yaml|json|toml) + --configDir string config dir (default "config") + --debug debug output + -d, --destination string filesystem path to write files to + -e, --environment string build environment + --ignoreVendorPaths string ignores any _vendor for module paths matching the given Glob pattern + --logLevel string log level (debug|info|warn|error) + --quiet build in quiet mode + -s, --source string filesystem path to read files relative from + --themesDir string filesystem path to themes directory + -v, --verbose verbose output +``` + +### SEE ALSO + +* [hugo](/commands/hugo/) - hugo builds your site +* [hugo new content](/commands/hugo_new_content/) - Create new content for your site +* [hugo new site](/commands/hugo_new_site/) - Create a new site (skeleton) +* [hugo new theme](/commands/hugo_new_theme/) - Create a new theme (skeleton) + diff --git a/docs/content/en/commands/hugo_new_content.md b/docs/content/en/commands/hugo_new_content.md new file mode 100644 index 000000000..cc53346ad --- /dev/null +++ b/docs/content/en/commands/hugo_new_content.md @@ -0,0 +1,58 @@ +--- +title: "hugo new content" +slug: hugo_new_content +url: /commands/hugo_new_content/ +--- +## hugo new content + +Create new content for your site + +### Synopsis + +Create a new content file and automatically set the date and title. +It will guess which kind of file to create based on the path provided. + +You can also specify the kind with `-k KIND`. + +If archetypes are provided in your theme or site, they will be used. + +Ensure you run this within the root directory of your site. + +``` +hugo new content [path] [flags] +``` + +### Options + +``` + -b, --baseURL string hostname (and path) to the root, e.g. https://spf13.com/ + --cacheDir string filesystem path to cache directory + -c, --contentDir string filesystem path to content directory + --editor string edit new content with this editor, if provided + -f, --force overwrite file if it already exists + -h, --help help for content + -k, --kind string content type to create + -t, --theme strings themes to use (located in /themes/THEMENAME/) +``` + +### Options inherited from parent commands + +``` + --clock string set the clock used by Hugo, e.g. --clock 2021-11-06T22:30:00.00+09:00 + --config string config file (default is hugo.yaml|json|toml) + --configDir string config dir (default "config") + --debug debug output + -d, --destination string filesystem path to write files to + -e, --environment string build environment + --ignoreVendorPaths string ignores any _vendor for module paths matching the given Glob pattern + --logLevel string log level (debug|info|warn|error) + --quiet build in quiet mode + -s, --source string filesystem path to read files relative from + --themesDir string filesystem path to themes directory + -v, --verbose verbose output +``` + +### SEE ALSO + +* [hugo new](/commands/hugo_new/) - Create new content for your site + diff --git a/docs/content/en/commands/hugo_new_site.md b/docs/content/en/commands/hugo_new_site.md new file mode 100644 index 000000000..f8a939df5 --- /dev/null +++ b/docs/content/en/commands/hugo_new_site.md @@ -0,0 +1,48 @@ +--- +title: "hugo new site" +slug: hugo_new_site +url: /commands/hugo_new_site/ +--- +## hugo new site + +Create a new site (skeleton) + +### Synopsis + +Create a new site in the provided directory. +The new site will have the correct structure, but no content or theme yet. +Use `hugo new [contentPath]` to create new content. + +``` +hugo new site [path] [flags] +``` + +### Options + +``` + -f, --force init inside non-empty directory + --format string preferred file format (toml, yaml or json) (default "toml") + -h, --help help for site +``` + +### Options inherited from parent commands + +``` + --clock string set the clock used by Hugo, e.g. --clock 2021-11-06T22:30:00.00+09:00 + --config string config file (default is hugo.yaml|json|toml) + --configDir string config dir (default "config") + --debug debug output + -d, --destination string filesystem path to write files to + -e, --environment string build environment + --ignoreVendorPaths string ignores any _vendor for module paths matching the given Glob pattern + --logLevel string log level (debug|info|warn|error) + --quiet build in quiet mode + -s, --source string filesystem path to read files relative from + --themesDir string filesystem path to themes directory + -v, --verbose verbose output +``` + +### SEE ALSO + +* [hugo new](/commands/hugo_new/) - Create new content for your site + diff --git a/docs/content/en/commands/hugo_new_theme.md b/docs/content/en/commands/hugo_new_theme.md new file mode 100644 index 000000000..301c79e0c --- /dev/null +++ b/docs/content/en/commands/hugo_new_theme.md @@ -0,0 +1,47 @@ +--- +title: "hugo new theme" +slug: hugo_new_theme +url: /commands/hugo_new_theme/ +--- +## hugo new theme + +Create a new theme (skeleton) + +### Synopsis + +Create a new theme (skeleton) called [name] in ./themes. +New theme is a skeleton. Please add content to the touched files. Add your +name to the copyright line in the license and adjust the theme.toml file +according to your needs. + +``` +hugo new theme [name] [flags] +``` + +### Options + +``` + -h, --help help for theme +``` + +### Options inherited from parent commands + +``` + --clock string set the clock used by Hugo, e.g. --clock 2021-11-06T22:30:00.00+09:00 + --config string config file (default is hugo.yaml|json|toml) + --configDir string config dir (default "config") + --debug debug output + -d, --destination string filesystem path to write files to + -e, --environment string build environment + --ignoreVendorPaths string ignores any _vendor for module paths matching the given Glob pattern + --logLevel string log level (debug|info|warn|error) + --quiet build in quiet mode + -s, --source string filesystem path to read files relative from + --themesDir string filesystem path to themes directory + -v, --verbose verbose output +``` + +### SEE ALSO + +* [hugo new](/commands/hugo_new/) - Create new content for your site + diff --git a/docs/content/en/commands/hugo_server.md b/docs/content/en/commands/hugo_server.md new file mode 100644 index 000000000..49cd1867b --- /dev/null +++ b/docs/content/en/commands/hugo_server.md @@ -0,0 +1,98 @@ +--- +title: "hugo server" +slug: hugo_server +url: /commands/hugo_server/ +--- +## hugo server + +A high performance webserver + +### Synopsis + +Hugo provides its own webserver which builds and serves the site. +While hugo server is high performance, it is a webserver with limited options. + +'hugo server' will avoid writing the rendered and served content to disk, +preferring to store it in memory. + +By default hugo will also watch your files for any changes you make and +automatically rebuild the site. It will then live reload any open browser pages +and push the latest content to them. As most Hugo sites are built in a fraction +of a second, you will be able to save and see your changes nearly instantly. + +``` +hugo server [command] [flags] +``` + +### Options + +``` + --appendPort append port to baseURL (default true) + -b, --baseURL string hostname (and path) to the root, e.g. https://spf13.com/ + --bind string interface to which the server will bind (default "127.0.0.1") + -D, --buildDrafts include content marked as draft + -E, --buildExpired include expired content + -F, --buildFuture include content with publishdate in the future + --cacheDir string filesystem path to cache directory + --cleanDestinationDir remove files from destination not found in static directories + -c, --contentDir string filesystem path to content directory + --disableBrowserError do not show build errors in the browser + --disableFastRender enables full re-renders on changes + --disableKinds strings disable different kind of pages (home, RSS etc.) + --disableLiveReload watch without enabling live browser reload on rebuild + --enableGitInfo add Git revision, date, author, and CODEOWNERS info to the pages + --forceSyncStatic copy all files when static is changed. + --gc enable to run some cleanup tasks (remove unused cache files) after the build + -h, --help help for server + --ignoreCache ignores the cache directory + -l, --layoutDir string filesystem path to layout directory + --liveReloadPort int port for live reloading (i.e. 443 in HTTPS proxy situations) (default -1) + --meminterval string interval to poll memory usage (requires --memstats), valid time units are "ns", "us" (or "µs"), "ms", "s", "m", "h". (default "100ms") + --memstats string log memory usage to this file + --minify minify any supported output format (HTML, XML etc.) + --navigateToChanged navigate to changed content file on live browser reload + --noBuildLock don't create .hugo_build.lock file + --noChmod don't sync permission mode of files + --noHTTPCache prevent HTTP caching + --noTimes don't sync modification time of files + --panicOnWarning panic on first WARNING log + --poll string set this to a poll interval, e.g --poll 700ms, to use a poll based approach to watch for file system changes + -p, --port int port on which the server will listen (default 1313) + --printI18nWarnings print missing translations + --printMemoryUsage print memory usage to screen at intervals + --printPathWarnings print warnings on duplicate target paths etc. + --printUnusedTemplates print warnings on unused templates. + --renderStaticToDisk serve static files from disk and dynamic files from memory + --renderToDisk serve all files from disk (default is from memory) + --templateMetrics display metrics about template executions + --templateMetricsHints calculate some improvement hints when combined with --templateMetrics + -t, --theme strings themes to use (located in /themes/THEMENAME/) + --tlsAuto generate and use locally-trusted certificates. + --tlsCertFile string path to TLS certificate file + --tlsKeyFile string path to TLS key file + --trace file write trace to file (not useful in general) + -w, --watch watch filesystem for changes and recreate as needed (default true) +``` + +### Options inherited from parent commands + +``` + --clock string set the clock used by Hugo, e.g. --clock 2021-11-06T22:30:00.00+09:00 + --config string config file (default is hugo.yaml|json|toml) + --configDir string config dir (default "config") + --debug debug output + -d, --destination string filesystem path to write files to + -e, --environment string build environment + --ignoreVendorPaths string ignores any _vendor for module paths matching the given Glob pattern + --logLevel string log level (debug|info|warn|error) + --quiet build in quiet mode + -s, --source string filesystem path to read files relative from + --themesDir string filesystem path to themes directory + -v, --verbose verbose output +``` + +### SEE ALSO + +* [hugo](/commands/hugo/) - hugo builds your site +* [hugo server trust](/commands/hugo_server_trust/) - Install the local CA in the system trust store. + diff --git a/docs/content/en/commands/hugo_server_trust.md b/docs/content/en/commands/hugo_server_trust.md new file mode 100644 index 000000000..b789eb69a --- /dev/null +++ b/docs/content/en/commands/hugo_server_trust.md @@ -0,0 +1,41 @@ +--- +title: "hugo server trust" +slug: hugo_server_trust +url: /commands/hugo_server_trust/ +--- +## hugo server trust + +Install the local CA in the system trust store. + +``` +hugo server trust [flags] [args] +``` + +### Options + +``` + -h, --help help for trust + --uninstall Uninstall the local CA (but do not delete it). +``` + +### Options inherited from parent commands + +``` + --clock string set the clock used by Hugo, e.g. --clock 2021-11-06T22:30:00.00+09:00 + --config string config file (default is hugo.yaml|json|toml) + --configDir string config dir (default "config") + --debug debug output + -d, --destination string filesystem path to write files to + -e, --environment string build environment + --ignoreVendorPaths string ignores any _vendor for module paths matching the given Glob pattern + --logLevel string log level (debug|info|warn|error) + --quiet build in quiet mode + -s, --source string filesystem path to read files relative from + --themesDir string filesystem path to themes directory + -v, --verbose verbose output +``` + +### SEE ALSO + +* [hugo server](/commands/hugo_server/) - A high performance webserver + diff --git a/docs/content/en/commands/hugo_version.md b/docs/content/en/commands/hugo_version.md new file mode 100644 index 000000000..cf23e7fef --- /dev/null +++ b/docs/content/en/commands/hugo_version.md @@ -0,0 +1,44 @@ +--- +title: "hugo version" +slug: hugo_version +url: /commands/hugo_version/ +--- +## hugo version + +Print Hugo version and environment info + +### Synopsis + +Print Hugo version and environment info. This is useful in Hugo bug reports. + +``` +hugo version [flags] [args] +``` + +### Options + +``` + -h, --help help for version +``` + +### Options inherited from parent commands + +``` + --clock string set the clock used by Hugo, e.g. --clock 2021-11-06T22:30:00.00+09:00 + --config string config file (default is hugo.yaml|json|toml) + --configDir string config dir (default "config") + --debug debug output + -d, --destination string filesystem path to write files to + -e, --environment string build environment + --ignoreVendorPaths string ignores any _vendor for module paths matching the given Glob pattern + --logLevel string log level (debug|info|warn|error) + --quiet build in quiet mode + -s, --source string filesystem path to read files relative from + --themesDir string filesystem path to themes directory + -v, --verbose verbose output +``` + +### SEE ALSO + +* [hugo](/commands/hugo/) - hugo builds your site + diff --git a/docs/content/en/content-management/_common/_index.md b/docs/content/en/content-management/_common/_index.md new file mode 100644 index 000000000..47d5812fb --- /dev/null +++ b/docs/content/en/content-management/_common/_index.md @@ -0,0 +1,13 @@ +--- +cascade: + _build: + list: never + publishResources: false + render: never +--- + +<!-- +Files within this headless branch bundle are markdown snippets. Each file must contain front matter delimiters, though front matter fields are not required. + +Include the rendered content using the "include" shortcode. +--> diff --git a/docs/content/en/content-management/_common/page-kinds.md b/docs/content/en/content-management/_common/page-kinds.md new file mode 100644 index 000000000..07a53e8e6 --- /dev/null +++ b/docs/content/en/content-management/_common/page-kinds.md @@ -0,0 +1,17 @@ +--- +# Do not remove front matter. +--- + +| Kind | Description | Example | +|----------------|--------------------------------------------------------------------|-------------------------------------------------------------------------------| +| `home` | The landing page for the home page | `/index.html` | +| `page` | The landing page for a given page | `my-post` page (`/posts/my-post/index.html`) | +| `section` | The landing page of a given section | `posts` section (`/posts/index.html`) | +| `taxonomy` | The landing page for a taxonomy | `tags` taxonomy (`/tags/index.html`) | +| `term` | The landing page for one taxonomy's term | term `awesome` in `tags` taxonomy (`/tags/awesome/index.html`) | + +Four other page kinds unrelated to content are `robotsTXT`, `RSS`, `sitemap`, and `404`. Although primarily for internal use, you can specify the name when disabling one or more page kinds on your site. For example: + +{{< code-toggle file=hugo >}} +disableKinds = ['robotsTXT','404'] +{{< /code-toggle >}} diff --git a/docs/content/en/content-management/_index.md b/docs/content/en/content-management/_index.md new file mode 100644 index 000000000..66af24681 --- /dev/null +++ b/docs/content/en/content-management/_index.md @@ -0,0 +1,16 @@ +--- +title: Content management +linkTitle: Overview +description: Hugo makes managing large static sites easy with support for archetypes, content types, menus, cross references, summaries, and more. +categories: [] +keywords: [] +menu: + docs: + identifier: content-management-overview + parent: content-management + weight: 10 +weight: 10 +aliases: [/content/,/content/organization] +--- + +A static site generator needs to extend beyond front matter and a couple of templates to be both scalable and *manageable*. Hugo was designed with not only developers in mind, but also content managers and authors. diff --git a/docs/content/en/content-management/archetypes.md b/docs/content/en/content-management/archetypes.md new file mode 100644 index 000000000..94f038848 --- /dev/null +++ b/docs/content/en/content-management/archetypes.md @@ -0,0 +1,184 @@ +--- +title: Archetypes +description: An archetype is a template for new content. +categories: [content management] +keywords: [archetypes,generators,metadata,front matter] +menu: + docs: + parent: content-management + weight: 140 + quicklinks: +weight: 140 +toc: true +aliases: [/content/archetypes/] +--- + +## Overview + +A content file consists of [front matter] and markup. The markup is typically markdown, but Hugo also supports other [content formats]. Front matter can be TOML, YAML, or JSON. + +The `hugo new content` command creates a new file in the `content` directory, using an archetype as a template. This is the default archetype: + +{{< code-toggle file=archetypes/default.md fm=true >}} +title = '{{ replace .File.ContentBaseName `-` ` ` | title }}' +date = '{{ .Date }}' +draft = true +{{< /code-toggle >}} + +When you create new content, Hugo evaluates the [template actions] within the archetype. For example: + +```sh +hugo new content posts/my-first-post.md +``` + +With the default archetype shown above, Hugo creates this content file: + +{{< code-toggle file=content/posts/my-first-post.md fm=true >}} +title = 'My First Post' +date = '2023-08-24T11:49:46-07:00' +draft = true +{{< /code-toggle >}} + +You can create an archetype for one or more [content types]. For example, use one archetype for posts, and use the default archetype for everything else: + +```text +archetypes/ +├── default.md +└── posts.md +``` + +## Lookup order + +Hugo looks for archetypes in the `archetypes` directory in the root of your project, falling back to the `archetypes` directory in themes or installed modules. An archetype for a specific content type takes precedence over the default archetype. + +For example, with this command: + +```sh +hugo new content posts/my-first-post.md +``` + +The archetype lookup order is: + +1. archetypes/posts.md +1. archetypes/default.md +1. themes/my-theme/archetypes/posts.md +1. themes/my-theme/archetypes/default.md + +If none of these exists, Hugo uses a built-in default archetype. + +## Functions and context + +You can use any [template function] within an archetype. As shown above, the default archetype uses the [`replace`](/functions/strings/replace) function to replace hyphens with spaces when populating the title in front matter. + +Archetypes receive the following objects and values in [context]: + +- `.Date` +- `.Type` +- `.Site` (see [details](/variables/site/)) +- `.File` (see [details](/variables/file/)) + +As shown above, the default archetype passes `.File.ContentBaseName` as the argument to the `replace` function when populating the title in front matter. + +## Include content + +Although typically used as a front matter template, you can also use an archetype to populate content. + +For example, in a documentation site you might have a section (content type) for functions. Every page within this section should follow the same format: a brief description, the function signature, examples, and notes. We can pre-populate the page to remind content authors of the standard format. + +{{< code file=archetypes/functions.md >}} +--- +date: '{{ .Date }}' +draft: true +title: '{{ replace .File.ContentBaseName `-` ` ` | title }}' +--- + +A brief description of what the function does, using simple present tense in the third person singular form. For example: + +`someFunction` returns the string `s` repeated `n` times. + +## Signature + +```text +func someFunction(s string, n int) string +``` + +## Examples + +One or more practical examples, each within a fenced code block. + +## Notes + +Additional information to clarify as needed. +{{< /code >}} + +Although you can include [template actions] within the content body, remember that Hugo evaluates these once---at the time of content creation. In most cases, place template actions in a [template] where Hugo evaluates the actions every time you [build](/getting-started/glossary/#build) the site. + +## Leaf bundles + +You can also create archetypes for [leaf bundles](/getting-started/glossary/#leaf-bundle). + +For example, in a photography site you might have a section (content type) for galleries. Each gallery is leaf bundle with content and images. + +Create an archetype for galleries: + +```text +archetypes/ +├── galleries/ +│ ├── images/ +│ │ └── .gitkeep +│ └── index.md <-- same format as default.md +└── default.md +``` + +Subdirectories within an archetype must contain at least one file. Without a file, Hugo will not create the subdirectory when you create new content. The name and size of the file are irrelevant. The example above includes a `.gitkeep` file, an empty file commonly used to preserve otherwise empty directories in a Git repository. + +To create a new gallery: + +```sh +hugo new galleries/bryce-canyon +``` + +This produces: + +```text +content/ +├── galleries/ +│ └── bryce-canyon/ +│ ├── images/ +│ │ └── .gitkeep +│ └── index.md +└── _index.md +``` + +## Use alternate archetype + +Use the `--kind` command line flag to specify an alternate archetype when creating content. + +For example, let's say your site has two sections: articles and tutorials. Create an archetype for each content type: + +```text +archetypes/ +├── articles.md +├── default.md +└── tutorials.md +``` + +To create an article using the articles archetype: + +```sh +hugo new content articles/something.md +``` + +To create an article using the tutorials archetype: + +```sh +hugo new content --kind tutorials articles/something.md +``` + +[content formats]: /getting-started/glossary/#content-format +[content types]: /getting-started/glossary/#content-type +[context]: /getting-started/glossary/#context +[front matter]: /getting-started/glossary/#front-matter +[template actions]: /getting-started/glossary/#template-action +[template]: /getting-started/glossary/#template +[template function]: /getting-started/glossary/#function diff --git a/docs/content/en/content-management/build-options.md b/docs/content/en/content-management/build-options.md new file mode 100644 index 000000000..bc9d7ff49 --- /dev/null +++ b/docs/content/en/content-management/build-options.md @@ -0,0 +1,321 @@ +--- +title: Build options +description: Build options help define how Hugo must treat a given page when building the site. +categories: [content management,fundamentals] +keywords: [build,content,front matter, page resources] +menu: + docs: + parent: content-management + weight: 70 +weight: 70 +toc: true +aliases: [/content/build-options/] +--- + +Build options are stored in a reserved front matter object named `_build` with these defaults: + +{{< code-toggle file=content/example/index.md fm=true >}} +[_build] +list = 'always' +publishResources = true +render = 'always' +{{< /code-toggle >}} + + +list +: When to include the page within page collections. Specify one of: + + - `always` + : Include the page in _all_ page collections. For example, `site.RegularPages`, `.Pages`, etc. This is the default value. + + - `local` + : Include the page in _local_ page collections. For example, `.RegularPages`, `.Pages`, etc. Use this option to create fully navigable but headless content sections. + + - `never` + : Do not include the page in _any_ page collection. + +publishResources +: Applicable to [page bundles], determines whether to publish the associated [page resources]. Specify one of: + + - `true` + : Always publish resources. This is the default value. + + - `false` + : Only publish a resource when invoking its [`Permalink`], [`RelPermalink`], or [`Publish`] method within a template. + +render +: When to render the page. Specify one of: + + - `always` + : Always render the page to disk. This is the default value. + + - `link` + : Do not render the page to disk, but include it in all page collections. + + - `never` + : Never render the page to disk, and exclude it from all page collections. + +[page bundles]: content-management/page-bundles +[page resources]: /content-management/page-resources +[`Permalink`]: /methods/resource/permalink +[`RelPermalink`]: /methods/resource/relpermalink +[`Publish`]: /methods/resource/publish + +{{% note %}} +Any page, regardless of its build options, will always be available by using the [`.Page.GetPage`] or [`.Site.GetPage`] method. + +[`.Page.GetPage`]: /methods/page/getpage +[`.Site.GetPage`]: /methods/site/getpage +{{% /note %}} + +## Example -- headless page + +Create a unpublished page whose content and resources can be included in other pages. + +```text +content/ +├── headless/ +│ ├── a.jpg +│ ├── b.jpg +│ └── index.md <-- leaf bundle +└── _index.md <-- home page +``` + +Set the build options in front matter: + +{{< code-toggle file=content/headless/index.md fm=true >}} +title = 'Headless page' +[_build] + list = 'never' + publishResources = false + render = 'never' +{{< /code-toggle >}} + +To include the content and images on the home page: + +{{< code file=layouts/_default/home.html >}} +{{ with .Site.GetPage "/headless" }} + {{ .Content }} + {{ range .Resources.ByType "image" }} + <img src="{{ .RelPermalink }}" width="{{ .Width }}" height="{{ .Height }}" alt=""> + {{ end }} +{{ end }} +{{< /code >}} + +The published site will have this structure: + +```text +public/ +├── headless/ +│ ├── a.jpg +│ └── b.jpg +└── index.html +``` + +In the example above, note that: + +1. Hugo did not publish an HTML file for the page. +2. Despite setting `publishResources` to `false` in front matter, Hugo published the [page resources] because we invoked the [`RelPermalink`] method on each resource. This is the expected behavior. + +## Example -- headless section + +Create a unpublished section whose content and resources can be included in other pages. + +[branch bundle]: /content-management/page-bundles + +```text +content/ +├── headless/ +│ ├── note-1/ +│ │ ├── a.jpg +│ │ ├── b.jpg +│ │ └── index.md <-- leaf bundle +│ ├── note-2/ +│ │ ├── c.jpg +│ │ ├── d.jpg +│ │ └── index.md <-- leaf bundle +│ └── _index.md <-- branch bundle +└── _index.md <-- home page +``` + +Set the build options in front matter, using the `cascade` keyword to "cascade" the values down to descendant pages. + +{{< code-toggle file=content/headless/_index.md fm=true >}} +title = 'Headless section' +[[cascade]] +[cascade._build] + list = 'local' + publishResources = false + render = 'never' +{{< /code-toggle >}} + +In the front matter above, note that we have set `list` to `local` to include the descendant pages in local page collections. + +To include the content and images on the home page: + +{{< code file=layouts/_default/home.html >}} +{{ with .Site.GetPage "/headless" }} + {{ range .Pages }} + {{ .Content }} + {{ range .Resources.ByType "image" }} + <img src="{{ .RelPermalink }}" width="{{ .Width }}" height="{{ .Height }}" alt=""> + {{ end }} + {{ end }} +{{ end }} +{{< /code >}} + +The published site will have this structure: + +```text +public/ +├── headless/ +│ ├── note-1/ +│ │ ├── a.jpg +│ │ └── b.jpg +│ └── note-2/ +│ ├── c.jpg +│ └── d.jpg +└── index.html +``` + +In the example above, note that: + +1. Hugo did not publish an HTML file for the page. +2. Despite setting `publishResources` to `false` in front matter, Hugo correctly published the [page resources] because we invoked the [`RelPermalink`] method on each resource. This is the expected behavior. + +## Example -- list without publishing + +Publish a section page without publishing the descendant pages. For example, to create a glossary: + +```text +content/ +├── glossary/ +│ ├── _index.md +│ ├── bar.md +│ ├── baz.md +│ └── foo.md +└── _index.md +``` + +Set the build options in front matter, using the `cascade` keyword to "cascade" the values down to descendant pages. + +{{< code-toggle file=content/glossary/_index.md fm=true >}} +title = 'Glossary' +[_build] +render = 'always' +[[cascade]] +[cascade._build] + list = 'local' + publishResources = false + render = 'never' +{{< /code-toggle >}} + +To render the glossary: + +{{< code file=layouts/glossary/list.html >}} +<dl> + {{ range .Pages }} + <dt>{{ .Title }}</dt> + <dd>{{ .Content }}</dd> + {{ end }} +</dl> +{{< /code >}} + +The published site will have this structure: + +```text +public/ +├── glossary/ +│ └── index.html +└── index.html +``` + +## Example -- publish without listing + +Publish a section's descendant pages without publishing the section page itself. + +```text +content/ +├── books/ +│ ├── _index.md +│ ├── book-1.md +│ └── book-2.md +└── _index.md +``` + +Set the build options in front matter: + +{{< code-toggle file=content/books/_index.md >}} +title = 'Books' +[_build] +render = 'never' +list = 'never' +{{< /code-toggle >}} + +The published site will have this structure: + +```html +public/ +├── books/ +│ ├── book-1/ +│ │ └── index.html +│ └── book-2/ +│ └── index.html +└── index.html +``` + +## Example -- conditionally hide section + +Consider this example. A documentation site has a team of contributors with access to 20 custom shortcodes. Each shortcode takes several arguments, and requires documentation for the contributors to reference when using them. + +Instead of external documentation for the shortcodes, include an "internal" section that is hidden when building the production site. + +```text +content/ +├── internal/ +│ ├── shortcodes/ +│ │ ├── _index.md +│ │ ├── shortcode-1.md +│ │ └── shortcode-2.md +│ └── _index.md +├── reference/ +│ ├── _index.md +│ ├── reference-1.md +│ └── reference-2.md +├── tutorials/ +│ ├── _index.md +│ ├── tutorial-1.md +│ └── tutorial-2.md +└── _index.md +``` + +Set the build options in front matter, using the `cascade` keyword to "cascade" the values down to descendant pages, and use the `target` keyword to target the production environment. + +{{< code-toggle file=content/internal/_index.md >}} +title = 'Internal' +[[cascade]] +[cascade._build] +render = 'never' +list = 'never' +[cascade._target] +environment = 'production' +{{< /code-toggle >}} + +The production site will have this structure: + +```html +public/ +├── reference/ +│ ├── reference-1/ +│ │ └── index.html +│ ├── reference-2/ +│ │ └── index.html +│ └── index.html +├── tutorials/ +│ ├── tutorial-1/ +│ │ └── index.html +│ ├── tutorial-2/ +│ │ └── index.html +│ └── index.html +└── index.html +``` diff --git a/docs/content/en/content-management/comments.md b/docs/content/en/content-management/comments.md new file mode 100644 index 000000000..6e58b36e4 --- /dev/null +++ b/docs/content/en/content-management/comments.md @@ -0,0 +1,74 @@ +--- +title: 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. +categories: [content management] +keywords: [sections,content,organization] +menu: + docs: + parent: content-management + weight: 220 +weight: 220 +toc: true +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 file=hugo >}} +[services.disqus] +shortname = 'your-disqus-shortname' +{{</ 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](/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) +* [Comentario](https://gitlab.com/comentario/comentario) (Open Source, self-hosted, Go/Angular, run locally, in Docker or Kubernetes) +* [Commento](https://commento.io/) (Open Source, available as a service, local install, or docker image) +* [Giscus](https://giscus.app/) (Open source, comments system powered by GitHub Discussions) +* [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 diff --git a/docs/content/en/content-management/cross-references.md b/docs/content/en/content-management/cross-references.md new file mode 100644 index 000000000..500e388a4 --- /dev/null +++ b/docs/content/en/content-management/cross-references.md @@ -0,0 +1,150 @@ +--- +title: Links and cross references +description: Shortcodes for creating links to documents. +categories: [content management] +keywords: [cross references,references,anchors,urls] +menu: + docs: + parent: content-management + weight: 170 +weight: 170 +toc: true +aliases: [/extras/crossreferences/] +--- + +The `ref` and `relref` shortcodes display the absolute and relative permalinks to a document, respectively. + +## Use of `ref` and `relref` + +The `ref` and `relref` shortcodes require a single parameter: the path to a content document, with or without a file extension, with or without an anchor. Paths without a leading `/` are first resolved relative to the current page, then to the remainder of the site. + +```text +. +└── content + ├── about + | ├── _index.md + | └── credits.md + ├── pages + | ├── document1.md + | └── document2.md // has anchor #anchor + ├── products + | └── index.md + └── blog + └── my-post.md +``` + +The pages can be referenced as follows: + +```text +{{</* ref "document2" */>}} // <- From pages/document1.md, relative path +{{</* ref "document2#anchor" */>}} +{{</* ref "document2.md" */>}} +{{</* ref "document2.md#anchor" */>}} +{{</* ref "#anchor" */>}} // <- From pages/document2.md +{{</* ref "/blog/my-post" */>}} // <- From anywhere, absolute path +{{</* ref "/blog/my-post.md" */>}} +{{</* relref "document" */>}} +{{</* relref "document.md" */>}} +{{</* relref "#anchor" */>}} +{{</* relref "/blog/my-post.md" */>}} +``` + +index.md can be reference either by its path or by its containing folder without the ending `/`. \_index.md can be referenced only by its containing folder: + +```text +{{</* ref "/about" */>}} // <- References /about/_index.md +{{</* ref "/about/_index" */>}} // Raises REF_NOT_FOUND error +{{</* ref "/about/credits.md" */>}} // <- References /about/credits.md + +{{</* ref "/products" */>}} // <- References /products/index.md +{{</* ref "/products/index" */>}} // <- References /products/index.md +``` + +To generate a hyperlink using `ref` or `relref` in markdown: + +```text +[About]({{</* ref "/about" */>}} "About Us") +``` + +Hugo emits an error or warning if a document cannot be uniquely resolved. The error behavior is configurable; see below. + +### Link to another language version + +To link to another language version of a document, use this syntax: + +```go-html-template +{{</* relref path="document.md" lang="ja" */>}} +``` + +### Get another output format + +To link to another Output Format of a document, use this syntax: + +```go-html-template +{{</* relref path="document.md" outputFormat="rss" */>}} +``` + +### Heading IDs + +When using Markdown document types, Hugo generates element IDs for every heading on a page. For example: + +```md +## Reference +``` + +produces this HTML: + +```html +<h2 id="reference">Reference</h2> +``` + +Get the permalink to a heading by appending the ID to the path when using the `ref` or `relref` shortcodes: + +```go-html-template +{{</* ref "document.md#reference" */>}} +{{</* relref "document.md#reference" */>}} +``` + +Generate a custom heading ID by including an attribute. For example: + +```md +## Reference A {#foo} +## Reference B {id="bar"} +``` + +produces this HTML: + +```html +<h2 id="foo">Reference A</h2> +<h2 id="bar">Reference B</h2> +``` + +Hugo will generate unique element IDs if the same heading appears more than once on a page. For example: + +```md +## Reference +## Reference +## Reference +``` + +produces this HTML: + +```html +<h2 id="reference">Reference</h2> +<h2 id="reference-1">Reference</h2> +<h2 id="reference-2">Reference</h2> +``` + +## Ref and RelRef Configuration + +The behavior can be configured in `hugo.toml`: + +refLinksErrorLevel ("ERROR") +: When using `ref` or `relref` to resolve page links and a link cannot 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. + +[lists]: /templates/lists/ +[output formats]: /templates/output-formats/ +[shortcode]: /content-management/shortcodes/ diff --git a/docs/content/en/content-management/diagrams.md b/docs/content/en/content-management/diagrams.md new file mode 100644 index 000000000..17407098f --- /dev/null +++ b/docs/content/en/content-management/diagrams.md @@ -0,0 +1,263 @@ +--- +title: Diagrams +description: Use fenced code blocks and markdown render hooks to display diagrams. +categories: [content management] +keywords: [diagrams,drawing] +menu: + docs: + parent: content-management + weight: 50 +weight: 50 +toc: true +--- +{{< new-in 0.93.0 >}} + +## GoAT diagrams (ASCII) + +Hugo supports [GoAT](https://github.com/bep/goat) natively. This means that this code block: + +````txt +```goat + . . . .--- 1 .-- 1 / 1 + / \ | | .---+ .-+ + + / \ .---+---. .--+--. | '--- 2 | '-- 2 / \ 2 + + + | | | | ---+ ---+ + + / \ / \ .-+-. .-+-. .+. .+. | .--- 3 | .-- 3 \ / 3 + / \ / \ | | | | | | | | '---+ '-+ + + 1 2 3 4 1 2 3 4 1 2 3 4 '--- 4 '-- 4 \ 4 + +``` +```` + +Will be rendered as: + +```goat + + . . . .--- 1 .-- 1 / 1 + / \ | | .---+ .-+ + + / \ .---+---. .--+--. | '--- 2 | '-- 2 / \ 2 + + + | | | | ---+ ---+ + + / \ / \ .-+-. .-+-. .+. .+. | .--- 3 | .-- 3 \ / 3 + / \ / \ | | | | | | | | '---+ '-+ + + 1 2 3 4 1 2 3 4 1 2 3 4 '--- 4 '-- 4 \ 4 +``` + +## Mermaid diagrams + +Hugo currently does not provide default templates for Mermaid diagrams. But you can easily add your own. One way to do it would be to create `layouts/_default/_markup/render-codeblock-mermaid.html`: + +```go-html-template +<pre class="mermaid"> + {{- .Inner | safeHTML }} +</pre> +{{ .Page.Store.Set "hasMermaid" true }} +``` + +And then include this snippet at the bottom of the content template (**Note**: below `.Content` as the render hook is not processed until `.Content` is executed): + +```go-html-template +{{ if .Page.Store.Get "hasMermaid" }} + <script type="module"> + import mermaid from 'https://cdn.jsdelivr.net/npm/mermaid/dist/mermaid.esm.min.mjs'; + mermaid.initialize({ startOnLoad: true }); + </script> +{{ end }} +``` + +With that you can use the `mermaid` language in Markdown code blocks: + +````text +```mermaid +sequenceDiagram + participant Alice + participant Bob + Alice->>John: Hello John, how are you? + loop Healthcheck + John->>John: Fight against hypochondria + end + Note right of John: Rational thoughts <br/>prevail! + John-->>Alice: Great! + John->>Bob: How about you? + Bob-->>John: Jolly good! +``` +```` + +## Goat ASCII diagram examples + +### Graphics + +```goat + . + 0 3 P * Eye / ^ / + *-------* +y \ +) \ / Reflection + 1 /| 2 /| ^ \ \ \ v + *-------* | | v0 \ v3 --------*-------- + | |4 | |7 | *----\-----* + | *-----|-* +-----> +x / v X \ .-.<-------- o + |/ |/ / / o \ | / | Refraction / \ + *-------* v / \ +-' / \ + 5 6 +z v1 *------------------* v2 | o-----o + v + +``` + +### Complex + +```goat ++-------------------+ ^ .---. +| A Box |__.--.__ __.--> | .-. | | +| | '--' v | * |<--- | | ++-------------------+ '-' | | + Round *---(-. | + .-----------------. .-------. .----------. .-------. | | | + | Mixed Rounded | | | / Diagonals \ | | | | | | + | & Square Corners | '--. .--' / \ |---+---| '-)-' .--------. + '--+------------+-' .--. | '-------+--------' | | | | / Search / + | | | | '---. | '-------' | '-+------' + |<---------->| | | | v Interior | ^ + ' <---' '----' .-----------. ---. .--- v | + .------------------. Diag line | .-------. +---. \ / . | + | if (a > b) +---. .--->| | | | | Curved line \ / / \ | + | obj->fcn() | \ / | '-------' |<--' + / \ | + '------------------' '--' '--+--------' .--. .--. | .-. +Done?+-' + .---+-----. | ^ |\ | | /| .--+ | | \ / + | | | Join \|/ | | Curved | \| |/ | | \ | \ / + | | +----> o --o-- '-' Vertical '--' '--' '-- '--' + .---. + <--+---+-----' | /|\ | | 3 | + v not:line 'quotes' .-' '---' + .-. .---+--------. / A || B *bold* | ^ + | | | Not a dot | <---+---<-- A dash--is not a line v | + '-' '---------+--' / Nor/is this. --- + +``` + +### Process + +```goat + . + .---------. / \ + | START | / \ .-+-------+-. ___________ + '----+----' .-------. A / \ B | |COMPLEX| | / \ .-. + | | END |<-----+CHOICE +----->| | | +--->+ PREPARATION +--->| X | + v '-------' \ / | |PROCESS| | \___________/ '-' + .---------. \ / '-+---+---+-' + / INPUT / \ / + '-----+---' ' + | ^ + v | + .-----------. .-----+-----. .-. + | PROCESS +---------------->| PROCESS |<------+ X | + '-----------' '-----------' '-' +``` + +### File tree + +Created from <https://arthursonzogni.com/Diagon/#Tree> + +```goat { width=300 color="orange" } +───Linux─┬─Android + ├─Debian─┬─Ubuntu─┬─Lubuntu + │ │ ├─Kubuntu + │ │ ├─Xubuntu + │ │ └─Xubuntu + │ └─Mint + ├─Centos + └─Fedora +``` + +### Sequence diagram + +<https://arthursonzogni.com/Diagon/#Sequence> + +```goat { class="w-40" } +┌─────┐ ┌───┐ +│Alice│ │Bob│ +└──┬──┘ └─┬─┘ + │ │ + │ Hello Bob! │ + │───────────>│ + │ │ + │Hello Alice!│ + │<───────────│ +┌──┴──┐ ┌─┴─┐ +│Alice│ │Bob│ +└─────┘ └───┘ + +``` + +### Flowchart + +<https://arthursonzogni.com/Diagon/#Flowchart> + +```goat + _________________ + ╱ ╲ ┌─────┐ + ╱ DO YOU UNDERSTAND ╲____________________________________________________│GOOD!│ + ╲ FLOW CHARTS? ╱yes └──┬──┘ + ╲_________________╱ │ + │no │ + _________▽_________ ______________________ │ + ╱ ╲ ╱ ╲ ┌────┐ │ +╱ OKAY, YOU SEE THE ╲________________╱ ... AND YOU CAN SEE ╲___│GOOD│ │ +╲ LINE LABELED 'YES'? ╱yes ╲ THE ONES LABELED 'NO'? ╱yes└──┬─┘ │ + ╲___________________╱ ╲______________________╱ │ │ + │no │no │ │ + ________▽_________ _________▽__________ │ │ + ╱ ╲ ┌───────────┐ ╱ ╲ │ │ + ╱ BUT YOU SEE THE ╲___│WAIT, WHAT?│ ╱ BUT YOU JUST ╲___ │ │ + ╲ ONES LABELED 'NO'? ╱yes└───────────┘ ╲ FOLLOWED THEM TWICE? ╱yes│ │ │ + ╲__________________╱ ╲____________________╱ │ │ │ + │no │no │ │ │ + ┌───▽───┐ │ │ │ │ + │LISTEN.│ └───────┬───────┘ │ │ + └───┬───┘ ┌──────▽─────┐ │ │ + ┌─────▽────┐ │(THAT WASN'T│ │ │ + │I HATE YOU│ │A QUESTION) │ │ │ + └──────────┘ └──────┬─────┘ │ │ + ┌────▽───┐ │ │ + │SCREW IT│ │ │ + └────┬───┘ │ │ + └─────┬─────┘ │ + │ │ + └─────┬─────┘ + ┌───────▽──────┐ + │LET'S GO DRING│ + └───────┬──────┘ + ┌─────────▽─────────┐ + │HEY, I SHOULD TRY │ + │INSTALLING FREEBSD!│ + └───────────────────┘ + +``` + +### Table + +<https://arthursonzogni.com/Diagon/#Table> + +```goat { class="w-80 dark-blue" } +┌────────────────────────────────────────────────┐ +│ │ +├────────────────────────────────────────────────┤ +│SYNTAX = { PRODUCTION } . │ +├────────────────────────────────────────────────┤ +│PRODUCTION = IDENTIFIER "=" EXPRESSION "." . │ +├────────────────────────────────────────────────┤ +│EXPRESSION = TERM { "|" TERM } . │ +├────────────────────────────────────────────────┤ +│TERM = FACTOR { FACTOR } . │ +├────────────────────────────────────────────────┤ +│FACTOR = IDENTIFIER │ +├────────────────────────────────────────────────┤ +│ | LITERAL │ +├────────────────────────────────────────────────┤ +│ | "[" EXPRESSION "]" │ +├────────────────────────────────────────────────┤ +│ | "(" EXPRESSION ")" │ +├────────────────────────────────────────────────┤ +│ | "{" EXPRESSION "}" . │ +├────────────────────────────────────────────────┤ +│IDENTIFIER = letter { letter } . │ +├────────────────────────────────────────────────┤ +│LITERAL = """" character { character } """" .│ +└────────────────────────────────────────────────┘ +``` diff --git a/docs/content/en/content-management/formats.md b/docs/content/en/content-management/formats.md new file mode 100644 index 000000000..76c8102b5 --- /dev/null +++ b/docs/content/en/content-management/formats.md @@ -0,0 +1,93 @@ +--- +title: Content formats +description: Both HTML and Markdown are supported content formats. +categories: [content management] +keywords: [markdown,asciidoc,pandoc,content format] +menu: + docs: + parent: content-management + weight: 40 +weight: 40 +toc: true +aliases: [/content/markdown-extras/,/content/supported-formats/,/doc/supported-formats/] +--- + +You can put any file type into your `/content` directories, but Hugo uses the `markup` front matter value if set or the file extension (see `Markup identifiers` in the table below) to determine if the markup needs to be processed, e.g.: + +* Markdown converted to HTML +* [Shortcodes](/content-management/shortcodes/) processed +* Layout applied + +## List of content formats + +The current list of content formats in Hugo: + +| Name | Markup identifiers | Comment | +| ------------- | ------------- |-------------| +| Goldmark | `markdown`, `goldmark` |Note that you can set the default handler of `md` and `markdown` to something else, see [Configure Markup](/getting-started/configuration-markup/).| +|Emacs Org-Mode|`org`|See [go-org](https://github.com/niklasfasching/go-org).| +|AsciiDoc|`asciidocext`, `adoc`, `ad`|Needs [Asciidoctor][ascii] installed.| +|RST|`rst`|Needs [RST](https://docutils.sourceforge.io/rst.html) installed.| +|Pandoc|`pandoc`, `pdc`|Needs [Pandoc](https://www.pandoc.org/) installed.| +|HTML|`html`, `htm`|To be treated as a content file, with layout, shortcodes etc., it must have front matter. If not, it will be copied as-is.| + +The `markup identifier` is fetched from either the `markup` variable in front matter or from the file extension. For markup-related configuration, see [Configure Markup](/getting-started/configuration-markup/). + +## External helpers + +Some of the formats in the table above need external helpers installed on your PC. For example, for AsciiDoc files, +Hugo will try to call the `asciidoctor` command. This means that you will have to install the associated +tool on your machine to be able to use these formats. + +Hugo passes reasonable default arguments to these external helpers by default: + +- `asciidoctor`: `--no-header-footer -` +- `rst2html`: `--leave-comments --initial-header-level=2` +- `pandoc`: `--mathjax` + +{{% note %}} +Because additional formats are external commands, generation performance will rely heavily on the performance of the external tool you are using. As this feature is still in its infancy, feedback is welcome. +{{% /note %}} + +### Asciidoctor + +The Asciidoctor community offers a wide set of tools for the AsciiDoc format that can be installed additionally to Hugo. +[See the Asciidoctor docs for installation instructions](https://asciidoctor.org/docs/install-toolchain/). Make sure that also all +optional extensions like `asciidoctor-diagram` or `asciidoctor-html5s` are installed if required. + +{{% note %}} +External `asciidoctor` command requires Hugo rendering to _disk_ to a specific destination directory. It is required to run Hugo with the command option `--destination`. +{{% /note %}} + +Some Asciidoctor parameters can be customized in Hugo. See [details]. + +[details]: /getting-started/configuration-markup/#asciidoc + +## Learn markdown + +Markdown syntax is simple enough to learn in a single sitting. The following are excellent resources to get you up and running: + +* [Daring Fireball: Markdown, John Gruber (Creator of Markdown)][fireball] +* [Markdown Cheatsheet, Adam Pritchard][mdcheatsheet] +* [Markdown Tutorial (Interactive), Garen Torikian][mdtutorial] +* [The Markdown Guide, Matt Cone][mdguide] + +[ascii]: https://asciidoctor.org/ +[config]: /getting-started/configuration/ +[developer tools]: /tools/ +[fireball]: https://daringfireball.net/projects/markdown/ +[gfmtasks]: https://guides.github.com/features/mastering-markdown/#syntax +[helperssource]: https://github.com/gohugoio/hugo/blob/77c60a3440806067109347d04eb5368b65ea0fe8/helpers/general.go#L65 +[hl]: /content-management/syntax-highlighting/ +[hlsc]: /content-management/shortcodes/#highlight +[hugocss]: /css/style.css +[ietf]: https://tools.ietf.org/html/ +[mathjaxdocs]: https://docs.mathjax.org/en/latest/ +[mdcheatsheet]: https://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet +[mdguide]: https://www.markdownguide.org/ +[mdtutorial]: https://www.markdowntutorial.com/ +[org]: https://orgmode.org/ +[pandoc]: https://www.pandoc.org/ +[rest]: https://docutils.sourceforge.io/rst.html +[sc]: /content-management/shortcodes/ +[sct]: /templates/shortcode-templates/ diff --git a/docs/content/en/content-management/front-matter.md b/docs/content/en/content-management/front-matter.md new file mode 100644 index 000000000..7593fb759 --- /dev/null +++ b/docs/content/en/content-management/front-matter.md @@ -0,0 +1,244 @@ +--- +title: Front matter +description: Hugo allows you to add front matter in yaml, toml, or json to your content files. +categories: [content management] +keywords: [front matter,yaml,toml,json,metadata,archetypes] +menu: + docs: + parent: content-management + weight: 60 +weight: 60 +toc: true +aliases: [/content/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. + Array values can either be separated into multiple lines (`#+KEY: VALUE_1` and `#+KEY: VALUE_2`) 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`. + +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 +: Overrides the last segment of the URL path. Not applicable to section pages. See [URL Management](/content-management/urls/#slug) for details. + +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 type of the content; this value will be automatically derived from the directory (i.e., the [section]) if not specified in front matter. + +url +: Overrides the entire URL path. Applicable to regular pages and section pages. See [URL Management](/content-management/urls/#url) for details. + +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 %}} +If neither `slug` nor `url` is present and [permalinks are not configured otherwise in your site configuration file](/content-management/urls/#permalinks), Hugo will use the file name 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 >}} +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 >}} +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. + +{{% note %}} +When making a site that supports multiple languages, defining a `[[cascade]]` is recommended to be done in [Site Config](../../getting-started/configuration/#cascade) to prevent duplication. + +If you instea define a `[[cascade]]` in front matter for multiple languages, an `content/XX/foo/_index.md` file needs to be made on a per-language basis, with `XX` the glob pattern matching the Page's language. In this case, the **lang** keyword is ignored. +{{% /note %}} + +### Example + +In `content/blog/_index.md` + +{{< code-toggle >}} +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/ +[config]: /getting-started/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 +[lists]: /templates/lists/#sort-content +[lookup]: /templates/lookup-order/ +[ordering]: /templates/lists/ +[outputs]: /templates/output-formats/ +[page-resources]: /content-management/page-resources/ +[pagevars]: /variables/page/ +[section]: /content-management/sections/ +[taxweight]: /content-management/taxonomies/ +[toml]: https://toml.io/ +[urls]: /content-management/urls/ +[variables]: /variables/ +[yaml]: https://yaml.org/spec/ diff --git a/docs/content/en/content-management/image-processing/index.md b/docs/content/en/content-management/image-processing/index.md new file mode 100644 index 000000000..9a4f55da1 --- /dev/null +++ b/docs/content/en/content-management/image-processing/index.md @@ -0,0 +1,521 @@ +--- +title: Image processing +description: Resize, crop, rotate, filter, and convert images. +categories: [content management,fundamentals] +keywords: [resources,images] +menu: + docs: + parent: content-management + weight: 90 +toc: true +weight: 90 +--- + +## Image resources + +To process an image you must access the file as a page resource, global resource, or remote resource. + +### Page resource + +A page resource is a file within a [page bundle]. A page bundle is a directory with an `index.md` or `_index.md` file at its root. + +```text +content/ +└── posts/ + └── post-1/ <-- page bundle + ├── index.md + └── sunset.jpg <-- page resource +``` + +To access an image as a page resource: + +```go-html-template +{{ $image := .Resources.Get "sunset.jpg" }} +``` + +### Global resource + +A global resource is a file within the `assets` directory, or within any directory [mounted] to the `assets` directory. + +```text +assets/ +└── images/ + └── sunset.jpg <-- global resource +``` + +To access an image as a global resource: + +```go-html-template +{{ $image := resources.Get "images/sunset.jpg" }} +``` + +### Remote resource + +A remote resource is a file on a remote server, accessible via HTTP or HTTPS. To access an image as a remote resource: + +```go-html-template +{{ $image := resources.GetRemote "https://gohugo.io/img/hugo-logo.png" }} +``` + +## Image rendering + +Once you have accessed an image as either a page resource or a global resource, render it in your templates using the `Permalink`, `RelPermalink`, `Width`, and `Height` properties. + +Example 1: Throws an error if the resource is not found. + +```go-html-template +{{ $image := .Resources.GetMatch "sunset.jpg" }} +<img src="{{ $image.RelPermalink }}" width="{{ $image.Width }}" height="{{ $image.Height }}"> +``` + +Example 2: Skips image rendering if the resource is not found. + +```go-html-template +{{ $image := .Resources.GetMatch "sunset.jpg" }} +{{ with $image }} + <img src="{{ .RelPermalink }}" width="{{ .Width }}" height="{{ .Height }}"> +{{ end }} +``` + +Example 3: A more concise way to skip image rendering if the resource is not found. + +```go-html-template +{{ with .Resources.GetMatch "sunset.jpg" }} + <img src="{{ .RelPermalink }}" width="{{ .Width }}" height="{{ .Height }}"> +{{ end }} +``` + +Example 4: Skips rendering if there's problem accessing a remote resource. + +```go-html-template +{{ $u := "https://gohugo.io/img/hugo-logo.png" }} +{{ with resources.GetRemote $u }} + {{ with .Err }} + {{ errorf "%s" . }} + {{ else }} + <img src="{{ .RelPermalink }}" width="{{ .Width }}" height="{{ .Height }}"> + {{ end }} +{{ else }} + {{ errorf "Unable to get remote resource %q" $u }} +{{ end }} +``` + +## Image processing methods + +The `image` resource implements the [`Process`], [`Resize`], [`Fit`], [`Fill`], [`Crop`], [`Filter`], [`Colors`] and [`Exif`] methods. + +{{% note %}} +Metadata (EXIF, IPTC, XMP, etc.) is not preserved during image transformation. Use the `Exif` method with the _original_ image to extract EXIF metadata from JPEG or TIFF images. +{{% /note %}} + +### Process + +{{< new-in 0.119.0 >}} + +{{% note %}} +The `Process` method is also available as a filter, which is more effective if you need to apply multiple filters to an image. See [Process filter](/functions/images/process). +{{% /note %}} + +Process processes the image with the given specification. The specification can contain an optional action, one of `resize`, `crop`, `fit` or `fill`. This means that you can use this method instead of [`Resize`], [`Fit`], [`Fill`], or [`Crop`]. + +See [Options](#image-processing-options) for available options. + +You can also use this method apply image processing that does not need any scaling, e.g. format conversions: + +```go-html-template +{{/* Convert the image from JPG to PNG. */}} +{{ $png := $jpg.Process "png" }} +``` + +Some more examples: + +```go-html-template +{{/* Rotate the image 90 degrees counter-clockwise. */}} +{{ $image := $image.Process "r90" }} + +{{/* Scaling actions. */}} +{{ $image := $image.Process "resize 600x" }} +{{ $image := $image.Process "crop 600x400" }} +{{ $image := $image.Process "fit 600x400" }} +{{ $image := $image.Process "fill 600x400" }} +``` + +### Resize + +Resize an image to the given width and/or height. + +If you specify both width and height, the resulting image will be disproportionally scaled unless the original image has the same aspect ratio. + +```go-html-template +{{/* Resize to a width of 600px and preserve aspect ratio */}} +{{ $image := $image.Resize "600x" }} + +{{/* Resize to a height of 400px and preserve aspect ratio */}} +{{ $image := $image.Resize "x400" }} + +{{/* Resize to a width of 600px and a height of 400px */}} +{{ $image := $image.Resize "600x400" }} +``` + +### Fit + +Downscale an image to fit the given dimensions while maintaining aspect ratio. You must provide both width and height. + +```go-html-template +{{ $image := $image.Fit "600x400" }} +``` + +### Fill + +Crop and resize an image to match the given dimensions. You must provide both width and height. Use the [`anchor`] option to change the crop box anchor point. + +```go-html-template +{{ $image := $image.Fill "600x400" }} +``` + +### Crop + +Crop an image to match the given dimensions without resizing. You must provide both width and height. Use the [`anchor`] option to change the crop box anchor point. + +```go-html-template +{{ $image := $image.Crop "600x400" }} +``` + +### Filter + +Apply one or more [filters] to an image. + +```go-html-template +{{ $image := $image.Filter (images.GaussianBlur 6) (images.Pixelate 8) }} +``` + +Write this in a more functional style using pipes. Hugo applies the filters in the order given. + +```go-html-template +{{ $image := $image | images.Filter (images.GaussianBlur 6) (images.Pixelate 8) }} +``` + +Sometimes it can be useful to create the filter chain once and then reuse it. + +```go-html-template +{{ $filters := slice (images.GaussianBlur 6) (images.Pixelate 8) }} +{{ $image1 := $image1.Filter $filters }} +{{ $image2 := $image2.Filter $filters }} +``` + +### Colors + +{{< new-in 0.104.0 >}} + +`.Colors` returns a slice of hex strings with the dominant colors in the image using a simple histogram method. + +```go-html-template +{{ $colors := $image.Colors }} +``` + +This method is fast, but if you also scale down your images, it would be good for performance to extract the colors from the scaled down image. + +### EXIF + +Provides an [EXIF] object containing image metadata. + +You may access EXIF data in JPEG and TIFF images. To prevent errors when processing images without EXIF data, wrap the access in a [`with`] statement. + +```go-html-template +{{ with $image.Exif }} + Date: {{ .Date }} + Lat/Long: {{ .Lat }}/{{ .Long }} + Tags: + {{ range $k, $v := .Tags }} + TAG: {{ $k }}: {{ $v }} + {{ end }} +{{ end }} +``` + +You may also access EXIF fields individually, using the [`lang.FormatNumber`] function to format the fields as needed. + +```go-html-template +{{ with $image.Exif }} + <ul> + {{ with .Date }}<li>Date: {{ .Format "January 02, 2006" }}</li>{{ end }} + {{ with .Tags.ApertureValue }}<li>Aperture: {{ lang.FormatNumber 2 . }}</li>{{ end }} + {{ with .Tags.BrightnessValue }}<li>Brightness: {{ lang.FormatNumber 2 . }}</li>{{ end }} + {{ with .Tags.ExposureTime }}<li>Exposure Time: {{ . }}</li>{{ end }} + {{ with .Tags.FNumber }}<li>F Number: {{ . }}</li>{{ end }} + {{ with .Tags.FocalLength }}<li>Focal Length: {{ . }}</li>{{ end }} + {{ with .Tags.ISOSpeedRatings }}<li>ISO Speed Ratings: {{ . }}</li>{{ end }} + {{ with .Tags.LensModel }}<li>Lens Model: {{ . }}</li>{{ end }} + </ul> +{{ end }} +``` + +#### EXIF variables + +.Date +: Image creation date/time. Format with the [time.Format] function. + +.Lat +: GPS latitude in degrees. + +.Long +: GPS longitude in degrees. + +.Tags +: A collection of the available EXIF tags for this image. You may include or exclude specific tags from this collection in the [site configuration](#exif-data). + +## Image processing options + +The [`Resize`], [`Fit`], [`Fill`], and [`Crop`] methods accept a space-delimited, case-insensitive list of options. The order of the options within the list is irrelevant. + +### Dimensions + +With the [`Resize`] method you must specify width, height, or both. The [`Fit`], [`Fill`], and [`Crop`] methods require both width and height. All dimensions are in pixels. + +```go-html-template +{{ $image := $image.Resize "600x" }} +{{ $image := $image.Resize "x400" }} +{{ $image := $image.Resize "600x400" }} +{{ $image := $image.Fit "600x400" }} +{{ $image := $image.Fill "600x400" }} +{{ $image := $image.Crop "600x400" }} +``` + +### Rotation + +Rotates an image counter-clockwise by the given angle. Hugo performs rotation _before_ scaling. For example, if the original image is 600x400 and you wish to rotate the image 90 degrees counter-clockwise while scaling it by 50%: + +```go-html-template +{{ $image = $image.Resize "200x r90" }} +``` + +In the example above, the width represents the desired width _after_ rotation. + +To rotate an image without scaling, use the dimensions of the original image: + +```go-html-template +{{ with .Resources.GetMatch "sunset.jpg" }} + {{ with .Resize (printf "%dx%d r90" .Height .Width) }} + <img src="{{ .RelPermalink }}" width="{{ .Width }}" height="{{ .Height }}"> + {{ end }} +{{ end }} +``` + +In the example above, on the second line, we have reversed width and height to reflect the desired dimensions _after_ rotation. + +### Anchor + +When using the [`Crop`] or [`Fill`] method, the _anchor_ determines the placement of the crop box. You may specify `TopLeft`, `Top`, `TopRight`, `Left`, `Center`, `Right`, `BottomLeft`, `Bottom`, `BottomRight`, or `Smart`. + +The default value is `Smart`, which uses [Smartcrop] image analysis to determine the optimal placement of the crop box. You may override the default value in the [site configuration]. + +For example, if you have a 400x200 image with a bird in the upper left quadrant, you can create a 200x100 thumbnail containing the bird: + +```go-html-template +{{ $image.Crop "200x100 TopLeft" }} +``` + +If you apply [rotation](#rotation) when using the [`Crop`] or [`Fill`] method, specify the anchor relative to the rotated image. + +### Target format + +By default, Hugo encodes the image in the source format. You may convert the image to another format by specifying `bmp`, `gif`, `jpeg`, `jpg`, `png`, `tif`, `tiff`, or `webp`. + +```go-html-template +{{ $image.Resize "600x webp" }} +``` + +To convert an image without scaling, use the dimensions of the original image: + +```go-html-template +{{ with .Resources.GetMatch "sunset.jpg" }} + {{ with .Resize (printf "%dx%d webp" .Width .Height) }} + <img src="{{ .RelPermalink }}" width="{{ .Width }}" height="{{ .Height }}"> + {{ end }} +{{ end }} +``` + +### Quality + +Applicable to JPEG and WebP images, the `q` value determines the quality of the converted image. Higher values produce better quality images, while lower values produce smaller files. Set this value to a whole number between 1 and 100, inclusive. + +The default value is 75. You may override the default value in the [site configuration]. + +```go-html-template +{{ $image.Resize "600x webp q50" }} +``` + +### Hint + +Applicable to WebP images, this option corresponds to a set of predefined encoding parameters, and is equivalent to the `-preset` flag for the [`cwebp`] encoder. + +[`cwebp`]: https://developers.google.com/speed/webp/docs/cwebp + +Value|Example +:--|:-- +`drawing`|Hand or line drawing with high-contrast details +`icon`|Small colorful image +`photo`|Outdoor photograph with natural lighting +`picture`|Indoor photograph such as a portrait +`text`|Image that is primarily text + +The default value is `photo`. You may override the default value in the [site configuration]. + +```go-html-template +{{ $image.Resize "600x webp picture" }} +``` + +### Background color + +When converting an image from a format that supports transparency (e.g., PNG) to a format that does _not_ support transparency (e.g., JPEG), you may specify the background color of the resulting image. + +Use either a 3-digit or 6-digit hexadecimal color code (e.g., `#00f` or `#0000ff`). + +The default value is `#ffffff` (white). You may override the default value in the [site configuration]. + +```go-html-template +{{ $image.Resize "600x jpg #b31280" }} +``` + +### Resampling filter + +You may specify the resampling filter used when resizing an image. Commonly used resampling filters include: + +Filter|Description +:--|:-- +`Box`|Simple and fast averaging filter appropriate for downscaling +`Lanczos`|High-quality resampling filter for photographic images yielding sharp results +`CatmullRom`|Sharp cubic filter that is faster than the Lanczos filter while providing similar results +`MitchellNetravali`|Cubic filter that produces smoother results with less ringing artifacts than CatmullRom +`Linear`|Bilinear resampling filter, produces smooth output, faster than cubic filters +`NearestNeighbor`|Fastest resampling filter, no antialiasing + +The default value is `Box`. You may override the default value in the [site configuration]. + +```go-html-template +{{ $image.Resize "600x400 Lanczos" }} +``` + +See [github.com/disintegration/imaging] for the complete list of resampling filters. If you wish to improve image quality at the expense of performance, you may wish to experiment with the alternative filters. + +## Image processing examples + +_The photo of the sunset used in the examples below is Copyright [Bjørn Erik Pedersen](https://commons.wikimedia.org/wiki/User:Bep) (Creative Commons Attribution-Share Alike 4.0 International license)_ + +{{< imgproc "sunset.jpg" "resize 300x" />}} + +{{< imgproc "sunset.jpg" "fill 90x120 left" />}} + +{{< imgproc "sunset.jpg" "fill 90x120 right" />}} + +{{< imgproc "sunset.jpg" "fit 90x90" />}} + +{{< imgproc "sunset.jpg" "crop 250x250 center" />}} + +{{< imgproc "sunset.jpg" "resize 300x q10" />}} + +This is the shortcode used to generate the examples above: + +{{< readfile file=layouts/shortcodes/imgproc.html highlight=go-html-template >}} + +Call the shortcode from your Markdown like this: + +```go-html-template +{{</* imgproc "sunset.jpg" "resize 300x" /*/>}} +``` + +{{% note %}} +Note the self-closing shortcode syntax above. You may call the `imgproc` shortcode with or without **inner content**. +{{% /note %}} + +## Imaging configuration + +### Processing options + +Define an `imaging` section in your site configuration to set the default [image processing options](#image-processing-options). + +{{< code-toggle config=imaging />}} + +anchor +: See image processing options: [anchor](#anchor). + +bgColor +: See image processing options: [background color](#background-color). + +hint +: See image processing options: [hint](#hint). + +quality +: See image processing options: [quality](#quality). + +resampleFilter +: See image processing options: [resampling filter](#resampling-filter). + +### EXIF data + +Define an `imaging.exif` section in your site configuration to control the availability of EXIF data. + +{{< code-toggle file=hugo >}} +[imaging.exif] +includeFields = "" +excludeFields = "" +disableDate = false +disableLatLong = false +{{< /code-toggle >}} + +disableDate +: Hugo extracts the image creation date/time into `.Date`. Set this to `true` to disable. Default is `false`. + +disableLatLong +: Hugo extracts the GPS latitude and longitude into `.Lat` and `.Long`. Set this to `true` to disable. Default is `false`. + +excludeFields +: Regular expression matching the EXIF tags to exclude from the `.Tags` collection. Default is `""`. + +includeFields +: Regular expression matching the EXIF tags to include in the `.Tags` collection. Default is `""`. To include all available tags, set this value to `".*"`. + +{{% note %}} +To improve performance and decrease cache size, Hugo excludes the following tags: `ColorSpace`, `Contrast`, `Exif`, `Exposure[M|P|B]`, `Flash`, `GPS`, `JPEG`, `Metering`, `Resolution`, `Saturation`, `Sensing`, `Sharp`, and `WhiteBalance`. + +To control tag availability, change the `excludeFields` or `includeFields` settings as described above. +{{% /note %}} + +## Smart cropping of images + +By default, Hugo uses the [Smartcrop] library when cropping images with the `Crop` or`Fill` methods. You can set the anchor point manually, but in most cases the `Smart` option will make a good choice. + +Examples using the sunset image from above: + +{{< imgproc "sunset.jpg" "fill 200x200 smart" />}} + +{{< imgproc "sunset.jpg" "crop 200x200 smart" />}} + +## Image processing performance consideration + +Hugo caches processed images in the `resources` directory. If you include this directory in source control, Hugo will not have to regenerate the images in a CI/CD workflow (e.g., GitHub Pages, GitLab Pages, Netlify, etc.). This results in faster builds. + +If you change image processing methods or options, or if you rename or remove images, the `resources` directory will contain unused images. To remove the unused images, perform garbage collection with: + +```sh +hugo --gc +``` + +[time.Format]: /functions/time/format +[`anchor`]: /content-management/image-processing#anchor +[mounted]: /hugo-modules/configuration#module-configuration-mounts +[page bundle]: /content-management/page-bundles +[`lang.FormatNumber`]: /functions/lang/formatnumber +[filters]: /functions/images/filter/#image-filters +[github.com/disintegration/imaging]: <https://github.com/disintegration/imaging#image-resizing> +[Smartcrop]: <https://github.com/muesli/smartcrop#smartcrop> +[Exif]: <https://en.wikipedia.org/wiki/Exif> +[`Process`]: #process +[`Colors`]: #colors +[`Crop`]: #crop +[`Exif`]: #exif +[`Fill`]: #fill +[`Filter`]: #filter +[`Fit`]: #fit +[`Resize`]: #resize +[site configuration]: #processing-options +[`with`]: /functions/go-template/with/ diff --git a/docs/content/en/content-management/image-processing/sunset.jpg b/docs/content/en/content-management/image-processing/sunset.jpg Binary files differnew file mode 100644 index 000000000..4dbcc0836 --- /dev/null +++ b/docs/content/en/content-management/image-processing/sunset.jpg diff --git a/docs/content/en/content-management/mathematics.md b/docs/content/en/content-management/mathematics.md new file mode 100644 index 000000000..d2c71e630 --- /dev/null +++ b/docs/content/en/content-management/mathematics.md @@ -0,0 +1,227 @@ +--- +title: Mathematics in markdown +linkTitle: Mathematics +description: Include mathematical equations and expressions in your markdown using LaTeX or TeX typsetting syntax. +categories: [content management] +keywords: [chemical,chemistry,latex,math,mathjax,tex,typsetting] +menu: + docs: + parent: content-management + weight: 250 +weight: 250 +toc: true +math: true +--- + +{{< new-in 0.122.0 >}} + +\[ +\begin{aligned} +KL(\hat{y} || y) &= \sum_{c=1}^{M}\hat{y}_c \log{\frac{\hat{y}_c}{y_c}} \\ +JS(\hat{y} || y) &= \frac{1}{2}(KL(y||\frac{y+\hat{y}}{2}) + KL(\hat{y}||\frac{y+\hat{y}}{2})) +\end{aligned} +\] + +## Overview + +Mathematical equations and expressions authored in [LaTeX] or [TeX] are common in academic and scientific publications. Your browser typically renders this mathematical markup using an open-source JavaScript display engine such as [MathJax] or [KaTeX]. + +For example, this is the mathematical markup for the equations displayed at the top of this page: + +```text +\[ +\begin{aligned} +KL(\hat{y} || y) &= \sum_{c=1}^{M}\hat{y}_c \log{\frac{\hat{y}_c}{y_c}} \\ +JS(\hat{y} || y) &= \frac{1}{2}(KL(y||\frac{y+\hat{y}}{2}) + KL(\hat{y}||\frac{y+\hat{y}}{2})) +\end{aligned} +\] +``` + +Equations and expressions can be displayed inline with other text, or as standalone blocks. Block presentation is also known as "display" mode. + +Whether an equation or expression appears inline, or as a block, depends on the delimiters that surround the mathematical markup. Delimiters are defined in pairs, where each pair consists of an opening and closing delimiter. The opening and closing delimiters may be the same, or different. Common delimiter pairs are shown in [Step 1]. + +The approach described below avoids reliance on platform-specific features like shortcodes or code block render hooks. Instead, it utilizes a standardized markup format for mathematical equations and expressions, compatible with the rendering engines used by GitHub, GitLab, [Microsoft VS Code], [Obsidian], [Typora], and others. + +## Setup + +Follow these instructions to include mathematical equations and expressions in your markdown using LaTeX or TeX typsetting syntax. + +###### Step 1 + +Enable and configure the Goldmark [passthrough extension] in your site configuration. The passthrough extension preserves raw markdown within delimited snippets of text, including the delimiters themselves. + +{{< code-toggle file=hugo copy=true >}} +[markup.goldmark.extensions.passthrough] +enable = true + +[markup.goldmark.extensions.passthrough.delimiters] +block = [['\[', '\]'], ['$$', '$$']] +inline = [['\(', '\)']] + +[params] +math = true +{{< /code-toggle >}} + +The configuration above enables mathematical rendering on every page unless you set the `math` parameter to `false` in front matter. To enable mathematical rendering as needed, set the `math` parameter to `false` in your site configuration, and set the `math` parameter to `true` in front matter. Use this parameter in your base template as shown in [Step 3]. + +{{% note %}} +The configuration above precludes the use of the `$...$` delimiter pair for inline equations. Although you can add this delimiter pair to the configuration and JavaScript, you will need to double-escape the `$` symbol when used outside of math contexts to avoid unintended formatting. + +See the [inline delimiters](#inline-delimiters) section for details. +{{% /note %}} + +To disable passthrough of inline snippets, omit the `inline` key from the configuration: + +{{< code-toggle file=hugo >}} +[markup.goldmark.extensions.passthrough.delimiters] +block = [['\[', '\]'], ['$$', '$$']] +{{< /code-toggle >}} + +You can define your own opening and closing delimiters, provided they match the delimiters that you set in [Step 2]. + +{{< code-toggle file=hugo >}} +[markup.goldmark.extensions.passthrough.delimiters] +block = [['@@', '@@']] +inline = [['@', '@']] +{{< /code-toggle >}} + +###### Step 2 + +Create a partial template to load MathJax or KaTeX. The example below loads MathJax, or you can use KaTeX as described in the [engines](#engines) section. + +{{< code file=layouts/partials/math.html copy=true >}} +<script id="MathJax-script" async src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-chtml.js"></script> +<script> + MathJax = { + tex: { + displayMath: [['\\[', '\\]'], ['$$', '$$']], // block + inlineMath: [['\\(', '\\)']] // inline + } + }; +</script> +{{< /code >}} + +The delimiters above must match the delimiters in your site configuration. + +###### Step 3 + +Conditionally call the partial template from the base template. + +{{< code file=layouts/_default/baseof.html >}} +<head> + ... + {{ if .Param "math" }} + {{ partialCached "math.html" . }} + {{ end }} + ... +</head> +{{< /code >}} + +The example above loads the partial template if you have set the `math` parameter in front matter to `true`. If you have not set the `math` parameter in front matter, the conditional statement falls back to the `math` parameter in your site configuration. + +###### Step 4 + +Include mathematical equations and expressions in your markdown using LaTeX or TeX typsetting syntax. + +{{< code file=content/math-examples.md copy=true >}} +This is an inline \(a^*=x-b^*\) equation. + +These are block equations: + +\[a^*=x-b^*\] + +\[ a^*=x-b^* \] + +\[ +a^*=x-b^* +\] + +These are block equations using alternate delimiters: + +$$a^*=x-b^*$$ + +$$ a^*=x-b^* $$ + +$$ +a^*=x-b^* +$$ +{{< /code >}} + +If you set the `math` parameter to `false` in your site configuration, you must set the `math` parameter to `true` in front matter. For example: + +{{< code-toggle file=content/math-examples.md fm=true >}} +title = 'Math examples' +math = true +date = 2024-01-24T18:09:49-08:00 +{{< /code-toggle >}} + +## Inline delimiters + +The configuration, JavaScript, and examples above use the `\(...\)` delimiter pair for inline equations. The `$...$` delimiter pair is a common alternative, but using it may result in unintended formatting if you use the `$` symbol outside of math contexts. + +If you add the `$...$` delimiter pair to your configuration and JavaScript, you must double-escape the `$` when outside of math contexts, regardless of whether mathematical rendering is enabled on the page. For example: + +```text +A \\$5 bill _saved_ is a \\$5 bill _earned_. +``` + +{{% note %}} +If you use the `$...$` delimiter pair for inline equations, and occasionally use the `$` symbol outside of math contexts, you must use MathJax instead of KaTeX to avoid unintended formatting caused by [this KaTeX limitation](https://github.com/KaTeX/KaTeX/issues/437). +{{% /note %}} + +## Engines + +MathJax and KaTeX are open-source JavaScript display engines. Both engines are fast, but at the time of this writing MathJax v3.2.2 is slightly faster than KaTeX v0.16.9. + +{{% note %}} +If you use the `$...$` delimiter pair for inline equations, and occasionally use the `$` symbol outside of math contexts, you must use MathJax instead of KaTeX to avoid unintended formatting caused by [this KaTeX limitation](https://github.com/KaTeX/KaTeX/issues/437). + +See the [inline delimiters](#inline-delimiters) section for details. +{{% /note %}} + +To use KaTeX instead of MathJax, replace the partial template from [Step 2] with this: + +{{< code file=layouts/partials/math.html copy=true >}} +<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/dist/katex.min.css" integrity="sha384-n8MVd4RsNIU0tAv4ct0nTaAbDJwPJzDEaqSD1odI+WdtXRGWt2kTvGFasHpSy3SV" crossorigin="anonymous"> +<script defer src="https://cdn.jsdelivr.net/npm/[email protected]/dist/katex.min.js" integrity="sha384-XjKyOOlGwcjNTAIQHIpgOno0Hl1YQqzUOEleOLALmuqehneUG+vnGctmUb0ZY0l8" crossorigin="anonymous"></script> +<script defer src="https://cdn.jsdelivr.net/npm/[email protected]/dist/contrib/auto-render.min.js" integrity="sha384-+VBxd3r6XgURycqtZ117nYw44OOcIax56Z4dCRWbxyPt0Koah1uHoK0o4+/RRE05" crossorigin="anonymous"></script> +<script> + document.addEventListener("DOMContentLoaded", function() { + renderMathInElement(document.body, { + delimiters: [ + {left: '\\[', right: '\\]', display: true}, // block + {left: '$$', right: '$$', display: true}, // block + {left: '\\(', right: '\\)', display: false}, // inline + ], + throwOnError : false + }); + }); +</script> +{{< /code >}} + +The delimiters above must match the delimiters in your site configuration. + +## Chemistry + +Both MathJax and KaTeX provide support for chemical equations. For example: + +```text +$$C_p[\ce{H2O(l)}] = \pu{75.3 J // mol K}$$ +``` + +$$C_p[\ce{H2O(l)}] = \pu{75.3 J // mol K}$$ + +As shown in [Step 2] above, MathJax supports chemical equations without additional configuration. To add chemistry support to KaTeX, enable the mhchem extension as described in the KaTeX [documentation](https://katex.org/docs/libs). + +[KaTeX]: https://katex.org/ +[LaTeX]: https://www.latex-project.org/ +[MathJax]: https://www.mathjax.org/ +[Microsoft VS Code]: https://code.visualstudio.com/ +[Obsidian]: https://obsidian.md/ +[Step 1]: #step-1 +[Step 2]: #step-2 +[Step 3]: #step-3 +[TeX]: https://en.wikipedia.org/wiki/TeX +[Typora]: https://typora.io/ +[passthrough extension]: https://github.com/gohugoio/hugo-goldmark-extensions diff --git a/docs/content/en/content-management/menus.md b/docs/content/en/content-management/menus.md new file mode 100644 index 000000000..1f5d1ef71 --- /dev/null +++ b/docs/content/en/content-management/menus.md @@ -0,0 +1,232 @@ +--- +title: Menus +description: Create menus by defining entries, localizing each entry, and rendering the resulting data structure. +categories: [content management] +keywords: [menus] +menu: + docs: + parent: content-management + weight: 190 +weight: 190 +toc: true +aliases: [/extras/menus/] +--- + +## Overview + +To create a menu for your site: + +1. Define the menu entries +2. [Localize] each entry +3. Render the menu with a [template] + +Create multiple menus, either flat or nested. For example, create a main menu for the header, and a separate menu for the footer. + +There are three ways to define menu entries: + +1. Automatically +1. In front matter +1. In site configuration + +{{% note %}} +Although you can use these methods in combination when defining a menu, the menu will be easier to conceptualize and maintain if you use one method throughout the site. +{{% /note %}} + +## Define automatically + +To automatically define menu entries for each top-level section of your site, enable the section pages menu in your site configuration. + +{{< code-toggle file=hugo >}} +sectionPagesMenu = "main" +{{< /code-toggle >}} + +This creates a menu structure that you can access with `site.Menus.main` in your templates. See [menu templates] for details. + +## Define in front matter + +To add a page to the "main" menu: + +{{< code-toggle file=content/about.md fm=true >}} +title = 'About' +menus = 'main' +{{< /code-toggle >}} + +Access the entry with `site.Menus.main` in your templates. See [menu templates] for details. + +To add a page to the "main" and "footer" menus: + +{{< code-toggle file=content/contact.md fm=true >}} +title = 'Contact' +menus = ['main','footer'] +{{< /code-toggle >}} + +Access the entry with `site.Menus.main` and `site.Menus.footer` in your templates. See [menu templates] for details. + +{{% note %}} +The configuration key in the examples above is `menus`. The `menu` (singular) configuration key is an alias for `menus`. +{{% /note %}} + +### Properties {#properties-front-matter} + +Use these properties when defining menu entries in front matter: + +identifier +: (`string`) Required when two or more menu entries have the same `name`, or when localizing the `name` using translation tables. Must start with a letter, followed by letters, digits, or underscores. + +name +: (`string`) The text to display when rendering the menu entry. + +params +: (`map`) User-defined properties for the menu entry. + +parent +: (`string`) The `identifier` of the parent menu entry. If `identifier` is not defined, use `name`. Required for child entries in a nested menu. + +post +: (`string`) The HTML to append when rendering the menu entry. + +pre +: (`string`) The HTML to prepend when rendering the menu entry. + +title +: (`string`) The HTML `title` attribute of the rendered menu entry. + +weight +: (`int`) A non-zero integer indicating the entry's position relative the root of the menu, or to its parent for a child entry. Lighter entries float to the top, while heavier entries sink to the bottom. + +### Example {#example-front-matter} + +This front matter menu entry demonstrates some of the available properties: + +{{< code-toggle file=content/products/software.md fm=true >}} +title = 'Software' +[[menus.main]] +parent = 'Products' +weight = 20 +pre = '<i class="fa-solid fa-code"></i>' +[menus.main.params] +class = 'center' +{{< /code-toggle >}} + +Access the entry with `site.Menus.main` in your templates. See [menu templates] for details. + +## Define in site configuration + +To define entries for the "main" menu: + +{{< code-toggle file=hugo >}} +[[menus.main]] +name = 'Home' +pageRef = '/' +weight = 10 + +[[menus.main]] +name = 'Products' +pageRef = '/products' +weight = 20 + +[[menus.main]] +name = 'Services' +pageRef = '/services' +weight = 30 +{{< /code-toggle >}} + +This creates a menu structure that you can access with `site.Menus.main` in your templates. See [menu templates] for details. + +To define entries for the "footer" menu: + +{{< code-toggle file=hugo >}} +[[menus.footer]] +name = 'Terms' +pageRef = '/terms' +weight = 10 + +[[menus.footer]] +name = 'Privacy' +pageRef = '/privacy' +weight = 20 +{{< /code-toggle >}} + +This creates a menu structure that you can access with `site.Menus.footer` in your templates. See [menu templates] for details. + +{{% note %}} +The configuration key in the examples above is `menus`. The `menu` (singular) configuration key is an alias for `menus`. +{{% /note %}} + +### Properties {#properties-site-configuration} + +{{% note %}} +The [properties available to entries defined in front matter] are also available to entries defined in site configuration. + +[properties available to entries defined in front matter]: /content-management/menus/#properties-front-matter +{{% /note %}} + +Each menu entry defined in site configuration requires two or more properties: + +- Specify `name` and `pageRef` for internal links +- Specify `name` and `url` for external links + +pageRef +: (`string`) The file path of the target page, relative to the `content` directory. Omit language code and file extension. Required for *internal* links. + +Kind|pageRef +:--|:-- +home|`/` +page|`/books/book-1` +section|`/books` +taxonomy|`/tags` +term|`/tags/foo` + +url +: (`string`) Required for *external* links. + +### Example {#example-site-configuration} + +This nested menu demonstrates some of the available properties: + +{{< code-toggle file=hugo >}} +[[menus.main]] +name = 'Products' +pageRef = '/products' +weight = 10 + +[[menus.main]] +name = 'Hardware' +pageRef = '/products/hardware' +parent = 'Products' +weight = 1 + +[[menus.main]] +name = 'Software' +pageRef = '/products/software' +parent = 'Products' +weight = 2 + +[[menus.main]] +name = 'Services' +pageRef = '/services' +weight = 20 + +[[menus.main]] +name = 'Hugo' +pre = '<i class="fa fa-heart"></i>' +url = 'https://gohugo.io/' +weight = 30 +[menus.main.params] +rel = 'external' +{{< /code-toggle >}} + +This creates a menu structure that you can access with `site.Menus.main` in your templates. See [menu templates] for details. + +## Localize + +Hugo provides two methods to localize your menu entries. See [multilingual]. + +## Render + +See [menu templates]. + +[localize]: /content-management/multilingual/#menus +[menu templates]: /templates/menu-templates/ +[multilingual]: /content-management/multilingual/#menus +[template]: /templates/menu-templates/ diff --git a/docs/content/en/content-management/multilingual.md b/docs/content/en/content-management/multilingual.md new file mode 100644 index 000000000..ea9f71787 --- /dev/null +++ b/docs/content/en/content-management/multilingual.md @@ -0,0 +1,716 @@ +--- +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 +weight: 230 +toc: true +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 + +This is the default language configuration: + +{{< code-toggle config=languages />}} + +This is an example of a site configuration for a multilingual project. Any key not defined in a `languages` object will fall back to the global value in the root of your site configuration. + +{{< code-toggle file=hugo >}} +defaultContentLanguage = 'de' +defaultContentLanguageInSubdir = true + +[languages.de] +contentDir = 'content/de' +disabled = false +languageCode = 'de-DE' +languageDirection = 'ltr' +languageName = 'Deutsch' +title = 'Projekt Dokumentation' +weight = 1 + +[languages.de.params] +subtitle = 'Referenz, Tutorials und Erklärungen' + +[languages.en] +contentDir = 'content/en' +disabled = false +languageCode = 'en-US' +languageDirection = 'ltr' +languageName = 'English' +title = 'Project Documentation' +weight = 2 + +[languages.en.params] +subtitle = 'Reference, Tutorials, and Explanations' +{{< /code-toggle >}} + +defaultContentLanguage +: (`string`) The project's default language tag as defined by [RFC 5646]. Must be lower case, and must match one of the defined language keys. Default is `en`. Examples: + +- `en` +- `en-gb` +- `pt-br` + +defaultContentLanguageInSubdir +: (`bool`) If `true`, Hugo renders the default language site in a subdirectory matching the `defaultContentLanguage`. Default is `false`. + +contentDir +: (`string`) The content directory for this language. Omit if [translating by file name]. + +disabled +: (`bool`) If `true`, Hugo will not render content for this language. Default is `false`. + +languageCode +: (`string`) The language tag as defined by [RFC 5646]. This value may include upper and lower case characters, hyphens, or underscores, and does not affect localization or URLs. Hugo uses this value to populate the `language` element in the [built-in RSS template], and the `lang` attribute of the `html` element in the [built-in alias template]. Examples: + +- `en` +- `en-GB` +- `pt-BR` + +languageDirection +: (`string`) The language direction, either left-to-right (`ltr`) or right-to-left (`rtl`). Use this value in your templates with the global [`dir`] HTML attribute. + +languageName +: (`string`) The language name, typically used when rendering a language switcher. + +title +: (`string`) The language title. When set, this overrides the site title for this language. + +weight +: (`int`) The language weight. When set to a non-zero value, this is the primary sort criteria for this language. + +[`dir`]: https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/dir +[built-in RSS template]: https://github.com/gohugoio/hugo/blob/master/tpl/tplimpl/embedded/templates/_default/rss.xml +[built-in alias template]: https://github.com/gohugoio/hugo/blob/master/tpl/tplimpl/embedded/templates/alias.html +[RFC 5646]: https://datatracker.ietf.org/doc/html/rfc5646 +[translating by file name]: #translation-by-file-name + +### Changes in Hugo 0.112.0 + +{{< new-in 0.112.0 >}} + +In Hugo `v0.112.0` we consolidated all configuration options, and improved how the languages and their parameters are merged with the main configuration. But while testing this on Hugo sites out there, we received some error reports and reverted some of the changes in favor of deprecation warnings: + +1. `site.Language.Params` is deprecated. Use `site.Params` directly. +1. Adding custom parameters to the top level language configuration is deprecated. Define custom parameters within `languages.xx.params`. See `color` in the example below. + +{{< code-toggle file=hugo >}} + +title = "My blog" +languageCode = "en-us" + +[languages] +[languages.sv] +title = "Min blogg" +languageCode = "sv" +[languages.en.params] +color = "blue" +{{< /code-toggle >}} + +In the example above, all settings except `color` below `params` map to predefined configuration options in Hugo for the site and its language, and should be accessed via the documented accessors: + +```go-html-template +{{ site.Title }} +{{ site.LanguageCode }} +{{ site.Params.color }} +``` + +### Disable a language + +To disable a language within a `languages` object in your site configuration: + +{{< code-toggle file=hugo >}} +[languages.es] +disabled = true +{{< /code-toggle >}} + +To disable one or more languages in the root of your site configuration: + +{{< code-toggle file=hugo >}} +disableLanguages = ["es", "fr"] +{{< /code-toggle >}} + +To disable one or more languages using an environment variable: + +```sh +HUGO_DISABLELANGUAGES="es fr" hugo +``` + +Note that you cannot disable the default content language. + +### 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`: + +{{% note %}} +If a `baseURL` is set on the `language` level, then all languages must have one and they must all be different. +{{% /note %}} + +Example: + +{{< code-toggle file=hugo >}} +[languages] +[languages.fr] +baseURL = "https://example.fr" +languageName = "Français" +weight = 1 +title = "En Français" + +[languages.en] +baseURL = "https://example.org/" +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.org/`.** + +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) fr +Web Server is available at 127.0.0.1:1314 (bind address 127.0.0.1) en +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 file name + +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 file name__. + +By having the same **path and base file name**, 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` parameter. + +{{< code-toggle file=hugo >}} +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 parameter to `about` in all three pages, they will be __linked__ as translated pages. + +### Localizing permalinks + +Because paths and file names are used to handle linking, all translated pages will share the same URL (apart from the language subdirectory). + +To localize URLs: + +- For a regular page, set either [`slug`] or [`url`] in front matter +- For a section page, set [`url`] in front matter + +[`slug`]: /content-management/urls/#slug +[`url`]: /content-management/urls/#url + +For example, a French translation can have its own localized slug. + +{{< code-toggle file=content/about.fr.md fm=true >}} +title: A Propos +slug: "a-propos" +{{< /code-toggle >}} + +At render, Hugo will build both `/about/` and `/fr/a-propos/` without affecting the translation link. + +### 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 file name (`image.jpg`, `image.fr.jpg`) and by directory (`english/about/header.jpg`, `french/about/header.jpg`). +{{%/ note %}} + +## Reference 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="{{ .RelPermalink }}">{{ .Lang }}: {{ .LinkTitle }}{{ 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="{{ .RelPermalink }}">{{ .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 § 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: + +[`i18n`]: /functions/lang/translate + +```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 + +To enable pluralization when translating, pass a map with a numeric `.Count` property to the `i18n` function. The example below 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=hugo >}} +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 }} +``` + +The rendered page displays: + +Language|Value +:--|:-- +English|512.50% +Français|512,50 % +Deutsch|512,50 % + +See [lang.FormatPercent] for details. + +## Menus + +Localization of menu entries depends on how you define them: + +- When you define menu entries [automatically] using the section pages menu, you must use translation tables to localize each entry. +- When you define menu entries [in front matter], they are already localized based on the front matter itself. If the front matter values are insufficient, use translation tables to localize each entry. +- When you define menu entries [in site configuration], you must create language-specific menu entries under each language key. If the names of the menu entries are insufficient, use translation tables to localize each entry. + +### Create language-specific menu entries + +#### Method 1 -- Use a single configuration file + +For a simple menu with a small number of entries, use a single configuration file. For example: + +{{< code-toggle file=hugo >}} +[languages.de] +languageCode = 'de-DE' +languageName = 'Deutsch' +weight = 1 + +[[languages.de.menus.main]] +name = 'Produkte' +pageRef = '/products' +weight = 10 + +[[languages.de.menus.main]] +name = 'Leistungen' +pageRef = '/services' +weight = 20 + +[languages.en] +languageCode = 'en-US' +languageName = 'English' +weight = 2 + +[[languages.en.menus.main]] +name = 'Products' +pageRef = '/products' +weight = 10 + +[[languages.en.menus.main]] +name = 'Services' +pageRef = '/services' +weight = 20 +{{< /code-toggle >}} + +#### Method 2 -- Use a configuration directory + +With a more complex menu structure, create a [configuration directory] and split the menu entries into multiple files, one file per language. For example: + +```text +config/ +└── _default/ + ├── menus.de.toml + ├── menus.en.toml + └── hugo.toml +``` + +{{< code-toggle file=config/_default/menus.de >}} +[[main]] +name = 'Produkte' +pageRef = '/products' +weight = 10 +[[main]] +name = 'Leistungen' +pageRef = '/services' +weight = 20 +{{< /code-toggle >}} + +{{< code-toggle file=config/_default/menus.en >}} +[[main]] +name = 'Products' +pageRef = '/products' +weight = 10 +[[main]] +name = 'Services' +pageRef = '/services' +weight = 20 +{{< /code-toggle >}} + +[configuration directory]: /getting-started/configuration/#configuration-directory + +### Use translation tables + +When rendering the text that appears in menu each entry, the [example menu template] does this: + +```go-html-template +{{ or (T .Identifier) .Name | safeHTML }} +``` + +It queries the translation table for the current language using the menu entry's `identifier` and returns the translated string. If the translation table does not exist, or if the `identifier` key is not present in the translation table, it falls back to `name`. + +The `identifier` depends on how you define menu entries: + +- If you define the menu entry [automatically] using the section pages menu, the `identifier` is the page's `.Section`. +- If you define the menu entry [in site configuration] or [in front matter], set the `identifier` property to the desired value. + +For example, if you define menu entries in site configuration: + +{{< code-toggle file=hugo >}} +[[menus.main]] + identifier = 'products' + name = 'Products' + pageRef = '/products' + weight = 10 +[[menus.main]] + identifier = 'services' + name = 'Services' + pageRef = '/services' + weight = 20 +{{< / code-toggle >}} + +Create corresponding entries in the translation tables: + +{{< code-toggle file=i18n/de >}} +products = 'Produkte' +services = 'Leistungen' +{{< / code-toggle >}} + +[example menu template]: /templates/menu-templates/#example +[automatically]: /content-management/menus/#define-automatically +[in front matter]: /content-management/menus/#define-in-front-matter +[in site configuration]: /content-management/menus/#define-in-site-configuration + +## 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: + +```sh +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`] or [`absLangURL`] template function, 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 content` + +If you organize content with translations in the same directory: + +```sh +hugo new content post/test.en.md +hugo new content post/test.de.md +``` + +If you organize content with translations in different directories: + +```sh +hugo new content content/en/post/test.md +hugo new content content/de/post/test.md +``` + +[`abslangurl`]: /functions/urls/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/lang/translate +[lang.FormatAccounting]: /functions/lang/formataccounting +[lang.FormatCurrency]: /functions/lang/formatcurrency +[lang.FormatNumber]: /functions/lang/formatnumber +[lang.FormatNumberCustom]: /functions/lang/formatnumbercustom +[lang.FormatPercent]: /functions/lang/formatpercent +[lang.Merge]: /functions/lang/merge/ +[menus]: /content-management/menus/ +[OS environment]: /getting-started/configuration/#configure-with-environment-variables +[`rellangurl`]: /functions/urls/rellangurl +[RFC 5646]: https://tools.ietf.org/html/rfc5646 +[single page templates]: /templates/single-page-templates/ +[`time.Format`]: /functions/time/format diff --git a/docs/content/en/content-management/organization/1-featured-content-bundles.png b/docs/content/en/content-management/organization/1-featured-content-bundles.png Binary files differnew file mode 100644 index 000000000..501e671e2 --- /dev/null +++ b/docs/content/en/content-management/organization/1-featured-content-bundles.png diff --git a/docs/content/en/content-management/organization/index.md b/docs/content/en/content-management/organization/index.md new file mode 100644 index 000000000..22b341fcf --- /dev/null +++ b/docs/content/en/content-management/organization/index.md @@ -0,0 +1,154 @@ +--- +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 +weight: 20 +toc: true +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](/content-management/page-resources) and [Image Processing](/content-management/image-processing) to get the full picture. + +{{< imgproc "1-featured-content-bundles.png" "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. + +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.org/about/ + ├── posts + | ├── firstpost.md // <- https://example.org/posts/firstpost/ + | ├── happy + | | └── ness.md // <- https://example.org/posts/happy/ness/ + | └── secondpost.md // <- https://example.org/posts/secondpost/ + └── quote + ├── first.md // <- https://example.org/quote/first/ + └── second.md // <- https://example.org/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.org"` 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](/methods/page/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.org/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.org/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` + +The `slug` is the last segment of the URL path, defined by the file name and optionally overridden by a `slug` value in front matter. See [URL Management](/content-management/urls/#slug) for details. + +### `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 entire URL path, defined by the file path and optionally overridden by a `url` value in front matter. See [URL Management](/content-management/urls/#slug) for details. + +[config]: /getting-started/configuration/ +[formats]: /content-management/formats/ +[front matter]: /content-management/front-matter/ +[getpage]: /methods/page/getpage +[homepage template]: /templates/homepage/ +[homepage]: /templates/homepage/ +[lists]: /templates/lists/ +[pretty]: /content-management/urls/#appearance +[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/ diff --git a/docs/content/en/content-management/page-bundles.md b/docs/content/en/content-management/page-bundles.md new file mode 100644 index 000000000..860fff2bb --- /dev/null +++ b/docs/content/en/content-management/page-bundles.md @@ -0,0 +1,183 @@ +--- +title: Page bundles +description: Content organization using Page Bundles +categories: [content management] +keywords: [page,bundle,leaf,branch] +menu : + docs: + parent: content-management + weight: 30 +weight: 30 +toc: true +--- + +Page Bundles are a way to group [Page Resources](/content-management/page-resources/). + +A Page Bundle can be one of: + +- Leaf Bundle (leaf means it has no children) +- Branch Bundle (home page, section, taxonomy terms, taxonomy list) + +| | Leaf Bundle | Branch Bundle | +|-------------------------------------|----------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Usage | Collection of content and attachments for single pages | Collection of attachments for section pages (home page, section, taxonomy terms, taxonomy list) | +| Index file name | `index.md` [^fn:1] | `_index.md` [^fn:1] | +| Allowed Resources | Page and non-page (like images, PDF, etc.) types | Only non-page (like images, PDF, etc.) types | +| Where can the Resources live? | At any directory level within the leaf bundle directory. | Only in the directory level **of** the branch bundle directory i.e. the directory containing the `_index.md` ([ref](https://discourse.gohugo.io/t/question-about-content-folder-structure/11822/4?u=kaushalmodi)). | +| Layout type | [`single`](/templates/single-page-templates/) | [`list`](/templates/lists) | +| Nesting | Does not allow nesting of more bundles under it | Allows nesting of leaf or branch bundles under it | +| Example | `content/posts/my-post/index.md` | `content/posts/_index.md` | +| Content from non-index page files...| Accessed only as page resources | Accessed only as regular pages | + +## Leaf bundles + +A _Leaf Bundle_ is a directory at any hierarchy within the `content/` +directory, that contains an **`index.md`** file. + +### Examples of leaf bundle organization {#examples-of-leaf-bundle-organization} + +```text +content/ +├── about +│ ├── index.md +├── posts +│ ├── my-post +│ │ ├── content1.md +│ │ ├── content2.md +│ │ ├── image1.jpg +│ │ ├── image2.png +│ │ └── index.md +│ └── my-other-post +│ └── index.md +│ +└── another-section + ├── .. + └── not-a-leaf-bundle + ├── .. + └── another-leaf-bundle + └── index.md +``` + +In the above example `content/` directory, there are four leaf +bundles: + +about +: This leaf bundle is at the root level (directly under + `content` directory) and has only the `index.md`. + +my-post +: This leaf bundle has the `index.md`, two other content + Markdown files and two image files. + +- image1, image2: +These images are page resources of `my-post` + and only available in `my-post/index.md` resources. + +- content1, content2: +These content files are page resources of `my-post` + and only available in `my-post/index.md` resources. + They will **not** be rendered as individual pages. + +my-other-post +: This leaf bundle has only the `index.md`. + +another-leaf-bundle +: This leaf bundle is nested under couple of + directories. This bundle also has only the `index.md`. + +{{% note %}} +The hierarchy depth at which a leaf bundle is created does not matter, +as long as it is not inside another **leaf** bundle. +{{% /note %}} + +### Headless bundle + +A headless bundle is a bundle that is configured to not get published +anywhere: + +- It will have no `Permalink` and no rendered HTML in `public/`. +- It will not be part of `.Site.RegularPages`, etc. + +But you can get it by `.Site.GetPage`. Here is an example: + +```go-html-template +{{ $headless := .Site.GetPage "/some-headless-bundle" }} +{{ $reusablePages := $headless.Resources.Match "author*" }} +<h2>Authors</h2> +{{ range $reusablePages }} + <h3>{{ .Title }}</h3> + {{ .Content }} +{{ end }} +``` + +_In this example, we are assuming the `some-headless-bundle` to be a headless + bundle containing one or more **page** resources whose `.Name` matches + `"author*"`._ + +Explanation of the above example: + +1. Get the `some-headless-bundle` Page "object". +2. Collect a _slice_ of resources in this _Page Bundle_ that matches + `"author*"` using `.Resources.Match`. +3. Loop through that _slice_ of nested pages, and output their `.Title` and + `.Content`. + +--- + +A leaf bundle can be made headless by adding below in the front matter +(in the `index.md`): + +{{< code-toggle file=content/headless/index.md fm=true >}} +headless = true +{{< /code-toggle >}} + +There are many use cases of such headless page bundles: + +- Shared media galleries +- Reusable page content "snippets" + +## Branch bundles + +A _Branch Bundle_ is any directory at any hierarchy within the +`content/` directory, that contains at least an **`_index.md`** file. + +This `_index.md` can also be directly under the `content/` directory. + +{{% note %}} +Here `md` (markdown) is used just as an example. You can use any file +type as a content resource as long as it is a content type recognized by Hugo. +{{% /note %}} + +### Examples of branch bundle organization + +```text +content/ +├── branch-bundle-1 +│ ├── branch-content1.md +│ ├── branch-content2.md +│ ├── image1.jpg +│ ├── image2.png +│ └── _index.md +└── branch-bundle-2 + ├── _index.md + └── a-leaf-bundle + └── index.md +``` + +In the above example `content/` directory, there are two branch +bundles (and a leaf bundle): + +branch-bundle-1 +: This branch bundle has the `_index.md`, two + other content Markdown files and two image files. + +branch-bundle-2 +: This branch bundle has the `_index.md` and a + nested leaf bundle. + +{{% note %}} +The hierarchy depth at which a branch bundle is created does not +matter. +{{% /note %}} + +[^fn:1]: The `.md` extension is just an example. The extension can be `.html`, `.json` or any valid MIME type. diff --git a/docs/content/en/content-management/page-resources.md b/docs/content/en/content-management/page-resources.md new file mode 100644 index 000000000..f141510bb --- /dev/null +++ b/docs/content/en/content-management/page-resources.md @@ -0,0 +1,203 @@ +--- +title: Page resources +description: Page resources -- images, other pages, documents, etc. -- have page-relative URLs and their own metadata. +categories: [content management] +keywords: [bundle,content,resources] +menu: + docs: + parent: content-management + weight: 80 +weight: 80 +toc: true +--- +Page resources are only accessible from [page bundles](/content-management/page-bundles), those directories with `index.md` or +`_index.md` files at their root. Page resources are only available to the +page with which they are bundled. + +In this example, `first-post` is a page bundle with access to 10 page resources including audio, data, documents, images, and video. Although `second-post` is also a page bundle, it has no page resources and is unable to directly access the page resources associated with `first-post`. + +```text +content +└── post + ├── first-post + │ ├── images + │ │ ├── a.jpg + │ │ ├── b.jpg + │ │ └── c.jpg + │ ├── index.md (root of page bundle) + │ ├── latest.html + │ ├── manual.json + │ ├── notice.md + │ ├── office.mp3 + │ ├── pocket.mp4 + │ ├── rating.pdf + │ └── safety.txt + └── second-post + └── index.md (root of page bundle) +``` + +## Properties + +ResourceType +: The main type of the resource's [Media Type](/templates/output-formats/#media-types). For example, a file of MIME type `image/jpeg` has the ResourceType `image`. A `Page` will have `ResourceType` with value `page`. + +Name +: Default value is the file name (relative to the owning page). Can be set in front matter. + +Title +: Default value is the same as `.Name`. Can be set in front matter. + +Permalink +: The absolute URL to the resource. Resources of type `page` will have no value. + +RelPermalink +: The relative URL to the resource. Resources of type `page` will have no value. + +Content +: The content of the resource itself. For most resources, this returns a string +with the contents of the file. Use this to create inline resources. + +```go-html-template +{{ with .Resources.GetMatch "script.js" }} + <script>{{ .Content | safeJS }}</script> +{{ end }} + +{{ with .Resources.GetMatch "style.css" }} + <style>{{ .Content | safeCSS }}</style> +{{ end }} + +{{ with .Resources.GetMatch "img.png" }} + <img src="data:{{ .MediaType.Type }};base64,{{ .Content | base64Encode }}"> +{{ end }} +``` + +MediaType.Type +: The media type (formerly known as a MIME type) of the resource (e.g., `image/jpeg`). + +MediaType.MainType +: The main type of the resource's media type (e.g., `image`). + +MediaType.SubType +: The subtype of the resource's type (e.g., `jpeg`). This may or may not correspond to the file suffix. + +MediaType.Suffixes +: A slice of possible file suffixes for the resource's media type (e.g., `[jpg jpeg jpe jif jfif]`). + +## Methods + +ByType +: Returns the page resources of the given type. + +```go-html-template +{{ .Resources.ByType "image" }} +``` +Match +: Returns all the page resources (as a slice) whose `Name` matches the given Glob pattern ([examples](https://github.com/gobwas/glob/blob/master/readme.md)). The matching is case-insensitive. + +```go-html-template +{{ .Resources.Match "images/*" }} +``` + +GetMatch +: Same as `Match` but will return the first match. + +### Pattern matching + +```go +// Using Match/GetMatch to find this images/sunset.jpg ? +.Resources.Match "images/sun*" ✅ +.Resources.Match "**/sunset.jpg" ✅ +.Resources.Match "images/*.jpg" ✅ +.Resources.Match "**.jpg" ✅ +.Resources.Match "*" 🚫 +.Resources.Match "sunset.jpg" 🚫 +.Resources.Match "*sunset.jpg" 🚫 +``` + +## Page resources metadata + +The page resources' metadata is managed from the corresponding page's front matter with an array/table parameter named `resources`. You can batch assign values using [wildcards](https://tldp.org/LDP/GNU-Linux-Tools-Summary/html/x11655.htm). + +{{% note %}} +Resources of type `page` get `Title` etc. from their own front matter. +{{% /note %}} + +name +: Sets the value returned in `Name`. + +{{% note %}} +The methods `Match`, `Get` and `GetMatch` use `Name` to match the resources. +{{% /note %}} + +title +: Sets the value returned in `Title` + +params +: A map of custom key/values. + +### Resources metadata example + +{{< code-toggle >}} +title: Application +date : 2018-01-25 +resources : +- src : "images/sunset.jpg" + name : "header" +- src : "documents/photo_specs.pdf" + title : "Photo Specifications" + params: + icon : "photo" +- src : "documents/guide.pdf" + title : "Instruction Guide" +- src : "documents/checklist.pdf" + title : "Document Checklist" +- src : "documents/payment.docx" + title : "Proof of Payment" +- src : "**.pdf" + name : "pdf-file-:counter" + params : + icon : "pdf" +- src : "**.docx" + params : + icon : "word" +{{</ code-toggle >}} + +From the example above: + +- `sunset.jpg` will receive a new `Name` and can now be found with `.GetMatch "header"`. +- `documents/photo_specs.pdf` will get the `photo` icon. +- `documents/checklist.pdf`, `documents/guide.pdf` and `documents/payment.docx` will get `Title` as set by `title`. +- Every `PDF` in the bundle except `documents/photo_specs.pdf` will get the `pdf` icon. +- All `PDF` files will get a new `Name`. The `name` parameter contains a special placeholder [`:counter`](#the-counter-placeholder-in-name-and-title), so the `Name` will be `pdf-file-1`, `pdf-file-2`, `pdf-file-3`. +- Every docx in the bundle will receive the `word` icon. + +{{% note %}} +The __order matters__ --- Only the **first set** values of the `title`, `name` and `params`-**keys** will be used. Consecutive parameters will be set only for the ones not already set. In the above example, `.Params.icon` is first set to `"photo"` in `src = "documents/photo_specs.pdf"`. So that would not get overridden to `"pdf"` by the later set `src = "**.pdf"` rule. +{{% /note %}} + +### The `:counter` placeholder in `name` and `title` + +The `:counter` is a special placeholder recognized in `name` and `title` parameters `resources`. + +The counter starts at 1 the first time they are used in either `name` or `title`. + +For example, if a bundle has the resources `photo_specs.pdf`, `other_specs.pdf`, `guide.pdf` and `checklist.pdf`, and the front matter has specified the `resources` as: + +{{< code-toggle file=content/inspections/engine/index.md fm=true >}} +title = 'Engine inspections' +[[resources]] + src = "*specs.pdf" + title = "Specification #:counter" +[[resources]] + src = "**.pdf" + name = "pdf-file-:counter" +{{</ code-toggle >}} + +the `Name` and `Title` will be assigned to the resource files as follows: + +| Resource file | `Name` | `Title` | +|-------------------|-------------------|-----------------------| +| checklist.pdf | `"pdf-file-1.pdf` | `"checklist.pdf"` | +| guide.pdf | `"pdf-file-2.pdf` | `"guide.pdf"` | +| other\_specs.pdf | `"pdf-file-3.pdf` | `"Specification #1"` | +| photo\_specs.pdf | `"pdf-file-4.pdf` | `"Specification #2"` | diff --git a/docs/content/en/content-management/related.md b/docs/content/en/content-management/related.md new file mode 100644 index 000000000..e73dfc32a --- /dev/null +++ b/docs/content/en/content-management/related.md @@ -0,0 +1,178 @@ +--- +title: Related content +description: List related content in "See Also" sections. +categories: [content management] +keywords: [content] +menu: + docs: + parent: content-management + weight: 110 +weight: 110 +toc: true +aliases: [/content/related/,/related/] +--- + +Hugo uses a set of factors to identify a page's related content based on front matter parameters. This can be tuned to the desired set of indices and parameters or left to Hugo's default [Related Content configuration](#configure-related-content). + +## List related content + +To list up to 5 related pages (which share the same _date_ or _keyword_ parameters) is as simple as including something similar to this partial in your single page template: + +{{< code file=layouts/partials/related.html >}} +{{ $related := .Site.RegularPages.Related . | first 5 }} +{{ with $related }} +<h3>See Also</h3> +<ul> + {{ range . }} + <li><a href="{{ .RelPermalink }}">{{ .LinkTitle }}</a></li> + {{ end }} +</ul> +{{ end }} +{{< /code >}} + +The `Related` method takes one argument which may be a `Page` or a options map. The options map have these options: + +indices +: (`slice`) The indices to search within. + +document +: (`page`) The page for which to find related content. Required when specifying an options map. + +namedSlices +: (`slice`) The keywords to search for, expressed as a slice of `KeyValues` using the [`keyVals`] function. + +fragments +: (`slice`) A list of special keywords that is used for indices configured as type "fragments". This will match the [fragment] identifiers of the documents. + +[fragment]: /getting-started/glossary/#fragment +[`keyVals`]: /functions/collections/keyvals/ + +A fictional example using all of the above options: + +```go-html-template +{{ $page := . }} +{{ $opts := dict + "indices" (slice "tags" "keywords") + "document" $page + "namedSlices" (slice (keyVals "tags" "hugo" "rocks") (keyVals "date" $page.Date)) + "fragments" (slice "heading-1" "heading-2") +}} +``` + +{{% note %}} +We improved and simplified this feature in Hugo 0.111.0. Before this we had 3 different methods: `Related`, `RelatedTo` and `RelatedIndices`. Now we have only one method: `Related`. The old methods are still available but deprecated. Also see [this blog article](https://regisphilibert.com/blog/2018/04/hugo-optmized-relashionships-with-related-content/) for a great explanation of more advanced usage of this feature. +{{% /note %}} + +## Index content headings in related content + +{{< new-in 0.111.0 >}} + +Hugo can index the headings in your content and use this to find related content. You can enable this by adding a index of type `fragments` to your `related` configuration: + +{{< code-toggle file=hugo >}} +[related] +threshold = 20 +includeNewer = true +toLower = false +[[related.indices]] +name = "fragmentrefs" +type = "fragments" +applyFilter = true +weight = 80 +{{< /code-toggle >}} + +* The `name` maps to a optional front matter slice attribute that can be used to link from the page level down to the fragment/heading level. +* If `applyFilter`is enabled, the `.HeadingsFiltered` on each page in the result will reflect the filtered headings. This is useful if you want to show the headings in the related content listing: + +```go-html-template +{{ $related := .Site.RegularPages.Related . | first 5 }} +{{ with $related }} + <h2>See Also</h2> + <ul> + {{ range $i, $p := . }} + <li> + <a href="{{ .RelPermalink }}">{{ .LinkTitle }}</a> + {{ with .HeadingsFiltered }} + <ul> + {{ range . }} + {{ $link := printf "%s#%s" $p.RelPermalink .ID | safeURL }} + <li> + <a href="{{ $link }}">{{ .Title }}</a> + </li> + {{ end }} + </ul> + {{ end }} + </li> + {{ end }} + </ul> +{{ end }} +``` + +## Configure related content + +Hugo provides a sensible default configuration of Related Content, but you can fine-tune this in your configuration, on the global or language level if needed. + +### Default configuration + +Without any `related` configuration set on the project, Hugo's Related Content methods will use the following. + +{{< code-toggle config=related />}} + +Custom configuration should be set using the same syntax. + +{{% note %}} +If you add a `related` configuration section, you need to add a complete configuration. It is not possible to just set, say, `includeNewer` and use the rest from the Hugo defaults. +{{% /note %}} + +### Top level configuration options + +threshold +: (`int`) A value between 0-100. Lower value will give more, but maybe not so relevant, matches. + +includeNewer +: (`bool`) Set to `true` to include **pages newer than the current page** in the related content listing. This will mean that the output for older posts may change as new related content gets added. + +toLower +: (`bool`) Set to `true` to lower case keywords in both the indexes and the queries. This may give more accurate results at a slight performance penalty. Note that this can also be set per index. + +### Configuration options per index + +name +: (`string`) The index name. This value maps directly to a page parameter. Hugo supports string values (`author` in the example) and lists (`tags`, `keywords` etc.) and time and date objects. + +type {{< new-in 0.111.0 >}} +: (`string`) One of `basic`(default) or `fragments`. + +applyFilter {{< new-in 0.111.0 >}} +: (`string`) Apply a `type` specific filter to the result of a search. This is currently only used for the `fragments` type. + +weight +: (`int`) An integer weight that indicates _how important_ this parameter is relative to the other parameters. It can be `0`, which has the effect of turning this index off, or even negative. Test with different values to see what fits your content best. + +cardinalityThreshold {{< new-in 0.111.0 >}} +: (`int`) A percentage (0-100) used to remove common keywords from the index. As an example, setting this to `50` will remove all keywords that are used in more than 50% of the documents in the index. Default is `0`. + +pattern +: (`string`) This is currently only relevant for dates. When listing related content, we may want to list content that is also close in time. Setting "2006" (default value for date indexes) as the pattern for a date index will add weight to pages published in the same year. For busier blogs, "200601" (year and month) may be a better default. + +toLower +: (`bool`) See above. + +## Performance considerations + +**Fast is Hugo's middle name** and we would not have released this feature had it not been blistering fast. + +This feature has been in the back log and requested by many for a long time. The development got this recent kick start from this Twitter thread: + +{{< tweet user="scott_lowe" id="898398437527363585" >}} + +Scott S. Lowe removed the "Related Content" section built using the `intersect` template function on tags, and the build time dropped from 30 seconds to less than 2 seconds on his 1700 content page sized blog. + +He should now be able to add an improved version of that "Related Content" section without giving up the fast live-reloads. But it's worth noting that: + +* If you don't use any of the `Related` methods, you will not use the Relate Content feature, and performance will be the same as before. +* Calling `.RegularPages.Related` etc. will create one inverted index, also sometimes named posting list, that will be reused for any lookups in that same page collection. Doing that in addition to, as an example, calling `.Pages.Related` will work as expected, but will create one additional inverted index. This should still be very fast, but worth having in mind, especially for bigger sites. + +{{% note %}} +We currently do not index **Page content**. We thought we would release something that will make most people happy before we start solving [Sherlock's last case](https://github.com/joearms/sherlock). +{{% /note %}} diff --git a/docs/content/en/content-management/sections.md b/docs/content/en/content-management/sections.md new file mode 100644 index 000000000..1b694ce44 --- /dev/null +++ b/docs/content/en/content-management/sections.md @@ -0,0 +1,161 @@ +--- +title: Sections +description: Organize content into sections. + +categories: [content management] +keywords: [lists,sections,content types,organization] +menu: + docs: + parent: content-management + weight: 120 +weight: 120 +toc: true +aliases: [/content/sections/] +--- + +## Overview + +A section is a top-level content directory, or any content directory with an _index.md file. A content directory with an _index.md file is also known as a [branch bundle](/getting-started/glossary/#branch-bundle). Section templates receive one or more page [collections](/getting-started/glossary/#collection) in [context](/getting-started/glossary/#context). + +{{% note %}} +Although top-level directories without _index.md files are sections, we recommend creating _index.md files in _all_ sections. +{{% /note %}} + +A typical site consists of one or more sections. For example: + +```text +content/ +├── articles/ <-- section (top-level directory) +│ ├── 2022/ +│ │ ├── article-1/ +│ │ │ ├── cover.jpg +│ │ │ └── index.md +│ │ └── article-2.md +│ └── 2023/ +│ ├── article-3.md +│ └── article-4.md +├── products/ <-- section (top-level directory) +│ ├── product-1/ <-- section (has _index.md file) +│ │ ├── benefits/ <-- section (has _index.md file) +│ │ │ ├── _index.md +│ │ │ ├── benefit-1.md +│ │ │ └── benefit-2.md +│ │ ├── features/ <-- section (has _index.md file) +│ │ │ ├── _index.md +│ │ │ ├── feature-1.md +│ │ │ └── feature-2.md +│ │ └── _index.md +│ └── product-2/ <-- section (has _index.md file) +│ ├── benefits/ <-- section (has _index.md file) +│ │ ├── _index.md +│ │ ├── benefit-1.md +│ │ └── benefit-2.md +│ ├── features/ <-- section (has _index.md file) +│ │ ├── _index.md +│ │ ├── feature-1.md +│ │ └── feature-2.md +│ └── _index.md +├── _index.md +└── about.md +``` + +The example above has two top-level sections: articles and products. None of the directories under articles are sections, while all of the directories under products are sections. A section within a section is a known as a nested section or subsection. + +## Explanation + +Sections and non-sections behave differently. + +||Sections|Non-sections +:--|:-:|:-: +Directory names become URL segments|:heavy_check_mark:|:heavy_check_mark: +Have logical ancestors and descendants|:heavy_check_mark:|:x: +Have list pages|:heavy_check_mark:|:x: + +With the file structure from the [example above](#overview): + +1. The list page for the articles section includes all articles, regardless of directory structure; none of the subdirectories are sections. + +1. The articles/2022 and articles/2023 directories do not have list pages; they are not sections. + +1. The list page for the products section, by default, includes product-1 and product-2, but not their descendant pages. To include descendant pages, use the `.RegularPagesRecursive` collection instead of the `.Pages` collection in the list template. See [details](/variables/page/#page-collections). + +1. All directories in the products section have list pages; each directory is a section. + +## Template selection + +Hugo has a defined [lookup order] to determine which template to use when rendering a page. The [lookup rules] consider the top-level section name; subsection names are not considered when selecting a template. + +With the file structure from the [example above](#overview): + +Content directory|List page template +:--|:-- +content/products|layouts/products/list.html +content/products/product-1|layouts/products/list.html +content/products/product-1/benefits|layouts/products/list.html + +Content directory|Single page template +:--|:-- +content/products|layouts/products/single.html +content/products/product-1|layouts/products/single.html +content/products/product-1/benefits|layouts/products/single.html + +If you need to use a different template for a subsection, specify `type` and/or `layout` in front matter. + +[lookup rules]: /templates/lookup-order/#lookup-rules +[lookup order]: /templates/lookup-order/ + +## Ancestors and descendants + +A section has one or more ancestors (including the home page), and zero or more descendants. With the file structure from the [example above](#overview): + +```text +content/products/product-1/benefits/benefit-1.md +``` + +The content file (benefit-1.md) has four ancestors: benefits, product-1, products, and the home page. This logical relationship allows us to use the `.Parent` and `.Ancestors` methods to traverse the site structure. + +For example, use the `.Ancestors` method to render breadcrumb navigation. + +{{< code file=layouts/partials/breadcrumb.html >}} +<nav aria-label="breadcrumb" class="breadcrumb"> + <ol> + {{ range .Ancestors.Reverse }} + <li> + <a href="{{ .RelPermalink }}">{{ .LinkTitle }}</a> + </li> + {{ end }} + <li class="active"> + <a aria-current="page" href="{{ .RelPermalink }}">{{ .LinkTitle }}</a> + </li> + </ol> +</nav> +{{< /code >}} + +With this CSS: + +```css +.breadcrumb ol { + padding-left: 0; +} + +.breadcrumb li { + display: inline; +} + +.breadcrumb li:not(:last-child)::after { + content: "»"; +} +``` + +Hugo renders this, where each breadcrumb is a link to the corresponding page: + +```text +Home » Products » Product 1 » Benefits » Benefit 1 +``` + +[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 diff --git a/docs/content/en/content-management/shortcodes.md b/docs/content/en/content-management/shortcodes.md new file mode 100644 index 000000000..bbc2b0cc8 --- /dev/null +++ b/docs/content/en/content-management/shortcodes.md @@ -0,0 +1,404 @@ +--- +title: 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 +weight: 100 +toc: true +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 + +Shortcodes using the `%` as the outer-most delimiter will be fully rendered when sent to the content renderer. This means that the rendered output from a shortcode can be part of the page's table of contents, footnotes, etc. + +### 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. + +loading +: `loading` 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="elephant.jpg" title="An elephant at sunset" */>}} +{{< /code >}} + +#### Example `figure` output + +```html +<figure> + <img src="elephant.jpg"> + <figcaption><h4>An elephant at sunset</h4></figcaption> +</figure> +``` + +### `gist` + +To display a GitHub [gist] with this URL: + +[gist]: https://docs.github.com/en/get-started/writing-on-github/editing-and-sharing-content-with-gists + +```text +https://gist.github.com/user/50a7482715eac222e230d1e64dd9a89b +``` + +Include this in your markdown: + +```text +{{</* gist user 50a7482715eac222e230d1e64dd9a89b */>}} +``` + +This will display all files in the gist alphabetically by file name. + +{{< gist jmooring 23932424365401ffa5e9d9810102a477 >}} + +To display a specific file within the gist: + +```text +{{</* gist user 23932424365401ffa5e9d9810102a477 list.html */>}} +``` + +Rendered: + +{{< gist jmooring 23932424365401ffa5e9d9810102a477 list.html >}} + +### `highlight` + +To display a highlighted code sample: + +```text +{{</* highlight go-html-template */>}} +{{ range .Pages }} + <h2><a href="{{ .RelPermalink }}">{{ .LinkTitle }}</a></h2> +{{ end }} +{{</* /highlight */>}} +``` + +Rendered: + +{{< highlight go-html-template >}} +{{ range .Pages }} + <h2><a href="{{ .RelPermalink }}">{{ .LinkTitle }}</a></h2> +{{ end }} +{{< /highlight >}} + +To specify one or more [highlighting options], include a quotation-encapsulated, comma-separated list: + +[highlighting options]: /functions/transform/highlight/ + +```text +{{</* highlight go-html-template "lineNos=inline, lineNoStart=42" */>}} +{{ range .Pages }} + <h2><a href="{{ .RelPermalink }}">{{ .LinkTitle }}</a></h2> +{{ end }} +{{</* /highlight */>}} +``` + +Rendered: + +{{< highlight go-html-template "lineNos=inline, lineNoStart=42" >}} +{{ range .Pages }} + <h2><a href="{{ .RelPermalink }}">{{ .LinkTitle }}</a></h2> +{{ end }} +{{< /highlight >}} + +### `instagram` + +The `instagram` shortcode uses Facebook's **oEmbed Read** feature. The Facebook [developer documentation] states: + +- This permission or feature requires successful completion of the App Review process before your app can access live data. [Learn More] +- This permission or feature is only available with business verification. You may also need to sign additional contracts before your app can access data. [Learn More Here] + +[developer documentation]: https://developers.facebook.com/docs/features-reference/oembed-read +[Learn More]: https://developers.facebook.com/docs/app-review +[Learn More Here]: https://developers.facebook.com/docs/development/release/business-verification + +You must obtain an Access Token to use the `instagram` shortcode. + +If your site configuration is private: + +{{< code-toggle file=hugo >}} +[services.instagram] +accessToken = 'xxx' +{{< /code-toggle >}} + +If your site configuration is _not_ private, set the Access Token with an environment variable: + +```sh +HUGO_SERVICES_INSTAGRAM_ACCESSTOKEN=xxx hugo --gc --minify +``` + +{{% note %}} +If you are using a Client Access Token, you must combine the Access Token with your App ID using a pipe symbol (`APPID|ACCESSTOKEN`). +{{% /note %}} + +To display an Instagram post with this URL: + +```text +https://www.instagram.com/p/BWNjjyYFxVx/ +``` + +Include this in your markdown: + +```text +{{</* instagram BWNjjyYFxVx */>}} +``` + +### `param` + +Gets a value from the current `Page's` parameters set in front matter, with a fallback to the site parameter value. It will log an `ERROR` if the parameter with the given key could not be found in either. + +```sh +{{</* param testparam */>}} +``` + +Since `testparam` is a parameter defined in front matter of this page with the value `Hugo Rocks!`, the above will print: + +{{< param testparam >}} + +To access deeply nested parameters, use "dot syntax", e.g: + +```sh +{{</* 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 %}} +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.org/blog/neat">Neat</a> +<a href="/about/#who">Who</a> +``` + +### `tweet` + +To display a Twitter post with this URL: + +```txt +https://twitter.com/SanDiegoZoo/status/1453110110599868418 +``` + +Include this in your markdown: + +```text +{{</* tweet user="SanDiegoZoo" id="1453110110599868418" */>}} +``` + +Rendered: + +{{< tweet user="SanDiegoZoo" id="1453110110599868418" >}} + +### `vimeo` + +To display a Vimeo video with this URL: + +```text +https://vimeo.com/channels/staffpicks/55073825 +``` + +Include this in your markdown: + +```text +{{</* vimeo 55073825 */>}} +``` + +Rendered: + +{{< vimeo 55073825 >}} + +{{% note %}} +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" */>}} +``` +{{% /note %}} + +### `youtube` + +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 configuration + +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/ +[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/shortcode/ +[shortcode template documentation]: /templates/shortcode-templates/ +[templatessection]: /templates/ +[Vimeo]: https://vimeo.com/ +[YouTube Videos]: https://www.youtube.com/ +[YouTube Input shortcode]: #youtube diff --git a/docs/content/en/content-management/static-files.md b/docs/content/en/content-management/static-files.md new file mode 100644 index 000000000..c1197ede1 --- /dev/null +++ b/docs/content/en/content-management/static-files.md @@ -0,0 +1,68 @@ +--- +title: 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 +weight: 200 +toc: true +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 +`staticDir` parameter in the [site configuration]. 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 file=hugo >}} +staticDir = ["static1", "static2"] + +[languages] +[languages.en] +staticDir2 = "static_en" +baseURL = "https://example.org/" +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 configuration]: /getting-started/configuration/#all-configuration-settings +[multihost setup]: /content-management/multilingual/#configure-multilingual-multihost diff --git a/docs/content/en/content-management/summaries.md b/docs/content/en/content-management/summaries.md new file mode 100644 index 000000000..22ed3fc81 --- /dev/null +++ b/docs/content/en/content-management/summaries.md @@ -0,0 +1,110 @@ +--- +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 +weight: 160 +toc: true +aliases: [/content/summaries/,/content-management/content-summaries/] +--- + +<!--more--> + +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 `<!--more-->` 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 %}} +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 `<!--more-->` (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/). + +{{% note %}} +Be careful to enter `<!--more-->` exactly; i.e., all lowercase and with no whitespace. +{{% /note %}} + +### 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 `<!--more-->` 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 + +{{% note %}} +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 `<!--more-->` summary divider Hugo will use the manual summary split method. +{{% /note %}} + +## 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/ diff --git a/docs/content/en/content-management/syntax-highlighting.md b/docs/content/en/content-management/syntax-highlighting.md new file mode 100644 index 000000000..62071cd46 --- /dev/null +++ b/docs/content/en/content-management/syntax-highlighting.md @@ -0,0 +1,138 @@ +--- +title: Syntax highlighting +description: Hugo comes with really fast syntax highlighting from Chroma. +categories: [content management] +keywords: [highlighting,chroma,code blocks,syntax] +menu: + docs: + parent: content-management + weight: 240 +weight: 240 +toc: true +aliases: [/extras/highlighting/,/extras/highlight/,/tools/syntax-highlighting/] +--- + +Hugo uses [Chroma](https://github.com/alecthomas/chroma) as its code highlighter; it is built in Go and is really, really fast. + +## Configure syntax highlighter + +See [Configure Highlight](/getting-started/configuration-markup#highlight). + +## Generate syntax highlighter CSS + +If you run with `markup.highlight.noClasses=false` in your site configuration, you need a style sheet. + +You can generate one with Hugo: + +```sh +hugo gen chromastyles --style=monokai > syntax.css +``` + +Run `hugo gen chromastyles -h` for more options. See https://xyproto.github.io/splash/docs/ for a gallery of available styles. + +## Highlight shortcode + +Highlighting is carried out via the built-in [`highlight` shortcode](/content-management/shortcodes/#highlight). It takes exactly one required parameter for the programming language to be highlighted and requires a closing shortcode. + +Options: + +* `linenos`: configure line numbers. Valid values are `true`, `false`, `table`, or `inline`. `false` will turn off line numbers if it's configured to be on in site configuration. `table` will give copy-and-paste friendly code blocks. +* `hl_lines`: lists a set of line numbers or line number ranges to be highlighted. +* `linenostart=199`: starts the line number count from 199. +* `anchorlinenos`: Configure anchors on line numbers. Valid values are `true` or `false`; +* `lineanchors`: Configure a prefix for the anchors on line numbers. Will be suffixed with `-`, so linking to the line number 1 with the option `lineanchors=prefix` adds the anchor `prefix-1` to the page. +* `hl_inline` Highlight inside a `<code>` (inline HTML element) tag. Valid values are `true` or `false`. The `code` tag will get a class with name `code-inline`. {{< new-in 0.101.0 >}} + +### Example: highlight shortcode + +```go-html-template +{{</* highlight go "linenos=table,hl_lines=8 15-17,linenostart=199" */>}} +// ... code +{{</* / highlight */>}} +``` + +Gives this: + +{{< highlight go "linenos=table,hl_lines=8 15-17,linenostart=199" >}} +// GetTitleFunc returns a func that can be used to transform a string to +// title case. +// +// The supported styles are +// +// - "Go" (strings.Title) +// - "AP" (see https://www.apstylebook.com/) +// - "Chicago" (see https://www.chicagomanualofstyle.org/home.html) +// +// If an unknown or empty style is provided, AP style is what you get. +func GetTitleFunc(style string) func(s string) string { + switch strings.ToLower(style) { + case "go": + return strings.Title + case "chicago": + return transform.NewTitleConverter(transform.ChicagoStyle) + default: + return transform.NewTitleConverter(transform.APStyle) + } +} +{{< / highlight >}} + +## Highlight Hugo/Go template code + +For highlighting Hugo/Go template code on your page, add `/*` after the opening double curly braces and `*/` before closing curly braces. + +``` go +{{</*/* myshortcode */*/>}} +``` + +Gives this: + +``` go +{{</* myshortcode */>}} +``` + +## Highlight template function + +See [Highlight](/functions/transform/highlight/). + +## Highlighting in code fences + +Highlighting in code fences is enabled by default. + +````txt +```go {linenos=table,hl_lines=[8,"15-17"],linenostart=199} +// ... code +``` +```` + +Gives this: + +```go {linenos=table,hl_lines=[8,"15-17"],linenostart=199} +// GetTitleFunc returns a func that can be used to transform a string to +// title case. +// +// The supported styles are +// +// - "Go" (strings.Title) +// - "AP" (see https://www.apstylebook.com/) +// - "Chicago" (see https://www.chicagomanualofstyle.org/home.html) +// +// If an unknown or empty style is provided, AP style is what you get. +func GetTitleFunc(style string) func(s string) string { + switch strings.ToLower(style) { + case "go": + return strings.Title + case "chicago": + return transform.NewTitleConverter(transform.ChicagoStyle) + default: + return transform.NewTitleConverter(transform.APStyle) + } +} +``` + +The options are the same as in the [highlighting shortcode](/content-management/syntax-highlighting/#highlight-shortcode), including `linenos=false`, but note the slightly different Markdown attribute syntax. + +## List of Chroma highlighting languages + +The full list of Chroma lexers and their aliases (which is the identifier used in the `highlight` template func or when doing highlighting in code fences): + +{{< chroma-lexers >}} diff --git a/docs/content/en/content-management/taxonomies.md b/docs/content/en/content-management/taxonomies.md new file mode 100644 index 000000000..94f2f6357 --- /dev/null +++ b/docs/content/en/content-management/taxonomies.md @@ -0,0 +1,188 @@ +--- +title: Taxonomies +description: Hugo includes support for user-defined taxonomies. +categories: [content management] +keywords: [taxonomies,metadata,front matter,terms] +menu: + docs: + parent: content-management + weight: 150 +weight: 150 +toc: true +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 + +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 + ... +``` + +## Default taxonomies + +Hugo natively supports taxonomies. + +Without adding a single line to your [site configuration] 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 config=taxonomies />}} + +If you do not want Hugo to create any taxonomies, set `disableKinds` in your [site configuration] to the following: + +{{< code-toggle file=hugo >}} +disableKinds = ["taxonomy","term"] +{{</ code-toggle >}} + +{{% include "content-management/_common/page-kinds.md" %}} + +### Default destinations + +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: + +* 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](#default-taxonomies) must be defined in your [site configuration] 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 file=hugo >}} +[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 configuration]. + +{{< code-toggle file=hugo >}} +[taxonomies] + tag = "tags" +{{</ code-toggle >}} + +If you want to disable all taxonomies altogether, see the use of `disableKinds` in [Hugo Taxonomy Defaults](#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. +{{% /note %}} + +## Add taxonomies to content + +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]. + +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 file=content/example.md fm=true >}} +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 >}} +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. + +## 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-toggle file=content/actors/bruce-willis/_index.md fm=true >}} +title: "Bruce Willis" +wikipedia: "https://en.wikipedia.org/wiki/Bruce_Willis" +{{< /code-toggle >}} + +[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 +[site configuration]: /getting-started/configuration/ diff --git a/docs/content/en/content-management/toc.md b/docs/content/en/content-management/toc.md new file mode 100644 index 000000000..69021ac45 --- /dev/null +++ b/docs/content/en/content-management/toc.md @@ -0,0 +1,117 @@ +--- +title: 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 +weight: 210 +toc: true +aliases: [/extras/toc/] +--- + +{{% note %}} + +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 traveling 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 an example of a very basic [single page template]: + +{{< code file=layout/_default/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 >}} +{{ 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] configuration 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 traveling 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/ diff --git a/docs/content/en/content-management/types.md b/docs/content/en/content-management/types.md new file mode 100644 index 000000000..67dbe1596 --- /dev/null +++ b/docs/content/en/content-management/types.md @@ -0,0 +1,20 @@ +--- +title: Content types +description: Hugo is built around content organized in sections. +categories: [content management] +keywords: [lists,sections,content types,types,organization] +menu: + docs: + parent: content-management + weight: 130 +weight: 130 +toc: true +aliases: [/content/types] +--- + +A **content type** is a way to organize your content. Hugo resolves the content type from either the `type` in front matter or, if not set, the first directory in the file path. E.g. `content/blog/my-first-event.md` will be of type `blog` if no `type` is set. + +A content type is used to + +- Determine how the content is rendered. See [Template Lookup Order](/templates/lookup-order/) and [Content Views](/templates/views) for more. +- Determine which [archetype](/content-management/archetypes/) template to use for new content. diff --git a/docs/content/en/content-management/urls.md b/docs/content/en/content-management/urls.md new file mode 100644 index 000000000..a91fe21c0 --- /dev/null +++ b/docs/content/en/content-management/urls.md @@ -0,0 +1,432 @@ +--- +title: URL management +description: Control the structure and appearance of URLs through front matter entries and settings in your site configuration. +categories: [content management] +keywords: [aliases,redirects,permalinks,urls] +menu: + docs: + parent: content-management + weight: 180 +weight: 180 +toc: true +aliases: [/extras/permalinks/,/extras/aliases/,/extras/urls/,/doc/redirects/,/doc/alias/,/doc/aliases/] +--- + +## Overview + +By default, when Hugo renders a page, the resulting URL matches the file path within the `content` directory. For example: + +```text +content/posts/post-1.md → https://example.org/posts/post-1/ +``` + +You can change the structure and appearance of URLs with front matter values and site configuration options. + +## Front matter + +### `slug` + +Set the `slug` in front matter to override the last segment of the path. The `slug` value does not affect section pages. + +{{< code-toggle file=content/posts/post-1.md fm=true >}} +title = 'My First Post' +slug = 'my-first-post' +{{< /code-toggle >}} + +The resulting URL will be: + +```text +https://example.org/posts/my-first-post/ +``` + +### `url` + +Set the `url` in front matter to override the entire path. Use this with either regular pages or section pages. + +With this front matter: + +{{< code-toggle file=content/posts/post-1.md fm=true >}} +title = 'My First Article' +url = '/articles/my-first-article' +{{< /code-toggle >}} + +The resulting URL will be: + +```text +https://example.org/articles/my-first-article/ +``` + +If you include a file extension: + +{{< code-toggle file=content/posts/post-1.md fm=true >}} +title = 'My First Article' +url = '/articles/my-first-article.html' +{{< /code-toggle >}} + +The resulting URL will be: + +```text +https://example.org/articles/my-first-article.html +``` + +In a monolingual site, a `url` value with or without a leading slash is relative to the `baseURL`. + +In a multilingual site: + +- A `url` value with a leading slash is relative to the `baseURL`. +- A `url` value without a leading slash is relative to the `baseURL` plus the language prefix. + +Site type|Front matter `url`|Resulting URL +:--|:--|:-- +monolingual|`/about`|`https://example.org/about/` +monolingual|`about`|`https://example.org/about/` +multilingual|`/about`|`https://example.org/about/` +multilingual|`about`|`https://example.org/de/about/` + +If you set both `slug` and `url` in front matter, the `url` value takes precedence. + +## Site configuration + +### Permalinks + +In your site configuration, define a URL pattern for each top-level section. Each URL pattern can target a given language and/or [page kind]. + +Front matter `url` values override the URL patterns defined in the `permalinks` section of your site configuration. + +[page kind]: /templates/section-templates/#page-kinds + +#### Monolingual examples {#permalinks-monolingual-examples} + +With this content structure: + +```text +content/ +├── posts/ +│ ├── bash-in-slow-motion.md +│ └── tls-in-a-nutshell.md +├── tutorials/ +│ ├── git-for-beginners.md +│ └── javascript-bundling-with-hugo.md +└── _index.md +``` + +Render tutorials under "training", and render the posts under "articles" with a date-base hierarchy: + +{{< code-toggle file=hugo >}} +[permalinks.page] +posts = '/articles/:year/:month/:slug/' +tutorials = '/training/:slug/' +[permalinks.section] +posts = '/articles/' +tutorials = '/training/' +{{< /code-toggle >}} + +The structure of the published site will be: + +```text +public/ +├── articles/ +│ ├── 2023/ +│ │ ├── 04/ +│ │ │ └── bash-in-slow-motion/ +│ │ │ └── index.html +│ │ └── 06/ +│ │ └── tls-in-a-nutshell/ +│ │ └── index.html +│ └── index.html +├── training/ +│ ├── git-for-beginners/ +│ │ └── index.html +│ ├── javascript-bundling-with-hugo/ +│ │ └── index.html +│ └── index.html +└── index.html +``` + +To create a date-based hierarchy for regular pages in the content root: + +{{< code-toggle file=hugo >}} +[permalinks.page] +"/" = "/:year/:month/:slug/" +{{< /code-toggle >}} + +Use the same approach with taxonomy terms. For example, to omit the taxonomy segment of the URL: + +{{< code-toggle file=hugo >}} +[permalinks.term] +'tags' = '/:slug/' +{{< /code-toggle >}} + +#### Multilingual example {#permalinks-multilingual-example} + +Use the `permalinks` configuration as a component of your localization strategy. + +With this content structure: + +```text +content/ +├── en/ +│ ├── books/ +│ │ ├── les-miserables.md +│ │ └── the-hunchback-of-notre-dame.md +│ └── _index.md +└── es/ + ├── books/ + │ ├── les-miserables.md + │ └── the-hunchback-of-notre-dame.md + └── _index.md +``` + +And this site configuration: + +{{< code-toggle file=hugo >}} +defaultContentLanguage = 'en' +defaultContentLanguageInSubdir = true + +[languages.en] +contentDir = 'content/en' +languageCode = 'en-US' +languageDirection = 'ltr' +languageName = 'English' +weight = 1 + +[languages.en.permalinks.page] +books = "/books/:slug/" + +[languages.en.permalinks.section] +books = "/books/" + +[languages.es] +contentDir = 'content/es' +languageCode = 'es-ES' +languageDirection = 'ltr' +languageName = 'Español' +weight = 2 + +[languages.es.permalinks.page] +books = "/libros/:slug/" + +[languages.es.permalinks.section] +books = "/libros/" +{{< /code-toggle >}} + +The structure of the published site will be: + +```text +public/ +├── en/ +│ ├── books/ +│ │ ├── les-miserables/ +│ │ │ └── index.html +│ │ ├── the-hunchback-of-notre-dame/ +│ │ │ └── index.html +│ │ └── index.html +│ └── index.html +├── es/ +│ ├── libros/ +│ │ ├── les-miserables/ +│ │ │ └── index.html +│ │ ├── the-hunchback-of-notre-dame/ +│ │ │ └── index.html +│ │ └── index.html +│ └── index.html +└── index.html +```` + +#### Tokens + +Use these tokens when defining the URL pattern. The `date` field in front matter determines the value of time-related tokens. + +`: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 file name if no slug is provided in the front matter) + +`:filename` +: the content's file name (without extension) + +For time-related values, you can also use the layout string components defined in Go's [time package]. For example: + +[time package]: https://pkg.go.dev/time#pkg-constants + +{{< code-toggle file=hugo >}} +permalinks: + posts: /:06/:1/:2/:title/ +{{< /code-toggle >}} + +### Appearance + +The appearance of a URL is either ugly or pretty. + +Type|Path|URL +:--|:--|:-- +ugly|content/about.md|`https://example.org/about.html` +pretty|content/about.md|`https://example.org/about/` + +By default, Hugo produces pretty URLs. To generate ugly URLs, change your site configuration: + +{{< code-toggle file=hugo >}} +uglyURLs = true +{{< /code-toggle >}} + +### Post-processing + +Hugo provides two mutually exclusive configuration options to alter URLs _after_ it renders a page. + +#### Canonical URLs + +{{% note %}} +This is a legacy configuration option, superseded by template functions and markdown render hooks, and will likely be [removed in a future release]. + +[removed in a future release]: https://github.com/gohugoio/hugo/issues/4733 +{{% /note %}} + +If enabled, Hugo performs a search and replace _after_ it renders the page. It searches for site-relative URLs (those with a leading slash) associated with `action`, `href`, `src`, `srcset`, and `url` attributes. It then prepends the `baseURL` to create absolute URLs. + +```html +<a href="/about"> → <a href="https://example.org/about/"> +<img src="/a.gif"> → <img src="https://example.org/a.gif"> +``` + +This is an imperfect, brute force approach that can affect content as well as HTML attributes. As noted above, this is a legacy configuration option that will likely be removed in a future release. + +To enable: + +{{< code-toggle file=hugo >}} +canonifyURLs = true +{{< /code-toggle >}} + +#### Relative URLs + +{{% note %}} +Do not enable this option unless you are creating a serverless site, navigable via the file system. +{{% /note %}} + +If enabled, Hugo performs a search and replace _after_ it renders the page. It searches for site-relative URLs (those with a leading slash) associated with `action`, `href`, `src`, `srcset`, and `url` attributes. It then transforms the URL to be relative to the current page. + +For example, when rendering `content/posts/post-1`: + +```html +<a href="/about"> → <a href="../../about"> +<img src="/a.gif"> → <img src="../../a.gif"> +``` + +This is an imperfect, brute force approach that can affect content as well as HTML attributes. As noted above, do not enable this option unless you are creating a serverless site. + +To enable: + +{{< code-toggle file=hugo >}} +relativeURLs = true +{{< /code-toggle >}} + +## Aliases + +Create redirects from old URLs to new URLs with aliases: + +- An alias with a leading slash is relative to the `baseURL` +- An alias without a leading slash is relative to the current directory + +### Examples {#alias-examples} + +Change the file name of an existing page, and create an alias from the previous URL to the new URL: + +{{< code-toggle file=content/posts/new-file-name.md >}} +aliases = ['/posts/previous-file-name'] +{{< /code-toggle >}} + +Each of these directory-relative aliases is equivalent to the site-relative alias above: + +- `previous-file-name` +- `./previous-file-name` +- `../posts/previous-file-name` + +You can create more than one alias to the current page: + +{{< code-toggle file=content/posts/new-file-name.md >}} +aliases = ['previous-file-name','original-file-name'] +{{< /code-toggle >}} + +In a multilingual site, use a directory-relative alias, or include the language prefix with a site-relative alias: + +{{< code-toggle file=content/posts/new-file-name.de.md >}} +aliases = ['/de/posts/previous-file-name'] +{{< /code-toggle >}} + +### How aliases work + +Using the first example above, Hugo generates the following site structure: + +```text +public/ +├── posts/ +│ ├── new-file-name/ +│ │ └── index.html +│ ├── previous-file-name/ +│ │ └── index.html +│ └── index.html +└── index.html +``` + +The alias from the previous URL to the new URL is a client-side redirect: + +{{< code file=posts/previous-file-name/index.html >}} +<!DOCTYPE html> +<html lang="en-us"> + <head> + <title>https://example.org/posts/new-file-name/</title> + <link rel="canonical" href="https://example.org/posts/new-file-name/"> + <meta name="robots" content="noindex"> + <meta charset="utf-8"> + <meta http-equiv="refresh" content="0; url=https://example.org/posts/new-file-name/"> + </head> +</html> +{{< /code >}} + +Collectively, the elements in the `head` section: + +- Tell search engines that the new URL is canonical +- Tell search engines not to index the previous URL +- Tell the browser to redirect to the new URL + +Hugo renders alias files before rendering pages. A new page with the previous file name will overwrite the alias, as expected. + +### Customize + +Create a new template (`layouts/alias.html`) to customize the content of the alias files. The template receives the following context: + +Permalink +: the link to the page being aliased + +Page +: the Page data for the page being aliased diff --git a/docs/content/en/contribute/_index.md b/docs/content/en/contribute/_index.md new file mode 100644 index 000000000..ca7a18c36 --- /dev/null +++ b/docs/content/en/contribute/_index.md @@ -0,0 +1,16 @@ +--- +title: Contribute to the Hugo project +linkTitle: Overview +description: Contribute to Hugo development, documentation, and themes. +categories: [] +keywords: [] +menu: + docs: + identifier: contribute-overview + parent: contribute + weight: 10 +weight: 10 +aliases: [/tutorials/how-to-contribute-to-hugo/,/community/contributing/] +--- + +Hugo relies heavily on the enthusiasm and participation of the open-source community. We need your support. diff --git a/docs/content/en/contribute/development.md b/docs/content/en/contribute/development.md new file mode 100644 index 000000000..b4de88256 --- /dev/null +++ b/docs/content/en/contribute/development.md @@ -0,0 +1,430 @@ +--- +title: Development +description: Contribute to the development of Hugo. +categories: [contribute] +keywords: [development] +menu: + docs: + parent: contribute + weight: 20 +weight: 20 +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 %}} +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: + +{{% note %}} +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. +{{% /note %}} + +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: + +{{% note %}} +A fork is a copy of a repository. Forking a repository allows you to freely experiment with changes without affecting the original project. +{{% /note %}} + +#### 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 [email protected]:digitalcraftsman/hugo.git (fetch) +digitalcraftsman [email protected]: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 + +{{% note %}} +Modifications such as those described in this section can have serious unintended consequences. Skip this section if you're not sure! +{{% /note %}} + +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 template function 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 template function 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 template function 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.golang-book.com/guides/machine_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 diff --git a/docs/content/en/contribute/documentation.md b/docs/content/en/contribute/documentation.md new file mode 100644 index 000000000..862df619f --- /dev/null +++ b/docs/content/en/contribute/documentation.md @@ -0,0 +1,371 @@ +--- +title: Documentation +description: Help us to improve the documentation by identifying issues and suggesting changes. +categories: [contribute] +keywords: [documentation] +menu: + docs: + parent: contribute + weight: 30 +weight: 30 +toc: true +aliases: [/contribute/docs/] +--- + +## Introduction + +We welcome corrections and improvements to the documentation. Please note that the documentation resides in its own repository, separate from the project repository. + +For corrections and improvements to the current documentation, please submit issues and pull requests to the [documentation repository]. + +For documentation related to a new feature, please include the documentation changes when you submit a pull request to the [project repository]. + +## Guidelines + +### Markdown + +Please follow these markdown guidelines: + +- Use [ATX] headings, not [setext] headings, levels 2 through 4 +- Use [fenced code blocks], not [indented code blocks] +- Use hyphens, not asterisks, with unordered [list items] +- Use the [note shortcode] instead of blockquotes +- Do not mix [raw HTML] within markdown +- Do not use bold text instead of a heading or description term (`dt`) +- Remove consecutive blank lines (maximum of two) +- Remove trailing spaces + +### Style + +Although we do not strictly adhere to the [Microsoft Writing Style Guide], it is an excellent resource for questions related to style, grammar, and voice. + +#### Terminology + +Please link to the [glossary of terms] when necessary, and use the terms consistently throughout the documentation. Of special note: + +- The term "front matter" is two words unless you are referring to the configuration key +- Use the word "map" instead of "dictionary" +- Use the word "flag" instead of "option" when referring to a command line flag + +#### Page titles and headings + +Please follow these guidelines for page titles and headings: + +- Use sentence-style capitalization +- Avoid markdown in headings and page titles +- Shorter is better + +#### Use active voice with present tense + +In software documentation, passive voice is unavoidable in some cases. Please use active voice when possible. + +No → With Hugo you can build a static site.\ +Yes → Build a static site with Hugo. + +No → This will cause Hugo to generate HTML files in the public directory.\ +Yes → Hugo generates HTML files in the public directory. + +#### Use second person instead of third person + +No → Users should exercise caution when deleting files.\ +Better → You must be cautious when deleting files.\ +Best → Be cautious when deleting files. + +#### Avoid adverbs when possible + +No → Hugo is extremely fast.\ +Yes → Hugo is fast. + +{{% note %}} +"It's an adverb, Sam. It's a lazy tool of a weak mind." (Outbreak, 1995). +{{% /note %}} + +#### Miscellaneous + +Other guidelines to consider: + +- Do not place list items directly under a heading; include an introductory sentence or phrase before the list. +- Avoid use of **bold** text. Use the [note shortcode] to draw attention to important content. +- Do not place description terms (`dt`) within backticks unless required for syntactic clarity. +- Do not use Hugo's `ref` or `relref` shortcodes. We use a link render hook to resolve and validate link destinations, including fragments. +- Shorter is better. If there is more than one way to do something, describe the current best practice. For example, avoid phrases such as "you can also do..." and "in older versions you had to..." +- When including code samples, use short snippets that demonstrate the concept. +- The Hugo user community is global; use [basic english](https://simple.wikipedia.org/wiki/Basic_English) when possible. + +#### Level 6 markdown headings + +Level 6 markdown headings are styled as `dt` elements. This was implemented to support a [glossary] with linkable terms. + +[glossary]: /getting-started/glossary + +## Code examples + +Indent code by two spaces. With examples of template code, include a space after opening action delimiters, and include a space before closing action delimiters. + +### Fenced code blocks + +Always include the language code when using a fenced code block: + +````text +```go-html-template +{{ if eq $foo "bar" }} + {{ print "foo is bar" }} +{{ end }} +``` +```` + +Rendered: + +```go-html-template +{{ if eq $foo "bar" }} + {{ print "foo is bar" }} +{{ end }} +``` + +### Shortcode calls + +Use this syntax to include shortcodes calls within your code examples: + +```text +{{</*/* foo */*/>}} +{{%/*/* foo */*/%}} +``` + +Rendered: + +```text +{{</* foo */>}} +{{%/* foo */%}} +``` + +### Site configuration + +Use the [code-toggle shortcode] to include site configuration examples: + +```text +{{</* code-toggle file=hugo */>}} +baseURL = 'https://example.org/' +languageCode = 'en-US' +title = 'My Site' +{{</* /code-toggle */>}} +``` + +Rendered: + +{{< code-toggle file=hugo >}} +baseURL = 'https://example.org/' +languageCode = 'en-US' +title = 'My Site' +{{< /code-toggle >}} + +### Front matter + +Use the [code-toggle shortcode] to include front matter examples: + +```text +{{</* code-toggle file=content/posts/my-first-post.md fm=true */>}} +title = 'My first post' +date = 2023-11-09T12:56:07-08:00 +draft = false +{{</* /code-toggle */>}} +``` + +Rendered: + +{{< code-toggle file=content/posts/my-first-post.md fm=true >}} +title = 'My first post' +date = 2023-11-09T12:56:07-08:00 +draft = false +{{< /code-toggle >}} + +### Other code examples + +Use the [code shortcode] for other code examples that require a file name: + +```text +{{</* code file=layouts/_default/single.html */>}} +{{ range .Site.RegularPages }} + <h2><a href="{{ .RelPermalink }}">{{ .LinkTitle }}</a></h2> +{{ end }} +{{</* /code */>}} +``` + +Rendered: + +{{< code file=layouts/_default/single.html >}} +{{ range .Site.RegularPages }} + <h2><a href="{{ .RelPermalink }}">{{ .LinkTitle }}</a></h2> +{{ end }} +{{< /code >}} + +## Shortcodes + +These shortcodes are commonly used throughout the documentation. Other shortcodes are available for specialized use. + +### deprecated-in + +Use the “deprecated-in” shortcode to indicate that a feature is deprecated: + +```text +{{%/* deprecated-in 0.120.0 */%}} +Use [`hugo.IsServer`] instead. + +[`hugo.IsServer`]: /functions/hugo/isserver +{{%/* /deprecated-in */%}} +``` + +Rendered: + +{{% deprecated-in 0.120.0 %}} +Use [`hugo.IsServer`] instead. + +[`hugo.IsServer`]: /functions/hugo/isserver +{{% /deprecated-in %}} + +### code + +Use the "code" shortcode for other code examples that require a file name. See the [code examples] above. This shortcode takes these arguments: + +copy +: (`bool`) Whether to display a copy-to-clipboard button. Default is `false`. + +file +: (`string`) The file name to display. + +lang +: (`string`) The code language. If you do not provide a `lang` argument, the code language is determined by the file extension. If the file extension is "html", sets the code language to `go-html-template`. Default is `text`. + +### code-toggle + +Use the "code-toggle" shortcode to display examples of site configuration, front matter, or data files. See the [code examples] above. This shortcode takes these arguments: + +copy +: (`bool`) Whether to display a copy-to-clipboard button. Default is `false`. + +file +: (`string`) The file name to display. Omit the file extension for site configuration examples. + +fm +: (`bool`) Whether the example is front matter. Default is `false`. + +### new-in + +Use the "new-in" shortcode to indicate a new feature: + +```text +{{</* new-in 0.120.0 */>}} +``` + +Rendered: + +{{< new-in 0.120.0 >}} + +### note + +Use the "note" shortcode with `{{%/* */%}}` delimiters to call attention to important content: + +```text +{{%/* note */%}} +Use the [`math.Mod`] function to control... + +[`math.Mod`]: /functions/math/mod/ +{{%/* /note */%}} +``` + +Rendered: + +{{% note %}} +Use the [`math.Mod`] function to control... + +[`math.Mod`]: /functions/math/mod/ +{{% /note %}} + +## New features + +Use the "new-in" shortcode to indicate a new feature: + +{{< code file=content/something/foo.md lang=text >}} +{{</* new-in 0.120.0 */>}} +{{< /code >}} + +The "new in" label will be hidden if the specified version is older than a predefined threshold, based on differences in major and minor versions. See [details](https://github.com/gohugoio/hugoDocs/blob/master/layouts/shortcodes/new-in.html). + +## Deprecated features + +Use the "deprecated-in" shortcode to indicate that a feature is deprecated: + +{{< code file=content/something/foo.md >}} +{{%/* deprecated-in 0.120.0 */%}} +Use [`hugo.IsServer`] instead. + +[`hugo.IsServer`]: /functions/hugo/isserver +{{%/* /deprecated-in */%}} +{{< /code >}} + +When deprecating a function or method, add this to front matter: + +{{< code-toggle file=content/something/foo.md fm=true >}} +expiryDate: 2024-10-30 +{{< /code-toggle >}} + +Set the `expiryDate` to one year from the date of deprecation, and add a brief front matter comment to explain the setting. + +## GitHub workflow + +{{% note %}} +This section assumes that you have a working knowledge of Git and GitHub, and are comfortable working on the command line. +{{% /note %}} + +Use this workflow to create and submit pull requests. + +Step 1 +: Fork the [documentation repository]. + +Step 2 +: Clone your fork. + +Step 3 +: Create a new branch with a descriptive name. + +```sh +git checkout -b fix/typos-shortcode-templates +``` + +Step 4 +: Make changes. + +Step 5 +: Commit your changes with a descriptive commit message, typically 50 characters or less. Add the "Closes" keyword if your change addresses one or more open [issues]. + +```sh +git commit -m "Fix typos on the shortcode templates page + +Closes #1234 +Closes #5678" +``` + +Step 6 +: Push the new branch to your fork of the documentation repository. + +Step 7 +: Visit the [documentation repository] and create a pull request (PR). + +Step 8 +: A project maintainer will review your PR and may request changes. You may delete your branch after the maintainer merges your PR. + +[ATX]: https://spec.commonmark.org/0.30/#atx-headings +[Microsoft Writing Style Guide]: https://learn.microsoft.com/en-us/style-guide/welcome/ +[basic english]: https://simple.wikipedia.org/wiki/Basic_English +[code examples]: #code-examples +[code shortcode]: #code +[code-toggle shortcode]: #code-toggle +[documentation repository]: https://github.com/gohugoio/hugoDocs/ +[fenced code blocks]: https://spec.commonmark.org/0.30/#fenced-code-blocks +[glossary of terms]: /getting-started/glossary/ +[indented code blocks]: https://spec.commonmark.org/0.30/#indented-code-blocks +[issues]: https://github.com/gohugoio/hugoDocs/issues +[list items]: https://spec.commonmark.org/0.30/#list-items +[note shortcode]: #note +[project repository]: https://github.com/gohugoio/hugo +[raw HTML]: https://spec.commonmark.org/0.30/#raw-html +[setext]: https://spec.commonmark.org/0.30/#setext-heading diff --git a/docs/content/en/contribute/themes.md b/docs/content/en/contribute/themes.md new file mode 100644 index 000000000..34056c35a --- /dev/null +++ b/docs/content/en/contribute/themes.md @@ -0,0 +1,30 @@ +--- +title: Themes +description: If you've built a Hugo theme and want to contribute back to the Hugo Community, please share it with us. +categories: [contribute] +keywords: [themes] +menu: + docs: + parent: contribute + weight: 40 +weight: 40 +aliases: [/contribute/theme/] +--- + +Visit [themes.gohugo.io] to browse a collection of themes created by the Hugo community. + +To submit your theme: + +1. Read the [submission guidelines] +2. Open a pull request in the [themes repository] + +Other useful theme directories: + +- [jamstack.club] +- [jamstackthemes.dev] + +[jamstack.club]: https://jamstack.club/#ssg=hugo +[jamstackthemes.dev]: https://jamstackthemes.dev/ssg/hugo +[submission guidelines]: https://github.com/gohugoio/hugoThemesSiteBuilder/tree/main#readme +[themes repository]: https://github.com/gohugoio/hugoThemesSiteBuilder +[themes.gohugo.io]: https://themes.gohugo.io/ diff --git a/docs/content/en/documentation.md b/docs/content/en/documentation.md new file mode 100644 index 000000000..da7b3ef9b --- /dev/null +++ b/docs/content/en/documentation.md @@ -0,0 +1,22 @@ +--- +title: Hugo Documentation +linkTitle: Hugo +description: Hugo is the world's fastest static website engine. It's written in Go (aka Golang) and developed by bep, spf13 and friends. +menu: + main: + weight: 1 +weight: 1 +layout: documentation-home +--- + +A fast and flexible [static site generator] built with love by [bep], [spf13], and [friends] in [Go]. + +Hugo is optimized for speed and designed for flexibility. With its advanced templating system and fast asset pipelines, Hugo renders a complete site in seconds, often less. + +[bep]: https://github.com/bep +[spf13]: https://github.com/spf13 +[friends]: https://github.com/gohugoio/hugo/graphs/contributors +[go]: https://go.dev/ +[static site generator]: https://en.wikipedia.org/wiki/Static_site_generator + +Below you will find some of the most common and helpful pages from our documentation. diff --git a/docs/content/en/featured.png b/docs/content/en/featured.png Binary files differnew file mode 100644 index 000000000..09953aed9 --- /dev/null +++ b/docs/content/en/featured.png diff --git a/docs/content/en/functions/_common/_index.md b/docs/content/en/functions/_common/_index.md new file mode 100644 index 000000000..47d5812fb --- /dev/null +++ b/docs/content/en/functions/_common/_index.md @@ -0,0 +1,13 @@ +--- +cascade: + _build: + list: never + publishResources: false + render: never +--- + +<!-- +Files within this headless branch bundle are markdown snippets. Each file must contain front matter delimiters, though front matter fields are not required. + +Include the rendered content using the "include" shortcode. +--> diff --git a/docs/content/en/functions/_common/glob-patterns.md b/docs/content/en/functions/_common/glob-patterns.md new file mode 100644 index 000000000..3b0813f6f --- /dev/null +++ b/docs/content/en/functions/_common/glob-patterns.md @@ -0,0 +1,23 @@ +--- +# Do not remove front matter. +--- + +Path|Pattern|Match +:--|:--|:-- +`images/foo/a.jpg`|`images/foo/*.jpg`|`true` +`images/foo/a.jpg`|`images/foo/*.*`|`true` +`images/foo/a.jpg`|`images/foo/*`|`true` +`images/foo/a.jpg`|`images/*/*.jpg`|`true` +`images/foo/a.jpg`|`images/*/*.*`|`true` +`images/foo/a.jpg`|`images/*/*`|`true` +`images/foo/a.jpg`|`*/*/*.jpg`|`true` +`images/foo/a.jpg`|`*/*/*.*`|`true` +`images/foo/a.jpg`|`*/*/*`|`true` +`images/foo/a.jpg`|`**/*.jpg`|`true` +`images/foo/a.jpg`|`**/*.*`|`true` +`images/foo/a.jpg`|`**/*`|`true` +`images/foo/a.jpg`|`**`|`true` +`images/foo/a.jpg`|`*/*.jpg`|`false` +`images/foo/a.jpg`|`*.jpg`|`false` +`images/foo/a.jpg`|`*.*`|`false` +`images/foo/a.jpg`|`*`|`false` diff --git a/docs/content/en/functions/_common/locales.md b/docs/content/en/functions/_common/locales.md new file mode 100644 index 000000000..fd8415781 --- /dev/null +++ b/docs/content/en/functions/_common/locales.md @@ -0,0 +1,10 @@ +--- +# Do not remove front matter. +--- + +{{% note %}} + +Localization of dates, currencies, numbers, and percentages is performed by the [gohugoio/locales] package. The language tag of the current site must match one of the listed locales. + +[gohugoio/locales]: https://github.com/gohugoio/locales +{{% /note %}} diff --git a/docs/content/en/functions/_common/regular-expressions.md b/docs/content/en/functions/_common/regular-expressions.md new file mode 100644 index 000000000..48e020ac6 --- /dev/null +++ b/docs/content/en/functions/_common/regular-expressions.md @@ -0,0 +1,12 @@ +--- +# Do not remove front matter. +--- + +When specifying the regular expression, use a raw [string literal] (backticks) instead of an interpreted string literal (double quotes) to simplify the syntax. With an interpreted string literal you must escape backslashes. + +Go's regular expression package implements the [RE2 syntax]. The RE2 syntax is a subset of that accepted by [PCRE], roughly speaking, and with various [caveats]. Note that the RE2 `\C` escape sequence is not supported. + +[caveats]: https://swtch.com/~rsc/regexp/regexp3.html#caveats +[PCRE]: https://www.pcre.org/ +[RE2 syntax]: https://github.com/google/re2/wiki/Syntax/ +[string literal]: https://go.dev/ref/spec#String_literals diff --git a/docs/content/en/functions/_common/time-layout-string.md b/docs/content/en/functions/_common/time-layout-string.md new file mode 100644 index 000000000..827dc9894 --- /dev/null +++ b/docs/content/en/functions/_common/time-layout-string.md @@ -0,0 +1,46 @@ +--- +# Do not remove front matter. +--- + +Format a `time.Time` value based on [Go's reference time]: + +[Go's reference time]: https://pkg.go.dev/time#pkg-constants + +```text +Mon Jan 2 15:04:05 MST 2006 +``` + +Create a layout string using these components: + +Description|Valid components +:--|:-- +Year|`"2006" "06"` +Month|`"Jan" "January" "01" "1"` +Day of the week|`"Mon" "Monday"` +Day of the month|`"2" "_2" "02"` +Day of the year|`"__2" "002"` +Hour|`"15" "3" "03"` +Minute|`"4" "04"` +Second|`"5" "05"` +AM/PM mark|`"PM"` +Time zone offsets|`"-0700" "-07:00" "-07" "-070000" "-07:00:00"` + +Replace the sign in the layout string with a Z to print Z instead of an offset for the UTC zone. + +Description|Valid components +:--|:-- +Time zone offsets|`"Z0700" "Z07:00" "Z07" "Z070000" "Z07:00:00"` + +```go-html-template +{{ $t := "2023-01-27T23:44:58-08:00" }} +{{ $t = time.AsTime $t }} +{{ $t = $t.Format "Jan 02, 2006 3:04 PM Z07:00" }} + +{{ $t }} → Jan 27, 2023 11:44 PM -08:00 +``` + +Strings such as `PST` and `CET` are not time zones. They are time zone _abbreviations_. + +Strings such as `-07:00` and `+01:00` are not time zones. They are time zone _offsets_. + +A time zone is a geographic area with the same local time. For example, the time zone abbreviated by `PST` and `PDT` (depending on Daylight Savings Time) is `America/Los_Angeles`. diff --git a/docs/content/en/functions/_index.md b/docs/content/en/functions/_index.md new file mode 100644 index 000000000..b4b58eada --- /dev/null +++ b/docs/content/en/functions/_index.md @@ -0,0 +1,17 @@ +--- +title: Functions +linkTitle: Overview +description: A list of Hugo template functions including examples. +categories: [] +keywords: [] +menu: + docs: + identifier: functions-overview + parent: functions + weight: 10 +weight: 10 +showSectionMenu: true +aliases: [/layout/functions/,/templates/functions] +--- + +Use these functions within your templates and archetypes. diff --git a/docs/content/en/functions/cast/ToFloat.md b/docs/content/en/functions/cast/ToFloat.md new file mode 100644 index 000000000..51bc908b6 --- /dev/null +++ b/docs/content/en/functions/cast/ToFloat.md @@ -0,0 +1,48 @@ +--- +title: cast.ToFloat +description: Converts a value to a decimal floating-point number (base 10). +categories: [] +keywords: [] +action: + aliases: [float] + related: + - functions/cast/ToInt + - functions/cast/ToString + returnType: float64 + signatures: [cast.ToFloat INPUT] +aliases: [/functions/float] +--- + +With a decimal (base 10) input: + +```go-html-template +{{ float 11 }} → 11 (float64) +{{ float "11" }} → 11 (float64) + +{{ float 11.1 }} → 11.1 (float64) +{{ float "11.1" }} → 11.1 (float64) + +{{ float 11.9 }} → 11.9 (float64) +{{ float "11.9" }} → 11.9 (float64) +``` + +With a binary (base 2) input: + +```go-html-template +{{ float 0b11 }} → 3 (float64) +``` + +With an octal (base 8) input (use either notation): + +```go-html-template +{{ float 011 }} → 9 (float64) +{{ float "011" }} → 11 (float64) + +{{ float 0o11 }} → 9 (float64) +``` + +With a hexadecimal (base 16) input: + +```go-html-template +{{ float 0x11 }} → 17 (float64) +``` diff --git a/docs/content/en/functions/cast/ToInt.md b/docs/content/en/functions/cast/ToInt.md new file mode 100644 index 000000000..f82f029d5 --- /dev/null +++ b/docs/content/en/functions/cast/ToInt.md @@ -0,0 +1,53 @@ +--- +title: cast.ToInt +description: Converts a value to a decimal integer (base 10). +keywords: [] +action: + aliases: [int] + related: + - functions/cast/ToFloat + - functions/cast/ToString + returnType: int + signatures: [cast/ToInt INPUT] +aliases: [/functions/int] +--- + +With a decimal (base 10) input: + +```go-html-template +{{ int 11 }} → 11 (int) +{{ int "11" }} → 11 (int) + +{{ int 11.1 }} → 11 (int) +{{ int 11.9 }} → 11 (int) +``` + +With a binary (base 2) input: + +```go-html-template +{{ int 0b11 }} → 3 (int) +{{ int "0b11" }} → 3 (int) +``` + +With an octal (base 8) input (use either notation): + +```go-html-template +{{ int 011 }} → 9 (int) +{{ int "011" }} → 9 (int) + +{{ int 0o11 }} → 9 (int) +{{ int "0o11" }} → 9 (int) +``` + +With a hexadecimal (base 16) input: + +```go-html-template +{{ int 0x11 }} → 17 (int) +{{ int "0x11" }} → 17 (int) +``` + +{{% note %}} +Values with a leading zero are octal (base 8). When casting a string representation of a decimal (base 10) number, remove leading zeros: + +`{{ strings/TrimLeft "0" "0011" | int }} → 11` +{{% /note %}} diff --git a/docs/content/en/functions/cast/ToString.md b/docs/content/en/functions/cast/ToString.md new file mode 100644 index 000000000..a701c9421 --- /dev/null +++ b/docs/content/en/functions/cast/ToString.md @@ -0,0 +1,51 @@ +--- +title: cast.ToString +description: Converts a value to a string. +categories: [] +keywords: [] +action: + aliases: [string] + related: + - functions/cast/ToFloat + - functions/cast/ToInt + returnType: string + signatures: [cast.ToString INPUT] +aliases: [/functions/string] +--- + +With a decimal (base 10) input: + +```go-html-template +{{ string 11 }} → 11 (string) +{{ string "11" }} → 11 (string) + +{{ string 11.1 }} → 11.1 (string) +{{ string "11.1" }} → 11.1 (string) + +{{ string 11.9 }} → 11.9 (string) +{{ string "11.9" }} → 11.9 (string) +``` + +With a binary (base 2) input: + +```go-html-template +{{ string 0b11 }} → 3 (string) +{{ string "0b11" }} → 0b11 (string) +``` + +With an octal (base 8) input (use either notation): + +```go-html-template +{{ string 011 }} → 9 (string) +{{ string "011" }} → 011 (string) + +{{ string 0o11 }} → 9 (string) +{{ string "0o11" }} → 0o11 (string) +``` + +With a hexadecimal (base 16) input: + +```go-html-template +{{ string 0x11 }} → 17 (string) +{{ string "0x11" }} → 0x11 (string) +``` diff --git a/docs/content/en/functions/cast/_index.md b/docs/content/en/functions/cast/_index.md new file mode 100644 index 000000000..82389237a --- /dev/null +++ b/docs/content/en/functions/cast/_index.md @@ -0,0 +1,12 @@ +--- +title: Cast functions +linkTitle: cast +description: Template functions to cast a value from one data type to another. +categories: [] +keywords: [] +menu: + docs: + parent: functions +--- + +Use these functions to cast a value from one data type to another. diff --git a/docs/content/en/functions/collections/After.md b/docs/content/en/functions/collections/After.md new file mode 100644 index 000000000..0cf25c7dd --- /dev/null +++ b/docs/content/en/functions/collections/After.md @@ -0,0 +1,71 @@ +--- +title: collections.After +description: Slices an array to the items after the Nth item. +categories: [] +keywords: [] +action: + aliases: [after] + related: + - functions/collections/First + - functions/collections/Last + returnType: any + signatures: [collections.After INDEX COLLECTION] +aliases: [/functions/after] +--- + +The following shows `after` being used in conjunction with the [`slice`]function: + +```go-html-template +{{ $data := slice "one" "two" "three" "four" }} +<ul> + {{ range after 2 $data }} + <li>{{ . }}</li> + {{ end }} +</ul> +``` + +The template above is rendered to: + +```html +<ul> + <li>three</li> + <li>four</li> +</ul> +``` + +## Example of `after` with `first`: 2nd–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 >}} +{{ define "main" }} + <section class="row featured-article"> + <h2>Featured Article</h2> + {{ range first 1 .Pages.ByPublishDate.Reverse }} + <header> + <h3><a href="{{ .RelPermalink }}">{{ .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="{{ .RelPermalink }}">{{ .Title }}</a></h3> + </header> + <p>{{ .Description }}</p> + </section> + {{ end }} + </div> +{{ end }} +{{< /code >}} + +[`first`]: /functions/collections/first +[list/section page]: /templates/section-templates +[lists]: /templates/lists/#sort-content +[`slice`]: /functions/collections/slice/ diff --git a/docs/content/en/functions/collections/Append.md b/docs/content/en/functions/collections/Append.md new file mode 100644 index 000000000..cb29dc2f2 --- /dev/null +++ b/docs/content/en/functions/collections/Append.md @@ -0,0 +1,101 @@ +--- +title: collections.Append +description: Appends one or more elements to a slice and returns the resulting slice. +categories: [] +keywords: [] +action: + aliases: [append] + related: + - functions/collections/Merge + returnType: any + signatures: + - collections.Append ELEMENT [ELEMENT...] COLLECTION + - collections.Append COLLECTION1 COLLECTION2 +aliases: [/functions/append] +--- + +This function appends all elements, excluding the last, to the last element. This allows [pipe](/getting-started/glossary/#pipeline) constructs as shown below. + +Append a single element to a slice: + +```go-html-template +{{ $s := slice "a" "b" }} +{{ $s }} → [a b] + +{{ $s = $s | append "c" }} +{{ $s }} → [a b c] +``` + +Append two elements to a slice: + +```go-html-template +{{ $s := slice "a" "b" }} +{{ $s }} → [a b] + +{{ $s = $s | append "c" "d" }} +{{ $s }} → [a b c d] +``` + +Append two elements, as a slice, to a slice. This produces the same result as the previous example: + +```go-html-template +{{ $s := slice "a" "b" }} +{{ $s }} → [a b] + +{{ $s = $s | append (slice "c" "d") }} +{{ $s }} → [a b c d] +``` + +Start with an empty slice: + +```go-html-template +{{ $s := slice }} +{{ $s }} → [] + +{{ $s = $s | append "a" }} +{{ $s }} → [a] + +{{ $s = $s | append "b" "c" }} +{{ $s }} → [a b c] + +{{ $s = $s | append (slice "d" "e") }} +{{ $s }} → [a b c d e] +``` + +If you start with a slice of a slice: + +```go-html-template +{{ $s := slice (slice "a" "b") }} +{{ $s }} → [[a b]] + +{{ $s = $s | append (slice "c" "d") }} +{{ $s }} → [[a b] [c d]] +``` + +To create a slice of slices, starting with an empty slice: + +```go-html-template +{{ $s := slice }} +{{ $s }} → [] + +{{ $s = $s | append (slice (slice "a" "b")) }} +{{ $s }} → [[a b]] + +{{ $s = $s | append (slice "c" "d") }} +{{ $s }} → [[a b] [c d]] +``` + +Although the elements in the examples above are strings, you can use the `append` function with any data type, including Pages. For example, on the home page of a corporate site, to display links to the two most recent press releases followed by links to the four most recent articles: + +```go-html-template +{{ $p := where site.RegularPages "Type" "press-releases" | first 2 }} +{{ $p = $p | append (where site.RegularPages "Type" "articles" | first 4) }} + +{{ with $p }} + <ul> + {{ range . }} + <li><a href="{{ .RelPermalink }}">{{ .LinkTitle }}</a></li> + {{ end }} + </ul> +{{ end }} +``` diff --git a/docs/content/en/functions/collections/Apply.md b/docs/content/en/functions/collections/Apply.md new file mode 100644 index 000000000..9153e546a --- /dev/null +++ b/docs/content/en/functions/collections/Apply.md @@ -0,0 +1,26 @@ +--- +title: collections.Apply +description: Returns a new collection with each element transformed by the given function. +categories: [] +keywords: [] +action: + aliases: [apply] + related: [] + returnType: '[]any' + signatures: [collections.Apply COLLECTION FUNCTION PARAM...] +aliases: [/functions/apply] +--- + +The `apply` function takes three or more arguments, depending on the function being applied to the collection elements. + +The first argument is the collection itself, the second argument is the function name, and the remaining arguments are passed to the function, with the string `"."` representing the collection element. + +```go-html-template +{{ $s := slice "hello" "world" }} + +{{ $s = apply $s "strings.FirstUpper" "." }} +{{ $s }} → [Hello World] + +{{ $s = apply $s "strings.Replace" "." "l" "_" }} +{{ $s }} → [He__o Wor_d] +``` diff --git a/docs/content/en/functions/collections/Complement.md b/docs/content/en/functions/collections/Complement.md new file mode 100644 index 000000000..b2a4b42a4 --- /dev/null +++ b/docs/content/en/functions/collections/Complement.md @@ -0,0 +1,80 @@ +--- +title: collections.Complement +description: Returns the elements of the last collection that are not in any of the others. +categories: [] +keywords: [] +action: + aliases: [complement] + related: + - functions/collections/Intersect + - functions/collections/SymDiff + - functions/collections/Union + returnType: any + signatures: ['collections.Complement COLLECTION [COLLECTION...]'] +aliases: [/functions/complement] +--- + +To find the elements within `$c3` that do not exist in `$c1` or `$c2`: + +```go-html-template +{{ $c1 := slice 3 }} +{{ $c2 := slice 4 5 }} +{{ $c3 := slice 1 2 3 4 5 }} + +{{ complement $c1 $c2 $c3 }} → [1 2] +``` + +{{% note %}} +Make your code simpler to understand by using a [chained pipeline]: + +[chained pipeline]: https://pkg.go.dev/text/template#hdr-Pipelines +{{% /note %}} + +```go-html-template +{{ $c3 | complement $c1 $c2 }} → [1 2] +``` + +You can also use the `complement` function with page collections. Let's say your site has five content types: + +```text +content/ +├── blog/ +├── books/ +├── faqs/ +├── films/ +└── songs/ +``` + +To list everything except blog articles (`blog`) and frequently asked questions (`faqs`): + +```go-html-template +{{ $blog := where site.RegularPages "Type" "blog" }} +{{ $faqs := where site.RegularPages "Type" "faqs" }} +{{ range site.RegularPages | complement $blog $faqs }} + <a href="{{ .RelPermalink }}">{{ .LinkTitle }}</a> +{{ end }} +``` + +{{% note %}} +Although the example above demonstrates the `complement` function, you could use the [`where`] function as well: + +[`where`]: /functions/collections/where +{{% /note %}} + +```go-html-template +{{ range where site.RegularPages "Type" "not in" (slice "blog" "faqs") }} + <a href="{{ .RelPermalink }}">{{ .LinkTitle }}</a> +{{ end }} +``` + +In this example we use the `complement` function to remove [stop words] from a sentence: + +```go-html-template +{{ $text := "The quick brown fox jumps over the lazy dog" }} +{{ $stopWords := slice "a" "an" "in" "over" "the" "under" }} +{{ $filtered := split $text " " | complement $stopWords }} + +{{ delimit $filtered " " }} → The quick brown fox jumps lazy dog +``` + +[stop words]: https://en.wikipedia.org/wiki/Stop_word diff --git a/docs/content/en/functions/collections/Delimit.md b/docs/content/en/functions/collections/Delimit.md new file mode 100644 index 000000000..b85059d4b --- /dev/null +++ b/docs/content/en/functions/collections/Delimit.md @@ -0,0 +1,33 @@ +--- +title: collections.Delimit +description: Loops through any array, slice, or map and returns a string of all the values separated by a delimiter. +categories: [] +keywords: [] +action: + aliases: [delimit] + related: + - functions/strings/Split + returnType: string + signatures: ['collections.Delimit COLLECTION DELIMITER [LAST]'] +aliases: [/functions/delimit] +--- + +Delimit a slice: + +```go-html-template +{{ $s := slice "b" "a" "c" }} +{{ delimit $s ", " }} → b, a, c +{{ delimit $s ", " " and "}} → b, a and c +``` + +Delimit a map: + +{{% note %}} +The `delimit` function sorts maps by key, returning the values. +{{% /note %}} + +```go-html-template +{{ $m := dict "b" 2 "a" 1 "c" 3 }} +{{ delimit $m ", " }} → 1, 2, 3 +{{ delimit $m ", " " and "}} → 1, 2 and 3 +``` diff --git a/docs/content/en/functions/collections/Dictionary.md b/docs/content/en/functions/collections/Dictionary.md new file mode 100644 index 000000000..f46b02e75 --- /dev/null +++ b/docs/content/en/functions/collections/Dictionary.md @@ -0,0 +1,68 @@ +--- +title: collections.Dictionary +description: Creates a map from a list of key and value pairs. +categories: [] +keywords: [] +action: + aliases: [dict] + related: + - functions/collections/Slice + returnType: mapany + signatures: ['collections.Dictionary KEY VALUE [VALUE...]'] +aliases: [/functions/dict] +--- + +```go-html-template +{{ $m := dict "a" 1 "b" 2 }} +``` + +The above produces this data structure: + +```json +{ + "a": 1, + "b": 2 +} +``` + + +Note that the `key` can be either a `string` or a `string slice`. The latter is useful to create a deeply nested structure, e.g.: + +```go-html-template +{{ $m := dict (slice "a" "b" "c") "value" }} +``` + +The above produces this data structure: + +```json +{ + "a": { + "b": { + "c": "value" + } + } +} +``` + +## Pass values to a partial template + +The partial below creates an SVG and expects `fill`, `height` and `width` from the caller: + +### Partial definition + +{{< code file=layouts/partials/svgs/external-links.svg >}} +<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" +fill="{{ .fill }}" width="{{ .width }}" height="{{ .height }}" viewBox="0 0 32 32" aria-label="External Link"> +<path d="M25.152 16.576v5.696q0 2.144-1.504 3.648t-3.648 1.504h-14.848q-2.144 0-3.648-1.504t-1.504-3.648v-14.848q0-2.112 1.504-3.616t3.648-1.536h12.576q0.224 0 0.384 0.16t0.16 0.416v1.152q0 0.256-0.16 0.416t-0.384 0.16h-12.576q-1.184 0-2.016 0.832t-0.864 2.016v14.848q0 1.184 0.864 2.016t2.016 0.864h14.848q1.184 0 2.016-0.864t0.832-2.016v-5.696q0-0.256 0.16-0.416t0.416-0.16h1.152q0.256 0 0.416 0.16t0.16 0.416zM32 1.152v9.12q0 0.48-0.352 0.8t-0.8 0.352-0.8-0.352l-3.136-3.136-11.648 11.648q-0.16 0.192-0.416 0.192t-0.384-0.192l-2.048-2.048q-0.192-0.16-0.192-0.384t0.192-0.416l11.648-11.648-3.136-3.136q-0.352-0.352-0.352-0.8t0.352-0.8 0.8-0.352h9.12q0.48 0 0.8 0.352t0.352 0.8z"></path> +</svg> +{{< /code >}} + +### Partial call + +The `fill`, `height` and `width` values can be stored in one object with `dict` and passed to the partial: + +{{< code file=layouts/_default/list.html >}} +{{ partial "svgs/external-links.svg" (dict "fill" "#01589B" "width" 10 "height" 20 ) }} +{{< /code >}} + +[partials]: /templates/partials/ diff --git a/docs/content/en/functions/collections/First.md b/docs/content/en/functions/collections/First.md new file mode 100644 index 000000000..cb2397af1 --- /dev/null +++ b/docs/content/en/functions/collections/First.md @@ -0,0 +1,37 @@ +--- +title: collections.First +description: Returns the given collection, limited to the first N elements. +categories: [] +keywords: [] +action: + aliases: [first] + related: + - functions/collections/After + - functions/collections/Last + - methods/pages/Limit + returnType: any + signatures: [collections.First N COLLECTION] +aliases: [/functions/first] +--- + +```go-html-template +{{ range first 5 .Pages }} + {{ .Render "summary" }} +{{ end }} +``` + +Set `N` to zero to return an empty collection. + +```go-html-template +{{ $emptyPageCollection := first 0 .Pages}} +``` + +Use `first` and [`where`] together. + +```go-html-template +{{ range where .Pages "Section" "articles" | first 5 }} + {{ .Render "summary" }} +{{ end }} +``` + +[`where`]: /functions/collections/where diff --git a/docs/content/en/functions/collections/Group.md b/docs/content/en/functions/collections/Group.md new file mode 100644 index 000000000..2f5a333c0 --- /dev/null +++ b/docs/content/en/functions/collections/Group.md @@ -0,0 +1,31 @@ +--- +title: collections.Group +description: Groups the given page collection by the given key. +categories: [] +keywords: [] +action: + aliases: [group] + related: [] + returnType: any + signatures: [collections.Group KEY PAGES] +aliases: [/functions/group] +--- + +```go-html-template +{{ $new := .Site.RegularPages | first 10 | group "New" }} +{{ $old := .Site.RegularPages | last 10 | group "Old" }} +{{ $groups := slice $new $old }} +{{ range $groups }} + <h3>{{ .Key }}{{/* Prints "New", "Old" */}}</h3> + <ul> + {{ range .Pages }} + <li> + <a href="{{ .RelPermalink }}">{{ .LinkTitle }}</a> + <div class="meta">{{ .Date.Format "Mon, Jan 2, 2006" }}</div> + </li> + {{ end }} + </ul> +{{ end }} +``` + +The page group you get from `group` is of the same type you get from the built-in [group methods](/templates/lists#group-content) in Hugo. The above example can be [paginated](/templates/pagination/#list-paginator-pages). diff --git a/docs/content/en/functions/collections/In.md b/docs/content/en/functions/collections/In.md new file mode 100644 index 000000000..131c0abcf --- /dev/null +++ b/docs/content/en/functions/collections/In.md @@ -0,0 +1,43 @@ +--- +title: collections.In +description: Reports whether the given value is a member of the given set. +categories: [] +keywords: [] +action: + aliases: [in] + related: + - functions/strings/Contains + - functions/strings/ContainsAny + - functions/strings/ContainsNonSpace + - functions/strings/HasPrefix + - functions/strings/HasSuffix + returnType: bool + signatures: [collections.In SET VALUE] +aliases: [/functions/in] +--- + +The `SET` can be an [array], [slice], or [string]. + +[array]: /getting-started/glossary/#array +[slice]: /getting-started/glossary/#slice +[string]: /getting-started/glossary/#string + +```go-html-template +{{ $s := slice "a" "b" "c" }} +{{ in $s "b" }} → true +``` + +```go-html-template +{{ $s := slice 1 2 3 }} +{{ in $s 2 }} → true +``` + +```go-html-template +{{ $s := slice 1.11 2.22 3.33 }} +{{ in $s 2.22 }} → true +``` + +```go-html-template +{{ $s := "abc" }} +{{ in $s "b" }} → true +``` diff --git a/docs/content/en/functions/collections/IndexFunction.md b/docs/content/en/functions/collections/IndexFunction.md new file mode 100644 index 000000000..6482884fd --- /dev/null +++ b/docs/content/en/functions/collections/IndexFunction.md @@ -0,0 +1,95 @@ +--- +title: collections.Index +description: Looks up the index(es) or key(s) of the data structure passed into it. +categories: [] +keywords: [] +action: + aliases: [index] + related: [] + returnType: any + signatures: + - collections.Index COLLECTION INDEXES + - collections.Index COLLECTION KEYS +aliases: [/functions/index,/functions/index-function] +--- + +The `index` functions returns the result of indexing its first argument by the following arguments. Each indexed item must be a map or a slice, e.g.: + +```go-html-template +{{ $slice := slice "a" "b" "c" }} +{{ index $slice 0 }} → a +{{ index $slice 1 }} → b + +{{ $map := dict "a" 100 "b" 200 }} +{{ index $map "b" }} → 200 +``` + +The function takes multiple indices as arguments, and this can be used to get nested values, e.g.: + +```go-html-template +{{ $map := dict "a" 100 "b" 200 "c" (slice 10 20 30) }} +{{ index $map "c" 1 }} → 20 +{{ $map := dict "a" 100 "b" 200 "c" (dict "d" 10 "e" 20) }} +{{ index $map "c" "e" }} → 20 +``` + +You may write multiple indices as a slice: + +```go-html-template +{{ $map := dict "a" 100 "b" 200 "c" (dict "d" 10 "e" 20) }} +{{ $slice := slice "c" "e" }} +{{ index $map $slice }} → 20 +``` + +## Example: load data from a path based on front matter parameters + +Assume you want to add a `location = ""` field to your front matter for every article written in `content/vacations/`. You want to use this field to populate information about the location at the bottom of the article in your `single.html` template. You also have a directory in `data/locations/` that looks like the following: + +```text +data/ + └── locations/ + ├── abilene.toml + ├── chicago.toml + ├── oslo.toml + └── provo.toml +``` + +Here is an example: + +{{< code-toggle file=data/locations/oslo >}} +website = "https://www.oslo.kommune.no" +pop_city = 658390 +pop_metro = 1717900 +{{< /code-toggle >}} + +The example we will use will be an article on Oslo, whose front matter should be set to exactly the same name as the corresponding file name in `data/locations/`: + +{{< code-toggle file=content/articles/oslo.md fm=true >}} +title = "My Norwegian Vacation" +location = "oslo" +{{< /code-toggle >}} + +The content of `oslo.toml` can be accessed from your template using the following node path: `.Site.Data.locations.oslo`. However, the specific file you need is going to change according to the front matter. + +This is where the `index` function is needed. `index` takes 2 arguments in this use case: + +1. The node path +2. A string corresponding to the desired data; e.g.— + +```go-html-template +{{ index .Site.Data.locations "oslo" }} +``` + +The variable for `.Params.location` is a string and can therefore replace `oslo` in the example above: + +```go-html-template +{{ index .Site.Data.locations .Params.location }} +=> map[website:https://www.oslo.kommune.no pop_city:658390 pop_metro:1717900] +``` + +Now the call will return the specific file according to the location specified in the content's front matter, but you will likely want to write specific properties to the template. You can do this by continuing down the node path via dot notation (`.`): + +```go-html-template +{{ (index .Site.Data.locations .Params.location).pop_city }} +=> 658390 +``` diff --git a/docs/content/en/functions/collections/Intersect.md b/docs/content/en/functions/collections/Intersect.md new file mode 100644 index 000000000..8bc60f8e1 --- /dev/null +++ b/docs/content/en/functions/collections/Intersect.md @@ -0,0 +1,30 @@ +--- +title: collections.Intersect +description: Returns the common elements of two arrays or slices, in the same order as the first array. +categories: [] +keywords: [] +action: + aliases: [intersect] + related: + - functions/collections/Complement + - functions/collections/SymDiff + - functions/collections/Union + returnType: any + signatures: [collections.Intersect SET1 SET2] +aliases: [/functions/intersect] +--- + +A useful example is to use it as `AND` filters when combined with where: + +```go-html-template +{{ $pages := where .Site.RegularPages "Type" "not in" (slice "page" "about") }} +{{ $pages := $pages | union (where .Site.RegularPages "Params.pinned" true) }} +{{ $pages := $pages | intersect (where .Site.RegularPages "Params.images" "!=" nil) }} +``` + +The above fetches regular pages not of `page` or `about` type unless they are pinned. And finally, we exclude all pages with no `images` set in Page parameters. + +See [union](/functions/collections/union) for `OR`. + +[partials]: /templates/partials/ +[single]: /templates/single-page-templates/ diff --git a/docs/content/en/functions/collections/IsSet.md b/docs/content/en/functions/collections/IsSet.md new file mode 100644 index 000000000..62b81b712 --- /dev/null +++ b/docs/content/en/functions/collections/IsSet.md @@ -0,0 +1,45 @@ +--- +title: collections.IsSet +description: Reports whether the key exists within the collection. +categories: [] +keywords: [] +action: + aliases: [isset] + related: + - functions/go-template/if + - functions/go-template/with + returnType: bool + signatures: [collections.IsSet COLLECTION KEY] +aliases: [/functions/isset] +--- + +For example, consider this site configuration: + +{{< code-toggle file=hugo >}} +[params] +showHeroImage = false +{{< /code-toggle >}} + +It the value of `showHeroImage` is `true`, we can detect that it exists using either `if` or `with`: + +```go-html-template +{{ if site.Params.showHeroImage }} + {{ site.Params.showHeroImage }} → true +{{ end }} + +{{ with site.Params.showHeroImage }} + {{ . }} → true +{{ end }} +``` + +But if the value of `showHeroImage` is `false`, we can't use either `if` or `with` to detect its existence. In this case, you must use the `isset` function: + +```go-html-template +{{ if isset site.Params "showheroimage" }} + <p>The showHeroImage parameter is set to {{ site.Params.showHeroImage }}.<p> +{{ end }} +``` + +{{% note %}} +When using the `isset` function you must reference the key using lower case. See the previous example. +{{% /note %}} diff --git a/docs/content/en/functions/collections/KeyVals.md b/docs/content/en/functions/collections/KeyVals.md new file mode 100644 index 000000000..3d21ca6fd --- /dev/null +++ b/docs/content/en/functions/collections/KeyVals.md @@ -0,0 +1,43 @@ +--- +title: collections.KeyVals +description: Returns a KeyVals struct. +categories: [] +keywords: [] +action: + aliases: [keyVals] + related: + - methods/pages/Related + returnType: types.KeyValues + signatures: [collections.KeyVals KEY VALUES...] +aliases: [/functions/keyvals] +--- + +The primary application for this function is the definition of the `namedSlices` parameter in the options map passed to the [`Related`] method on the `Pages` object. + +[`Related`]: /methods/pages/related + +See [related content](/content-management/related). + +```go-html-template +{{ $kv := keyVals "foo" "a" "b" "c" }} +``` + +The resulting data structure is: + +```json +{ + "Key": "foo", + "Values": [ + "a", + "b", + "c" + ] +} +``` + +To extract the key and values: + +```go-html-template +{{ $kv.Key }} → foo +{{ $kv.Values }} → [a b c] +``` diff --git a/docs/content/en/functions/collections/Last.md b/docs/content/en/functions/collections/Last.md new file mode 100644 index 000000000..8219e120d --- /dev/null +++ b/docs/content/en/functions/collections/Last.md @@ -0,0 +1,34 @@ +--- +title: collections.Last +description: Returns the given collection, limited to the last N elements. +categories: [] +keywords: [] +action: + aliases: [last] + related: + - functions/collections/After + - functions/collections/First + returnType: any + signatures: [collections.Last N COLLECTION] +aliases: [/functions/last] +--- + +```go-html-template +{{ range last 10 .Pages }} + {{ .Render "summary" }} +{{ end }} +``` + +Set `N` to zero to return an empty collection. + +```go-html-template +{{ $emptyPageCollection := last 0 .Pages}} +``` + +Use `last` and [`where`] together. + +```go-html-template +{{ range where .Pages "Section" "articles" | last 5 }} + {{ .Render "summary" }} +{{ end }} +``` diff --git a/docs/content/en/functions/collections/Merge.md b/docs/content/en/functions/collections/Merge.md new file mode 100644 index 000000000..3f5208cfc --- /dev/null +++ b/docs/content/en/functions/collections/Merge.md @@ -0,0 +1,69 @@ +--- +title: collections.Merge +description: Returns the result of merging two or more maps. +categories: [] +keywords: [] +action: + aliases: [merge] + related: + - functions/collections/Append + returnType: any + signatures: [collections.Merge MAP MAP...] +aliases: [/functions/merge] +--- + +Returns the result of merging two or more maps from left to right. If a key already exists, `merge` updates its value. If a key is absent, `merge` inserts the value under the new key. + +Key handling is case-insensitive. + +The following examples use these map definitions: + +```go-html-template +{{ $m1 := dict "x" "foo" }} +{{ $m2 := dict "x" "bar" "y" "wibble" }} +{{ $m3 := dict "x" "baz" "y" "wobble" "z" (dict "a" "huey") }} +``` + +Example 1 + +```go-html-template +{{ $merged := merge $m1 $m2 $m3 }} + +{{ $merged.x }} → baz +{{ $merged.y }} → wobble +{{ $merged.z.a }} → huey +``` + +Example 2 + +```go-html-template +{{ $merged := merge $m3 $m2 $m1 }} + +{{ $merged.x }} → foo +{{ $merged.y }} → wibble +{{ $merged.z.a }} → huey +``` + +Example 3 + +```go-html-template +{{ $merged := merge $m2 $m3 $m1 }} + +{{ $merged.x }} → foo +{{ $merged.y }} → wobble +{{ $merged.z.a }} → huey +``` + +Example 4 + +```go-html-template +{{ $merged := merge $m1 $m3 $m2 }} + +{{ $merged.x }} → bar +{{ $merged.y }} → wibble +{{ $merged.z.a }} → huey +``` + +{{% note %}} +Regardless of depth, merging only applies to maps. For slices, use [append](/functions/collections/append). +{{% /note %}} diff --git a/docs/content/en/functions/collections/NewScratch.md b/docs/content/en/functions/collections/NewScratch.md new file mode 100644 index 000000000..96f85a8d0 --- /dev/null +++ b/docs/content/en/functions/collections/NewScratch.md @@ -0,0 +1,124 @@ +--- +title: collections.NewScratch +description: Returns a locally scoped "scratch pad" to store and manipulate data. +categories: [] +keywords: [] +action: + aliases: [newScratch] + related: + - methods/page/scratch + - methods/page/store + - methods/shortcode/scratch + returnType: maps.Scratch + signatures: [collections.NewScratch ] +--- + +The `collections.NewScratch` function creates a locally scoped [scratch pad] to store and manipulate data. To create a scratch pad that is attached to a `Page` object, use the [`Scratch`] or [`Store`] method. + +[`Scratch`]: /methods/page/scratch +[`Store`]: /methods/page/store +[scratch pad]: /getting-started/glossary/#scratch-pad + +## Methods + +###### Set + +Sets the value of a given key. + +```go-html-template +{{ $s := newScratch }} +{{ $s.Set "greeting" "Hello" }} +``` + +###### Get + +Gets the value of a given key. + +```go-html-template +{{ $s := newScratch }} +{{ $s.Set "greeting" "Hello" }} +{{ $s.Get "greeting" }} → Hello +``` + +###### Add + +Adds a given value to existing value(s) of the given key. + +For single values, `Add` accepts values that support Go's `+` operator. If the first `Add` for a key is an array or slice, the following adds will be appended to that list. + +```go-html-template +{{ $s := newScratch }} +{{ $s.Set "greeting" "Hello" }} +{{ $s.Add "greeting" "Welcome" }} +{{ $s.Get "greeting" }} → HelloWelcome +``` + +```go-html-template +{{ $s := newScratch }} +{{ $s.Set "total" 3 }} +{{ $s.Add "total" 7 }} +{{ $s.Get "total" }} → 10 +``` + +```go-html-template +{{ $s := newScratch }} +{{ $s.Set "greetings" (slice "Hello") }} +{{ $s.Add "greetings" (slice "Welcome" "Cheers") }} +{{ $s.Get "greetings" }} → [Hello Welcome Cheers] +``` + +###### SetInMap + +Takes a `key`, `mapKey` and `value` and adds a map of `mapKey` and `value` to the given `key`. + +```go-html-template +{{ $s := newScratch }} +{{ $s.SetInMap "greetings" "english" "Hello" }} +{{ $s.SetInMap "greetings" "french" "Bonjour" }} +{{ $s.Get "greetings" }} → map[english:Hello french:Bonjour] +``` + +###### DeleteInMap + +Takes a `key` and `mapKey` and removes the map of `mapKey` from the given `key`. + +```go-html-template +{{ $s := newScratch }} +{{ $s.SetInMap "greetings" "english" "Hello" }} +{{ $s.SetInMap "greetings" "french" "Bonjour" }} +{{ $s.DeleteInMap "greetings" "english" }} +{{ $s.Get "greetings" }} → map[french:Bonjour] +``` + +###### GetSortedMapValues + +Returns an array of values from `key` sorted by `mapKey`. + +```go-html-template +{{ $s := newScratch }} +{{ $s.SetInMap "greetings" "english" "Hello" }} +{{ $s.SetInMap "greetings" "french" "Bonjour" }} +{{ $s.GetSortedMapValues "greetings" }} → [Hello Bonjour] +``` + +###### Delete + +Removes the given key. + +```go-html-template +{{ $s := newScratch }} +{{ $s.Set "greeting" "Hello" }} +{{ $s.Delete "greeting" }} +``` + +###### Values + +Returns the raw backing map. Do not use with `Scratch` or `Store` methods on a `Page` object due to concurrency issues. + +```go-html-template +{{ $s := newScratch }} +{{ $s.SetInMap "greetings" "english" "Hello" }} +{{ $s.SetInMap "greetings" "french" "Bonjour" }} + +{{ $map := $s.Values }} +``` diff --git a/docs/content/en/functions/collections/Querify.md b/docs/content/en/functions/collections/Querify.md new file mode 100644 index 000000000..ea0434fc5 --- /dev/null +++ b/docs/content/en/functions/collections/Querify.md @@ -0,0 +1,32 @@ +--- +title: collections.Querify +description: Takes a set or slice of key-value pairs and returns a query string to be appended to URLs. +categories: [] +keywords: [] +action: + aliases: [querify] + related: + - functions/go-template/urlquery.md + returnType: string + signatures: + - collections.Querify VALUE [VALUE...] + - collections.Querify COLLECTION +aliases: [/functions/querify] +--- + +`querify` takes a set or slice of key-value pairs and returns a [query string](https://en.wikipedia.org/wiki/Query_string) that can be appended to a URL. + +The following examples create a link to a search results page on Google. + +```go-html-template +<a href="https://www.google.com?{{ (querify "q" "test" "page" 3) | safeURL }}">Search</a> + +{{ $qs := slice "q" "test" "page" 3 }} +<a href="https://www.google.com?{{ (querify $qs) | safeURL }}">Search</a> +``` + +Both of these examples render the following HTML: + +```html +<a href="https://www.google.com?page=3&q=test">Search</a> +``` diff --git a/docs/content/en/functions/collections/Reverse.md b/docs/content/en/functions/collections/Reverse.md new file mode 100644 index 000000000..d0a449763 --- /dev/null +++ b/docs/content/en/functions/collections/Reverse.md @@ -0,0 +1,19 @@ +--- +title: collections.Reverse +description: Reverses the order of a collection. +categories: [] +keywords: [] +action: + aliases: [] + related: + - functions/collections/Sort + - functions/collections/Shuffle + - functions/collections/Uniq + returnType: any + signatures: [collections.Reverse COLLECTION] +aliases: [/functions/collections.reverse] +--- + +```go-html-template +{{ slice 2 1 3 | collections.Reverse }} → [3 1 2] +``` diff --git a/docs/content/en/functions/collections/Seq.md b/docs/content/en/functions/collections/Seq.md new file mode 100644 index 000000000..b572bd7c0 --- /dev/null +++ b/docs/content/en/functions/collections/Seq.md @@ -0,0 +1,36 @@ +--- +title: collections.Seq +description: Returns a slice of integers. +categories: [] +keywords: [] +action: + aliases: [seq] + related: [] + returnType: '[]int' + signatures: + - collections.Seq LAST + - collections.Seq FIRST LAST + - collections.Seq FIRST INCREMENT LAST +aliases: [/functions/seq] +--- + +```go-html-template +{{ seq 2 }} → [1 2] +{{ seq 0 2 }} → [0 1 2] +{{ seq -2 2 }} → [-2 -1 0 1 2] +{{ seq -2 2 2 }} → [-2 0 2] +``` + +A contrived example of iterating over a sequence of integers: + +```go-html-template +{{ $product := 1 }} +{{ range seq 4 }} + {{ $product = mul $product . }} +{{ end }} +{{ $product }} → 24 +``` + +{{% note %}} +The slice created by the `seq` function is limited to 2000 elements. +{{% /note %}} diff --git a/docs/content/en/functions/collections/Shuffle.md b/docs/content/en/functions/collections/Shuffle.md new file mode 100644 index 000000000..0f28eb4d8 --- /dev/null +++ b/docs/content/en/functions/collections/Shuffle.md @@ -0,0 +1,22 @@ +--- +title: collections.Shuffle +description: Returns a random permutation of a given array or slice. +categories: [] +keywords: [] +action: + aliases: [shuffle] + related: + - functions/collections/Reverse + - functions/collections/Sort + - functions/collections/Uniq + returnType: any + signatures: [collections.Shuffle COLLECTION] +aliases: [/functions/shuffle] +--- + +```go-html-template +{{ shuffle (seq 1 2 3) }} → [3 1 2] +{{ shuffle (slice "a" "b" "c") }} → [b a c] +``` + +The result will vary from one build to the next. diff --git a/docs/content/en/functions/collections/Slice.md b/docs/content/en/functions/collections/Slice.md new file mode 100644 index 000000000..56c068d4b --- /dev/null +++ b/docs/content/en/functions/collections/Slice.md @@ -0,0 +1,18 @@ +--- +title: collections.Slice +description: Creates a slice of all passed arguments. +categories: [] +keywords: [] +action: + aliases: [slice] + related: + - functions/collections/Dictionary + returnType: any + signatures: [collections.Slice ITEM...] +aliases: [/functions/slice] +--- + +```go-html-template +{{ $s := slice "a" "b" "c" }} +{{ $s }} → [a b c] +``` diff --git a/docs/content/en/functions/collections/Sort.md b/docs/content/en/functions/collections/Sort.md new file mode 100644 index 000000000..2277f883c --- /dev/null +++ b/docs/content/en/functions/collections/Sort.md @@ -0,0 +1,156 @@ +--- +title: collections.Sort +description: Sorts slices, maps, and page collections. +categories: [] +keywords: [] +action: + aliases: [sort] + related: + - functions/collections/Reverse + - functions/collections/Shuffle + - functions/collections/Uniq + returnType: any + signatures: ['collections.Sort COLLECTION [KEY] [ORDER]'] +toc: true +aliases: [/functions/sort] +--- + +The `KEY` is optional when sorting slices in ascending order, otherwise it is required. When sorting slices, use the literal `value` in place of the `KEY`. See examples below. + +The `ORDER` may be either `asc` (ascending) or `desc` (descending). The default sort order is ascending. + +## Sort a slice + +The examples below assume this site configuration: + +{{< code-toggle file=hugo >}} +[params] +grades = ['b','a','c'] +{{< /code-toggle >}} + +### Ascending order {#slice-ascending-order} + +Sort slice elements in ascending order using either of these constructs: + +```go-html-template +{{ sort site.Params.grades }} → [a b c] +{{ sort site.Params.grades "value" "asc" }} → [a b c] +``` + +In the examples above, `value` is the `KEY` representing the value of the slice element. + +### Descending order {#slice-descending-order} + +Sort slice elements in descending order: + +```go-html-template +{{ sort site.Params.grades "value" "desc" }} → [c b a] +``` + +In the example above, `value` is the `KEY` representing the value of the slice element. + +## Sort a map + +The examples below assume this site configuration: + +{{< code-toggle file=hugo >}} +[params.authors.a] +firstName = "Marius" +lastName = "Pontmercy" +[params.authors.b] +firstName = "Victor" +lastName = "Hugo" +[params.authors.c] +firstName = "Jean" +lastName = "Valjean" +{{< /code-toggle >}} + +{{% note %}} +When sorting maps, the `KEY` argument must be lowercase. +{{% /note %}} + +### Ascending order {#map-ascending-order} + +Sort map objects in ascending order using either of these constructs: + +```go-html-template +{{ range sort site.Params.authors "firstname" }} + {{ .firstName }} +{{ end }} + +{{ range sort site.Params.authors "firstname" "asc" }} + {{ .firstName }} +{{ end }} +``` + +These produce: + +```text +Jean Marius Victor +``` + +### Descending order {#map-descending-order} + +Sort map objects in descending order: + +```go-html-template +{{ range sort site.Params.authors "firstname" "desc" }} + {{ .firstName }} +{{ end }} +``` + +This produces: + +```text +Victor Marius Jean +``` + +### First level key removal + +Hugo removes the first level keys when sorting a map. + +Original map: + +```json +{ + "felix": { + "breed": "malicious", + "type": "cat" + }, + "spot": { + "breed": "boxer", + "type": "dog" + } +} +``` + +After sorting: + +```json +[ + { + "breed": "malicious", + "type": "cat" + }, + { + "breed": "boxer", + "type": "dog" + } +] +``` + +## Sort a page collection + +{{% note %}} +Although you can use the `sort` function to sort a page collection, Hugo provides [sorting and grouping methods] as well. + +[sorting and grouping methods]: /methods/pages +{{% /note %}} + +In this contrived example, sort the site's regular pages by `.Type` in descending order: + +```go-html-template +{{ range sort site.RegularPages "Type" "desc" }} + <h2><a href="{{ .RelPermalink }}">{{ .LinkTitle }}</a></h2> +{{ end }} +``` diff --git a/docs/content/en/functions/collections/SymDiff.md b/docs/content/en/functions/collections/SymDiff.md new file mode 100644 index 000000000..7eba3ef42 --- /dev/null +++ b/docs/content/en/functions/collections/SymDiff.md @@ -0,0 +1,24 @@ +--- +title: collections.SymDiff +description: Returns the symmetric difference of two collections. +categories: [] +keywords: [] +action: + aliases: [symdiff] + related: + - functions/collections/Complement + - functions/collections/Intersect + - functions/collections/SymDiff + - functions/collections/Union + returnType: any + signatures: [COLLECTION | collections.SymDiff COLLECTION] +aliases: [/functions/symdiff] +--- + +Example: + +```go-html-template +{{ slice 1 2 3 | symdiff (slice 3 4) }} → [1 2 4] +``` + +Also see <https://en.wikipedia.org/wiki/Symmetric_difference>. diff --git a/docs/content/en/functions/collections/Union.md b/docs/content/en/functions/collections/Union.md new file mode 100644 index 000000000..7fed49a10 --- /dev/null +++ b/docs/content/en/functions/collections/Union.md @@ -0,0 +1,46 @@ +--- +title: collections.Union +description: Given two arrays or slices, returns a new array that contains the elements that belong to either or both arrays/slices. +categories: [] +keywords: [] +action: + aliases: [union] + related: + - functions/collections/Complement + - functions/collections/Intersect + - functions/collections/SymDiff + - functions/collections/Union + returnType: any + signatures: [collections.Union SET1 SET2] +aliases: [/functions/union] +--- + +Given two arrays (or slices) A and B, this function will return a new array that contains the elements or objects that belong to either A or to B or to both. + +```go-html-template +{{ union (slice 1 2 3) (slice 3 4 5) }} +<!-- returns [1 2 3 4 5] --> + +{{ union (slice 1 2 3) nil }} +<!-- returns [1 2 3] --> + +{{ union nil (slice 1 2 3) }} +<!-- returns [1 2 3] --> + +{{ union nil nil }} +<!-- returns an error because both arrays/slices have to be of the same type --> +``` + +## OR filter in where query + +This is also very useful to use as `OR` filters when combined with where: + +```go-html-template +{{ $pages := where .Site.RegularPages "Type" "not in" (slice "page" "about") }} +{{ $pages = $pages | union (where .Site.RegularPages "Params.pinned" true) }} +{{ $pages = $pages | intersect (where .Site.RegularPages "Params.images" "!=" nil) }} +``` + +The above fetches regular pages not of `page` or `about` type unless they are pinned. And finally, we exclude all pages with no `images` set in Page parameters. + +See [intersect](/functions/collections/intersect) for `AND`. diff --git a/docs/content/en/functions/collections/Uniq.md b/docs/content/en/functions/collections/Uniq.md new file mode 100644 index 000000000..02b590c18 --- /dev/null +++ b/docs/content/en/functions/collections/Uniq.md @@ -0,0 +1,20 @@ +--- +title: collections.Uniq +description: Returns the given collection, removing duplicate elements. +categories: [] +keywords: [] +action: + aliases: [uniq] + related: + - functions/collections/Reverse + - functions/collections/Shuffle + - functions/collections/Sort + - functions/collections/Uniq + returnType: any + signatures: [collections.Uniq COLLECTION] +aliases: [/functions/uniq] +--- + +```go-html-template +{{ slice 1 3 2 1 | uniq }} → [1 3 2] +``` diff --git a/docs/content/en/functions/collections/Where.md b/docs/content/en/functions/collections/Where.md new file mode 100644 index 000000000..f18ae507b --- /dev/null +++ b/docs/content/en/functions/collections/Where.md @@ -0,0 +1,446 @@ +--- +title: collections.Where +description: Returns the given collection, removing elements that do not satisfy the comparison condition. +categories: [] +keywords: [] +action: + aliases: [where] + related: [] + returnType: any + signatures: ['collections.Where COLLECTION KEY [OPERATOR] VALUE'] +toc: true +aliases: [/functions/where] +--- + +The `where` function returns the given collection, removing elements that do not satisfy the comparison condition. The comparison condition is comprised of the `KEY`, `OPERATOR`, and `VALUE` arguments: + +```text +collections.Where COLLECTION KEY [OPERATOR] VALUE + -------------------- + comparison condition +``` + +Hugo will test for equality if you do not provide an `OPERATOR` argument. For example: + +```go-html-template +{{ $pages := where .Site.RegularPages "Section" "books" }} +{{ $books := where .Site.Data.books "genres" "suspense" }} +``` + +## Arguments + +The where function takes three or four arguments. The `OPERATOR` argument is optional. + +COLLECTION +: (`any`) A [page collection] or a [slice] of [maps]. + +[maps]: /getting-started/glossary/#map +[page collection]: /getting-started/glossary/#page-collection +[slice]: /getting-started/glossary/#slice + +KEY +: (`string`) The key of the page or map value to compare with `VALUE`. With page collections, commonly used comparison keys are `Section`, `Type`, and `Params`. To compare with a member of the page `Params` map, [chain] the subkey as shown below: + +```go-html-template +{{ $result := where .Site.RegularPages "Params.foo" "bar" }} +``` + +[chain]: /getting-started/glossary/#chain + +OPERATOR +: (`string`) The logical comparison [operator](#operators). + +VALUE +: (`any`) The value with which to compare. The values to compare must have comparable data types. For example: + +Comparison|Result +:--|:-- +`"123" "eq" "123"`|`true` +`"123" "eq" 123`|`false` +`false "eq" "false"`|`false` +`false "eq" false`|`true` + +When one or both of the values to compare is a slice, use the `in`, `not in`, or `intersect` operators as described below. + +## Operators + +Use any of the following logical operators: + +`=`, `==`, `eq` +: (`bool`) Reports whether the given field value is equal to `VALUE`. + +`!=`, `<>`, `ne` +: (`bool`) Reports whether the given field value is not equal to `VALUE`. + +`>=`, `ge` +: (`bool`) Reports whether the given field value is greater than or equal to `VALUE`. + +`>`, `gt` +: `true` Reports whether the given field value is greater than `VALUE`. + +`<=`, `le` +: (`bool`) Reports whether the given field value is less than or equal to `VALUE`. + +`<`, `lt` +: (`bool`) Reports whether the given field value is less than `VALUE`. + +`in` +: (`bool`) Reports whether the given field value is a member of `VALUE`. Compare string to slice, or string to string. See [details](/functions/collections/in). + +`not in` +: (`bool`) Reports whether the given field value is not a member of `VALUE`. Compare string to slice, or string to string. See [details](/functions/collections/in). + +`intersect` +: (`bool`) Reports whether the given field value (a slice) contains one or more elements in common with `VALUE`. See [details](/functions/collections/intersect). + +`like` {{< new-in 0.116.0 >}} +: (`bool`) Reports whether the given field value matches the regular expression specified in `VALUE`. Use the `like` operator to compare `string` values. The `like` operator returns `false` when comparing other data types to the regular expression. + +{{% note %}} +The examples below perform comparisons within a page collection, but the same comparisons are applicable to a slice of maps. +{{% /note %}} + +## String comparison + +Compare the value of the given field to a [`string`]: + +[`string`]: /getting-started/glossary/#string + +```go-html-template +{{ $pages := where .Site.RegularPages "Section" "eq" "books" }} +{{ $pages := where .Site.RegularPages "Section" "ne" "books" }} +``` + +## Numeric comparison + +Compare the value of the given field to an [`int`] or [`float`]: + +[`int`]: /getting-started/glossary/#int +[`float`]: /getting-started/glossary/#float + +```go-html-template +{{ $books := where site.RegularPages "Section" "eq" "books" }} + +{{ $pages := where $books "Params.price" "eq" 42 }} +{{ $pages := where $books "Params.price" "ne" 42.67 }} +{{ $pages := where $books "Params.price" "ge" 42 }} +{{ $pages := where $books "Params.price" "gt" 42.67 }} +{{ $pages := where $books "Params.price" "le" 42 }} +{{ $pages := where $books "Params.price" "lt" 42.67 }} +``` + +## Boolean comparison + +Compare the value of the given field to a [`bool`]: + +[`bool`]: /getting-started/glossary/#bool + +```go-html-template +{{ $books := where site.RegularPages "Section" "eq" "books" }} + +{{ $pages := where $books "Params.fiction" "eq" true }} +{{ $pages := where $books "Params.fiction" "eq" false }} +{{ $pages := where $books "Params.fiction" "ne" true }} +{{ $pages := where $books "Params.fiction" "ne" false }} +``` + +## Member comparison + +Compare a [`scalar`] to a [`slice`]. + +[`scalar`]: /getting-started/glossary/#scalar +[`slice`]: /getting-started/glossary/#slice + +For example, to return a collection of pages where the `color` page parameter is either "red" or "yellow": + +```go-html-template +{{ $fruit := where site.RegularPages "Section" "eq" "fruit" }} + +{{ $colors := slice "red" "yellow" }} +{{ $pages := where $fruit "Params.color" "in" $colors }} +``` + +To return a collection of pages where the "color" page parameter is neither "red" nor "yellow": + +```go-html-template +{{ $fruit := where site.RegularPages "Section" "eq" "fruit" }} + +{{ $colors := slice "red" "yellow" }} +{{ $pages := where $fruit "Params.color" "not in" $colors }} +``` + +## Intersection comparison + +Compare a [`slice`] to a [`slice`], returning collection elements with common values. This is frequently used when comparing taxonomy terms. + +For example, to return a collection of pages where any of the terms in the "genres" taxonomy are "suspense" or "romance": + +```go-html-template +{{ $books := where site.RegularPages "Section" "eq" "books" }} + +{{ $genres := slice "suspense" "romance" }} +{{ $pages := where $books "Params.genres" "intersect" $genres }} +``` + +## Regular expression comparison + +{{< new-in 0.116.0 >}} + +To return a collection of pages where the "author" page parameter begins with either "victor" or "Victor": + +```go-html-template +{{ $pages := where .Site.RegularPages "Params.author" "like" `(?i)^victor` }} +``` + +{{% include "functions/_common/regular-expressions.md" %}} + +{{% note %}} +Use the `like` operator to compare string values. Comparing other data types will result in an empty collection. +{{% /note %}} + +## Date comparison + +### Predefined dates + +There are four predefined front matter dates: [`date`], [`publishDate`], [`lastmod`], and [`expiryDate`]. Regardless of the front matter data format (TOML, YAML, or JSON) these are [`time.Time`] values, allowing precise comparisons. + +[`date`]: /methods/page/date +[`publishdate`]: /methods/page/publishdate +[`lastmod`]: /methods/page/lastmod +[`expirydate`]: /methods/page/expirydate +[`time.Time`]: https://pkg.go.dev/time#Time + +For example, to return a collection of pages that were created before the current year: + +```go-html-template +{{ $startOfYear := time.AsTime (printf "%d-01-01" now.Year) }} +{{ $pages := where .Site.RegularPages "Date" "lt" $startOfYear }} +``` + +### Custom dates + +With custom front matter dates, the comparison depends on the front matter data format (TOML, YAML, or JSON). + +{{% note %}} +Using TOML for pages with custom front matter dates enables precise date comparisons. +{{% /note %}} + +With TOML, date values are first-class citizens. TOML has a date data type while JSON and YAML do not. If you quote a TOML date, it is a string. If you do not quote a TOML date value, it is [`time.Time`] value, enabling precise comparisons. + +In the TOML example below, note that the event date is not quoted. + +{{< code file="content/events/2024-user-conference.md" >}} ++++ +title = '2024 User Conference" +eventDate = 2024-04-01 ++++ +{{< /code >}} + +To return a collection of future events: + +```go-html-template +{{ $events := where .Site.RegularPages "Type" "events" }} +{{ $futureEvents := where $events "Params.eventDate" "gt" now }} +``` + +When working with YAML or JSON, or quoted TOML values, custom dates are strings; you cannot compare them with `time.Time` values. String comparisons may be possible if the custom date layout is consistent from one page to the next. However, to be safe, filter the pages by ranging through the collection: + +```go-html-template +{{ $events := where .Site.RegularPages "Type" "events" }} +{{ $futureEvents := slice }} +{{ range $events }} + {{ if gt (time.AsTime .Params.eventDate) now }} + {{ $futureEvents = $futureEvents | append . }} + {{ end }} +{{ end }} +``` + +## Nil comparison + +To return a collection of pages where the "color" parameter is present in front matter, compare to `nil`: + +```go-html-template +{{ $pages := where .Site.RegularPages "Params.color" "ne" nil }} +``` + +To return a collection of pages where the "color" parameter is not present in front matter, compare to `nil`: + +```go-html-template +{{ $pages := where .Site.RegularPages "Params.color" "eq" nil }} +``` + +In both examples above, note that `nil` is not quoted. + +## Nested comparison + +These are equivalent: + +```go-html-template +{{ $pages := where .Site.RegularPages "Type" "tutorials" }} +{{ $pages = where $pages "Params.level" "eq" "beginner" }} +``` + +```go-html-template +{{ $pages := where (where .Site.RegularPages "Type" "tutorials") "Params.level" "eq" "beginner" }} +``` + +## Portable section comparison + +Useful for theme authors, avoid hardcoding section names by using the `where` function with the [`MainSections`] method on a `Site` object. + +[`MainSections`]: /methods/site/mainsections + +```go-html-template +{{ $pages := where .Site.RegularPages "Section" "in" .Site.MainSections }} +``` + +With this construct, a theme author can instruct users to specify their main sections in the site configuration: + +{{< code-toggle file=hugo >}} +[params] +mainSections = ['blog','galleries'] +{{< /code-toggle >}} + +If `params.mainSections` is not defined in the site configuration, the `MainSections` method returns a slice with one element---the top level section with the most pages. + +## Boolean/undefined comparison + +Consider this site content: + +```text +content/ +├── posts/ +│ ├── _index.md +│ ├── post-1.md <-- front matter: exclude = false +│ ├── post-2.md <-- front matter: exclude = true +│ └── post-3.md <-- front matter: exclude not defined +└── _index.md +``` + +The first two pages have an "exclude" field in front matter, but the last page does not. When testing for _equality_, the third page is _excluded_ from the result. When testing for _inequality_, the third page is _included_ in the result. + +### Equality test + +This template: + +```go-html-template +<ul> + {{ range where .Site.RegularPages "Params.exclude" "eq" false }} + <li><a href="{{ .RelPermalink }}">{{ .LinkTitle }}</a></li> + {{ end }} +</ul> +``` + +Is rendered to: + +```html +<ul> + <li><a href="/posts/post-1/">Post 1</a></li> +</ul> +``` + +This template: + +```go-html-template +<ul> + {{ range where .Site.RegularPages "Params.exclude" "eq" true }} + <li><a href="{{ .RelPermalink }}">{{ .LinkTitle }}</a></li> + {{ end }} +</ul> +``` + +Is rendered to: + +```html +<ul> + <li><a href="/posts/post-2/">Post 2</a></li> +</ul> +``` + +### Inequality test + +This template: + +```go-html-template +<ul> + {{ range where .Site.RegularPages "Params.exclude" "ne" false }} + <li><a href="{{ .RelPermalink }}">{{ .LinkTitle }}</a></li> + {{ end }} +</ul> +``` + +Is rendered to: + +```html +<ul> + <li><a href="/posts/post-2/">Post 2</a></li> + <li><a href="/posts/post-3/">Post 3</a></li> +</ul> +``` + +This template: + +```go-html-template +<ul> + {{ range where .Site.RegularPages "Params.exclude" "ne" true }} + <li><a href="{{ .RelPermalink }}">{{ .LinkTitle }}</a></li> + {{ end }} +</ul> +``` + +Is rendered to: + +```html +<ul> + <li><a href="/posts/post-1/">Post 1</a></li> + <li><a href="/posts/post-3/">Post 3</a></li> +</ul> +``` + +To exclude a page with an undefined field from a boolean _inequality_ test: + +1. Create a collection using a boolean comparison +2. Create a collection using a nil comparison +3. Subtract the second collection from the first collection using the [`collections.Complement`] function. + +[`collections.Complement`]: /functions/collections/complement + +This template: + +```go-html-template +{{ $p1 := where .Site.RegularPages "Params.exclude" "ne" true }} +{{ $p2 := where .Site.RegularPages "Params.exclude" "eq" nil }} +<ul> + {{ range $p1 | complement $p2 }} + <li><a href="{{ .RelPermalink }}">{{ .LinkTitle }}</a></li> + {{ end }} +</ul> +``` + +Is rendered to: + +```html +<ul> + <li><a href="/posts/post-1/">Post 1</a></li> +</ul> +``` + +This template: + +```go-html-template +{{ $p1 := where .Site.RegularPages "Params.exclude" "ne" false }} +{{ $p2 := where .Site.RegularPages "Params.exclude" "eq" nil }} +<ul> + {{ range $p1 | complement $p2 }} + <li><a href="{{ .RelPermalink }}">{{ .LinkTitle }}</a></li> + {{ end }} +</ul> +``` + +Is rendered to: + +```html +<ul> + <li><a href="/posts/post-1/">Post 2</a></li> +</ul> +``` diff --git a/docs/content/en/functions/collections/_index.md b/docs/content/en/functions/collections/_index.md new file mode 100644 index 000000000..51981f79b --- /dev/null +++ b/docs/content/en/functions/collections/_index.md @@ -0,0 +1,12 @@ +--- +title: Collections functions +linkTitle: collections +description: Template functions to work with arrays, slices, maps, and page collections. +categories: [] +keywords: [] +menu: + docs: + parent: functions +--- + +Use these functions to work with arrays, slices, maps, and page collections. diff --git a/docs/content/en/functions/compare/Conditional.md b/docs/content/en/functions/compare/Conditional.md new file mode 100644 index 000000000..6d693770d --- /dev/null +++ b/docs/content/en/functions/compare/Conditional.md @@ -0,0 +1,41 @@ +--- +title: compare.Conditional +description: Returns one of two arguments depending on the value of the control argument. +categories: [] +keywords: [] +action: + aliases: [cond] + related: + - functions/compare/Default + returnType: any + signatures: [compare.Conditional CONTROL ARG1 ARG2] +aliases: [/functions/cond] +--- + +The CONTROL argument is a boolean value that indicates whether the function should return ARG1 or ARG2. If CONTROL is `true`, the function returns ARG1. Otherwise, the function returns ARG2. + +```go-html-template +{{ $qty := 42 }} +{{ cond (le $qty 3) "few" "many" }} → many +``` + +The CONTROL argument must be either `true` or `false`. To cast a non-boolean value to boolean, pass it through the `not` operator twice. + +```go-html-template +{{ cond (42 | not | not) "truthy" "falsy" }} → truthy +{{ cond ("" | not | not) "truthy" "falsy" }} → falsy +``` + +{{% note %}} +Unlike [ternary operators] in other languages, the `cond` function does not perform [short-circuit evaluation]. The function evaluates both ARG1 and ARG2, regardless of the CONTROL value. + +[short-circuit evaluation]: https://en.wikipedia.org/wiki/Short-circuit_evaluation +[ternary operators]: https://en.wikipedia.org/wiki/Ternary_conditional_operator +{{% /note %}} + +Due to the absence of short-circuit evaluation, these examples throw an error: + +```go-html-template +{{ cond true "true" (div 1 0) }} +{{ cond false (div 1 0) "false" }} +``` diff --git a/docs/content/en/functions/compare/Default.md b/docs/content/en/functions/compare/Default.md new file mode 100644 index 000000000..1e6bd7968 --- /dev/null +++ b/docs/content/en/functions/compare/Default.md @@ -0,0 +1,48 @@ +--- +title: compare.Default +description: Returns the second argument if set, else the first argument. +keywords: [] +action: + aliases: [default] + related: + - functions/compare/Conditional + - functions/go-template/Or + returnType: any + signatures: [compare.Default DEFAULT INPUT] +aliases: [/functions/default] +--- + +The `default` function returns the second argument if set, else the first argument. + +{{% note %}} +When the second argument is the boolean `false` value, the `default` function returns `false`. All _other_ falsy values are considered unset. + +{{% include "functions/go-template/_common/truthy-falsy.md" %}} + +To set a default value based on truthiness, use the [`or`] operator instead. + +[`or`]: /functions/go-template/or +{{% /note %}} + +The `default` function returns the second argument if set: + +```go-html-template +{{ default 42 1 }} → 1 +{{ default 42 "foo" }} → foo +{{ default 42 (dict "k" "v") }} → map[k:v] +{{ default 42 (slice "a" "b") }} → [a b] +{{ default 42 true }} → true + +<!-- As noted above, the boolean "false" is considered set --> +{{ default 42 false }} → false +``` + +The `default` function returns the first argument if the second argument is not set: + +```go-html-template +{{ default 42 0 }} → 42 +{{ default 42 "" }} → 42 +{{ default 42 dict }} → 42 +{{ default 42 slice }} → 42 +{{ default 42 <nil> }} → 42 +``` diff --git a/docs/content/en/functions/compare/Eq.md b/docs/content/en/functions/compare/Eq.md new file mode 100644 index 000000000..49350e676 --- /dev/null +++ b/docs/content/en/functions/compare/Eq.md @@ -0,0 +1,27 @@ +--- +title: compare.Eq +description: Returns the boolean truth of arg1 == arg2 || arg1 == arg3. +categories: [] +keywords: [] +action: + aliases: [eq] + related: + - functions/compare/Ge + - functions/compare/Gt + - functions/compare/Le + - functions/compare/Lt + - functions/compare/Ne + returnType: bool + signatures: ['compare.Eq ARG1 ARG2 [ARG...]'] +aliases: [/functions/eq] +--- + +```go-html-template +{{ eq 1 1 }} → true +{{ eq 1 2 }} → false + +{{ eq 1 1 1 }} → true +{{ eq 1 1 2 }} → true +{{ eq 1 2 1 }} → true +{{ eq 1 2 2 }} → false +``` diff --git a/docs/content/en/functions/compare/Ge.md b/docs/content/en/functions/compare/Ge.md new file mode 100644 index 000000000..479ecf990 --- /dev/null +++ b/docs/content/en/functions/compare/Ge.md @@ -0,0 +1,32 @@ +--- +title: compare.Ge +description: Returns the boolean truth of arg1 >= arg2 && arg1 >= arg3. +categories: [] +keywords: [] +action: + aliases: [ge] + related: + - functions/compare/Eq + - functions/compare/Gt + - functions/compare/Le + - functions/compare/Lt + - functions/compare/Ne + returnType: bool + signatures: ['compare.Ge ARG1 ARG2 [ARG...]'] +aliases: [/functions/ge] +--- + +```go-html-template +{{ ge 1 1 }} → true +{{ ge 1 2 }} → false +{{ ge 2 1 }} → true + +{{ ge 1 1 1 }} → true +{{ ge 1 1 2 }} → false +{{ ge 1 2 1 }} → false +{{ ge 1 2 2 }} → false + +{{ ge 2 1 1 }} → true +{{ ge 2 1 2 }} → true +{{ ge 2 2 1 }} → true +``` diff --git a/docs/content/en/functions/compare/Gt.md b/docs/content/en/functions/compare/Gt.md new file mode 100644 index 000000000..0af289ce2 --- /dev/null +++ b/docs/content/en/functions/compare/Gt.md @@ -0,0 +1,32 @@ +--- +title: compare.Gt +description: Returns the boolean truth of arg1 > arg2 && arg1 > arg3. +categories: [] +keywords: [] +action: + aliases: [gt] + related: + - functions/compare/Eq + - functions/compare/Ge + - functions/compare/Le + - functions/compare/Lt + - functions/compare/Ne + returnType: bool + signatures: ['compare.Gt ARG1 ARG2 [ARG...]'] +aliases: [/functions/gt] +--- + +```go-html-template +{{ gt 1 1 }} → false +{{ gt 1 2 }} → false +{{ gt 2 1 }} → true + +{{ gt 1 1 1 }} → false +{{ gt 1 1 2 }} → false +{{ gt 1 2 1 }} → false +{{ gt 1 2 2 }} → false + +{{ gt 2 1 1 }} → true +{{ gt 2 1 2 }} → false +{{ gt 2 2 1 }} → false +``` diff --git a/docs/content/en/functions/compare/Le.md b/docs/content/en/functions/compare/Le.md new file mode 100644 index 000000000..319d376f6 --- /dev/null +++ b/docs/content/en/functions/compare/Le.md @@ -0,0 +1,32 @@ +--- +title: compare.Le +description: Returns the boolean truth of arg1 <= arg2 && arg1 <= arg3. +categories: [] +keywords: [] +action: + aliases: [le] + related: + - functions/compare/Eq + - functions/compare/Ge + - functions/compare/Gt + - functions/compare/Lt + - functions/compare/Ne + returnType: bool + signatures: ['compare.Le ARG1 ARG2 [ARG...]'] +aliases: [/functions/le] +--- + +```go-html-template +{{ le 1 1 }} → true +{{ le 1 2 }} → true +{{ le 2 1 }} → false + +{{ le 1 1 1 }} → true +{{ le 1 1 2 }} → true +{{ le 1 2 1 }} → true +{{ le 1 2 2 }} → true + +{{ le 2 1 1 }} → false +{{ le 2 1 2 }} → false +{{ le 2 2 1 }} → false +``` diff --git a/docs/content/en/functions/compare/Lt.md b/docs/content/en/functions/compare/Lt.md new file mode 100644 index 000000000..3fe8f1d2c --- /dev/null +++ b/docs/content/en/functions/compare/Lt.md @@ -0,0 +1,32 @@ +--- +title: compare.Lt +description: Returns the boolean truth of arg1 < arg2 && arg1 < arg3. +categories: [] +keywords: [] +action: + aliases: [lt] + related: + - functions/compare/Eq + - functions/compare/Ge + - functions/compare/Gt + - functions/compare/Le + - functions/compare/Ne + returnType: bool + signatures: ['compare.Lt ARG1 ARG2 [ARG...]'] +aliases: [/functions/lt] +--- + +```go-html-template +{{ lt 1 1 }} → false +{{ lt 1 2 }} → true +{{ lt 2 1 }} → false + +{{ lt 1 1 1 }} → false +{{ lt 1 1 2 }} → false +{{ lt 1 2 1 }} → false +{{ lt 1 2 2 }} → true + +{{ lt 2 1 1 }} → false +{{ lt 2 1 2 }} → false +{{ lt 2 2 1 }} → false +``` diff --git a/docs/content/en/functions/compare/Ne.md b/docs/content/en/functions/compare/Ne.md new file mode 100644 index 000000000..2d9f826fc --- /dev/null +++ b/docs/content/en/functions/compare/Ne.md @@ -0,0 +1,27 @@ +--- +title: compare.Ne +description: Returns the boolean truth of arg1 != arg2 && arg1 != arg3. +categories: [] +keywords: [] +action: + aliases: [ne] + related: + - functions/compare/Eq + - functions/compare/Ge + - functions/compare/Gt + - functions/compare/Le + - functions/compare/Lt + returnType: bool + signatures: ['compare.Ne ARG1 ARG2 [ARG...]'] +aliases: [/functions/ne] +--- + +```go-html-template +{{ ne 1 1 }} → false +{{ ne 1 2 }} → true + +{{ ne 1 1 1 }} → false +{{ ne 1 1 2 }} → false +{{ ne 1 2 1 }} → false +{{ ne 1 2 2 }} → true +``` diff --git a/docs/content/en/functions/compare/_index.md b/docs/content/en/functions/compare/_index.md new file mode 100644 index 000000000..a9b3a7b27 --- /dev/null +++ b/docs/content/en/functions/compare/_index.md @@ -0,0 +1,12 @@ +--- +title: Compare functions +linkTitle: compare +description: Template functions to compare two or more values. +categories: [] +keywords: [] +menu: + docs: + parent: functions +--- + +Use these functions to compare two or more values. diff --git a/docs/content/en/functions/crypto/FNV32a.md b/docs/content/en/functions/crypto/FNV32a.md new file mode 100644 index 000000000..eda303e62 --- /dev/null +++ b/docs/content/en/functions/crypto/FNV32a.md @@ -0,0 +1,22 @@ +--- +title: crypto.FNV32a +description: Returns the FNV (Fowler–Noll–Vo) 32-bit hash of a given string. +categories: [] +keywords: [] +action: + aliases: [] + related: + - functions/crypto/HMAC + - functions/crypto/MD5 + - functions/crypto/SHA1 + - functions/crypto/SHA256 + returnType: int + signatures: [crypto.FNV32a STRING] +aliases: [/functions/crypto.fnv32a] +--- + +This function calculates the 32-bit [FNV1a hash](https://en.wikipedia.org/wiki/Fowler%E2%80%93Noll%E2%80%93Vo_hash_function#FNV-1a_hash) of a given string according to the [specification](https://datatracker.ietf.org/doc/html/draft-eastlake-fnv-12): + +```go-html-template +{{ crypto.FNV32a "Hello world" }} → 1498229191 +``` diff --git a/docs/content/en/functions/crypto/HMAC.md b/docs/content/en/functions/crypto/HMAC.md new file mode 100644 index 000000000..1906689a2 --- /dev/null +++ b/docs/content/en/functions/crypto/HMAC.md @@ -0,0 +1,31 @@ +--- +title: crypto.HMAC +description: Returns a cryptographic hash that uses a key to sign a message. +categories: [] +keywords: [] +action: + aliases: [hmac] + related: + - functions/crypto/FNV32a + - functions/crypto/MD5 + - functions/crypto/SHA1 + - functions/crypto/SHA256 + returnType: string + signatures: ['crypto.HMAC HASH_TYPE KEY MESSAGE [ENCODING]'] +aliases: [/functions/hmac] +--- + +Set the `HASH_TYPE` argument to `md5`, `sha1`, `sha256`, or `sha512`. + +Set the optional `ENCODING` argument to either `hex` (default) or `binary`. + +```go-html-template +{{ hmac "sha256" "Secret key" "Secret message" }} +5cceb491f45f8b154e20f3b0a30ed3a6ff3027d373f85c78ffe8983180b03c84 + +{{ hmac "sha256" "Secret key" "Secret message" "hex" }} +5cceb491f45f8b154e20f3b0a30ed3a6ff3027d373f85c78ffe8983180b03c84 + +{{ hmac "sha256" "Secret key" "Secret message" "binary" | base64Encode }} +XM60kfRfixVOIPOwow7Tpv8wJ9Nz+Fx4/+iYMYCwPIQ= +``` diff --git a/docs/content/en/functions/crypto/MD5.md b/docs/content/en/functions/crypto/MD5.md new file mode 100644 index 000000000..ba44660df --- /dev/null +++ b/docs/content/en/functions/crypto/MD5.md @@ -0,0 +1,26 @@ +--- +title: crypto.MD5 +description: Hashes the given input and returns its MD5 checksum encoded to a hexadecimal string. +categories: [] +keywords: [] +action: + aliases: [md5] + related: + - functions/crypto/FNV32a + - functions/crypto/HMAC + - functions/crypto/SHA1 + - functions/crypto/SHA256 + returnType: string + signatures: [crypto.MD5 INPUT] +aliases: [/functions/md5] +--- + +```go-html-template +{{ md5 "Hello world" }} → 3e25960a79dbc69b674cd4ec67a72c62 +``` + +This can be useful if you want to use [Gravatar](https://en.gravatar.com/) for generating a unique avatar: + +```html +<img src="https://www.gravatar.com/avatar/{{ md5 "[email protected]" }}?s=100&d=identicon"> +``` diff --git a/docs/content/en/functions/crypto/SHA1.md b/docs/content/en/functions/crypto/SHA1.md new file mode 100644 index 000000000..204ff0384 --- /dev/null +++ b/docs/content/en/functions/crypto/SHA1.md @@ -0,0 +1,20 @@ +--- +title: crypto.SHA1 +description: Hashes the given input and returns its SHA1 checksum encoded to a hexadecimal string. +categories: [] +keywords: [] +action: + aliases: [sha1] + related: + - functions/crypto/FNV32a + - functions/crypto/HMAC + - functions/crypto/MD5 + - functions/crypto/SHA256 + returnType: string + signatures: [crypto.SHA1 INPUT] +aliases: [/functions/sha,/functions/sha1] +--- + +```go-html-template +{{ sha1 "Hello world" }} → 7b502c3a1f48c8609ae212cdfb639dee39673f5e +``` diff --git a/docs/content/en/functions/crypto/SHA256.md b/docs/content/en/functions/crypto/SHA256.md new file mode 100644 index 000000000..6fb657767 --- /dev/null +++ b/docs/content/en/functions/crypto/SHA256.md @@ -0,0 +1,20 @@ +--- +title: crypto.SHA256 +description: Hashes the given input and returns its SHA256 checksum encoded to a hexadecimal string. +categories: [] +keywords: [] +action: + aliases: [sha256] + related: + - functions/crypto/FNV32a + - functions/crypto/HMAC + - functions/crypto/MD5 + - functions/crypto/SHA1 + returnType: string + signatures: [crypto.SHA256 INPUT] +aliases: [/functions/sha256] +--- + +```go-html-template +{{ sha256 "Hello world" }} → 64ec88ca00b268e5ba1a35678a1b5316d212f4f366b2477232534a8aeca37f3c +``` diff --git a/docs/content/en/functions/crypto/_index.md b/docs/content/en/functions/crypto/_index.md new file mode 100644 index 000000000..5c95aab6e --- /dev/null +++ b/docs/content/en/functions/crypto/_index.md @@ -0,0 +1,12 @@ +--- +title: Crypto functions +linkTitle: crypto +description: Template functions to create cryptographic hashes. +categories: [] +keywords: [] +menu: + docs: + parent: functions +--- + +Use these functions to create cryptographic hashes. diff --git a/docs/content/en/functions/data/GetCSV.md b/docs/content/en/functions/data/GetCSV.md new file mode 100644 index 000000000..d61ea791d --- /dev/null +++ b/docs/content/en/functions/data/GetCSV.md @@ -0,0 +1,140 @@ +--- +title: data.GetCSV +description: Returns an array of arrays from a local or remote CSV file, or an error if the file does not exist. +categories: [] +keywords: [] +action: + aliases: [getCSV] + related: + - functions/data/GetJSON + - functions/resources/Get + - functions/resources/GetRemote + - methods/page/Resources + returnType: '[][]string' + signatures: ['data.GetCSV SEPARATOR INPUT... [OPTIONS]'] +toc: true +--- + +Given the following directory structure: + +```text +my-project/ +└── other-files/ + └── pets.csv +``` + +Access the data with either of the following: + +```go-html-template +{{ $data := getCSV "," "other-files/pets.csv" }} +{{ $data := getCSV "," "other-files/" "pets.csv" }} +``` + +{{% note %}} +When working with local data, the filepath is relative to the working directory. + +You must not place CSV files in the project's data directory. +{{% /note %}} + +Access remote data with either of the following: + +```go-html-template +{{ $data := getCSV "," "https://example.org/pets.csv" }} +{{ $data := getCSV "," "https://example.org/" "pets.csv" }} +``` + +The resulting data structure is an array of arrays: + +```json +[ + ["name","type","breed","age"], + ["Spot","dog","Collie","3"], + ["Felix","cat","Malicious","7"] +] +``` + +## Options + +Add headers to the request by providing an options map: + +```go-html-template +{{ $opts := dict "Authorization" "Bearer abcd" }} +{{ $data := getCSV "," "https://example.org/pets.csv" $opts }} +``` + +Add multiple headers using a slice: + +```go-html-template +{{ $opts := dict "X-List" (slice "a" "b" "c") }} +{{ $data := getCSV "," "https://example.org/pets.csv" $opts }} +``` + +## Global resource alternative + +Consider using the [`resources.Get`] function with [`transform.Unmarshal`] when accessing a global resource. + +```text +my-project/ +└── assets/ + └── data/ + └── pets.csv +``` + +```go-html-template +{{ $data := "" }} +{{ $p := "data/pets.csv" }} +{{ with resources.Get $p }} + {{ $opts := dict "delimiter" "," }} + {{ $data = . | transform.Unmarshal $opts }} +{{ else }} + {{ errorf "Unable to get resource %q" $p }} +{{ end }} +``` + +## Page resource alternative + +Consider using the [`Resources.Get`] method with [`transform.Unmarshal`] when accessing a page resource. + +```text +my-project/ +└── content/ + └── posts/ + └── my-pets/ + ├── index.md + └── pets.csv +``` + +```go-html-template +{{ $data := "" }} +{{ $p := "pets.csv" }} +{{ with .Resources.Get $p }} + {{ $opts := dict "delimiter" "," }} + {{ $data = . | transform.Unmarshal $opts }} +{{ else }} + {{ errorf "Unable to get resource %q" $p }} +{{ end }} +``` + +## Remote resource alternative + +Consider using the [`resources.GetRemote`] function with [`transform.Unmarshal`] when accessing a remote resource to improve error handling and cache control. + +```go-html-template +{{ $data := "" }} +{{ $u := "https://example.org/pets.csv" }} +{{ with resources.GetRemote $u }} + {{ with .Err }} + {{ errorf "%s" . }} + {{ else }} + {{ $opts := dict "delimiter" "," }} + {{ $data = . | transform.Unmarshal $opts }} + {{ end }} +{{ else }} + {{ errorf "Unable to get remote resource %q" $u }} +{{ end }} +``` + +[`Resources.Get`]: methods/page/Resources +[`resources.GetRemote`]: /functions/resources/getremote +[`resources.Get`]: /functions/resources/get +[`transform.Unmarshal`]: /functions/transform/unmarshal diff --git a/docs/content/en/functions/data/GetJSON.md b/docs/content/en/functions/data/GetJSON.md new file mode 100644 index 000000000..4db3c8988 --- /dev/null +++ b/docs/content/en/functions/data/GetJSON.md @@ -0,0 +1,142 @@ +--- +title: data.GetJSON +description: Returns a JSON object from a local or remote JSON file, or an error if the file does not exist. +categories: [] +keywords: [] +action: + aliases: [getJSON] + related: + - functions/data/GetCSV + - functions/resources/Get + - functions/resources/GetRemote + - methods/page/Resources + returnType: any + signatures: ['data.GetJSON INPUT... [OPTIONS]'] +toc: true +--- + +Given the following directory structure: + +```text +my-project/ +└── other-files/ + └── books.json +``` + +Access the data with either of the following: + +```go-html-template +{{ $data := getJSON "other-files/books.json" }} +{{ $data := getJSON "other-files/" "books.json" }} +``` + +{{% note %}} +When working with local data, the filepath is relative to the working directory. +{{% /note %}} + +Access remote data with either of the following: + +```go-html-template +{{ $data := getJSON "https://example.org/books.json" }} +{{ $data := getJSON "https://example.org/" "books.json" }} +``` + +The resulting data structure is a JSON object: + +```json +[ + { + "author": "Victor Hugo", + "rating": 5, + "title": "Les Misérables" + }, + { + "author": "Victor Hugo", + "rating": 4, + "title": "The Hunchback of Notre Dame" + } +] +``` + +## Options + +Add headers to the request by providing an options map: + +```go-html-template +{{ $opts := dict "Authorization" "Bearer abcd" }} +{{ $data := getJSON "https://example.org/books.json" $opts }} +``` + +Add multiple headers using a slice: + +```go-html-template +{{ $opts := dict "X-List" (slice "a" "b" "c") }} +{{ $data := getJSON "https://example.org/books.json" $opts }} +``` + +## Global resource alternative + +Consider using the [`resources.Get`] function with [`transform.Unmarshal`] when accessing a global resource. + +```text +my-project/ +└── assets/ + └── data/ + └── books.json +``` + +```go-html-template +{{ $data := "" }} +{{ $p := "data/books.json" }} +{{ with resources.Get $p }} + {{ $data = . | transform.Unmarshal }} +{{ else }} + {{ errorf "Unable to get resource %q" $p }} +{{ end }} +``` + +## Page resource alternative + +Consider using the [`Resources.Get`] method with [`transform.Unmarshal`] when accessing a page resource. + +```text +my-project/ +└── content/ + └── posts/ + └── reading-list/ + ├── books.json + └── index.md +``` + +```go-html-template +{{ $data := "" }} +{{ $p := "books.json" }} +{{ with .Resources.Get $p }} + {{ $data = . | transform.Unmarshal }} +{{ else }} + {{ errorf "Unable to get resource %q" $p }} +{{ end }} +``` + +## Remote resource alternative + +Consider using the [`resources.GetRemote`] function with [`transform.Unmarshal`] when accessing a remote resource to improve error handling and cache control. + +```go-html-template +{{ $data := "" }} +{{ $u := "https://example.org/books.json" }} +{{ with resources.GetRemote $u }} + {{ with .Err }} + {{ errorf "%s" . }} + {{ else }} + {{ $data = . | transform.Unmarshal }} + {{ end }} +{{ else }} + {{ errorf "Unable to get remote resource %q" $u }} +{{ end }} +``` + +[`Resources.Get`]: methods/page/Resources +[`resources.GetRemote`]: /functions/resources/getremote +[`resources.Get`]: /functions/resources/get +[`transform.Unmarshal`]: /functions/transform/unmarshal diff --git a/docs/content/en/functions/data/_index.md b/docs/content/en/functions/data/_index.md new file mode 100644 index 000000000..142d6b528 --- /dev/null +++ b/docs/content/en/functions/data/_index.md @@ -0,0 +1,12 @@ +--- +title: Data functions +linkTitle: data +description: Template functions to read local or remote data files. +categories: [] +keywords: [] +menu: + docs: + parent: functions +--- + +Use these functions to read local or remote data files. diff --git a/docs/content/en/functions/debug/Dump.md b/docs/content/en/functions/debug/Dump.md new file mode 100644 index 000000000..d3161605f --- /dev/null +++ b/docs/content/en/functions/debug/Dump.md @@ -0,0 +1,45 @@ +--- +title: debug.Dump +description: Returns an object dump as a string. +categories: [] +keywords: [] +action: + aliases: [] + related: [] + returnType: string + signatures: [debug.Dump VALUE] +--- + +```go-html-template +{{ $data := "" }} +{{ $p := "data/books.json" }} +{{ with resources.Get $p }} + {{ $opts := dict "delimiter" "," }} + {{ $data = . | transform.Unmarshal $opts }} +{{ else }} + {{ errorf "Unable to get resource %q" $p }} +{{ end }} +``` + +```go-html-template +<pre>{{ debug.Dump $data }}</pre> +``` + +```text +[]interface {}{ + map[string]interface {}{ + "author": "Victor Hugo", + "rating": 5.0, + "title": "Les Misérables", + }, + map[string]interface {}{ + "author": "Victor Hugo", + "rating": 4.0, + "title": "The Hunchback of Notre Dame", + }, +} +``` + +{{% note %}} +Output from this function may change from one release to the next. Use for debugging only. +{{% /note %}} diff --git a/docs/content/en/functions/debug/Timer.md b/docs/content/en/functions/debug/Timer.md new file mode 100644 index 000000000..ae6c3188f --- /dev/null +++ b/docs/content/en/functions/debug/Timer.md @@ -0,0 +1,37 @@ +--- +title: debug.Timer +description: Creates a named timer that reports elapsed time to the console. +categories: [] +keywords: [] +action: + aliases: [] + related: [] + returnType: debug.Timer + signatures: [debug.Timer NAME] +--- + +{{< new-in 0.120.0 >}} + +Use the `debug.Timer` function to determine execution time for a block of code, useful for finding performance bottle necks in templates. + +The timer starts when you instantiate it, and stops when you call its `Stop` method. + +```go-html-template +{{ $t := debug.Timer "TestSqrt" }} +{{ range seq 2000 }} + {{ $f := math.Sqrt . }} +{{ end }} +{{ $t.Stop }} +``` + +Use the `--logLevel info` command line flag when you build the site. + +```sh +hugo --logLevel info +``` + +The results are displayed in the console at the end of the build. You can have as many timers as you want and if you don't stop them, they will be stopped at the end of build. + +```text +INFO timer: name TestSqrt total 12.429355ms +``` diff --git a/docs/content/en/functions/debug/_index.md b/docs/content/en/functions/debug/_index.md new file mode 100644 index 000000000..418828515 --- /dev/null +++ b/docs/content/en/functions/debug/_index.md @@ -0,0 +1,12 @@ +--- +title: Debug functions +linkTitle: debug +description: Template functions to debug your templates. +categories: [] +keywords: [] +menu: + docs: + parent: functions +--- + +Use these functions to debug your templates. diff --git a/docs/content/en/functions/diagrams/Goat.md b/docs/content/en/functions/diagrams/Goat.md new file mode 100644 index 000000000..2b31d9824 --- /dev/null +++ b/docs/content/en/functions/diagrams/Goat.md @@ -0,0 +1,113 @@ +--- +title: diagrams.Goat +description: Converts ASCII art to an SVG diagram, returning a GoAT diagram object. +categories: [] +keywords: [] +action: + aliases: [] + related: [] + returnType: diagrams.goatDiagram + signatures: ['diagrams.Goat INPUT'] +toc: true +--- + +Useful in a code block [render hook], the `diagram.Goat` function converts ASCII art to an SVG diagram, returning a [GoAT] diagram object with the following methods: + +[GoAT]: https://github.com/blampe/goat#readme +[render hook]: https://gohugo.io/templates/render-hooks/ + +Inner +: (`template.HTML`) Returns the SVG child elements without a wrapping `svg` element, allowing you to create your own wrapper. + +Wrapped +: (`template.HTML`) Returns the SVG child elements wrapped in an `svg` element. + +Width +: (`int`) Returns the width of the rendered diagram, in pixels. + +Height +: (`int`) Returns the height of the rendered diagram, in pixels. + +## GoAT Diagrams + +Hugo natively supports [GoAT] diagrams. + +This markdown: + +```` +```goat +.---. .-. .-. .-. .---. +| A +--->| 1 |<--->| 2 |<--->| 3 |<---+ B | +'---' '-' '+' '+' '---' +``` +```` + +Is rendered to: + +```html +<div class="goat svg-container"> + <svg xmlns="http://www.w3.org/2000/svg" font-family="Menlo,Lucida Console,monospace" viewBox="0 0 352 57"> + ... + </svg> +</div> +``` + +Which appears in your browser as: + +```goat {class="mw6-ns"} +.---. .-. .-. .-. .---. +| A +--->| 1 |<--->| 2 |<--->| 3 |<---+ B | +'---' '-' '+' '+' '---' +``` + +To customize rendering, override Hugo's [built-in code block render hook] for GoAT diagrams. + +[built-in code block render hook]: https://github.com/gohugoio/hugo/blob/master/tpl/tplimpl/embedded/templates/_default/_markup/render-codeblock-goat.html + +## Code block render hook + +By way of example, let's create a code block render hook to render GoAT diagrams as `figure` elements with an optional caption. + +{{< code file=layouts/_default/_markup/render-codeblock-goat.html >}} +{{ $caption := or .Attributes.caption "" }} +{{ $class := or .Attributes.class "diagram" }} +{{ $id := or .Attributes.id (printf "diagram-%d" (add 1 .Ordinal)) }} + +<figure id="{{ $id }}"> + {{ with diagrams.Goat (trim .Inner "\n\r") }} + <svg class="{{ $class }}" width="{{ .Width }}" height="{{ .Height }}" xmlns="http://www.w3.org/2000/svg" version="1.1"> + {{ .Inner }} + </svg> + {{ end }} + <figcaption>{{ $caption }}</figcaption> +</figure> +{{< /code >}} + +This markdown: + +{{< code file=content/example.md lang=text >}} +```goat {class="foo" caption="Diagram 1: Example"} +.---. .-. .-. .-. .---. +| A +--->| 1 |<--->| 2 |<--->| 3 |<---+ B | +'---' '-' '+' '+' '---' +``` +{{< /code >}} + +Is rendered to: + +```html +<figure id="diagram-1"> + <svg class="foo" width="272" height="57" xmlns="http://www.w3.org/2000/svg" version="1.1"> + ... + </svg> + <figcaption>Diagram 1: Example</figcaption> +</figure> +``` + +Use CSS to style the SVG as needed: + +```css +svg.foo { + font-family: "Segoe UI","Noto Sans",Helvetica,Arial,sans-serif +} +``` diff --git a/docs/content/en/functions/diagrams/_index.md b/docs/content/en/functions/diagrams/_index.md new file mode 100644 index 000000000..e136b4f33 --- /dev/null +++ b/docs/content/en/functions/diagrams/_index.md @@ -0,0 +1,12 @@ +--- +title: Diagram functions +linkTitle: diagrams +description: Template functions to render diagrams. +categories: [] +keywords: [] +menu: + docs: + parent: functions +--- + +Use these functions to render diagrams. diff --git a/docs/content/en/functions/encoding/Base64Decode.md b/docs/content/en/functions/encoding/Base64Decode.md new file mode 100644 index 000000000..821ca805a --- /dev/null +++ b/docs/content/en/functions/encoding/Base64Decode.md @@ -0,0 +1,40 @@ +--- +title: encoding.Base64Decode +description: Returns the base64 decoding of the given content. +categories: [] +keywords: [] +action: + aliases: [base64Decode] + related: + - functions/encoding/Base64Encode + returnType: string + signatures: [encoding.Base64Decode INPUT] +aliases: [/functions/base64Decode] +--- + +```go-html-template +{{ "SHVnbw==" | base64Decode }} → Hugo +``` + +Use the `base64Decode` function to decode responses from APIs. For example, the result of this call to GitHub's API contains the base64-encoded representation of the repository's README file: + +```text +https://api.github.com/repos/gohugoio/hugo/readme +``` + +To retrieve and render the content: + +```go-html-template +{{ $u := "https://api.github.com/repos/gohugoio/hugo/readme" }} +{{ with resources.GetRemote $u }} + {{ with .Err }} + {{ errorf "%s" . }} + {{ else }} + {{ with . | transform.Unmarshal }} + {{ .content | base64Decode | markdownify }} + {{ end }} + {{ end }} +{{ else }} + {{ errorf "Unable to get remote resource %q" $u }} +{{ end }} +``` diff --git a/docs/content/en/functions/encoding/Base64Encode.md b/docs/content/en/functions/encoding/Base64Encode.md new file mode 100644 index 000000000..14f67a132 --- /dev/null +++ b/docs/content/en/functions/encoding/Base64Encode.md @@ -0,0 +1,17 @@ +--- +title: encoding.Base64Encode +description: Returns the base64 decoding of the given content. +categories: [] +keywords: [] +action: + aliases: [base64Encode] + related: + - functions/encoding/Base64Decode + returnType: string + signatures: [encoding.Base64Encode INPUT] +aliases: [/functions/base64, /functions/base64Encode] +--- + +```go-html-template +{{ "Hugo" | base64Encode }} → SHVnbw== +``` diff --git a/docs/content/en/functions/encoding/Jsonify.md b/docs/content/en/functions/encoding/Jsonify.md new file mode 100644 index 000000000..475f8a76a --- /dev/null +++ b/docs/content/en/functions/encoding/Jsonify.md @@ -0,0 +1,37 @@ +--- +title: encoding.Jsonify +description: Encodes the given object to JSON. +categories: [] +keywords: [] +action: + aliases: [jsonify] + returnType: template.HTML + related: + - functions/transform/Remarshal + - functions/transform/Unmarshal + signatures: + - encoding.Jsonify [OPTIONS] INPUT +aliases: [/functions/jsonify] +--- + +To customize the printing of the JSON, pass an options map as the first +argument. Supported options are "prefix" and "indent". Each JSON element in +the output will begin on a new line beginning with *prefix* followed by one or +more copies of *indent* according to the indentation nesting. + +```go-html-template +{{ dict "title" .Title "content" .Plain | jsonify }} +{{ dict "title" .Title "content" .Plain | jsonify (dict "indent" " ") }} +{{ dict "title" .Title "content" .Plain | jsonify (dict "prefix" " " "indent" " ") }} +``` + +## Options + +indent +: (`string`) Indentation to use. Default is "". + +prefix +: (`string`) Indentation prefix. Default is "". + +noHTMLEscape +: (`bool`) Disable escaping of problematic HTML characters inside JSON quoted strings. The default behavior is to escape `&`, `<`, and `>` to `\u0026`, `\u003c`, and `\u003e` to avoid certain safety problems that can arise when embedding JSON in HTML. Default is `false`. diff --git a/docs/content/en/functions/encoding/_index.md b/docs/content/en/functions/encoding/_index.md new file mode 100644 index 000000000..3c4c4519e --- /dev/null +++ b/docs/content/en/functions/encoding/_index.md @@ -0,0 +1,12 @@ +--- +title: Encoding functions +linkTitle: encoding +description: Template functions to encode and decode data. +categories: [] +keywords: [] +menu: + docs: + parent: functions +--- + +Use these functions to encode and decode data. diff --git a/docs/content/en/functions/fmt/Errorf.md b/docs/content/en/functions/fmt/Errorf.md new file mode 100644 index 000000000..bbdd62c53 --- /dev/null +++ b/docs/content/en/functions/fmt/Errorf.md @@ -0,0 +1,26 @@ +--- +title: fmt.Errorf +description: Log an ERROR from a template. +categories: [] +keywords: [] +action: + aliases: [errorf] + related: + - functions/fmt/Erroridf + - functions/fmt/Warnf + returnType: string + signatures: ['fmt.Errorf FORMAT [INPUT]'] +aliases: [/functions/errorf] +--- + +{{% include "functions/fmt/_common/fmt-layout.md" %}} + +The `errorf` function evaluates the format string, then prints the result to the ERROR log and fails the build. + +```go-html-template +{{ errorf "The %q shortcode requires a src parameter. See %s" .Name .Position }} +``` + +Use the [`erroridf`] function to allow optional suppression of specific errors. + +[`erroridf`]: /functions/fmt/erroridf diff --git a/docs/content/en/functions/fmt/Erroridf.md b/docs/content/en/functions/fmt/Erroridf.md new file mode 100644 index 000000000..9884f4935 --- /dev/null +++ b/docs/content/en/functions/fmt/Erroridf.md @@ -0,0 +1,40 @@ +--- +title: fmt.Erroridf +description: Log a suppressable ERROR from a template. +categories: [] +keywords: [] +action: + aliases: [erroridf] + related: + - functions/fmt/Errorf + - functions/fmt/Warnf + returnType: string + signatures: ['fmt.Erroridf ID FORMAT [INPUT]'] +aliases: [/functions/erroridf] +--- + +{{% include "functions/fmt/_common/fmt-layout.md" %}} + +The `erroridf` function evaluates the format string, then prints the result to the ERROR log and fails the build. Unlike the [`errorf`] function, you may suppress errors logged by the `erroridf` function by adding the message ID to the `ignoreErrors` array in your site configuration. + +This template code: + +```go-html-template +{{ erroridf "error-42" "You should consider fixing this." }} +``` + +Produces this console log: + +```text +ERROR You should consider fixing this. +You can suppress this error by adding the following to your site configuration: +ignoreErrors = ['error-42'] +``` + +To suppress this message: + +{{< code-toggle file=hugo >}} +ignoreErrors = ["error-42"] +{{< /code-toggle >}} + +[`errorf`]: /functions/fmt/errorf diff --git a/docs/content/en/functions/fmt/Print.md b/docs/content/en/functions/fmt/Print.md new file mode 100644 index 000000000..6f3128e5f --- /dev/null +++ b/docs/content/en/functions/fmt/Print.md @@ -0,0 +1,20 @@ +--- +title: fmt.Print +description: Prints the default representation of the given arguments using the standard `fmt.Print` function. +categories: [] +keywords: [] +action: + aliases: [print] + related: + - functions/fmt/Printf + - functions/fmt/Println + returnType: string + signatures: [fmt.Print INPUT] +aliases: [/functions/print] +--- + +```go-html-template +{{ print "foo" }} → foo +{{ print "foo" "bar" }} → foobar +{{ print (slice 1 2 3) }} → [1 2 3] +``` diff --git a/docs/content/en/functions/fmt/Printf.md b/docs/content/en/functions/fmt/Printf.md new file mode 100644 index 000000000..5d0127460 --- /dev/null +++ b/docs/content/en/functions/fmt/Printf.md @@ -0,0 +1,39 @@ +--- +title: fmt.Printf +description: Formats a string using the standard `fmt.Sprintf` function. +categories: [] +keywords: [] +action: + aliases: [printf] + related: + - functions/fmt/Print + - functions/fmt/Println + returnType: string + signatures: ['fmt.Printf FORMAT [INPUT]'] +aliases: [/functions/printf] +--- + +{{% include "functions/fmt/_common/fmt-layout.md" %}} + +```go-html-template +{{ $var := "world" }} +{{ printf "Hello %s." $var }} → Hello world. +``` + +```go-html-template +{{ $pi := 3.14159265 }} +{{ printf "Pi is approximately %.2f." $pi }} → 3.14 +``` + +Use the `printf` function with the `safeHTMLAttr` function: + +```go-html-template +{{ $desc := "Eat at Joe's" }} +<meta name="description" {{ printf "content=%q" $desc | safeHTMLAttr }}> +``` + +Hugo renders this to: + +```html +<meta name="description" content="Eat at Joe's"> +``` diff --git a/docs/content/en/functions/fmt/Println.md b/docs/content/en/functions/fmt/Println.md new file mode 100644 index 000000000..a4db56ffb --- /dev/null +++ b/docs/content/en/functions/fmt/Println.md @@ -0,0 +1,18 @@ +--- +title: fmt.Println +description: Prints the default representation of the given argument using the standard `fmt.Print` function and enforces a line break. +categories: [] +keywords: [] +action: + aliases: [println] + related: + - functions/fmt/Print + - functions/fmt/Printf + returnType: string + signatures: [fmt.Println INPUT] +aliases: [/functions/println] +--- + +```go-html-template +{{ println "foo" }} → foo\n +``` diff --git a/docs/content/en/functions/fmt/Warnf.md b/docs/content/en/functions/fmt/Warnf.md new file mode 100644 index 000000000..0a90251d3 --- /dev/null +++ b/docs/content/en/functions/fmt/Warnf.md @@ -0,0 +1,33 @@ +--- +title: fmt.Warnf +description: Log a WARNING from a template. +categories: [] +keywords: [] +action: + aliases: [warnf] + related: + - functions/fmt/Errorf + - functions/fmt/Erroridf + returnType: string + signatures: ['fmt.Warnf FORMAT [INPUT]'] +aliases: [/functions/warnf] +--- + +{{% include "functions/fmt/_common/fmt-layout.md" %}} + +The `warnf` function evaluates the format string, then prints the result to the WARNING log. Hugo prints each unique message once to avoid flooding the log with duplicate warnings. + +```go-html-template +{{ warnf "The %q shortcode was unable to find %s. See %s" .Name $file .Position }} +``` + +To prevent suppression of duplicate messages when using `warnf` for debugging, make each message unique with the [`math.Counter`] function. For example: + + +```go-html-template +{{ range site.RegularPages }} + {{ .Section | warnf "%#[2]v [%[1]d]" math.Counter }} +{{ end }} +``` + +[`math.Counter`]: /functions/math/counter diff --git a/docs/content/en/functions/fmt/_common/_index.md b/docs/content/en/functions/fmt/_common/_index.md new file mode 100644 index 000000000..47d5812fb --- /dev/null +++ b/docs/content/en/functions/fmt/_common/_index.md @@ -0,0 +1,13 @@ +--- +cascade: + _build: + list: never + publishResources: false + render: never +--- + +<!-- +Files within this headless branch bundle are markdown snippets. Each file must contain front matter delimiters, though front matter fields are not required. + +Include the rendered content using the "include" shortcode. +--> diff --git a/docs/content/en/functions/fmt/_common/fmt-layout.md b/docs/content/en/functions/fmt/_common/fmt-layout.md new file mode 100644 index 000000000..ff69ce5e4 --- /dev/null +++ b/docs/content/en/functions/fmt/_common/fmt-layout.md @@ -0,0 +1,7 @@ +--- +# Do not remove front matter. +--- + +The documentation for Go's [fmt] package describes the structure and content of the format string. + +[fmt]: https://pkg.go.dev/fmt diff --git a/docs/content/en/functions/fmt/_index.md b/docs/content/en/functions/fmt/_index.md new file mode 100644 index 000000000..51ef847ca --- /dev/null +++ b/docs/content/en/functions/fmt/_index.md @@ -0,0 +1,12 @@ +--- +title: Fmt functions +linkTitle: fmt +description: Template functions to print strings within a template or to print messages to the terminal +categories: [] +keywords: [] +menu: + docs: + parent: functions +--- + +Use these functions to print strings within a template or to print messages to the terminal. diff --git a/docs/content/en/functions/global/_index.md b/docs/content/en/functions/global/_index.md new file mode 100644 index 000000000..1e609b56e --- /dev/null +++ b/docs/content/en/functions/global/_index.md @@ -0,0 +1,11 @@ +--- +title: Global functions +linkTitle: global +description: Global template functions to access page and site data. +categories: [] +menu: + docs: + parent: functions +--- + +Use these global functions to access page and site data. diff --git a/docs/content/en/functions/global/page.md b/docs/content/en/functions/global/page.md new file mode 100644 index 000000000..6c96b747e --- /dev/null +++ b/docs/content/en/functions/global/page.md @@ -0,0 +1,109 @@ +--- +title: page +description: Provides global access to a Page object. +categories: [] +keywords: [] +action: + aliases: [] + related: + - functions/global/site + returnType: + signatures: [page] +toc: true +aliases: [/functions/page] +--- + +{{< new-in 0.111.0 >}} + +At the top level of a template that receives a `Page` object in context, these are equivalent: + +```go-html-template +{{ .Params.foo }} +{{ .Page.Params.foo }} +{{ page.Params.foo }} +``` + +When a `Page` object is not in context, you can use the global `page` function: + +```go-html-template +{{ page.Params.foo }} +``` + +{{% note %}} +Do not use the global `page` function in shortcodes, partials called by shortcodes, or cached partials. See [warnings](#warnings) below. +{{% /note %}} + +## Explanation + +Hugo almost always passes a `Page` as the data context into the top level template (e.g., `single.html`). The one exception is the multihost sitemap template. This means that you can access the current page with the `.` variable in the template. + +But when you are deeply nested inside of a [content view], [partial], or [render hook], it is not always practical or possible to access the `Page` object. + +Use the global `page` function to access the `Page` object from anywhere in any template. + +## Warnings + +### Be aware of top-level context + +The global `page` function accesses the `Page` object passed into the top-level template. + +With this content structure: + +```text +content/ +├── posts/ +│ ├── post-1.md +│ ├── post-2.md +│ └── post-3.md +└── _index.md <-- title is "My Home Page" +``` + +And this code in the home page template: + +```go-html-template +{{ range site.Sections }} + {{ range .Pages }} + {{ page.Title }} + {{ end }} +{{ end }} +``` + +The rendered output will be: + +```text +My Home Page +My Home Page +My Home Page +``` + +In the example above, the global `page` function accesses the `Page` object passed into the home page template; it does not access the `Page` object of the iterated pages. + +### Be aware of caching + +Do not use the global `page` function in: + +- Shortcodes +- Partials called by shortcodes +- Partials cached by the [`partialCached`] function + +Hugo caches rendered shortcodes. If you use the global `page` function within a shortcode, and the page content is rendered in two or more templates, the cached shortcode may be incorrect. + +Consider this section template: + +```go-html-template +{{ range .Pages }} + <h2><a href="{{ .RelPermalink }}">{{ .LinkTitle }}</a></h2> + {{ .Summary }} +{{ end }} +``` + +When you call the [`Summary`] method, Hugo renders the page content including shortcodes. In this case, within a shortcode, the global `page` function accesses the `Page` object of the section page, not the content page. + +If Hugo renders the section page before a content page, the cached rendered shortcode will be incorrect. You cannot control the rendering sequence due to concurrency. + +[`Summary`]: /methods/page/summary +[`partialCached`]: /functions/partials/includecached +[content view]: /getting-started/glossary/#content-view +[partial]: /getting-started/glossary/#partial +[render hook]: /getting-started/glossary/#render-hook +[shortcode]: getting-started/glossary/#shortcode diff --git a/docs/content/en/functions/global/site.md b/docs/content/en/functions/global/site.md new file mode 100644 index 000000000..a097e471b --- /dev/null +++ b/docs/content/en/functions/global/site.md @@ -0,0 +1,30 @@ +--- +title: site +description: Provides global access to the current Site object. +categories: [] +keywords: [] +action: + aliases: [] + related: + - functions/global/page + returnType: + signatures: [site] +aliases: [/functions/site] +--- + +At the top level of a template that receives the `Site` object in context, these are equivalent: + +```go-html-template +{{ .Site.Params.foo }} +{{ site.Params.foo }} +``` + +When the `Site` object is not in context, use the global `site` function: + +```go-html-template +{{ site.Params.foo }} +``` + +{{% note %}} +To simplify your templates, use the global `site` function regardless of whether the `Site` object is in context. +{{% /note %}} diff --git a/docs/content/en/functions/go-template/_common/_index.md b/docs/content/en/functions/go-template/_common/_index.md new file mode 100644 index 000000000..47d5812fb --- /dev/null +++ b/docs/content/en/functions/go-template/_common/_index.md @@ -0,0 +1,13 @@ +--- +cascade: + _build: + list: never + publishResources: false + render: never +--- + +<!-- +Files within this headless branch bundle are markdown snippets. Each file must contain front matter delimiters, though front matter fields are not required. + +Include the rendered content using the "include" shortcode. +--> diff --git a/docs/content/en/functions/go-template/_common/text-template.md b/docs/content/en/functions/go-template/_common/text-template.md new file mode 100644 index 000000000..71718c3fd --- /dev/null +++ b/docs/content/en/functions/go-template/_common/text-template.md @@ -0,0 +1,7 @@ +--- +# Do not remove front matter. +--- + +See Go's [text/template] documentation for more information. + +[text/template]: https://pkg.go.dev/text/template diff --git a/docs/content/en/functions/go-template/_common/truthy-falsy.md b/docs/content/en/functions/go-template/_common/truthy-falsy.md new file mode 100644 index 000000000..c8fc9e09e --- /dev/null +++ b/docs/content/en/functions/go-template/_common/truthy-falsy.md @@ -0,0 +1,5 @@ +--- +# Do not remove front matter. +--- + +In Go templates, the falsy values are `false`, `0`, any nil pointer or interface value, and any array, slice, map, or string of length zero. Everything else is truthy. diff --git a/docs/content/en/functions/go-template/_index.md b/docs/content/en/functions/go-template/_index.md new file mode 100644 index 000000000..9075756aa --- /dev/null +++ b/docs/content/en/functions/go-template/_index.md @@ -0,0 +1,14 @@ +--- +title: Go template functions, operators, and statements +linkTitle: go template +description: Template functions, operators, and statements provided by Go's text/template package. +categories: [] +keywords: [] +menu: + docs: + parent: functions +--- + +These are the functions, operators, and statements provided by Go's [text/template] package. + +[text/template]: https://pkg.go.dev/text/template diff --git a/docs/content/en/functions/go-template/and.md b/docs/content/en/functions/go-template/and.md new file mode 100644 index 000000000..6bc8c60a5 --- /dev/null +++ b/docs/content/en/functions/go-template/and.md @@ -0,0 +1,26 @@ +--- +title: and +description: Returns the first falsy argument. If all arguments are truthy, returns the last argument. +categories: [] +keywords: [] +action: + aliases: [] + related: + - functions/go-template/not + - functions/go-template/or + returnType: any + signatures: [and VALUE...] +--- + +{{% include "functions/go-template/_common/truthy-falsy.md" %}} + +```go-html-template +{{ and 1 0 "" }} → 0 (int) +{{ and 1 false 0 }} → false (bool) + +{{ and 1 2 3 }} → 3 (int) +{{ and "a" "b" "c" }} → c (string) +{{ and "a" 1 true }} → true (bool) +``` + +{{% include "functions/go-template/_common/text-template.md" %}} diff --git a/docs/content/en/functions/go-template/block.md b/docs/content/en/functions/go-template/block.md new file mode 100644 index 000000000..f8a082037 --- /dev/null +++ b/docs/content/en/functions/go-template/block.md @@ -0,0 +1,55 @@ +--- +title: block +description: Defines a template and executes it in place. +categories: [] +keywords: [] +action: + aliases: [] + related: + - functions/go-template/define + - functions/go-template/end + returnType: + signatures: [block NAME CONTEXT] +--- + +A block is shorthand for defining a template: + +```go-html-template +{{ define "name" }} T1 {{ end }} +``` + +and then executing it in place: + +```go-html-template +{{ template "name" pipeline }} +``` +The typical use is to define a set of root templates that are then customized by redefining the block templates within. + +{{< code file=layouts/_default/baseof.html >}} +<body> + <main> + {{ block "main" . }} + {{ print "default value if 'main' template is empty" }} + {{ end }} + </main> +</body> +{{< /code >}} + +{{< code file=layouts/_default/single.html >}} +{{ define "main" }} + <h1>{{ .Title }}</h1> + {{ .Content }} +{{ end }} +{{< /code >}} + +{{< code file=layouts/_default/list.html >}} +{{ define "main" }} + <h1>{{ .Title }}</h1> + {{ .Content }} + {{ range .Pages }} + <h2><a href="{{ .RelPermalink }}">{{ .LinkTitle }}</a></h2> + {{ end }} +{{ end }} +{{< /code >}} + +{{% include "functions/go-template/_common/text-template.md" %}} diff --git a/docs/content/en/functions/go-template/break.md b/docs/content/en/functions/go-template/break.md new file mode 100644 index 000000000..14074d7c0 --- /dev/null +++ b/docs/content/en/functions/go-template/break.md @@ -0,0 +1,33 @@ +--- +title: break +description: Used with the range statement, stops the innermost iteration and bypasses all remaining iterations. +categories: [] +keywords: [] +action: + aliases: [] + related: + - functions/go-template/continue + - functions/go-template/range + returnType: + signatures: [break] +--- + +This template code: + +```go-html-template +{{ $s := slice "foo" "bar" "baz" }} +{{ range $s }} + {{ if eq . "bar" }} + {{ break }} + {{ end }} + <p>{{ . }}</p> +{{ end }} +``` + +Is rendered to: + +```html +<p>foo</p> +``` + +{{% include "functions/go-template/_common/text-template.md" %}} diff --git a/docs/content/en/functions/go-template/continue.md b/docs/content/en/functions/go-template/continue.md new file mode 100644 index 000000000..c8030b8b7 --- /dev/null +++ b/docs/content/en/functions/go-template/continue.md @@ -0,0 +1,34 @@ +--- +title: continue +description: Used with the range statement, stops the innermost iteration and continues to the next iteration. +categories: [] +keywords: [] +action: + aliases: [] + related: + - functions/go-template/break + - functions/go-template/range + returnType: + signatures: [continue] +--- + +This template code: + +```go-html-template +{{ $s := slice "foo" "bar" "baz" }} +{{ range $s }} + {{ if eq . "bar" }} + {{ continue }} + {{ end }} + <p>{{ . }}</p> +{{ end }} +``` + +Is rendered to: + +```html +<p>foo</p> +<p>baz</p> +``` + +{{% include "functions/go-template/_common/text-template.md" %}} diff --git a/docs/content/en/functions/go-template/define.md b/docs/content/en/functions/go-template/define.md new file mode 100644 index 000000000..4d09c14f3 --- /dev/null +++ b/docs/content/en/functions/go-template/define.md @@ -0,0 +1,55 @@ +--- +title: define +description: Defines a template. +categories: [] +keywords: [] +action: + aliases: [] + related: + - functions/go-template/block + - functions/go-template/end + - functions/go-template/template + - functions/partials/Include + - functions/partials/IncludeCached + returnType: + signatures: [define NAME] +--- + +Use with the [`block`] statement: + +```go-html-template +{{ block "main" . }} + {{ print "default value if 'main' template is empty" }} +{{ end }} + +{{ define "main" }} + <h1>{{ .Title }}</h1> + {{ .Content }} +{{ end }} +``` + +Use with the [`partial`] function: + +```go-html-template +{{ partial "inline/foo.html" (dict "answer" 42) }} + +{{ define "partials/inline/foo.html" }} + {{ printf "The answer is %v." .answer }} +{{ end }} +``` + +Use with the [`template`] function: + +```go-html-template +{{ template "foo" (dict "answer" 42) }} + +{{ define "foo" }} + {{ printf "The answer is %v." .answer }} +{{ end }} +``` + +[`block`]: /functions/go-template/block +[`template`]: /functions/go-template/block +[`partial`]: /functions/partials/include/ + +{{% include "functions/go-template/_common/text-template.md" %}} diff --git a/docs/content/en/functions/go-template/else.md b/docs/content/en/functions/go-template/else.md new file mode 100644 index 000000000..ccb8b722c --- /dev/null +++ b/docs/content/en/functions/go-template/else.md @@ -0,0 +1,69 @@ +--- +title: else +description: Begins an alternate block for if, with, and range statements. +categories: [] +keywords: [] +action: + aliases: [] + related: + - functions/go-template/if + - functions/go-template/range + - functions/go-template/with + - functions/go-template/end + returnType: + signatures: [else VALUE] +--- + +Use with the [`if`] statement: + +```go-html-template +{{ $var := "foo" }} +{{ if $var }} + {{ $var }} → foo +{{ else }} + {{ print "var is falsy" }} +{{ end }} +``` + +Use with the [`with`] statement: + +```go-html-template +{{ $var := "foo" }} +{{ with $var }} + {{ . }} → foo +{{ else }} + {{ print "var is falsy" }} +{{ end }} +``` + +Use with the [`range`] statement: + +```go-html-template +{{ $var := slice 1 2 3 }} +{{ range $var }} + {{ . }} → 1 2 3 +{{ else }} + {{ print "var is falsy" }} +{{ end }} +``` + +Use `else if` to check multiple conditions. + +```go-html-template +{{ $var := 12 }} +{{ if eq $var 6 }} + {{ print "var is 6" }} +{{ else if eq $var 7 }} + {{ print "var is 7" }} +{{ else if eq $var 42 }} + {{ print "var is 42" }} +{{ else }} + {{ print "var is something else" }} +{{ end }} +``` + +{{% include "functions/go-template/_common/text-template.md" %}} + +[`if`]: /functions/go-template/if +[`with`]: /functions/go-template/with +[`range`]: /functions/go-template/range diff --git a/docs/content/en/functions/go-template/end.md b/docs/content/en/functions/go-template/end.md new file mode 100644 index 000000000..07d004de5 --- /dev/null +++ b/docs/content/en/functions/go-template/end.md @@ -0,0 +1,65 @@ +--- +title: end +description: Terminates if, with, range, block, and define statements. +categories: [] +keywords: [] +action: + aliases: [] + related: + - functions/go-template/block + - functions/go-template/define + - functions/go-template/if + - functions/go-template/range + - functions/go-template/with + returnType: + signatures: [end] +--- + +Use with the [`if`] statement: + +```go-html-template +{{ $var := "foo" }} +{{ if $var }} + {{ $var }} → foo +{{ end }} +``` + +Use with the [`with`] statement: + +```go-html-template +{{ $var := "foo" }} +{{ with $var }} + {{ . }} → foo +{{ end }} +``` + +Use with the [`range`] statement: + +```go-html-template +{{ $var := slice 1 2 3 }} +{{ range $var }} + {{ . }} → 1 2 3 +{{ end }} +``` + +Use with the [`block`] statement: + +```go-html-template +{{ block "main" . }}{{ end }} +``` + +Use with the [`define`] statement: + +```go-html-template +{{ define "main" }} + {{ print "this is the main section" }} +{{ end }} +``` + +{{% include "functions/go-template/_common/text-template.md" %}} + +[`block`]: /functions/go-template/block +[`define`]: /functions/go-template/define +[`if`]: /functions/go-template/if +[`range`]: /functions/go-template/range +[`with`]: /functions/go-template/with diff --git a/docs/content/en/functions/go-template/if.md b/docs/content/en/functions/go-template/if.md new file mode 100644 index 000000000..e63c382e1 --- /dev/null +++ b/docs/content/en/functions/go-template/if.md @@ -0,0 +1,54 @@ +--- +title: if +description: Executes the block if the expression is truthy. +categories: [] +keywords: [] +action: + aliases: [] + related: + - functions/go-template/with + - functions/go-template/else + - functions/go-template/end + - functions/collections/IsSet + returnType: + signatures: [if EXPR] +--- + +{{% include "functions/go-template/_common/truthy-falsy.md" %}} + +```go-html-template +{{ $var := "foo" }} +{{ if $var }} + {{ $var }} → foo +{{ end }} +``` + +Use with the [`else`] statement: + +```go-html-template +{{ $var := "foo" }} +{{ if $var }} + {{ $var }} → foo +{{ else }} + {{ print "var is falsy" }} +{{ end }} +``` + +Use `else if` to check multiple conditions. + +```go-html-template +{{ $var := 12 }} +{{ if eq $var 6 }} + {{ print "var is 6" }} +{{ else if eq $var 7 }} + {{ print "var is 7" }} +{{ else if eq $var 42 }} + {{ print "var is 42" }} +{{ else }} + {{ print "var is something else" }} +{{ end }} +``` + +{{% include "functions/go-template/_common/text-template.md" %}} + +[`else`]: /functions/go-template/else diff --git a/docs/content/en/functions/go-template/len.md b/docs/content/en/functions/go-template/len.md new file mode 100644 index 000000000..43f150a5f --- /dev/null +++ b/docs/content/en/functions/go-template/len.md @@ -0,0 +1,51 @@ +--- +title: len +description: Returns the length of a string, slice, map, or collection. +categories: [] +keywords: [] +action: + aliases: [] + related: + - functions/strings/Count + - functions/strings/CountRunes + - functions/strings/CountWords + - functions/strings/RuneCount + returnType: int + signatures: [len VALUE] +aliases: [/functions/len] +--- + +With a string: + +```go-html-template +{{ "ab" | len }} → 2 +{{ "" | len }} → 0 +``` + +With a slice: + +```go-html-template +{{ slice "a" "b" | len }} → 2 +{{ slice | len }} → 0 +``` + +With a map: + +```go-html-template +{{ dict "a" 1 "b" 2 | len }} → 2 +{{ dict | len }} → 0 +``` + +With a collection: + +```go-html-template +{{ site.RegularPages | len }} → 42 +``` + +You may also determine the number of pages in a collection with: + +```go-html-template +{{ site.RegularPages.Len }} → 42 +``` + +{{% include "functions/go-template/_common/text-template.md" %}} diff --git a/docs/content/en/functions/go-template/not.md b/docs/content/en/functions/go-template/not.md new file mode 100644 index 000000000..4c7747c7b --- /dev/null +++ b/docs/content/en/functions/go-template/not.md @@ -0,0 +1,35 @@ +--- +title: not +description: Returns the boolean negation of its single argument. +categories: [] +keywords: [] +action: + aliases: [] + related: + - functions/go-template/and + - functions/go-template/or + returnType: bool + signatures: [not VALUE] +--- + +Unlike the `and` and `or` operators, the `not` operator always returns a boolean value. + +```go-html-template +{{ not true }} → false +{{ not false }} → true + +{{ not 1 }} → false +{{ not 0 }} → true + +{{ not "x" }} → false +{{ not "" }} → true +``` + +Use the `not` operator, twice in succession, to cast any value to a boolean value. For example: + +```go-html-template +{{ 42 | not | not }} → true +{{ "" | not | not }} → false +``` + +{{% include "functions/go-template/_common/text-template.md" %}} diff --git a/docs/content/en/functions/go-template/or.md b/docs/content/en/functions/go-template/or.md new file mode 100644 index 000000000..0d8619608 --- /dev/null +++ b/docs/content/en/functions/go-template/or.md @@ -0,0 +1,26 @@ +--- +title: or +description: Returns the first truthy argument. If all arguments are falsy, returns the last argument. +categories: [] +keywords: [] +action: + aliases: [] + related: + - functions/go-template/and + - functions/go-template/not + returnType: any + signatures: [or VALUE...] +--- + +{{% include "functions/go-template/_common/truthy-falsy.md" %}} + +```go-html-template +{{ or 0 1 2 }} → 1 +{{ or false "a" 1 }} → a +{{ or 0 true "a" }} → true + +{{ or false "" 0 }} → 0 +{{ or 0 "" false }} → false +``` + +{{% include "functions/go-template/_common/text-template.md" %}} diff --git a/docs/content/en/functions/go-template/range.md b/docs/content/en/functions/go-template/range.md new file mode 100644 index 000000000..e2f401371 --- /dev/null +++ b/docs/content/en/functions/go-template/range.md @@ -0,0 +1,199 @@ +--- +title: range +description: Iterates over a non-empty collection, binds context (the dot) to successive elements, and executes the block. +categories: [] +keywords: [] +action: + aliases: [] + related: + - functions/go-template/break + - functions/go-template/continue + - functions/go-template/else + - functions/go-template/end + returnType: + signatures: [range COLLECTION] +aliases: [/functions/range] +toc: true +--- + +{{% include "functions/go-template/_common/truthy-falsy.md" %}} + +```go-html-template +{{ $s := slice "foo" "bar" "baz" }} +{{ range $s }} + {{ . }} → foo bar baz +{{ end }} +``` + +Use with the [`else`] statement: + +```go-html-template +{{ $s := slice "foo" "bar" "baz" }} +{{ range $s }} + <p>{{ . }}</p> +{{ else }} + <p>The collection is empty</p> +{{ end }} +``` + +Within a range block: + +- Use the [`continue`] statement to stop the innermost iteration and continue to the next iteration +- Use the [`break`] statement to stop the innermost iteration and bypass all remaining iterations + +## Understanding context + +At the top of a page template, the [context] (the dot) is a `Page` object. Within the `range` block, the context is bound to each successive element. + +With this contrived example that uses the [`seq`] function to generate a slice of integers: + +```go-html-template +{{ range seq 3 }} + {{ .Title }} +{{ end }} +``` + +Hugo will throw an error: + + can't evaluate field Title in type int + +The error occurs because we are trying to use the `.Title` method on an integer instead of a `Page` object. Within the `range` block, if we want to render the page title, we need to get the context passed into the template. + +{{% note %}} +Use the `$` to get the context passed into the template. +{{% /note %}} + +This template will render the page title three times: + +```go-html-template +{{ range seq 3 }} + {{ $.Title }} +{{ end }} +``` + +{{% note %}} +Gaining a thorough understanding of context is critical for anyone writing template code. +{{% /note %}} + +[`seq`]: functions/collections/seq/ +[context]: /getting-started/glossary/#context + +## Array or slice of scalars + +This template code: + +```go-html-template +{{ $s := slice "foo" "bar" "baz" }} +{{ range $s }} + <p>{{ . }}</p> +{{ end }} +``` + +Is rendered to: + +```html +<p>foo</p> +<p>bar</p> +<p>baz</p> +``` + +This template code: + +```go-html-template +{{ $s := slice "foo" "bar" "baz" }} +{{ range $v := $s }} + <p>{{ $v }}</p> +{{ end }} +``` + +Is rendered to: + +```html +<p>foo</p> +<p>bar</p> +<p>baz</p> +``` + +This template code: + +```go-html-template +{{ $s := slice "foo" "bar" "baz" }} +{{ range $k, $v := $s }} + <p>{{ $k }}: {{ $v }}</p> +{{ end }} +``` + +Is rendered to: + +```html +<p>0: foo</p> +<p>1: bar</p> +<p>2: baz</p> +``` + +## Array or slice of maps + +This template code: + +```go-html-template +{{ $m := slice + (dict "name" "John" "age" 30) + (dict "name" "Will" "age" 28) + (dict "name" "Joey" "age" 24) +}} +{{ range $m }} + <p>{{ .name }} is {{ .age }}</p> +{{ end }} +``` + +Is rendered to: + +```html +<p>John is 30</p> +<p>Will is 28</p> +<p>Joey is 24</p> +``` + +## Array or slice of pages + +This template code: + +```go-html-template +{{ range where site.RegularPages "Type" "articles" }} + <h2><a href="{{ .RelPermalink }}">{{ .LinkTitle }}</a></h2> +{{ end }} +``` + +Is rendered to: + +```html +<h2><a href="/articles/article-3/">Article 3</a></h2> +<h2><a href="/articles/article-2/">Article 2</a></h2> +<h2><a href="/articles/article-1/">Article 1</a></h2> +``` + +## Maps + +This template code: + +```go-html-template +{{ $m := dict "name" "John" "age" 30 }} +{{ range $k, $v := $m }} + <p>key = {{ $k }} value = {{ $v }}</p> +{{ end }} +``` + +Is rendered to: + +```go-html-template +<p>key = age value = 30</p> +<p>key = name value = John</p> +``` + +Unlike ranging over an array or slice, Hugo sorts by key when ranging over a map. + +{{% include "functions/go-template/_common/text-template.md" %}} + +[`else`]: /functions/go-template/else +[`break`]: /functions/go-template/break +[`continue`]: /functions/go-template/continue diff --git a/docs/content/en/functions/go-template/return.md b/docs/content/en/functions/go-template/return.md new file mode 100644 index 000000000..2a166c718 --- /dev/null +++ b/docs/content/en/functions/go-template/return.md @@ -0,0 +1,110 @@ +--- +title: return +description: Used within partial templates, terminates template execution and returns the given value, if any. +categories: [] +keywords: [] +action: + aliases: [] + related: + - functions/partials/Include + - functions/partials/IncludeCached + returnType: any + signatures: ['return [VALUE]'] +toc: true +--- + +The `return` statement is a custom addition to Go's [text/template] package. Used within partial templates, the `return` statement terminates template execution and returns the given value, if any. + +The returned value may be of any data type including, but not limited to, [`bool`], [`float`], [`int`], [`map`], [`resource`], [`slice`], and [`string`]. + +A `return` statement without a value returns an empty string of type `template.HTML`. + +[`bool`]: /getting-started/glossary/#bool +[`float`]: /getting-started/glossary/#float +[`int`]: /getting-started/glossary/#int +[`map`]: /getting-started/glossary/#map +[`resource`]: /getting-started/glossary/#resource +[`slice`]: /getting-started/glossary/#slice +[`string`]: /getting-started/glossary/#string +[text/template]: https://pkg.go.dev/text/template + +{{% note %}} +Unlike `return` statements in other languages, Hugo executes the first occurrence of the `return` statement regardless of its position within logical blocks. See [usage](#usage) notes below. +{{% /note %}} + +## Example + +By way of example, let's create a partial template that _renders_ HTML, describing whether the given number is odd or even: + +{{< code file="layouts/partials/odd-or-even.html" >}} +{{ if math.ModBool . 2 }} + <p>{{ . }} is even</p> +{{ else }} + <p>{{ . }} is odd</p> +{{ end }} +{{< /code >}} + +When called, the partial renders HTML: + +```go-html-template +{{ partial "odd-or-even.html" 42 }} → <p>42 is even</p> +``` + +Instead of rendering HTML, let's create a partial that _returns_ a boolean value, reporting whether the given number is even: + +{{< code file="layouts/partials/is-even.html" >}} +{{ return math.ModBool . 2 }} +{{< /code >}} + +With this template: + +```go-html-template +{{ $number := 42 }} +{{ if partial "is-even.html" $number }} + <p>{{ $number }} is even</p> +{{ else }} + <p>{{ $number }} is odd</p> +{{ end }} +``` + +Hugo renders: + +```html +<p>42 is even</p> +``` + +See additional examples in the [partial templates] section. + +[partial templates]: /templates/partials/#returning-a-value-from-a-partial + +## Usage + +{{% note %}} +Unlike `return` statements in other languages, Hugo executes the first occurrence of the `return` statement regardless of its position within logical blocks +{{% /note %}} + +A partial that returns a value must contain only one `return` statement, placed at the end of the template. + +For example: + +{{< code file="layouts/partials/is-even.html" >}} +{{ $result := false }} +{{ if math.ModBool . 2 }} + {{ $result = "even" }} +{{ else }} + {{ $result = "odd" }} +{{ end }} +{{ return $result }} +{{< /code >}} + +{{% note %}} +The construct below is incorrect; it contains more than one `return` statement. +{{% /note %}} + +{{< code file="layouts/partials/do-not-do-this.html" >}} +{{ if math.ModBool . 2 }} + {{ return "even" }} +{{ else }} + {{ return "odd" }} +{{ end }} +{{< /code >}} diff --git a/docs/content/en/functions/go-template/template.md b/docs/content/en/functions/go-template/template.md new file mode 100644 index 000000000..a78ec5c65 --- /dev/null +++ b/docs/content/en/functions/go-template/template.md @@ -0,0 +1,49 @@ +--- +title: template +description: Executes the given template, optionally passing context. +categories: [] +keywords: [] +action: + aliases: [] + related: + - functions/go-template/define + - functions/partials/Include + - functions/partials/IncludeCached + returnType: + signatures: ['template NAME [CONTEXT]'] +--- + +Use the `template` function to execute [internal templates]. For example: + +```go-html-template +{{ range (.Paginate .Pages).Pages }} + <h2><a href="{{ .RelPermalink }}">{{ .LinkTitle }}</a></h2> +{{ end }} +{{ template "_internal/pagination.html" . }} +``` + +You can also use the `template` function to execute a defined template: + +```go-html-template +{{ template "foo" (dict "answer" 42) }} + +{{ define "foo" }} + {{ printf "The answer is %v." .answer }} +{{ end }} +``` + +The example above can be rewritten using an [inline partial] template: + +```go-html-template +{{ partial "inline/foo.html" (dict "answer" 42) }} + +{{ define "partials/inline/foo.html" }} + {{ printf "The answer is %v." .answer }} +{{ end }} +``` + +{{% include "functions/go-template/_common/text-template.md" %}} + +[`partial`]: /functions/partials/include/ +[inline partial]: /templates/partials/#inline-partials +[internal templates]: /templates/internal diff --git a/docs/content/en/functions/go-template/urlquery.md b/docs/content/en/functions/go-template/urlquery.md new file mode 100644 index 000000000..946828f56 --- /dev/null +++ b/docs/content/en/functions/go-template/urlquery.md @@ -0,0 +1,28 @@ +--- +title: urlquery +description: Returns the escaped value of the textual representation of its arguments in a form suitable for embedding in a URL query. +categories: [] +keywords: [] +action: + aliases: [] + related: + - functions/collections/Querify + returnType: string + signatures: ['urlquery VALUE [VALUE...]'] +aliases: [/functions/urlquery] +--- + +This template code: + +```go-html-template +{{ $u := urlquery "https://" "example.com" | safeURL }} +<a href="https://example.org?url={{ $u }}">Link</a> +``` + +Is rendered to: + +```html +<a href="https://example.org?url=https%3A%2F%2Fexample.com">Link</a> +``` + +{{% include "functions/go-template/_common/text-template.md" %}} diff --git a/docs/content/en/functions/go-template/with.md b/docs/content/en/functions/go-template/with.md new file mode 100644 index 000000000..0f3255b1a --- /dev/null +++ b/docs/content/en/functions/go-template/with.md @@ -0,0 +1,87 @@ +--- +title: with +description: Binds context (the dot) to the expression and executes the block if expression is truthy. +categories: [] +keywords: [] +action: + aliases: [] + related: + - functions/go-template/if + - functions/go-template/else + - functions/go-template/end + - functions/collections/IsSet + returnType: + signatures: [with EXPR] +aliases: [/functions/with] +toc: true +--- + +{{% include "functions/go-template/_common/truthy-falsy.md" %}} + +```go-html-template +{{ $var := "foo" }} +{{ with $var }} + {{ . }} → foo +{{ end }} +``` + +Use with the [`else`] statement: + +```go-html-template +{{ $var := "foo" }} +{{ with $var }} + {{ . }} → foo +{{ else }} + {{ print "var is falsy" }} +{{ end }} +``` + +Initialize a variable, scoped to the current block: + +```go-html-template +{{ with $var := 42 }} + {{ . }} → 42 + {{ $var }} → 42 +{{ end }} +{{ $var }} → undefined +``` + +## Understanding context + +At the top of a page template, the [context] (the dot) is a `Page` object. Inside of the `with` block, the context is bound to the value passed to the `with` statement. + +With this contrived example: + +```go-html-template +{{ with 42 }} + {{ .Title }} +{{ end }} +``` + +Hugo will throw an error: + + can't evaluate field Title in type int + +The error occurs because we are trying to use the `.Title` method on an integer instead of a `Page` object. Inside of the `with` block, if we want to render the page title, we need to get the context passed into the template. + +{{% note %}} +Use the `$` to get the context passed into the template. +{{% /note %}} + +This template will render the page title as desired: + +```go-html-template +{{ with 42 }} + {{ $.Title }} +{{ end }} +``` + +{{% note %}} +Gaining a thorough understanding of context is critical for anyone writing template code. +{{% /note %}} + +[context]: /getting-started/glossary/#context + +{{% include "functions/go-template/_common/text-template.md" %}} + +[`else`]: /functions/go-template/else diff --git a/docs/content/en/functions/hugo/BuildDate.md b/docs/content/en/functions/hugo/BuildDate.md new file mode 100644 index 000000000..1fbdbeac6 --- /dev/null +++ b/docs/content/en/functions/hugo/BuildDate.md @@ -0,0 +1,19 @@ +--- +title: hugo.BuildDate +description: Returns the compile date of the Hugo binary. +categories: [] +keywords: [] +action: + aliases: [] + related: [] + returnType: string + signatures: [hugo.BuildDate] +--- + +The `hugo.BuildDate` function returns the compile date of the Hugo binary, formatted per [RFC 3339]. + +[RFC 3339]: https://datatracker.ietf.org/doc/html/rfc3339 + +```go-html-template +{{ hugo.BuildDate }} → 2023-11-01T17:57:00Z +``` diff --git a/docs/content/en/functions/hugo/CommitHash.md b/docs/content/en/functions/hugo/CommitHash.md new file mode 100644 index 000000000..cd4f2ce92 --- /dev/null +++ b/docs/content/en/functions/hugo/CommitHash.md @@ -0,0 +1,15 @@ +--- +title: hugo.CommitHash +description: Returns the Git commit hash of the Hugo binary. +categories: [] +keywords: [] +action: + aliases: [] + related: [] + returnType: string + signatures: [hugo.CommitHash] +--- + +```go-html-template +{{ hugo.CommitHash }} → a4892a07b41b7b3f1f143140ee4ec0a9a5cf3970 +``` diff --git a/docs/content/en/functions/hugo/Deps.md b/docs/content/en/functions/hugo/Deps.md new file mode 100644 index 000000000..2f3f75e65 --- /dev/null +++ b/docs/content/en/functions/hugo/Deps.md @@ -0,0 +1,66 @@ +--- +title: hugo.Deps +description: Returns a slice of project dependencies, either Hugo Modules or local theme components. +categories: [] +keywords: [] +action: + aliases: [] + related: [] + returnType: '[]hugo.Dependency' + signatures: [hugo.Deps] +--- + +The `hugo.Deps` function returns a slice of project dependencies, either Hugo Modules or local theme components. Each dependency contains: + +Owner +: (`hugo.Dependency`) In the dependency tree, this is the first module that defines this module as a dependency (e.g., `github.com/gohugoio/hugo-mod-bootstrap-scss/v5`). + +Path +: (`string`) The module path or the path below your `themes` directory (e.g., `github.com/gohugoio/hugo-mod-jslibs-dist/popperjs/v2`). + +Replace +: (`hugo.Dependency`) Replaced by this dependency. + +Time +: (`time.Time`) The time that the version was created (e.g., `2022-02-13 15:11:28 +0000 UTC`). + +Vendor +: (`bool`) Reports whether the dependency is vendored. + +Version +: (`string`) The module version (e.g., `v2.21100.20000`). + +An example table listing the dependencies: + +```go-html-template +<h2>Dependencies</h2> +<table class="table table-dark"> + <thead> + <tr> + <th scope="col">#</th> + <th scope="col">Owner</th> + <th scope="col">Path</th> + <th scope="col">Version</th> + <th scope="col">Time</th> + <th scope="col">Vendor</th> + </tr> + </thead> + <tbody> + {{ range $index, $element := hugo.Deps }} + <tr> + <th scope="row">{{ add $index 1 }}</th> + <td>{{ with $element.Owner }}{{ .Path }}{{ end }}</td> + <td> + {{ $element.Path }} + {{ with $element.Replace }} + => {{ .Path }} + {{ end }} + </td> + <td>{{ $element.Version }}</td> + <td>{{ with $element.Time }}{{ . }}{{ end }}</td> + <td>{{ $element.Vendor }}</td> + </tr> + {{ end }} + </tbody> +</table> +``` diff --git a/docs/content/en/functions/hugo/Environment.md b/docs/content/en/functions/hugo/Environment.md new file mode 100644 index 000000000..f130de787 --- /dev/null +++ b/docs/content/en/functions/hugo/Environment.md @@ -0,0 +1,30 @@ +--- +title: hugo.Environment +description: Returns the current running environment. +categories: [] +keywords: [] +action: + aliases: [] + related: + - functions/hugo/IsDevelopment + - functions/hugo/IsProduction + returnType: string + signatures: [hugo.Environment] +--- + +The `hugo.Environment` function returns the current running [environment] as defined through the `--environment` command line flag. + +```go-html-template +{{ hugo.Environment }} → production +``` + +Command line examples: + +Command|Environment +:--|:-- +`hugo`|`production` +`hugo --environment staging`|`staging` +`hugo server`|`development` +`hugo server --environment staging`|`staging` + +[environment]: /getting-started/glossary/#environment diff --git a/docs/content/en/functions/hugo/Generator.md b/docs/content/en/functions/hugo/Generator.md new file mode 100644 index 000000000..907c37681 --- /dev/null +++ b/docs/content/en/functions/hugo/Generator.md @@ -0,0 +1,15 @@ +--- +title: hugo.Generator +description: Renders an HTML meta element identifying the software that generated the site. +categories: [] +keywords: [] +action: + aliases: [] + related: [] + returnType: template.HTML + signatures: [hugo.Generator] +--- + +```go-html-template +{{ hugo.Generator }} → <meta name="generator" content="Hugo 0.122.0"> +``` diff --git a/docs/content/en/functions/hugo/GoVersion.md b/docs/content/en/functions/hugo/GoVersion.md new file mode 100644 index 000000000..1640c3862 --- /dev/null +++ b/docs/content/en/functions/hugo/GoVersion.md @@ -0,0 +1,17 @@ +--- +title: hugo.GoVersion +description: Returns the Go version used to compile the Hugo binary +categories: [] +keywords: [] +action: + aliases: [] + related: [] + returnType: string + signatures: [hugo.GoVersion] +--- + +{{< new-in 0.101.0 >}} + +```go-html-template +{{ hugo.GoVersion }} → go1.21.1 +``` diff --git a/docs/content/en/functions/hugo/IsDevelopment.md b/docs/content/en/functions/hugo/IsDevelopment.md new file mode 100644 index 000000000..9926b67c9 --- /dev/null +++ b/docs/content/en/functions/hugo/IsDevelopment.md @@ -0,0 +1,19 @@ +--- +title: hugo.IsDevelopment +description: Reports whether the current running environment is "development". +categories: [] +keywords: [] +action: + aliases: [] + related: + - functions/hugo/IsProduction + - functions/hugo/Environment + returnType: bool + signatures: [hugo.IsDevelopment] +--- + +{{< new-in 0.120.0 >}} + +```go-html-template +{{ hugo.IsDevelopment }} → true/false +``` diff --git a/docs/content/en/functions/hugo/IsExtended.md b/docs/content/en/functions/hugo/IsExtended.md new file mode 100644 index 000000000..84b68e6d3 --- /dev/null +++ b/docs/content/en/functions/hugo/IsExtended.md @@ -0,0 +1,15 @@ +--- +title: hugo.IsExtended +description: Reports whether the Hugo binary is the extended version. +categories: [] +keywords: [] +action: + aliases: [] + related: [] + returnType: bool + signatures: [hugo.IsExtended] +--- + +```go-html-template +{{ hugo.IsExtended }} → true/false +``` diff --git a/docs/content/en/functions/hugo/IsProduction.md b/docs/content/en/functions/hugo/IsProduction.md new file mode 100644 index 000000000..7e9bda0e3 --- /dev/null +++ b/docs/content/en/functions/hugo/IsProduction.md @@ -0,0 +1,17 @@ +--- +title: hugo.IsProduction +description: Reports whether the current running environment is "production". +categories: [] +keywords: [] +action: + aliases: [] + related: + - functions/hugo/IsDevelopment + - functions/hugo/Environment + returnType: bool + signatures: [hugo.IsProduction] +--- + +```go-html-template +{{ hugo.IsProduction }} → true/false +``` diff --git a/docs/content/en/functions/hugo/IsServer.md b/docs/content/en/functions/hugo/IsServer.md new file mode 100644 index 000000000..942261007 --- /dev/null +++ b/docs/content/en/functions/hugo/IsServer.md @@ -0,0 +1,17 @@ +--- +title: hugo.IsServer +description: Reports whether the built-in development server is running. +categories: [] +keywords: [] +action: + aliases: [] + related: [] + returnType: bool + signatures: [hugo.IsServer] +--- + +{{< new-in 0.120.0 >}} + +```go-html-template +{{ hugo.IsServer }} → true/false +``` diff --git a/docs/content/en/functions/hugo/Version.md b/docs/content/en/functions/hugo/Version.md new file mode 100644 index 000000000..5a312e81a --- /dev/null +++ b/docs/content/en/functions/hugo/Version.md @@ -0,0 +1,15 @@ +--- +title: hugo.Version +description: Returns the current version of the Hugo binary. +categories: [] +keywords: [] +action: + aliases: [] + related: [] + returnType: hugo.VersionString + signatures: [hugo.Version] +--- + +```go-html-template +{{ hugo.Version }} → 0.122.0 +``` diff --git a/docs/content/en/functions/hugo/WorkingDir.md b/docs/content/en/functions/hugo/WorkingDir.md new file mode 100644 index 000000000..ac3835ea8 --- /dev/null +++ b/docs/content/en/functions/hugo/WorkingDir.md @@ -0,0 +1,15 @@ +--- +title: hugo.WorkingDir +description: Returns the project working directory. +categories: [] +keywords: [] +action: + aliases: [] + related: [] + returnType: string + signatures: [hugo.WorkingDir] +--- + +```go-html-template +{{ hugo.WorkingDir }} → /home/user/projects/my-hugo-site +``` diff --git a/docs/content/en/functions/hugo/_index.md b/docs/content/en/functions/hugo/_index.md new file mode 100644 index 000000000..c3ad686da --- /dev/null +++ b/docs/content/en/functions/hugo/_index.md @@ -0,0 +1,12 @@ +--- +title: Hugo functions +linkTitle: hugo +description: Template functions to access information about the Hugo application and the current environment. +categories: [] +keywords: [] +menu: + docs: + parent: functions +--- + +Use these functions to access information about the Hugo application and the current environment. diff --git a/docs/content/en/functions/images/AutoOrient.md b/docs/content/en/functions/images/AutoOrient.md new file mode 100644 index 000000000..8f27a95d8 --- /dev/null +++ b/docs/content/en/functions/images/AutoOrient.md @@ -0,0 +1,52 @@ +--- +title: images.AutoOrient +description: Returns an image filter that rotates and flips an image as needed per its EXIF orientation tag. +categories: [] +keywords: [] +action: + aliases: [] + related: + - functions/images/Filter + - methods/resource/Filter + returnType: images.filter + signatures: [images.AutoOrient] +toc: true +--- + +{{< new-in 0.121.2 >}} + +## Usage + +Create the filter: + +```go-html-template +{{ $filter := images.AutoOrient }} +``` + +{{% include "functions/images/_common/apply-image-filter.md" %}} + +{{% note %}} +When using with other filters, specify `images.AutoOrient` first. +{{% /note %}} + +```go-html-template +{{ $filters := slice + images.AutoOrient + (images.Process "resize 200x") +}} +{{ with resources.Get "images/original.jpg" }} + {{ with images.Filter $filters . }} + <img src="{{ .RelPermalink }}" width="{{ .Width }}" height="{{ .Height }}" alt=""> + {{ end }} +{{ end }} +``` + +## Example + +{{< img + src="images/examples/landscape-exif-orientation-5.jpg" + alt="Zion National Park" + filter="AutoOrient" + filterArgs="" + example=true +>}} diff --git a/docs/content/en/functions/images/Brightness.md b/docs/content/en/functions/images/Brightness.md new file mode 100644 index 000000000..0001bcba8 --- /dev/null +++ b/docs/content/en/functions/images/Brightness.md @@ -0,0 +1,36 @@ +--- +title: images.Brightness +description: Returns an image filter that changes the brightness of an image. +categories: [] +keywords: [] +action: + aliases: [] + related: + - functions/images/Filter + - methods/resource/Filter + returnType: images.filter + signatures: [images.Brightness PERCENTAGE] +toc: true +--- + +The percentage must be in the range [-100, 100] where 0 has no effect. A value of `-100` produces a solid black image, and a value of `100` produces a solid white image. + +## Usage + +Create the image filter: + +```go-html-template +{{ $filter := images.Brightness 12 }} +``` + +{{% include "functions/images/_common/apply-image-filter.md" %}} + +## Example + +{{< img + src="images/examples/zion-national-park.jpg" + alt="Zion National Park" + filter="Brightness" + filterArgs="12" + example=true +>}} diff --git a/docs/content/en/functions/images/ColorBalance.md b/docs/content/en/functions/images/ColorBalance.md new file mode 100644 index 000000000..29829f9e6 --- /dev/null +++ b/docs/content/en/functions/images/ColorBalance.md @@ -0,0 +1,36 @@ +--- +title: images.ColorBalance +description: Returns an image filter that changes the color balance of an image. +categories: [] +keywords: [] +action: + aliases: [] + related: + - functions/images/Filter + - methods/resource/Filter + returnType: images.filter + signatures: [images.ColorBalance PCTRED PCTGREEN PCTBLUE] +toc: true +--- + +The percentage for each channel (red, green, blue) must be in the range [-100, 500]. + +## Usage + +Create the filter: + +```go-html-template +{{ $filter := images.ColorBalance -10 10 50 }} +``` + +{{% include "functions/images/_common/apply-image-filter.md" %}} + +## Example + +{{< img + src="images/examples/zion-national-park.jpg" + alt="Zion National Park" + filter="ColorBalance" + filterArgs="-10,10,50" + example=true +>}} diff --git a/docs/content/en/functions/images/Colorize.md b/docs/content/en/functions/images/Colorize.md new file mode 100644 index 000000000..c974103b9 --- /dev/null +++ b/docs/content/en/functions/images/Colorize.md @@ -0,0 +1,40 @@ +--- +title: images.Colorize +description: Returns an image filter that produces a colorized version of an image. +categories: [] +keywords: [] +action: + aliases: [] + related: + - functions/images/Filter + - methods/resource/Filter + returnType: images.filter + signatures: [images.Colorize HUE SATURATION PERCENTAGE] +toc: true +--- + +The hue is the angle on the color wheel, typically in the range [0, 360]. + +The saturation must be in the range [0, 100]. + +The percentage specifies the strength of the effect, and must be in the range [0, 100]. + +## Usage + +Create the filter: + +```go-html-template +{{ $filter := images.Colorize 180 50 20 }} +``` + +{{% include "functions/images/_common/apply-image-filter.md" %}} + +## Example + +{{< img + src="images/examples/zion-national-park.jpg" + alt="Zion National Park" + filter="Colorize" + filterArgs="180,50,20" + example=true +>}} diff --git a/docs/content/en/functions/images/Config.md b/docs/content/en/functions/images/Config.md new file mode 100644 index 000000000..0a4d225bc --- /dev/null +++ b/docs/content/en/functions/images/Config.md @@ -0,0 +1,36 @@ +--- +title: images.Config +description: Returns an image.Config structure from the image at the specified path, relative to the working directory. +categories: [] +keywords: [] +action: + aliases: [] + related: [] + returnType: image.Config + signatures: [images.Config PATH] +aliases: [/functions/imageconfig] +--- + +See [image processing] for an overview of Hugo's image pipeline. + +[image processing]: /content-management/image-processing/ + +```go-html-template +{{ $ic := images.Config "/static/images/a.jpg" }} + +{{ $ic.Width }} → 600 (int) +{{ $ic.Height }} → 400 (int) +``` + +Supported image formats include GIF, JPEG, PNG, TIFF, and WebP. + +{{% note %}} +This is a legacy function, superseded by the [`Width`] and [`Height`] methods for [global], [page], and [remote] resources. See the [image processing] section for details. + +[`Width`]: /methods/resource/width +[`Height`]: /methods/resource/height +[global]: /getting-started/glossary/#global-resource +[image processing]: /content-management/image-processing +[page]: /getting-started/glossary/#page-resource +[remote]: /getting-started/glossary/#remote-resource +{{% /note %}} diff --git a/docs/content/en/functions/images/Contrast.md b/docs/content/en/functions/images/Contrast.md new file mode 100644 index 000000000..532ae8c9c --- /dev/null +++ b/docs/content/en/functions/images/Contrast.md @@ -0,0 +1,36 @@ +--- +title: images.Contrast +description: Returns an image filter that changes the contrast of an image. +categories: [] +keywords: [] +action: + aliases: [] + related: + - functions/images/Filter + - methods/resource/Filter + returnType: images.filter + signatures: [images.Contrast PERCENTAGE] +toc: true +--- + +The percentage must be in the range [-100, 100] where 0 has no effect. A value of `-100` produces a solid grey image, and a value of `100` produces an over-contrasted image. + +## Usage + +Create the filter: + +```go-html-template +{{ $filter := images.Contrast -20 }} +``` + +{{% include "functions/images/_common/apply-image-filter.md" %}} + +## Example + +{{< img + src="images/examples/zion-national-park.jpg" + alt="Zion National Park" + filter="Contrast" + filterArgs="-20" + example=true +>}} diff --git a/docs/content/en/functions/images/Filter.md b/docs/content/en/functions/images/Filter.md new file mode 100644 index 000000000..450a64814 --- /dev/null +++ b/docs/content/en/functions/images/Filter.md @@ -0,0 +1,67 @@ +--- +title: images.Filter +description: Applies one or more image filters to the given image resource. +categories: [] +keywords: [] +action: + aliases: [] + related: + - methods/resource/Filter + returnType: images.ImageResource + signatures: [images.Filter FILTERS... IMAGE] +toc: true +--- + +Apply one or more [image filters](#image-filters) to the given image. + +To apply a single filter: + +```go-html-template +{{ with resources.Get "images/original.jpg" }} + {{ with images.Filter images.Grayscale . }} + <img src="{{ .RelPermalink }}" width="{{ .Width }}" height="{{ .Height }}" alt=""> + {{ end }} +{{ end }} +``` + +To apply two or more filters, executing from left to right: + +```go-html-template +{{ $filters := slice + images.Grayscale + (images.GaussianBlur 8) +}} +{{ with resources.Get "images/original.jpg" }} + {{ with images.Filter $filters . }} + <img src="{{ .RelPermalink }}" width="{{ .Width }}" height="{{ .Height }}" alt=""> + {{ end }} +{{ end }} +``` + +You can also apply image filters using the [`Filter`] method on a `Resource` object. + +[`Filter`]: /methods/resource/filter + +## Example + +```go-html-template +{{ with resources.Get "images/original.jpg" }} + {{ with images.Filter images.Grayscale . }} + <img src="{{ .RelPermalink }}" width="{{ .Width }}" height="{{ .Height }}" alt=""> + {{ end }} +{{ end }} +``` + +{{< img + src="images/examples/zion-national-park.jpg" + alt="Zion National Park" + filter="Grayscale" + filterArgs="" + example=true +>}} + +## Image filters + +Use any of these filters with the `images.Filter` function, or with the `Filter` method on a `Resource` object. + +{{< list-pages-in-section path=/functions/images filter=functions_images_no_filters filterType=exclude >}} diff --git a/docs/content/en/functions/images/Gamma.md b/docs/content/en/functions/images/Gamma.md new file mode 100644 index 000000000..affbdcfa8 --- /dev/null +++ b/docs/content/en/functions/images/Gamma.md @@ -0,0 +1,36 @@ +--- +title: images.Gamma +description: Returns an image filter that performs gamma correction on an image. +categories: [] +keywords: [] +action: + aliases: [] + related: + - functions/images/Filter + - methods/resource/Filter + returnType: images.filter + signatures: [images.Gamma GAMMA] +toc: true +--- + +The gamma value must be positive. A value greater than 1 lightens the image, while a value less than 1 darkens the image. The filter has no effect when the gamma value is 1. + +## Usage + +Create the filter: + +```go-html-template +{{ $filter := images.Gamma 1.667 }} +``` + +{{% include "functions/images/_common/apply-image-filter.md" %}} + +## Example + +{{< img + src="images/examples/zion-national-park.jpg" + alt="Zion National Park" + filter="Gamma" + filterArgs="1.667" + example=true +>}} diff --git a/docs/content/en/functions/images/GaussianBlur.md b/docs/content/en/functions/images/GaussianBlur.md new file mode 100644 index 000000000..e2f49a847 --- /dev/null +++ b/docs/content/en/functions/images/GaussianBlur.md @@ -0,0 +1,36 @@ +--- +title: images.GaussianBlur +description: Returns an image filter that applies a gaussian blur to an image. +categories: [] +keywords: [] +action: + aliases: [] + related: + - functions/images/Filter + - methods/resource/Filter + returnType: images.filter + signatures: [images.GaussianBlur SIGMA] +toc: true +--- + +The sigma value must be positive, and indicates how much the image will be blurred. The blur-affected radius is approximately 3 times the sigma value. + +## Usage + +Create the filter: + +```go-html-template +{{ $filter := images.GaussianBlur 5 }} +``` + +{{% include "functions/images/_common/apply-image-filter.md" %}} + +## Example + +{{< img + src="images/examples/zion-national-park.jpg" + alt="Zion National Park" + filter="GaussianBlur" + filterArgs="5" + example=true +>}} diff --git a/docs/content/en/functions/images/Grayscale.md b/docs/content/en/functions/images/Grayscale.md new file mode 100644 index 000000000..d8a89b7f2 --- /dev/null +++ b/docs/content/en/functions/images/Grayscale.md @@ -0,0 +1,34 @@ +--- +title: images.Grayscale +description: Returns an image filter that produces a grayscale version of an image. +categories: [] +keywords: [] +action: + aliases: [] + related: + - functions/images/Filter + - methods/resource/Filter + returnType: images.filter + signatures: [images.Grayscale] +toc: true +--- + +## Usage + +Create the filter: + +```go-html-template +{{ $filter := images.Grayscale }} +``` + +{{% include "functions/images/_common/apply-image-filter.md" %}} + +## Example + +{{< img + src="images/examples/zion-national-park.jpg" + alt="Zion National Park" + filter="Grayscale" + filterArgs="" + example=true +>}} diff --git a/docs/content/en/functions/images/Hue.md b/docs/content/en/functions/images/Hue.md new file mode 100644 index 000000000..6eafac437 --- /dev/null +++ b/docs/content/en/functions/images/Hue.md @@ -0,0 +1,36 @@ +--- +title: images.Hue +description: Returns an image filter that rotates the hue of an image. +categories: [] +keywords: [] +action: + aliases: [] + related: + - functions/images/Filter + - methods/resource/Filter + returnType: images.filter + signatures: [images.Hue SHIFT] +toc: true +--- + +The hue angle shift is typically in the range [-180, 180] where 0 has no effect. + +## Usage + +Create the filter: + +```go-html-template +{{ $filter := images.Hue -15 }} +``` + +{{% include "functions/images/_common/apply-image-filter.md" %}} + +## Example + +{{< img + src="images/examples/zion-national-park.jpg" + alt="Zion National Park" + filter="Hue" + filterArgs="-15" + example=true +>}} diff --git a/docs/content/en/functions/images/Invert.md b/docs/content/en/functions/images/Invert.md new file mode 100644 index 000000000..1ee85e514 --- /dev/null +++ b/docs/content/en/functions/images/Invert.md @@ -0,0 +1,34 @@ +--- +title: images.Invert +description: Returns an image filter that negates the colors of an image. +categories: [] +keywords: [] +action: + aliases: [] + related: + - functions/images/Filter + - methods/resource/Filter + returnType: images.filter + signatures: [images.Invert] +toc: true +--- + +## Usage + +Create the filter: + +```go-html-template +{{ $filter := images.Invert }} +``` + +{{% include "functions/images/_common/apply-image-filter.md" %}} + +## Example + +{{< img + src="images/examples/zion-national-park.jpg" + alt="Zion National Park" + filter="Invert" + filterArgs="" + example=true +>}} diff --git a/docs/content/en/functions/images/Opacity.md b/docs/content/en/functions/images/Opacity.md new file mode 100644 index 000000000..6a74fd081 --- /dev/null +++ b/docs/content/en/functions/images/Opacity.md @@ -0,0 +1,52 @@ +--- +title: images.Opacity +description: Returns an image filter that changes the opacity of an image. +categories: [] +keywords: [] +action: + aliases: [] + related: + - functions/images/Filter + - methods/resource/Filter + returnType: images.filter + signatures: [images.Opacity OPACITY] +toc: true +--- + +{{< new-in 0.119.0 >}} + +The opacity value must be in the range [0, 1]. A value of `0` produces a transparent image, and a value of `1` produces an opaque image (no transparency). + +## Usage + +Create the filter: + +```go-html-template +{{ $filter := images.Opacity 0.65 }} +``` + +{{% include "functions/images/_common/apply-image-filter.md" %}} + +The `images.Opacity` filter is most useful for target formats such as PNG and WebP that support transparency. If the source image does not support transparency, combine this filter with the `images.Process` filter: + +```go-html-template +{{ with resources.Get "images/original.jpg" }} + {{ $filters := slice + (images.Opacity 0.65) + (images.Process "png") + }} + {{ with . | images.Filter $filters }} + <img src="{{ .RelPermalink }}" width="{{ .Width }}" height="{{ .Height }}" alt=""> + {{ end }} +{{ end }} +``` + +## Example + +{{< img + src="images/examples/zion-national-park.jpg" + alt="Zion National Park" + filter="Opacity" + filterArgs="0.65" + example=true +>}} diff --git a/docs/content/en/functions/images/Overlay.md b/docs/content/en/functions/images/Overlay.md new file mode 100644 index 000000000..39e62b121 --- /dev/null +++ b/docs/content/en/functions/images/Overlay.md @@ -0,0 +1,52 @@ +--- +title: images.Overlay +description: Returns an image filter that overlays the source image at the given coordinates, relative to the upper left corner. +categories: [] +keywords: [] +action: + aliases: [] + related: + - functions/images/Filter + - methods/resource/Filter + returnType: images.filter + signatures: [images.Overlay RESOURCE X Y] +toc: true +--- + +## Usage + +Capture the overlay image as a resource: + +```go-html-template +{{ $overlay := "" }} +{{ $path := "images/logo.png" }} +{{ with resources.Get $path }} + {{ $overlay = . }} +{{ else }} + {{ errorf "Unable to get resource %q" $path }} +{{ end }} +``` + +The overlay image can be a [global resource], a [page resource], or a [remote resource]. + +[global resource]: /getting-started/glossary/#global-resource +[page resource]: /getting-started/glossary/#page-resource +[remote resource]: /getting-started/glossary/#remote-resource + +Create the filter: + +```go-html-template +{{ $filter := images.Overlay $overlay 20 20 }} +``` + +{{% include "functions/images/_common/apply-image-filter.md" %}} + +## Example + +{{< img + src="images/examples/zion-national-park.jpg" + alt="Zion National Park" + filter="Overlay" + filterArgs="images/logos/logo-64x64.png,20,20" + example=true +>}} diff --git a/docs/content/en/functions/images/Padding.md b/docs/content/en/functions/images/Padding.md new file mode 100644 index 000000000..139626596 --- /dev/null +++ b/docs/content/en/functions/images/Padding.md @@ -0,0 +1,75 @@ +--- +title: images.Padding +description: Returns an image filter that resizes the image canvas without resizing the image. +categories: [] +keywords: [] +action: + aliases: [] + related: + - functions/images/Filter + - methods/resource/Filter + returnType: images.filter + signatures: ['images.Padding V1 [V2] [V3] [V4] [COLOR]'] +toc: true +--- + +{{< new-in 0.120.0 >}} + +The last argument is the canvas color, expressed as an RGB or RGBA [hexadecimal color]. The default value is `ffffffff` (opaque white). The preceding arguments are the padding values, in pixels, using the CSS [shorthand property] syntax. Negative padding values will crop the image. + +[hexadecimal color]: https://developer.mozilla.org/en-US/docs/Web/CSS/hex-color +[shorthand property]: https://developer.mozilla.org/en-US/docs/Web/CSS/Shorthand_properties#edges_of_a_box + +## Usage + +Create the filter: + +```go-html-template +{{ $filter := images.Padding 20 40 "#976941" }} +``` + +{{% include "functions/images/_common/apply-image-filter.md" %}} + +Combine with the [`Colors`] method to create a border with one of the image's most dominant colors: + +[`Colors`]: /methods/resource/colors + +```go-html-template +{{ with resources.Get "images/original.jpg" }} + {{ $filter := images.Padding 20 40 (index .Colors 2) }} + {{ with . | images.Filter $filter }} + <img src="{{ .RelPermalink }}" width="{{ .Width }}" height="{{ .Height }}" alt=""> + {{ end }} +{{ end }} +``` + +## Example + +{{< img + src="images/examples/zion-national-park.jpg" + alt="Zion National Park" + filter="Padding" + filterArgs="20,40,20,40,#976941" + example=true +>}} + +## Other recipes + +This example resizes an image to 300px wide, converts it to the WebP format, adds 20px vertical padding and 50px horizontal padding, then sets the canvas color to dark green with 33% opacity. + +Conversion to WebP is required to support transparency. PNG and WebP images have an alpha channel; JPEG and GIF do not. + +```go-html-template +{{ $img := resources.Get "images/a.jpg" }} +{{ $filters := slice + (images.Process "resize 300x webp") + (images.Padding 20 50 "#0705") +}} +{{ $img = $img.Filter $filters }} +``` + +To add a 2px gray border to an image: + +```go-html-template +{{ $img = $img.Filter (images.Padding 2 "#777") }} +``` diff --git a/docs/content/en/functions/images/Pixelate.md b/docs/content/en/functions/images/Pixelate.md new file mode 100644 index 000000000..2016877ed --- /dev/null +++ b/docs/content/en/functions/images/Pixelate.md @@ -0,0 +1,34 @@ +--- +title: images.Pixelate +description: Returns an image filter that applies a pixelation effect to an image. +categories: [] +keywords: [] +action: + aliases: [] + related: + - functions/images/Filter + - methods/resource/Filter + returnType: images.filter + signatures: [images.Pixelate SIZE] +toc: true +--- + +## Usage + +Create the filter: + +```go-html-template +{{ $filter := images.Pixelate 4 }} +``` + +{{% include "functions/images/_common/apply-image-filter.md" %}} + +## Example + +{{< img + src="images/examples/zion-national-park.jpg" + alt="Zion National Park" + filter="Pixelate" + filterArgs="4" + example=true +>}} diff --git a/docs/content/en/functions/images/Process.md b/docs/content/en/functions/images/Process.md new file mode 100644 index 000000000..a5e4d88dd --- /dev/null +++ b/docs/content/en/functions/images/Process.md @@ -0,0 +1,115 @@ +--- +title: images.Process +description: Returns an image filter that processes the given image using the given specification. +categories: [] +keywords: [] +action: + aliases: [] + related: + - functions/images/Filter + - methods/resource/Filter + - methods/resource/Process + returnType: images.filter + signatures: [images.Process SPEC] +toc: true +--- + +{{< new-in 0.119.0 >}} + +This filter has the same options as the [`Process`] method on a `Resource` object, but using it as a filter may be more effective if you need to apply multiple filters to an image. + +[`Process`]: /methods/resource/process + +The process specification is a space-delimited, case-insensitive list of one or more of the following in any sequence: + +action +: Specify zero or one of `crop`, `fill`, `fit`, or `resize`. If you specify an action you must also provide dimensions. See [details](content-management/image-processing/#image-processing-methods). + +```go-html-template +{{ $filter := images.Process "resize 300x" }} +``` + +dimensions +: Required if you specify an action. Provide width _or_ height when using `resize`, else provide both width _and_ height. See [details](/content-management/image-processing/#dimensions). + +```go-html-template +{{ $filter := images.Process "crop 200x200" }} +``` + +anchor +: Use with the `crop` or `fill` action. Specify zero or one of `TopLeft`, `Top`, `TopRight`, `Left`, `Center`, `Right`, `BottomLeft`, `Bottom`, `BottomRight`, or `Smart`. Default is `Smart`. See [details](/content-management/image-processing/#anchor). + +```go-html-template +{{ $filter := images.Process "crop 200x200 center" }} +``` + +rotation +: Typically specify zero or one of `r90`, `r180`, or `r270`. Also supports arbitrary rotation angles. See [details](/content-management/image-processing/#rotation). + +```go-html-template +{{ $filter := images.Process "r90" }} +{{ $filter := images.Process "crop 200x200 center r90" }} +``` + +target format +: Specify zero or one of `gif`, `jpeg`, `png`, `tiff`, or `webp`. See [details](/content-management/image-processing/#target-format). + +```go-html-template +{{ $filter := images.Process "webp" }} +{{ $filter := images.Process "crop 200x200 center r90 webp" }} +``` + +quality +: Applicable to JPEG and WebP images. Optionally specify `qN` where `N` is an integer in the range [0, 100]. Default is `75`. See [details](/content-management/image-processing/#quality). + +```go-html-template +{{ $filter := images.Process "q50" }} +{{ $filter := images.Process "crop 200x200 center r90 webp q50" }} +``` + +hint +: Applicable to WebP images and equivalent to the `-preset` flag for the [`cwebp`] encoder. Specify zero or one of `drawing`, `icon`, `photo`, `picture`, or `text`. Default is `photo`. See [details](/content-management/image-processing/#hint). + +[`cwebp`]: https://developers.google.com/speed/webp/docs/cwebp + + +```go-html-template +{{ $filter := images.Process "webp" "icon" }} +{{ $filter := images.Process "crop 200x200 center r90 webp q50 icon" }} +``` + +background color +: When converting a PNG or WebP with transparency to a format that does not support transparency, optionally specify a background color using a 3-digit or a 6-digit hexadecimal color code. Default is `#ffffff` (white). See [details](/content-management/image-processing/#background-color). + +```go-html-template +{{ $filter := images.Process "jpeg #000" }} +{{ $filter := images.Process "crop 200x200 center r90 q50 jpeg #000" }} +``` + +resampling filter +: Typically specify zero or one of `Box`, `Lanczos`, `CatmullRom`, `MitchellNetravali`, `Linear`, or `NearestNeighbor`. Other resampling filters are available. See [details](/content-management/image-processing/#resampling-filter). + +```go-html-template +{{ $filter := images.Process "resize 300x lanczos" }} +{{ $filter := images.Process "resize 300x r90 q50 jpeg #000 lanczos" }} +``` + +## Usage + +Create a filter: + +```go-html-template +{{ $filter := images.Process "resize 256x q40 webp" }} +``` + +{{% include "functions/images/_common/apply-image-filter.md" %}} + +## Example + +{{< img + src="images/examples/zion-national-park.jpg" + alt="Zion National Park" + filter="Process" + filterArgs="resize 256x q40 webp" + example=true +>}} diff --git a/docs/content/en/functions/images/Saturation.md b/docs/content/en/functions/images/Saturation.md new file mode 100644 index 000000000..118bd0213 --- /dev/null +++ b/docs/content/en/functions/images/Saturation.md @@ -0,0 +1,36 @@ +--- +title: images.Saturation +description: Returns an image filter that changes the saturation of an image. +categories: [] +keywords: [] +action: + aliases: [] + related: + - functions/images/Filter + - methods/resource/Filter + returnType: images.filter + signatures: [images.Saturation PERCENTAGE] +toc: true +--- + +The percentage must be in the range [-100, 500] where 0 has no effect. + +## Usage + +Create the filter: + +```go-html-template +{{ $filter := images.Saturation 65 }} +``` + +{{% include "functions/images/_common/apply-image-filter.md" %}} + +## Example + +{{< img + src="images/examples/zion-national-park.jpg" + alt="Zion National Park" + filter="Saturation" + filterArgs="65" + example=true +>}} diff --git a/docs/content/en/functions/images/Sepia.md b/docs/content/en/functions/images/Sepia.md new file mode 100644 index 000000000..9f0b7adfb --- /dev/null +++ b/docs/content/en/functions/images/Sepia.md @@ -0,0 +1,36 @@ +--- +title: images.Sepia +description: Returns an image filter that produces a sepia-toned version of an image. +categories: [] +keywords: [] +action: + aliases: [] + related: + - functions/images/Filter + - methods/resource/Filter + returnType: images.filter + signatures: [images.Sepia PERCENTAGE] +toc: true +--- + +The percentage must be in the range [0, 100] where 0 has no effect. + +## Usage + +Create the filter: + +```go-html-template +{{ $filter := images.Sepia 75 }} +``` + +{{% include "functions/images/_common/apply-image-filter.md" %}} + +## Example + +{{< img + src="images/examples/zion-national-park.jpg" + alt="Zion National Park" + filter="Sepia" + filterArgs="75" + example=true +>}} diff --git a/docs/content/en/functions/images/Sigmoid.md b/docs/content/en/functions/images/Sigmoid.md new file mode 100644 index 000000000..32765f923 --- /dev/null +++ b/docs/content/en/functions/images/Sigmoid.md @@ -0,0 +1,40 @@ +--- +title: images.Sigmoid +description: Returns an image filter that changes the contrast of an image using a sigmoidal function. +categories: [] +keywords: [] +action: + aliases: [] + related: + - functions/images/Filter + - methods/resource/Filter + returnType: images.filter + signatures: [images.Sigmoid MIDPOINT FACTOR] +toc: true +--- + +This is a non-linear contrast change useful for photo adjustments; it preserves highlight and shadow detail. + +The midpoint is the midpoint of contrast. It must be in the range [0, 1], typically 0.5. + +The factor indicates how much to increase or decrease the contrast, typically in the range [-10, 10] where 0 has no effect. A positive value increases contrast, while a negative value decrease contrast. + +## Usage + +Create the filter: + +```go-html-template +{{ $filter := images.Sigmoid 0.6 -4 }} +``` + +{{% include "functions/images/_common/apply-image-filter.md" %}} + +## Example + +{{< img + src="images/examples/zion-national-park.jpg" + alt="Zion National Park" + filter="Sigmoid" + filterArgs="0.6,-4" + example=true +>}} diff --git a/docs/content/en/functions/images/Text.md b/docs/content/en/functions/images/Text.md new file mode 100644 index 000000000..8c6670d42 --- /dev/null +++ b/docs/content/en/functions/images/Text.md @@ -0,0 +1,97 @@ +--- +title: images.Text +description: Returns an image filter that adds text to an image. +categories: [] +keywords: [] +action: + aliases: [] + related: + - functions/images/Filter + - methods/resource/Filter + returnType: images.filter + signatures: ['images.Text TEXT [OPTIONS]'] +toc: true +--- + +## Options + +Although none of the options are required, at a minimum you will want to set the `size` to be some reasonable percentage of the image height. + +color +: (`string`) The font color, either a 3-digit or 6-digit hexadecimal color code. Default is `#ffffff` (white). + +font +: (`resource.Resource`) The font can be a [global resource], a [page resource], or a [remote resource]. Default is [Go Regular], a proportional sans-serif TrueType font. + +[Go Regular]: https://go.dev/blog/go-fonts#sans-serif + +linespacing +: (`int`) The number of pixels between each line. For a line height of 1.4, set the `linespacing` to 0.4 multiplied by the `size`. Default is `2`. + +size +: (`int`) The font size in pixels. Default is `20`. + +x +: (`int`) The horizontal offset, in pixels, relative to the left of the image. Default is `10`. + +y +: (`int`) The vertical offset, in pixels, relative to the top of the image. Default is `10`. + +[global resource]: /getting-started/glossary/#global-resource +[page resource]: /getting-started/glossary/#page-resource +[remote resource]: /getting-started/glossary/#remote-resource + +## Usage + +Capture the font as a resource: + +```go-html-template +{{ $font := "" }} +{{ $path := "https://github.com/google/fonts/raw/main/ofl/lato/Lato-Regular.ttf" }} +{{ with resources.GetRemote $path }} + {{ with .Err }} + {{ errorf "%s" . }} + {{ else }} + {{ $font = . }} + {{ end }} +{{ else }} + {{ errorf "Unable to get resource %q" $path }} +{{ end }} +``` + +Create the options map: + +```go-html-template +{{ $opts := dict + "color" "#fbfaf5" + "font" $font + "linespacing" 8 + "size" 40 + "x" 25 + "y" 190 +}} +``` + +Set the text: + +```go-html-template +{{ $text := "Zion National Park" }} +``` + +Create the filter: + +```go-html-template +{{ $filter := images.Text $text $opts }} +``` + +{{% include "functions/images/_common/apply-image-filter.md" %}} + +## Example + +{{< img + src="images/examples/zion-national-park.jpg" + alt="Zion National Park" + filter="Text" + filterArgs="Zion National Park,25,190,40,1.2,#fbfaf5" + example=true +>}} diff --git a/docs/content/en/functions/images/UnsharpMask.md b/docs/content/en/functions/images/UnsharpMask.md new file mode 100644 index 000000000..57a74a54a --- /dev/null +++ b/docs/content/en/functions/images/UnsharpMask.md @@ -0,0 +1,40 @@ +--- +title: images.UnsharpMask +description: Returns an image filter that sharpens an image. +categories: [] +keywords: [] +action: + aliases: [] + related: + - functions/images/Filter + - methods/resource/Filter + returnType: images.filter + signatures: [images.UnsharpMask SIGMA AMOUNT THRESHOLD] +toc: true +--- + +The sigma parameter is used in a gaussian function and affects the radius of effect. Sigma must be positive. The sharpen radius is approximately 3 times the sigma value. + +The amount parameter controls how much darker and how much lighter the edge borders become. Typically between 0.5 and 1.5. + +The threshold parameter controls the minimum brightness change that will be sharpened. Typically between 0 and 0.05. + +## Usage + +Create the filter: + +```go-html-template +{{ $filter := images.UnsharpMask 10 0.4 0.03 }} +``` + +{{% include "functions/images/_common/apply-image-filter.md" %}} + +## Example + +{{< img + src="images/examples/zion-national-park.jpg" + alt="Zion National Park" + filter="UnsharpMask" + filterArgs="10,0.4,0.03" + example=true +>}} diff --git a/docs/content/en/functions/images/_common/_index.md b/docs/content/en/functions/images/_common/_index.md new file mode 100644 index 000000000..47d5812fb --- /dev/null +++ b/docs/content/en/functions/images/_common/_index.md @@ -0,0 +1,13 @@ +--- +cascade: + _build: + list: never + publishResources: false + render: never +--- + +<!-- +Files within this headless branch bundle are markdown snippets. Each file must contain front matter delimiters, though front matter fields are not required. + +Include the rendered content using the "include" shortcode. +--> diff --git a/docs/content/en/functions/images/_common/apply-image-filter.md b/docs/content/en/functions/images/_common/apply-image-filter.md new file mode 100644 index 000000000..acd3a733d --- /dev/null +++ b/docs/content/en/functions/images/_common/apply-image-filter.md @@ -0,0 +1,27 @@ +--- +# Do not remove front matter. +--- + +Apply the filter using the [`images.Filter`] function: + +[`images.Filter`]: /functions/images/filter + +```go-html-template +{{ with resources.Get "images/original.jpg" }} + {{ with . | images.Filter $filter }} + <img src="{{ .RelPermalink }}" width="{{ .Width }}" height="{{ .Height }}" alt=""> + {{ end }} +{{ end }} +``` + +You can also apply the filter using the [`Filter`] method on a `Resource` object: + +[`Filter`]: methods/resource/filter + +```go-html-template +{{ with resources.Get "images/original.jpg" }} + {{ with .Filter $filter }} + <img src="{{ .RelPermalink }}" width="{{ .Width }}" height="{{ .Height }}" alt=""> + {{ end }} +{{ end }} +``` diff --git a/docs/content/en/functions/images/_index.md b/docs/content/en/functions/images/_index.md new file mode 100644 index 000000000..13542ea73 --- /dev/null +++ b/docs/content/en/functions/images/_index.md @@ -0,0 +1,12 @@ +--- +title: Image functions +linkTitle: images +description: Use these functions to create an image filter, apply an image filter to an image, and to retrieve image information. +categories: [] +keywords: [] +menu: + docs: + parent: functions +--- + +Use these functions to create an image filter, apply an image filter to an image, and to retrieve image information. diff --git a/docs/content/en/functions/inflect/Humanize.md b/docs/content/en/functions/inflect/Humanize.md new file mode 100644 index 000000000..71b4a5fd2 --- /dev/null +++ b/docs/content/en/functions/inflect/Humanize.md @@ -0,0 +1,26 @@ +--- +title: inflect.Humanize +description: Returns the humanized version of the input with the first letter capitalized. +categories: [] +keywords: [] +action: + aliases: [humanize] + related: + - functions/inflect/Pluralize + - functions/inflect/Singularize + returnType: string + signatures: [inflect.Humanize INPUT] +aliases: [/functions/humanize] +--- + +```go-html-template +{{ humanize "my-first-post" }} → My first post +{{ humanize "myCamelPost" }} → My camel post +``` + +If the input is an integer or a string representation of an integer, humanize returns the number with the proper ordinal appended. + +```go-html-template +{{ humanize "52" }} → 52nd +{{ humanize 103 }} → 103rd +``` diff --git a/docs/content/en/functions/inflect/Pluralize.md b/docs/content/en/functions/inflect/Pluralize.md new file mode 100644 index 000000000..c25f89617 --- /dev/null +++ b/docs/content/en/functions/inflect/Pluralize.md @@ -0,0 +1,18 @@ +--- +title: inflect.Pluralize +description: Pluralizes the given word according to a set of common English pluralization rules. +categories: [] +keywords: [] +action: + aliases: [pluralize] + related: + - functions/inflect/Humanize + - functions/inflect/Singularize + returnType: string + signatures: [inflect.Pluralize INPUT] +aliases: [/functions/pluralize] +--- + +```go-html-template +{{ "cat" | pluralize }} → cats +``` diff --git a/docs/content/en/functions/inflect/Singularize.md b/docs/content/en/functions/inflect/Singularize.md new file mode 100644 index 000000000..29b543257 --- /dev/null +++ b/docs/content/en/functions/inflect/Singularize.md @@ -0,0 +1,20 @@ +--- +title: inflect.Singularize +description: Singularizes the given word according to a set of common English singularization rules. +categories: [] +keywords: [] +action: + aliases: [singularize] + related: + - functions/inflect/Humanize + - functions/inflect/Pluralize + returnType: string + signatures: [inflect.Singularize INPUT] +aliases: [/functions/singularize] +--- + +```go-html-template +{{ "cats" | singularize }} → cat +``` + +See also the `.Data.Singular` [taxonomy variable](/variables/taxonomy/) for singularizing taxonomy names. diff --git a/docs/content/en/functions/inflect/_index.md b/docs/content/en/functions/inflect/_index.md new file mode 100644 index 000000000..601b409e6 --- /dev/null +++ b/docs/content/en/functions/inflect/_index.md @@ -0,0 +1,12 @@ +--- +title: Inflect functions +linkTitle: inflect +description: Template functions to inflect English nouns. +categories: [] +keywords: [] +menu: + docs: + parent: functions +--- + +These functions provide word inflection features such as singularization and pluralization of English nouns. diff --git a/docs/content/en/functions/js/Build.md b/docs/content/en/functions/js/Build.md new file mode 100644 index 000000000..835785486 --- /dev/null +++ b/docs/content/en/functions/js/Build.md @@ -0,0 +1,184 @@ +--- +title: js.Build +description: Bundles, transpiles, tree shakes, and minifies JavaScript resources. +categories: [] +keywords: [] +action: + aliases: [] + related: + - functions/resources/Babel + - functions/resources/Fingerprint + - functions/resources/Minify + returnType: resource.Resource + signatures: ['js.Build [OPTIONS] RESOURCE'] +toc: true +--- + +The `js.Build` function uses the [evanw/esbuild] package to: + +- Bundle +- Transpile (TypeScript and JSX) +- Tree shake +- Minify +- Create source maps + +[evanw/esbuild]: https://github.com/evanw/esbuild + +```go-html-template +{{ with resources.Get "js/main.js" }} + {{ if hugo.IsDevelopment }} + {{ with . | js.Build }} + <script src="{{ .RelPermalink }}"></script> + {{ end }} + {{ else }} + {{ $opts := dict "minify" true }} + {{ with . | js.Build $opts | fingerprint }} + <script src="{{ .RelPermalink }}" integrity="{{ .Data.Integrity }}" crossorigin="anonymous"></script> + {{ end }} + {{ end }} +{{ end }} +``` + +## Options + +targetPath +: (`string`) If not set, the source path will be used as the base target path. +Note that the target path's extension may change if the target MIME type is different, e.g. when the source is TypeScript. + +params +: (`map` or `slice`) Params that can be imported as JSON in your JS files, e.g. + +```go-html-template +{{ $js := resources.Get "js/main.js" | js.Build (dict "params" (dict "api" "https://example.org/api")) }} +``` +And then in your JS file: + +```js +import * as params from '@params'; +``` + +Note that this is meant for small data sets, e.g. configuration settings. For larger data, please put/mount the files into `/assets` and import them directly. + +minify +: (`bool`)Let `js.Build` handle the minification. + +inject +: (`slice`) This option allows you to automatically replace a global variable with an import from another file. The path names must be relative to `assets`. See https://esbuild.github.io/api/#inject + +shims +: (`map`) This option allows swapping out a component with another. A common use case is to load dependencies like React from a CDN (with _shims_) when in production, but running with the full bundled `node_modules` dependency during development: + +```go-html-template +{{ $shims := dict "react" "js/shims/react.js" "react-dom" "js/shims/react-dom.js" }} +{{ $js = $js | js.Build dict "shims" $shims }} +``` + +The _shim_ files may look like these: + +```js +// js/shims/react.js +module.exports = window.React; +``` + +```js +// js/shims/react-dom.js +module.exports = window.ReactDOM; +``` + +With the above, these imports should work in both scenarios: + +```js +import * as React from 'react' +import * as ReactDOM from 'react-dom'; +``` + +target +: (`string`) The language target. One of: `es5`, `es2015`, `es2016`, `es2017`, `es2018`, `es2019`, `es2020` or `esnext`. Default is `esnext`. + +externals +: (`slice`) External dependencies. Use this to trim dependencies you know will never be executed. See https://esbuild.github.io/api/#external + +defines +: (`map`) Allow to define a set of string replacement to be performed when building. Should be a map where each key is to be replaced by its value. + +```go-html-template +{{ $defines := dict "process.env.NODE_ENV" `"development"` }} +``` + +format +: (`string`) The output format. One of: `iife`, `cjs`, `esm`. Default is `iife`, a self-executing function, suitable for inclusion as a `<script>` tag. + +sourceMap +: (`string`) Whether to generate `inline` or `external` source maps from esbuild. External source maps will be written to the target with the output file name + ".map". Input source maps can be read from js.Build and node modules and combined into the output source maps. By default, source maps are not created. + +### Import JS code from /assets + +`js.Build` has full support for the virtual union file system in [Hugo Modules](/hugo-modules/). You can see some simple examples in this [test project](https://github.com/gohugoio/hugoTestProjectJSModImports), but in short this means that you can do this: + +```js +import { hello } from 'my/module'; +``` + +And it will resolve to the top-most `index.{js,ts,tsx,jsx}` inside `assets/my/module` in the layered file system. + +```js +import { hello3 } from 'my/module/hello3'; +``` + +Will resolve to `hello3.{js,ts,tsx,jsx}` inside `assets/my/module`. + +Any imports starting with `.` is resolved relative to the current file: + +```js +import { hello4 } from './lib'; +``` + +For other files (e.g. `JSON`, `CSS`) you need to use the relative path including any extension, e.g: + +```js +import * as data from 'my/module/data.json'; +``` + +Any imports in a file outside `/assets` or that does not resolve to a component inside `/assets` will be resolved by [ESBuild](https://esbuild.github.io/) with the **project directory** as the resolve directory (used as the starting point when looking for `node_modules` etc.). Also see [hugo mod npm pack](/commands/hugo_mod_npm_pack/). If you have any imported npm dependencies in your project, you need to make sure to run `npm install` before you run `hugo`. + +Also note the new `params` option that can be passed from template to your JS files, e.g.: + +```go-html-template +{{ $js := resources.Get "js/main.js" | js.Build (dict "params" (dict "api" "https://example.org/api")) }} +``` +And then in your JS file: + +```js +import * as params from '@params'; +``` + +Hugo will, by default, generate a `assets/jsconfig.json` file that maps the imports. This is useful for navigation/intellisense help inside code editors, but if you don't need/want it, you can [turn it off](/getting-started/configuration/#configure-build). + +## Node.js dependencies + +Use the `js.Build` function to include Node.js dependencies. + +Any imports in a file outside `/assets` or that does not resolve to a component inside `/assets` will be resolved by [esbuild](https://esbuild.github.io/) with the **project directory** as the resolve directory (used as the starting point when looking for `node_modules` etc.). Also see [hugo mod npm pack](/commands/hugo_mod_npm_pack/). If you have any imported npm dependencies in your project, you need to make sure to run `npm install` before you run `hugo`. + +The start directory for resolving npm packages (aka. packages that live inside a `node_modules` folder) is always the main project folder. + +{{% note %}} +If you're developing a theme/component that is supposed to be imported and depends on dependencies inside `package.json`, we recommend reading about [hugo mod npm pack](/commands/hugo_mod_npm_pack/), a tool to consolidate all the npm dependencies in a project. +{{% /note %}} + +## Examples + +```go-html-template +{{ $built := resources.Get "js/index.js" | js.Build "main.js" }} +``` + +Or with options: + +```go-html-template +{{ $externals := slice "react" "react-dom" }} +{{ $defines := dict "process.env.NODE_ENV" `"development"` }} + +{{ $opts := dict "targetPath" "main.js" "externals" $externals "defines" $defines }} +{{ $built := resources.Get "scripts/main.js" | js.Build $opts }} +<script src="{{ $built.RelPermalink }}" defer></script> +``` diff --git a/docs/content/en/functions/js/_index.md b/docs/content/en/functions/js/_index.md new file mode 100644 index 000000000..3356e7c7b --- /dev/null +++ b/docs/content/en/functions/js/_index.md @@ -0,0 +1,12 @@ +--- +title: JavaScript functions +linkTitle: js +description: Template functions to work with JavaScript and TypeScript files. +categories: [] +keywords: [] +menu: + docs: + parent: functions +--- + +Use these functions to work with JavaScript and TypeScript files. diff --git a/docs/content/en/functions/lang/FormatAccounting.md b/docs/content/en/functions/lang/FormatAccounting.md new file mode 100644 index 000000000..70365c216 --- /dev/null +++ b/docs/content/en/functions/lang/FormatAccounting.md @@ -0,0 +1,21 @@ +--- +title: lang.FormatAccounting +description: Returns a currency representation of a number for the given currency and precision for the current language and region in accounting notation. +categories: [] +keywords: [] +action: + aliases: [] + related: + - functions/lang/FormatCurrency + - functions/lang/FormatNumber + - functions/lang/FormatNumberCustom + - functions/lang/FormatPercent + returnType: string + signatures: [lang.FormatAccounting PRECISION CURRENCY NUMBER] +--- + +```go-html-template +{{ 512.5032 | lang.FormatAccounting 2 "NOK" }} → NOK512.50 +``` + +{{% include "functions/_common/locales.md" %}} diff --git a/docs/content/en/functions/lang/FormatCurrency.md b/docs/content/en/functions/lang/FormatCurrency.md new file mode 100644 index 000000000..bd83c2ec5 --- /dev/null +++ b/docs/content/en/functions/lang/FormatCurrency.md @@ -0,0 +1,21 @@ +--- +title: lang.FormatCurrency +description: Returns a currency representation of a number for the given currency and precision for the current language and region. +categories: [] +keywords: [] +action: + aliases: [] + related: + - functions/lang/FormatAccounting + - functions/lang/FormatNumber + - functions/lang/FormatNumberCustom + - functions/lang/FormatPercent + returnType: string + signatures: [lang.FormatCurrency PRECISION CURRENCY NUMBER] +--- + +```go-html-template +{{ 512.5032 | lang.FormatCurrency 2 "USD" }} → $512.50 +``` + +{{% include "functions/_common/locales.md" %}} diff --git a/docs/content/en/functions/lang/FormatNumber.md b/docs/content/en/functions/lang/FormatNumber.md new file mode 100644 index 000000000..597df742a --- /dev/null +++ b/docs/content/en/functions/lang/FormatNumber.md @@ -0,0 +1,21 @@ +--- +title: lang.FormatNumber +description: Returns a numeric representation of a number with the given precision for the current language and region. +categories: [] +keywords: [] +action: + aliases: [] + related: + - functions/lang/FormatAccounting + - functions/lang/FormatCurrency + - functions/lang/FormatNumberCustom + - functions/lang/FormatPercent + returnType: string + signatures: [lang.FormatNumber PRECISION NUMBER] +--- + +```go-html-template +{{ 512.5032 | lang.FormatNumber 2 }} → 512.50 +``` + +{{% include "functions/_common/locales.md" %}} diff --git a/docs/content/en/functions/lang/FormatNumberCustom.md b/docs/content/en/functions/lang/FormatNumberCustom.md new file mode 100644 index 000000000..0b72f4983 --- /dev/null +++ b/docs/content/en/functions/lang/FormatNumberCustom.md @@ -0,0 +1,34 @@ +--- +title: lang.FormatNumberCustom +description: Returns a numeric representation of a number with the given precision using negative, decimal, and grouping options. +categories: [] +keywords: [] +action: + aliases: [] + related: + - functions/lang/FormatAccounting + - functions/lang/FormatCurrency + - functions/lang/FormatNumber + - functions/lang/FormatPercent + returnType: string + signatures: ['lang.FormatNumberCustom PRECISION NUMBER [OPTIONS...]'] +aliases: ['/functions/numfmt/'] +--- + +This function formats a number with the given precision. The first options parameter is a space-delimited string of characters to represent negativity, the decimal point, and grouping. The default value is `- . ,`. The second options parameter defines an alternate delimiting character. + +Note that numbers are rounded up at 5 or greater. So, with precision set to 0, 1.5 becomes 2, and 1.4 becomes 1. + +For a simpler function that adapts to the current language, see [`lang.FormatNumber`]. + +```go-html-template +{{ lang.FormatNumberCustom 2 12345.6789 }} → 12,345.68 +{{ lang.FormatNumberCustom 2 12345.6789 "- , ." }} → 12.345,68 +{{ lang.FormatNumberCustom 6 -12345.6789 "- ." }} → -12345.678900 +{{ lang.FormatNumberCustom 0 -12345.6789 "- . ," }} → -12,346 +{{ lang.FormatNumberCustom 0 -12345.6789 "-|.| " "|" }} → -12 346 +``` + +{{% include "functions/_common/locales.md" %}} + +[`lang.FormatNumber`]: /functions/lang/formatnumber diff --git a/docs/content/en/functions/lang/FormatPercent.md b/docs/content/en/functions/lang/FormatPercent.md new file mode 100644 index 000000000..529ada67b --- /dev/null +++ b/docs/content/en/functions/lang/FormatPercent.md @@ -0,0 +1,21 @@ +--- +title: lang.FormatPercent +description: Returns a percentage representation of a number with the given precision for the current language and region. +categories: [] +keywords: [] +action: + aliases: [] + related: + - functions/lang/FormatAccounting + - functions/lang/FormatCurrency + - functions/lang/FormatNumber + - functions/lang/FormatNumberCustom + returnType: string + signatures: [lang.FormatPercent PRECISION NUMBER] +--- + +```go-html-template +{{ 512.5032 | lang.FormatPercent 2 }} → 512.50% +``` + +{{% include "functions/_common/locales.md" %}} diff --git a/docs/content/en/functions/lang/Merge.md b/docs/content/en/functions/lang/Merge.md new file mode 100644 index 000000000..75f5cdf01 --- /dev/null +++ b/docs/content/en/functions/lang/Merge.md @@ -0,0 +1,29 @@ +--- +title: lang.Merge +description: Merge missing translations from other languages. +categories: [] +keywords: [] +action: + aliases: [] + related: [] + returnType: any + signatures: [lang.Merge FROM TO] +aliases: [/functions/lang.merge] +--- + +As an example: + +```sh +{{ $pages := .Site.RegularPages | lang.Merge $frSite.RegularPages | lang.Merge $enSite.RegularPages }} +``` + +Will "fill in the gaps" in the current site with, from left to right, content from the French site, and lastly the English. + +A more practical example is to fill in the missing translations from the other languages: + +```sh +{{ $pages := .Site.RegularPages }} +{{ range .Site.Home.Translations }} +{{ $pages = $pages | lang.Merge .Site.RegularPages }} +{{ end }} + ``` diff --git a/docs/content/en/functions/lang/Translate.md b/docs/content/en/functions/lang/Translate.md new file mode 100644 index 000000000..3366d7751 --- /dev/null +++ b/docs/content/en/functions/lang/Translate.md @@ -0,0 +1,135 @@ +--- +title: lang.Translate +description: Translates a string using the translation tables in the i18n directory. +categories: [] +keywords: [] +action: + aliases: [T, i18n] + related: [] + returnType: string + signatures: ['lang.Translate KEY [CONTEXT]'] +aliases: [/functions/i18n] +--- + +The `lang.Translate` function returns the value associated with given key as defined in the translation table for the current language. + +If the key is not found in the translation table for the current language, the `lang.Translate` function falls back to the translation table for the [`defaultContentLanguage`]. + +If the key is not found in the translation table for the `defaultContentLanguage`, the `lang.Translate` function returns an empty string. + +[`defaultContentLanguage`]: /getting-started/configuration/#defaultcontentlanguage + +{{% note %}} +To list missing and fallback translations, use the `--printI18nWarnings` flag when building your site. + +To render placeholders for missing and fallback translations, set +[`enableMissingTranslationPlaceholders`] to `true` in your site configuration. + +[`enableMissingTranslationPlaceholders`]: /getting-started/configuration/#enablemissingtranslationplaceholders +{{% /note %}} + +Let's say your multilingual site supports two languages, English and Polish. Create a translation table for each language in the `i18n` directory. + +```text +i18n/ +├── en.toml +└── pl.toml +``` + +The translation tables can contain both: + +- Simple translations +- Translations with pluralization + +The Unicode [CLDR Plural Rules chart] describes the pluralization categories for each language. + +[CLDR Plural Rules chart]: https://www.unicode.org/cldr/charts/43/supplemental/language_plural_rules.html + +The English translation table: + +{{< code-toggle file=i18n/en >}} +privacy = 'privacy' +security = 'security' + +[day] +one = 'day' +other = 'days' + +[day_with_count] +one = '{{ . }} day' +other = '{{ . }} days' +{{< /code-toggle >}} + +The Polish translation table: + +{{< code-toggle file=i18n/pl >}} +privacy = 'prywatność' +security = 'bezpieczeństwo' + +[day] +one = 'miesiąc' +few = 'miesiące' +many = 'miesięcy' +other = 'miesiąca' + +[day_with_count] +one = '{{ . }} miesiąc' +few = '{{ . }} miesiące' +many = '{{ . }} miesięcy' +other = '{{ . }} miesiąca' +{{< /code-toggle >}} + +{{% note %}} +The examples below use the `T` alias for brevity. +{{% /note %}} + +When viewing the English language site: + +```go-html-template +{{ T "privacy" }} → privacy +{{ T "security" }} → security + +{{ T "day" 0 }} → days +{{ T "day" 1 }} → day +{{ T "day" 2 }} → days +{{ T "day" 5 }} → days + +{{ T "day_with_count" 0 }} → 0 days +{{ T "day_with_count" 1 }} → 1 day +{{ T "day_with_count" 2 }} → 2 days +{{ T "day_with_count" 5 }} → 5 days +```` + +When viewing the Polish language site: + +```go-html-template +{{ T "privacy" }} → prywatność +{{ T "security" }} → bezpieczeństwo + +{{ T "day" 0 }} → miesięcy +{{ T "day" 1 }} → miesiąc +{{ T "day" 2 }} → miesiące +{{ T "day" 5 }} → miesięcy + +{{ T "day_with_count" 0 }} → 0 miesięcy +{{ T "day_with_count" 1 }} → 1 miesiąc +{{ T "day_with_count" 2 }} → 2 miesiące +{{ T "day_with_count" 5 }} → 5 miesięcy +``` + +In the pluralization examples above, we passed an integer in context (the second argument). You can also pass a map in context, providing a `count` key to control pluralization. + +Translation table: + +{{< code-toggle file=i18n/en >}} +[age] +one = '{{ .name }} is {{ .count }} year old.' +other = '{{ .name }} is {{ .count }} years old.' +{{< /code-toggle >}} + +Template code: + +```go-html-template +{{ T "age" (dict "name" "Will" "count" 1) }} → Will is 1 year old. +{{ T "age" (dict "name" "John" "count" 3) }} → John is 3 years old. +``` diff --git a/docs/content/en/functions/lang/_index.md b/docs/content/en/functions/lang/_index.md new file mode 100644 index 000000000..934d97bff --- /dev/null +++ b/docs/content/en/functions/lang/_index.md @@ -0,0 +1,12 @@ +--- +title: Lang functions +linkTitle: lang +description: Template functions to adapt your site to meet language and regional requirements. +categories: [] +keywords: [] +menu: + docs: + parent: functions +--- + +Use these functions to adapt your site to meet language and regional requirements. diff --git a/docs/content/en/functions/math/Abs.md b/docs/content/en/functions/math/Abs.md new file mode 100644 index 000000000..682b8426f --- /dev/null +++ b/docs/content/en/functions/math/Abs.md @@ -0,0 +1,17 @@ +--- +title: math.Abs +description: Returns the absolute value of the given number. +categories: [] +keywords: [] +action: + aliases: [] + related: [] + returnType: float64 + signatures: [math.Abs VALUE] +--- + +{{< new-in 0.112.0 >}} + +```go-html-template +{{ math.Abs -2.1 }} → 2.1 +``` diff --git a/docs/content/en/functions/math/Add.md b/docs/content/en/functions/math/Add.md new file mode 100644 index 000000000..afa8d48aa --- /dev/null +++ b/docs/content/en/functions/math/Add.md @@ -0,0 +1,24 @@ +--- +title: math.Add +description: Adds two or more numbers. +categories: [] +keywords: [] +action: + aliases: [add] + related: + - functions/math/Div + - functions/math/Mul + - functions/math/Product + - functions/math/Sub + - functions/math/Sum + returnType: any + signatures: [math.Add VALUE VALUE...] +--- + +If one of the numbers is a [`float`], the result is a `float`. + +```go-html-template +{{ add 12 3 2 }} → 17 +``` + +[`float`]: /getting-started/glossary/#float diff --git a/docs/content/en/functions/math/Ceil.md b/docs/content/en/functions/math/Ceil.md new file mode 100644 index 000000000..9f74991c3 --- /dev/null +++ b/docs/content/en/functions/math/Ceil.md @@ -0,0 +1,17 @@ +--- +title: math.Ceil +description: Returns the least integer value greater than or equal to the given number. +categories: [] +keywords: [] +action: + aliases: [] + related: + - functions/math/Floor + - functions/math/Round + returnType: float64 + signatures: [math.Ceil VALUE] +--- + +```go-html-template +{{ math.Ceil 2.1 }} → 3 +``` diff --git a/docs/content/en/functions/math/Counter.md b/docs/content/en/functions/math/Counter.md new file mode 100644 index 000000000..7f53bdd0c --- /dev/null +++ b/docs/content/en/functions/math/Counter.md @@ -0,0 +1,35 @@ +--- +title: math.Counter +description: Increments and returns a global counter. +categories: [] +keywords: [] +action: + aliases: [] + related: [] + returnType: uint64 + signatures: [math.Counter] +--- + +The counter is global for both monolingual and multilingual sites, and its initial value for each build is 1. + +```go-html-template +{{ warnf "single.html called %d times" math.Counter }} +``` + +```sh +WARN single.html called 1 times +WARN single.html called 2 times +WARN single.html called 3 times +``` + +Use this function to: + +- Create unique warnings as shown above; the [`warnf`] function suppresses duplicate messages +- Create unique target paths for the `resources.FromString` function where the target path is also the cache key + +[`warnf`]: /functions/fmt/warnf +[`resources.FromString`]: /functions/resources/fromstring + +{{% note %}} +Due to concurrency, the value returned in a given template for a given page will vary from one build to the next. You cannot use this function to assign a static id to each page. +{{% /note %}} diff --git a/docs/content/en/functions/math/Div.md b/docs/content/en/functions/math/Div.md new file mode 100644 index 000000000..530474a78 --- /dev/null +++ b/docs/content/en/functions/math/Div.md @@ -0,0 +1,24 @@ +--- +title: math.Div +description: Divides the first number by one or more numbers. +categories: [] +keywords: [] +action: + aliases: [div] + related: + - functions/math/Add + - functions/math/Mul + - functions/math/Product + - functions/math/Sub + - functions/math/Sum + returnType: any + signatures: [math.Div VALUE VALUE...] +--- + +If one of the numbers is a [`float`], the result is a `float`. + +```go-html-template +{{ div 12 3 2 }} → 2 +``` + +[`float`]: /getting-started/glossary/#float diff --git a/docs/content/en/functions/math/Floor.md b/docs/content/en/functions/math/Floor.md new file mode 100644 index 000000000..10ad758b6 --- /dev/null +++ b/docs/content/en/functions/math/Floor.md @@ -0,0 +1,17 @@ +--- +title: math.Floor +description: Returns the greatest integer value less than or equal to the given number. +categories: [] +keywords: [] +action: + aliases: [] + related: + - functions/math/Ceil + - functions/math/Round + returnType: float64 + signatures: [math.Floor VALUE] +--- + +```go-html-template +{{ math.Floor 1.9 }} → 1 +``` diff --git a/docs/content/en/functions/math/Log.md b/docs/content/en/functions/math/Log.md new file mode 100644 index 000000000..84edcb288 --- /dev/null +++ b/docs/content/en/functions/math/Log.md @@ -0,0 +1,15 @@ +--- +title: math.Log +description: Returns the natural logarithm of the given number. +categories: [] +keywords: [] +action: + aliases: [] + related: [] + returnType: float64 + signatures: [math.Log VALUE] +--- + +```go-html-template +{{ math.Log 42 }} → 3.737 +``` diff --git a/docs/content/en/functions/math/Max.md b/docs/content/en/functions/math/Max.md new file mode 100644 index 000000000..9beff5630 --- /dev/null +++ b/docs/content/en/functions/math/Max.md @@ -0,0 +1,16 @@ +--- +title: math.Max +description: Returns the greater of all numbers. Accepts scalars, slices, or both. +categories: [] +keywords: [] +action: + aliases: [] + related: + - functions/math/Min + returnType: float64 + signatures: [math.Max VALUE...] +--- + +```go-html-template +{{ math.Max 1 (slice 2 3) 4 }} → 4 +``` diff --git a/docs/content/en/functions/math/Min.md b/docs/content/en/functions/math/Min.md new file mode 100644 index 000000000..79e464c74 --- /dev/null +++ b/docs/content/en/functions/math/Min.md @@ -0,0 +1,16 @@ +--- +title: math.Min +description: Returns the smaller of all numbers. Accepts scalars, slices, or both. +categories: [] +keywords: [] +action: + aliases: [] + related: + - functions/math/Max + returnType: float64 + signatures: [math.Min VALUE...] +--- + +```go-html-template +{{ math.Min 1 (slice 2 3) 4 }} → 1 +``` diff --git a/docs/content/en/functions/math/Mod.md b/docs/content/en/functions/math/Mod.md new file mode 100644 index 000000000..d312730c5 --- /dev/null +++ b/docs/content/en/functions/math/Mod.md @@ -0,0 +1,16 @@ +--- +title: math.Mod +description: Returns the modulus of two integers. +categories: [] +keywords: [] +action: + aliases: [mod] + related: + - functions/math/ModBool + returnType: int64 + signatures: [math.Mod VALUE1 VALUE2] +--- + +```go-html-template +{{ mod 15 3 }} → 0 +``` diff --git a/docs/content/en/functions/math/ModBool.md b/docs/content/en/functions/math/ModBool.md new file mode 100644 index 000000000..d915ff614 --- /dev/null +++ b/docs/content/en/functions/math/ModBool.md @@ -0,0 +1,16 @@ +--- +title: math.ModBool +description: Reports whether the modulus of two integers equals 0. +categories: [] +keywords: [] +action: + aliases: [modBool] + related: + - functions/math/Mod + returnType: bool + signatures: [math.ModBool VALUE1 VALUE2] +--- + +```go-html-template +{{ modBool 15 3 }} → true +``` diff --git a/docs/content/en/functions/math/Mul.md b/docs/content/en/functions/math/Mul.md new file mode 100644 index 000000000..6824599e3 --- /dev/null +++ b/docs/content/en/functions/math/Mul.md @@ -0,0 +1,24 @@ +--- +title: math.Mul +description: Multiplies two or more numbers. +categories: [] +keywords: [] +action: + aliases: [mul] + related: + - functions/math/Add + - functions/math/Div + - functions/math/Product + - functions/math/Sub + - functions/math/Sum + returnType: any + signatures: [math.Mul VALUE VALUE...] +--- + +If one of the numbers is a [`float`], the result is a `float`. + +```go-html-template +{{ mul 12 3 2 }} → 72 +``` + +[`float`]: /getting-started/glossary/#float diff --git a/docs/content/en/functions/math/Pow.md b/docs/content/en/functions/math/Pow.md new file mode 100644 index 000000000..5a1482d73 --- /dev/null +++ b/docs/content/en/functions/math/Pow.md @@ -0,0 +1,16 @@ +--- +title: math.Pow +description: Returns the first number raised to the power of the second number. +categories: [] +keywords: [] +action: + aliases: [pow] + related: + - functions/math/Sqrt + returnType: float64 + signatures: [math.Pow VALUE1 VALUE2] +--- + +```go-html-template +{{ math.Pow 2 3 }} → 8 +``` diff --git a/docs/content/en/functions/math/Product.md b/docs/content/en/functions/math/Product.md new file mode 100644 index 000000000..d94df4f1b --- /dev/null +++ b/docs/content/en/functions/math/Product.md @@ -0,0 +1,22 @@ +--- +title: math.Product +description: Returns the product of all numbers. Accepts scalars, slices, or both. +categories: [] +keywords: [] +action: + aliases: [] + related: + - functions/math/Add + - functions/math/Div + - functions/math/Mul + - functions/math/Sub + - functions/math/Sum + returnType: float64 + signatures: [math.Product VALUE...] +--- + +{{< new-in 0.114.0 >}} + +```go-html-template +{{ math.Product 1 (slice 2 3) 4 }} → 24 +``` diff --git a/docs/content/en/functions/math/Rand.md b/docs/content/en/functions/math/Rand.md new file mode 100644 index 000000000..4f71cfcdf --- /dev/null +++ b/docs/content/en/functions/math/Rand.md @@ -0,0 +1,46 @@ +--- +title: math.Rand +description: Returns a pseudo-random number in the half-open interval [0.0, 1.0). +categories: [] +keywords: [] +action: + aliases: [] + related: [] + returnType: float64 + signatures: [math.Rand] +--- + +{{< new-in 0.121.2 >}} + +The `math.Rand` function returns a pseudo-random number in the [half-open interval] [0.0, 1.0). + +```go-html-template +{{ math.Rand }} → 0.6312770459590062 +``` + +To generate a random integer in the [closed interval] [0, 5]: + +```go-html-template +{{ math.Rand | mul 6 | math.Floor }} +``` + +To generate a random integer in the closed interval [1, 6]: + +```go-html-template +{{ math.Rand | mul 6 | math.Ceil }} +``` + +To generate a random float, with one digit after the decimal point, in the closed interval [0, 4.9]: + +```go-html-template +{{ div (math.Rand | mul 50 | math.Floor) 10 }} +``` + +To generate a random float, with one digit after the decimal point, in the closed interval [0.1, 5.0]: + +```go-html-template +{{ div (math.Rand | mul 50 | math.Ceil) 10 }} +``` + +[closed interval]: /getting-started/glossary/#interval +[half-open interval]: /getting-started/glossary/#interval diff --git a/docs/content/en/functions/math/Round.md b/docs/content/en/functions/math/Round.md new file mode 100644 index 000000000..e0678eb78 --- /dev/null +++ b/docs/content/en/functions/math/Round.md @@ -0,0 +1,17 @@ +--- +title: math.Round +description: Returns the nearest integer, rounding half away from zero. +categories: [] +keywords: [] +action: + aliases: [] + related: + - functions/math/Ceil + - functions/math/Floor + returnType: float64 + signatures: [math.Round VALUE] +--- + +```go-html-template +{{ math.Round 1.5 }} → 2 +``` diff --git a/docs/content/en/functions/math/Sqrt.md b/docs/content/en/functions/math/Sqrt.md new file mode 100644 index 000000000..436cb31c3 --- /dev/null +++ b/docs/content/en/functions/math/Sqrt.md @@ -0,0 +1,16 @@ +--- +title: math.Sqrt +description: Returns the square root of the given number. +categories: [] +keywords: [] +action: + aliases: [] + related: + - functions/math/Pow + returnType: float64 + signatures: [math.Sqrt VALUE] +--- + +```go-html-template +{{ math.Sqrt 81 }} → 9 +``` diff --git a/docs/content/en/functions/math/Sub.md b/docs/content/en/functions/math/Sub.md new file mode 100644 index 000000000..a89d0e69d --- /dev/null +++ b/docs/content/en/functions/math/Sub.md @@ -0,0 +1,24 @@ +--- +title: math.Sub +description: Subtracts one or more numbers from the first number. +categories: [] +keywords: [] +action: + aliases: [sub] + related: + - functions/math/Add + - functions/math/Div + - functions/math/Mul + - functions/math/Product + - functions/math/Sum + returnType: any + signatures: [math.Sub VALUE VALUE...] +--- + +If one of the numbers is a [`float`], the result is a `float`. + +```go-html-template +{{ sub 12 3 2 }} → 7 +``` + +[`float`]: /getting-started/glossary/#float diff --git a/docs/content/en/functions/math/Sum.md b/docs/content/en/functions/math/Sum.md new file mode 100644 index 000000000..eba03f72d --- /dev/null +++ b/docs/content/en/functions/math/Sum.md @@ -0,0 +1,21 @@ +--- +title: math.Sum +description: Returns the sum of all numbers. Accepts scalars, slices, or both. +categories: [] +action: + aliases: [] + related: + - functions/math/Add + - functions/math/Div + - functions/math/Mul + - functions/math/Product + - functions/math/Sub + returnType: float64 + signatures: [math.Sum VALUE...] +--- + +{{< new-in 0.114.0 >}} + +```go-html-template +{{ math.Sum 1 (slice 2 3) 4 }} → 10 +``` diff --git a/docs/content/en/functions/math/_index.md b/docs/content/en/functions/math/_index.md new file mode 100644 index 000000000..76713bc99 --- /dev/null +++ b/docs/content/en/functions/math/_index.md @@ -0,0 +1,11 @@ +--- +title: Math functions +linkTitle: math +description: Template functions to perform mathematical operations. +categories: [] +menu: + docs: + parent: functions +--- + +Use these functions to perform mathematical operations. diff --git a/docs/content/en/functions/openapi3/Unmarshal.md b/docs/content/en/functions/openapi3/Unmarshal.md new file mode 100644 index 000000000..433337aef --- /dev/null +++ b/docs/content/en/functions/openapi3/Unmarshal.md @@ -0,0 +1,76 @@ +--- +title: openapi3.Unmarshal +description: Unmarshals the given resource into an OpenAPI 3 document. +categories: [] +keywords: [] +action: + aliases: [] + related: [] + returnType: openapi3.OpenAPIDocument + signatures: ['openapi3.Unmarshal RESOURCE'] +--- + +Use the `openapi3.Unmarshal` function with [global], [page], or [remote] resources. + +[global]: /getting-started/glossary/#global-resource +[page]: /getting-started/glossary/#page-resource +[remote]: /getting-started/glossary/#remote-resource +[OpenAPI]: https://www.openapis.org/ + +For example, to work with a remote [OpenAPI] definition: + +```go-html-template +{{ $url := "https://raw.githubusercontent.com/OAI/OpenAPI-Specification/main/examples/v3.0/petstore.json" }} +{{ $api := "" }} +{{ with resources.GetRemote $url }} + {{ with .Err }} + {{ errorf "%s" . }} + {{ else }} + {{ $api = . | openapi3.Unmarshal }} + {{ end }} +{{ else }} + {{ errorf "Unable to get remote resource %q" $url }} +{{ end }} +``` + +To inspect the data structure: + +```go-html-template +<pre>{{ debug.Dump $api }}</pre> +``` + +To list the GET and POST operations for each of the API paths: + +```go-html-template +{{ range $path, $details := $api.Paths }} + <p>{{ $path }}</p> + <dl> + {{ with $details.Get }} + <dt>GET</dt> + <dd>{{ .Summary }}</dd> + {{ end }} + {{ with $details.Post }} + <dt>POST</dt> + <dd>{{ .Summary }}</dd> + {{ end }} + </dl> +{{ end }} +``` + +Hugo renders this to: + + +```html +<p>/pets</p> +<dl> + <dt>GET</dt> + <dd>List all pets</dd> + <dt>POST</dt> + <dd>Create a pet</dd> +</dl> +<p>/pets/{petId}</p> +<dl> + <dt>GET</dt> + <dd>Info for a specific pet</dd> +</dl> +``` diff --git a/docs/content/en/functions/openapi3/_index.md b/docs/content/en/functions/openapi3/_index.md new file mode 100644 index 000000000..9b6aa9584 --- /dev/null +++ b/docs/content/en/functions/openapi3/_index.md @@ -0,0 +1,12 @@ +--- +title: OpenAPI functions +linkTitle: openapi3 +description: Template functions to work with OpenAPI 3 definitions. +categories: [] +keywords: [] +menu: + docs: + parent: functions +--- + +Use these functions to work with OpenAPI 3 definitions. diff --git a/docs/content/en/functions/os/FileExists.md b/docs/content/en/functions/os/FileExists.md new file mode 100644 index 000000000..b8104a066 --- /dev/null +++ b/docs/content/en/functions/os/FileExists.md @@ -0,0 +1,41 @@ +--- +title: os.FileExists +description: Reports whether the file or directory exists. +categories: [] +keywords: [] +action: + aliases: [fileExists] + related: + - functions/os/Getenv + - functions/os/ReadDir + - functions/os/ReadFile + - functions/os/Stat + returnType: bool + signatures: [os.FileExists PATH] +aliases: [/functions/fileexists] +--- + +The `os.FileExists` function attempts to resolve the path relative to the root of your project directory. If a matching file or directory is not found, it will attempt to resolve the path relative to the [`contentDir`](/getting-started/configuration#contentdir). A leading path separator (`/`) is optional. + +With this directory structure: + +```text +content/ +├── about.md +├── contact.md +└── news/ + ├── article-1.md + └── article-2.md +``` + +The function returns these values: + +```go-html-template +{{ fileExists "content" }} → true +{{ fileExists "content/news" }} → true +{{ fileExists "content/news/article-1" }} → false +{{ fileExists "content/news/article-1.md" }} → true +{{ fileExists "news" }} → true +{{ fileExists "news/article-1" }} → false +{{ fileExists "news/article-1.md" }} → true +``` diff --git a/docs/content/en/functions/os/Getenv.md b/docs/content/en/functions/os/Getenv.md new file mode 100644 index 000000000..084d498ce --- /dev/null +++ b/docs/content/en/functions/os/Getenv.md @@ -0,0 +1,61 @@ +--- +title: os.Getenv +description: Returns the value of an environment variable, or an empty string if the environment variable is not set. +categories: [] +keywords: [] +action: + aliases: [getenv] + related: + - functions/os/FileExists + - functions/os/ReadDir + - functions/os/ReadFile + - functions/os/Stat + returnType: string + signatures: [os.Getenv VARIABLE] +aliases: [/functions/getenv] +toc: true +--- + +## Security + +By default, when using the `os.Getenv` function Hugo allows access to: + +- The `CI` environment variable +- Any environment variable beginning with `HUGO_` + +To access other environment variables, adjust your site configuration. For example, to allow access to the `HOME` and `USER` environment variables: + +{{< code-toggle file=hugo >}} +[security.funcs] +getenv = ['^HUGO_', '^CI$', '^USER$', '^HOME$'] +{{< /code-toggle >}} + +Read more about Hugo's [security policy]. + +[security policy]: /about/security-model/#security-policy + +## Examples + +```go-html-template +{{ getenv "HOME" }} → /home/victor +{{ getenv "USER" }} → victor +``` + +You can pass values when building your site: + +```sh +MY_VAR1=foo MY_VAR2=bar hugo + +OR + +export MY_VAR1=foo +export MY_VAR2=bar +hugo +``` + +And then retrieve the values within a template: + +```go-html-template +{{ getenv "MY_VAR1" }} → foo +{{ getenv "MY_VAR2" }} → bar +``` diff --git a/docs/content/en/functions/os/ReadDir.md b/docs/content/en/functions/os/ReadDir.md new file mode 100644 index 000000000..63af850b7 --- /dev/null +++ b/docs/content/en/functions/os/ReadDir.md @@ -0,0 +1,51 @@ +--- +title: os.ReadDir +description: Returns an array of FileInfo structures sorted by file name, one element for each directory entry. +categories: [] +keywords: [] +action: + aliases: [readDir] + related: + - functions/os/FileExists + - functions/os/Getenv + - functions/os/ReadFile + - functions/os/Stat + returnType: os.FileInfo + signatures: [os.ReadDir PATH] +aliases: [/functions/readdir] +--- + +The `os.ReadDir` function resolves the path relative to the root of your project directory. A leading path separator (`/`) is optional. + +With this directory structure: + +```text +content/ +├── about.md +├── contact.md +└── news/ + ├── article-1.md + └── article-2.md +``` + +This template code: + +```go-html-template +{{ range readDir "content" }} + {{ .Name }} → {{ .IsDir }} +{{ end }} +``` + +Produces: + +```html +about.md → false +contact.md → false +news → true +``` + +Note that `os.ReadDir` is not recursive. + +Details of the `FileInfo` structure are available in the [Go documentation](https://pkg.go.dev/io/fs#FileInfo). + +For more information on using `readDir` and `readFile` in your templates, see [Local File Templates](/templates/files). diff --git a/docs/content/en/functions/os/ReadFile.md b/docs/content/en/functions/os/ReadFile.md new file mode 100644 index 000000000..654e300ac --- /dev/null +++ b/docs/content/en/functions/os/ReadFile.md @@ -0,0 +1,40 @@ +--- +title: os.ReadFile +description: Returns the contents of a file. +categories: [] +keywords: [] +action: + aliases: [readFile] + related: + - functions/os/FileExists + - functions/os/Getenv + - functions/os/ReadDir + - functions/os/Stat + returnType: string + signatures: [os.ReadFile PATH] +aliases: [/functions/readfile] +--- + +The `os.ReadFile` function attempts to resolve the path relative to the root of your project directory. If a matching file is not found, it will attempt to resolve the path relative to the [`contentDir`](/getting-started/configuration#contentdir). A leading path separator (`/`) is optional. + +With a file named README.md in the root of your project directory: + +```text +This is **bold** text. +``` + +This template code: + +```go-html-template +{{ readFile "README.md" }} +``` + +Produces: + +```html +This is **bold** text. +``` + +Note that `os.ReadFile` returns raw (uninterpreted) content. + +For more information on using `readDir` and `readFile` in your templates, see [Local File Templates](/templates/files). diff --git a/docs/content/en/functions/os/Stat.md b/docs/content/en/functions/os/Stat.md new file mode 100644 index 000000000..6b6f668de --- /dev/null +++ b/docs/content/en/functions/os/Stat.md @@ -0,0 +1,31 @@ +--- +title: os.Stat +description: Returns a FileInfo structure describing a file or directory. +categories: [] +keywords: [] +action: + aliases: [] + related: + - functions/os/FileExists + - functions/os/Getenv + - functions/os/ReadDir + - functions/os/ReadFile + returnType: os.FileInfo + signatures: [os.Stat PATH] +aliases: [/functions/os.stat] +--- + +The `os.Stat` function attempts to resolve the path relative to the root of your project directory. If a matching file or directory is not found, it will attempt to resolve the path relative to the [`contentDir`](/getting-started/configuration#contentdir). A leading path separator (`/`) is optional. + +```go-html-template +{{ $f := os.Stat "README.md" }} +{{ $f.IsDir }} → false (bool) +{{ $f.ModTime }} → 2021-11-25 10:06:49.315429236 -0800 PST (time.Time) +{{ $f.Name }} → README.md (string) +{{ $f.Size }} → 241 (int64) + +{{ $d := os.Stat "content" }} +{{ $d.IsDir }} → true (bool) +``` + +Details of the `FileInfo` structure are available in the [Go documentation](https://pkg.go.dev/io/fs#FileInfo). diff --git a/docs/content/en/functions/os/_index.md b/docs/content/en/functions/os/_index.md new file mode 100644 index 000000000..c080d0092 --- /dev/null +++ b/docs/content/en/functions/os/_index.md @@ -0,0 +1,12 @@ +--- +title: OS functions +linkTitle: os +description: Template functions to interact with the operating system. +categories: [] +keywords: [] +menu: + docs: + parent: functions +--- + +Use these functions to interact with the operating system. diff --git a/docs/content/en/functions/partials/Include.md b/docs/content/en/functions/partials/Include.md new file mode 100644 index 000000000..e08b32fd1 --- /dev/null +++ b/docs/content/en/functions/partials/Include.md @@ -0,0 +1,85 @@ +--- +title: partials.Include +description: Executes the given partial template, optionally passing context. If the partial template contains a return statement, returns the given value, else returns the rendered output. +categories: [] +keywords: [] +action: + aliases: [partial] + related: + - functions/go-template/return + - functions/partials/IncludeCached + - functions/go-template/template + - methods/page/Render + returnType: any + signatures: ['partials.Include NAME [CONTEXT]'] +aliases: [/functions/partial] +--- + +Without a [`return`] statement, the `partial` function returns a string of type `template.HTML`. With a `return` statement, the `partial` function can return any data type. + +[`return`]: /functions/go-template/return + +In this example we have three partial templates: + +```text +layouts/ +└── partials/ + ├── average.html + ├── breadcrumbs.html + └── footer.html +``` + +The "average" partial returns the average of one or more numbers. We pass the numbers in context: + +```go-html-template +{{ $numbers := slice 1 6 7 42 }} +{{ $average := partial "average.html" $numbers }} +``` + +The "breadcrumbs" partial renders [breadcrumb navigation], and needs to receive the current page in context: + +```go-html-template +{{ partial "breadcrumbs.html" . }} +``` + +The "footer" partial renders the site footer. In this contrived example, the footer does not need access to the current page, so we can omit context: + +```go-html-template +{{ partial "breadcrumbs.html" }} +``` + +You can pass anything in context: a page, a page collection, a scalar value, a slice, or a map. For example: + +```go-html-template +{{ $student := dict + "name" "John Doe" + "major" "Finance" + "gpa" 4.0 +}} +{{ partial "render-student-info.html" $student }} +``` + +Then, within the partial template: + +```go-html-template +<p>{{ .name }} is majoring in {{ .major }}. Their grade point average is {{ .gpa }}.</p> +``` + +To return a value from a partial template, it must contain only one `return` statement, placed at the end of the template: + +```go-html-template +{{ $result := "" }} +{{ if math.ModBool . 2 }} + {{ $result = "even" }} +{{ else }} + {{ $result = "odd" }} +{{ end }} +{{ return $result }} +``` + +See [details][`return`]. + +[`return`]: /functions/go-template/return + +[breadcrumb navigation]: /content-management/sections/#ancestors-and-descendants +[details]: /functions/go-template/return diff --git a/docs/content/en/functions/partials/IncludeCached.md b/docs/content/en/functions/partials/IncludeCached.md new file mode 100644 index 000000000..66ef4a6ac --- /dev/null +++ b/docs/content/en/functions/partials/IncludeCached.md @@ -0,0 +1,65 @@ +--- +title: partials.IncludeCached +description: Executes the given template and caches the result, optionally passing context. If the partial template contains a return statement, returns the given value, else returns the rendered output. +categories: [] +keywords: [] +action: + aliases: [partialCached] + related: + - functions/go-template/return + - functions/partials/Include + - functions/go-template/template + - methods/page/Render + returnType: any + signatures: ['partials.IncludeCached LAYOUT CONTEXT [VARIANT...]'] +signatures: + - partials.IncludeCached NAME CONTEXT [VARIANT...] + - partialCached NAME CONTEXT [VARIANT...] +aliases: [/functions/partialcached] +--- + +Without a [`return`] statement, the `partialCached` function returns a string of type `template.HTML`. With a `return` statement, the `partialCached` function can return any data type. + +The `partialCached` 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. + +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. +{{% /note %}} + +Here is the simplest usage: + +```go-html-template +{{ partialCached "footer.html" . }} +``` + +Pass additional arguments 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, use a variant based on section so that the partial is only rendered once per section: + +{{< code file=partial-cached-example.html >}} +{{ partialCached "footer.html" . .Section }} +{{< /code >}} + +Pass additional arguments, of any data type, as needed to create unique variants: + +```go-html-template +{{ partialCached "footer.html" . .Params.country .Params.province }} +``` + +The variant arguments are not available to the underlying partial template; they are only used to create unique cache keys. + +To return a value from a partial template, it must contain only one `return` statement, placed at the end of the template: + +```go-html-template +{{ $result := "" }} +{{ if math.ModBool . 2 }} + {{ $result = "even" }} +{{ else }} + {{ $result = "odd" }} +{{ end }} +{{ return $result }} +``` + +See [details][`return`]. + +[`return`]: /functions/go-template/return diff --git a/docs/content/en/functions/partials/_index.md b/docs/content/en/functions/partials/_index.md new file mode 100644 index 000000000..0a7d4d6d0 --- /dev/null +++ b/docs/content/en/functions/partials/_index.md @@ -0,0 +1,12 @@ +--- +title: Partial functions +linkTitle: partials +description: Template functions to call partial templates. +categories: [] +keywords: [] +menu: + docs: + parent: functions +--- + +Use these functions to call partial templates. diff --git a/docs/content/en/functions/path/Base.md b/docs/content/en/functions/path/Base.md new file mode 100644 index 000000000..2071f8bea --- /dev/null +++ b/docs/content/en/functions/path/Base.md @@ -0,0 +1,26 @@ +--- +title: path.Base +description: Replaces path separators with slashes (`/`) and returns the last element of the given path. +categories: [] +keywords: [] +action: + aliases: [] + related: + - functions/path/BaseName + - functions/path/Clean + - functions/path/Dir + - functions/path/Ext + - functions/path/Join + - functions/path/Split + returnType: string + signatures: [path.Base PATH] +aliases: [/functions/path.base] +--- + +```go-html-template +{{ path.Base "a/news.html" }} → news.html +{{ path.Base "news.html" }} → news.html +{{ path.Base "a/b/c" }} → c +{{ path.Base "/x/y/z/" }} → z +{{ path.Base "" }} → . +``` diff --git a/docs/content/en/functions/path/BaseName.md b/docs/content/en/functions/path/BaseName.md new file mode 100644 index 000000000..4c4340a09 --- /dev/null +++ b/docs/content/en/functions/path/BaseName.md @@ -0,0 +1,28 @@ +--- +title: path.BaseName +description: Replaces path separators with slashes (`/`) and returns the last element of the given path, removing the extension if present. +categories: [] +keywords: [] +action: + aliases: [] + related: + - functions/path/Base + - functions/path/Clean + - functions/path/Dir + - functions/path/Ext + - functions/path/Join + - functions/path/Split + returnType: string + signatures: [path.BaseName PATH] +aliases: [/functions/path.basename] +--- + +{{< new-in 0.101.0 >}} + +```go-html-template +{{ path.BaseName "a/news.html" }} → news +{{ path.BaseName "news.html" }} → news +{{ path.BaseName "a/b/c" }} → c +{{ path.BaseName "/x/y/z/" }} → z +{{ path.BaseName "" }} → . +``` diff --git a/docs/content/en/functions/path/Clean.md b/docs/content/en/functions/path/Clean.md new file mode 100644 index 000000000..57a665c03 --- /dev/null +++ b/docs/content/en/functions/path/Clean.md @@ -0,0 +1,33 @@ +--- +title: path.Clean +description: Replaces path separators with slashes (`/`) and returns the shortest path name equivalent to the given path. +categories: [] +keywords: [] +action: + aliases: [] + related: + - functions/path/Base + - functions/path/BaseName + - functions/path/Dir + - functions/path/Ext + - functions/path/Join + - functions/path/Split + returnType: string + signatures: [path.Clean PATH] +aliases: [/functions/path.clean] +--- + +See Go's [`path.Clean`] documentation for details. + +[`path.Clean`]: https://pkg.go.dev/path#Clean + +```go-html-template +{{ path.Clean "foo/bar" }} → foo/bar +{{ path.Clean "/foo/bar" }} → /foo/bar +{{ path.Clean "/foo/bar/" }} → /foo/bar +{{ path.Clean "/foo//bar/" }} → /foo/bar +{{ path.Clean "/foo/./bar/" }} → /foo/bar +{{ path.Clean "/foo/../bar/" }} → /bar +{{ path.Clean "/../foo/../bar/" }} → /bar +{{ path.Clean "" }} → . +``` diff --git a/docs/content/en/functions/path/Dir.md b/docs/content/en/functions/path/Dir.md new file mode 100644 index 000000000..6d5e5c975 --- /dev/null +++ b/docs/content/en/functions/path/Dir.md @@ -0,0 +1,27 @@ +--- +title: path.Dir +description: Replaces path separators with slashes (/) and returns all but the last element of the given path. +categories: [] +keywords: [] +action: + aliases: [] + related: + - functions/path/Base + - functions/path/BaseName + - functions/path/Clean + - functions/path/Ext + - functions/path/Join + - functions/path/Split + returnType: string + signatures: [path.Dir PATH] +aliases: [/functions/path.dir] +--- + +```go-html-template +{{ path.Dir "a/news.html" }} → a +{{ path.Dir "news.html" }} → . +{{ path.Dir "a/b/c" }} → a/b +{{ path.Dir "/a/b/c" }} → /a/b +{{ path.Dir "/a/b/c/" }} → /a/b/c +{{ path.Dir "" }} → . +``` diff --git a/docs/content/en/functions/path/Ext.md b/docs/content/en/functions/path/Ext.md new file mode 100644 index 000000000..f3e47aecd --- /dev/null +++ b/docs/content/en/functions/path/Ext.md @@ -0,0 +1,24 @@ +--- +title: path.Ext +description: Replaces path separators with slashes (`/`) and returns the file name extension of the given path. +categories: [] +keywords: [] +action: + aliases: [] + related: + - functions/path/Base + - functions/path/BaseName + - functions/path/Clean + - functions/path/Dir + - functions/path/Join + - functions/path/Split + returnType: string + signatures: [path.Ext PATH] +aliases: [/functions/path.ext] +--- + +The extension is the suffix beginning at the final dot in the final slash-separated element of path; it is empty if there is no dot. + +```go-html-template +{{ path.Ext "a/b/c/news.html" }} → .html +``` diff --git a/docs/content/en/functions/path/Join.md b/docs/content/en/functions/path/Join.md new file mode 100644 index 000000000..dc701b731 --- /dev/null +++ b/docs/content/en/functions/path/Join.md @@ -0,0 +1,36 @@ +--- +title: path.Join +description: Replaces path separators with slashes (`/`), joins the given path elements into a single path, and returns the shortest path name equivalent to the result. +categories: [] +keywords: [] +action: + aliases: [] + related: + - functions/path/Base + - functions/path/BaseName + - functions/path/Clean + - functions/path/Dir + - functions/path/Ext + - functions/path/Split + - functions/urls/JoinPath + returnType: string + signatures: [path.Join ELEMENT...] +aliases: [/functions/path.join] +--- + +See Go's [`path.Join`] and [`path.Clean`] documentation for details. + +[`path.Clean`]: https://pkg.go.dev/path#Clean +[`path.Join`]: https://pkg.go.dev/path#Join + + +```go-html-template +{{ path.Join "partial" "news.html" }} → partial/news.html +{{ path.Join "partial/" "news.html" }} → partial/news.html +{{ path.Join "foo/bar" "baz" }} → foo/bar/baz +{{ path.Join "foo" "bar" "baz" }} → foo/bar/baz +{{ path.Join "foo" "" "baz" }} → foo/baz +{{ path.Join "foo" "." "baz" }} → foo/baz +{{ path.Join "foo" ".." "baz" }} → baz +{{ path.Join "/.." "foo" ".." "baz" }} → baz +``` diff --git a/docs/content/en/functions/path/Split.md b/docs/content/en/functions/path/Split.md new file mode 100644 index 000000000..329d73954 --- /dev/null +++ b/docs/content/en/functions/path/Split.md @@ -0,0 +1,34 @@ +--- +title: path.Split +description: Replaces path separators with slashes (`/`) and splits the resulting path immediately following the final slash, separating it into a directory and file name component. +categories: [] +keywords: [] +action: + aliases: [] + related: + - functions/path/Base + - functions/path/BaseName + - functions/path/Clean + - functions/path/Dir + - functions/path/Ext + - functions/path/Join + returnType: paths.DirFile + signatures: [path.Split PATH] +aliases: [/functions/path.split] +--- + +If there is no slash in the given path, `path.Split` returns an empty directory, and file set to path. The returned values have the property that path = dir+file. + +```go-html-template +{{ $dirFile := path.Split "a/news.html" }} +{{ $dirFile.Dir }} → a/ +{{ $dirFile.File }} → news.html + +{{ $dirFile := path.Split "news.html" }} +{{ $dirFile.Dir }} → "" (empty string) +{{ $dirFile.File }} → news.html + +{{ $dirFile := path.Split "a/b/c" }} +{{ $dirFile.Dir }} → a/b/ +{{ $dirFile.File }} → c +``` diff --git a/docs/content/en/functions/path/_index.md b/docs/content/en/functions/path/_index.md new file mode 100644 index 000000000..2d7ce8e90 --- /dev/null +++ b/docs/content/en/functions/path/_index.md @@ -0,0 +1,12 @@ +--- +title: Path functions +linkTitle: path +description: Template functions to work with file paths. +categories: [] +keywords: [] +menu: + docs: + parent: functions +--- + +Use these functions to work with file paths. diff --git a/docs/content/en/functions/reflect/IsMap.md b/docs/content/en/functions/reflect/IsMap.md new file mode 100644 index 000000000..ada5a221d --- /dev/null +++ b/docs/content/en/functions/reflect/IsMap.md @@ -0,0 +1,18 @@ +--- +title: reflect.IsMap +description: Reports whether the given value is a map. +categories: [] +keywords: [] +action: + aliases: [] + related: + - functions/reflect/IsSlice + returnType: bool + signatures: [reflect.IsMap INPUT] +aliases: [/functions/reflect.ismap] +--- + +```go-html-template +{{ reflect.IsMap (dict "key" "value") }} → true +{{ reflect.IsMap "yo" }} → false +``` diff --git a/docs/content/en/functions/reflect/IsSlice.md b/docs/content/en/functions/reflect/IsSlice.md new file mode 100644 index 000000000..cda24a5e1 --- /dev/null +++ b/docs/content/en/functions/reflect/IsSlice.md @@ -0,0 +1,18 @@ +--- +title: reflect.IsSlice +description: Reports whether the given value is a slice. +categories: [] +keywords: [] +action: + aliases: [] + related: + - functions/reflect/IsMap + returnType: bool + signatures: [reflect.IsSlice INPUT] +aliases: [/functions/reflect.isslice] +--- + +```go-html-template +{{ reflect.IsSlice (slice 1 2 3) }} → true +{{ reflect.IsSlice "yo" }} → false +``` diff --git a/docs/content/en/functions/reflect/_index.md b/docs/content/en/functions/reflect/_index.md new file mode 100644 index 000000000..711908ee2 --- /dev/null +++ b/docs/content/en/functions/reflect/_index.md @@ -0,0 +1,12 @@ +--- +title: Reflect functions +linkTitle: reflect +description: Template functions to determine a value's data type. +categories: [] +keywords: [] +menu: + docs: + parent: functions +--- + +Use these functions to determine a value's data type. diff --git a/docs/content/en/functions/resources/Babel.md b/docs/content/en/functions/resources/Babel.md new file mode 100644 index 000000000..57ddb7d23 --- /dev/null +++ b/docs/content/en/functions/resources/Babel.md @@ -0,0 +1,88 @@ +--- +title: resources.Babel +description: Compiles the given JavaScript resource with Babel. +categories: [] +keywords: [] +action: + aliases: [babel] + related: + - functions/js/Build + - functions/resources/Fingerprint + - functions/resources/Minify + returnType: resource.Resource + signatures: ['resources.Babel [OPTIONS] RESOURCE'] +toc: true +--- + +```go-html-template +{{ with resources.Get "js/main.js" }} + {{ if hugo.IsDevelopment }} + {{ with . | babel }} + <script src="{{ .RelPermalink }}"></script> + {{ end }} + {{ else }} + {{ $opts := dict "minified" true }} + {{ with . | babel $opts | fingerprint }} + <script src="{{ .RelPermalink }}" integrity="{{ .Data.Integrity }}" crossorigin="anonymous"></script> + {{ end }} + {{ end }} +{{ end }} +``` + +## Setup + +Step 1 +: Install [Node.js](https://nodejs.org/en/download) + +Step 2 +: Install the required Node.js packages in the root of your project. + +```sh +npm install --save-dev @babel/core @babel/cli +``` + +Step 3 +: Add the babel executable to Hugo's `security.exec.allow` list in your site configuration: + +{{< code-toggle file=hugo >}} +[security.exec] + allow = ['^(dart-)?sass(-embedded)?$', '^go$', '^npx$', '^postcss$', '^babel$'] +{{< /code-toggle >}} + +## Configuration + +We add the main project's `node_modules` to `NODE_PATH` when running Babel and similar tools. There are some known [issues](https://github.com/babel/babel/issues/5618) with Babel in this area, so if you have a `babel.config.js` living in a Hugo Module (and not in the project itself), we recommend using `require` to load the presets/plugins, e.g.: + +```js +module.exports = { + presets: [ + [ + require("@babel/preset-env"), + { + useBuiltIns: "entry", + corejs: 3, + }, + ], + ], +}; +``` + +## Options + +config +: (`string`) Path to the Babel configuration file. Hugo will, by default, look for a `babel.config.js` in your project. More information on these configuration files can be found here: [babel configuration](https://babeljs.io/docs/en/configuration). + +minified +: (`bool`) Save as many bytes as possible when printing + +noComments +: (`bool`) Write comments to generated output (true by default) + +compact +: (`bool`) Do not include superfluous whitespace characters and line terminators. Defaults to `auto` if not set. + +verbose +: (`bool`) Log everything + +sourceMap +: (`string`) Output `inline` or `external` sourcemap from the babel compile. External sourcemaps will be written to the target with the output file name + ".map". Input sourcemaps can be read from js.Build and node modules and combined into the output sourcemaps. diff --git a/docs/content/en/functions/resources/ByType.md b/docs/content/en/functions/resources/ByType.md new file mode 100644 index 000000000..a5df3befb --- /dev/null +++ b/docs/content/en/functions/resources/ByType.md @@ -0,0 +1,34 @@ +--- +title: resources.ByType +description: Returns a collection of global resources of the given media type, or nil if none found. +categories: [] +keywords: [] +action: + aliases: [] + related: + - functions/resources/Get + - functions/resources/GetMatch + - functions/resources/GetRemote + - functions/resources/Match + - methods/page/Resources + returnType: resource.Resources + signatures: [resources.ByType MEDIATYPE] +--- + +The [media type] is typically one of `image`, `text`, `audio`, `video`, or `application`. + +```go-html-template +{{ range resources.ByType "image" }} + <img src="{{ .RelPermalink }}" width="{{ .Width }}" height="{{ .Height }}" alt=""> +{{ end }} +``` + +{{% note %}} +This function operates on global resources. A global resource is a file within the assets directory, or within any directory mounted to the assets directory. + +For page resources, use the [`Resources.ByType`] method on the Page object. + +[`Resources.ByType`]: /methods/page/resources +{{% /note %}} + +[media type]: https://en.wikipedia.org/wiki/Media_type diff --git a/docs/content/en/functions/resources/Concat.md b/docs/content/en/functions/resources/Concat.md new file mode 100644 index 000000000..809ee83d0 --- /dev/null +++ b/docs/content/en/functions/resources/Concat.md @@ -0,0 +1,26 @@ +--- +title: resources.Concat +description: Returns a concatenated slice of resources. +categories: [] +keywords: [] +action: + aliases: [] + related: [] + returnType: resource.Resource + signatures: ['resources.Concat TARGETPATH [RESOURCE...]'] +--- + +The `resources.Concat` function returns a concatenated slice of resources, caching the result using the target path as its cache key. Each resource must have the same [media type]. + +Hugo publishes the resource to the target path when you call its [`Publish`], [`Permalink`], or [`RelPermalink`] methods. + +[media type]: https://en.wikipedia.org/wiki/Media_type +[`publish`]: /methods/resource/publish +[`permalink`]: /methods/resource/permalink +[`relpermalink`]: /methods/resource/relpermalink + +```go-html-template +{{ $plugins := resources.Get "js/plugins.js" }} +{{ $global := resources.Get "js/global.js" }} +{{ $js := slice $plugins $global | resources.Concat "js/bundle.js" }} +``` diff --git a/docs/content/en/functions/resources/Copy.md b/docs/content/en/functions/resources/Copy.md new file mode 100644 index 000000000..f8e962aee --- /dev/null +++ b/docs/content/en/functions/resources/Copy.md @@ -0,0 +1,32 @@ +--- +title: resources.Copy +description: Copies the given resource to the target path. +categories: [] +action: + aliases: [] + related: [] + returnType: resource.Resource + signatures: [resources.Copy TARGETPATH RESOURCE] +--- + +{{< new-in 0.100.0 >}} + +```go-html-template +{{ with resources.Get "images/a.jpg" }} + {{ with resources.Copy "img/new-image-name.jpg" . }} + <img src="{{ .RelPermalink }}" width="{{ .Width }}" height="{{ .Height }}" alt=""> + {{ end }} +{{ end }} +``` + +The relative URL of the new published resource will be: + +```text +/img/new-image-name.jpg +``` + +The target path must be different than the source path, as shown in the example above. + +{{% note %}} +Use the `resources.Copy` function with global, page, and remote resources. +{{% /note %}} diff --git a/docs/content/en/functions/resources/ExecuteAsTemplate.md b/docs/content/en/functions/resources/ExecuteAsTemplate.md new file mode 100644 index 000000000..5f7e58413 --- /dev/null +++ b/docs/content/en/functions/resources/ExecuteAsTemplate.md @@ -0,0 +1,62 @@ +--- +title: resources.ExecuteAsTemplate +description: Returns a resource created from a Go template, parsed and executed with the given context. +categories: [] +keywords: [] +action: + aliases: [] + related: + - functions/resources/FromString + returnType: resource.Resource + signatures: [resources.ExecuteAsTemplate TARGETPATH CONTEXT RESOURCE] +--- + +The `resources.ExecuteAsTemplate` function returns a resource created from a Go template, parsed and executed with the given context, caching the result using the target path as its cache key. + +Hugo publishes the resource to the target path when you call its [`Publish`], [`Permalink`], or [`RelPermalink`] methods. + +[`publish`]: /methods/resource/publish +[`permalink`]: /methods/resource/permalink +[`relpermalink`]: /methods/resource/relpermalink + +Let's say you have a CSS file that you wish to populate with values from your site configuration: + +{{< code file=assets/css/template.css lang=go-html-template >}} +body { + background-color: {{ site.Params.style.bg_color }}; + color: {{ site.Params.style.text_color }}; +} +{{< /code >}} + +And your site configuration contains: + +{{< code-toggle file=hugo >}} +[params.style] +bg_color = '#fefefe' +text_color = '#222' +{{< /code-toggle >}} + +Place this in your baseof.html template: + +```go-html-template +{{ with resources.Get "css/template.css" }} + {{ with resources.ExecuteAsTemplate "css/main.css" $ . }} + <link rel="stylesheet" href="{{ .RelPermalink }}"> + {{ end }} +{{ end }} +``` + +The example above: + +1. Captures the template as a resource +2. Executes the resource as a template, passing the current page in context +3. Publishes the resource to css/main.css + +The result is: + +{{< code file=public/css/main.css >}} +body { + background-color: #fefefe; + color: #222; +} +{{< /code >}} diff --git a/docs/content/en/functions/resources/Fingerprint.md b/docs/content/en/functions/resources/Fingerprint.md new file mode 100644 index 000000000..685214f96 --- /dev/null +++ b/docs/content/en/functions/resources/Fingerprint.md @@ -0,0 +1,42 @@ +--- +title: resources.Fingerprint +description: Cryptographically hashes the content of the given resource. +categories: [] +keywords: [] +action: + aliases: [fingerprint] + related: + - functions/js/Build + - functions/resources/Babel + - functions/resources/Minify + - functions/resources/PostCSS + - functions/resources/PostProcess + - functions/resources/ToCSS + returnType: resource.Resource + signatures: ['resources.Fingerprint [ALGORITHM] RESOURCE'] +--- + +```go-html-template +{{ with resources.Get "js/main.js" }} + {{ with . | fingerprint "sha256" }} + <script src="{{ .RelPermalink }}" integrity="{{ .Data.Integrity }}" crossorigin="anonymous"></script> + {{ end }} +{{ end }} +``` + +Hugo renders this to something like: + +```html +<script src="/js/main.62e...df1.js" integrity="sha256-Yuh...rfE=" crossorigin="anonymous"></script> +``` + +Although most commonly used with CSS and JavaScript resources, you can use the `resources.Fingerprint` function with any resource type. + +The hash algorithm may be one of `md5`, `sha256` (default), `sha384`, or `sha512`. + +After cryptographically hashing the resource content: + +1. The values returned by the `.Permalink` and `.RelPermalink` methods include the hash sum +2. The resource's `.Data.Integrity` method returns a [Subresource Integrity] (SRI) value consisting of the name of the hash algorithm, one hyphen, and the base64-encoded hash sum + +[Subresource Integrity]: https://developer.mozilla.org/en-US/docs/Web/Security/Subresource_Integrity diff --git a/docs/content/en/functions/resources/FromString.md b/docs/content/en/functions/resources/FromString.md new file mode 100644 index 000000000..d559058c3 --- /dev/null +++ b/docs/content/en/functions/resources/FromString.md @@ -0,0 +1,77 @@ +--- +title: resources.FromString +description: Returns a resource created from a string. +categories: [] +keywords: [] +action: + aliases: [] + related: + - functions/resources/ExecuteAsTemplate + returnType: resource.Resource + signatures: [resources.FromString TARGETPATH STRING] +--- + +The `resources.FromString` function returns a resource created from a string, caching the result using the target path as its cache key. + +Hugo publishes the resource to the target path when you call its [`Publish`], [`Permalink`], or [`RelPermalink`] methods. + +[`publish`]: /methods/resource/publish +[`permalink`]: /methods/resource/permalink +[`relpermalink`]: /methods/resource/relpermalink + +Let's say you need to publish a file named "site.json" in the root of your public directory, containing the build date, the Hugo version used to build the site, and the date that the content was last modified. For example: + +```json +{ + "build_date": "2023-10-03T10:50:40-07:00", + "hugo_version": "0.122.0", + "last_modified": "2023-10-02T15:21:27-07:00" +} +``` + +Place this in your baseof.html template: + +```go-html-template +{{ if .IsHome }} + {{ $rfc3339 := "2006-01-02T15:04:05Z07:00" }} + {{ $m := dict + "hugo_version" hugo.Version + "build_date" (now.Format $rfc3339) + "last_modified" (site.LastChange.Format $rfc3339) + }} + {{ $json := jsonify $m }} + {{ $r := resources.FromString "site.json" $json }} + {{ $r.Publish }} +{{ end }} +``` + +The example above: + +1. Creates a map with the relevant key/value pairs using the [`dict`] function +2. Encodes the map as a JSON string using the [`jsonify`] function +3. Creates a resource from the JSON string using the `resources.FromString` function +4. Publishes the file to the root of the public directory using the resource's `.Publish` method + +Combine `resources.FromString` with [`resources.ExecuteAsTemplate`] if your string contains template actions. Rewriting the example above: + +```go-html-template +{{ if .IsHome }} + {{ $string := ` + {{ $rfc3339 := "2006-01-02T15:04:05Z07:00" }} + {{ $m := dict + "hugo_version" hugo.Version + "build_date" (now.Format $rfc3339) + "last_modified" (site.LastChange.Format $rfc3339) + }} + {{ $json := jsonify $m }} + ` + }} + {{ $r := resources.FromString "" $string }} + {{ $r = $r | resources.ExecuteAsTemplate "site.json" . }} + {{ $r.Publish }} +{{ end }} +``` + +[`dict`]: /functions/collections/dictionary +[`jsonify`]: /functions/encoding/jsonify +[`resources.ExecuteAsTemplate`]: /functions/resources/executeastemplate diff --git a/docs/content/en/functions/resources/Get.md b/docs/content/en/functions/resources/Get.md new file mode 100644 index 000000000..a8b75d52b --- /dev/null +++ b/docs/content/en/functions/resources/Get.md @@ -0,0 +1,30 @@ +--- +title: resources.Get +description: Returns a global resource from the given path, or nil if none found. +categories: [] +keywords: [] +action: + aliases: [] + related: + - functions/resources/ByType + - functions/resources/GetMatch + - functions/resources/GetRemote + - functions/resources/Match + - methods/page/Resources + returnType: resource.Resource + signatures: [resources.Get PATH] +--- + +```go-html-template +{{ with resources.Get "images/a.jpg" }} + <img src="{{ .RelPermalink }}" width="{{ .Width }}" height="{{ .Height }}" alt=""> +{{ end }} +``` + +{{% note %}} +This function operates on global resources. A global resource is a file within the assets directory, or within any directory mounted to the assets directory. + +For page resources, use the [`Resources.Get`] method on the Page object. + +[`Resources.Get`]: /methods/page/resources +{{% /note %}} diff --git a/docs/content/en/functions/resources/GetMatch.md b/docs/content/en/functions/resources/GetMatch.md new file mode 100644 index 000000000..fde26c09d --- /dev/null +++ b/docs/content/en/functions/resources/GetMatch.md @@ -0,0 +1,36 @@ +--- +title: resources.GetMatch +description: Returns the first global resource from paths matching the given glob pattern, or nil if none found. +categories: [] +keywords: [] +action: + aliases: [] + related: + - functions/resources/ByType + - functions/resources/Get + - functions/resources/GetRemote + - functions/resources/Match + - methods/page/Resources + returnType: resource.Resource + signatures: [resources.GetMatch PATTERN] +--- + +```go-html-template +{{ with resources.GetMatch "images/*.jpg" }} + <img src="{{ .RelPermalink }}" width="{{ .Width }}" height="{{ .Height }}" alt=""> +{{ end }} +``` + +{{% note %}} +This function operates on global resources. A global resource is a file within the assets directory, or within any directory mounted to the assets directory. + +For page resources, use the [`Resources.GetMatch`] method on the Page object. + +[`Resources.GetMatch`]: /methods/page/resources +{{% /note %}} + +Hugo determines a match using a case-insensitive [glob pattern]. + +{{% include "functions/_common/glob-patterns.md" %}} + +[glob pattern]: https://github.com/gobwas/glob#example diff --git a/docs/content/en/functions/resources/GetRemote.md b/docs/content/en/functions/resources/GetRemote.md new file mode 100644 index 000000000..0e6b91b64 --- /dev/null +++ b/docs/content/en/functions/resources/GetRemote.md @@ -0,0 +1,177 @@ +--- +title: resources.GetRemote +description: Returns a remote resource from the given URL, or nil if none found. +categories: [] +keywords: [] +action: + aliases: [] + related: + - functions/data/GetCSV + - functions/data/GetJSON + - functions/resources/ByType + - functions/resources/Get + - functions/resources/GetMatch + - functions/resources/Match + - methods/page/Resources + returnType: resource.Resource + signatures: ['resources.GetRemote URL [OPTIONS]'] +toc: true +--- + +```go-html-template +{{ $url := "https://example.org/images/a.jpg" }} +{{ with resources.GetRemote $url }} + {{ with .Err }} + {{ errorf "%s" . }} + {{ else }} + <img src="{{ .RelPermalink }}" width="{{ .Width }}" height="{{ .Height }}" alt=""> + {{ end }} +{{ else }} + {{ errorf "Unable to get remote resource %q" $url }} +{{ end }} +``` + +## Options + +The `resources.GetRemote` function takes an optional map of options. + +```go-html-template +{{ $url := "https://example.org/api" }} +{{ $opts := dict + "headers" (dict "Authorization" "Bearer abcd") +}} +{{ $resource := resources.GetRemote $url $opts }} +``` + +If you need multiple values for the same header key, use a slice: + +```go-html-template +{{ $url := "https://example.org/api" }} +{{ $opts := dict + "headers" (dict "X-List" (slice "a" "b" "c")) +}} +{{ $resource := resources.GetRemote $url $opts }} +``` + +You can also change the request method and set the request body: + +```go-html-template +{{ $url := "https://example.org/api" }} +{{ $opts := dict + "method" "post" + "body" `{"complete": true}` + "headers" (dict "Content-Type" "application/json") +}} +{{ $resource := resources.GetRemote $url $opts }} +``` + +## Remote data + +When retrieving remote data, use the [`transform.Unmarshal`] function to [unmarshal] the response. + +[`transform.Unmarshal`]: /functions/transform/unmarshal +[unmarshal]: /getting-started/glossary/#unmarshal + +```go-html-template +{{ $data := "" }} +{{ $url := "https://example.org/books.json" }} +{{ with resources.GetRemote $url }} + {{ with .Err }} + {{ errorf "%s" . }} + {{ else }} + {{ $data = . | transform.Unmarshal }} + {{ end }} +{{ else }} + {{ errorf "Unable to get remote resource %q" $url }} +{{ end }} +``` + +## Error handling + +The [`Err`] method on a resource returned by the `resources.GetRemote` function returns an error message if the HTTP request fails, else nil. If you do not handle the error yourself, Hugo will fail the build. + +[`Err`]: /methods/resource/err + +```go-html-template +{{ $url := "https://broken-example.org/images/a.jpg" }} +{{ with resources.GetRemote $url }} + {{ with .Err }} + {{ errorf "%s" . }} + {{ else }} + <img src="{{ .RelPermalink }}" width="{{ .Width }}" height="{{ .Height }}" alt=""> + {{ end }} +{{ else }} + {{ errorf "Unable to get remote resource %q" $url }} +{{ end }} +``` + +To log an error as a warning instead of an error: + +```go-html-template +{{ $url := "https://broken-example.org/images/a.jpg" }} +{{ with resources.GetRemote $url }} + {{ with .Err }} + {{ warnf "%s" . }} + {{ else }} + <img src="{{ .RelPermalink }}" width="{{ .Width }}" height="{{ .Height }}" alt=""> + {{ end }} +{{ else }} + {{ errorf "Unable to get remote resource %q" $url }} +{{ end }} +``` + +## HTTP response + +The [`Data`] method on a resource returned by the `resources.GetRemote` function returns information from the HTTP response. + +[`Data`]: /methods/resource/data + +```go-html-template +{{ $url := "https://example.org/images/a.jpg" }} +{{ with resources.GetRemote $url }} + {{ with .Err }} + {{ errorf "%s" . }} + {{ else }} + {{ with .Data }} + {{ .ContentLength }} → 42764 + {{ .ContentType }} → image/jpeg + {{ .Status }} → 200 OK + {{ .StatusCode }} → 200 + {{ .TransferEncoding }} → [] + {{ end }} + {{ end }} +{{ else }} + {{ errorf "Unable to get remote resource %q" $url }} +{{ end }} +``` + +ContentLength +: (`int`) The content length in bytes. + +ContentType +: (`string`) The content type. + +Status +: (`string`) The HTTP status text. + +StatusCode +: (`int`) The HTTP status code. + +TransferEncoding +: (`string`) The transfer encoding. + +## Caching + +Resources returned from `resources.GetRemote` are cached to disk. See [configure file caches] for details. + +By default, Hugo derives the cache key from the arguments passed to the function, the URL and the options map, if any. + +Override the cache key by setting a `key` in the options map. Use this approach to have more control over how often Hugo fetches a remote resource. + +```go-html-template +{{ $url := "https://example.org/images/a.jpg" }} +{{ $cacheKey := print $url (now.Format "2006-01-02") }} +{{ $resource := resource.GetRemote $url (dict "key" $cacheKey) }} +``` + +[configure file caches]: /getting-started/configuration/#configure-file-caches diff --git a/docs/content/en/functions/resources/Match.md b/docs/content/en/functions/resources/Match.md new file mode 100644 index 000000000..0044351f1 --- /dev/null +++ b/docs/content/en/functions/resources/Match.md @@ -0,0 +1,36 @@ +--- +title: resources.Match +description: Returns a collection of global resources from paths matching the given glob pattern, or nil if none found. +categories: [] +keywords: [] +action: + aliases: [] + related: + - functions/resources/ByType + - functions/resources/Get + - functions/resources/GetMatch + - functions/resources/GetRemote + - methods/page/Resources + returnType: resource.Resources + signatures: [resources.Match PATTERN] +--- + +```go-html-template +{{ range resources.Match "images/*.jpg" }} + <img src="{{ .RelPermalink }}" width="{{ .Width }}" height="{{ .Height }}" alt=""> +{{ end }} +``` + +{{% note %}} +This function operates on global resources. A global resource is a file within the assets directory, or within any directory mounted to the assets directory. + +For page resources, use the [`Resources.Match`] method on the Page object. + +[`Resources.Match`]: /methods/page/resources +{{% /note %}} + +Hugo determines a match using a case-insensitive [glob pattern]. + +{{% include "functions/_common/glob-patterns.md" %}} + +[glob pattern]: https://github.com/gobwas/glob#example diff --git a/docs/content/en/functions/resources/Minify.md b/docs/content/en/functions/resources/Minify.md new file mode 100644 index 000000000..9749df20a --- /dev/null +++ b/docs/content/en/functions/resources/Minify.md @@ -0,0 +1,23 @@ +--- +title: resources.Minify +description: Minifies the given resource. +categories: [] +keywords: [] +action: + aliases: [minify] + related: + - functions/js/Build + - functions/resources/Babel + - functions/resources/Fingerprint + - functions/resources/PostCSS + - functions/resources/ToCSS + returnType: resource.Resource + signatures: [resources.Minify RESOURCE] +--- + +```go-html-template +{{ $css := resources.Get "css/main.css" }} +{{ $style := $css | minify }} +``` + +Any CSS, JS, JSON, HTML, SVG, or XML resource can be minified using resources.Minify which takes for argument the resource object. diff --git a/docs/content/en/functions/resources/PostCSS.md b/docs/content/en/functions/resources/PostCSS.md new file mode 100644 index 000000000..a9f9ed3c8 --- /dev/null +++ b/docs/content/en/functions/resources/PostCSS.md @@ -0,0 +1,129 @@ +--- +title: resources.PostCSS +description: Processes the given resource with PostCSS using any PostCSS plugin. +categories: [] +keywords: [] +action: + aliases: [postCSS] + related: + - functions/resources/Fingerprint + - functions/resources/Minify + - functions/resources/PostProcess + - functions/resources/ToCSS + returnType: resource.Resource + signatures: ['resources.PostCSS [OPTIONS] RESOURCE'] +toc: true +--- + +```go-html-template +{{ with resources.Get "css/main.css" | postCSS }} + <link rel="stylesheet" href="{{ .RelPermalink }}"> +{{ end }} +``` + +## Setup + +Follow the steps below to transform CSS using any of the available [PostCSS plugins]. + +Step 1 +: Install [Node.js]. + +Step 2 +: Install the required Node.js packages in the root of your project. For example, to add vendor prefixes to your CSS rules: + +```sh +npm i -D postcss postcss-cli autoprefixer +``` + +Step 3 +: Create a PostCSS configuration file in the root of your project. You must name this file `postcss.config.js` or another [supported file name]. For example: + +```js +module.exports = { + plugins: [ + require('autoprefixer') + ] +}; +``` + +{{% note %}} +{{% include "functions/resources/_common/postcss-windows-warning.md" %}} +{{% /note %}} + +Step 4 +: Place your CSS file within the `assets/css` directory. + +Step 5 +: Process the resource with PostCSS: + +```go-html-template +{{ with resources.Get "css/main.css" | postCSS }} + <link rel="stylesheet" href="{{ .RelPermalink }}"> +{{ end }} +``` + +## Options + +The `resources.PostCSS` method takes an optional map of options. + +config +: (`string`) The directory that contains the PostCSS configuration file. Default is the root of the project directory. + +noMap +: (`bool`) Default is `false`. If `true`, disables 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`) 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. + +```go-html-template +{{ $opts := dict "config" "config-directory" "noMap" true }} +{{ with resources.Get "css/main.css" | postCSS $opts }} + <link rel="stylesheet" href="{{ .RelPermalink }}"> +{{ end }} +``` + +## No configuration file + +To avoid using a PostCSS configuration file, you can specify a minimal configuration using the options map. + +use +: (`string`) A space-delimited list of PostCSS plugins to use. + +parser +: (`string`) A custom PostCSS parser. + +stringifier +: (`string`) A custom PostCSS stringifier. + +syntax +: (`string`) Custom postcss syntax. + +```go-html-template +{{ $opts := dict "use" "autoprefixer postcss-color-alpha" }} +{{ with resources.Get "css/main.css" | postCSS $opts }} + <link rel="stylesheet" href="{{ .RelPermalink }}"> +{{ end }} +``` + +## Check environment + +The current Hugo environment name (set by `--environment` or in configuration or OS environment) is available in the Node context, which allows constructs like this: + +```js +const autoprefixer = require('autoprefixer'); +const purgecss = require('@fullhuman/postcss-purgecss'); +module.exports = { + plugins: [ + autoprefixer, + process.env.HUGO_ENVIRONMENT !== 'development' ? purgecss : null + ] +} +``` + +[node.js]: https://nodejs.org/en/download +[postcss plugins]: https://www.postcss.parts/ +[supported file name]: https://github.com/postcss/postcss-load-config#usage +[transpile to CSS]: /functions/resources/tocss.md diff --git a/docs/content/en/functions/resources/PostProcess.md b/docs/content/en/functions/resources/PostProcess.md new file mode 100644 index 000000000..f765ea9af --- /dev/null +++ b/docs/content/en/functions/resources/PostProcess.md @@ -0,0 +1,160 @@ +--- +title: resources.PostProcess +description: Processes the given resource after the build. +categories: [] +keywords: [] +action: + aliases: [] + related: + - functions/resources/Fingerprint + - functions/resources/Minify + - functions/resources/PostCSS + - functions/resources/ToCSS + returnType: postpub.PostPublishedResource + signatures: [resources.PostProcess RESOURCE] +toc: true +--- + +```go-html-template +{{ with resources.Get "css/main.css" }} + {{ if hugo.IsDevelopment }} + <link rel="stylesheet" href="{{ .RelPermalink }}"> + {{ else }} + {{ with . | postCSS | minify | fingerprint | resources.PostProcess }} + <link rel="stylesheet" href="{{ .RelPermalink }}" integrity="{{ .Data.Integrity }}" crossorigin="anonymous"> + {{ end }} + {{ end }} +{{ end }} +``` + +Marking a resource with `resources.PostProcess` postpones transformations until the build has finished. + +Call `resources.PostProcess` when one or more of the steps in the transformation chain depends on the result of the build. + +A prime use case for this is purging unused CSS rules using the [PurgeCSS] plugin for the PostCSS Node.js package. + +## CSS Purging + +{{% note %}} +There are several ways to set up CSS purging with PostCSS in Hugo. If you have a simple project, you should consider going the simpler route and drop the use of `resources.PostProcess` and just extract keywords from the templates. See the [Tailwind documentation](https://tailwindcss.com/docs/controlling-file-size/#app) for examples. +{{% /note %}} + +Step 1 +: Install [Node.js]. + +Step 2 +: Install the required Node.js packages in the root of your project: + +```sh +npm i -D postcss postcss-cli autoprefixer @fullhuman/postcss-purgecss +``` + +Step 3 +: Create a PostCSS configuration file in the root of your project. You must name this file `postcss.config.js` or another [supported file name]. For example: + +```js +const autoprefixer = require('autoprefixer'); +const purgecss = require('@fullhuman/postcss-purgecss')({ + content: ['./hugo_stats.json'], + defaultExtractor: content => { + const els = JSON.parse(content).htmlElements; + return [ + ...(els.tags || []), + ...(els.classes || []), + ...(els.ids || []), + ]; + }, + // https://purgecss.com/safelisting.html + safelist: [] +}); + +module.exports = { + plugins: [ + autoprefixer, + process.env.HUGO_ENVIRONMENT !== 'development' ? purgecss : null + ] +}; +``` + +{{% note %}} +{{% include "functions/resources/_common/postcss-windows-warning.md" %}} +{{% /note %}} + +Step 4 +: Enable creation of the `hugo_stats.json` file when building the site. If you are only using this for the production build, consider placing it below [config/production]. + +{{< code-toggle file=hugo >}} +[build.buildStats] +enable = true +{{< /code-toggle >}} + +See the [configure build] documentation for details and options. + +Step 5 +: Place your CSS file within the `assets/css` directory. + +Step 6 +: If the current environment is not `development`, process the resource with PostCSS: + +```go-html-template +{{ with resources.Get "css/main.css" }} + {{ if hugo.IsDevelopment }} + <link rel="stylesheet" href="{{ .RelPermalink }}"> + {{ else }} + {{ with . | postCSS | minify | fingerprint | resources.PostProcess }} + <link rel="stylesheet" href="{{ .RelPermalink }}" integrity="{{ .Data.Integrity }}" crossorigin="anonymous"> + {{ end }} + {{ end }} +{{ end }} +``` + +## Environment variables + +Hugo passes these environment variables to PostCSS, which allows you to do something like: + +```js +process.env.HUGO_ENVIRONMENT === 'production' ? [autoprefixer] : [] +``` + +PWD +: The absolute path to the project working directory. + +HUGO_ENVIRONMENT +: The current Hugo environment, set with the `--environment` command line flag. +Default is `production` for `hugo` and `development` for `hugo server`. + +HUGO_PUBLISHDIR +: The absolute path to the publish directory (the `public` directory). Note that the value will always point to a directory on disk even when running `hugo server` in memory mode. If you write to this folder from PostCSS when running the server, you could run the server with one of these flags: + +```sh +hugo server --renderToDisk +hugo server --renderStaticToDisk +``` + +Also, Hugo will add environment variables for all files mounted below `assets/_jsconfig`. A default mount will be set up with files in the project root matching this regexp: `(babel|postcss|tailwind)\.config\.js`. + +These will get environment variables named on the form `HUGO_FILE_:filename:` where `:filename:` is all upper case with periods replaced with underscore. This allows you to do something like: + +```js +let tailwindConfig = process.env.HUGO_FILE_TAILWIND_CONFIG_JS || './tailwind.config.js'; +``` + +## Limitations + +Do not use `resources.PostProcess` when running Hugo's built-in development server. The examples above specifically prevent this by verifying that the current environment is not "development". + +The `resources.PostProcess` function only works within templates that produce HTML files. + +You cannot manipulate the values returned from the resource’s methods. For example, the `strings.ToUpper` function in this example will not work as expected: + +```go-html-template +{{ $css := resources.Get "css/main.css" }} +{{ $css = $css | resources.PostCSS | minify | fingerprint | resources.PostProcess }} +{{ $css.RelPermalink | strings.ToUpper }} +``` + +[node.js]: https://nodejs.org/en/download +[supported file name]: https://github.com/postcss/postcss-load-config#usage +[config/production]: /getting-started/configuration/#configuration-directory +[configure build]: /getting-started/configuration/#configure-build +[purgecss]: https://github.com/FullHuman/purgecss#readme diff --git a/docs/content/en/functions/resources/ToCSS.md b/docs/content/en/functions/resources/ToCSS.md new file mode 100644 index 000000000..19ef33a64 --- /dev/null +++ b/docs/content/en/functions/resources/ToCSS.md @@ -0,0 +1,224 @@ +--- +title: resources.ToCSS +description: Transpiles Sass to CSS. +categories: [] +keywords: [] +action: + aliases: [toCSS] + related: + - functions/resources/Fingerprint + - functions/resources/Minify + - functions/resources/PostCSS + - functions/resources/PostProcess + returnType: resource.Resource + signatures: ['resources.ToCSS [OPTIONS] RESOURCE'] +toc: true +--- + +```go-html-template +{{ with resources.Get "sass/main.scss" }} + {{ $opts := dict "transpiler" "libsass" "targetPath" "css/style.css" }} + {{ with . | toCSS $opts }} + {{ if hugo.IsDevelopment }} + <link rel="stylesheet" href="{{ .RelPermalink }}"> + {{ else }} + {{ with . | minify | fingerprint }} + <link rel="stylesheet" href="{{ .RelPermalink }}" integrity="{{ .Data.Integrity }}" crossorigin="anonymous"> + {{ end }} + {{ end }} + {{ end }} +{{ end }} +``` + +Transpile Sass to CSS using the LibSass transpiler included in Hugo's extended edition, or [install Dart Sass](#dart-sass) to use the latest features of the Sass language. + +Sass has two forms of syntax: [SCSS] and [indented]. Hugo supports both. + +[scss]: https://sass-lang.com/documentation/syntax#scss +[indented]: https://sass-lang.com/documentation/syntax#the-indented-syntax + +## Options + +transpiler +: (`string`) The transpiler to use, either `libsass` (default) or `dartsass`. Hugo's extended edition includes the LibSass transpiler. To use the Dart Sass transpiler, see the [installation instructions](#dart-sass) below. + +targetPath +: (`string`) If not set, the transformed resource's target path will be the original path of the asset file with its extension replaced by `.css`. + +vars +: (`map`) A map of key/value pairs that will be available in the `hugo:vars` namespace. Useful for [initializing Sass variables from Hugo templates](https://discourse.gohugo.io/t/42053/). + +```scss +// LibSass +@import "hugo:vars"; + +// Dart Sass +@use "hugo:vars" as v; +``` + +outputStyle +: (`string`) Output styles available to LibSass include `nested` (default), `expanded`, `compact`, and `compressed`. Output styles available to Dart Sass include `expanded` (default) and `compressed`. + +precision +: (`int`) Precision of floating point math. Not applicable to Dart Sass. + +enableSourceMap +: (`bool`) If `true`, generates a source map. + +sourceMapIncludeSources +: (`bool`) If `true`, embeds sources in the generated source map. Not applicable to LibSass. + +includePaths +: (`slice`) A slice of paths, relative to the project root, that the transpiler will use when resolving `@use` and `@import` statements. + +```go-html-template +{{ $opts := dict + "transpiler" "dartsass" + "targetPath" "css/style.css" + "vars" site.Params.styles + "enableSourceMap" (not hugo.IsProduction) + "includePaths" (slice "node_modules/bootstrap/scss") +}} +{{ with resources.Get "sass/main.scss" | toCSS $opts | minify | fingerprint }} + <link rel="stylesheet" href="{{ .RelPermalink }}" integrity="{{ .Data.Integrity }}" crossorigin="anonymous"> +{{ end }} +``` + +## Dart Sass + +The extended version of Hugo includes [LibSass] to transpile Sass to CSS. In 2020, the Sass team deprecated LibSass in favor of [Dart Sass]. + +Use the latest features of the Sass language by installing Dart Sass in your development and production environments. + +### Installation overview + +Dart Sass is compatible with Hugo v0.114.0 and later. + +If you have been using Embedded Dart Sass[^1] with Hugo v0.113.0 and earlier, uninstall Embedded Dart Sass, then install Dart Sass. If you have installed both, Hugo will use Dart Sass. + +If you install Hugo as a [Snap package] there is no need to install Dart Sass. The Hugo Snap package includes Dart Sass. + +[^1]: In 2023, the Sass team deprecated Embedded Dart Sass in favor of Dart Sass. + +### Installing in a development environment + +When you install Dart Sass somewhere in your PATH, Hugo will find it. + +OS|Package manager|Site|Installation +:--|:--|:--|:-- +Linux|Homebrew|[brew.sh]|`brew install sass/sass/sass` +Linux|Snap|[snapcraft.io]|`sudo snap install dart-sass` +macOS|Homebrew|[brew.sh]|`brew install sass/sass/sass` +Windows|Chocolatey|[chocolatey.org]|`choco install sass` +Windows|Scoop|[scoop.sh]|`scoop install sass` + +You may also install [prebuilt binaries] for Linux, macOS, and Windows. + +Run `hugo env` to list the active transpilers. + +### Installing in a production environment + +For [CI/CD] deployments (e.g., GitHub Pages, GitLab Pages, Netlify, etc.) you must edit the workflow to install Dart Sass before Hugo builds the site[^2]. Some providers allow you to use one of the package managers above, or you can download and extract one of the prebuilt binaries. + +[^2]: You do not have to do this if (a) you have not modified the assets cache location, and (b) you have not set `useResourceCacheWhen` to `never` in your [site configuration], and (c) you add and commit your resources directory to your repository. + +#### GitHub Pages + +To install Dart Sass for your builds on GitHub Pages, add this step to the GitHub Pages workflow file: + +```yaml +- name: Install Dart Sass + run: sudo snap install dart-sass +``` + +If you are using GitHub Pages for the first time with your repository, GitHub provides a [starter workflow] for Hugo that includes Dart Sass. This is the simplest way to get started. + +#### GitLab Pages + +To install Dart Sass for your builds on GitLab Pages, the `.gitlab-ci.yml` file should look something like this: + +```yaml +variables: + HUGO_VERSION: 0.122.0 + DART_SASS_VERSION: 1.70.0 + GIT_DEPTH: 0 + GIT_STRATEGY: clone + GIT_SUBMODULE_STRATEGY: recursive + TZ: America/Los_Angeles +image: + name: golang:1.20-buster +pages: + script: + # Install Dart Sass + - curl -LJO https://github.com/sass/dart-sass/releases/download/${DART_SASS_VERSION}/dart-sass-${DART_SASS_VERSION}-linux-x64.tar.gz + - tar -xf dart-sass-${DART_SASS_VERSION}-linux-x64.tar.gz + - cp -r dart-sass/* /usr/local/bin + - rm -rf dart-sass* + # Install Hugo + - curl -LJO https://github.com/gohugoio/hugo/releases/download/v${HUGO_VERSION}/hugo_extended_${HUGO_VERSION}_linux-amd64.deb + - apt install -y ./hugo_extended_${HUGO_VERSION}_linux-amd64.deb + - rm hugo_extended_${HUGO_VERSION}_linux-amd64.deb + # Build + - hugo --gc --minify + artifacts: + paths: + - public + rules: + - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH +``` + +#### Netlify + +To install Dart Sass for your builds on Netlify, the `netlify.toml` file should look something like this: + +```toml +[build.environment] +HUGO_VERSION = "0.122.0" +DART_SASS_VERSION = "1.70.0" +TZ = "America/Los_Angeles" + +[build] +publish = "public" +command = """\ + curl -LJO https://github.com/sass/dart-sass/releases/download/${DART_SASS_VERSION}/dart-sass-${DART_SASS_VERSION}-linux-x64.tar.gz && \ + tar -xf dart-sass-${DART_SASS_VERSION}-linux-x64.tar.gz && \ + rm dart-sass-${DART_SASS_VERSION}-linux-x64.tar.gz && \ + export PATH=/opt/build/repo/dart-sass:$PATH && \ + hugo --gc --minify \ + """ +``` + +### Example + +To transpile with Dart Sass, set `transpiler` to `dartsass` in the options map passed to `resources.ToCSS`. For example: + +```go-html-template +{{ with resources.Get "sass/main.scss" }} + {{ $opts := dict "transpiler" "dartsass" "targetPath" "css/style.css" }} + {{ with . | toCSS $opts }} + {{ if hugo.IsDevelopment }} + <link rel="stylesheet" href="{{ .RelPermalink }}"> + {{ else }} + {{ with . | minify | fingerprint }} + <link rel="stylesheet" href="{{ .RelPermalink }}" integrity="{{ .Data.Integrity }}" crossorigin="anonymous"> + {{ end }} + {{ end }} + {{ end }} +{{ end }} +``` + +### Miscellaneous + +If you build Hugo from source and run `mage test -v`, the test will fail if you install Dart Sass as a Snap package. This is due to the Snap package's strict confinement model. + +[brew.sh]: https://brew.sh/ +[chocolatey.org]: https://community.chocolatey.org/packages/sass +[ci/cd]: https://en.wikipedia.org/wiki/CI/CD +[dart sass]: https://sass-lang.com/dart-sass +[libsass]: https://sass-lang.com/libsass +[prebuilt binaries]: https://github.com/sass/dart-sass/releases/latest +[scoop.sh]: https://scoop.sh/#/apps?q=sass +[site configuration]: /getting-started/configuration/#configure-build +[snap package]: /installation/linux/#snap +[snapcraft.io]: https://snapcraft.io/dart-sass +[starter workflow]: https://github.com/actions/starter-workflows/blob/main/pages/hugo.yml diff --git a/docs/content/en/functions/resources/_common/_index.md b/docs/content/en/functions/resources/_common/_index.md new file mode 100644 index 000000000..b57b688b3 --- /dev/null +++ b/docs/content/en/functions/resources/_common/_index.md @@ -0,0 +1,12 @@ +--- +_build: + list: never + publishResources: false + render: never +--- + +<!-- +Files within this headless branch bundle are markdown snippets. Each file must contain front matter delimiters, though front matter fields are not required. + +Include the rendered content using the "include" shortcode. +--> diff --git a/docs/content/en/functions/resources/_common/postcss-windows-warning.md b/docs/content/en/functions/resources/_common/postcss-windows-warning.md new file mode 100644 index 000000000..1b72e74db --- /dev/null +++ b/docs/content/en/functions/resources/_common/postcss-windows-warning.md @@ -0,0 +1,8 @@ +--- +# Do not remove front matter. +--- + +If you are a Windows user, and the path to your project contains a space, you must place the PostCSS configuration within the package.json file. See [this example] and issue [#7333]. + +[this example]: https://github.com/postcss/postcss-load-config#packagejson +[#7333]: https://github.com/gohugoio/hugo/issues/7333 diff --git a/docs/content/en/functions/resources/_index.md b/docs/content/en/functions/resources/_index.md new file mode 100644 index 000000000..364b9448d --- /dev/null +++ b/docs/content/en/functions/resources/_index.md @@ -0,0 +1,12 @@ +--- +title: Resource functions +linkTitle: resources +description: Template functions to work with resources. +categories: [] +keywords: [] +menu: + docs: + parent: functions +--- + +Use these functions to work with resources. diff --git a/docs/content/en/functions/safe/CSS.md b/docs/content/en/functions/safe/CSS.md new file mode 100644 index 000000000..08307fb15 --- /dev/null +++ b/docs/content/en/functions/safe/CSS.md @@ -0,0 +1,33 @@ +--- +title: safe.CSS +description: Declares the given string as safe CSS string. +categories: [] +keywords: [] +action: + aliases: [safeCSS] + related: + - functions/safe/HTML + - functions/safe/HTMLAttr + - functions/safe/JS + - functions/safe/JSStr + - functions/safe/URL + returnType: template.CSS + signatures: [safe.CSS INPUT] +aliases: [/functions/safecss] +--- + +In this context, *safe* means CSS content that matches any of the following: + +1. The CSS3 stylesheet production, such as `p { color: purple }`. +2. The CSS3 rule production, such as `a[href=~"https:"].foo#bar`. +3. CSS3 declaration productions, such as `color: red; margin: 2px`. +4. The CSS3 value production, such as `rgba(0, 0, 255, 127)`. + +Example: Given `style = "color: red;"` defined in the front matter of your `.md` file: + +* `<p style="{{ .Params.style | safeCSS }}">…</p>` → `<p style="color: red;">…</p>` +* `<p style="{{ .Params.style }}">…</p>` → `<p style="ZgotmplZ">…</p>` + +{{% note %}} +`ZgotmplZ` is a special value that indicates that unsafe content reached a CSS or URL context. +{{% /note %}} diff --git a/docs/content/en/functions/safe/HTML.md b/docs/content/en/functions/safe/HTML.md new file mode 100644 index 000000000..ecc4f1346 --- /dev/null +++ b/docs/content/en/functions/safe/HTML.md @@ -0,0 +1,39 @@ +--- +title: safe.HTML +description: Declares the given string as a safeHTML string. +categories: [] +keywords: [] +action: + aliases: [safeHTML] + related: + - functions/safe/CSS + - functions/safe/HTMLAttr + - functions/safe/JS + - functions/safe/JSStr + - functions/safe/URL + returnType: template.HTML + signatures: [safe.HTML INPUT] +aliases: [/functions/safehtml] +--- + +It should not be used for HTML from a third-party, or HTML with unclosed tags or comments. + +Given a site-wide [`hugo.toml`][config] with the following `copyright` value: + +{{< code-toggle file=hugo >}} +copyright = "© 2015 Jane Doe. <a href=\"https://creativecommons.org/licenses/by/4.0/\">Some rights reserved</a>." +{{< /code-toggle >}} + +`{{ .Site.Copyright | safeHTML }}` in a template would then output: + +```html +© 2015 Jane Doe. <a href="https://creativecommons.org/licenses/by/4.0/">Some rights reserved</a>. +``` + +However, without the `safeHTML` function, html/template assumes `.Site.Copyright` to be unsafe and therefore escapes all HTML tags and renders the whole string as plain text: + +```html +<p>© 2015 Jane Doe. <a href="https://creativecommons.org/licenses by/4.0/">Some rights reserved</a>.</p> +``` + +[config]: /getting-started/configuration/ diff --git a/docs/content/en/functions/safe/HTMLAttr.md b/docs/content/en/functions/safe/HTMLAttr.md new file mode 100644 index 000000000..198fc8ff3 --- /dev/null +++ b/docs/content/en/functions/safe/HTMLAttr.md @@ -0,0 +1,55 @@ +--- +title: safe.HTMLAttr +description: Declares the given key/value pair as a safe HTML attribute. +categories: [] +keywords: [] +action: + aliases: [safeHTMLAttr] + related: + - functions/safe/CSS + - functions/safe/HTML + - functions/safe/JS + - functions/safe/JSStr + - functions/safe/URL + returnType: template.HTMLAttr + signatures: [safe.HTMLAttr INPUT] +aliases: [/functions/safehtmlattr] +--- + +Given a site configuration that contains this menu entry: + +{{< code-toggle file=hugo >}} +[[menus.main]] + name = "IRC" + url = "irc://irc.freenode.net/#golang" +{{< /code-toggle >}} + +Attempting to use the `url` value directly in an attribute: + +```go-html-template +{{ range site.Menus.main }} + <a href="{{ .URL }}">{{ .Name }}</a> +{{ end }} +``` + +Will produce: + +```html +<a href="#ZgotmplZ">IRC</a> +``` + +`ZgotmplZ` is a special value, inserted by Go's [template/html] package, that indicates that unsafe content reached a CSS or URL context. + +To indicate that the HTML attribute is safe: + +```go-html-template +{{ range site.Menus.main }} + <a {{ printf "href=%q" .URL | safeHTMLAttr }}>{{ .Name }}</a> +{{ end }} +``` + +{{% note %}} +As demonstrated above, you must pass the HTML attribute name _and_ value through the function. Applying `safeHTMLAttr` to the attribute value has no effect. +{{% /note %}} + +[template/html]: https://pkg.go.dev/html/template diff --git a/docs/content/en/functions/safe/JS.md b/docs/content/en/functions/safe/JS.md new file mode 100644 index 000000000..65279b89b --- /dev/null +++ b/docs/content/en/functions/safe/JS.md @@ -0,0 +1,26 @@ +--- +title: safe.JS +description: Declares the given string as a safe JavaScript expression. +categories: [] +keywords: [] +action: + aliases: [safeJS] + related: + - functions/safe/CSS + - functions/safe/HTML + - functions/safe/HTMLAttr + - functions/safe/JSStr + - functions/safe/URL + returnType: template.JS + signatures: [safe.JS INPUT] +aliases: [/functions/safejs] +--- + +In this context, *safe* means the string encapsulates a known safe EcmaScript5 Expression (e.g., `(x + y * z())`). + +Template authors are responsible for ensuring that typed expressions do not break the intended precedence and that there is no statement/expression ambiguity as when passing an expression like `{ foo:bar() }\n['foo']()`, which is both a valid expression and a valid program with a very different meaning. + +Example: Given `hash = "619c16f"` defined in the front matter of your `.md` file: + +* `<script>var form_{{ .Params.hash | safeJS }};…</script>` → `<script>var form_619c16f;…</script>` +* `<script>var form_{{ .Params.hash }};…</script>` → `<script>var form_"619c16f";…</script>` diff --git a/docs/content/en/functions/safe/JSStr.md b/docs/content/en/functions/safe/JSStr.md new file mode 100644 index 000000000..36d2b36fa --- /dev/null +++ b/docs/content/en/functions/safe/JSStr.md @@ -0,0 +1,55 @@ +--- +title: safe.JSStr +description: Declares the given string as a safe JavaScript string. +categories: [] +keywords: [] +action: + aliases: [safeJSStr] + related: + - functions/safe/CSS + - functions/safe/HTML + - functions/safe/HTMLAttr + - functions/safe/JS + - functions/safe/URL + returnType: template.JSStr + signatures: [safe.JSStr INPUT] +aliases: [/functions/safejsstr] +--- + +Encapsulates a sequence of characters meant to be embedded between quotes in a JavaScript expression. Use of this type presents a security risk: the encapsulated content should come from a trusted source, as it will be included verbatim in the template output. + +Without declaring a variable to be a safe JavaScript string: + +```go-html-template +{{ $title := "Lilo & Stitch" }} +<script> + const a = "Title: " + {{ $title }}; +</script> +``` + +Rendered: + +```html +<script> + const a = "Title: " + "Lilo \u0026 Stitch"; +</script> +``` + +To avoid escaping by Go's [html/template] package: + +```go-html-template +{{ $title := "Lilo & Stitch" }} +<script> + const a = "Title: " + {{ $title | safeJSStr }}; +</script> +``` + +Rendered: + +```html +<script> + const a = "Title: " + "Lilo & Stitch"; +</script> +``` + +[html/template]: https://pkg.go.dev/html/template diff --git a/docs/content/en/functions/safe/URL.md b/docs/content/en/functions/safe/URL.md new file mode 100644 index 000000000..2da6895e5 --- /dev/null +++ b/docs/content/en/functions/safe/URL.md @@ -0,0 +1,70 @@ +--- +title: safe.URL +description: Declares the given string as a safe URL or URL substring. +categories: [] +keywords: [] +action: + aliases: [safeURL] + related: + - functions/safe/CSS + - functions/safe/HTML + - functions/safe/HTMLAttr + - functions/safe/JS + - functions/safe/JSStr + returnType: template.URL + signatures: [safe.URL INPUT] +aliases: [/functions/safeurl] +--- + +`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 `hugo.toml`][configuration] with the following [menu entry][menus]: + +{{< code-toggle file=hugo >}} +[[menus.main]] +name = "IRC: #golang at freenode" +url = "irc://irc.freenode.net/#golang" +{{< /code-toggle >}} + +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 >}} +<!-- 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: + +```html +<!-- This unordered list may be part of a sidebar menu --> +<ul> + <li><a href="#ZgotmplZ">IRC: #golang at freenode</a></li> +</ul> +``` + +The odd output can be remedied by adding ` | safeURL` to our `.URL` page variable: + +{{< code file=layouts/partials/correct-url-sidebar-menu.html >}} +<!-- 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: + +```html +<ul class="sidebar-menu"> + <li><a href="irc://irc.freenode.net/#golang">IRC: #golang at freenode</a></li> +</ul> +``` + +[configuration]: /getting-started/configuration/ +[menus]: /content-management/menus/ +[RFC 3986]: https://tools.ietf.org/html/rfc3986 diff --git a/docs/content/en/functions/safe/_index.md b/docs/content/en/functions/safe/_index.md new file mode 100644 index 000000000..f80a2cff4 --- /dev/null +++ b/docs/content/en/functions/safe/_index.md @@ -0,0 +1,14 @@ +--- +title: Safe functions +linkTitle: safe +description: Template functions to declare a value as safe in the context of Go's html/template package. +categories: [] +keywords: [] +menu: + docs: + parent: functions +--- + +Use these functions to declare a value as safe in the context of Go's [html/template] package. + +[html/template]: https://pkg.go.dev/html/template diff --git a/docs/content/en/functions/strings/Chomp.md b/docs/content/en/functions/strings/Chomp.md new file mode 100644 index 000000000..349f1e9b7 --- /dev/null +++ b/docs/content/en/functions/strings/Chomp.md @@ -0,0 +1,27 @@ +--- +title: strings.Chomp +description: Returns the given string, removing all trailing newline characters and carriage returns. +categories: [] +keywords: [] +action: + aliases: [chomp] + related: + - functions/strings/Trim + - functions/strings/TrimLeft + - functions/strings/TrimPrefix + - functions/strings/TrimRight + - functions/strings/TrimSuffix + returnType: any + signatures: [strings.Chomp STRING] +aliases: [/functions/chomp] +--- + +If the argument is of type `template.HTML`, returns `template.HTML`, else returns a `string`. + +```go-html-template +{{ chomp | "foo\n" }} → foo +{{ chomp | "foo\n\n" }} → foo + +{{ chomp | "foo\r\n" }} → foo +{{ chomp | "foo\r\n\r\n" }} → foo +``` diff --git a/docs/content/en/functions/strings/Contains.md b/docs/content/en/functions/strings/Contains.md new file mode 100644 index 000000000..0344b2981 --- /dev/null +++ b/docs/content/en/functions/strings/Contains.md @@ -0,0 +1,27 @@ +--- +title: strings.Contains +description: Reports whether the given string contains the given substring. +categories: [] +keywords: [] +action: + aliases: [] + related: + - functions/strings/ContainsAny + - functions/strings/ContainsNonSpace + - functions/strings/HasPrefix + - functions/strings/HasSuffix + - functions/collections/In + returnType: bool + signatures: [strings.Contains STRING SUBSTRING] +aliases: [/functions/strings.contains] +--- + +```go-html-template +{{ strings.Contains "Hugo" "go" }} → true +``` + +The check is case sensitive: + +```go-html-template +{{ strings.Contains "Hugo" "Go" }} → false +``` diff --git a/docs/content/en/functions/strings/ContainsAny.md b/docs/content/en/functions/strings/ContainsAny.md new file mode 100644 index 000000000..f331d09f7 --- /dev/null +++ b/docs/content/en/functions/strings/ContainsAny.md @@ -0,0 +1,27 @@ +--- +title: strings.ContainsAny +description: Reports whether the given string contains any character within the given set. +categories: [] +keywords: [] +action: + aliases: [] + related: + - functions/strings/Contains + - functions/strings/ContainsNonSpace + - functions/strings/HasPrefix + - functions/strings/HasSuffix + - functions/collections/In + returnType: bool + signatures: [strings.ContainsAny STRING SET] +aliases: [/functions/strings.containsany] +--- + +```go-html-template +{{ strings.ContainsAny "Hugo" "gm" }} → true +``` + +The check is case sensitive: + +```go-html-template +{{ strings.ContainsAny "Hugo" "Gm" }} → false +``` diff --git a/docs/content/en/functions/strings/ContainsNonSpace.md b/docs/content/en/functions/strings/ContainsNonSpace.md new file mode 100644 index 000000000..188aa14ba --- /dev/null +++ b/docs/content/en/functions/strings/ContainsNonSpace.md @@ -0,0 +1,35 @@ +--- +title: strings.ContainsNonSpace +description: Reports whether the given string contains any non-space characters as defined by Unicode’s White Space property. +categories: [] +keywords: [] +action: + aliases: [] + related: + - functions/strings/Contains + - functions/strings/ContainsAny + - functions/strings/HasPrefix + - functions/strings/HasSuffix + - functions/collections/In + returnType: bool + signatures: [strings.ContainsNonSpace STRING] +aliases: [/functions/strings.containsnonspace] +--- + +{{< new-in 0.111.0 >}} + +```go-html-template +{{ strings.ContainsNonSpace "\n" }} → false +{{ strings.ContainsNonSpace " " }} → false +{{ strings.ContainsNonSpace "\n abc" }} → true +``` + +Common white space characters include: + +```text +'\t', '\n', '\v', '\f', '\r', ' ' +``` + +See the [Unicode Character Database] for a complete list. + +[Unicode Character Database]: https://www.unicode.org/Public/UCD/latest/ucd/PropList.txt diff --git a/docs/content/en/functions/strings/Count.md b/docs/content/en/functions/strings/Count.md new file mode 100644 index 000000000..43b5baeff --- /dev/null +++ b/docs/content/en/functions/strings/Count.md @@ -0,0 +1,25 @@ +--- +title: strings.Count +description: Returns the number of non-overlapping instances of the given substring within the given string. +categories: [] +keywords: [] +action: + aliases: [] + related: + - functions/go-template/len + - functions/strings/CountRunes + - functions/strings/CountWords + - functions/strings/RuneCount + returnType: int + signatures: [strings.Count SUBSTR STRING] +aliases: [/functions/strings.count] +--- + +If `SUBSTR` is an empty string, this function returns 1 plus the number of Unicode code points in `STRING`. + +```go-html-template +{{ "aaabaab" | strings.Count "a" }} → 5 +{{ "aaabaab" | strings.Count "aa" }} → 2 +{{ "aaabaab" | strings.Count "aaa" }} → 1 +{{ "aaabaab" | strings.Count "" }} → 8 +``` diff --git a/docs/content/en/functions/strings/CountRunes.md b/docs/content/en/functions/strings/CountRunes.md new file mode 100644 index 000000000..10788e174 --- /dev/null +++ b/docs/content/en/functions/strings/CountRunes.md @@ -0,0 +1,24 @@ +--- +title: strings.CountRunes +description: Returns the number of runes in the given string excluding whitespace. +categories: [] +keywords: [] +action: + aliases: [countrunes] + related: + - functions/go-template/len + - functions/strings/Count + - functions/strings/CountWords + - functions/strings/RuneCount + returnType: int + signatures: [strings.CountRunes INPUT] +aliases: [/functions/countrunes] +--- + +In contrast with the [`strings.RuneCount`] function, which counts every rune in a string, `strings.CountRunes` excludes whitespace. + +```go-html-template +{{ "Hello, 世界" | strings.CountRunes }} → 8 +``` + +[`strings.RuneCount`]: /functions/strings/runecount diff --git a/docs/content/en/functions/strings/CountWords.md b/docs/content/en/functions/strings/CountWords.md new file mode 100644 index 000000000..3e4ec0465 --- /dev/null +++ b/docs/content/en/functions/strings/CountWords.md @@ -0,0 +1,20 @@ +--- +title: strings.CountWords +description: Returns the number of words in the given string. +categories: [] +keywords: [] +action: + aliases: [countwords] + related: + - functions/go-template/len + - functions/strings/Count + - functions/strings/CountRunes + - functions/strings/RuneCount + returnType: int + signatures: [strings.CountWords INPUT] +aliases: [/functions/countwords] +--- + +```go-html-template +{{ "Hugo is a static site generator." | countwords }} → 6 +``` diff --git a/docs/content/en/functions/strings/FindRESubmatch.md b/docs/content/en/functions/strings/FindRESubmatch.md new file mode 100644 index 000000000..302d1d9b4 --- /dev/null +++ b/docs/content/en/functions/strings/FindRESubmatch.md @@ -0,0 +1,90 @@ +--- +title: strings.FindRESubmatch +description: Returns a slice of all successive matches of the regular expression. Each element is a slice of strings holding the text of the leftmost match of the regular expression and the matches, if any, of its subexpressions. +categories: [] +keywords: [] +action: + aliases: [findRESubmatch] + related: + - functions/strings/FindRE + - functions/strings/Replace + - functions/strings/ReplaceRE + returnType: '[][]string' + signatures: ['strings.FindRESubmatch PATTERN INPUT [LIMIT]'] +aliases: [/functions/findresubmatch] +--- + +By default, `findRESubmatch` finds all matches. You can limit the number of matches with an optional LIMIT argument. A return value of nil indicates no match. + +{{% include "functions/_common/regular-expressions.md" %}} + +## Demonstrative examples + +```go-html-template +{{ findRESubmatch `a(x*)b` "-ab-" }} → [["ab" ""]] +{{ findRESubmatch `a(x*)b` "-axxb-" }} → [["axxb" "xx"]] +{{ findRESubmatch `a(x*)b` "-ab-axb-" }} → [["ab" ""] ["axb" "x"]] +{{ findRESubmatch `a(x*)b` "-axxb-ab-" }} → [["axxb" "xx"] ["ab" ""]] +{{ findRESubmatch `a(x*)b` "-axxb-ab-" 1 }} → [["axxb" "xx"]] +``` + +## Practical example + +This markdown: + +```text +- [Example](https://example.org) +- [Hugo](https://gohugo.io) +``` + +Produces this HTML: + +```html +<ul> + <li><a href="https://example.org">Example</a></li> + <li><a href="https://gohugo.io">Hugo</a></li> +</ul> +``` + +To match the anchor elements, capturing the link destination and text: + +```go-html-template +{{ $regex := `<a\s*href="(.+?)">(.+?)</a>` }} +{{ $matches := findRESubmatch $regex .Content }} +``` + +Viewed as JSON, the data structure of `$matches` in the code above is: + +```json +[ + [ + "<a href=\"https://example.org\"></a>Example</a>", + "https://example.org", + "Example" + ], + [ + "<a href=\"https://gohugo.io\">Hugo</a>", + "https://gohugo.io", + "Hugo" + ] +] +``` + +To render the `href` attributes: + +```go-html-template +{{ range $matches }} + {{ index . 1 }} +{{ end }} +``` + +Result: + +```text +https://example.org +https://gohugo.io +``` + +{{% note %}} +You can write and test your regular expression using [regex101.com](https://regex101.com/). Be sure to select the Go flavor before you begin. +{{% /note %}} diff --git a/docs/content/en/functions/strings/FindRe.md b/docs/content/en/functions/strings/FindRe.md new file mode 100644 index 000000000..861f38a12 --- /dev/null +++ b/docs/content/en/functions/strings/FindRe.md @@ -0,0 +1,36 @@ +--- +title: strings.FindRE +description: Returns a slice of strings that match the regular expression. +categories: [] +keywords: [] +action: + aliases: [findRE] + related: + - functions/strings/FindRESubmatch + - functions/strings/Replace + - functions/strings/ReplaceRE + returnType: '[]string' + signatures: ['strings.FindRE PATTERN INPUT [LIMIT]'] +aliases: [/functions/findre] +--- +By default, `findRE` finds all matches. You can limit the number of matches with an optional LIMIT argument. + +{{% include "functions/_common/regular-expressions.md" %}} + +This example returns a slice of all second level headings (`h2` elements) within the rendered `.Content`: + +```go-html-template +{{ findRE `(?s)<h2.*?>.*?</h2>` .Content }} +``` + +The `s` flag causes `.` to match `\n` as well, allowing us to find an `h2` element that contains newlines. + +To limit the number of matches to one: + +```go-html-template +{{ findRE `(?s)<h2.*?>.*?</h2>` .Content 1 }} +``` + +{{% note %}} +You can write and test your regular expression using [regex101.com](https://regex101.com/). Be sure to select the Go flavor before you begin. +{{% /note %}} diff --git a/docs/content/en/functions/strings/FirstUpper.md b/docs/content/en/functions/strings/FirstUpper.md new file mode 100644 index 000000000..8826b4f18 --- /dev/null +++ b/docs/content/en/functions/strings/FirstUpper.md @@ -0,0 +1,19 @@ +--- +title: strings.FirstUpper +description: Returns the given string, capitalizing the first character. +categories: [] +keywords: [] +action: + aliases: [] + related: + - functions/strings/Title + - functions/strings/ToLower + - functions/strings/ToUpper + returnType: string + signatures: [strings.FirstUpper STRING] +aliases: [/functions/strings.firstupper] +--- + +```go-html-template +{{ strings.FirstUpper "foo" }} → Foo +``` diff --git a/docs/content/en/functions/strings/HasPrefix.md b/docs/content/en/functions/strings/HasPrefix.md new file mode 100644 index 000000000..455de0586 --- /dev/null +++ b/docs/content/en/functions/strings/HasPrefix.md @@ -0,0 +1,21 @@ +--- +title: strings.HasPrefix +description: Reports whether the given string begins with the given prefix. +categories: [] +keywords: [] +action: + aliases: [hasPrefix] + related: + - functions/strings/Contains + - functions/strings/ContainsAny + - functions/strings/ContainsNonSpace + - functions/strings/HasSuffix + - functions/collections/In + returnType: bool + signatures: [strings.HasPrefix STRING PREFIX] +aliases: [/functions/hasprefix,/functions/strings.hasprefix] +--- + +```go-html-template +{{ hasPrefix "Hugo" "Hu" }} → true +``` diff --git a/docs/content/en/functions/strings/HasSuffix.md b/docs/content/en/functions/strings/HasSuffix.md new file mode 100644 index 000000000..8fb12c527 --- /dev/null +++ b/docs/content/en/functions/strings/HasSuffix.md @@ -0,0 +1,21 @@ +--- +title: strings.HasSuffix +description: Reports whether the given string ends with the given suffix. +categories: [] +keywords: [] +action: + aliases: [hasSuffix] + related: + - functions/strings/Contains + - functions/strings/ContainsAny + - functions/strings/ContainsNonSpace + - functions/strings/HasPrefix + - functions/collections/In + returnType: bool + signatures: [strings.HasSuffix STRING SUFFIX] +aliases: [/functions/hassuffix,/functions/strings/hassuffix] +--- + +```go-html-template +{{ hasSuffix "Hugo" "go" }} → true +``` diff --git a/docs/content/en/functions/strings/Repeat.md b/docs/content/en/functions/strings/Repeat.md new file mode 100644 index 000000000..530b0d14b --- /dev/null +++ b/docs/content/en/functions/strings/Repeat.md @@ -0,0 +1,16 @@ +--- +title: strings.Repeat +description: Returns a new string consisting of zero or more copies of another string. +categories: [] +keywords: [] +action: + aliases: [] + related: [] + returnType: string + signatures: [strings.Repeat COUNT INPUT] +aliases: [/functions/strings.repeat] +--- + +```go-html-template +{{ strings.Repeat 3 "yo" }} → yoyoyo +``` diff --git a/docs/content/en/functions/strings/Replace.md b/docs/content/en/functions/strings/Replace.md new file mode 100644 index 000000000..9add6e12b --- /dev/null +++ b/docs/content/en/functions/strings/Replace.md @@ -0,0 +1,26 @@ +--- +title: strings.Replace +description: Returns a copy of INPUT, replacing all occurrences of OLD with NEW. +categories: [] +keywords: [] +action: + aliases: [replace] + related: + - functions/strings/FindRE + - functions/strings/FindRESubmatch + - functions/strings/ReplaceRE + returnType: string + signatures: ['strings.Replace INPUT OLD NEW [LIMIT]'] +aliases: [/functions/replace] +--- + +```go-html-template +{{ $s := "Batman and Robin" }} +{{ replace $s "Robin" "Catwoman" }} → Batman and Catwoman +``` + +Limit the number of replacements using the `LIMIT` argument: + +```go-html-template +{{ replace "aabbaabb" "a" "z" 2 }} → zzbbaabb +``` diff --git a/docs/content/en/functions/strings/ReplaceRE.md b/docs/content/en/functions/strings/ReplaceRE.md new file mode 100644 index 000000000..1c32c34fb --- /dev/null +++ b/docs/content/en/functions/strings/ReplaceRE.md @@ -0,0 +1,43 @@ +--- +title: strings.ReplaceRE +description: Returns a copy of INPUT, replacing all occurrences of a regular expression with a replacement pattern. +categories: [] +keywords: [] +action: + aliases: [replaceRE] + related: + - functions/strings/FindRE + - functions/strings/FindRESubmatch + - functions/strings/Replace + returnType: string + signatures: ['strings.ReplaceRE PATTERN REPLACEMENT INPUT [LIMIT]'] +aliases: [/functions/replacere] +--- + +{{% include "functions/_common/regular-expressions.md" %}} + +```go-html-template +{{ $s := "a-b--c---d" }} +{{ replaceRE `(-{2,})` "-" $s }} → a-b-c-d +``` + +Limit the number of replacements using the LIMIT argument: + +```go-html-template +{{ $s := "a-b--c---d" }} +{{ replaceRE `(-{2,})` "-" $s 1 }} → a-b-c---d +``` + +Use `$1`, `$2`, etc. within the replacement string to insert the content of each capturing group within the regular expression: + +```go-html-template +{{ $s := "http://gohugo.io/docs" }} +{{ replaceRE "^https?://([^/]+).*" "$1" $s }} → gohugo.io +``` + +{{% note %}} +You can write and test your regular expression using [regex101.com](https://regex101.com/). Be sure to select the Go flavor before you begin. +{{% /note %}} + +[RE2]: https://github.com/google/re2/wiki/Syntax +[string literal]: https://go.dev/ref/spec#String_literals diff --git a/docs/content/en/functions/strings/RuneCount.md b/docs/content/en/functions/strings/RuneCount.md new file mode 100644 index 000000000..46fedf01f --- /dev/null +++ b/docs/content/en/functions/strings/RuneCount.md @@ -0,0 +1,24 @@ +--- +title: strings.RuneCount +description: Returns the number of runes in the given string. +categories: [] +keywords: [] +action: + aliases: [] + related: + - functions/go-template/len + - functions/strings/Count + - functions/strings/CountRunes + - functions/strings/CountWords + returnType: int + signatures: [strings.RuneCount INPUT] +aliases: [/functions/strings.runecount] +--- + +In contrast with the [`strings.CountRunes`] function, which excludes whitespace, `strings.RuneCount` counts every rune in a string. + +```go-html-template +{{ "Hello, 世界" | strings.RuneCount }} → 9 +``` + +[`strings.CountRunes`]: /functions/strings/countrunes diff --git a/docs/content/en/functions/strings/SliceString.md b/docs/content/en/functions/strings/SliceString.md new file mode 100644 index 000000000..2f33f8f65 --- /dev/null +++ b/docs/content/en/functions/strings/SliceString.md @@ -0,0 +1,20 @@ +--- +title: strings.SliceString +description: Creates a slice of a half-open range, including start and end indices. +categories: [] +keywords: [] +action: + aliases: [slicestr] + related: [] + returnType: string + signatures: ['strings.SliceString STRING START [END]'] +aliases: [/functions/slicestr] +--- + +For example, 1 and 4 creates a slice including elements 1 through 3. +The `end` index can be omitted; it defaults to the string's length. + +```go-html-template +{{ slicestr "BatMan" 3 }}` → Man +{{ slicestr "BatMan" 0 3 }}` → Bat +``` diff --git a/docs/content/en/functions/strings/Split.md b/docs/content/en/functions/strings/Split.md new file mode 100644 index 000000000..a9973ea63 --- /dev/null +++ b/docs/content/en/functions/strings/Split.md @@ -0,0 +1,26 @@ +--- +title: strings.Split +description: Returns a slice of strings by splitting the given string by a delimiter. +categories: [] +keywords: [] +action: + aliases: [split] + related: + - functions/collections/Delimit + returnType: string + signatures: [strings.Split STRING DELIM] +aliases: [/functions/split] +--- + +Examples: + +```go-html-template +{{ split "tag1,tag2,tag3" "," }} → ["tag1", "tag2", "tag3"] +{{ split "abc" "" }} → ["a", "b", "c"] +``` + +{{% note %}} +The `strings.Split` function essentially does the opposite of the [`collections.Delimit`] function. While `split` creates a slice from a string, `delimit` creates a string from a slice. + +[`collections.Delimit`]: /functions/collections/delimit +{{% /note %}} diff --git a/docs/content/en/functions/strings/Substr.md b/docs/content/en/functions/strings/Substr.md new file mode 100644 index 000000000..6c1852f58 --- /dev/null +++ b/docs/content/en/functions/strings/Substr.md @@ -0,0 +1,38 @@ +--- +title: strings.Substr +description: Extracts parts of a string from a specified character's position and returns the specified number of characters. +categories: [] +keywords: [] +action: + aliases: [substr] + related: [] + returnType: string + signatures: ['strings.Substr STRING START [LENGTH]'] +aliases: [/functions/substr] +--- + +It normally takes two argument: `start` and `length`. It can also take one argument: `start`, i.e. `length` is omitted, in which case the substring starting from start until the end of the string will be returned. + +To extract characters from the end of the string, use a negative start number. + +If `length` is given and is negative, that number of characters will be omitted from the end of string. + +```go-html-template +{{ substr "abcdef" 0 }} → abcdef +{{ substr "abcdef" 1 }} → bcdef + +{{ substr "abcdef" 0 1 }} → a +{{ substr "abcdef" 1 1 }} → b + +{{ substr "abcdef" 0 -1 }} → abcde +{{ substr "abcdef" 1 -1 }} → bcde + +{{ substr "abcdef" -1 }} → f +{{ substr "abcdef" -2 }} → ef + +{{ substr "abcdef" -1 1 }} → f +{{ substr "abcdef" -2 1 }} → e + +{{ substr "abcdef" -3 -1 }} → de +{{ substr "abcdef" -3 -2 }} → d +``` diff --git a/docs/content/en/functions/strings/Title.md b/docs/content/en/functions/strings/Title.md new file mode 100644 index 000000000..b7f1f9e5c --- /dev/null +++ b/docs/content/en/functions/strings/Title.md @@ -0,0 +1,32 @@ +--- +title: strings.Title +description: Returns the given string, converting it to title case. +categories: [] +keywords: [] +action: + aliases: [title] + related: + - functions/strings/FirstUpper + - functions/strings/ToLower + - functions/strings/ToUpper + returnType: string + signatures: [strings.Title STRING] +aliases: [/functions/title] +--- + +```go-html-template +{{ title "table of contents (TOC)" }} → Table of Contents (TOC) +``` + +By default, Hugo follows the capitalization rules published in the [Associated Press Stylebook]. Change your [site configuration] if you would prefer to: + +- Follow the capitalization rules published in the [Chicago Manual of Style] +- Capitalize the first letter of every word +- Capitalize the first letter of the first word +- Disable the effects of the `title` function + +The last option is useful if your theme uses the `title` function, and you would prefer to manually capitalize strings as needed. + +[Associated Press Stylebook]: https://www.apstylebook.com/ +[Chicago Manual of Style]: https://www.chicagomanualofstyle.org/home.html +[site configuration]: /getting-started/configuration/#configure-title-case diff --git a/docs/content/en/functions/strings/ToLower.md b/docs/content/en/functions/strings/ToLower.md new file mode 100644 index 000000000..3da047ae4 --- /dev/null +++ b/docs/content/en/functions/strings/ToLower.md @@ -0,0 +1,19 @@ +--- +title: strings.ToLower +description: Returns the given string, converting all characters to lowercase. +categories: [] +keywords: [] +action: + aliases: [lower] + related: + - functions/strings/FirstUpper + - functions/strings/Title + - functions/strings/ToUpper + returnType: string + signatures: [strings.ToLower INPUT] +aliases: [/functions/lower] +--- + +```go-html-template +{{ lower "BatMan" }} → batman +``` diff --git a/docs/content/en/functions/strings/ToUpper.md b/docs/content/en/functions/strings/ToUpper.md new file mode 100644 index 000000000..617e1e68a --- /dev/null +++ b/docs/content/en/functions/strings/ToUpper.md @@ -0,0 +1,19 @@ +--- +title: strings.ToUpper +description: Returns the given string, converting all characters to uppercase. +categories: [] +keywords: [] +action: + aliases: [upper] + related: + - functions/strings/FirstUpper + - functions/strings/Title + - functions/strings/ToLower + returnType: string + signatures: [strings.ToUpper INPUT] +aliases: [/functions/upper] +--- + +```go-html-template +{{ upper "BatMan" }} → BATMAN +``` diff --git a/docs/content/en/functions/strings/Trim.md b/docs/content/en/functions/strings/Trim.md new file mode 100644 index 000000000..6dfac024b --- /dev/null +++ b/docs/content/en/functions/strings/Trim.md @@ -0,0 +1,59 @@ +--- +title: strings.Trim +description: Returns the given string, removing leading and trailing characters specified in the cutset. +categories: [] +keywords: [] +action: + aliases: [trim] + related: + - functions/strings/Chomp + - functions/strings/TrimLeft + - functions/strings/TrimPrefix + - functions/strings/TrimRight + - functions/strings/TrimSuffix + returnType: string + signatures: [strings.Trim INPUT CUTSET] +aliases: [/functions/trim] +--- + +```go-html-template +{{ trim "++foo--" "+-" }} → foo +``` + +To remove leading and trailing newline characters and carriage returns: + +```go-html-template +{{ trim "\nfoo\n" "\n\r" }} → foo +{{ trim "\n\nfoo\n\n" "\n\r" }} → foo + +{{ trim "\r\nfoo\r\n" "\n\r" }} → foo +{{ trim "\r\n\r\nfoo\r\n\r\n" "\n\r" }} → foo +``` + +The `strings.Trim` function is commonly used in shortcodes to remove leading and trailing newlines characters and carriage returns from the content within the opening and closing shortcode tags. + +For example, with this markdown: + +```text +{{</* my-shortcode */>}} +Able was I ere I saw Elba. +{{</* /my-shortcode */>}} +``` + +The value of `.Inner` in the shortcode template is: + +```text +\nAble was I ere I saw Elba.\n +``` + +If authored on a Windows system the value of `.Inner` might, depending on the editor configuration, be: + +```text +\r\nAble was I ere I saw Elba.\r\n +``` + +This construct is common in shortcode templates: + +```go-html-template +{{ trim .Inner "\n\r" }} +``` diff --git a/docs/content/en/functions/strings/TrimLeft.md b/docs/content/en/functions/strings/TrimLeft.md new file mode 100644 index 000000000..07cdf0064 --- /dev/null +++ b/docs/content/en/functions/strings/TrimLeft.md @@ -0,0 +1,28 @@ +--- +title: strings.TrimLeft +description: Returns the given string, removing leading characters specified in the cutset. +categories: [] +keywords: [] +action: + aliases: [] + related: + - functions/strings/Chomp + - functions/strings/Trim + - functions/strings/TrimPrefix + - functions/strings/TrimRight + - functions/strings/TrimSuffix + returnType: string + signatures: [strings.TrimLeft CUTSET STRING] +aliases: [/functions/strings.trimleft] +--- + +```go-html-template +{{ strings.TrimLeft "a" "abba" }} → bba +``` + +The `strings.TrimLeft` function converts the arguments to strings if possible: + +```go-html-template +{{ strings.TrimLeft 21 12345 }} → 345 (string) +{{ strings.TrimLeft "rt" true }} → ue +``` diff --git a/docs/content/en/functions/strings/TrimPrefix.md b/docs/content/en/functions/strings/TrimPrefix.md new file mode 100644 index 000000000..917cf06f5 --- /dev/null +++ b/docs/content/en/functions/strings/TrimPrefix.md @@ -0,0 +1,23 @@ +--- +title: strings.TrimPrefix +description: Returns the given string, removing the prefix from the beginning of the string. +categories: [] +keywords: [] +action: + aliases: [] + related: + - functions/strings/Chomp + - functions/strings/Trim + - functions/strings/TrimLeft + - functions/strings/TrimRight + - functions/strings/TrimSuffix + returnType: string + signatures: [strings.TrimPrefix PREFIX STRING] +aliases: [/functions/strings.trimprefix] +--- + +```go-html-template +{{ strings.TrimPrefix "a" "aabbaa" }} → abbaa +{{ strings.TrimPrefix "aa" "aabbaa" }} → bbaa +{{ strings.TrimPrefix "aaa" "aabbaa" }} → aabbaa +``` diff --git a/docs/content/en/functions/strings/TrimRight.md b/docs/content/en/functions/strings/TrimRight.md new file mode 100644 index 000000000..b244925ef --- /dev/null +++ b/docs/content/en/functions/strings/TrimRight.md @@ -0,0 +1,28 @@ +--- +title: strings.TrimRight +description: Returns the given string, removing trailing characters specified in the cutset. +categories: [] +keywords: [] +action: + aliases: [] + related: + - functions/strings/Chomp + - functions/strings/Trim + - functions/strings/TrimLeft + - functions/strings/TrimPrefix + - functions/strings/TrimSuffix + returnType: string + signatures: [strings.TrimRight CUTSET STRING] +aliases: [/functions/strings.trimright] +--- + +```go-html-template +{{ strings.TrimRight "a" "abba" }} → abb +``` + +The `strings.TrimRight` function converts the arguments to strings if possible: + +```go-html-template +{{ strings.TrimRight 54 12345 }} → 123 (string) +{{ strings.TrimRight "eu" true }} → tr +``` diff --git a/docs/content/en/functions/strings/TrimSuffix.md b/docs/content/en/functions/strings/TrimSuffix.md new file mode 100644 index 000000000..704bbd2d2 --- /dev/null +++ b/docs/content/en/functions/strings/TrimSuffix.md @@ -0,0 +1,23 @@ +--- +title: strings.TrimSuffix +description: Returns the given string, removing the suffix from the end of the string. +categories: [] +keywords: [] +action: + aliases: [] + related: + - functions/strings/Chomp + - functions/strings/Trim + - functions/strings/TrimLeft + - functions/strings/TrimPrefix + - functions/strings/TrimRight + returnType: string + signatures: [strings.TrimSuffix SUFFIX STRING] +aliases: [/functions/strings.trimsuffix] +--- + +```go-html-template +{{ strings.TrimSuffix "a" "aabbaa" }} → aabba +{{ strings.TrimSuffix "aa" "aabbaa" }} → aabb +{{ strings.TrimSuffix "aaa" "aabbaa" }} → aabbaa +``` diff --git a/docs/content/en/functions/strings/Truncate.md b/docs/content/en/functions/strings/Truncate.md new file mode 100644 index 000000000..17ae0afc6 --- /dev/null +++ b/docs/content/en/functions/strings/Truncate.md @@ -0,0 +1,24 @@ +--- +title: strings.Truncate +description: Returns the given string, truncating it to a maximum length without cutting words or leaving unclosed HTML tags. +categories: [] +keywords: [] +action: + aliases: [truncate] + related: [] + returnType: template.HTML + signatures: ['strings.Truncate SIZE [ELLIPSIS] INPUT'] +aliases: [/functions/truncate] +--- + +Since Go templates are HTML-aware, `truncate` will intelligently handle normal strings vs HTML strings: + +```go-html-template +{{ "<em>Keep my HTML</em>" | safeHTML | truncate 10 }} → <em>Keep my …</em> +``` + +{{% note %}} +If you have a raw string that contains HTML tags you want to remain treated as HTML, you will need to convert the string to HTML using the [`safeHTML`]function before sending the value to `truncate`. Otherwise, the HTML tags will be escaped when passed through the `truncate` function. + +[`safeHTML`]: /functions/safe/html +{{% /note %}} diff --git a/docs/content/en/functions/strings/_index.md b/docs/content/en/functions/strings/_index.md new file mode 100644 index 000000000..364522a3a --- /dev/null +++ b/docs/content/en/functions/strings/_index.md @@ -0,0 +1,12 @@ +--- +title: String functions +linkTitle: strings +description: Template functions to work with strings. +categories: [] +keywords: [] +menu: + docs: + parent: functions +--- + +Use these functions to work with strings. diff --git a/docs/content/en/functions/templates/Exists.md b/docs/content/en/functions/templates/Exists.md new file mode 100644 index 000000000..e57610488 --- /dev/null +++ b/docs/content/en/functions/templates/Exists.md @@ -0,0 +1,27 @@ +--- +title: templates.Exists +description: Reports whether a template file exists under the given path relative to the layouts directory. +categories: [] +keywords: [] +action: + aliases: [] + related: [] + returnType: bool + signatures: [templates.Exists PATH] +aliases: [/functions/templates.exists] +--- + +A template file is any file within the `layouts` directory of either the project or any of its theme components. + +Use the `templates.Exists` function with dynamic template paths: + +```go-html-template +{{ $partialPath := printf "headers/%s.html" .Type }} +{{ if templates.Exists ( printf "partials/%s" $partialPath ) }} + {{ partial $partialPath . }} +{{ else }} + {{ partial "headers/default.html" . }} +{{ end }} +``` + +In the example above, if a "headers" partial does not exist for the given content type, Hugo falls back to a default template. diff --git a/docs/content/en/functions/templates/_index.md b/docs/content/en/functions/templates/_index.md new file mode 100644 index 000000000..89da6c38f --- /dev/null +++ b/docs/content/en/functions/templates/_index.md @@ -0,0 +1,13 @@ +--- +title: Template functions +linkTitle: templates +description: +categories: [] +keywords: [] +menu: + docs: + identifier: templates-functions + parent: functions +--- + +Use these functions to query the template system. diff --git a/docs/content/en/functions/time/AsTime.md b/docs/content/en/functions/time/AsTime.md new file mode 100644 index 000000000..23e5304a5 --- /dev/null +++ b/docs/content/en/functions/time/AsTime.md @@ -0,0 +1,61 @@ +--- +title: time.AsTime +description: Returns the given string representation of a date/time value as a time.Time value. +categories: [] +keywords: [] +action: + aliases: [time] + related: + - functions/time/Duration + - functions/time/Format + - functions/time/Now + - functions/time/ParseDuration + returnType: time.Time + signatures: ['time.AsTime INPUT [TIMEZONE]'] +aliases: [/functions/time] +toc: true +--- + +## Overview + +Hugo provides [functions] and [methods] to format, localize, parse, compare, and manipulate date/time values. Before you can do any of these with string representations of date/time values, you must first convert them to [`time.Time`] values using the `time.AsTime` function. + +```go-html-template +{{ $t := "2023-10-15T14:20:28-07:00" }} +{{ time.AsTime $t }} → 2023-10-15 14:20:28 -0700 PDT (time.Time) +``` + +## Parsable strings + +As shown above, the first argument must be a *parsable* string representation of a date/time value. For example: + +{{% include "functions/time/_common/parsable-date-time-strings.md" %}} + +## Time zones + +When the parsable string does not contain a time zone offset, you can do either of the following to assign a time zone other than Etc/UTC: + +- Provide a second argument to the `time.AsTime` function + + ```go-html-template + {{ time.AsTime "15 Oct 2023" "America/Chicago" }} + ``` + +- Set the default time zone in your site configuration + + {{< code-toggle file=hugo >}} + timeZone = 'America/New_York' + {{< /code-toggle >}} + +The order of precedence for determining the time zone is: + +1. The time zone offset in the date/time string +2. The time zone provide as the second argument to the `time.AsTime` function +3. The time zone specified in your site configuration + +The list of valid time zones may be system dependent, but should include `UTC`, `Local`, or any location in the [IANA Time Zone database]. + +[`time.Time`]: https://pkg.go.dev/time#Time +[functions]: /functions/time/ +[iana time zone database]: https://en.wikipedia.org/wiki/List_of_tz_database_time_zones +[methods]: /methods/time/ diff --git a/docs/content/en/functions/time/Duration.md b/docs/content/en/functions/time/Duration.md new file mode 100644 index 000000000..f9c26d294 --- /dev/null +++ b/docs/content/en/functions/time/Duration.md @@ -0,0 +1,46 @@ +--- +title: time.Duration +description: Returns a time.Duration value using the given time unit and number. +categories: [] +keywords: [] +action: + aliases: [duration] + related: + - functions/time/AsTime + - functions/time/Format + - functions/time/Now + - functions/time/ParseDuration + returnType: time.Duration + signatures: [time.Duration TIME_UNIT NUMBER] +aliases: [/functions/duration] +--- + +The `time.Duration` function returns a [`time.Duration`] value that you can use with any of the `Duration` [methods]. + +This template: + +```go-html-template +{{ $duration := time.Duration "hour" 24 }} +{{ printf "There are %.0f seconds in one day." $duration.Seconds }} +``` + +Is rendered to: + +```text +There are 86400 seconds in one day. +``` + +The time unit must be one of the following: + + +Duration|Valid time units +:--|:-- +hours|`hour`, `h` +minutes|`minute`, `m` +seconds|`second`, `s` +milliseconds|`millisecond`, `ms` +microseconds|`microsecond`, `us`, `µs` +nanoseconds|`nanosecond`, `ns` + +[`time.Duration`]: https://pkg.go.dev/time#Duration +[methods]: /methods/duration diff --git a/docs/content/en/functions/time/Format.md b/docs/content/en/functions/time/Format.md new file mode 100644 index 000000000..74384959b --- /dev/null +++ b/docs/content/en/functions/time/Format.md @@ -0,0 +1,77 @@ +--- +title: time.Format +description: Returns the given date/time as a formatted and localized string. +categories: [] +keywords: [] +action: + aliases: [dateFormat] + related: + - functions/time/AsTime + - functions/time/Duration + - functions/time/Now + - functions/time/ParseDuration + returnType: string + signatures: [time.Format LAYOUT INPUT] +aliases: [/functions/dateformat] +toc: true +--- + +Use the `time.Format` function with `time.Time` values: + +```go-html-template +{{ $t := time.AsTime "2023-02-27T23:44:58-08:00" }} +{{ time.Format "2 Jan 2006" $t }} → 27 Feb 2023 +``` + +Or use `time.Format` with a *parsable* string representation of a date/time value: + +```go-html-template +{{ $t := "27 Feb 2023" }} +{{ time.Format "January 2, 2006" $t }} → February 27, 2023 +``` + +Examples of parsable string representations: + +{{% include "functions/time/_common/parsable-date-time-strings.md" %}} + +## Layout string + +{{% include "functions/_common/time-layout-string.md" %}} + +## Localization + +Use the `time.Format` function to localize `time.Time` values for the current language and region. + +{{% include "functions/_common/locales.md" %}} + +Use the layout string as described above, or one of the tokens below. For example: + +```go-html-template +{{ .Date | time.Format ":date_medium" }} → Jan 27, 2023 +``` + +Localized to en-US: + +Token|Result +:--|:-- +`:date_full`|`Friday, January 27, 2023` +`:date_long`|`January 27, 2023` +`:date_medium`|`Jan 27, 2023` +`:date_short`|`1/27/23` +`:time_full`|`11:44:58 pm Pacific Standard Time` +`:time_long`|`11:44:58 pm PST` +`:time_medium`|`11:44:58 pm` +`:time_short`|`11:44 pm` + +Localized to de-DE: + +Token|Result +:--|:-- +`:date_full`|`Freitag, 27. Januar 2023` +`:date_long`|`27. Januar 2023` +`:date_medium`|`27.01.2023` +`:date_short`|`27.01.23` +`:time_full`|`23:44:58 Nordamerikanische Westküsten-Normalzeit` +`:time_long`|`23:44:58 PST` +`:time_medium`|`23:44:58` +`:time_short`|`23:44` diff --git a/docs/content/en/functions/time/Now.md b/docs/content/en/functions/time/Now.md new file mode 100644 index 000000000..60e45a91c --- /dev/null +++ b/docs/content/en/functions/time/Now.md @@ -0,0 +1,48 @@ +--- +title: time.Now +description: Returns the current local time. +categories: [] +keywords: [] +action: + aliases: [now] + related: + - functions/time/AsTime + - functions/time/Duration + - functions/time/Format + - functions/time/ParseDuration + returnType: time.Time + signatures: [time.Now] +aliases: [/functions/now] +--- + +For example, when building a site on October 15, 2023 in the America/Los_Angeles time zone: + +```go-html-template +{{ time.Now }} +``` + +This produces a `time.Time` value, with a string representation such as: + +```text +2023-10-15 12:59:28.337140706 -0700 PDT m=+0.041752605 +``` + +To format and [localize] the value, pass it through the [`time.Format`] function: + +```go-html-template +{{ time.Now | time.Format "Jan 2006" }} → Oct 2023 +``` + +The `time.Now` function returns a `time.Time` value, so you can chain any of the [time methods] to the resulting value. For example: + + +```go-html-template +{{ time.Now.Year }} → 2023 (int) +{{ time.Now.Weekday.String }} → Sunday +{{ time.Now.Month.String }} → October +{{ time.Now.Unix }} → 1697400955 (int64) +``` + +[`time.Format`]: /functions/time/format +[localize]: /getting-started/glossary/#localization +[time methods]: /methods/time/ diff --git a/docs/content/en/functions/time/ParseDuration.md b/docs/content/en/functions/time/ParseDuration.md new file mode 100644 index 000000000..091914132 --- /dev/null +++ b/docs/content/en/functions/time/ParseDuration.md @@ -0,0 +1,37 @@ +--- +title: time.ParseDuration +description: Returns a time.Duration value by parsing the given duration string. +categories: [] +keywords: [] +action: + aliases: [] + related: + - functions/time/AsTime + - functions/time/Duration + - functions/time/Format + - functions/time/Now + returnType: time.Duration + signatures: [time.ParseDuration DURATION] +aliases: [/functions/time.parseduration] +--- + +The `time.ParseDuration` function returns a time.Duration value that you can use with any of the `Duration` [methods]. + + +A duration string is a possibly signed sequence of decimal numbers, each with optional fraction and a unit suffix, such as `300ms`, `-1.5h` or `2h45m`. Valid time units are `ns`, `us` (or `µs`), `ms`, `s`, `m`, `h`. + +This template: + +```go-html-template +{{ $duration := time.ParseDuration "24h" }} +{{ printf "There are %.0f seconds in one day." $duration.Seconds }} +``` + +Is rendered to: + +```text +There are 86400 seconds in one day. +``` + +[`time.Duration`]: https://pkg.go.dev/time#Duration +[methods]: /methods/duration diff --git a/docs/content/en/functions/time/_common/_index.md b/docs/content/en/functions/time/_common/_index.md new file mode 100644 index 000000000..47d5812fb --- /dev/null +++ b/docs/content/en/functions/time/_common/_index.md @@ -0,0 +1,13 @@ +--- +cascade: + _build: + list: never + publishResources: false + render: never +--- + +<!-- +Files within this headless branch bundle are markdown snippets. Each file must contain front matter delimiters, though front matter fields are not required. + +Include the rendered content using the "include" shortcode. +--> diff --git a/docs/content/en/functions/time/_common/parsable-date-time-strings.md b/docs/content/en/functions/time/_common/parsable-date-time-strings.md new file mode 100644 index 000000000..a38b9983e --- /dev/null +++ b/docs/content/en/functions/time/_common/parsable-date-time-strings.md @@ -0,0 +1,14 @@ +--- +# Do not remove front matter. +--- + +String representation|Time zone +:--|:-- +2023-10-15T14:20:28-07:00|America/Los_Angeles +2023-10-15T13:18:50-0700|America/Los_Angeles +2023-10-15T13:18:50Z|Etc/UTC +2023-10-15T13:18:50|Etc/UTC +2023-10-15|Etc/UTC +15 Oct 2023|Etc/UTC + +The last four examples are not fully qualified. Without a time zone offset, the time zone is set to Etc/UTC (Coordinated Universal Time). diff --git a/docs/content/en/functions/time/_index.md b/docs/content/en/functions/time/_index.md new file mode 100644 index 000000000..7e0b82f91 --- /dev/null +++ b/docs/content/en/functions/time/_index.md @@ -0,0 +1,12 @@ +--- +title: Time functions +linkTitle: time +description: Template functions to work with time values. +categories: [] +keywords: [] +menu: + docs: + parent: functions +--- + +Use these functions to work with time values. diff --git a/docs/content/en/functions/transform/CanHighlight.md b/docs/content/en/functions/transform/CanHighlight.md new file mode 100644 index 000000000..039cb12b7 --- /dev/null +++ b/docs/content/en/functions/transform/CanHighlight.md @@ -0,0 +1,18 @@ +--- +title: transform.CanHighlight +description: Reports whether the given code language is supported by the Chroma highlighter. +categories: [] +keywords: [] +action: + aliases: [] + related: + - functions/transform/Highlight + - functions/transform/HighlightCodeBlock + returnType: bool + signatures: [transform.CanHighlight LANGUAGE] +--- + +```go-html-template +{{ transform.CanHighlight "go" }} → true +{{ transform.CanHighlight "klingon" }} → false +``` diff --git a/docs/content/en/functions/transform/Emojify.md b/docs/content/en/functions/transform/Emojify.md new file mode 100644 index 000000000..d9f0adf67 --- /dev/null +++ b/docs/content/en/functions/transform/Emojify.md @@ -0,0 +1,30 @@ +--- +title: transform.Emojify +description: Runs a string through the Emoji emoticons processor. +categories: [] +keywords: [] +action: + aliases: [emojify] + related: [] + returnType: template.HTML + signatures: [transform.Emojify INPUT] +aliases: [/functions/emojify] +--- + +`emojify` runs a passed string through the Emoji emoticons processor. + +See the list of [emoji shortcodes] for available emoticons. + +The `emojify` function can be called in your templates but not directly in your content files by default. For emojis in content files, set `enableEmoji` to `true` in your site's [configuration]. Then you can write emoji shorthand directly into your content files; + + +```text +I :heart: Hugo! +``` + +I :heart: Hugo! + +[configuration]: /getting-started/configuration/ +[emoji shortcodes]: /quick-reference/emojis/ +[sc]: /templates/shortcode-templates/ +[scsource]: https://github.com/gohugoio/hugo/tree/master/docs/layouts/shortcodes diff --git a/docs/content/en/functions/transform/HTMLEscape.md b/docs/content/en/functions/transform/HTMLEscape.md new file mode 100644 index 000000000..bb522769c --- /dev/null +++ b/docs/content/en/functions/transform/HTMLEscape.md @@ -0,0 +1,30 @@ +--- +title: transform.HTMLEscape +description: Returns the given string, escaping special characters by replacing them with HTML entities. +categories: [] +keywords: [] +action: + aliases: [htmlEscape] + related: + - functions/transform/HTMLUnescape + returnType: string + signatures: [transform.HTMLEscape INPUT] +aliases: [/functions/htmlescape] +--- + +The `transform.HTMLEscape` function escapes five special characters by replacing them with [HTML entities]: + +- `&` → `&` +- `<` → `<` +- `>` → `>` +- `'` → `'` +- `"` → `"` + +For example: + +```go-html-template +{{ htmlEscape "Lilo & Stitch" }} → Lilo & Stitch +{{ htmlEscape "7 > 6" }} → 7 > 6 +``` + +[html entities]: https://developer.mozilla.org/en-US/docs/Glossary/Entity diff --git a/docs/content/en/functions/transform/HTMLUnescape.md b/docs/content/en/functions/transform/HTMLUnescape.md new file mode 100644 index 000000000..180318077 --- /dev/null +++ b/docs/content/en/functions/transform/HTMLUnescape.md @@ -0,0 +1,30 @@ +--- +title: transform.HTMLUnescape +description: Returns the given string, replacing each HTML entity with its corresponding character. +categories: [] +keywords: [] +action: + aliases: [htmlUnescape] + related: + - functions/transform/HTMLEscape + returnType: string + signatures: [transform.HTMLUnescape INPUT] +aliases: [/functions/htmlunescape] +--- + +The `transform.HTMLUnescape` function replaces [HTML entities] with their corresponding characters. + +```go-html-template +{{ htmlUnescape "Lilo & Stitch" }} → Lilo & Stitch +{{ htmlUnescape "7 > 6" }} → 7 > 6 +``` + +In most contexts Go's [html/template] package will escape special characters. To bypass this behavior, pass the unescaped string through the [`safeHTML`] function. + +```go-html-template +{{ htmlUnescape "Lilo & Stitch" | safeHTML }} +``` + +[`safehtml`]: /functions/safe/html +[html entities]: https://developer.mozilla.org/en-us/docs/glossary/entity +[html/template]: https://pkg.go.dev/html/template diff --git a/docs/content/en/functions/transform/Highlight.md b/docs/content/en/functions/transform/Highlight.md new file mode 100644 index 000000000..29d0efdef --- /dev/null +++ b/docs/content/en/functions/transform/Highlight.md @@ -0,0 +1,107 @@ +--- +title: transform.Highlight +description: Renders code with a syntax highlighter. +categories: [] +keywords: [] +action: + aliases: [highlight] + related: + - functions/transform/CanHighlight + - functions/transform/HighlightCodeBlock + returnType: template.HTML + signatures: ['transform.Highlight INPUT LANG [OPTIONS]'] +aliases: [/functions/highlight] +toc: true +--- + +The `highlight` function uses the [Chroma] syntax highlighter, supporting over 200 languages with more than 40 available styles. + +## Arguments + +INPUT +: The code to highlight. + +LANG +: The language of the code to highlight. Choose from one of the [supported languages]. Case-insensitive. + +OPTIONS +: A map, or comma-separated list, of zero or more [options]. Set default values in [site configuration]. + +## Options + +lineNos +: Boolean. Default is `false`.\ +Display a number at the beginning of each line. + +lineNumbersInTable +: Boolean. Default is `true`.\ +Render the highlighted code in an HTML table with two cells. The left table cell contains the line numbers. The right table cell contains the code, allowing a user to select and copy the code without line numbers. Irrelevant if `lineNos` is `false`. + +anchorLineNos +: Boolean. Default is `false`.\ +Render each line number as an HTML anchor element, and set the `id` attribute of the surrounding `<span>` to the line number. Irrelevant if `lineNos` is `false`. + +lineAnchors +: String. Default is `""`.\ +When rendering a line number as an HTML anchor element, prepend this value to the `id` attribute of the surrounding `<span>`. This provides unique `id` attributes when a page contains two or more code blocks. Irrelevant if `lineNos` or `anchorLineNos` is `false`. + +lineNoStart +: Integer. Default is `1`.\ +The number to display at the beginning of the first line. Irrelevant if `lineNos` is `false`. + +hl_Lines +: String. Default is `""`.\ +A space-delimited list of lines to emphasize within the highlighted code. To emphasize lines 2, 3, 4, and 7, set this value to `2-4 7`. This option is independent of the `lineNoStart` option. + +hl_inline +: Boolean. Default is `false`.\ +Render the highlighted code without a wrapping container. + +style +: String. Default is `monokai`.\ +The CSS styles to apply to the highlighted code. See the [style gallery] for examples. Case-sensitive. + +noClasses +: Boolean. Default is `true`.\ +Use inline CSS styles instead of an external CSS file. To use an external CSS file, set this value to `false` and [generate the file with the hugo client][hugo client]. + +tabWidth +: Integer. Default is `4`.\ +Substitute this number of spaces for each tab character in your highlighted code. Irrelevant if `noClasses` is `false`. + +guessSyntax +: Boolean. Default is `false`.\ +If the `LANG` argument is blank or an unrecognized language, auto-detect the language if possible, otherwise use a fallback language. + +{{% note %}} +Instead of specifying both `lineNos` and `lineNumbersInTable`, you can use the following shorthand notation: + +lineNos=inline +: equivalent to `lineNos=true` and `lineNumbersInTable=false` + +lineNos=table +: equivalent to `lineNos=true` and `lineNumbersInTable=true` +{{% /note %}} + +## Examples + +```go-html-template +{{ $input := `fmt.Println("Hello World!")` }} +{{ transform.Highlight $input "go" }} + +{{ $input := `console.log('Hello World!');` }} +{{ $lang := "js" }} +{{ transform.Highlight $input $lang "lineNos=table, style=api" }} + +{{ $input := `echo "Hello World!"` }} +{{ $lang := "bash" }} +{{ $opts := dict "lineNos" "table" "style" "dracula" }} +{{ transform.Highlight $input $lang $opts }} +``` + +[Chroma]: https://github.com/alecthomas/chroma +[hugo client]: /commands/hugo_gen_chromastyles +[options]: #options +[site configuration]: /getting-started/configuration-markup#highlight +[style gallery]: https://xyproto.github.io/splash/docs/ +[supported languages]: /content-management/syntax-highlighting#list-of-chroma-highlighting-languages diff --git a/docs/content/en/functions/transform/HighlightCodeBlock.md b/docs/content/en/functions/transform/HighlightCodeBlock.md new file mode 100644 index 000000000..dc396bad0 --- /dev/null +++ b/docs/content/en/functions/transform/HighlightCodeBlock.md @@ -0,0 +1,38 @@ +--- +title: transform.HighlightCodeBlock +description: Highlights code received in context within a code block render hook. +categories: [] +keywords: [] +action: + aliases: [] + related: + - functions/transform/CanHighlight + - functions/transform/Highlight + returnType: highlight.HighlightResult + signatures: ['transform.HighlightCodeBlock CONTEXT [OPTIONS]'] +--- + +This function is only useful within a code block render hook. + +Given the context passed into a code block render hook, `transform.HighlightCodeBlock` returns a `HighlightResult` object with two methods. + +.Wrapped +: (`template.HTML`) Returns highlighted code wrapped in `<div>`, `<pre>`, and `<code>` elements. This is identical to the value returned by the transform.Highlight function. + +.Inner +: (`template.HTML`) Returns highlighted code without any wrapping elements, allowing you to create your own wrapper. + +```go-html-template +{{ $result := transform.HighlightCodeBlock . }} +{{ $result.Wrapped }} +``` + +To override the default [highlighting options]: + +```go-html-template +{{ $opts := merge .Options (dict "linenos" true) }} +{{ $result := transform.HighlightCodeBlock . $opts }} +{{ $result.Wrapped }} +``` + +[highlighting options]: /functions/transform/highlight/#options diff --git a/docs/content/en/functions/transform/Markdownify.md b/docs/content/en/functions/transform/Markdownify.md new file mode 100644 index 000000000..8fb1e48ce --- /dev/null +++ b/docs/content/en/functions/transform/Markdownify.md @@ -0,0 +1,31 @@ +--- +title: transform.Markdownify +description: Renders markdown to HTML. +categories: [] +keywords: [] +action: + aliases: [markdownify] + related: + - methods/page/RenderString + - methods/page/RenderShortcodes + returnType: template.HTML + signatures: [transform.Markdownify INPUT] +aliases: [/functions/markdownify] +--- + +```go-html-template +<h2>{{ .Title | markdownify }}</h2> +``` + +If the resulting HTML is a single paragraph, Hugo removes the wrapping `p` tags to produce inline HTML as required per the example above. + +To keep the wrapping `p` tags for a single paragraph, use the [`RenderString`] method on the `Page` object, setting the `display` option to `block`. + +[`RenderString`]: /methods/page/renderstring/ + +{{% note %}} +Although the `markdownify` function honors [markdown render hooks] when rendering markdown to HTML, use the `RenderString` method instead of `markdownify` if a render hook accesses `.Page` context. See issue [#9692] for details. + +[markdown render hooks]: /templates/render-hooks/ +[#9692]: https://github.com/gohugoio/hugo/issues/9692 +{{% /note %}} diff --git a/docs/content/en/functions/transform/Plainify.md b/docs/content/en/functions/transform/Plainify.md new file mode 100644 index 000000000..040145170 --- /dev/null +++ b/docs/content/en/functions/transform/Plainify.md @@ -0,0 +1,16 @@ +--- +title: transform.Plainify +description: Returns a string with all HTML tags removed. +categories: [] +keywords: [] +action: + aliases: [plainify] + related: [] + returnType: string + signatures: [transform.Plainify INPUT] +aliases: [/functions/plainify] +--- + +```go-html-template +{{ "<b>BatMan</b>" | plainify }} → BatMan +``` diff --git a/docs/content/en/functions/transform/Remarshal.md b/docs/content/en/functions/transform/Remarshal.md new file mode 100644 index 000000000..24ef4381d --- /dev/null +++ b/docs/content/en/functions/transform/Remarshal.md @@ -0,0 +1,92 @@ +--- +title: transform.Remarshal +description: Marshals a string of serialized data, or a map, into a string of serialized data in the specified format. +categories: [] +keywords: [] +action: + aliases: [] + related: + - functions/encoding/Jsonify + - functions/transform/Unmarshal + returnType: string + signatures: [transform.Remarshal FORMAT INPUT] +aliases: [/functions/transform.remarshal] +--- + +The format must be one of `json`, `toml`, `yaml`, or `xml`. If the input is a string of serialized data, it must be valid JSON, TOML, YAML, or XML. + +{{% note %}} +This function is primarily a helper for Hugo's documentation, used to convert configuration and front matter examples to JSON, TOML, and YAML. + +This is not a general purpose converter, and may change without notice if required for Hugo's documentation site. +{{% /note %}} + +Example 1 +: Convert a string of TOML to JSON. + +```go-html-template +{{ $s := ` + baseURL = 'https://example.org/' + languageCode = 'en-US' + title = 'ABC Widgets' +`}} +<pre>{{ transform.Remarshal "json" $s }}</pre> +``` + +Resulting HTML: + +```html +<pre>{ + "baseURL": "https://example.org/", + "languageCode": "en-US", + "title": "ABC Widgets" +} +</pre> +``` + +Rendered in browser: + +```text +{ + "baseURL": "https://example.org/", + "languageCode": "en-US", + "title": "ABC Widgets" +} +``` + +Example 2 +: Convert a map to YAML. + +```go-html-template +{{ $m := dict + "a" "Hugo rocks!" + "b" (dict "question" "What is 6x7?" "answer" 42) + "c" (slice "foo" "bar") +}} +<pre>{{ transform.Remarshal "yaml" $m }}</pre> +``` + +Resulting HTML: + +```html +<pre>a: Hugo rocks! +b: + answer: 42 + question: What is 6x7? +c: +- foo +- bar +</pre> +``` + +Rendered in browser: + +```text +a: Hugo rocks! +b: + answer: 42 + question: What is 6x7? +c: +- foo +- bar +``` diff --git a/docs/content/en/functions/transform/Unmarshal.md b/docs/content/en/functions/transform/Unmarshal.md new file mode 100644 index 000000000..bc2b663e3 --- /dev/null +++ b/docs/content/en/functions/transform/Unmarshal.md @@ -0,0 +1,292 @@ +--- +title: transform.Unmarshal +description: Parses serialized data and returns a map or an array. Supports CSV, JSON, TOML, YAML, and XML. +categories: [] +keywords: [] +action: + aliases: [unmarshal] + related: + - functions/transform/Remarshal + - functions/resources/Get + - functions/resources/GetRemote + - functions/encoding/Jsonify + returnType: any + signatures: ['transform.Unmarshal [OPTIONS] INPUT'] +toc: true +aliases: [/functions/transform.unmarshal] +--- + +The input can be a string or a [resource]. + +## Unmarshal a string + +```go-html-template +{{ $string := ` +title: Les Misérables +author: Victor Hugo +`}} + +{{ $book := unmarshal $string }} +{{ $book.title }} → Les Misérables +{{ $book.author }} → Victor Hugo +``` + +## Unmarshal a resource + +Use the `transform.Unmarshal` function with global, page, and remote resources. + +### Global resource + +A global resource is a file within the assets directory, or within any directory mounted to the assets directory. + +```text +assets/ +└── data/ + └── books.json +``` + +```go-html-template +{{ $data := "" }} +{{ $path := "data/books.json" }} +{{ with resources.Get $path }} + {{ with unmarshal . }} + {{ $data = . }} + {{ end }} +{{ else }} + {{ errorf "Unable to get global resource %q" $path }} +{{ end }} + +{{ range where $data "author" "Victor Hugo" }} + {{ .title }} → Les Misérables +{{ end }} +``` + +### Page resource + +A page resource is a file within a [page bundle]. + +```text +content/ +├── post/ +│ └── book-reviews/ +│ ├── books.json +│ └── index.md +└── _index.md +``` + +```go-html-template +{{ $data := "" }} +{{ $path := "books.json" }} +{{ with .Resources.Get $path }} + {{ with unmarshal . }} + {{ $data = . }} + {{ end }} +{{ else }} + {{ errorf "Unable to get page resource %q" $path }} +{{ end }} + +{{ range where $data "author" "Victor Hugo" }} + {{ .title }} → Les Misérables +{{ end }} +``` + +### Remote resource + +A remote resource is a file on a remote server, accessible via HTTP or HTTPS. + +```go-html-template +{{ $data := "" }} +{{ $url := "https://example.org/books.json" }} +{{ with resources.GetRemote $url }} + {{ with .Err }} + {{ errorf "%s" . }} + {{ else }} + {{ $data = . | transform.Unmarshal }} + {{ end }} +{{ else }} + {{ errorf "Unable to get remote resource %q" $url }} +{{ end }} + +{{ range where $data "author" "Victor Hugo" }} + {{ .title }} → Les Misérables +{{ end }} +``` + +[resource]: /getting-started/glossary/#resource +[page bundle]: /content-management/page-bundles + +## Options + +When unmarshaling a CSV file, provide an optional map of options. + +delimiter +: (`string`) The delimiter used, default is `,`. + +comment +: (`string`) The comment character used in the CSV. If set, lines beginning with the comment character without preceding whitespace are ignored. + +lazyQuotes {{< new-in 0.122.0 >}} +: (`bool`) If true, a quote may appear in an unquoted field and a non-doubled quote may appear in a quoted field. Default is `false`. + +```go-html-template +{{ $csv := "a;b;c" | transform.Unmarshal (dict "delimiter" ";") }} +``` + +## Working with XML + +When unmarshaling an XML file, do not include the root node when accessing data. For example, after unmarshaling the RSS feed below, access the feed title with `$data.channel.title`. + +```xml +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"> + <channel> + <title>Books on Example Site</title> + <link>https://example.org/books/</link> + <description>Recent content in Books on Example Site</description> + <language>en-US</language> + <atom:link href="https://example.org/books/index.xml" rel="self" type="application/rss+xml" /> + <item> + <title>The Hunchback of Notre Dame</title> + <description>Written by Victor Hugo</description> + <link>https://example.org/books/the-hunchback-of-notre-dame/</link> + <pubDate>Mon, 09 Oct 2023 09:27:12 -0700</pubDate> + <guid>https://example.org/books/the-hunchback-of-notre-dame/</guid> + </item> + <item> + <title>Les Misérables</title> + <description>Written by Victor Hugo</description> + <link>https://example.org/books/les-miserables/</link> + <pubDate>Mon, 09 Oct 2023 09:27:11 -0700</pubDate> + <guid>https://example.org/books/les-miserables/</guid> + </item> + </channel> +</rss> +``` + +Get the remote data: + +```go-html-template +{{ $data := "" }} +{{ $url := "https://example.org/books/index.xml" }} +{{ with resources.GetRemote $url }} + {{ with .Err }} + {{ errorf "%s" . }} + {{ else }} + {{ $data = . | transform.Unmarshal }} + {{ end }} +{{ else }} + {{ errorf "Unable to get remote resource %q" $url }} +{{ end }} +``` + +Inspect the data structure: + +```go-html-template +<pre>{{ jsonify (dict "indent" " ") $data }}</pre> +``` + +List the book titles: + +```go-html-template +{{ with $data.channel.item }} + <ul> + {{ range . }} + <li>{{ .title }}</li> + {{ end }} + </ul> +{{ end }} +``` + +Hugo renders this to: + +```html +<ul> + <li>The Hunchback of Notre Dame</li> + <li>Les Misérables</li> +</ul> +``` + +### XML attributes and namespaces + +Let's add a `lang` attribute to the `title` nodes of our RSS feed, and a namespaced node for the ISBN number: + +```xml +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<rss version="2.0" + xmlns:atom="http://www.w3.org/2005/Atom" + xmlns:isbn="http://schemas.isbn.org/ns/1999/basic.dtd" +> + <channel> + <title>Books on Example Site</title> + <link>https://example.org/books/</link> + <description>Recent content in Books on Example Site</description> + <language>en-US</language> + <atom:link href="https://example.org/books/index.xml" rel="self" type="application/rss+xml" /> + <item> + <title lang="fr">The Hunchback of Notre Dame</title> + <description>Written by Victor Hugo</description> + <isbn:number>9780140443530</isbn:number> + <link>https://example.org/books/the-hunchback-of-notre-dame/</link> + <pubDate>Mon, 09 Oct 2023 09:27:12 -0700</pubDate> + <guid>https://example.org/books/the-hunchback-of-notre-dame/</guid> + </item> + <item> + <title lang="en">Les Misérables</title> + <description>Written by Victor Hugo</description> + <isbn:number>9780451419439</isbn:number> + <link>https://example.org/books/les-miserables/</link> + <pubDate>Mon, 09 Oct 2023 09:27:11 -0700</pubDate> + <guid>https://example.org/books/les-miserables/</guid> + </item> + </channel> +</rss> +``` + +After retrieving the remote data, inspect the data structure: + +```go-html-template +<pre>{{ jsonify (dict "indent" " ") $data }}</pre> +``` + +Each item node looks like this: + +```json +{ + "description": "Written by Victor Hugo", + "guid": "https://example.org/books/the-hunchback-of-notre-dame/", + "link": "https://example.org/books/the-hunchback-of-notre-dame/", + "number": "9780140443530", + "pubDate": "Mon, 09 Oct 2023 09:27:12 -0700", + "title": { + "#text": "The Hunchback of Notre Dame", + "-lang": "fr" + } +} +``` + +The title keys do not begin with an underscore or a letter---they are not valid [identifiers]. Use the [`index`] function to access the values: + +```go-html-template +{{ with $data.channel.item }} + <ul> + {{ range . }} + {{ $title := index .title "#text" }} + {{ $lang := index .title "-lang" }} + {{ $ISBN := .number }} + <li>{{ $title }} ({{ $lang }}) {{ $ISBN }}</li> + {{ end }} + </ul> +{{ end }} +``` + +Hugo renders this to: + +```html +<ul> + <li>The Hunchback of Notre Dame (fr) 9780140443530</li> + <li>Les Misérables (en) 9780451419439</li> +</ul> +``` + +[`index`]: /functions/collections/indexfunction +[identifiers]: https://go.dev/ref/spec#Identifiers diff --git a/docs/content/en/functions/transform/XMLEscape.md b/docs/content/en/functions/transform/XMLEscape.md new file mode 100644 index 000000000..d0aafc4bd --- /dev/null +++ b/docs/content/en/functions/transform/XMLEscape.md @@ -0,0 +1,40 @@ +--- +title: transform.XMLEscape +description: Returns the given string, removing disallowed characters then escaping the result to its XML equivalent. +categories: [] +keywords: [] +action: + aliases: [] + related: [] + returnType: string + signatures: [transform.XMLEscape INPUT] +--- + +{{< new-in 0.121.0 >}} + +The `transform.XMLEscape` function removes [disallowed characters] as defined in the XML specification, then escapes the result by replacing the following characters with [HTML entities]: + +- `"` → `"` +- `'` → `'` +- `&` → `&` +- `<` → `<` +- `>` → `>` +- `\t` → `	` +- `\n` → `
` +- `\r` → `
` + +For example: + +```go-html-template +{{ transform.XMLEscape "<p>abc</p>" }} → <p>abc</p> +``` + +When using `transform.XMLEscape` in a template rendered by Go's [html/template] package, declare the string to be safe HTML to avoid double escaping. For example, in an RSS template: + +{{< code file="layouts/_default/rss.xml" >}} +<description>{{ .Summary | transform.XMLEscape | safeHTML }}</description> +{{< /code >}} + +[disallowed characters]: https://www.w3.org/TR/xml/#charsets +[html entities]: https://developer.mozilla.org/en-us/docs/glossary/entity +[html/template]: https://pkg.go.dev/html/template diff --git a/docs/content/en/functions/transform/_index.md b/docs/content/en/functions/transform/_index.md new file mode 100644 index 000000000..70e286b24 --- /dev/null +++ b/docs/content/en/functions/transform/_index.md @@ -0,0 +1,12 @@ +--- +title: Transform functions +linkTitle: transform +description: Template functions to transform values from one format to another. +categories: [] +keywords: [] +menu: + docs: + parent: functions +--- + +Use these functions to transform values from one format to another. diff --git a/docs/content/en/functions/urls/AbsLangURL.md b/docs/content/en/functions/urls/AbsLangURL.md new file mode 100644 index 000000000..876552bb7 --- /dev/null +++ b/docs/content/en/functions/urls/AbsLangURL.md @@ -0,0 +1,67 @@ +--- +title: urls.AbsLangURL +description: Returns an absolute URL with a language prefix, if any. +categories: [] +keywords: [] +action: + aliases: [absLangURL] + related: + - functions/urls/AbsURL + - functions/urls/RelLangURL + - functions/urls/RelURL + returnType: string + signatures: [urls.AbsLangURL INPUT] +aliases: [/functions/abslangurl] +--- + +Use this function with both monolingual and multilingual configurations. The URL returned by this function depends on: + +- Whether the input begins with a slash +- The `baseURL` in site configuration +- The language prefix, if any + +In examples that follow, the project is multilingual with content in both Español (`es`) and English (`en`). The default language is Español. The returned values are from the English site. + +### Input does not begin with a slash + +If the input does not begin with a slash, the resulting URL will be correct regardless of the `baseURL`. + +With `baseURL = https://example.org/` + +```go-html-template +{{ absLangURL "" }} → https://example.org/en/ +{{ absLangURL "articles" }} → https://example.org/en/articles +{{ absLangURL "style.css" }} → https://example.org/en/style.css +``` + +With `baseURL = https://example.org/docs/` + +```go-html-template +{{ absLangURL "" }} → https://example.org/docs/en/ +{{ absLangURL "articles" }} → https://example.org/docs/en/articles +{{ absLangURL "style.css" }} → https://example.org/docs/en/style.css +``` + +### Input begins with a slash + +If the input begins with a slash, the resulting URL will be incorrect when the `baseURL` includes a subdirectory. With a leading slash, the function returns a URL relative to the protocol+host section of the `baseURL`. + +With `baseURL = https://example.org/` + +```go-html-template +{{ absLangURL "/" }} → https://example.org/en/ +{{ absLangURL "/articles" }} → https://example.org/en/articles +{{ absLangURL "/style.css" }} → https://example.org/en/style.css +``` + +With `baseURL = https://example.org/docs/` + +```go-html-template +{{ absLangURL "/" }} → https://example.org/en/ +{{ absLangURL "/articles" }} → https://example.org/en/articles +{{ absLangURL "/style.css" }} → https://example.org/en/style.css +``` + +{{% note %}} +The last three examples are not desirable in most situations. As a best practice, never include a leading slash when using this function. +{{% /note %}} diff --git a/docs/content/en/functions/urls/AbsURL.md b/docs/content/en/functions/urls/AbsURL.md new file mode 100644 index 000000000..5b027ae84 --- /dev/null +++ b/docs/content/en/functions/urls/AbsURL.md @@ -0,0 +1,66 @@ +--- +title: urls.AbsURL +description: Returns an absolute URL. +categories: [] +keywords: [] +action: + aliases: [absURL] + related: + - functions/urls/AbsLangURL + - functions/urls/RelLangURL + - functions/urls/RelURL + returnType: string + signatures: [urls.AbsURL INPUT] +aliases: [/functions/absurl] +--- + +With multilingual configurations, use the [`absLangURL`] function instead. The URL returned by this function depends on: + +- Whether the input begins with a slash +- The `baseURL` in site configuration + +### Input does not begin with a slash + +If the input does not begin with a slash, the resulting URL will be correct regardless of the `baseURL`. + +With `baseURL = https://example.org/` + +```go-html-template +{{ absURL "" }} → https://example.org/ +{{ absURL "articles" }} → https://example.org/articles +{{ absURL "style.css" }} → https://example.org/style.css +``` + +With `baseURL = https://example.org/docs/` + +```go-html-template +{{ absURL "" }} → https://example.org/docs/ +{{ absURL "articles" }} → https://example.org/docs/articles +{{ absURL "style.css" }} → https://example.org/docs/style.css +``` + +#### Input begins with a slash + +If the input begins with a slash, the resulting URL will be incorrect when the `baseURL` includes a subdirectory. With a leading slash, the function returns a URL relative to the protocol+host section of the `baseURL`. + +With `baseURL = https://example.org/` + +```go-html-template +{{ absURL "/" }} → https://example.org/ +{{ absURL "/articles" }} → https://example.org/articles +{{ absURL "/style.css" }} → https://example.org/style.css +``` + +With `baseURL = https://example.org/docs/` + +```go-html-template +{{ absURL "/" }} → https://example.org/ +{{ absURL "/articles" }} → https://example.org/articles +{{ absURL "/style.css" }} → https://example.org/style.css +``` + +{{% note %}} +The last three examples are not desirable in most situations. As a best practice, never include a leading slash when using this function. +{{% /note %}} + +[`absLangURL`]: /functions/urls/abslangurl/ diff --git a/docs/content/en/functions/urls/Anchorize.md b/docs/content/en/functions/urls/Anchorize.md new file mode 100644 index 000000000..72b3d54a9 --- /dev/null +++ b/docs/content/en/functions/urls/Anchorize.md @@ -0,0 +1,37 @@ +--- +title: urls.Anchorize +description: Returns the given string, sanitized for usage in an HTML id attribute. +categories: [] +keywords: [] +action: + aliases: [anchorize] + related: + - functions/urls/URLize + returnType: string + signatures: [urls.Anchorize INPUT] +aliases: [/functions/anchorize] +--- + +{{% include "/functions/urls/_common/anchorize-vs-urlize.md" %}} + +## Sanitizing logic + +With the default markdown renderer, Goldmark, the sanitizing logic is controlled by your site configuration: + +{{< code-toggle file=hugo >}} +[markup.goldmark.parser] +autoHeadingIDType = 'github' +{{< /code-toggle >}} + +This controls the behavior of the `anchorize` function and the generation of heading IDs when rendering markdown to HTML. + +Set `autoHeadingIDType` to one of: + +github +: Compatible with GitHub. This is the default, and strongly recommended. + +github-ascii +: Similar to the "github" setting, but removes non-ASCII characters. + +blackfriday +: Provided for backwards compatibility with Hugo v0.59.1 and earlier. This option will be removed in a future release. diff --git a/docs/content/en/functions/urls/JoinPath.md b/docs/content/en/functions/urls/JoinPath.md new file mode 100644 index 000000000..7acecb506 --- /dev/null +++ b/docs/content/en/functions/urls/JoinPath.md @@ -0,0 +1,30 @@ +--- +title: urls.JoinPath +description: Joins the provided elements into a URL string and cleans the result of any ./ or ../ elements. If the argument list is empty, JoinPath returns an empty string. +categories: [] +keywords: [] +action: + aliases: [] + related: + - functions/path/Join + returnType: string + signatures: [urls.JoinPath ELEMENT...] +aliases: [/functions/urls.joinpath] +--- + +{{< new-in 0.112.0 >}} + +```go-html-template +{{ urls.JoinPath }} → "" (empty string) +{{ urls.JoinPath "" }} → / +{{ urls.JoinPath "a" }} → a +{{ urls.JoinPath "a" "b" }} → a/b +{{ urls.JoinPath "/a" "b" }} → /a/b +{{ urls.JoinPath "https://example.org" "b" }} → https://example.org/b + +{{ urls.JoinPath (slice "a" "b") }} → a/b +``` + +Unlike the [`path.Join`] function, `urls.JoinPath` retains consecutive leading slashes. + +[`path.Join`]: /functions/path/join diff --git a/docs/content/en/functions/urls/Parse.md b/docs/content/en/functions/urls/Parse.md new file mode 100644 index 000000000..2eb4eeadf --- /dev/null +++ b/docs/content/en/functions/urls/Parse.md @@ -0,0 +1,33 @@ +--- +title: urls.Parse +description: Parses a URL into a URL structure. +categories: [] +keywords: [] +action: + aliases: [] + related: [] + returnType: url.URL + signatures: [urls.Parse URL] +aliases: [/functions/urls.parse] +--- + +The `urls.Parse` function parses a URL into a [URL structure](https://godoc.org/net/url#URL). The URL may be relative (a path, without a host) or absolute (starting with a [scheme]). Hugo throws an error when parsing an invalid URL. + +[scheme]: https://www.iana.org/assignments/uri-schemes/uri-schemes.xhtml#uri-schemes-1 + +```go-html-template +{{ $url := "https://example.org:123/foo?a=6&b=7#bar" }} +{{ $u := urls.Parse $url }} + +{{ $u.IsAbs }} → true +{{ $u.Scheme }} → https +{{ $u.Host }} → example.org:123 +{{ $u.Hostname }} → example.org +{{ $u.RequestURI }} → /foo?a=6&b=7 +{{ $u.Path }} → /foo +{{ $u.Query }} → map[a:[6] b:[7]] +{{ $u.Query.a }} → [6] +{{ $u.Query.Get "a" }} → 6 +{{ $u.Query.Has "b" }} → true +{{ $u.Fragment }} → bar +``` diff --git a/docs/content/en/functions/urls/Ref.md b/docs/content/en/functions/urls/Ref.md new file mode 100644 index 000000000..6cd97f030 --- /dev/null +++ b/docs/content/en/functions/urls/Ref.md @@ -0,0 +1,63 @@ +--- +title: urls.Ref +description: Returns the absolute permalink to a page at the given path. +categories: [] +keywords: [] +action: + aliases: [ref] + related: + - functions/urls/RelRef + - methods/page/Ref + - methods/page/RelRef + returnType: string + signatures: + - urls.Ref PAGE PATH + - urls.Ref PAGE OPTIONS +aliases: [/functions/ref] +--- + +The first argument is the context of the page from which to resolve relative paths, typically the current page. + +The second argument is a path to a page, with or without a file extension, with or without an anchor. A path without a leading `/` is first resolved relative to the given context, then to the remainder of the site. Alternatively, provide an [options map](#options) instead of a path. + +```go-html-template +{{ ref . "about" }} +{{ ref . "about#anchor" }} +{{ ref . "about.md" }} +{{ ref . "about.md#anchor" }} +{{ ref . "#anchor" }} +{{ ref . "/blog/my-post" }} +{{ ref . "/blog/my-post.md" }} +``` + +## Options + +Instead of specifying a path, you can also provide an options map: + +path +: (`string`) The path to the page, relative to the content directory. Required. + +lang +: (`string`) The language (site) to search for the page. Default is the current language. Optional. + +outputFormat +: (`string`) The output format to search for the page. Default is the current output format. Optional. + +To return the absolute permalink to another language version of a page: + +```go-html-template +{{ ref . (dict "path" "about.md" "lang" "fr") }} +``` + +To return the absolute permalink to another Output Format of a page: + +```go-html-template +{{ ref . (dict "path" "about.md" "outputFormat" "rss") }} +``` + +By default, Hugo will throw an error and fail the build if it cannot resolve the path. You can change this to a warning in your site configuration, and specify a URL to return when the path cannot be resolved. + +{{< code-toggle file=hugo >}} +refLinksErrorLevel = 'warning' +refLinksNotFoundURL = '/some/other/url' +{{< /code-toggle >}} diff --git a/docs/content/en/functions/urls/RelLangURL.md b/docs/content/en/functions/urls/RelLangURL.md new file mode 100644 index 000000000..2c1037038 --- /dev/null +++ b/docs/content/en/functions/urls/RelLangURL.md @@ -0,0 +1,67 @@ +--- +title: urls.RelLangURL +description: Returns a relative URL with a language prefix, if any. +categories: [] +keywords: [] +action: + aliases: [relLangURL] + related: + - functions/urls/AbsLangURL + - functions/urls/AbsURL + - functions/urls/RelURL + returnType: string + signatures: [urls.RelLangURL INPUT] +aliases: [/functions/rellangurl] +--- + +Use this function with both monolingual and multilingual configurations. The URL returned by this function depends on: + +- Whether the input begins with a slash +- The `baseURL` in site configuration +- The language prefix, if any + +In examples that follow, the project is multilingual with content in both Español (`es`) and English (`en`). The default language is Español. The returned values are from the English site. + +### Input does not begin with a slash + +If the input does not begin with a slash, the resulting URL will be correct regardless of the `baseURL`. + +With `baseURL = https://example.org/` + +```go-html-template +{{ relLangURL "" }} → /en/ +{{ relLangURL "articles" }} → /en/articles +{{ relLangURL "style.css" }} → /en/style.css +``` + +With `baseURL = https://example.org/docs/` + +```go-html-template +{{ relLangURL "" }} → /docs/en/ +{{ relLangURL "articles" }} → /docs/en/articles +{{ relLangURL "style.css" }} → /docs/en/style.css +``` + +#### Input begins with a slash + +If the input begins with a slash, the resulting URL will be incorrect when the `baseURL` includes a subdirectory. With a leading slash, the function returns a URL relative to the protocol+host section of the `baseURL`. + +With `baseURL = https://example.org/` + +```go-html-template +{{ relLangURL "/" }} → /en/ +{{ relLangURL "/articles" }} → /en/articles +{{ relLangURL "/style.css" }} → /en/style.css +``` + +With `baseURL = https://example.org/docs/` + +```go-html-template +{{ relLangURL "/" }} → /en/ +{{ relLangURL "/articles" }} → /en/articles +{{ relLangURL "/style.css" }} → /en/style.css +``` + +{{% note %}} +The last three examples are not desirable in most situations. As a best practice, never include a leading slash when using this function. +{{% /note %}} diff --git a/docs/content/en/functions/urls/RelRef.md b/docs/content/en/functions/urls/RelRef.md new file mode 100644 index 000000000..6b45b2131 --- /dev/null +++ b/docs/content/en/functions/urls/RelRef.md @@ -0,0 +1,70 @@ +--- +title: urls.RelRef +description: Returns the relative permalink to a page at the given path. +categories: [] +keywords: [] +action: + aliases: [relref] + related: + - functions/urls/Ref + - methods/page/Ref + - methods/page/RelRef + returnType: string + signatures: + - urls.RelRef PAGE PATH + - urls.RelRef PAGE OPTIONS +aliases: [/functions/relref] +--- + +The first argument is the context of the page from which to resolve relative paths, typically the current page. + +The second argument is a path to a page, with or without a file extension, with or without an anchor. A path without a leading `/` is first resolved relative to the given context, then to the remainder of the site. Alternatively, provide an [options map](#options) instead of a path. +. +```go-html-template +{{ relref . "about" }} +{{ relref . "about#anchor" }} +{{ relref . "about.md" }} +{{ relref . "about.md#anchor" }} +{{ relref . "#anchor" }} +{{ relref . "/blog/my-post" }} +{{ relref . "/blog/my-post.md" }} +``` + +The permalink returned is relative to the protocol+host portion of the baseURL specified in the site configuration. For example: + +Code|baseURL|Permalink +:--|:--|:-- +`{{ relref . "/about" }}`|`https://example.org/`|`/about/` +`{{ relref . "/about" }}`|`https://example.org/x/`|`/x/about/` + +## Options + +Instead of specifying a path, you can also provide an options map: + +path +: (`string`) The path to the page, relative to the content directory. Required. + +lang +: (`string`) The language (site) to search for the page. Default is the current language. Optional. + +outputFormat +: (`string`) The output format to search for the page. Default is the current output format. Optional. + +To return the relative permalink to another language version of a page: + +```go-html-template +{{ relref . (dict "path" "about.md" "lang" "fr") }} +``` + +To return the relative permalink to another Output Format of a page: + +```go-html-template +{{ relref . (dict "path" "about.md" "outputFormat" "rss") }} +``` + +By default, Hugo will throw an error and fail the build if it cannot resolve the path. You can change this to a warning in your site configuration, and specify a URL to return when the path cannot be resolved. + +{{< code-toggle file=hugo >}} +refLinksErrorLevel = 'warning' +refLinksNotFoundURL = '/some/other/url' +{{< /code-toggle >}} diff --git a/docs/content/en/functions/urls/RelURL.md b/docs/content/en/functions/urls/RelURL.md new file mode 100644 index 000000000..9320c2827 --- /dev/null +++ b/docs/content/en/functions/urls/RelURL.md @@ -0,0 +1,66 @@ +--- +title: urls.RelURL +description: Returns a relative URL. +categories: [] +keywords: [] +action: + aliases: [relURL] + related: + - functions/urls/AbsLangURL + - functions/urls/AbsURL + - functions/urls/RelLangURL + returnType: string + signatures: [urls.RelURL INPUT] +aliases: [/functions/relurl] +--- + +With multilingual configurations, use the [`relLangURL`] function instead. The URL returned by this function depends on: + +- Whether the input begins with a slash +- The `baseURL` in site configuration + +### Input does not begin with a slash + +If the input does not begin with a slash, the resulting URL will be correct regardless of the `baseURL`. + +With `baseURL = https://example.org/` + +```go-html-template +{{ relURL "" }} → / +{{ relURL "articles" }} → /articles +{{ relURL "style.css" }} → /style.css +``` + +With `baseURL = https://example.org/docs/` + +```go-html-template +{{ relURL "" }} → /docs/ +{{ relURL "articles" }} → /docs/articles +{{ relURL "style.css" }} → /docs/style.css +``` + +#### Input begins with a slash + +If the input begins with a slash, the resulting URL will be incorrect when the `baseURL` includes a subdirectory. With a leading slash, the function returns a URL relative to the protocol+host section of the `baseURL`. + +With `baseURL = https://example.org/` + +```go-html-template +{{ relURL "/" }} → / +{{ relURL "/articles" }} → /articles +{{ relURL "style.css" }} → /style.css +``` + +With `baseURL = https://example.org/docs/` + +```go-html-template +{{ relURL "/" }} → / +{{ relURL "/articles" }} → /articles +{{ relURL "/style.css" }} → /style.css +``` + +{{% note %}} +The last three examples are not desirable in most situations. As a best practice, never include a leading slash when using this function. +{{% /note %}} + +[`relLangURL`]: /functions/urls/rellangurl/ diff --git a/docs/content/en/functions/urls/URLize.md b/docs/content/en/functions/urls/URLize.md new file mode 100644 index 000000000..bf44a82d1 --- /dev/null +++ b/docs/content/en/functions/urls/URLize.md @@ -0,0 +1,63 @@ +--- +title: urls.URLize +description: Returns the given string, sanitized for usage in a URL. +categories: [] +keywords: [] +action: + aliases: [urlize] + related: + - functions/urls/Anchorize + returnType: string + signatures: [urls.URLize INPUT] +aliases: [/functions/urlize] +--- + +{{% include "/functions/urls/_common/anchorize-vs-urlize.md" %}} + +## Example + +Use the `urlize` function to create a link to a [term] page. + +Consider this site configuration: + +{{< code-toggle file=hugo >}} +[taxonomies] +author = 'authors' +{{< /code-toggle >}} + +And this front matter: + +{{< code-toggle file=content/books/les-miserables.md fm=true >}} +title = 'Les Misérables' +authors = ['Victor Hugo'] +{{< /code-toggle >}} + +The published site will have this structure: + +```text +public/ +├── authors/ +│ ├── victor-hugo/ +│ │ └── index.html +│ └── index.html +├── books/ +│ ├── les-miserables/ +│ │ └── index.html +│ └── index.html +└── index.html +``` + +To create a link to the term page: + +```go-html-template +{{ $taxonomy := "authors" }} +{{ $term := "Victor Hugo" }} +{{ with index .Site.Taxonomies $taxonomy (urlize $term) }} + <a href="{{ .Page.RelPermalink }}">{{ .Page.LinkTitle }}</a> +{{ end }} +``` + +To generate a list of term pages associated with a given content page, use the [`GetTerms`] method on a `Page` object. + +[`GetTerms`]: /methods/page/getterms/ +[term]: /getting-started/glossary/#term diff --git a/docs/content/en/functions/urls/_common/_index.md b/docs/content/en/functions/urls/_common/_index.md new file mode 100644 index 000000000..47d5812fb --- /dev/null +++ b/docs/content/en/functions/urls/_common/_index.md @@ -0,0 +1,13 @@ +--- +cascade: + _build: + list: never + publishResources: false + render: never +--- + +<!-- +Files within this headless branch bundle are markdown snippets. Each file must contain front matter delimiters, though front matter fields are not required. + +Include the rendered content using the "include" shortcode. +--> diff --git a/docs/content/en/functions/urls/_common/anchorize-vs-urlize.md b/docs/content/en/functions/urls/_common/anchorize-vs-urlize.md new file mode 100644 index 000000000..0f01bcf78 --- /dev/null +++ b/docs/content/en/functions/urls/_common/anchorize-vs-urlize.md @@ -0,0 +1,35 @@ +--- +# Do not remove front matter. +--- + +The [`anchorize`] and [`urlize`] functions are similar: + +[`anchorize`]: /functions/urls/anchorize +[`urlize`]: /functions/urls/urlize + +- Use the `anchorize` function to generate an HTML `id` attribute value +- Use the `urlize` function to sanitize a string for usage in a URL + +For example: + +```go-html-template +{{ $s := "A B C" }} +{{ $s | anchorize }} → a-b-c +{{ $s | urlize }} → a-b-c + +{{ $s := "a b c" }} +{{ $s | anchorize }} → a-b---c +{{ $s | urlize }} → a-b-c + +{{ $s := "< a, b, & c >" }} +{{ $s | anchorize }} → -a-b--c- +{{ $s | urlize }} → a-b-c + +{{ $s := "main.go" }} +{{ $s | anchorize }} → maingo +{{ $s | urlize }} → main.go + +{{ $s := "Hugö" }} +{{ $s | anchorize }} → hugö +{{ $s | urlize }} → hug%C3%B6 +``` diff --git a/docs/content/en/functions/urls/_index.md b/docs/content/en/functions/urls/_index.md new file mode 100644 index 000000000..5f16feeeb --- /dev/null +++ b/docs/content/en/functions/urls/_index.md @@ -0,0 +1,12 @@ +--- +title: URL functions +linkTitle: urls +description: Template functions to work with URLs. +categories: [] +keywords: [] +menu: + docs: + parent: functions +--- + +Use these functions to work with URLs. diff --git a/docs/content/en/getting-started/_index.md b/docs/content/en/getting-started/_index.md new file mode 100644 index 000000000..780b96a62 --- /dev/null +++ b/docs/content/en/getting-started/_index.md @@ -0,0 +1,20 @@ +--- +title: Getting started +linkTitle: Overview +description: Quick start and guides for installing Hugo on your preferred operating system. +categories: [] +keywords: [] +menu: + docs: + identifier: getting-started-overview + parent: getting-started + weight: 10 +weight: 10 +aliases: [/overview/introduction/] +--- + +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/ diff --git a/docs/content/en/getting-started/configuration-markup.md b/docs/content/en/getting-started/configuration-markup.md new file mode 100644 index 000000000..607301d3a --- /dev/null +++ b/docs/content/en/getting-started/configuration-markup.md @@ -0,0 +1,218 @@ +--- +title: Configure markup +description: Configure rendering of markup to HTML. +categories: [getting started,fundamentals] +keywords: [configuration,highlighting] +menu: + docs: + parent: getting-started + weight: 50 +weight: 50 +slug: configuration-markup +toc: true +--- + +## Default handler + +By default, Hugo uses [Goldmark] to render markdown to HTML. + +{{< code-toggle file=hugo >}} +[markup] +defaultMarkdownHandler = 'goldmark' +{{< /code-toggle >}} + +Files with the `.md` or `.markdown` extension are processed as markdown, provided that you have not specified a different [content format] using the `markup` field in front matter. + +To use a different renderer for markdown files, specify one of `asciidocext`, `org`, `pandoc`, or `rst` in your site configuration. + +defaultMarkdownHandler|Description +:--|:-- +`asciidocext`|[AsciiDoc] +`goldmark`|[Goldmark] +`org`|[Emacs Org Mode] +`pandoc`|[Pandoc] +`rst`|[reStructuredText] + +To use Asciidoc, Pandoc, or reStructuredText you must install the relevant renderer and update your [security policy]. + +{{% note %}} +Unless you need a unique capability provided by one of the alternate markdown handlers, we strongly recommend that you use the default setting. Goldmark is fast, well maintained, conforms to the [CommonMark] specification, and is compatible with [GitHub Flavored Markdown] (GFM). + +[commonmark]: https://spec.commonmark.org/0.30/ +[github flavored markdown]: https://github.github.com/gfm/ +{{% /note %}} + +[asciidoc]: https://asciidoc.org/ +[content format]: /content-management/formats/#list-of-content-formats +[emacs org mode]: https://orgmode.org/ +[goldmark]: https://github.com/yuin/goldmark/ +[pandoc]: https://pandoc.org/ +[restructuredtext]: https://docutils.sourceforge.io/rst.html +[security policy]: /about/security-model/#security-policy + +## Goldmark + +This is the default configuration for the Goldmark markdown renderer: + +{{< code-toggle config=markup.goldmark />}} + +For details on the extensions, refer to the [Goldmark documentation](https://github.com/yuin/goldmark/#built-in-extensions). + +Some settings explained: + +hardWraps +: By default, Goldmark ignores newlines within a paragraph. Set to `true` to render newlines as `<br>` elements. + +unsafe +: By default, Goldmark does not render raw HTML and potentially dangerous links. If you have lots of inline HTML and/or JavaScript, you may need to turn this on. + +typographer +: The typographer extension replaces certain character combinations with HTML entities as specified below: + +Markdown|Replaced by|Description +:--|:--|:-- +`...`|`…`|horizontal ellipsis +`'`|`’`|apostrophe +`--`|`–`|en dash +`---`|`—`|em dash +`«`|`«`|left angle quote +`“`|`“`|left double quote +`‘`|`‘`|left single quote +`»`|`»`|right angle quote +`”`|`”`|right double quote +`’`|`’`|right single quote + +attribute +: Enable custom attribute support for titles and blocks by adding attribute lists inside single curly brackets (`{.myclass class="class1 class2" }`) and placing it _after the Markdown element it decorates_, on the same line for titles and on a new line directly below for blocks. + +Hugo supports adding attributes (e.g. CSS classes) to Markdown blocks, e.g. tables, lists, paragraphs etc. + +A blockquote with a CSS class: + +```md +> foo +> bar +{.myclass} +``` + +There are some current limitations: For tables you can currently only apply it to the full table, and for lists the `ul`/`ol`-nodes only, e.g.: + +```md +* Fruit + * Apple + * Orange + * Banana + {.fruits} +* Dairy + * Milk + * Cheese + {.dairies} +{.list} +``` + +Note that attributes in [code fences](/content-management/syntax-highlighting/#highlighting-in-code-fences) must come after the opening tag, with any other highlighting processing instruction, e.g.: + +````txt +```go {.myclass linenos=table,hl_lines=[8,"15-17"],linenostart=199} +// ... code +``` +```` + +autoHeadingIDType ("github") +: The strategy used for creating auto IDs (anchor names). Available types are `github`, `github-ascii` and `blackfriday`. `github` produces GitHub-compatible IDs, `github-ascii` will drop any non-ASCII characters after accent normalization, and `blackfriday` will make the IDs compatible with Blackfriday, the default Markdown engine before Hugo 0.60. Note that if Goldmark is your default Markdown engine, this is also the strategy used in the [anchorize](/functions/urls/anchorize) template func. + +## Asciidoc + +This is the default configuration for the AsciiDoc markdown renderer: + +{{< code-toggle config=markup.asciidocExt />}} + +attributes +: (`map`) Variables to be referenced in your AsciiDoc file. This is a list of variable name/value maps. See Asciidoctor’s [attributes]. + +[attributes]: https://asciidoctor.org/docs/asciidoc-syntax-quick-reference/#attributes-and-substitutions + +backend: +: (`string`) Don’t change this unless you know what you are doing. + +extensions +: (`[]string`) Possible extensions are `asciidoctor-html5s`, `asciidoctor-bibtex`, `asciidoctor-diagram`, `asciidoctor-interdoc-reftext`, `asciidoctor-katex`, `asciidoctor-latex`, `asciidoctor-mathematical`, and `asciidoctor-question`. + +failureLevel +: (`string`) The minimum logging level that triggers a non-zero exit code (failure). + +noHeaderOrFooter +: (`bool`) Output an embeddable document, which excludes the header, the footer, and everything outside the body of the document. Don’t change this unless you know what you are doing. + +preserveTOC +: (`bool`) By default, Hugo removes the table of contents generated by Asciidoctor and provides it through the built-in variable `.TableOfContents` to enable further customization and better integration with the various Hugo themes. This option can be set to true to preserve Asciidoctor’s TOC in the generated page. + +safeMode +: (`string`) Safe mode level `unsafe`, `safe`, `server`, or `secure`. Don’t change this unless you know what you are doing. + +sectionNumbers +: (`bool`) Auto-number section titles. + +trace +: (`bool`) Include backtrace information on errors. + +verbose +: (`bool`) Verbosely print processing information and configuration file checks to stderr. + +workingFolderCurrent +: (`bool`) Sets the working directory to be the same as that of the AsciiDoc file being processed, so that [include] will work with relative paths. This setting uses the asciidoctor cli parameter --base-dir and attribute outdir=. For rendering diagrams with [asciidoctor-diagram], `workingFolderCurrent` must be set to `true`. + +[asciidoctor-diagram]: https://asciidoctor.org/docs/asciidoctor-diagram/ +[include]: https://asciidoctor.org/docs/asciidoc-syntax-quick-reference/#include-files + +Notice that for security concerns only extensions that do not have path separators (either `\`, `/` or `.`) are allowed. That means that extensions can only be invoked if they are in the Ruby's `$LOAD_PATH` (ie. most likely, the extension has been installed by the user). Any extension declared relative to the website's path will not be accepted. + +Example of how to set extensions and attributes: + +```yml +[markup.asciidocExt] + extensions = ["asciidoctor-html5s", "asciidoctor-diagram"] + workingFolderCurrent = true + [markup.asciidocExt.attributes] + my-base-url = "https://example.com/" + my-attribute-name = "my value" +``` + +In a complex Asciidoctor environment it is sometimes helpful to debug the exact call to your external helper with all +parameters. Run Hugo with `-v`. You will get an output like + +```txt +INFO 2019/12/22 09:08:48 Rendering book-as-pdf.adoc with C:\Ruby26-x64\bin\asciidoctor.bat using asciidoc args [--no-header-footer -r asciidoctor-html5s -b html5s -r asciidoctor-diagram --base-dir D:\prototypes\hugo_asciidoc_ddd\docs -a outdir=D:\prototypes\hugo_asciidoc_ddd\build -] ... +``` + +## Highlight + +This is the default `highlight` configuration. Note that some of these settings can be set per code block, see [Syntax Highlighting](/content-management/syntax-highlighting/). + +{{< code-toggle config=markup.highlight />}} + +For `style`, see these galleries: + +* [Short snippets](https://xyproto.github.io/splash/docs/all.html) +* [Long snippets](https://xyproto.github.io/splash/docs/longer/all.html) + +For CSS, see [Generate Syntax Highlighter CSS](/content-management/syntax-highlighting/#generate-syntax-highlighter-css). + +## Table of contents + +{{< code-toggle config=markup.tableOfContents />}} + +These settings only works for the Goldmark renderer: + +startLevel +: The heading level, values starting at 1 (`h1`), to start render the table of contents. + +endLevel +: The heading level, inclusive, to stop render the table of contents. + +ordered +: If `true`, generates an ordered list instead of an unordered list. + +## Render hooks + +See [Markdown Render Hooks](/templates/render-hooks/). diff --git a/docs/content/en/getting-started/configuration.md b/docs/content/en/getting-started/configuration.md new file mode 100644 index 000000000..3ce0077ba --- /dev/null +++ b/docs/content/en/getting-started/configuration.md @@ -0,0 +1,788 @@ +--- +title: Configure Hugo +linkTitle: Configuration +description: How to configure your Hugo site. +categories: [getting started,fundamentals] +keywords: [configuration,toml,yaml,json] +menu: + docs: + parent: getting-started + weight: 40 +weight: 40 +toc: true +aliases: [/overview/source-directory/,/overview/configuration/] +--- + +## Configuration file + +Create a site configuration file in the root of your project directory, naming it `hugo.toml`, `hugo.yaml`, or `hugo.json`, with that order of precedence. + +```text +my-project/ +└── hugo.toml +``` + +{{% note %}} +With v0.109.0 and earlier the basename of the site configuration file was `config` instead of `hugo`. You can use either, but should transition to the new naming convention when practical. +{{% /note %}} + +A simple example: + +{{< code-toggle file=hugo >}} +baseURL = 'https://example.org/' +languageCode = 'en-us' +title = 'ABC Widgets, Inc.' +[params] +subtitle = 'The Best Widgets on Earth' +[params.contact] +email = '[email protected]' +phone = '+1 202-555-1212' +{{< /code-toggle >}} + +To use a different configuration file when building your site, use the `--config` flag: + +```sh +hugo --config other.toml +``` + +Combine two or more configuration files, with left-to-right precedence: + +```sh +hugo --config a.toml,b.yaml,c.json +``` + +{{% note %}} +See the specifications for each file format: [TOML], [YAML], and [JSON]. + +[TOML]: https://toml.io/en/latest +[YAML]: https://yaml.org/spec/ +[JSON]: https://datatracker.ietf.org/doc/html/rfc7159 +{{% /note %}} + +## Configuration directory + +Instead of a single site configuration file, split your configuration by [environment], root configuration key, and language. For example: + +[environment]: /getting-started/glossary/#environment + +```text +my-project/ +└── config/ + ├── _default/ + │ ├── hugo.toml + │ ├── menus.en.toml + │ ├── menus.de.toml + │ └── params.toml + ├── production/ + │ ├── hugo.toml + │ └── params.toml + └── staging/ + ├── hugo.toml + └── params.toml +``` + +The root configuration keys are `build`, `caches`, `cascade`, `deployment`, `frontmatter`, `imaging`, `languages`, `markup`, `mediatypes`, `menus`, `minify`, `module`, `outputformats`, `outputs`, `params`, `permalinks`, `privacy`, `related`, `security`, `server`, `services`, `sitemap`, and `taxonomies`. + +### Omit the root key + +When splitting the configuration by root key, omit the root key in the given file. For example, these are equivalent: + +{{< code-toggle file=hugo >}} +[params] +foo = 'bar' +{{< /code-toggle >}} + +{{< code-toggle file=params >}} +foo = 'bar' +{{< /code-toggle >}} + +### Recursive parsing + +Hugo parses the `config` directory recursively, allowing you to organize the files into subdirectories. For example: + +```text +my-project/ +└── config/ + └── _default/ + ├── navigation/ + │ ├── menus.de.toml + │ └── menus.en.toml + └── hugo.toml +``` + +### Example + +```text +my-project/ +└── config/ + ├── _default/ + │ ├── hugo.toml + │ ├── menus.en.toml + │ ├── menus.de.toml + │ └── params.toml + ├── production/ + │ ├── hugo.toml + │ └── params.toml + └── staging/ + ├── hugo.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 a [Google tag ID] in your site configuration: + +[Google tag ID]: https://support.google.com/tagmanager/answer/12326985?hl=en + +{{< code-toggle file=hugo copy=false >}} +[services.googleAnalytics] +ID = 'G-XXXXXXXXX' +{{< /code-toggle >}} + +Now consider the following scenario: + +1. You don't want to load the analytics code when running `hugo server`. +2. You want to use different Google tag IDs for your production and staging environments. For example: + + - `G-PPPPPPPPP` for production + - `G-SSSSSSSSS` for staging + +To satisfy these requirements, configure your site as follows: + +1. `config/_default/hugo.toml` + + Exclude the `services.googleAnalytics` section. This will prevent loading of the analytics code when you run `hugo server`. + + By default, Hugo sets its `environment` to `development` when running `hugo server`. In the absence of a `config/development` directory, Hugo uses the `config/_default` directory. + +2. `config/production/hugo.toml` + + Include this section only: + + {{< code-toggle file=hugo copy=false >}} + [services.googleAnalytics] + ID = 'G-PPPPPPPPP' + {{< /code-toggle >}} + + You do not need to include other parameters in this file. Include only those parameters that are specific to your production environment. Hugo will merge these parameters with the default configuration. + + By default, Hugo sets its `environment` to `production` when running `hugo`. The analytics code will use the `G-PPPPPPPPP` tag ID. + +3. `config/staging/hugo.toml` + + Include this section only: + + {{< code-toggle file=hugo copy=false >}} + [services.googleAnalytics] + ID = 'G-SSSSSSSSS' + {{< /code-toggle >}} + + You do not need to include other parameters in this file. Include only those parameters that are specific to your staging environment. Hugo will merge these parameters with the default configuration. + + To build your staging site, run `hugo --environment staging`. The analytics code will use the `G-SSSSSSSSS` tag ID. + +## 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 file=hugo dataKey="config_helpers.mergeStrategy" skipHeader=true />}} + +## All configuration settings + +###### archetypeDir + +(`string`) The directory where Hugo finds archetype files (content templates). Default is `archetypes`. {{% module-mounts-note %}} + +###### assetDir + +(`string`) The directory where Hugo finds asset files used in [Hugo Pipes](/hugo-pipes/). Default is `assets`. {{% module-mounts-note %}} + +###### baseURL + +(`string`) The absolute URL (protocol, host, path, and trailing slash) of your published site (e.g., `https://www.example.org/docs/`). + +###### build + +See [Configure Build](#configure-build). + +###### buildDrafts + +(`bool`) Include drafts when building. Default is `false`. + +###### buildExpired + +(`bool`) Include content already expired. Default is `false`. + +###### buildFuture + +(`bool`) Include content with publishdate in the future. Default is `false`. + +###### caches + +See [Configure File Caches](#configure-file-caches). + +###### cascade + +Pass down 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). + +{{% note %}} +For a website in a single language, define the `[[cascade]]` in [Front Matter](/content-management/front-matter#front-matter-cascade). For a multilingual website, define the `[[cascade]]` in [Site Config](../../getting-started/configuration/#cascade). + +To remain consistent and prevent unexpected behavior, do not mix these strategies. +{{% /note %}} + +###### canonifyURLs + +(`bool`) Enable to turn relative URLs into absolute. Default is `false`. See [details](/content-management/urls/#canonical-urls). + +###### cleanDestinationDir + +(`bool`) When building, removes files from destination not found in static directories. Default is `false`. + +###### contentDir + +(`string`) The directory from where Hugo reads content files. Default is `content`. {{% module-mounts-note %}} + +###### copyright + +(`string`) Copyright notice for your site, typically displayed in the footer. + +###### dataDir + +(`string`) The directory from where Hugo reads data files. Default is `data`. {{% module-mounts-note %}} + +###### defaultContentLanguage + +(`string`) Content without language indicator will default to this language. Default is `en`. + +###### defaultContentLanguageInSubdir + +(`bool`) Render the default content language in subdir, e.g. `content/en/`. The site root `/` will then redirect to `/en/`. Default is `false`. + +###### disableAliases + +(`bool`) 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. Default is `false`. + +###### disableHugoGeneratorInject + +(`bool`) 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. Default is `false`. + +###### disableKinds + +(`string slice`) Disable rendering of the specified page [kinds], any of `404`, `home`, `page`, `robotstxt`, `rss`, `section`, `sitemap`, `taxonomy`, or `term`. + +[kinds]: /getting-started/glossary/#page-kind + +###### disableLiveReload + +(`bool`) Disable automatic live reloading of browser window. Default is `false`. + +###### disablePathToLower + +(`bool`) Do not convert the url/path to lowercase. Default is `false`. + +###### enableEmoji + +(`bool`) Enable Emoji emoticons support for page content; see the [emoji shortcode quick reference guide](/quick-reference/emojis/). Default is `false`. + +###### enableGitInfo + +(`bool`) 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. Default is `false`. + +###### enableMissingTranslationPlaceholders + +(`bool`) Show a placeholder instead of the default value or an empty string if a translation is missing. Default is `false`. + +###### enableRobotsTXT + +(`bool`) Enable generation of `robots.txt` file. Default is `false`. + +###### frontmatter + +See [Front matter Configuration](#configure-front-matter). + +###### hasCJKLanguage + +(`bool`) If true, auto-detect Chinese/Japanese/Korean Languages in the content. This will make `.Summary` and `.WordCount` behave correctly for CJK languages. Default is `false`. + +###### imaging + +See [image processing configuration](/content-management/image-processing/#imaging-configuration). + +###### languageCode + +(`string`) 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 [Menus](/content-management/menus/#define-in-site-configuration). + +###### minify + +See [Configure Minify](#configure-minify). + +###### module + +Module configuration see [module configuration](/hugo-modules/configuration/). + +###### newContentEditor + +(`string`) The editor to use when creating new content. + +###### noChmod + +(`bool`) Don't sync permission mode of files. Default is `false`. + +###### noTimes + +(`bool`) Don't sync modification time of files. Default is `false`. + +###### outputFormats + +See [Configure Output Formats](#configure-additional-output-formats). + +###### paginate + +(`int`) Default number of elements per page in [pagination](/templates/pagination/). Default is `10`. + +###### paginatePath + +(`string`) The path element used during pagination (`https://example.org/page/2`). Default is `page`. + +###### permalinks + +See [Content Management](/content-management/urls/#permalinks). + +###### pluralizeListTitles + +(`bool`) Pluralize titles in lists. Default is `true`. + +###### publishDir + +(`string`) The directory to where Hugo will write the final static site (the HTML files etc.). Default is `public`. + +###### related + +See [Related Content](/content-management/related/#configure-related-content). + +###### relativeURLs + +(`bool`) Enable this to make all relative URLs relative to content root. Note that this does not affect absolute URLs. Default is `false`. See [details](/content-management/urls/#relative-urls). + +###### refLinksErrorLevel + +(`string`) 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`). Default is `ERROR`. + +###### refLinksNotFoundURL + +(`string`) URL to be used as a placeholder when a page reference cannot be found in `ref` or `relref`. Is used as-is. + +###### removePathAccents + +(`bool`) 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. Default is `false`. + +```text +content/post/hügó.md → https://example.org/post/hugo/ +``` + +###### sectionPagesMenu + +See [Menus](/content-management/menus/#define-automatically). + +###### security + +See [Security Policy](/about/security-model/#security-policy). + +###### sitemap + +Default [sitemap configuration](/templates/sitemap-template/#configuration). + +###### summaryLength + +(`int`) The length of text in words to show in a [`.Summary`](/content-management/summaries/#automatic-summary-splitting). Default is `70`. + +###### taxonomies + +See [Configure Taxonomies](/content-management/taxonomies#configure-taxonomies). + +###### theme + +See [module configuration](/hugo-modules/configuration/#module-configuration-imports) for how to import a theme. + +###### themesDir + +(`string`) The directory where Hugo reads the themes from. Default is `themes`. + +###### timeout + +(`string`) Timeout for generating page contents, specified as a [duration](https://pkg.go.dev/time#Duration) or in seconds. *Note:* 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). Default is `30s`. + +###### timeZone + +(`string`) The time zone (or location), e.g. `Europe/Oslo`, used to parse front matter dates without such information and in the [`time`] function. 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 + +(`string`) Site title. + +###### titleCaseStyle + +(`string`) Default is `ap`. See [Configure Title Case](#configure-title-case). + +###### uglyURLs + +(`bool`) When enabled, creates URL of the form `/filename.html` instead of `/filename/`. Default is `false`. + +###### watch + +(`bool`) Watch filesystem for changes and recreate as needed. Default is `false`. + +{{% 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 config=build />}} + +buildStats {{< new-in 0.115.1 >}} +: When enabled, creates a `hugo_stats.json` file in the root of your project. This file contains arrays of the `class` attributes, `id` attributes, and tags of every HTML element within your published site. Use this file as data source when [removing unused CSS] from your site. This process is also known as pruning, purging, or tree shaking. + +[removing unused CSS]: /hugo-pipes/postprocess/#css-purging-with-postcss + +Exclude `class` attributes, `id` attributes, or tags from `hugo_stats.json` with the `disableClasses`, `disableIDs`, and `disableTags` keys. + +{{% note %}} +With v0.115.0 and earlier this feature was enabled by setting `writeStats` to `true`. Although still functional, the `writeStats` key will be deprecated in a future release. + +Given that CSS purging is typically limited to production builds, place the `buildStats` object below [config/production]. + +[config/production]: /getting-started/configuration/#configuration-directory + +Built for speed, there may be "false positive" detections (e.g., HTML elements that are not HTML elements) while parsing the published site. These "false positives" are infrequent and inconsequential. +{{% /note %}} + +Due to the nature of partial server builds, new HTML entities are added while the server is running, but old values will not be removed until you restart the server or run a regular `hugo` build. + +cachebusters +: See [Configure Cache Busters](#configure-cache-busters) + +noJSConfigInAssets +: Turn off writing a `jsconfig.json` into your `/assets` folder with mapping of imports from running [js.Build](/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. + +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. + +## Configure cache busters + +{{< new-in 0.112.0 >}} + +The `build.cachebusters` configuration option was added to support development using Tailwind 3.x's JIT compiler where a `build` configuration may look like this: + +{{< code-toggle file=hugo >}} +[build] + [build.buildStats] + enable = true + [[build.cachebusters]] + source = "assets/watching/hugo_stats\\.json" + target = "styles\\.css" + [[build.cachebusters]] + source = "(postcss|tailwind)\\.config\\.js" + target = "css" + [[build.cachebusters]] + source = "assets/.*\\.(js|ts|jsx|tsx)" + target = "js" + [[build.cachebusters]] + source = "assets/.*\\.(.*)$" + target = "$1" +{{< /code-toggle >}} + +When `buildStats` {{< new-in 0.115.1 >}} is enabled, Hugo writes a `hugo_stats.json` file on each build with HTML classes etc. that's used in the rendered output. Changes to this file will trigger a rebuild of the `styles.css` file. You also need to add `hugo_stats.json` to Hugo's server watcher. See [Hugo Starter Tailwind Basic](https://github.com/bep/hugo-starter-tailwind-basic) for a running example. + +source +: A regexp matching file(s) relative to one of the virtual component directories in Hugo, typically `assets/...`. + +target +: A regexp matching the keys in the resource cache that should be expired when `source` changes. You can use the matching regexp groups from `source` in the expression, e.g. `$1`. + +## 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=hugo >}} +[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 {#_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 configuration](#configure-server), you need to add the 404 redirect explicitly, e.g: + +{{< code-toggle file=config/development/server >}} +[[redirects]] +from = "/**" +to = "/404.html" +status = 404 +{{< /code-toggle >}} + +## Configure title case + +By default, Hugo follows the capitalization rules published in the [Associated Press Stylebook] when creating automatic section titles, and when transforming strings with the [`strings.Title`] function. + +Change this behavior by setting `titleCaseStyle` in your site configuration to any of the values below: + +ap +: Use the capitalization rules published in the [Associated Press Stylebook]. + +chicago +: Use the capitalization rules published in the [Chicago Manual of Style]. + +go +: Capitalize the first letter of every word. + +firstupper +: Capitalize the first letter of the first word. + +none +: Disable transformation of automatic section titles, and disable the transformation performed by the `strings.Title` function. This is useful if you would prefer to manually capitalize section titles as needed, and to bypass opinionated theme usage of the `strings.Title` function. + +[`strings.Title`]: /functions/strings/title +[Associated Press Stylebook]: https://www.apstylebook.com/ +[Chicago Manual of Style]: https://www.chicagomanualofstyle.org/home.html +[site configuration]: /getting-started/configuration/#configure-title-case + +## 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. + +## Configure with environment variables + +In addition to the 3 configuration 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 %}} +Names must be prefixed with `HUGO_` and the configuration key must be set in uppercase when setting operating system environment variables. + +To set configuration parameters, 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. + +## Ignore content and data files when rendering + +{{% note %}} +This works, but we recommend you use the newer and more powerful [includeFiles and excludeFiles](/hugo-modules/configuration/#module-configuration-mounts) mount options. +{{% /note %}} + +To exclude specific files from the `content`, `data`, and `i18n` 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 file=hugo >}} +ignoreFiles = ['\.foo$', '\.boo$'] +{{< /code-toggle >}} + +To ignore a file using the absolute file path: + +{{< code-toggle file=hugo >}} +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 `hugo.toml`. + +The default configuration is: + +{{< code-toggle config=frontmatter />}} + +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=hugo >}} +[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=hugo >}} +[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 file name. 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=hugo >}} +[frontmatter] +date = [":filename", ":default"] +{{< /code-toggle >}} + +The above will try first to extract the value for `.Date` from the file name, 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 configuration. + +## 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 + +See the [tdewolff/minify] project page for details. + +[tdewolff/minify]: https://github.com/tdewolff/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 config=caches />}} + +You can override any of these cache settings in your own `hugo.toml`. + +### The keywords explained + +cacheDir +: (`string`) See [Configure cacheDir](#configure-cachedir). + +project +: (`string`) 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 +: (`string`) This is the value of the `resourceDir` configuration option. + +maxAge +: (`string`) 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 +: (`string`) The absolute path to where the files for this cache will be stored. Allowed starting placeholders are `:cacheDir` and `:resourceDir` (see above). + +## Configure cacheDir + +This is the directory where Hugo by default will store its file caches. See [Configure File Caches](#configure-file-caches). + +This can be set using the `cacheDir` config option or via the OS env variable `HUGO_CACHEDIR`. + +If this is not set, Hugo will use, in order of preference: + +1. If running on Netlify: `/opt/build/cache/hugo_cache/`. 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). +1. In a `hugo_cache` directory below the OS user cache directory as defined by Go's [os.UserCacheDir](https://pkg.go.dev/os#UserCacheDir). On Unix systems, this is `$XDG_CACHE_HOME` as specified by [basedir-spec-latest](https://specifications.freedesktop.org/basedir-spec/basedir-spec-latest.html) if non-empty, else `$HOME/.cache`. On MacOS, this is `$HOME/Library/Caches`. On Windows, this is`%LocalAppData%`. On Plan 9, this is `$home/lib/cache`. {{< new-in 0.116.0 >}} +1. In a `hugo_cache_$USER` directory below the OS temp dir. + +If you want to know the current value of `cacheDir`, you can run `hugo config`, e.g: `hugo config | grep cachedir`. + +[`time`]: /functions/time/astime +[`.Site.Params`]: /variables/site/ +[directory structure]: /getting-started/directory-structure +[lookup order]: /templates/lookup-order/ +[Output Formats]: /templates/output-formats/ +[templates]: /templates/ +[static-files]: /content-management/static-files/ diff --git a/docs/content/en/getting-started/directory-structure.md b/docs/content/en/getting-started/directory-structure.md new file mode 100644 index 000000000..f91849375 --- /dev/null +++ b/docs/content/en/getting-started/directory-structure.md @@ -0,0 +1,212 @@ +--- +title: Directory structure +description: Each Hugo project is a directory, with subdirectories that contribute to the content, structure, behavior, and presentation of your site. +categories: [getting started,fundamentals] +keywords: [source, organization, directories] +menu: + docs: + parent: getting-started + weight: 30 +weight: 30 +toc: true +aliases: [/overview/source-directory/] +--- + +## Site skeleton + +Hugo generates a project skeleton when you create a new site. For example, this command: + +```sh +hugo new site my-site +``` + +Creates this directory structure: + +```txt +my-site/ +├── archetypes/ +│ └── default.md +├── assets/ +├── content/ +├── data/ +├── i18n/ +├── layouts/ +├── static/ +├── themes/ +└── hugo.toml <-- site configuration +``` + +Depending on requirements, you may wish to organize your site configuration into subdirectories: + +```txt +my-site/ +├── archetypes/ +│ └── default.md +├── assets/ +├── config/ <-- site configuration +│ └── _default/ +│ └── hugo.toml +├── content/ +├── data/ +├── i18n/ +├── layouts/ +├── static/ +└── themes/ +``` + +When you build your site, Hugo creates a `public` directory, and typically a `resources` directory as well: + +```txt +my-site/ +├── archetypes/ +│ └── default.md +├── assets/ +├── config/ +│ └── _default/ +│ └── hugo.toml +├── content/ +├── data/ +├── i18n/ +├── layouts/ +├── public/ <-- created when you build your site +├── resources/ <-- created when you build your site +├── static/ +└── themes/ +``` + +## Directories + +Each of the subdirectories contributes to the content, structure, behavior, or presentation of your site. + +archetypes +: The `archetypes` directory contains templates for new content. See [details](/content-management/archetypes/). + +assets +: The `assets` directory contains global resources typically passed through an asset pipeline. This includes resources such as images, CSS, Sass, JavaScript, and TypeScript. See [details](/hugo-pipes/introduction/). + +config +: The `config` directory contains your site configuration, possibly split into multiple subdirectories and files. For projects with minimal configuration or projects that do not need to behave differently in different environments, a single configuration file named `hugo.toml` in the root of the project is sufficient. See [details](/getting-started/configuration/#configuration-directory). + +content +: The `content` directory contains the markup files (typically markdown) and page resources that comprise the content of your site. See [details](/content-management/organization/). + +data +: The `data` directory contains data files (JSON, TOML, YAML, or XML) that augment content, configuration, localization, and navigation. See [details](/templates/data-templates/). + +i18n +: The `i18n` directory contains translation tables for multilingual sites. See [details](/content-management/multilingual/). + +layouts +: The layouts directory contains templates to transform content, data, and resources into a complete website. See [details](/templates/). + +public +: The `public` directory contains the published website, generated when you run the `hugo` command. Hugo recreates this directory and its content as needed. See [details](/getting-started/usage/#build-your-site). + +resources +: The `resources` directory contains cached output from Hugo's asset pipelines, generated when you run the `hugo` or `hugo server` commands. By default this cache directory includes CSS and images. Hugo recreates this directory and its content as needed. + +static +: The `static` directory contains files that will be copied to the public directory when you build your site. For example: `favicon.ico`, `robots.txt`, and files that verify site ownership. Before the introduction of [page bundles](/getting-started/glossary/#page-bundle) and [asset pipelines](/hugo-pipes/introduction/), the `static` directory was also used for images, CSS, and JavaScript. See [details](/content-management/static-files/). + +themes +: The `themes` directory contains one or more [themes](/getting-started/glossary/#theme), each in its own subdirectory. + +## Union file system + +Hugo creates a union file system, allowing you to mount two or more directories to the same location. For example, let's say your home directory contains a Hugo project in one directory, and shared content in another: + +```text +home/ +└── user/ + ├── my-site/ + │ ├── content/ + │ │ ├── books/ + │ │ │ ├── _index.md + │ │ │ ├── book-1.md + │ │ │ └── book-2.md + │ │ └── _index.md + │ ├── themes/ + │ │ └── my-theme/ + │ └── hugo.toml + └── shared-content/ + └── films/ + ├── _index.md + ├── film-1.md + └── film-2.md +``` + +You can include the shared content when you build your site using mounts. In your site configuration: + +{{< code-toggle file=hugo >}} +[[module.mounts]] +source = 'content' +target = 'content' + +[[module.mounts]] +source = '/home/user/shared-content' +target = 'content' +{{< /code-toggle >}} + +{{% note %}} +When you overlay one directory on top of another, you must mount both directories. + +If you think you need a symbolic link in your project directory, use Hugo's union file system instead. +{{% /note %}} + +After mounting, the union file system has this structure: + +```text +home/ +└── user/ + └── my-site/ + ├── content/ + │ ├── books/ + │ │ ├── _index.md + │ │ ├── book-1.md + │ │ └── book-2.md + │ ├── films/ + │ │ ├── _index.md + │ │ ├── film-1.md + │ │ └── film-2.md + │ └── _index.md + ├── themes/ + │ └── my-theme/ + └── hugo.toml +``` + +{{% note %}} +When two or more files have the same path, the order of precedence follows the order of the mounts. For example, if the shared content directory contains `books/book-1.md`, it will be ignored because the project's content directory was mounted first. +{{% /note %}} + +You can mount directories to `archetypes`, `assets`, `content`, `data`, `i18n`, `layouts`, and `static`. See [details](/hugo-modules/configuration/#module-configuration-mounts). + +You can also mount directories from Git repositories using Hugo Modules. See [details](/hugo-modules/). + +## Theme skeleton + +Hugo generates a functional theme skeleton when you create a new theme. For example, this command: + +```text +hugo new theme my-theme +``` + +Creates this directory structure (subdirectories not shown): + +```text +my-theme/ +├── archetypes/ +├── assets/ +├── content/ +├── data/ +├── i18n/ +├── layouts/ +├── static/ +├── LICENSE +├── README.md +├── hugo.toml +└── theme.toml +``` + +Using the union file system described above, Hugo mounts each of these directories to the corresponding location in the project. When two files have the same path, the file in the project directory takes precedence. This allows you, for example, to override a theme's template by placing a copy in the same location within the project directory. + +If you are simultaneously using components from two or more themes or modules, and there's a path collision, the first mount takes precedence. diff --git a/docs/content/en/getting-started/external-learning-resources/hia.jpg b/docs/content/en/getting-started/external-learning-resources/hia.jpg Binary files differnew file mode 100644 index 000000000..601947a70 --- /dev/null +++ b/docs/content/en/getting-started/external-learning-resources/hia.jpg diff --git a/docs/content/en/getting-started/external-learning-resources/index.md b/docs/content/en/getting-started/external-learning-resources/index.md new file mode 100644 index 000000000..634439bc6 --- /dev/null +++ b/docs/content/en/getting-started/external-learning-resources/index.md @@ -0,0 +1,37 @@ +--- +title: External learning resources +description: A list of tutorials and books on Hugo. +categories: [getting started] +keywords: [books, tutorials, learning, usage] +menu: + docs: + parent: getting-started + weight: 70 +weight: 70 +--- + +## Books + +### Hugo In Action + +[![Hugo In Action](hia.jpg)](https://www.manning.com/books/hugo-in-action) + +Hugo in Action is a step-by-step guide to using Hugo to create static websites. Working with a complete example website and source code samples, you’ll learn how to build and host a low-maintenance, high-performance site that will wow your users and stay stable without relying on a third-party server. + +[Hugo In Action Home Page](https://www.manning.com/books/hugo-in-action) + +### Build Websites with Hugo + +[Build Websites with Hugo - Fast Web Development with Markdown (2020)](https://pragprog.com/titles/bhhugo/) by Brian P. Hogan. + +## Beginner tutorials + +### Hugo tutorial by CloudCannon + +[Step-by-step written tutorial](https://cloudcannon.com/community/learn/hugo-beginner-tutorial/) to teach you the basics of creating a Hugo site. + +## Video tutorials + +* Mike Dane explains the various features of Hugo via dedicated tutorials on [YouTube](https://www.youtube.com/watch?list=PLLAZ4kZ9dFpOnyRlyS-liKL5ReHDcj4G3&v=qtIqKaDlqXo). + +* [Introduction to building your first Hugo site](https://cloudcannon.com/community/learn/hugo-beginner-tutorial/) by Mike Neumegen. diff --git a/docs/content/en/getting-started/glossary.md b/docs/content/en/getting-started/glossary.md new file mode 100644 index 000000000..929feb542 --- /dev/null +++ b/docs/content/en/getting-started/glossary.md @@ -0,0 +1,389 @@ +--- +title: Glossary of terms +description: Terms commonly used throughout the documentation. +categories: [getting started] +keywords: [glossary] +menu: + docs: + parent: getting-started + weight: 60 +weight: 60 +# Use level 6 headings for each term in the glossary. +--- + +###### action + +See [template action](#template-action). + +###### archetype + +A template for new content. See [details](/content-management/archetypes/). + +###### argument + +A [scalar](#scalar), [array](#array), [slice](#slice), [map](#map), or [object](#object) passed to a [function](#function), [method](#method), or [shortcode](#shortcode). + +###### array + +A numbered sequence of elements. Unlike Go's [slice](#slice) data type, an array has a fixed length. [Elements](#element) within an array can be [scalars](#scalar), slices, [maps](#map), pages, or other arrays. See the [Go documentation](https://go.dev/ref/spec#Array_types) for details. + +###### bool + +See [boolean](#boolean). + +###### boolean + +A data type with two possible values, either `true` or `false`. + +###### branch bundle + +A [page bundle](#page-bundle) with an _index.md file and zero or more [resources](#resource). Analogous to a physical branch, a branch bundle may have descendants including regular pages, [leaf bundles](/getting-started/glossary/#leaf-bundle), and other branch bundles. See [details](/content-management/page-bundles/). + +###### build + +To generate a static site that includes HTML files and assets such as images, CSS, and JavaScript. The build process includes rendering and resource transformations. + +###### bundle + +See [page bundle](#page-bundle). + +###### cache + +A software component that stores data so that future requests for the same data are faster. + +###### chain + +Within a template, to connect one or more [identifiers](#identifier) with a dot. An identifier can represent a method, object, or field. For example, `.Site.Params.author.name` or `.Date.UTC.Hour`. + +###### collection + +An [array](#array), [slice](#slice), or [map](#map). + +###### content format + +A markup language for creating content. Typically markdown, but may also be HTML, AsciiDoc, Org, Pandoc, or reStructuredText. See [details](/content-management/formats/). + +###### content type + +A classification of content inferred from the top-level directory name or the `type` set in [front matter](#front-matter). Pages in the root of the content directory, including the home page, are of type "page". Accessed via `.Page.Type` in [templates](#template). See [details](/content-management/types/). + +###### content view + +A template called with the `.Page.Render` method. See [details](/templates/views/). + +###### context + +Represented by a dot "." within a [template action](#template-action), context is the current location in a data structure. For example, while iterating over a [collection](#collection) of pages, the context within each iteration is the page's data structure. The context received by each template depends on template type and/or how it was called. See [details](/templates/introduction/#the-dot). + +###### default sort order + +The default sort order for page collections. Hugo sorts by [weight](#weight), then by date (descending), then by link title, and then by file path. + +###### element + +A member of a slice or array. + +###### environment + +Typically one of `development`, `staging`, or `production`, each environment may exhibit different behavior depending on configuration and template logic. For example, in a production environment you might minify and fingerprint CSS, but that probably doesn't make sense in a development environment. + +When running the built-in development server with the `hugo server` command, the environment is set to `development`. When building your site with the `hugo` command, the environment is set to `production`. To override the environment value, use the `--environment` command line flag. + +To determine the current environment within a template, use the [`hugo.Environment`] function. + +[`hugo.Environment`]: /functions/hugo/environment + +###### field + +A predefined key/value pair in front matter such as `date` or `title`. See also [parameter](#parameter). + + +###### flag + +An option passed to a command-line program, beginning with one or two hyphens. See [details](/commands/hugo/). + +###### float + +See [floating point](#floating-point). + +###### floating point + +A numeric data type with a fractional component. For example, `3.14159`. + +###### fragment + +The final segment of a URL, beginning with a hash (`#`) mark, that references an `id` attribute of an HTML element on the page. + +###### front matter + +Metadata at the beginning of each content page, separated from the content by format-specific delimiters. See [details](/content-management/front-matter/). + +###### function + +Used within a [template action](#template-action), a function takes one or more [arguments](#argument) and returns a value. Unlike [methods](#method), functions are not associated with an [object](#object). See [details](/functions/). + +###### global resource + +A file within the assets directory, or within any directory [mounted](/hugo-modules/configuration/#module-configuration-mounts) to the assets directory. Capture one or more global resources using the [`resources.Get`], [`resources.GetMatch`], [`resources.Match`], or [`resources.ByType`] functions. + +[`resources.Get`]: /functions/resources/get +[`resources.GetMatch`]: /functions/resources/getmatch +[`resources.Match`]: /functions/resources/match +[`resources.ByType`]: /functions/resources/byType + +###### identifier + +A string that represents a variable, method, object, or field. It must conform to Go's [language specification](https://go.dev/ref/spec#Identifiers), beginning with a letter or underscore, followed by zero or more letters, digits, or underscores. + +###### int + +See [integer](#integer). + +###### integer + +A numeric data type without a fractional component. For example, `42`. + +###### internationalization + +Software design and development efforts that enable [localization](#localization). See the [W3C definition](https://www.w3.org/International/questions/qa-i18n). Abbreviated i18n. + +###### interval + +An [interval](https://en.wikipedia.org/wiki/Interval_(mathematics)) is a range of numbers between two endpoints: closed, open, or half-open. + +- A _closed_ interval, denoted by brackets, includes its endpoints. For example, [0, 1] is the interval where `0 <= x <= 1`. + +- An _open_ interval, denoted by parentheses, excludes its endpoints. For example, (0, 1) is the interval where `0 < x < 1`. + +- A _half-open_ interval includes only one of its endpoints. For example, (0, 1] is the _left-open_ interval where `0 < x <= 1`, while [0, 1) is the _right-open_ interval where `0 <= x < 1`. + +###### kind + +See [page kind](#page-kind). + +###### layout + +See [template](#template). + +###### leaf bundle + +A [page bundle](#page-bundle) with an index.md file and zero or more [resources](#resource). Analogous to a physical leaf, a leaf bundle is at the end of a branch. Hugo ignores content (but not resources) beneath the leaf bundle. See [details](/content-management/page-bundles/). + +###### list page + +Any [page kind](#page-kind) that receives a page [collection](#collection) in [context](#context). This includes the home page, [section pages](#section-page), [taxonomy pages](#taxonomy-page), and [term pages](#term-page). + +###### localization + +Adaptation of a site to meet language and regional requirements. This includes translations, language-specific media, date and currency formats, etc. See [details](/content-management/multilingual/) and the [W3C definition](https://www.w3.org/International/questions/qa-i18n). Abbreviated l10n. + +###### map + +An unordered group of elements, each indexed by a unique key. See the [Go documentation](https://go.dev/ref/spec#Map_types) for details. + +###### markdown attribute + +A list of attributes, containing one or more key/value pairs, separated by spaces or commas, and wrapped by braces. Apply markdown attributes to images and block-level elements including blockquotes, fenced code blocks, headings, horizontal rules, lists, paragraphs, and tables. See [details](/getting-started/configuration-markup/#goldmark). + +###### marshal + +To transform a data structure into a serialized object. For example, transforming a [map](#map) into a JSON string. See [unmarshal](#unmarshal). + +###### method + +Used within a [template action](#template-action) and associated with an [object](#object), a method takes zero or more [arguments](#argument) and either returns a value or performs an action. For example, `.IsHome` is a method on the `.Page` object which returns `true` if the current page is the home page. See also [function](#function). + +###### module + +Like a [theme](#theme), a module is a packaged combination of [archetypes](#archetype), assets, content, data, [templates](#template), translation tables, static files, or configuration settings. A module may serve as the basis for a new site, or to augment an existing site. See [details](/hugo-modules/). + +###### object + +A data structure with or without associated [methods](#method). + +###### ordered taxonomy + +Created by invoking the [`Alphabetical`] or [`ByCount`] method on a [taxonomy object](#taxonomy-object), which is a [map](#map), an ordered taxonomy is a [slice](#slice), where each element is an object that contains the [term](#term) and a slice of its [weighted pages](#weighted-page). + +[`Alphabetical`]: /methods/taxonomy/alphabetical +[`ByCount`]: /methods/taxonomy/bycount + +###### output format + +{{% include "methods/page/_common/output-format-definition.md" %}} + +###### page bundle + +A directory that encapsulates both content and associated [resources](#resource). There are two types of page bundles: [leaf bundles](#leaf-bundle) and [branch bundles](#branch-bundle). See [details](/content-management/page-bundles/). + +###### page collection + +A slice of page objects. + +###### page kind + +A classification of pages, one of `home`, `page`, `section`, `taxonomy`, or `term`. See [details](/templates/section-templates/#page-kinds). + +Note that there are also `RSS`, `sitemap`, `robotsTXT`, and `404` page 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. + +###### page resource + +A file within a [page bundle](#page-bundle). Capture one or more page resources using any of the [`Resources`] methods on a `Page` object. + +[`Resources`]: /methods/page/resources/#methods + +###### pager + +Created during [pagination](#pagination), a pager contains a subset of a section list, and navigation links to other pagers. + +###### paginate + +To split a [section](#section) list into two or more [pagers](#pager) See [details](/templates/pagination/). + +###### pagination + +The process of [paginating](#paginate) a [section](#section) list. + +###### parameter + +Typically, a user-defined key/value pair at the site or page level, but may also refer to a configuration setting or an [argument](#argument). See also [field](#field). + +###### partial + +A [template](#template) called from any other template including [shortcodes](#shortcode), [render hooks](#render-hook), and other partials. A partial either renders something or returns something. A partial can also call itself, for example, to [walk](#walk) a data structure. + +###### permalink + +The absolute URL of a published resource or a rendered page, including scheme and host. + +###### pipe + +See [pipeline](#pipeline). + +###### pipeline + +Within a [template action](#template-action), a pipeline is a possibly chained sequence of values, [function](#function) calls, or [method](#method) calls. Functions and methods in the pipeline may take multiple [arguments](#argument). + +A pipeline may be *chained* by separating a sequence of commands with pipeline characters "|". In a chained pipeline, the result of each command is passed as the last argument to the following command. The output of the final command in the pipeline is the value of the pipeline. See the [Go documentation](https://pkg.go.dev/text/template#hdr-Pipelines) for details. + +###### publish + +See [build](#build). + +###### regular page + +Content with the "page" [page kind](#page-kind). See also [section page](#section-page). + +###### relative permalink + +The host-relative URL of a published resource or a rendered page. + +###### render hook + +A [template](#template) that overrides standard markdown rendering. See [details](/templates/render-hooks/). + +###### remote resource + +A file on a remote server, accessible via HTTP or HTTPS with the [`resources.GetRemote`](/functions/resources/getremote) function. + +###### resource + +Any file consumed by the build process to augment or generate content, structure, behavior, or presentation. For example: images, videos, content snippets, CSS, Sass, JavaScript, and data. + +Hugo supports three types of resources: [global](#global-resource), [page](#page-resource), and [remote](#remote-resource) + +###### scalar + +A single value, one of [string](#string), [integer](#integer), [floating point](#floating-point), or [boolean](#boolean). + +###### scratch pad + +Conceptually, a [map](#map) with [methods](#method) to set, get, update, and delete values. Attach the data structure to a `Page` object using the [`Scratch`] or [`Store`] methods, or created a locally scoped scratch pad using the [`newScratch`] function. + +[`Scratch`]: /methods/page/scratch +[`Store`]: /methods/page/store +[`newScratch`]: /functions/collections/newscratch + +###### section + +A top-level content directory, or any content directory with an _index.md file. A content directory with an _index.md file is also known as a [branch bundle](/getting-started/glossary/#branch-bundle). Section templates receive one or more page [collections](#collection) in [context](#context). See [details](/content-management/sections/). + +###### section page + +Content with the "section" [page kind](#page-kind). Typically a listing of [regular pages](#regular-page) and/or [section pages](#section-page) within the current [section](#section). See also [regular page](#regular-page). + +###### shortcode + +A [template](#template) called from within markdown, taking zero or more [arguments](#argument). See [details](/content-management/shortcodes/). + +###### slice + +A numbered sequence of elements. Unlike Go's [array](#array) data type, slices are dynamically sized. [Elements](#element) within a slice can be [scalars](#scalar), [arrays](#array), [maps](#map), pages, or other slices. See the [Go documentation](https://go.dev/ref/spec#Slice_types) for details. + +###### string + +A sequence of bytes. For example, `"What is 6 times 7?"` . + +###### taxonomic weight + +Defined in front matter and unique to each taxonomy, this [weight](#weight) determines the sort order of page collections contained within a [taxonomy object](#taxonomy-object). See [details](/templates/taxonomy-templates/#assign-weight). + +###### taxonomy + +A group of related [terms](#term) used to classify content. For example, a "colors" taxonomy might include the terms "red", "green", and "blue". See [details](/content-management/taxonomies/). + +###### taxonomy object + +A [map](#map) of [terms](#term) and the [weighted pages](#weighted-page) associated with each term. + +###### taxonomy page + +Content with the "taxonomy" [page kind](#page-kind). Typically a listing of [terms](#term) within a given [taxonomy](#taxonomy). + +###### template + +A file with [template actions](#template-action), located within the layouts directory of a project, theme, or module. See [details](/templates/). + +###### template action + +A data evaluation or control structure within a [template](#template), delimited by "{{" and "}}". See the [Go documentation](https://pkg.go.dev/text/template#hdr-Actions) for details. + +###### term + +A member of a [taxonomy](#taxonomy), used to classify content. See [details](/content-management/taxonomies/). + +###### term page + +Content with the "term" [page kind](#page-kind). Typically a listing of [regular pages](#regular-page) and [section pages](#section-page) with a given [term](#term). + +###### theme + +A packaged combination of [archetypes](#archetype), assets, content, data, [templates](#template), translation tables, static files, or configuration settings. A theme may serve as the basis for a new site, or to augment an existing site. See also [module](#module). + +###### token + +An identifier within a format string, beginning with a colon and replaced with a value when rendered. For example, use tokens in format strings for both [permalinks](/content-management/urls/#permalinks) and [dates](/functions/time/format/#localization). + +###### type + +See [content type](#content-type). + +###### unmarshal + +To transform a serialized object into a data structure. For example, transforming a JSON file into a [map](#map) that you can access within a template. See [marshal](#marshal). + +###### variable + +A user-defined [identifier](#identifier) prefaced with a `$` symbol, representing a value of any data type, initialized or assigned within a [template action](#template-action). For example, `$foo` and `$bar` are variables. + +###### walk + +To recursively traverse a nested data structure. For example, rendering a multilevel menu. + +###### weight + +Used to position an element within a collection sorted by weight. Assign weights using non-zero integers. Lighter items float to the top, while heavier items sink to the bottom. Unweighted or zero-weighted elements are placed at the end of the collection. Weights are typically assigned to pages, menu entries, languages, and output formats. + +###### weighted page + +Contained within a [taxonomy object](#taxonomy-object), a weighted page is a [map](#map) with two elements: a `Page` object, and its [taxonomic weight](#taxonomic-weight) as defined in front matter. Access the elements using the `Page` and `Weight` keys. diff --git a/docs/content/en/getting-started/quick-start.md b/docs/content/en/getting-started/quick-start.md new file mode 100644 index 000000000..a6c54b54c --- /dev/null +++ b/docs/content/en/getting-started/quick-start.md @@ -0,0 +1,232 @@ +--- +title: Quick start +description: Learn to create a Hugo site in minutes. +categories: [getting started] +keywords: [quick start,usage] +menu: + docs: + parent: getting-started + weight: 20 +weight: 20 +toc: true +aliases: [/quickstart/,/overview/quickstart/] +minVersion: v0.112.0 +--- + +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] (extended edition, {{% param "minVersion" %}} or later) +1. [Install Git] + +You must also be comfortable working from the command line. + +## Create a site + +### Commands + +{{% note %}} +**If you are a Windows user:** + +- Do not use the Command Prompt +- Do not use Windows PowerShell +- Run these commands from [PowerShell] or a Linux terminal such as WSL or Git Bash + +PowerShell and Windows PowerShell [are different applications]. + +[PowerShell]: https://learn.microsoft.com/en-us/powershell/scripting/install/installing-powershell-on-windows +[are different applications]: https://learn.microsoft.com/en-us/powershell/scripting/whats-new/differences-from-windows-powershell?view=powershell-7.3 +{{% /note %}} + +Verify that you have installed Hugo {{% param "minVersion" %}} or later. + +```text +hugo version +``` + +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.git themes/ananke +echo "theme = 'ananke'" >> hugo.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.git themes/ananke +``` + +Append a line to the site configuration file, indicating the current theme. + +```text +echo "theme = 'ananke'" >> hugo.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 content 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 = 2024-01-14T07:07:07+01: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 = 2024-01-14T07:07:07+01: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 (`hugo.toml`) in the root of your project. + +```text +baseURL = 'https://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/ diff --git a/docs/content/en/getting-started/usage.md b/docs/content/en/getting-started/usage.md new file mode 100644 index 000000000..268aed2e4 --- /dev/null +++ b/docs/content/en/getting-started/usage.md @@ -0,0 +1,169 @@ +--- +title: Basic usage +description: Hugo's command line interface (CLI) is fully featured but simple to use, even for those with limited experience working from the command line. +categories: [getting started] +keywords: [usage,livereload,command,flags] +menu: + docs: + parent: getting-started + weight: 30 +weight: 30 +toc: true +aliases: [/overview/usage/,/extras/livereload/,/doc/usage/,/usage/] +--- + +## Test your installation + +After [installing] Hugo, test your installation by running: + +```sh +hugo version +``` + +You should see something like: + +```text +hugo v0.122.0-b9a03bd59d5f71a529acb3e33f995e0ef332b3aa+extended linux/amd64 BuildDate=2024-01-26T15:54:24Z VendorInfo=gohugoio +``` + +## Display available commands + +To see a list of the available commands and flags: + +```sh +hugo help +``` + +To get help with a subcommand, use the `--help` flag. For example: + +```sh +hugo server --help +``` + +## Build your site + +To build your site, `cd` into your project directory and run: + +```sh +hugo +``` + +The [`hugo`] command builds your site, publishing the files to the `public` directory. To publish your site to a different directory, use the [`--destination`] flag or set [`publishDir`] in your site configuration. + +{{% note %}} +Hugo does not clear the `public` directory before building your site. Existing files are overwritten, but not deleted. This behavior is intentional to prevent the inadvertent removal of files that you may have added to the `public` directory after the build. + +Depending on your needs, you may wish to manually clear the contents of the public directory before every build. +{{% /note %}} + +## Draft, future, and expired content + +Hugo allows you to set `draft`, `date`, `publishDate`, and `expiryDate` in the [front matter] of your content. By default, Hugo will not publish content when: + +- The `draft` value is `true` +- The `date` is in the future +- The `publishDate` is in the future +- The `expiryDate` is in the past + +You can override the default behavior when running `hugo` or `hugo server` with command line flags: + +```sh +hugo --buildDrafts # or -D +hugo --buildExpired # or -E +hugo --buildFuture # or -F +``` + +Although you can also set these values in your site configuration, it can lead to unwanted results unless all content authors are aware of, and understand, the settings. + +{{% note %}} +As noted above, Hugo does not clear the `public` directory before building your site. Depending on the _current_ evaluation of the four conditions above, after the build your `public` directory may contain extraneous files from a previous build. + +A common practice is to manually clear the contents of the `public` directory before each build to remove draft, expired, and future content. +{{% /note %}} + +## Develop and test your site + +To view your site while developing layouts or creating content, `cd` into your project directory and run: + +```sh +hugo server +``` + +The [`hugo server`] command builds your site into memory, and serves your pages using a minimal HTTP server. When you run `hugo server` it will display the URL of your local site: + +```text +Web Server is available at http://localhost:1313/ +``` + +While the server is running, it watches your project directory for changes to assets, configuration, content, data, layouts, translations, and static files. When it detects a change, the server rebuilds your site and refreshes your browser using [LiveReload]. + +Most Hugo builds are so fast that you may not notice the change unless you are looking directly at your browser. + +### LiveReload + +While the server is running, Hugo injects JavaScript into the generated HTML pages. The LiveReload script creates a connection from the browser to the server via web sockets. You do not need to install any software or browser plugins, nor is any configuration required. + +### Automatic redirection + +When editing content, if you want your browser to automatically redirect to the page you last modified, run: + +```sh +hugo server --navigateToChanged +``` + +## Deploy your site + +{{% note %}} +As noted above, Hugo does not clear the public directory before building your site. Manually clear the contents of the public directory before each build to remove draft, expired, and future content. +{{% /note %}} + +When you are ready to deploy your site, run: + +```sh +hugo +``` + +This builds your site, publishing the files to the public directory. The directory structure will look something like this: + +```text +public/ +├── categories/ +│ ├── index.html +│ └── index.xml <-- RSS feed for this section +├── post/ +│ ├── my-first-post/ +│ │ └── index.html +│ ├── index.html +│ └── index.xml <-- RSS feed for this section +├── tags/ +│ ├── index.html +│ └── index.xml <-- RSS feed for this section +├── index.html +├── index.xml <-- RSS feed for the site +└── sitemap.xml +``` + +In a simple hosting environment, where you typically `ftp`, `rsync`, or `scp` your files to the root of a virtual host, the contents of the `public` directory are all that you need. + +Most of our users deploy their sites using a CI/CD workflow, where a push[^1] to their GitHub or GitLab repository triggers a build and deployment. Popular providers include [AWS Amplify], [CloudCannon], [Cloudflare Pages], [GitHub Pages], [GitLab Pages], and [Netlify]. + +Learn more in the [hosting and deployment] section. + +[^1]: The Git repository contains the entire project directory, typically excluding the public directory because the site is built _after_ the push. + +[`--destination`]: /commands/hugo/#options +[`hugo server`]: /commands/hugo_server/ +[`hugo`]: /commands/hugo/ +[`publishDir`]: /getting-started/configuration/#publishdir +[AWS Amplify]: https://aws.amazon.com/amplify/ +[CloudCannon]: https://cloudcannon.com/ +[Cloudflare Pages]: https://pages.cloudflare.com/ +[commands]: /commands/ +[front matter]: /content-management/front-matter/ +[GitHub Pages]: https://pages.github.com/ +[GitLab Pages]: https://docs.gitlab.com/ee/user/project/pages/ +[hosting and deployment]: /hosting-and-deployment/ +[hosting]: /hosting-and-deployment/ +[installing]: /installation/ +[LiveReload]: https://github.com/livereload/livereload-js +[Netlify]: https://www.netlify.com/ diff --git a/docs/content/en/hosting-and-deployment/_index.md b/docs/content/en/hosting-and-deployment/_index.md new file mode 100644 index 000000000..35fd3cf05 --- /dev/null +++ b/docs/content/en/hosting-and-deployment/_index.md @@ -0,0 +1,15 @@ +--- +title: Hosting and deployment +linkTitle: Overview +description: Site builds, automated deployments, and popular hosting solutions. +categories: [] +keywords: [] +menu: + docs: + identifier: hosting-and-deployment-overview + parent: hosting-and-deployment + weight: 1 +weight: 1 +--- + +Because Hugo renders *static* websites, you can host your new Hugo website virtually anywhere. The following represent only a few of the more popular hosting and automated deployment solutions used by the Hugo community. diff --git a/docs/content/en/hosting-and-deployment/deployment-with-rclone.md b/docs/content/en/hosting-and-deployment/deployment-with-rclone.md new file mode 100644 index 000000000..410851553 --- /dev/null +++ b/docs/content/en/hosting-and-deployment/deployment-with-rclone.md @@ -0,0 +1,47 @@ +--- +title: Deploy with Rclone +description: If you have access to your web host with SFTP/FTP/SSH/HTTP(DAV), you can use rclone to incrementally deploy your entire Hugo website. +categories: [hosting and deployment] +keywords: [deployment,rclone,sftp] +menu: + docs: + parent: hosting-and-deployment +toc: true +aliases: [/tutorials/deployment-with-rclone/] +--- + +## Assumptions + +* A web host running a web server. This could be a shared hosting environment or a VPS. +* Access to your web host with any of the [protocols supported by rclone](https://rclone.org/#providers), such as SFTP. +* A functional static website built with Hugo +* Deploying from an [Rclone](https://rclone.org) compatible operating system +* You have [installed Rclone](https://rclone.org/install/). + +**NB**: You can remove ``--interactive`` in the commands below once you are comfortable with rclone, if you wish. Also, ``--gc`` and ``--minify`` are optional in the ``hugo`` commands below. + +## Getting started + +The spoiler is that you can even deploy your entire website from any compatible OS with no configuration. Using SFTP for example: + +```txt +hugo --gc --minify +rclone sync --interactive --sftp-host sftp.example.com --sftp-user www-data --sftp-ask-password public/ :sftp:www/ +``` + +## Configure Rclone for even easier usage + +The easiest way is simply to run `rclone config`. + +The [Rclone docs](https://rclone.org/docs/) provide [an example of configuring Rclone to use SFTP](https://rclone.org/sftp/). + +For the next commands, we will assume you configured a remote you named ``hugo-www`` + +The above 'spoiler' commands could become: + +```txt +hugo --gc --minify +rclone sync --interactive public/ hugo-www:www/ +``` + +After you issue the above commands (and respond to any prompts), check your website and you will see that it is deployed. diff --git a/docs/content/en/hosting-and-deployment/deployment-with-rsync.md b/docs/content/en/hosting-and-deployment/deployment-with-rsync.md new file mode 100644 index 000000000..f341ad618 --- /dev/null +++ b/docs/content/en/hosting-and-deployment/deployment-with-rsync.md @@ -0,0 +1,139 @@ +--- +title: Deploy with Rsync +description: If you have access to your web host with SSH, you can use a simple rsync one-liner to incrementally deploy your entire Hugo website. +categories: [hosting and deployment] +keywords: [deployment,rsync] +menu: + docs: + parent: hosting-and-deployment +toc: true +aliases: [/tutorials/deployment-with-rsync/] +--- + +## Assumptions + +* A web host running a web server. This could be a shared hosting environment or a VPS. +* Access to your web host with SSH +* A functional static website built with Hugo + +The spoiler is that you can deploy your entire website with a command that looks like the following: + +```txt +hugo && rsync -avz --delete public/ [email protected]:~/www/ +``` + +As you will see, we'll put this command in a shell script file, which makes building and deployment as easy as executing `./deploy`. + +## Copy Your SSH Key to your host + +To make logging in to your server more secure and less interactive, you can upload your SSH key. If you have already installed your SSH key to your server, you can move on to the next section. + +First, install the ssh client. On Debian distributions, use the following command: + +{{< code file=install-openssh.sh >}} +sudo apt-get install openssh-client +{{< /code >}} + +Then generate your ssh key. First, create the `.ssh` directory in your home directory if it doesn't exist: + +```txt +~$ cd && mkdir .ssh & cd .ssh +``` + +Next, execute this command to generate a new keypair called `rsa_id`: + +```txt +~/.ssh/$ ssh-keygen -t rsa -q -C "For SSH" -f rsa_id +``` + +You'll be prompted for a passphrase, which is an extra layer of protection. Enter the passphrase you'd like to use, and then enter it again when prompted, or leave it blank if you don't want to have a passphrase. Not using a passphrase will let you transfer files non-interactively, as you won't be prompted for a password when you log in, but it is slightly less secure. + +To make logging in easier, add a definition for your web host to the file `~/.ssh/config` with the following command, replacing `HOST` with the IP address or hostname of your web host, and `USER` with the username you use to log in to your web host when transferring files: + +```txt +~/.ssh/$ cat >> config <<EOF +Host HOST + Hostname HOST + Port 22 + User USER + IdentityFile ~/.ssh/rsa_id +EOF +``` + +Then copy your ssh public key to the remote server with the `ssh-copy-id` command: + +```txt +~/.ssh/$ ssh-copy-id -i rsa_id.pub [email protected] +``` + +Now you can easily connect to the remote server: + +```txt +~$ ssh user@host +Enter passphrase for key '/home/mylogin/.ssh/rsa_id': +``` + +Now that you can log in with your SSH key, let's create a script to automate deployment of your Hugo site. + +## Shell script + +Create a new script called `deploy` the root of your Hugo tree: + +```txt +~/websites/topologix.fr$ editor deploy +``` + +Add the following content. Replace the `USER`, `HOST`, and `DIR` values with your own values: + +```sh +#!/bin/sh +USER=my-user +HOST=my-server.com +DIR=my/directory/to/topologix.fr/ # the directory where your web site files should go + +hugo && rsync -avz --delete public/ ${USER}@${HOST}:~/${DIR} # this will delete everything on the server that's not in the local public folder + +exit 0 +``` + +Note that `DIR` is the relative path from the remote user's home. If you have to specify a full path (for instance `/var/www/mysite/`) you must change `~/${DIR}` to `${DIR}` inside the command-line. For most cases you should not have to. + +Save and close, and make the `deploy` file executable: + +```txt +~/websites/topologix.fr$ chmod +x deploy +``` + +Now you only have to enter the following command to deploy and update your website: + +```txt +~/websites/topologix.fr$ ./deploy +``` + +Your site builds and deploys: + +```txt +Started building sites ... +Built site for language en: +0 draft content +0 future content +0 expired content +5 pages created +0 non-page files copied +0 paginator pages created +0 tags created +0 categories created +total in 56 ms +sending incremental file list +404.html +index.html +index.xml +sitemap.xml +posts/ +posts/index.html + +sent 9,550 bytes received 1,708 bytes 7,505.33 bytes/sec +total size is 966,557 speedup is 85.86 +``` + +You can incorporate other processing tasks into this deployment script as well. diff --git a/docs/content/en/hosting-and-deployment/hosting-on-21yunbox.md b/docs/content/en/hosting-and-deployment/hosting-on-21yunbox.md new file mode 100644 index 000000000..2ab0a1964 --- /dev/null +++ b/docs/content/en/hosting-and-deployment/hosting-on-21yunbox.md @@ -0,0 +1,56 @@ +--- +title: Host on 21YunBox +description: Host your Hugo site with 21YunBox's blazing fast Chinese CDN, fully-managed SSL and auto deploys from Gitee. +categories: [hosting and deployment] +keywords: [hosting,21yunbox] +menu: + docs: + parent: hosting-and-deployment +toc: true +--- + +[21YunBox](https://www.21yunbox.com) is a fully-managed cloud platform dedicated to make web deployment easy within the Chinese Great Firewall where you can host static sites, backend APIs, databases, cron jobs, and all your other apps in one place. It provides blazing fast Chinese CDN, continuous deployment, one-click HTTPS and [other services like managed databases and backend web services](https://www.21yunbox.com/docs/), providing an avenue to launch web projects in China. + +21YunBox includes the following features: + +- Continuous, automatic builds & deploys from GitHub and Gitee +- Automatic SSL certificates through [Let's Encrypt](https://letsencrypt.org) +- Instant cache invalidation with a blazing fast, Chinese CDN +- Unlimited [custom domains](https://www.21yunbox.com/docs/#/custom-domains) +- Automatic [Brotli compression](https://en.wikipedia.org/wiki/Brotli) for faster sites +- Native HTTP/2 support +- Automatic HTTP → HTTPS redirects +- Custom URL redirects and rewrites + +## Prerequisites + +This guide assumes you already have a Hugo project to deploy. If you need a project, use the [Quick Start](/getting-started/quick-start/) to get started or fork 21YunBox's [Hugo Example](https://gitee.com/eryiyunbox-examples/hello-hugo) before continuing. + +## Setup + +You can set up a Hugo site on 21YunBox in two quick steps: + +1. Create a new web service on 21YunBox, and give 21YunBox permission to access your GitHub or Gitee repo. +2. Use the following values during creation: + + | Field | Value | + | --------------------- | ------------------------------------------------ | + | **Environment** | `Static Site` | + | **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 21YunBox URL (which looks like `yoursite.21yunbox.com`) as soon as the build is done. + +## Continuous deploys + +Now that 21YunBox is connected to your repo, it will automatically build and publish your site any time you push to GitHub. + +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 21YunBox's [custom domains](https://www.21yunbox.com/docs/#/custom-domains) guide. + +## Support + +Click [here](https://www.21yunbox.com/docs/#/contact) to contact with 21YunBox' experts if you need help. diff --git a/docs/content/en/hosting-and-deployment/hosting-on-aws-amplify.md b/docs/content/en/hosting-and-deployment/hosting-on-aws-amplify.md new file mode 100644 index 000000000..43d75312a --- /dev/null +++ b/docs/content/en/hosting-and-deployment/hosting-on-aws-amplify.md @@ -0,0 +1,46 @@ +--- +title: Host on AWS Amplify +description: Develop and deploy a cloud-powered web app with AWS Amplify. +categories: [hosting and deployment] +keywords: [hosting,amplify] +menu: + docs: + parent: hosting-and-deployment +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/ diff --git a/docs/content/en/hosting-and-deployment/hosting-on-azure-static-web-apps.md b/docs/content/en/hosting-and-deployment/hosting-on-azure-static-web-apps.md new file mode 100644 index 000000000..922cbfef2 --- /dev/null +++ b/docs/content/en/hosting-and-deployment/hosting-on-azure-static-web-apps.md @@ -0,0 +1,14 @@ +--- +title: Host on Azure Static Web Apps +description: Publish a Hugo site to Azure Static Web Apps. +categories: [hosting and deployment] +keywords: [hosting,azure] +menu: + docs: + parent: hosting-and-deployment +toc: true +--- + +You can create and deploy a Hugo web application to Azure Static Web Apps. The final result is a new Azure Static Web App with associated GitHub Actions that give you control over how the app is built and published. You'll learn how to create a Hugo app, set up an Azure Static Web App and deploy the Hugo app to Azure. + +Here's the tutorial on how to [Publish a Hugo site to Azure Static Web Apps](https://docs.microsoft.com/en-us/azure/static-web-apps/publish-hugo). diff --git a/docs/content/en/hosting-and-deployment/hosting-on-cloudflare-pages.md b/docs/content/en/hosting-and-deployment/hosting-on-cloudflare-pages.md new file mode 100644 index 000000000..e50143db7 --- /dev/null +++ b/docs/content/en/hosting-and-deployment/hosting-on-cloudflare-pages.md @@ -0,0 +1,14 @@ +--- +title: Host on Cloudflare Pages +description: Cloudflare Pages can host your Hugo site with CDN, continuous deployment, 1-click HTTPS, an admin GUI, and its own environment variables. +categories: [hosting and deployment] +keywords: [hosting,cloudflare] +menu: + docs: + parent: hosting-and-deployment +toc: true +--- + +[Cloudflare Pages](https://developers.cloudflare.com/pages/) are super fast, always up-to-date, and deployed directly from your [Git provider](https://developers.cloudflare.com/pages/get-started/#connect-your-git-provider-to-pages). + +Cloudflare Pages docs have a detailed tutorial on [how to deploy a Hugo site](https://developers.cloudflare.com/pages/framework-guides/deploy-a-hugo-site/). diff --git a/docs/content/en/hosting-and-deployment/hosting-on-firebase.md b/docs/content/en/hosting-and-deployment/hosting-on-firebase.md new file mode 100644 index 000000000..028964bcf --- /dev/null +++ b/docs/content/en/hosting-and-deployment/hosting-on-firebase.md @@ -0,0 +1,110 @@ +--- +title: 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. +categories: [hosting and deployment] +keywords: [hosting,firebase] +menu: + docs: + parent: hosting-and-deployment +toc: true +--- + +## Assumptions + +1. You have an account with [Firebase][signup]. (If you don't, you can sign up for free using your Google account.) +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): + +```sh +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. + +```sh +firebase login +``` + +In the root of your Hugo project, initialize the Firebase project with the `firebase init` command: + +```sh +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) +Firebase script with retrieve 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? + +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: + +```sh +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/your-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: + +```sh +hugo && firebase deploy +``` + +## CI setup (other tools) + +You can generate a deploy token using + +```sh +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: + +```sh +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/ diff --git a/docs/content/en/hosting-and-deployment/hosting-on-github/gh-pages-1.png b/docs/content/en/hosting-and-deployment/hosting-on-github/gh-pages-1.png Binary files differnew file mode 100644 index 000000000..29912f25c --- /dev/null +++ b/docs/content/en/hosting-and-deployment/hosting-on-github/gh-pages-1.png diff --git a/docs/content/en/hosting-and-deployment/hosting-on-github/gh-pages-2.png b/docs/content/en/hosting-and-deployment/hosting-on-github/gh-pages-2.png Binary files differnew file mode 100644 index 000000000..0050d33e2 --- /dev/null +++ b/docs/content/en/hosting-and-deployment/hosting-on-github/gh-pages-2.png diff --git a/docs/content/en/hosting-and-deployment/hosting-on-github/gh-pages-3.png b/docs/content/en/hosting-and-deployment/hosting-on-github/gh-pages-3.png Binary files differnew file mode 100644 index 000000000..d2904cae1 --- /dev/null +++ b/docs/content/en/hosting-and-deployment/hosting-on-github/gh-pages-3.png diff --git a/docs/content/en/hosting-and-deployment/hosting-on-github/gh-pages-4.png b/docs/content/en/hosting-and-deployment/hosting-on-github/gh-pages-4.png Binary files differnew file mode 100644 index 000000000..75774462b --- /dev/null +++ b/docs/content/en/hosting-and-deployment/hosting-on-github/gh-pages-4.png diff --git a/docs/content/en/hosting-and-deployment/hosting-on-github/gh-pages-5.png b/docs/content/en/hosting-and-deployment/hosting-on-github/gh-pages-5.png Binary files differnew file mode 100644 index 000000000..efe26129a --- /dev/null +++ b/docs/content/en/hosting-and-deployment/hosting-on-github/gh-pages-5.png diff --git a/docs/content/en/hosting-and-deployment/hosting-on-github/index.md b/docs/content/en/hosting-and-deployment/hosting-on-github/index.md new file mode 100644 index 000000000..c3da5ba3e --- /dev/null +++ b/docs/content/en/hosting-and-deployment/hosting-on-github/index.md @@ -0,0 +1,190 @@ +--- +title: Host on GitHub Pages +description: Deploy Hugo as a GitHub Pages project or personal/organizational site and automate the whole process with GitHub Actions +categories: [hosting and deployment] +keywords: [hosting,github] +menu: + docs: + parent: hosting-and-deployment +toc: true +aliases: [/tutorials/github-pages-blog/] +--- + +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. + +## Prerequisites + +1. [Create a GitHub account] +2. [Install Git] +3. [Create a Hugo site] and test it locally with `hugo server`. + +[Create a GitHub account]: https://github.com/signup +[Install Git]: https://git-scm.com/book/en/v2/Getting-Started-Installing-Git +[Create a Hugo site]: /getting-started/quick-start/ + +## Types of sites + +There are three types of GitHub Pages sites: project, user, and organization. Project sites are connected to a specific project hosted on GitHub. User and organization sites are connected to a specific account on GitHub.com. + +{{% note %}} +See the [GitHub Pages documentation] to understand the requirements for repository ownership and naming. + +[GitHub Pages documentation]: https://docs.github.com/en/pages/getting-started-with-github-pages/about-github-pages#types-of-github-pages-sites +{{% /note %}} + +[GitHub Pages documentation]: https://docs.github.com/en/pages/getting-started-with-github-pages/about-github-pages#types-of-github-pages-sites + +## Procedure + +Step 1 +: Create a GitHub repository. + +Step 2 +: Push your local repository to GitHub. + +Step 3 +: Visit your GitHub repository. From the main menu choose **Settings** > **Pages**. In the center of your screen you will see this: + +![screen capture](gh-pages-1.png) +{style="max-width: 280px"} + +Step 4 +: Change the **Source** to `GitHub Actions`. The change is immediate; you do not have to press a Save button. + +![screen capture](gh-pages-2.png) +{style="max-width: 280px"} + +Step 5 +: Create an empty file in your local repository. + +```text +.github/workflows/hugo.yaml +``` + +Step 6 +: Copy and paste the YAML below into the file you created. Change the branch name and Hugo version as needed. + +{{< code file=.github/workflows/hugo.yaml copy=true >}} +# Sample workflow for building and deploying a Hugo site to GitHub Pages +name: Deploy Hugo site to Pages + +on: + # Runs on pushes targeting the default branch + push: + branches: + - main + + # Allows you to run this workflow manually from the Actions tab + workflow_dispatch: + +# Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages +permissions: + contents: read + pages: write + id-token: write + +# Allow only one concurrent deployment, skipping runs queued between the run in-progress and latest queued. +# However, do NOT cancel in-progress runs as we want to allow these production deployments to complete. +concurrency: + group: "pages" + cancel-in-progress: false + +# Default to bash +defaults: + run: + shell: bash + +jobs: + # Build job + build: + runs-on: ubuntu-latest + env: + HUGO_VERSION: 0.122.0 + steps: + - name: Install Hugo CLI + run: | + wget -O ${{ runner.temp }}/hugo.deb https://github.com/gohugoio/hugo/releases/download/v${HUGO_VERSION}/hugo_extended_${HUGO_VERSION}_linux-amd64.deb \ + && sudo dpkg -i ${{ runner.temp }}/hugo.deb + - name: Install Dart Sass + run: sudo snap install dart-sass + - name: Checkout + uses: actions/checkout@v4 + with: + submodules: recursive + fetch-depth: 0 + - name: Setup Pages + id: pages + uses: actions/configure-pages@v4 + - name: Install Node.js dependencies + run: "[[ -f package-lock.json || -f npm-shrinkwrap.json ]] && npm ci || true" + - name: Build with Hugo + env: + # For maximum backward compatibility with Hugo modules + HUGO_ENVIRONMENT: production + HUGO_ENV: production + run: | + hugo \ + --gc \ + --minify \ + --baseURL "${{ steps.pages.outputs.base_url }}/" + - name: Upload artifact + uses: actions/upload-pages-artifact@v2 + with: + path: ./public + + # Deployment job + deploy: + environment: + name: github-pages + url: ${{ steps.deployment.outputs.page_url }} + runs-on: ubuntu-latest + needs: build + steps: + - name: Deploy to GitHub Pages + id: deployment + uses: actions/deploy-pages@v3 +{{< /code >}} + +Step 7 +: Commit the change to your local repository with a commit message of something like "Add workflow", and push to GitHub. + +Step 8 +: From GitHub's main menu, choose **Actions**. You will see something like this: + +![screen capture](gh-pages-3.png) +{style="max-width: 350px"} + +Step 9 +: When GitHub has finished building and deploying your site, the color of the status indicator will change to green. + +![screen capture](gh-pages-4.png) +{style="max-width: 350px"} + +Step 10 +: Click on the commit message as shown above. You will see this: + +![screen capture](gh-pages-5.png) +{style="max-width: 611px"} + +Under the deploy step, you will see a link to your live site. + +In the future, whenever you push a change from your local repository, GitHub will rebuild your site and deploy the changes. + +## Customize the workflow + +The example workflow above includes this step, which typically takes 10‑15 seconds: + +```yaml +- name: Install Dart Sass + run: sudo snap install dart-sass +``` + +You may remove this step if your site, themes, and modules do not transpile Sass to CSS using the [Dart Sass] transpiler. + +[Dart Sass]: /hugo-pipes/transpile-sass-to-css/#dart-sass + +## Additional resources + +- [Learn more about GitHub Actions](https://docs.github.com/en/actions) +- [Caching dependencies to speed up workflows](https://docs.github.com/en/actions/using-workflows/caching-dependencies-to-speed-up-workflows) +- [Manage a custom domain for your GitHub Pages site](https://docs.github.com/en/pages/configuring-a-custom-domain-for-your-github-pages-site/about-custom-domains-and-github-pages) diff --git a/docs/content/en/hosting-and-deployment/hosting-on-gitlab.md b/docs/content/en/hosting-and-deployment/hosting-on-gitlab.md new file mode 100644 index 000000000..87c764f00 --- /dev/null +++ b/docs/content/en/hosting-and-deployment/hosting-on-gitlab.md @@ -0,0 +1,101 @@ +--- +title: Host on GitLab Pages +description: GitLab makes it easy to build, deploy, and host your Hugo website via their free GitLab Pages service, which provides native support for Hugo. +categories: [hosting and deployment] +keywords: [hosting,gitlab] +menu: + docs: + parent: hosting-and-deployment +toc: true +aliases: [/tutorials/hosting-on-gitlab/] +--- + +## Assumptions + +* Working familiarity with Git for version control +* Completion of the Hugo [Quick Start] +* A [GitLab account](https://gitlab.com/users/sign_in) +* A Hugo website on your local machine that you are ready to publish + +## BaseURL + +The `baseURL` in your [site configuration](/getting-started/configuration/) must reflect the full URL of your GitLab pages repository if you are using the default GitLab Pages URL (e.g., `https://<YourUsername>.gitlab.io/<your-hugo-site>/`) and not a custom domain. + +## Configure GitLab CI/CD + +Define your [CI/CD](https://docs.gitlab.com/ee/ci/quick_start/) jobs by creating a `.gitlab-ci.yml` file in the root of your project. + +{{< code file=.gitlab-ci.yml copy=true >}} +variables: + DART_SASS_VERSION: 1.70.0 + HUGO_VERSION: 0.122.0 + NODE_VERSION: 20.x + GIT_DEPTH: 0 + GIT_STRATEGY: clone + GIT_SUBMODULE_STRATEGY: recursive + TZ: America/Los_Angeles + +image: + name: golang:1.20.6-bookworm + +pages: + script: + # Install brotli + - apt-get update + - apt-get install -y brotli + # Install Dart Sass + - curl -LJO https://github.com/sass/dart-sass/releases/download/${DART_SASS_VERSION}/dart-sass-${DART_SASS_VERSION}-linux-x64.tar.gz + - tar -xf dart-sass-${DART_SASS_VERSION}-linux-x64.tar.gz + - cp -r dart-sass/ /usr/local/bin + - rm -rf dart-sass* + - export PATH=/usr/local/bin/dart-sass:$PATH + # Install Hugo + - curl -LJO https://github.com/gohugoio/hugo/releases/download/v${HUGO_VERSION}/hugo_extended_${HUGO_VERSION}_linux-amd64.deb + - apt-get install -y ./hugo_extended_${HUGO_VERSION}_linux-amd64.deb + - rm hugo_extended_${HUGO_VERSION}_linux-amd64.deb + # Install Node.js + - curl -fsSL https://deb.nodesource.com/setup_${NODE_VERSION} | bash - + - apt-get install -y nodejs + # Install Node.js dependencies + - "[[ -f package-lock.json || -f npm-shrinkwrap.json ]] && npm ci || true" + # Build + - hugo --gc --minify + # Compress + - find public -type f -regex '.*\.\(css\|html\|js\|txt\|xml\)$' -exec gzip -f -k {} \; + - find public -type f -regex '.*\.\(css\|html\|js\|txt\|xml\)$' -exec brotli -f -k {} \; + artifacts: + paths: + - public + rules: + - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH +{{% /code %}} + +## Push your Hugo website to GitLab + +Next, create a new repository on GitLab. It is *not* necessary to make the repository public. In addition, you might want to add `/public` to your .gitignore file, as there is no need to push compiled assets to GitLab or keep your output website in version control. + +```sh +# initialize new git repository +git init + +# add /public directory to our .gitignore file +echo "/public" >> .gitignore + +# commit and push code to master branch +git add . +git commit -m "Initial commit" +git remote add origin https://gitlab.com/YourUsername/your-hugo-site.git +git push -u origin master +``` + +## Wait for your page to build + +That's it! You can now follow the CI agent building your page at `https://gitlab.com/<YourUsername>/<your-hugo-site>/pipelines`. + +After the build has passed, your new website is available at `https://<YourUsername>.gitlab.io/<your-hugo-site>/`. + +## Next steps + +GitLab supports using custom CNAME's and TLS certificates. For more details on GitLab Pages, see the [GitLab Pages setup documentation](https://about.gitlab.com/2016/04/07/gitlab-pages-setup/). + +[Quick Start]: /getting-started/quick-start/ diff --git a/docs/content/en/hosting-and-deployment/hosting-on-keycdn.md b/docs/content/en/hosting-and-deployment/hosting-on-keycdn.md new file mode 100644 index 000000000..e81129981 --- /dev/null +++ b/docs/content/en/hosting-and-deployment/hosting-on-keycdn.md @@ -0,0 +1,88 @@ +--- +title: Host on KeyCDN +description: "Accelerate your Hugo site globally with a KeyCDN integration. This tutorial shows you how to set up your static site as a GitLab page behind a KeyCDN pull zone." +categories: [hosting and deployment] +keywords: [hosting,keycdn] +menu: + docs: + parent: hosting-and-deployment +--- + +[KeyCDN](https://www.keycdn.com/) provides a multitude of features to help accelerate and secure your Hugo site globally including Brotli compression, Let's Encrypt support, Origin Shield, and more. + +## Assumptions + +- You already have a Hugo page configured +- You have a GitLab account +- You have a KeyCDN account + +## Create a KeyCDN Pull Zone + +The first step will be to log in to your KeyCDN account and create a new zone. Name this whatever you like and select the [Pull Zone](https://www.keycdn.com/support/create-a-pull-zone/) option. As for the origin URL, your site will be running on [GitLab Pages](https://docs.gitlab.com/ee/user/project/pages/getting_started_part_one.html) with a URL of `https://youruser.gitlab.io/reponame/`. Use this as the Origin URL. + +![Screenshot of KeyCDN's pull zone creation page](/images/hosting-and-deployment/hosting-on-keycdn/keycdn-pull-zone.png) + +While the origin location doesn’t exist yet, you will need to use your new Zone URL address (or [Zone Alias](https://www.keycdn.com/support/create-a-zone-alias/)) in the `.gitlab-ci.yml` file that will be uploaded to your GitLab project. + +Ensure that you use your Zone URL or Zone alias as the `BASEURL` variable in the example below. This will be the user-visible website address. + +## Configure Your .gitlab-ci.yml File + +Your `.gitlab-ci.yml` file should look similar to the example below. Be sure to modify any variables that are specific to your setup. + +```yml +image: alpine:latest + +variables: + BASEURL: "https://cipull-7bb7.kxcdn.com/" + HUGO_VERSION: "0.26" + HUGO_CHECKSUM: "67e4ba5ec2a02c8164b6846e30a17cc765b0165a5b183d5e480149baf54e1a50" + KEYCDN_ZONE_ID: "75544" + +before_script: + - apk update + - apk add curl + +pages: + stage: deploy + script: + - apk add git + - git submodule update --init + - curl -sSL https://github.com/gohugoio/hugo/releases/download/v${HUGO_VERSION}/hugo_${HUGO_VERSION}_Linux-64bit.tar.gz -o /tmp/hugo.tar.gz + - echo "${HUGO_CHECKSUM} /tmp/hugo.tar.gz" | sha256sum -c + - tar xf /tmp/hugo.tar.gz hugo -C /tmp/ && cp /tmp/hugo /usr/bin + - hugo --baseURL ${BASEURL} + - curl "https://api.keycdn.com/zones/purge/${KEYCDN_ZONE_ID}.json" -u "${KEYCDN_API_KEY}:" + artifacts: + paths: + - public + only: + - master +``` + +Using this integration method, you will have to specify the Zone ID and your [KeyCDN API](https://www.keycdn.com/api) key as secret variables. To do this, navigate to the top-left menu bar in GitLab and select Projects. Then, select your project and click on the Settings page. Finally, select Pipelines from the sub-menu and scroll down to the Secret Variable section. + +The Secret Variable for your Zone ID should look similar to: + +![Screenshot of setting the Zone ID secret variable](/images/hosting-and-deployment/hosting-on-keycdn/secret-zone-id.png) + +While the Secret Variable for your API Key will look similar to: + +![Screenshot of setting the API Key secret variable](/images/hosting-and-deployment/hosting-on-keycdn/secret-api-key.png) + +The Zone ID and API key are used to purge your zone – it’s not strictly needed but otherwise, the CDN might deliver older versions of your assets for quite a while. + +## Push your changes to GitLab + +Now it’s time to push the newly created repository to GitLab: + +```sh +git remote add origin [email protected]:youruser/ci-example.git +git push -u origin master +``` + +You can watch the progress and CI job output in your GitLab project under “Pipelines”. + +After verifying your CI job ran without issues, first check that your GitLab page shows up under `https://youruser.gitlab.io/reponame/` (it might look broken depending on your browser settings as all links point to your KeyCDN zone – don’t worry about that) and then by heading to whatever Zone alias / Zone URL you defined. + +To learn more about Hugo hosting options with KeyCDN, check out the complete [Hugo hosting with KeyCDN integration guide](https://www.keycdn.com/support/hugo-hosting/). diff --git a/docs/content/en/hosting-and-deployment/hosting-on-netlify.md b/docs/content/en/hosting-and-deployment/hosting-on-netlify.md new file mode 100644 index 000000000..2dcdd95f5 --- /dev/null +++ b/docs/content/en/hosting-and-deployment/hosting-on-netlify.md @@ -0,0 +1,145 @@ +--- +title: Host on Netlify +description: Netlify can host your Hugo site with CDN, continuous deployment, 1-click HTTPS, an admin GUI, and its own CLI. +categories: [hosting and deployment] +keywords: [hosting,netlify] +menu: + docs: + parent: hosting-and-deployment +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. +* 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 + +Go to [app.netlify.com] and select your preferred sign up 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) + +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], 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 >}} +[context.production.environment] + HUGO_VERSION = "0.122.0" +{{< /code >}} + +For testing: + +{{< code file=netlify.toml >}} +[context.deploy-preview.environment] + HUGO_VERSION = "0.122.0" +{{< /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`: + +{{< readfile file=netlify.toml highlight=toml >}} + +## 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 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: + +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/#build-your-site +[site configuration]: /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 +[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 diff --git a/docs/content/en/hosting-and-deployment/hosting-on-render.md b/docs/content/en/hosting-and-deployment/hosting-on-render.md new file mode 100644 index 000000000..b43261c8d --- /dev/null +++ b/docs/content/en/hosting-and-deployment/hosting-on-render.md @@ -0,0 +1,81 @@ +--- +title: Host on Render +description: Host your Hugo site for free with Render's global CDN, fully-managed SSL and auto deploys from GitHub. +categories: [hosting and deployment] +keywords: [hosting] +menu: + docs: + parent: hosting-and-deployment +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 `[email protected]` if you need help. + +[Quick Start]: /getting-started/quick-start/ diff --git a/docs/content/en/hosting-and-deployment/hugo-deploy.md b/docs/content/en/hosting-and-deployment/hugo-deploy.md new file mode 100644 index 000000000..45b917f1e --- /dev/null +++ b/docs/content/en/hosting-and-deployment/hugo-deploy.md @@ -0,0 +1,249 @@ +--- +title: Hugo Deploy +description: Upload your site to GCS, S3, or Azure +categories: [hosting and deployment] +keywords: [deployment,s3,gcs,azure] +menu: + docs: + parent: hosting-and-deployment + weight: 20 +weight: 20 +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. +* You have created a bucket to deploy to. If you want your site to be + public, be sure to configure the bucket to be publicly readable as a static website. + * Google Cloud: [create a bucket](https://cloud.google.com/storage/docs/creating-buckets) and [host a static website](https://cloud.google.com/storage/docs/hosting-static-website) + * Amazon S3: [create a bucket](https://docs.aws.amazon.com/AmazonS3/latest/gsg/CreatingABucket.html) and [host a static website](https://docs.aws.amazon.com/AmazonS3/latest/userguide/WebsiteHosting.html) + * Microsoft Azure: [create a storage container](https://docs.microsoft.com/en-us/azure/storage/blobs/storage-quickstart-blobs-portal) and [host a static website](https://learn.microsoft.com/en-us/azure/storage/blobs/storage-blob-static-website) + + +## Configuring your first deployment + +In the configuration file for your site, add a `[deployment]` section +and a `[[deployment.targets]]` subsection. The only required parameters are +the name and URL: + +```toml +[deployment] + +[[deployment.targets]] +# An arbitrary name for this target. +name = "production" + +# URL specifies the Go Cloud Development Kit URL to deploy to. Examples: +URL = "<FILL ME IN>" + +# Google Cloud Storage -- see https://gocloud.dev/howto/blob/#gcs +#URL = "gs://<Bucket Name>" + +# Amazon Web Services 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>" + +# Microsoft Azure Blob Storage; see https://gocloud.dev/howto/blob/#azure +#URL = "azblob://$web" + +``` + +## Deploy + +To deploy to a target: + +```bash +hugo deploy [--target=<target name>] +``` + +The deploy process recursively walks through your local publish directory +(`public` by default) and syncs it to the destination bucket, to ensure +that the local and remote contents match. + +If you don't specify a target, Hugo will deploy to the first target in your +configuration. + +See `hugo help deploy` or [the deploy command-line documentation][commandline] for more command-line options. + + +### How the file list works + +The first thing `hugo deploy` does is create file lists for local and remote by +traversing the local publish directory and remote bucket. + +For both local and remote, the file list includes and excludes files according to +the [deployment target's configuration][config] -- +* If the configuration specifies an `include` pattern, all files + are skipped by default except those matching the pattern. +* If the configuration specifies an `exclude` pattern, files matching the + pattern are skipped. + + +{{% note %}} +When creating the local file list, a few additional skips apply: first, Hugo always +skips files named `.DS_Store`. + +Second, Hugo always skips local hidden directories +(directories with names starting with a period, e.g. `.git`) and does not +traverse into them, except for the special [hidden directory named +`.well-known`](https://en.wikipedia.org/wiki/Well-known_URI), which is +traversed if it exists. +{{% /note %}} + + + +### How the local and remote file lists are compared + +In the second step, Hugo compares the two file lists to figure out what changes +actually need to be made on the remote. File names are compared first; if the +local and remote files both exist then the sizes and md5sums are compared. Any +difference means that the file will be (re-)uploaded. + +Specifying the `--force` flag will ensure all files are re-uploaded even +if Hugo cannot detect any differences between local and remote. + +Files are deleted from the remote bucket if they are not present in the local +file list. + +{{% note %}} +If a remote file is excluded from the file list generation using the +exclude/include configs, then the comparison step will not know to delete the +file -- so it will remain on the remote even if it isn't present locally. +{{% /note %}} + +If the [`--confirm` or `--dryRun` flags][commandline] are given, Hugo displays +what differences it has found and either pauses or stops here. + +### How synchronization works + +Hugo applies the list of changes to the remote storage bucket. Missing and/or +changed files are uploaded, and files missing locally but present remotely are +deleted. As files are uploaded, their headers are also configured on the remote +according to the matchers configuration. + +{{% note %}} +As a safety measure to help prevent accidents, if there are more than 256 files +to delete, Hugo won't delete any files from the remote. Use the `--maxDeletes` +command line flag to override this. +{{% /note %}} + +## Advanced configuration + +Here's a full example deployment configuration: + +```toml +[deployment] + +# By default, files are uploaded in an arbitrary order. +# If you specify an `order` list, files that match regular expressions +# in this list will be uploaded first, in the specified order. +order = [".jpg$", ".gif$"] + +[[deployment.targets]] +# Define one or more targets, e.g., staging and production. +# Each target gets its own [[deployment.targets]] section. + +# An arbitrary name for this target. +name = "mydeployment" +# The Go Cloud Development Kit URL to deploy to. Examples: +URL = "<FILL ME IN>" + +# 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 = "<FILL ME IN>" + +# Include or exclude specific files when deploying to this target: +# 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. +# Note: 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. +# +# The pattern syntax is documented here: https://godoc.org/github.com/gobwas/glob#Glob +# Patterns should be written with forward slashes as separator. +# +#include = "**.html" # would only include files with ".html" suffix +#exclude = "**.{jpg, png}" # would exclude files with ".jpg" or ".png" suffix + + +####################### +[[deployment.matchers]] +# Matchers enable special caching, content type and compression behavior for +# specified file types. You can include any number of matcher blocks; the first one +# matching a given file pattern will be used. + +# See https://golang.org/pkg/regexp/syntax/ for pattern syntax. +# Pattern searching is stopped on first match. +pattern = "<FILL ME IN>" + +# If true, Hugo will gzip the file before uploading it to the bucket. +# With many storage services, this will save on storage and bandwidth costs +# for uncompressed file types. +#gzip = false + +# If true, Hugo always re-uploads this file even if size and md5 match. +# This is useful if Hugo isn't reliably able to determine whether to re-upload +# the file on its own. +#force = false + +# Content-type header to configure for this file when served. +# By default this can be determined from the file extension. +#contentType = "" + +# Cache-control header to configure for this file when served. +# The default is the empty string. +#cacheControl = "" + +# Content-encoding header to configure for this file when served. +# By default, if gzip is True, this will be filled with "gzip". +#contentEncoding = "" + + +# 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 +``` + +[Quick Start]: /getting-started/quick-start/ +[commandline]: /commands/hugo_deploy/ +[config]: #advanced-configuration diff --git a/docs/content/en/hugo-modules/_index.md b/docs/content/en/hugo-modules/_index.md new file mode 100644 index 000000000..cbff13ad0 --- /dev/null +++ b/docs/content/en/hugo-modules/_index.md @@ -0,0 +1,29 @@ +--- +title: Hugo Modules +linkTitle: Overview +description: How to use Hugo Modules. +categories: [] +keywords: [] +menu: + docs: + identifier: hugo-modules-overview + parent: modules + weight: 10 +weight: 10 +toc: true +aliases: [/themes/overview/,/themes/] +--- + +**Hugo Modules** are the core building blocks in Hugo. A _module_ can be your main project or a smaller module providing one or more of the 7 component types defined in Hugo: **static**, **content**, **layouts**, **data**, **assets**, **i18n**, and **archetypes**. + +You can combine modules in any combination you like, and even mount directories from non-Hugo projects, forming a big, virtual union file system. + +Hugo Modules are powered by Go Modules. For more information about Go Modules, see: + +- [https://github.com/golang/go/wiki/Modules](https://github.com/golang/go/wiki/Modules) +- [https://go.dev/blog/using-go-modules](https://go.dev/blog/using-go-modules) + +Some example projects: + +- [https://github.com/bep/docuapi](https://github.com/bep/docuapi) is a theme that has been ported to Hugo Modules while testing this feature. It is a good example of a non-Hugo-project mounted into Hugo’s folder structure. It even shows a JS Bundler implementation in regular Go templates. +- [https://github.com/bep/my-modular-site](https://github.com/bep/my-modular-site) is a very simple site used for testing. diff --git a/docs/content/en/hugo-modules/configuration.md b/docs/content/en/hugo-modules/configuration.md new file mode 100644 index 000000000..ce9e97d81 --- /dev/null +++ b/docs/content/en/hugo-modules/configuration.md @@ -0,0 +1,181 @@ +--- +title: Configure Hugo modules +description: This page describes the configuration options for a module. +categories: [hugo modules] +keywords: [modules,themes] +menu: + docs: + parent: modules + weight: 20 +weight: 20 +toc: true +--- + +## Module configuration: top level + +{{< code-toggle file=hugo >}} +[module] +noProxy = 'none' +noVendor = '' +private = '*.*' +proxy = 'direct' +replacements = '' +vendorClosest = false +workspace = 'off' +{{< /code-toggle >}} + +noProxy +: Comma separated glob list matching paths that should not use the proxy configured above. + +noVendor +: A optional Glob pattern matching module paths to skip when vendoring, e.g. "github.com/**" + +private +: Comma separated glob list matching paths that should be treated as private. + +proxy +: Defines the proxy server to use to download remote modules. Default is `direct`, which means "git clone" and similar. + +vendorClosest +: When enabled, we will pick the vendored module closest to the module using it. The default behavior is to pick the first. Note that there can still be only one dependency of a given module path, so once it is in use it cannot be redefined. + +workspace +: The workspace file to use. This enables Go workspace mode. Note that this can also be set via OS env, e.g. `export HUGO_MODULE_WORKSPACE=/my/hugo.work` This only works with Go 1.18+. In Hugo `v0.109.0` we changed the default to `off` and we now resolve any relative work file names relative to the working directory. + +replacements +: A comma-separated list of mappings from module paths to directories, e.g. `github.com/bep/my-theme -> ../..,github.com/bep/shortcodes -> /some/path`. This is mostly useful for temporary local development of a module, in which case you might want to save it as an environment variable, e.g: `env HUGO_MODULE_REPLACEMENTS="github.com/bep/my-theme -> ../.."`. Relative paths are relative to [themesDir](/getting-started/configuration/#all-configuration-settings). Absolute paths are allowed. + +Note that the above terms maps directly to their counterparts in Go Modules. Some of these setting may be natural to set as OS environment variables. To set the proxy server to use, as an example: + +```txt +env HUGO_MODULE_PROXY=https://proxy.example.org hugo +``` + +{{< gomodules-info >}} + +## Module configuration: hugoVersion + +If your module requires a particular version of Hugo to work, you can indicate that in the `module` section and the user will be warned if using a too old/new version. + +{{< code-toggle file=hugo >}} +[module] +[module.hugoVersion] + min = "" + max = "" + extended = false + +{{< /code-toggle >}} + +Any of the above can be omitted. + +min +: The minimum Hugo version supported, e.g. `0.55.0` + +max +: The maximum Hugo version supported, e.g. `0.55.0` + +extended +: Whether the extended version of Hugo is required. + +## Module configuration: imports + +{{< code-toggle file=hugo >}} +[module] +[[module.imports]] + path = "github.com/gohugoio/hugoTestModules1_linux/modh1_2_1v" + ignoreConfig = false + ignoreImports = false + disable = false +[[module.imports]] + path = "my-shortcodes" +{{< /code-toggle >}} + +path +: Can be either a valid Go Module module path, e.g. `github.com/gohugoio/myShortcodes`, or the directory name for the module as stored in your themes folder. + +ignoreConfig +: If enabled, any module configuration file, e.g. `hugo.toml`, will not be loaded. Note that this will also stop the loading of any transitive module dependencies. + +ignoreImports +: If enabled, module imports will not be followed. + +disable +: Set to `true` to disable the module while keeping any version info in the `go.*` files. + +noMounts +: Do not mount any folder in this import. + +noVendor +: Never vendor this import (only allowed in main project). + +{{< gomodules-info >}} + +## Module configuration: mounts + +{{% note %}} +When the `mounts` configuration was introduced in Hugo 0.56.0, we were careful to preserve the existing `contentDir`, `staticDir`, and similar configuration to make sure all existing sites just continued to work. But you should not have both: if you add a `mounts` section you should remove the old `contentDir`, `staticDir`, etc. settings. +{{% /note %}} + +{{% note %}} +When you add a mount, the default mount for the concerned target root is ignored: be sure to explicitly add it. +{{% /note %}} + +**Default mounts** +{{< code-toggle file=hugo >}} +[module] +[[module.mounts]] + source="content" + target="content" +[[module.mounts]] + source="static" + target="static" +[[module.mounts]] + source="layouts" + target="layouts" +[[module.mounts]] + source="data" + target="data" +[[module.mounts]] + source="assets" + target="assets" +[[module.mounts]] + source="i18n" + target="i18n" +[[module.mounts]] + source="archetypes" + target="archetypes" +{{< /code-toggle >}} + +source +: The source directory of the mount. For the main project, this can be either project-relative or absolute and even a symbolic link. For other modules it must be project-relative. + +target +: Where it should be mounted into Hugo's virtual filesystem. It must start with one of Hugo's component folders: `static`, `content`, `layouts`, `data`, `assets`, `i18n`, or `archetypes`. E.g. `content/blog`. + +lang +: The language code, e.g. "en". Only relevant for `content` mounts, and `static` mounts when in multihost mode. + +includeFiles (string or slice) +: One or more [glob](https://github.com/gobwas/glob) patterns matching files or directories to include. If `excludeFiles` is not set, the files matching `includeFiles` will be the files mounted. + +The glob patterns are matched to the file names starting from the `source` root, they should have Unix styled slashes even on Windows, `/` matches the mount root and `**` can be used as a super-asterisk to match recursively down all directories, e.g `/posts/**.jpg`. + +The search is case-insensitive. + +excludeFiles (string or slice) +: One or more glob patterns matching files to exclude. + +**Example** +{{< code-toggle file=hugo >}} +[module] +[[module.mounts]] + source="content" + target="content" + excludeFiles="docs/*" +[[module.mounts]] + source="node_modules" + target="assets" +[[module.mounts]] + source="assets" + target="assets" +{{< /code-toggle >}} diff --git a/docs/content/en/hugo-modules/theme-components.md b/docs/content/en/hugo-modules/theme-components.md new file mode 100644 index 000000000..947a0ff79 --- /dev/null +++ b/docs/content/en/hugo-modules/theme-components.md @@ -0,0 +1,45 @@ +--- +title: Theme components +description: Hugo provides advanced theming support with Theme Components. +categories: [hugo modules] +keywords: [modules,themes] +menu: + docs: + parent: modules + weight: 40 +weight: 40 +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=hugo >}} +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 `hugo.toml` (theme inheritance).[^1] + +The theme definition example above in `hugo.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 file systems, 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. `hugo.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 parameter/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` diff --git a/docs/content/en/hugo-modules/use-modules.md b/docs/content/en/hugo-modules/use-modules.md new file mode 100644 index 000000000..295ff2061 --- /dev/null +++ b/docs/content/en/hugo-modules/use-modules.md @@ -0,0 +1,161 @@ +--- +title: Use Hugo Modules +description: How to use Hugo Modules to build and manage your site. +categories: [hugo modules] +keywords: [modules,themes] +menu: + docs: + parent: modules + weight: 30 +weight: 30 +aliases: [/themes/usage/,/themes/installing/,/installing-and-using-themes/] +toc: true +--- + +## Prerequisite + +{{< gomodules-info >}} + +## Initialize a new module + +Use `hugo mod init` to initialize a new Hugo Module. If it fails to guess the module path, you must provide it as an argument, e.g.: + +```sh +hugo mod init github.com/gohugoio/myShortcodes +``` + +Also see the [CLI Doc](/commands/hugo_mod_init/). + +## Use a module for a theme + +The easiest way to use a Module for a theme is to import it in the configuration. + +1. Initialize the hugo module system: `hugo mod init github.com/<your_user>/<your_project>` +2. Import the theme: + +{{< code-toggle file=hugo >}} +[module] + [[module.imports]] + path = "github.com/spf13/hyde" +{{< /code-toggle >}} + +## Update modules + +Modules will be downloaded and added when you add them as imports to your configuration, see [Module Imports](/hugo-modules/configuration/#module-configuration-imports). + +To update or manage versions, you can use `hugo mod get`. + +Some examples: + +### Update all modules + +```sh +hugo mod get -u +``` + +### Update all modules recursively + +```sh +hugo mod get -u ./... +``` + +### Update one module + +```sh +hugo mod get -u github.com/gohugoio/myShortcodes +``` + +### Get a specific version + +```sh +hugo mod get github.com/gohugoio/[email protected] +``` + +Also see the [CLI Doc](/commands/hugo_mod_get/). + +## Make and test changes in a module + +One way to do local development of a module imported in a project is to add a replace directive to a local directory with the source in `go.mod`: + +```sh +replace github.com/bep/hugotestmods/mypartials => /Users/bep/hugotestmods/mypartials +``` + +If you have the `hugo server` running, the configuration will be reloaded and `/Users/bep/hugotestmods/mypartials` put on the watch list. + +Instead of modifying the `go.mod` files, you can also use the modules configuration [`replacements`](/hugo-modules/configuration/#module-configuration-top-level) option. + +## Print dependency graph + +Use `hugo mod graph` from the relevant module directory and it will print the dependency graph, including vendoring, module replacement or disabled status. + +E.g.: + +```txt +hugo mod graph + +github.com/bep/my-modular-site github.com/bep/hugotestmods/[email protected] +github.com/bep/my-modular-site github.com/bep/hugotestmods/[email protected] +github.com/bep/hugotestmods/[email protected] github.com/bep/hugotestmods/[email protected] +github.com/bep/hugotestmods/[email protected] github.com/bep/hugotestmods/[email protected] +DISABLED github.com/bep/my-modular-site github.com/spf13/[email protected] +github.com/bep/my-modular-site github.com/bep/[email protected] +github.com/bep/my-modular-site in-themesdir +``` + +Also see the [CLI Doc](/commands/hugo_mod_graph/). + +## Vendor your modules + +`hugo mod vendor` will write all the module dependencies to a `_vendor` folder, which will then be used for all subsequent builds. + +Note that: + +* You can run `hugo mod vendor` on any level in the module tree. +* Vendoring will not store modules stored in your `themes` folder. +* Most commands accept a `--ignoreVendorPaths` flag, which will then not use the vendored modules in `_vendor` for the module paths matching the [Glob](https://github.com/gobwas/glob) pattern given. + +Also see the [CLI Doc](/commands/hugo_mod_vendor/). + +## Tidy go.mod, go.sum + +Run `hugo mod tidy` to remove unused entries in `go.mod` and `go.sum`. + +Also see the [CLI Doc](/commands/hugo_mod_clean/). + +## Clean module cache + +Run `hugo mod clean` to delete the entire modules cache. + +Note that you can also configure the `modules` cache with a `maxAge`, see [File Caches](/getting-started/configuration/#configure-file-caches). + +Also see the [CLI Doc](/commands/hugo_mod_clean/). + +## Module workspaces + +{{< new-in 0.109.0 >}} + +Workspace support was added in [Go 1.18](https://go.dev/blog/get-familiar-with-workspaces) and Hugo got solid support for it in the `v0.109.0` version. + +A common use case for a workspace is to simplify local development of a site with its theme modules. + +A workspace can be configured in a `*.work` file and activated with the [module.workspace](/hugo-modules/configuration/) setting, which for this use is commonly controlled via the `HUGO_MODULE_WORKSPACE` OS environment variable. + +See the [hugo.work](https://github.com/gohugoio/hugo/blob/master/docs/hugo.work) file in the Hugo Docs repo for an example: + +```text +go 1.20 + +use . +use ../gohugoioTheme +``` + +Using the `use` directive, list all the modules you want to work on, pointing to its relative location. As in the example above, it's recommended to always include the main project (the ".") in the list. + +With that you can start the Hugo server with that workspace enabled: + +```sh +HUGO_MODULE_WORKSPACE=hugo.work hugo server --ignoreVendorPaths "**" +``` + +The `--ignoreVendorPaths` flag is added above to ignore any of the vendored dependencies inside `_vendor`. If you don't use vendoring, you don't need that flag. But now the server is set up watching the files and directories in the workspace and you can see your local edits reloaded. diff --git a/docs/content/en/hugo-pipes/_index.md b/docs/content/en/hugo-pipes/_index.md new file mode 100755 index 000000000..edc41b7a2 --- /dev/null +++ b/docs/content/en/hugo-pipes/_index.md @@ -0,0 +1,12 @@ +--- +title: Hugo Pipes +linkTitle: Overview +categories: [] +keywords: [] +menu: + docs: + identifier: hugo-pipes-overview + parent: hugo-pipes + weight: 10 +weight: 10 +--- diff --git a/docs/content/en/hugo-pipes/babel.md b/docs/content/en/hugo-pipes/babel.md new file mode 100755 index 000000000..c447983a9 --- /dev/null +++ b/docs/content/en/hugo-pipes/babel.md @@ -0,0 +1,76 @@ +--- +title: Babel +description: Hugo Pipes can process JS files with Babel. +categories: [asset management] +keywords: [] +menu: + docs: + parent: hugo-pipes + weight: 70 +weight: 70 +function: + aliases: [babel] + returnType: resource.Resource + signatures: ['resources.Babel [OPTIONS] RESOURCE'] +--- + +## Usage + +Any JavaScript resource file can be transpiled to another JavaScript version using `resources.Babel` which takes for argument the resource object and an optional dict of options listed below. Babel uses the [babel cli](https://babeljs.io/docs/en/babel-cli). + +{{% note %}} +Hugo Pipe's Babel requires the `@babel/cli` and `@babel/core` JavaScript packages to be installed in the project or globally (`npm install -g @babel/cli @babel/core`) along with any Babel plugin(s) or preset(s) used (e.g., `npm install @babel/preset-env --save-dev`). + +If you are using the Hugo Snap package, Babel and plugin(s) need to be installed locally within your Hugo site directory, e.g., `npm install @babel/cli @babel/core --save-dev` without the `-g` flag. +{{% /note %}} + +## Configuration + +We add the main project's `node_modules` to `NODE_PATH` when running Babel and similar tools. There are some known [issues](https://github.com/babel/babel/issues/5618) with Babel in this area, so if you have a `babel.config.js` living in a Hugo Module (and not in the project itself), we recommend using `require` to load the presets/plugins, e.g.: + +```js +module.exports = { + presets: [ + [ + require("@babel/preset-env"), + { + useBuiltIns: "entry", + corejs: 3, + }, + ], + ], +}; +``` + +## Options + +config +: (`string`) Path to the Babel configuration file. Hugo will, by default, look for a `babel.config.js` in your project. More information on these configuration files can be found here: [babel configuration](https://babeljs.io/docs/en/configuration). + +minified +: (`bool`) Save as many bytes as possible when printing + +noComments +: (`bool`) Write comments to generated output (true by default) + +compact +: (`bool`) Do not include superfluous whitespace characters and line terminators. Defaults to `auto` if not set. + +verbose +: (`bool`) Log everything + +sourceMap +: (`string`) Output `inline` or `external` sourcemap from the babel compile. External sourcemaps will be written to the target with the output file name + ".map". Input sourcemaps can be read from js.Build and node modules and combined into the output sourcemaps. + +## Examples + +```go-html-template +{{- $transpiled := resources.Get "scripts/main.js" | babel -}} +``` + +Or with options: + +```go-html-template +{{ $opts := dict "noComments" true }} +{{- $transpiled := resources.Get "scripts/main.js" | babel $opts -}} +``` diff --git a/docs/content/en/hugo-pipes/bundling.md b/docs/content/en/hugo-pipes/bundling.md new file mode 100755 index 000000000..7fc9fc9df --- /dev/null +++ b/docs/content/en/hugo-pipes/bundling.md @@ -0,0 +1,26 @@ +--- +title: Concat +linkTitle: Concatenating assets +description: Bundle any number of assets into one resource. +categories: [asset management] +keywords: [] +menu: + docs: + parent: hugo-pipes + weight: 90 +weight: 90 +action: + aliases: [] + returnType: resource.Resource + signatures: ['resources.Concat TARGETPATH [RESOURCE...]'] +--- + +## Usage + +Asset files of the same MIME type can be bundled into one resource using `resources.Concat` which takes two arguments, the target path for the created resource bundle and a slice of resource objects to be concatenated. + +```go-html-template +{{ $plugins := resources.Get "js/plugins.js" }} +{{ $global := resources.Get "js/global.js" }} +{{ $js := slice $plugins $global | resources.Concat "js/bundle.js" }} +``` diff --git a/docs/content/en/hugo-pipes/fingerprint.md b/docs/content/en/hugo-pipes/fingerprint.md new file mode 100755 index 000000000..68e41acd1 --- /dev/null +++ b/docs/content/en/hugo-pipes/fingerprint.md @@ -0,0 +1,30 @@ +--- +title: Fingerprint +linkTitle: Fingerprinting and SRI hashing +description: Process a given resource, adding a hash string of the resource's content. +categories: [asset management] +keywords: [] +menu: + docs: + parent: hugo-pipes + weight: 100 +weight: 100 +action: + aliases: [fingerprint] + returnType: resource.Resource + signatures: ['resources.Fingerprint [ALGORITHM] RESOURCE'] +--- + +## Usage + +Fingerprinting and [SRI](https://developer.mozilla.org/en-US/docs/Web/Security/Subresource_Integrity) can be applied to any asset file using `resources.Fingerprint` which takes two arguments, the resource object and an optional [hash algorithm](https://en.wikipedia.org/wiki/Secure_Hash_Algorithms). + +The default hash algorithm is `sha256`. Other available algorithms are `sha384` and (as of Hugo `0.55`) `sha512` and `md5`. + +Any so processed asset will bear a `.Data.Integrity` property containing an integrity string, which is made up of the name of the hash algorithm, one hyphen and the base64-encoded hash sum. + +```go-html-template +{{ $js := resources.Get "js/global.js" }} +{{ $secureJS := $js | resources.Fingerprint "sha512" }} +<script src="{{ $secureJS.Permalink }}" integrity="{{ $secureJS.Data.Integrity }}"></script> +``` diff --git a/docs/content/en/hugo-pipes/introduction.md b/docs/content/en/hugo-pipes/introduction.md new file mode 100755 index 000000000..c993377f8 --- /dev/null +++ b/docs/content/en/hugo-pipes/introduction.md @@ -0,0 +1,79 @@ +--- +title: Hugo Pipes +linkTitle: Introduction +description: Hugo Pipes is Hugo's asset processing set of functions. +categories: [asset management] +keywords: [] +menu: + docs: + parent: hugo-pipes + weight: 20 +weight: 20 +toc: true +aliases: [/assets/] +--- + +## Find resources in assets + +This is about global and remote resources. + +global resource +: A file within the assets directory, or within any directory [mounted] to the assets directory. + +remote resource +: A file on a remote server, accessible via HTTP or HTTPS. + +For `.Page` scoped resources, see the [page resources] section. + +[mounted]: /hugo-modules/configuration/#module-configuration-mounts +[page resources]: /content-management/page-resources/ + +## Get a resource + +In order to process an asset with Hugo Pipes, it must be retrieved as a resource. + +For global resources, use: + +- [`resources.ByType`](/functions/resources/bytype/) +- [`resources.Get`](/functions/resources/get/) +- [`resources.GetMatch`](/functions/resources/getmatch/) +- [`resources.Match`](/functions/resources/match/) + +For remote resources, use: + +- [`resources.GetRemote`](/functions/resources/getremote/) + +See the [GoDoc Page](https://pkg.go.dev/github.com/gohugoio/hugo/tpl/resources) for the `resources` package for an up to date overview of all template functions in this namespace. + +## Copy a resource + +See the [`resources.Copy`](/functions/resources/copy/) function. + +## Asset directory + +Asset files must be stored in the asset directory. This is `/assets` by default, but can be configured via the configuration file's `assetDir` key. + +## Asset publishing + +Hugo publishes assets to the `publishDir` (typically `public`) when you invoke `.Permalink`, `.RelPermalink`, or `.Publish`. You can use `.Content` to inline the asset. + +## Go Pipes + +For improved readability, the Hugo Pipes examples of this documentation will be written using [Go Pipes](/templates/introduction/#pipes): + +```go-html-template +{{ $style := resources.Get "sass/main.scss" | resources.ToCSS | resources.Minify | resources.Fingerprint }} +<link rel="stylesheet" href="{{ $style.Permalink }}"> +``` + +## Caching + +Hugo Pipes invocations are cached based on the entire *pipe chain*. + +An example of a pipe chain is: + +```go-html-template +{{ $mainJs := resources.Get "js/main.js" | js.Build "main.js" | minify | fingerprint }} +``` + +The pipe chain is only invoked the first time it is encountered in a site build, and results are otherwise loaded from cache. As such, Hugo Pipes can be used in templates which are executed thousands or millions of times without negatively impacting the build performance. diff --git a/docs/content/en/hugo-pipes/js.md b/docs/content/en/hugo-pipes/js.md new file mode 100644 index 000000000..9d2bbbd82 --- /dev/null +++ b/docs/content/en/hugo-pipes/js.md @@ -0,0 +1,166 @@ +--- +title: js.Build +linkTitle: JavaScript building +description: Bundle, transpile, tree shake, and minify JavaScript resources. +categories: [asset management] +keywords: [] +menu: + docs: + parent: hugo-pipes + weight: 60 +weight: 60 +action: + aliases: [] + returnType: resource.Resource + signatures: ['js.Build [OPTIONS] RESOURCE'] +--- + +## Usage + +Any JavaScript resource file can be transpiled and "tree shaken" using `js.Build` which takes for argument either a string for the filepath or a dict of options listed below. + +### Options + +targetPath +: (`string`) If not set, the source path will be used as the base target path. +Note that the target path's extension may change if the target MIME type is different, e.g. when the source is TypeScript. + +params {{< new-in "0.96.0" >}} +: (`map` or `slice`) Params that can be imported as JSON in your JS files, e.g.: + +```go-html-template +{{ $js := resources.Get "js/main.js" | js.Build (dict "params" (dict "api" "https://example.org/api")) }} +``` +And then in your JS file: + +```js +import * as params from '@params'; +``` + +Note that this is meant for small data sets, e.g. configuration settings. For larger data, please put/mount the files into `/assets` and import them directly. + +minify +: (`bool`) Let `js.Build` handle the minification. + +inject +: (`slice`) This option allows you to automatically replace a global variable with an import from another file. The path names must be relative to `assets`. See https://esbuild.github.io/api/#inject + +shims +: (`map`) This option allows swapping out a component with another. A common use case is to load dependencies like React from a CDN (with _shims_) when in production, but running with the full bundled `node_modules` dependency during development: + +```go-html-template +{{ $shims := dict "react" "js/shims/react.js" "react-dom" "js/shims/react-dom.js" }} +{{ $js = $js | js.Build dict "shims" $shims }} +``` + +The _shim_ files may look like these: + +```js +// js/shims/react.js +module.exports = window.React; +``` + +```js +// js/shims/react-dom.js +module.exports = window.ReactDOM; +``` + +With the above, these imports should work in both scenarios: + +```js +import * as React from 'react' +import * as ReactDOM from 'react-dom'; +``` + +target +: (`string`) The language target. + One of: `es5`, `es2015`, `es2016`, `es2017`, `es2018`, `es2019`, `es2020` or `esnext`. + Default is `esnext`. + +externals +: (`slice`) External dependencies. Use this to trim dependencies you know will never be executed. See https://esbuild.github.io/api/#external + +defines +: (`map`) Allow to define a set of string replacement to be performed when building. Should be a map where each key is to be replaced by its value. + +```go-html-template +{{ $defines := dict "process.env.NODE_ENV" `"development"` }} +``` + +format +: (`string`) The output format. + One of: `iife`, `cjs`, `esm`. + Default is `iife`, a self-executing function, suitable for inclusion as a `<script>` tag. + +sourceMap +: (`string`) Whether to generate `inline` or `external` source maps from esbuild. External source maps will be written to the target with the output file name + ".map". Input source maps can be read from js.Build and node modules and combined into the output source maps. By default, source maps are not created. + +### Import JS code from /assets + +`js.Build` has full support for the virtual union file system in [Hugo Modules](/hugo-modules/). You can see some simple examples in this [test project](https://github.com/gohugoio/hugoTestProjectJSModImports), but in short this means that you can do this: + +```js +import { hello } from 'my/module'; +``` + +And it will resolve to the top-most `index.{js,ts,tsx,jsx}` inside `assets/my/module` in the layered file system. + +```js +import { hello3 } from 'my/module/hello3'; +``` + +Will resolve to `hello3.{js,ts,tsx,jsx}` inside `assets/my/module`. + +Any imports starting with `.` is resolved relative to the current file: + +```js +import { hello4 } from './lib'; +``` + +For other files (e.g. `JSON`, `CSS`) you need to use the relative path including any extension, e.g: + +```js +import * as data from 'my/module/data.json'; +``` + +Any imports in a file outside `/assets` or that does not resolve to a component inside `/assets` will be resolved by [ESBuild](https://esbuild.github.io/) with the **project directory** as the resolve directory (used as the starting point when looking for `node_modules` etc.). Also see [hugo mod npm pack](/commands/hugo_mod_npm_pack/). If you have any imported npm dependencies in your project, you need to make sure to run `npm install` before you run `hugo`. + +Also note the new `params` option that can be passed from template to your JS files, e.g.: + +```go-html-template +{{ $js := resources.Get "js/main.js" | js.Build (dict "params" (dict "api" "https://example.org/api")) }} +``` +And then in your JS file: + +```js +import * as params from '@params'; +``` + +Hugo will, by default, generate a `assets/jsconfig.json` file that maps the imports. This is useful for navigation/intellisense help inside code editors, but if you don't need/want it, you can [turn it off](/getting-started/configuration/#configure-build). + +### Include dependencies In package.json / node_modules + +Any imports in a file outside `/assets` or that does not resolve to a component inside `/assets` will be resolved by [ESBuild](https://esbuild.github.io/) with the **project directory** as the resolve directory (used as the starting point when looking for `node_modules` etc.). Also see [hugo mod npm pack](/commands/hugo_mod_npm_pack/). If you have any imported npm dependencies in your project, you need to make sure to run `npm install` before you run `hugo`. + +The start directory for resolving npm packages (aka. packages that live inside a `node_modules` folder) is always the main project folder. + +{{% note %}} +If you're developing a theme/component that is supposed to be imported and depends on dependencies inside `package.json`, we recommend reading about [hugo mod npm pack](/commands/hugo_mod_npm_pack/), a tool to consolidate all the npm dependencies in a project. +{{% /note %}} + +### Examples + +```go-html-template +{{ $built := resources.Get "js/index.js" | js.Build "main.js" }} +``` + +Or with options: + +```go-html-template +{{ $externals := slice "react" "react-dom" }} +{{ $defines := dict "process.env.NODE_ENV" `"development"` }} + +{{ $opts := dict "targetPath" "main.js" "externals" $externals "defines" $defines }} +{{ $built := resources.Get "scripts/main.js" | js.Build $opts }} +<script src="{{ $built.RelPermalink }}" defer></script> +``` diff --git a/docs/content/en/hugo-pipes/minification.md b/docs/content/en/hugo-pipes/minification.md new file mode 100755 index 000000000..a5d4724f9 --- /dev/null +++ b/docs/content/en/hugo-pipes/minification.md @@ -0,0 +1,27 @@ +--- +title: Minify +linkTitle: Asset minification +description: Minifies a given resource. +categories: [asset management] +keywords: [] +menu: + docs: + parent: hugo-pipes + weight: 80 +weight: 80 +action: + aliases: [minify] + returnType: resource.Resource + signatures: [resources.Minify RESOURCE] +--- + +## Usage + +Any CSS, JS, JSON, HTML, SVG, or XML resource can be minified using `resources.Minify` which takes for argument the resource object. + +```go-html-template +{{ $css := resources.Get "css/main.css" }} +{{ $style := $css | resources.Minify }} +``` + +Note that you can also minify the final HTML output to `/public` by running `hugo --minify`. diff --git a/docs/content/en/hugo-pipes/postcss.md b/docs/content/en/hugo-pipes/postcss.md new file mode 100755 index 000000000..148b30a7e --- /dev/null +++ b/docs/content/en/hugo-pipes/postcss.md @@ -0,0 +1,131 @@ +--- +title: PostCSS +description: Process CSS files with PostCSS, using any of the available plugins. +categories: [asset management] +keywords: [] +menu: + docs: + parent: hugo-pipes + weight: 40 +weight: 40 +toc: true +action: + aliases: [postCSS] + returnType: resource.Resource + signatures: ['resources.PostCSS [OPTIONS] RESOURCE'] +--- + +## Setup + +Follow the steps below to transform CSS using any of the [available PostCSS plugins](https://www.postcss.parts/). + +Step 1 +: Install [Node.js](https://nodejs.org/en/download). + +Step 2 +: Install the required Node.js packages in the root of your project. For example, to add vendor prefixes to CSS rules: + +```sh +npm i -D postcss postcss-cli autoprefixer +``` + +Step 3 +: Create a PostCSS configuration file in the root of your project. You must name this file `postcss.config.js` or one of the other [supported file names]. For example: + +[supported file names]: https://github.com/postcss/postcss-load-config#usage + +{{< code file=postcss.config.js >}} +module.exports = { + plugins: [ + require('autoprefixer') + ] +}; +{{< /code >}} + +{{% note %}} +If you are a Windows user, and the path to your project contains a space, you must place the PostCSS configuration within the package.json file. See [this example](https://github.com/postcss/postcss-load-config#packagejson) and issue [#7333](https://github.com/gohugoio/hugo/issues/7333). +{{% /note %}} + +Step 4 +: Place your CSS file within the `assets` directory. + +Step 5 +: Capture the CSS file as a resource and pipe it through `resources.PostCSS` (alias `postCSS`): + +{{< code file=layouts/partials/css.html >}} +{{ with resources.Get "css/main.css" | postCSS }} + <link rel="stylesheet" href="{{ .RelPermalink }}"> +{{ end }} +{{< /code >}} + +If starting with a Sass file within the `assets` directory: + +{{< code file=layouts/partials/css.html >}} +{{ with resources.Get "sass/main.scss" | toCSS | postCSS }} + <link rel="stylesheet" href="{{ .RelPermalink }}"> +{{ end }} +{{< /code >}} + +## Options + +The `resources.PostCSS` method takes an optional map of options. + +config +: (`string`) The directory that contains the PostCSS configuration file. Default is the root of the project directory. + +noMap +: (`bool`) Default is `false`. If `true`, disables 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 {{< new-in 0.99.0 >}} +: (`bool`) 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. + +{{< code file=layouts/partials/css.html >}} +{{ $opts := dict "config" "config-directory" "noMap" true }} +{{ with resources.Get "css/main.css" | postCSS $opts }} + <link rel="stylesheet" href="{{ .RelPermalink }}"> +{{ end }} +{{< /code >}} + +## No configuration file + +To avoid using a PostCSS configuration file, you can specify a minimal configuration using the options map. + +use +: (`string`) A space-delimited list of PostCSS plugins to use. + +parser +: (`string`) A custom PostCSS parser. + +stringifier +: (`string`) A custom PostCSS stringifier. + +syntax +: (`string`) Custom postcss syntax. + +{{< code file=layouts/partials/css.html >}} +{{ $opts := dict "use" "autoprefixer postcss-color-alpha" }} +{{ with resources.Get "css/main.css" | postCSS $opts }} + <link rel="stylesheet" href="{{ .RelPermalink }}"> +{{ end }} +{{< /code >}} + +## Check Hugo environment + +The current Hugo environment name (set by `--environment` or in configuration or OS environment) is available in the Node context, which allows constructs like this: + +{{< code file=postcss.config.js >}} +module.exports = { + plugins: [ + require('autoprefixer'), + ...process.env.HUGO_ENVIRONMENT === 'production' + ? [purgecss] + : [] + ] +} +{{< /code >}} diff --git a/docs/content/en/hugo-pipes/postprocess.md b/docs/content/en/hugo-pipes/postprocess.md new file mode 100755 index 000000000..e84c6d72d --- /dev/null +++ b/docs/content/en/hugo-pipes/postprocess.md @@ -0,0 +1,104 @@ +--- +title: PostProcess +description: Allows delaying of resource transformations to after the build. +categories: [asset management] +keywords: [] +menu: + docs: + parent: hugo-pipes + weight: 50 +weight: 50 +action: + aliases: [] + returnType: postpub.PostPublishedResource + signatures: [resources.PostProcess RESOURCE] +--- + +## Usage + +Marking a resource with `resources.PostProcess` delays any transformations to after the build, typically because one or more of the steps in the transformation chain depends on the result of the build (e.g. files in `public`). + +A prime use case for this is [CSS purging with PostCSS](#css-purging-with-postcss). + +There are currently two limitations to this: + +1. This only works in `*.html` templates (i.e. templates that produces HTML files). +2. You cannot manipulate the values returned from the resource's methods. E.g. the `upper` in this example will not work as expected: + + ```go-html-template + {{ $css := resources.Get "css/main.css" }} + {{ $css = $css | resources.PostCSS | minify | fingerprint | resources.PostProcess }} + {{ $css.RelPermalink | upper }} + ``` + +## CSS purging with PostCSS + +{{% note %}} +There are several ways to set up CSS purging with PostCSS in Hugo. If you have a simple project, you should consider going the simpler route and drop the use of `resources.PostProcess` and just extract keywords from the templates. See the [Tailwind documentation](https://tailwindcss.com/docs/controlling-file-size/#app) for some examples. +{{% /note %}} + +The below configuration will write a `hugo_stats.json` file to the project root as part of the build. If you're only using this for the production build, you should consider placing it below [config/production](/getting-started/configuration/#configuration-directory). + +{{< code-toggle file=hugo >}} +[build.buildStats] + enable = true +{{< /code-toggle >}} + +See the [configure build] documentation for details and options. + +[configure build]: /getting-started/configuration/#configure-build + +`postcss.config.js` + +```js +const purgecss = require('@fullhuman/postcss-purgecss')({ + content: [ './hugo_stats.json' ], + defaultExtractor: (content) => { + let els = JSON.parse(content).htmlElements; + return els.tags.concat(els.classes, els.ids); + } +}); + +module.exports = { + plugins: [ + ...(process.env.HUGO_ENVIRONMENT === 'production' ? [ purgecss ] : []) + ] + }; +``` + +Note that in the example above, the "CSS purge step" will only be applied to the production build. This means that you need to do something like this in your head template to build and include your CSS: + +```go-html-template +{{ $css := resources.Get "css/main.css" }} +{{ $css = $css | resources.PostCSS }} +{{ if hugo.IsProduction }} +{{ $css = $css | minify | fingerprint | resources.PostProcess }} +{{ end }} +<link href="{{ $css.RelPermalink }}" rel="stylesheet" /> +``` + +## Hugo environment variables available in PostCSS + +These are the environment variables Hugo passes down to PostCSS (and Babel), which allows you do do `process.env.HUGO_ENVIRONMENT === 'production' ? [autoprefixer] : []` and similar: + +PWD +: The absolute path to the project working directory. + +HUGO_ENVIRONMENT +: The value e.g. set with `hugo -e production` (defaults to `production` for `hugo` and `development` for `hugo server`). + +HUGO_PUBLISHDIR +: {{< new-in 0.109.0 >}} The absolute path to the publish directory (the `public` directory). Note that the value will always point to a directory on disk even when running `hugo server` in memory mode. If you write to this folder from PostCSS when running the server, you could run the server with one of these flags: + +```sh +hugo server --renderToDisk +hugo server --renderStaticToDisk +``` + +Also, Hugo will add environment variables for all files mounted below `assets/_jsconfig`. A default mount will be set up with files in the project root matching this regexp: `(babel|postcss|tailwind)\.config\.js`. + +These will get environment variables named on the form `HUGO_FILE_:filename:` where `:filename:` is all upper case with periods replaced with underscore. This allows you to do this and similar: + +```js +let tailwindConfig = process.env.HUGO_FILE_TAILWIND_CONFIG_JS || './tailwind.config.js'; +``` diff --git a/docs/content/en/hugo-pipes/resource-from-string.md b/docs/content/en/hugo-pipes/resource-from-string.md new file mode 100755 index 000000000..53bcfff74 --- /dev/null +++ b/docs/content/en/hugo-pipes/resource-from-string.md @@ -0,0 +1,34 @@ +--- +title: FromString +linkTitle: Resource from string +description: Creates a resource from a string. +categories: [asset management] +keywords: [] +menu: + docs: + parent: hugo-pipes + weight: 110 +weight: 110 +action: + aliases: [] + returnType: resource.Resource + signatures: [resources.FromString TARGETPATH STRING] +--- + +## Usage + +It is possible to create a resource directly from the template using `resources.FromString` which takes two arguments, the target path for the created resource and the given content string. + +The result is cached using the target path as the cache key. + +The following example creates a resource file containing localized variables for every project's languages. + +```go-html-template +{{ $string := (printf "var rootURL = '%s'; var apiURL = '%s';" (absURL "/") (.Param "API_URL")) }} +{{ $targetPath := "js/vars.js" }} +{{ $vars := $string | resources.FromString $targetPath }} +{{ $global := resources.Get "js/global.js" | resources.Minify }} + +<script src="{{ $vars.Permalink }}"></script> +<script src="{{ $global.Permalink }}"></script> +``` diff --git a/docs/content/en/hugo-pipes/resource-from-template.md b/docs/content/en/hugo-pipes/resource-from-template.md new file mode 100755 index 000000000..1627fa7d4 --- /dev/null +++ b/docs/content/en/hugo-pipes/resource-from-template.md @@ -0,0 +1,38 @@ +--- +title: ExecuteAsTemplate +linkTitle: Resource from template +description: Creates a resource from a template +categories: [asset management] +keywords: [] +menu: + docs: + parent: hugo-pipes + weight: 120 +weight: 120 +action: + aliases: [] + returnType: resource.Resource + signatures: [resources.ExecuteAsTemplate TARGETPATH CONTEXT RESOURCE] +--- + +## Usage + +In order to use Hugo Pipes function on an asset file containing Go Template magic the function `resources.ExecuteAsTemplate` must be used. + +The function takes three arguments: the target path for the created resource, the template context, and the resource object. The target path is used to cache the result. + +```go-html-template +// assets/sass/template.scss +$backgroundColor: {{ .Param "backgroundColor" }}; +$textColor: {{ .Param "textColor" }}; +body{ + background-color:$backgroundColor; + color: $textColor; +} +// [...] +``` + +```go-html-template +{{ $sassTemplate := resources.Get "sass/template.scss" }} +{{ $style := $sassTemplate | resources.ExecuteAsTemplate "main.scss" . | resources.ToCSS }} +``` diff --git a/docs/content/en/hugo-pipes/transpile-sass-to-css.md b/docs/content/en/hugo-pipes/transpile-sass-to-css.md new file mode 100644 index 000000000..998adad82 --- /dev/null +++ b/docs/content/en/hugo-pipes/transpile-sass-to-css.md @@ -0,0 +1,213 @@ +--- +title: ToCSS +linkTitle: Transpile Sass to CSS +description: Transpile Sass to CSS. +categories: [asset management] +keywords: [] +menu: + docs: + parent: hugo-pipes + returnType: resource.Resource + weight: 30 +weight: 30 +action: + aliases: [toCSS] + returnType: resource.Resource + signatures: ['resources.ToCSS [OPTIONS] RESOURCE'] +toc: true +aliases: [/hugo-pipes/transform-to-css/] +--- + +## Usage + +Transpile Sass to CSS using the LibSass transpiler included in Hugo's extended edition, or [install Dart Sass](#dart-sass) to use the latest features of the Sass language. + +```go-html-template +{{ $opts := dict "transpiler" "libsass" "targetPath" "css/style.css" }} +{{ with resources.Get "sass/main.scss" | toCSS $opts | minify | fingerprint }} + <link rel="stylesheet" href="{{ .RelPermalink }}" integrity="{{ .Data.Integrity }}" crossorigin="anonymous"> +{{ end }} +``` + +Sass has two forms of syntax: [SCSS] and [indented]. Hugo supports both. + +[scss]: https://sass-lang.com/documentation/syntax#scss +[indented]: https://sass-lang.com/documentation/syntax#the-indented-syntax + +## Options + +transpiler +: (`string`) The transpiler to use, either `libsass` (default) or `dartsass`. Hugo's extended edition includes the LibSass transpiler. To use the Dart Sass transpiler, see the [installation instructions](#dart-sass) below. + +targetPath +: (`string`) If not set, the transformed resource's target path will be the original path of the asset file with its extension replaced by `.css`. + +vars {{< new-in 0.109.0 >}} +: (`map`) A map of key/value pairs that will be available in the `hugo:vars` namespace. Useful for [initializing Sass variables from Hugo templates](https://discourse.gohugo.io/t/42053/). + +```scss +// LibSass +@import "hugo:vars"; + +// Dart Sass +@use "hugo:vars" as v; +``` + +outputStyle +: (`string`) Output styles available to LibSass include `nested` (default), `expanded`, `compact`, and `compressed`. Output styles available to Dart Sass include `expanded` (default) and `compressed`. + +precision +: (`int`) Precision of floating point math. Not applicable to Dart Sass. + +enableSourceMap +: (`bool`) If `true`, generates a source map. + +sourceMapIncludeSources {{< new-in 0.108.0 >}} +: (`bool`) If `true`, embeds sources in the generated source map. Not applicable to LibSass. + +includePaths +: (`slice`) A slice of paths, relative to the project root, that the transpiler will use when resolving `@use` and `@import` statements. + +```go-html-template +{{ $opts := dict + "transpiler" "dartsass" + "targetPath" "css/style.css" + "vars" site.Params.styles + "enableSourceMap" (not hugo.IsProduction) + "includePaths" (slice "node_modules/bootstrap/scss") +}} +{{ with resources.Get "sass/main.scss" | toCSS $opts | minify | fingerprint }} + <link rel="stylesheet" href="{{ .RelPermalink }}" integrity="{{ .Data.Integrity }}" crossorigin="anonymous"> +{{ end }} +``` + +## Dart Sass + +The extended version of Hugo includes [LibSass] to transpile Sass to CSS. In 2020, the Sass team deprecated LibSass in favor of [Dart Sass]. + +Use the latest features of the Sass language by installing Dart Sass in your development and production environments. + +### Installation overview + +Dart Sass is compatible with Hugo v0.114.0 and later. + +If you have been using Embedded Dart Sass[^1] with Hugo v0.113.0 and earlier, uninstall Embedded Dart Sass, then install Dart Sass. If you have installed both, Hugo will use Dart Sass. + +If you install Hugo as a [Snap package] there is no need to install Dart Sass. The Hugo Snap package includes Dart Sass. + +[^1]: In 2023, the Sass team deprecated Embedded Dart Sass in favor of Dart Sass. + +### Installing in a development environment + +When you install Dart Sass somewhere in your PATH, Hugo will find it. + +OS|Package manager|Site|Installation +:--|:--|:--|:-- +Linux|Homebrew|[brew.sh]|`brew install sass/sass/sass` +Linux|Snap|[snapcraft.io]|`sudo snap install dart-sass` +macOS|Homebrew|[brew.sh]|`brew install sass/sass/sass` +Windows|Chocolatey|[chocolatey.org]|`choco install sass` +Windows|Scoop|[scoop.sh]|`scoop install sass` + +You may also install [prebuilt binaries] for Linux, macOS, and Windows. + +Run `hugo env` to list the active transpilers. + +### Installing in a production environment + +For [CI/CD] deployments (e.g., GitHub Pages, GitLab Pages, Netlify, etc.) you must edit the workflow to install Dart Sass before Hugo builds the site[^2]. Some providers allow you to use one of the package managers above, or you can download and extract one of the prebuilt binaries. + +[^2]: You do not have to do this if (a) you have not modified the assets cache location, and (b) you have not set `useResourceCacheWhen` to `never` in your [site configuration], and (c) you add and commit your resources directory to your repository. + +#### GitHub Pages + +To install Dart Sass for your builds on GitHub Pages, add this step to the GitHub Pages workflow file: + +```yaml +- name: Install Dart Sass + run: sudo snap install dart-sass +``` + +If you are using GitHub Pages for the first time with your repository, GitHub provides a [starter workflow] for Hugo that includes Dart Sass. This is the simplest way to get started. + +#### GitLab Pages + +To install Dart Sass for your builds on GitLab Pages, the `.gitlab-ci.yml` file should look something like this: + +```yaml +variables: + HUGO_VERSION: 0.122.0 + DART_SASS_VERSION: 1.70.0 + GIT_DEPTH: 0 + GIT_STRATEGY: clone + GIT_SUBMODULE_STRATEGY: recursive + TZ: America/Los_Angeles +image: + name: golang:1.20-buster +pages: + script: + # Install Dart Sass + - curl -LJO https://github.com/sass/dart-sass/releases/download/${DART_SASS_VERSION}/dart-sass-${DART_SASS_VERSION}-linux-x64.tar.gz + - tar -xf dart-sass-${DART_SASS_VERSION}-linux-x64.tar.gz + - cp -r dart-sass/* /usr/local/bin + - rm -rf dart-sass* + # Install Hugo + - curl -LJO https://github.com/gohugoio/hugo/releases/download/v${HUGO_VERSION}/hugo_extended_${HUGO_VERSION}_linux-amd64.deb + - apt install -y ./hugo_extended_${HUGO_VERSION}_linux-amd64.deb + - rm hugo_extended_${HUGO_VERSION}_linux-amd64.deb + # Build + - hugo --gc --minify + artifacts: + paths: + - public + rules: + - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH +``` + +#### Netlify + +To install Dart Sass for your builds on Netlify, the `netlify.toml` file should look something like this: + +```toml +[build.environment] +HUGO_VERSION = "0.122.2" +DART_SASS_VERSION = "1.70.0" +TZ = "America/Los_Angeles" + +[build] +publish = "public" +command = """\ + curl -LJO https://github.com/sass/dart-sass/releases/download/${DART_SASS_VERSION}/dart-sass-${DART_SASS_VERSION}-linux-x64.tar.gz && \ + tar -xf dart-sass-${DART_SASS_VERSION}-linux-x64.tar.gz && \ + rm dart-sass-${DART_SASS_VERSION}-linux-x64.tar.gz && \ + export PATH=/opt/build/repo/dart-sass:$PATH && \ + hugo --gc --minify \ + """ +``` + +### Example + +To transpile with Dart Sass, set `transpiler` to `dartsass` in the options map passed to `resources.ToCSS`. For example: + +```go-html-template +{{ $opts := dict "transpiler" "dartsass" "targetPath" "css/style.css" }} +{{ with resources.Get "sass/main.scss" | toCSS $opts | minify | fingerprint }} + <link rel="stylesheet" href="{{ .RelPermalink }}" integrity="{{ .Data.Integrity }}" crossorigin="anonymous"> +{{ end }} +``` + +### Miscellaneous + +If you build Hugo from source and run `mage test -v`, the test will fail if you install Dart Sass as a Snap package. This is due to the Snap package's strict confinement model. + +[brew.sh]: https://brew.sh/ +[chocolatey.org]: https://community.chocolatey.org/packages/sass +[ci/cd]: https://en.wikipedia.org/wiki/CI/CD +[dart sass]: https://sass-lang.com/dart-sass +[libsass]: https://sass-lang.com/libsass +[prebuilt binaries]: https://github.com/sass/dart-sass/releases/latest +[scoop.sh]: https://scoop.sh/#/apps?q=sass +[site configuration]: /getting-started/configuration/#configure-build +[snap package]: /installation/linux/#snap +[snapcraft.io]: https://snapcraft.io/dart-sass +[starter workflow]: https://github.com/actions/starter-workflows/blob/main/pages/hugo.yml diff --git a/docs/content/en/installation/_common/01-editions.md b/docs/content/en/installation/_common/01-editions.md new file mode 100644 index 000000000..deec8cc83 --- /dev/null +++ b/docs/content/en/installation/_common/01-editions.md @@ -0,0 +1,16 @@ +--- +# Do not remove front matter. +--- + +## Editions + +Hugo is available in two editions: standard and extended. With the extended edition you can: + +- Encode to the WebP format when [processing images]. You can decode WebP images with either edition. +- [Transpile Sass to CSS] using the embedded LibSass transpiler. The extended edition is not required to use the [Dart Sass] transpiler. + +We recommend that you install the extended edition. + +[dart sass]: /hugo-pipes/transpile-sass-to-css/#dart-sass +[processing images]: /content-management/image-processing/ +[transpile sass to css]: /hugo-pipes/transpile-sass-to-css/ diff --git a/docs/content/en/installation/_common/02-prerequisites.md b/docs/content/en/installation/_common/02-prerequisites.md new file mode 100644 index 000000000..ea6eaa8fe --- /dev/null +++ b/docs/content/en/installation/_common/02-prerequisites.md @@ -0,0 +1,40 @@ +--- +# Do not remove front matter. +--- + +## Prerequisites + +Although not required in all cases, [Git], [Go], and [Dart Sass] are commonly used when working with Hugo. + +Git is required to: + +- Build Hugo from source +- Use the [Hugo Modules] feature +- Install a theme as a Git submodule +- Access [commit information] from a local Git repository +- Host your site with services such as [CloudCannon], [Cloudflare Pages], [GitHub Pages], [GitLab Pages], and [Netlify] + +Go is required to: + +- Build Hugo from source +- Use the Hugo Modules feature + +Dart Sass is required to transpile Sass to CSS when using the latest features of the Sass language. + +Please refer to the relevant documentation for installation instructions: + +- [Git][git install] +- [Go][go install] +- [Dart Sass][dart sass install] + +[cloudcannon]: https://cloudcannon.com/ +[cloudflare pages]: https://pages.cloudflare.com/ +[dart sass install]: /hugo-pipes/transpile-sass-to-css/#dart-sass +[dart sass]: https://sass-lang.com/dart-sass +[git install]: https://git-scm.com/book/en/v2/Getting-Started-Installing-Git +[git]: https://git-scm.com/ +[github pages]: https://pages.github.com/ +[gitlab pages]: https://docs.gitlab.com/ee/user/project/pages/ +[go install]: https://go.dev/doc/install +[go]: https://go.dev/ +[netlify]: https://www.netlify.com/ diff --git a/docs/content/en/installation/_common/03-prebuilt-binaries.md b/docs/content/en/installation/_common/03-prebuilt-binaries.md new file mode 100644 index 000000000..d3465fa5d --- /dev/null +++ b/docs/content/en/installation/_common/03-prebuilt-binaries.md @@ -0,0 +1,23 @@ +--- +# Do not remove front matter. +--- + +## Prebuilt binaries + +Prebuilt binaries are available for a variety of operating systems and architectures. Visit the [latest release] page, and scroll down to the Assets section. + +1. Download the archive for the desired edition, operating system, and architecture +1. Extract the archive +1. Move the executable to the desired directory +1. Add this directory to the PATH environment variable +1. Verify that you have _execute_ permission on the file + +Please consult your operating system documentation if you need help setting file permissions or modifying your PATH environment variable. + +If you do not see a prebuilt binary for the desired edition, operating system, and architecture, install Hugo using one of the methods described below. + +[commit information]: /variables/git +[Git]: https://git-scm.com/ +[Go]: https://go.dev/ +[Hugo Modules]: /hugo-modules/ +[latest release]: https://github.com/gohugoio/hugo/releases/latest diff --git a/docs/content/en/installation/_common/04-build-from-source.md b/docs/content/en/installation/_common/04-build-from-source.md new file mode 100644 index 000000000..63be3e456 --- /dev/null +++ b/docs/content/en/installation/_common/04-build-from-source.md @@ -0,0 +1,27 @@ +--- +# Do not remove front matter. +--- + +## Build from source + +To build the extended edition of Hugo from source you must: + +1. Install [Git] +1. Install [Go] version 1.20 or later +1. Install a C compiler, either [GCC] or [Clang] +1. Update your `PATH` environment variable as described in the [Go documentation] + +> The install directory is controlled by the `GOPATH` and `GOBIN` environment variables. If `GOBIN` is set, binaries are installed to that directory. If `GOPATH` is set, binaries are installed to the bin subdirectory of the first directory in the `GOPATH` list. Otherwise, binaries are installed to the bin subdirectory of the default `GOPATH` (`$HOME/go` or `%USERPROFILE%\go`). + +Then build and test: + +```sh +CGO_ENABLED=1 go install -tags extended github.com/gohugoio/hugo@latest +hugo version +``` + +[Clang]: https://clang.llvm.org/ +[GCC]: https://gcc.gnu.org/ +[Git]: https://git-scm.com/book/en/v2/Getting-Started-Installing-Git +[Go documentation]: https://go.dev/doc/code#Command +[Go]: https://go.dev/doc/install diff --git a/docs/content/en/installation/_common/_index.md b/docs/content/en/installation/_common/_index.md new file mode 100644 index 000000000..47d5812fb --- /dev/null +++ b/docs/content/en/installation/_common/_index.md @@ -0,0 +1,13 @@ +--- +cascade: + _build: + list: never + publishResources: false + render: never +--- + +<!-- +Files within this headless branch bundle are markdown snippets. Each file must contain front matter delimiters, though front matter fields are not required. + +Include the rendered content using the "include" shortcode. +--> diff --git a/docs/content/en/installation/_common/homebrew.md b/docs/content/en/installation/_common/homebrew.md new file mode 100644 index 000000000..6cd7a524f --- /dev/null +++ b/docs/content/en/installation/_common/homebrew.md @@ -0,0 +1,13 @@ +--- +# Do not remove front matter. +--- + +### Homebrew + +[Homebrew] is a free and open-source package manager for macOS and Linux. To install the extended edition of Hugo: + +```sh +brew install hugo +``` + +[Homebrew]: https://brew.sh/ diff --git a/docs/content/en/installation/_index.md b/docs/content/en/installation/_index.md new file mode 100644 index 000000000..ca405b755 --- /dev/null +++ b/docs/content/en/installation/_index.md @@ -0,0 +1,16 @@ +--- +title: Installation +linkTitle: Overview +description: Install Hugo on macOS, Linux, Windows, BSD, and on any machine that can run the Go compiler tool chain. +aliases: [/getting-started/installing/] +categories: [] +keywords: [] +menu: + docs: + identifier: installation-overview + parent: installation + weight: 10 +weight: 10 +--- + +Install Hugo on macOS, Linux, Windows, BSD, and on any machine that can run the Go compiler tool chain. diff --git a/docs/content/en/installation/bsd.md b/docs/content/en/installation/bsd.md new file mode 100644 index 000000000..6d00b8b98 --- /dev/null +++ b/docs/content/en/installation/bsd.md @@ -0,0 +1,75 @@ +--- +title: BSD +description: Install Hugo on BSD derivatives. +categories: [installation] +keywords: [] +menu: + docs: + parent: installation + weight: 50 +weight: 50 +toc: true +--- +{{% include "installation/_common/01-editions.md" %}} + +{{% include "installation/_common/02-prerequisites.md" %}} + +{{% include "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. To 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. To install the extended edition of Hugo: + +```sh +sudo pkg install gohugo +``` + +[FreeBSD]: https://www.freebsd.org/ + +### NetBSD + +[NetBSD] includes Hugo in its package repository. To 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/ + +{{% include "installation/_common/04-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: diff --git a/docs/content/en/installation/linux.md b/docs/content/en/installation/linux.md new file mode 100644 index 000000000..7b75f149b --- /dev/null +++ b/docs/content/en/installation/linux.md @@ -0,0 +1,176 @@ +--- +title: Linux +description: Install Hugo on Linux. +categories: [installation] +keywords: [] +menu: + docs: + parent: installation + weight: 30 +weight: 30 +toc: true +--- +{{% include "installation/_common/01-editions.md" %}} + +{{% include "installation/_common/02-prerequisites.md" %}} + +{{% include "installation/_common/03-prebuilt-binaries.md" %}} + +## Package managers + +### Snap + +[Snap] is a free and open-source package manager for Linux. Available for [most distributions], snap packages are simple to install and are automatically updated. + +The Hugo snap package is [strictly confined]. Strictly confined snaps run in complete isolation, up to a minimal access level that’s deemed always safe. The sites you create and build must be located within your home directory, or on removable media. + +To install the extended edition of Hugo: + +```sh +sudo snap install hugo +``` + +To enable or revoke access to removable media: + +```sh +sudo snap connect hugo:removable-media +sudo snap disconnect hugo:removable-media +``` + +To enable or revoke access to SSH keys: + +```sh +sudo snap connect hugo:ssh-keys +sudo snap disconnect hugo:ssh-keys +``` + +[most distributions]: https://snapcraft.io/docs/installing-snapd +[strictly confined]: https://snapcraft.io/docs/snap-confinement +[Snap]: https://snapcraft.io/ + +{{% include "installation/_common/homebrew.md" %}} + +## Repository packages + +Most Linux distributions maintain a repository for commonly installed applications. + +{{% note %}} +The Hugo version available in package repositories varies based on Linux distribution and release, and in some cases will not be the [latest version]. + +Use one of the other installation methods if your package repository does not provide the desired version. + +[latest version]: https://github.com/gohugoio/hugo/releases/latest +{{% /note %}} + +### Alpine Linux + +To install the extended edition of Hugo on [Alpine Linux]: + +```sh +doas apk add --no-cache --repository=https://dl-cdn.alpinelinux.org/alpine/edge/community hugo +``` + +[Alpine Linux]: https://alpinelinux.org/ + +### Arch Linux + +Derivatives of the [Arch Linux] distribution of Linux include [EndeavourOS], [Garuda Linux], [Manjaro], and others. To install the extended edition of Hugo: + +```sh +sudo pacman -S hugo +``` + +[Arch Linux]: https://archlinux.org/ +[EndeavourOS]: https://endeavouros.com/ +[Manjaro]: https://manjaro.org/ +[Garuda Linux]: https://garudalinux.org/ + +### Debian + +Derivatives of the [Debian] distribution of Linux include [elementary OS], [KDE neon], [Linux Lite], [Linux Mint], [MX Linux], [Pop!_OS], [Ubuntu], [Zorin OS], and others. To install the extended edition of Hugo: + +```sh +sudo apt install hugo +``` + +You can also download Debian packages from the [latest release] page. + +[Debian]: https://www.debian.org/ +[elementary OS]: https://elementary.io/ +[KDE neon]: https://neon.kde.org/ +[Linux Lite]: https://www.linuxliteos.com/ +[Linux Mint]: https://linuxmint.com/ +[MX Linux]: https://mxlinux.org/ +[Pop!_OS]: https://pop.system76.com/ +[Ubuntu]: https://ubuntu.com/ +[Zorin OS]: https://zorin.com/os/ + +### Fedora + +Derivatives of the [Fedora] distribution of Linux include [CentOS], [Red Hat Enterprise Linux], and others. To install the extended edition of Hugo: + +```sh +sudo dnf install hugo +``` + +[CentOS]: https://www.centos.org/ +[Fedora]: https://getfedora.org/ +[Red Hat Enterprise Linux]: https://www.redhat.com/ + +### Gentoo + +Derivatives of the [Gentoo] distribution of Linux include [Calculate Linux], [Funtoo], and others. Follow the instructions below to install the extended edition of Hugo: + +1. Specify the `extended` [USE] flag in /etc/portage/package.use/hugo: + + ```text + www-apps/hugo extended + ``` + +2. Build using the Portage package manager: + + ```sh + sudo emerge www-apps/hugo + ``` + +[Calculate Linux]: https://www.calculate-linux.org/ +[Funtoo]: https://www.funtoo.org/ +[Gentoo]: https://www.gentoo.org/ +[USE]: https://packages.gentoo.org/packages/www-apps/hugo + +### openSUSE + +Derivatives of the [openSUSE] distribution of Linux include [GeckoLinux], [Linux Karmada], and others. To install the extended edition of Hugo: + +```sh +sudo zypper install hugo +``` + +[GeckoLinux]: https://geckolinux.github.io/ +[Linux Karmada]: https://linuxkamarada.com/ +[openSUSE]: https://www.opensuse.org/ + +### Solus + +The [Solus] distribution of Linux includes Hugo in its package repository. To install the extended edition of Hugo: + +```sh +sudo eopkg install hugo +``` + +[Solus]: https://getsol.us/ + +{{% include "installation/_common/04-build-from-source.md" %}} + +## Comparison + +||Prebuilt binaries|Package managers|Repository packages|Build from source +:--|:--:|:--:|:--:|:--: +Easy to install?|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark: +Easy to upgrade?|:heavy_check_mark:|:heavy_check_mark:|varies|:heavy_check_mark: +Easy to downgrade?|:heavy_check_mark:|:heavy_check_mark: [^1]|varies|:heavy_check_mark: +Automatic updates?|:x:|varies [^2]|:x:|:x: +Latest version available?|:heavy_check_mark:|:heavy_check_mark:|varies|:heavy_check_mark: + +[^1]: Easy if a previous version is still installed. +[^2]: Snap packages are automatically updated. Homebrew requires advanced configuration. diff --git a/docs/content/en/installation/macos.md b/docs/content/en/installation/macos.md new file mode 100644 index 000000000..fa6029679 --- /dev/null +++ b/docs/content/en/installation/macos.md @@ -0,0 +1,46 @@ +--- +title: macOS +description: Install Hugo on macOS. +categories: [installation] +keywords: [] +menu: + docs: + parent: installation + weight: 20 +weight: 20 +toc: true +--- +{{% include "installation/_common/01-editions.md" %}} + +{{% include "installation/_common/02-prerequisites.md" %}} + +{{% include "installation/_common/03-prebuilt-binaries.md" %}} + +## Package managers + +{{% include "installation/_common/homebrew.md" %}} + +### MacPorts + +[MacPorts] is a free and open-source package manager for macOS. To install the extended edition of Hugo: + +```sh +sudo port install hugo +``` + +[MacPorts]: https://www.macports.org/ + +{{% include "installation/_common/04-build-from-source.md" %}} + +## Comparison + +||Prebuilt binaries|Package managers|Build from source +:--|:--:|:--:|:--: +Easy to install?|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:| +Easy to upgrade?|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark: +Easy to downgrade?|:heavy_check_mark:|:heavy_check_mark: [^1]|:heavy_check_mark: +Automatic updates?|:x:|:x: [^2]|:x: +Latest version available?|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark: + +[^1]: Easy if a previous version is still installed. +[^2]: Possible but requires advanced configuration. diff --git a/docs/content/en/installation/windows.md b/docs/content/en/installation/windows.md new file mode 100644 index 000000000..719264550 --- /dev/null +++ b/docs/content/en/installation/windows.md @@ -0,0 +1,73 @@ +--- +title: Windows +description: Install Hugo on Windows. +categories: [installation] +keywords: [] +menu: + docs: + parent: installation + weight: 40 +weight: 40 +toc: true +--- + +{{% note %}} +Hugo v0.121.1 and later require at least Windows 10 or Windows Server 2016. +{{% /note %}} + +{{% include "installation/_common/01-editions.md" %}} + +{{% include "installation/_common/02-prerequisites.md" %}} + +{{% include "installation/_common/03-prebuilt-binaries.md" %}} + +## Package managers + +### Chocolatey + +[Chocolatey] is a free and open-source package manager for Windows. To install the extended edition of Hugo: + +```sh +choco install hugo-extended +``` + +[Chocolatey]: https://chocolatey.org/ + +### Scoop + +[Scoop] is a free and open-source package manager for Windows. To install the extended edition of Hugo: + +```sh +scoop install hugo-extended +``` + +[Scoop]: https://scoop.sh/ + +### Winget + +[Winget] is Microsoft's official free and open-source package manager for Windows. To install the extended edition of Hugo: + +```sh +winget install Hugo.Hugo.Extended +``` + +[Winget]: https://learn.microsoft.com/en-us/windows/package-manager/ + +{{% include "installation/_common/04-build-from-source.md" %}} + +{{% note %}} +See these [detailed instructions](https://discourse.gohugo.io/t/41370) to install GCC on Windows. +{{% /note %}} + +## Comparison + +||Prebuilt binaries|Package managers|Build from source +:--|:--:|:--:|:--: +Easy to install?|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:| +Easy to upgrade?|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark: +Easy to downgrade?|:heavy_check_mark:|:heavy_check_mark: [^2]|:heavy_check_mark: +Automatic updates?|:x:|:x: [^1]|:x: +Latest version available?|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark: + +[^1]: Possible but requires advanced configuration. +[^2]: Easy if a previous version is still installed. diff --git a/docs/content/en/maintenance/_index.md b/docs/content/en/maintenance/_index.md new file mode 100644 index 000000000..aaee3987d --- /dev/null +++ b/docs/content/en/maintenance/_index.md @@ -0,0 +1,10 @@ +--- +title: Maintenance +description: Some lists useful for the maintenance of the Hugo docs site. +categories: [] +keywords: [] +menu: + docs: + weight: 200 +toc: true +--- diff --git a/docs/content/en/methods/_common/_index.md b/docs/content/en/methods/_common/_index.md new file mode 100644 index 000000000..47d5812fb --- /dev/null +++ b/docs/content/en/methods/_common/_index.md @@ -0,0 +1,13 @@ +--- +cascade: + _build: + list: never + publishResources: false + render: never +--- + +<!-- +Files within this headless branch bundle are markdown snippets. Each file must contain front matter delimiters, though front matter fields are not required. + +Include the rendered content using the "include" shortcode. +--> diff --git a/docs/content/en/methods/_common/next-prev-on-page-vs-next-prev-on-pages.md b/docs/content/en/methods/_common/next-prev-on-page-vs-next-prev-on-pages.md new file mode 100644 index 000000000..4ae3a0f39 --- /dev/null +++ b/docs/content/en/methods/_common/next-prev-on-page-vs-next-prev-on-pages.md @@ -0,0 +1,37 @@ +--- +# Do not remove front matter. +--- + +The `Next` and `Prev` methods on a `Pages` object are more flexible than the `Next` and `Prev` methods on a `Page` object. + +||Page collection|Custom sort order +:--|:--|:-: +[`PAGES.Next`] and [`PAGES.Prev`]|locally defined|✔️ +[`PAGE.Next`] and [`PAGE.Prev`]|globally defined|❌ + +[`PAGES.Next`]: /methods/pages/next +[`PAGES.Prev`]: /methods/pages/prev +[`PAGE.Next`]: /methods/page/next +[`PAGE.Prev`]: /methods/page/prev + +locally defined +: Build the page collection every time you call `PAGES.Next` and `PAGES.Prev`. Navigation between pages is relative to the current page's position within the local collection, independent of the global collection. + +With a local collection, the navigation sort order is the same as the collection sort order. + +globally defined +: Build the page collection once, on a list page. Navigation between pages is relative to the current page's position within the global collection. + +With a global collection, the navigation sort order is fixed, using Hugo's default sort order. In order of precedence: + +1. Page [weight] +2. Page [date] (descending) +3. Page [linkTitle], falling back to page [title] +4. Page file path if the page is backed by a file + +For example, with a global collection sorted by title, the navigation sort order will use Hugo's default sort order. This is probably not what you want or expect. For this reason, the `Next` and `Prev` methods on a `Pages` object are generally a better choice. + +[date]: /methods/page/date +[weight]: /methods/page/weight +[linkTitle]: /methods/page/linktitle +[title]: /methods/page/title diff --git a/docs/content/en/methods/_index.md b/docs/content/en/methods/_index.md new file mode 100644 index 000000000..c12bd9d4d --- /dev/null +++ b/docs/content/en/methods/_index.md @@ -0,0 +1,16 @@ +--- +title: Methods +linkTitle: Overview +description: A list of Hugo template methods including examples. +categories: [] +keywords: [] +menu: + docs: + identifier: methods-overview + parent: methods + weight: 10 +weight: 10 +showSectionMenu: true +--- + +Use these methods within your templates. diff --git a/docs/content/en/methods/duration/Abs.md b/docs/content/en/methods/duration/Abs.md new file mode 100644 index 000000000..d035f97b6 --- /dev/null +++ b/docs/content/en/methods/duration/Abs.md @@ -0,0 +1,17 @@ +--- +title: Abs +description: Returns the absolute value of the given time.Duration value. +categories: [] +keywords: [] +action: + related: + - functions/time/Duration + - functions/time/ParseDuration + returnType: time.Duration + signatures: [DURATION.Abs] +--- + +```go-html-template +{{ $d = time.ParseDuration "-3h" }} +{{ $d.Abs }} → 3h0m0s +``` diff --git a/docs/content/en/methods/duration/Hours.md b/docs/content/en/methods/duration/Hours.md new file mode 100644 index 000000000..5b2d893b9 --- /dev/null +++ b/docs/content/en/methods/duration/Hours.md @@ -0,0 +1,17 @@ +--- +title: Hours +description: Returns the time.Duration value as a floating point number of hours. +categories: [] +keywords: [] +action: + related: + - functions/time/Duration + - functions/time/ParseDuration + returnType: float64 + signatures: [DURATION.Hours] +--- + +```go-html-template +{{ $d = time.ParseDuration "3.5h2.5m1.5s" }} +{{ $d.Hours }} → 3.5420833333333333 +``` diff --git a/docs/content/en/methods/duration/Microseconds.md b/docs/content/en/methods/duration/Microseconds.md new file mode 100644 index 000000000..c8b210c94 --- /dev/null +++ b/docs/content/en/methods/duration/Microseconds.md @@ -0,0 +1,17 @@ +--- +title: Microseconds +description: Returns the time.Duration value as an integer microsecond count. +categories: [] +keywords: [] +action: + related: + - functions/time/Duration + - functions/time/ParseDuration + returnType: int64 + signatures: [DURATION.Microseconds] +--- + +```go-html-template +{{ $d = time.ParseDuration "3.5h2.5m1.5s" }} +{{ $d.Microseconds }} → 12751500000 +``` diff --git a/docs/content/en/methods/duration/Milliseconds.md b/docs/content/en/methods/duration/Milliseconds.md new file mode 100644 index 000000000..32809027a --- /dev/null +++ b/docs/content/en/methods/duration/Milliseconds.md @@ -0,0 +1,17 @@ +--- +title: Milliseconds +description: Returns the time.Duration value as an integer millisecond count. +categories: [] +keywords: [] +action: + related: + - functions/time/Duration + - functions/time/ParseDuration + returnType: int64 + signatures: [DURATION.Milliseconds] +--- + +```go-html-template +{{ $d = time.ParseDuration "3.5h2.5m1.5s" }} +{{ $d.Milliseconds }} → 12751500 +``` diff --git a/docs/content/en/methods/duration/Minutes.md b/docs/content/en/methods/duration/Minutes.md new file mode 100644 index 000000000..d3e57fba5 --- /dev/null +++ b/docs/content/en/methods/duration/Minutes.md @@ -0,0 +1,17 @@ +--- +title: Minutes +description: Returns the time.Duration value as a floating point number of minutes. +categories: [] +keywords: [] +action: + related: + - functions/time/Duration + - functions/time/ParseDuration + returnType: float64 + signatures: [DURATION.Minutes] +--- + +```go-html-template +{{ $d = time.ParseDuration "3.5h2.5m1.5s" }} +{{ $d.Minutes }} → 212.525 +``` diff --git a/docs/content/en/methods/duration/Nanoseconds.md b/docs/content/en/methods/duration/Nanoseconds.md new file mode 100644 index 000000000..66d2981f2 --- /dev/null +++ b/docs/content/en/methods/duration/Nanoseconds.md @@ -0,0 +1,17 @@ +--- +title: Nanoseconds +description: Returns the time.Duration value as an integer nanosecond count. +categories: [] +keywords: [] +action: + related: + - functions/time/Duration + - functions/time/ParseDuration + returnType: int64 + signatures: [DURATION.Nanoseconds] +--- + +```go-html-template +{{ $d = time.ParseDuration "3.5h2.5m1.5s" }} +{{ $d.Nanoseconds }} → 12751500000000 +``` diff --git a/docs/content/en/methods/duration/Round.md b/docs/content/en/methods/duration/Round.md new file mode 100644 index 000000000..0722a6076 --- /dev/null +++ b/docs/content/en/methods/duration/Round.md @@ -0,0 +1,20 @@ +--- +title: Round +description: Returns the result of rounding DURATION1 to the nearest multiple of DURATION2. +categories: [] +keywords: [] +action: + related: + - functions/time/Duration + - functions/time/ParseDuration + returnType: + signatures: [DURATION1.Round DURATION2] +--- + +```go-html-template +{{ $d = time.ParseDuration "3.5h2.5m1.5s" }} + +{{ $d.Round (time.ParseDuration "2h") }} → 4h0m0s +{{ $d.Round (time.ParseDuration "3m") }} → 3h33m0s +{{ $d.Round (time.ParseDuration "4s") }} → 3h32m32s +``` diff --git a/docs/content/en/methods/duration/Seconds.md b/docs/content/en/methods/duration/Seconds.md new file mode 100644 index 000000000..d23d5ec15 --- /dev/null +++ b/docs/content/en/methods/duration/Seconds.md @@ -0,0 +1,17 @@ +--- +title: Seconds +description: Returns the time.Duration value as a floating point number of seconds. +categories: [] +keywords: [] +action: + related: + - functions/time/Duration + - functions/time/ParseDuration + returnType: float64 + signatures: [DURATION.Seconds] +--- + +```go-html-template +{{ $d = time.ParseDuration "3.5h2.5m1.5s" }} +{{ $d.Seconds }} → 12751.5 +``` diff --git a/docs/content/en/methods/duration/Truncate.md b/docs/content/en/methods/duration/Truncate.md new file mode 100644 index 000000000..795fcad76 --- /dev/null +++ b/docs/content/en/methods/duration/Truncate.md @@ -0,0 +1,21 @@ +--- +title: Truncate +description: Returns the result of rounding DURATION1 toward zero to a multiple of DURATION2. +categories: [] +keywords: [] +action: + related: + related: + - functions/time/Duration + - functions/time/ParseDuration + returnType: time.Duration + signatures: [DURATION1.Truncate DURATION2] +--- + +```go-html-template +{{ $d = time.ParseDuration "3.5h2.5m1.5s" }} + +{{ $d.Truncate (time.ParseDuration "2h") }} → 2h0m0s +{{ $d.Truncate (time.ParseDuration "3m") }} → 3h30m0s +{{ $d.Truncate (time.ParseDuration "4s") }} → 3h32m28s +``` diff --git a/docs/content/en/methods/duration/_index.md b/docs/content/en/methods/duration/_index.md new file mode 100644 index 000000000..9fc4f814c --- /dev/null +++ b/docs/content/en/methods/duration/_index.md @@ -0,0 +1,12 @@ +--- +title: Duration methods +linkTitle: Duration +description: Use these methods with time.Duration values. +categories: [] +keywords: [] +menu: + docs: + parent: methods +--- + +Use these methods with time.Duration values. diff --git a/docs/content/en/methods/menu-entry/Children.md b/docs/content/en/methods/menu-entry/Children.md new file mode 100644 index 000000000..ad671b2d0 --- /dev/null +++ b/docs/content/en/methods/menu-entry/Children.md @@ -0,0 +1,67 @@ +--- +title: Children +description: Returns a collection of child menu entries, if any, under the given menu entry. +categories: [] +keywords: [] +action: + related: + - methods/menu-entry/HasChildren + returnType: navigation.Menu + signatures: [MENUENTRY.Children] +--- + +Use the `Children` method when rendering a nested menu. + +With this site configuration: + +{{< code-toggle file=hugo >}} +[[menus.main]] +name = 'Products' +pageRef = '/product' +weight = 10 + +[[menus.main]] +name = 'Product 1' +pageRef = '/products/product-1' +parent = 'Products' +weight = 1 + +[[menus.main]] +name = 'Product 2' +pageRef = '/products/product-2' +parent = 'Products' +weight = 2 +{{< /code-toggle >}} + +And this template: + +```go-html-template +<ul> + {{ range .Site.Menus.main }} + <li> + <a href="{{ .URL }}">{{ .Name }}</a> + {{ if .HasChildren }} + <ul> + {{ range .Children }} + <li><a href="{{ .URL }}">{{ .Name }}</a></li> + {{ end }} + </ul> + {{ end }} + </li> + {{ end }} +</ul> +``` + +Hugo renders this HTML: + +```html +<ul> + <li> + <a href="/products/">Products</a> + <ul> + <li><a href="/products/product-1/">Product 1</a></li> + <li><a href="/products/product-2/">Product 2</a></li> + </ul> + </li> +</ul> +``` diff --git a/docs/content/en/methods/menu-entry/HasChildren.md b/docs/content/en/methods/menu-entry/HasChildren.md new file mode 100644 index 000000000..fac03b7ae --- /dev/null +++ b/docs/content/en/methods/menu-entry/HasChildren.md @@ -0,0 +1,67 @@ +--- +title: HasChildren +description: Reports whether the given menu entry has child menu entries. +categories: [] +keywords: [] +action: + related: + - methods/menu-entry/Children + returnType: bool + signatures: [MENUENTRY.HasChildren] +--- + +Use the `HasChildren` method when rendering a nested menu. + +With this site configuration: + +{{< code-toggle file=hugo >}} +[[menus.main]] +name = 'Products' +pageRef = '/product' +weight = 10 + +[[menus.main]] +name = 'Product 1' +pageRef = '/products/product-1' +parent = 'Products' +weight = 1 + +[[menus.main]] +name = 'Product 2' +pageRef = '/products/product-2' +parent = 'Products' +weight = 2 +{{< /code-toggle >}} + +And this template: + +```go-html-template +<ul> + {{ range .Site.Menus.main }} + <li> + <a href="{{ .URL }}">{{ .Name }}</a> + {{ if .HasChildren }} + <ul> + {{ range .Children }} + <li><a href="{{ .URL }}">{{ .Name }}</a></li> + {{ end }} + </ul> + {{ end }} + </li> + {{ end }} +</ul> +``` + +Hugo renders this HTML: + +```html +<ul> + <li> + <a href="/products/">Products</a> + <ul> + <li><a href="/products/product-1/">Product 1</a></li> + <li><a href="/products/product-2/">Product 2</a></li> + </ul> + </li> +</ul> +``` diff --git a/docs/content/en/methods/menu-entry/Identifier.md b/docs/content/en/methods/menu-entry/Identifier.md new file mode 100644 index 000000000..ba8b77ece --- /dev/null +++ b/docs/content/en/methods/menu-entry/Identifier.md @@ -0,0 +1,44 @@ +--- +title: Identifier +description: Returns the `identifier` property of the given menu entry. +categories: [] +keywords: [] +action: + related: [] + returnType: string + signatures: [MENUENTRY.Identifier] +--- + +The `Identifier` method returns the `identifier` property of the menu entry. If you define the menu entry [automatically], it returns the page's section. + +[automatically]: /content-management/menus/#define-automatically + +{{< code-toggle file=hugo >}} +[[menus.main]] +identifier = 'about' +name = 'About' +pageRef = '/about' +weight = 10 + +[[menus.main]] +identifier = 'contact' +name = 'Contact' +pageRef = '/contact' +weight = 20 +{{< /code-toggle >}} + +This example uses the `Identifier` method when querying the translation table on a multilingual site, falling back the `name` property if a matching key in the translation table does not exist: + +```go-html-template +<ul> + {{ range .Site.Menus.main }} + <li><a href="{{ .URL }}">{{ or (T .Identifier) .Name }}</a></li> + {{ end }} +</ul> +``` + +{{% note %}} +In the menu definition above, note that the `identifier` property is only required when two or more menu entries have the same name, or when localizing the name using translation tables. + +[details]: /content-management/menus/#properties-front-matter +{{% /note %}} diff --git a/docs/content/en/methods/menu-entry/KeyName.md b/docs/content/en/methods/menu-entry/KeyName.md new file mode 100644 index 000000000..4b43596b0 --- /dev/null +++ b/docs/content/en/methods/menu-entry/KeyName.md @@ -0,0 +1,39 @@ +--- +title: KeyName +description: Returns the `identifier` property of the given menu entry, falling back to its `name` property. +categories: [] +keywords: [] +action: + related: [] + returnType: string + signatures: [MENUENTRY.KeyName] +--- + +In this menu definition, the second entry does not contain an `identifier`, so the `Identifier` method returns its `name` property instead: + +{{< code-toggle file=hugo >}} +[[menus.main]] +identifier = 'about' +name = 'About' +pageRef = '/about' +weight = 10 + +[[menus.main]] +name = 'Contact' +pageRef = '/contact' +weight = 20 +{{< /code-toggle >}} + +This example uses the `KeyName` method when querying the translation table on a multilingual site, falling back the `name` property if a matching key in the translation table does not exist: + +```go-html-template +<ul> + {{ range .Site.Menus.main }} + <li><a href="{{ .URL }}">{{ or (T (.KeyName | lower)) .Name }}</a></li> + {{ end }} +</ul> +``` + +In the example above, we need to pass the value returned by `.KeyName` through the [`lower`] function because the keys in the translation table are lowercase. + +[`lower`]: functions/strings/tolower diff --git a/docs/content/en/methods/menu-entry/Menu.md b/docs/content/en/methods/menu-entry/Menu.md new file mode 100644 index 000000000..6827519bd --- /dev/null +++ b/docs/content/en/methods/menu-entry/Menu.md @@ -0,0 +1,24 @@ +--- +title: Menu +description: Returns the identifier of the menu that contains the given menu entry. +categories: [] +keywords: [] +action: + related: + - methods/page/IsMenuCurrent + - methods/page/HasMenuCurrent + returnType: string + signatures: [MENUENTRY.Menu] +--- + +```go-html-template +{{ range .Site.Menus.main }} + {{ .Menu }} → main +{{ end }} +``` + +Use this method with the [`IsMenuCurrent`] and [`HasMenuCurrent`] methods on a `Page` object to set "active" and "ancestor" classes on a rendered entry. See [this example]. + +[`HasMenuCurrent`]: /methods/page/hasmenucurrent +[`IsMenuCurrent`]: /methods/page/ismenucurrent +[this example]: /templates/menu-templates/#example diff --git a/docs/content/en/methods/menu-entry/Name.md b/docs/content/en/methods/menu-entry/Name.md new file mode 100644 index 000000000..d722da07c --- /dev/null +++ b/docs/content/en/methods/menu-entry/Name.md @@ -0,0 +1,28 @@ +--- +title: Name +description: Returns the `name` property of the given menu entry. +categories: [] +keywords: [] +action: + related: [] + returnType: string + signatures: [MENUENTRY.Name] +--- + +If you define the menu entry [automatically], the `Name` method returns the page’s [`LinkTitle`], falling back to its [`Title`]. + +If you define the menu entry [in front matter] or [in site configuration], the `Name` method returns the `name` property, falling back to the page’s `LinkTitle`, then to its `Title`. + +[`LinkTitle`]: /methods/page/linktitle +[`Title`]: /methods/page/title +[automatically]: /content-management/menus/#define-automatically +[in front matter]: /content-management/menus/#define-in-front-matter +[in site configuration]: /content-management/menus/#define-in-site-configuration + +```go-html-template +<ul> + {{ range .Site.Menus.main }} + <li><a href="{{ .URL }}">{{ .Name }}</a></li> + {{ end }} +</ul> +``` diff --git a/docs/content/en/methods/menu-entry/Page.md b/docs/content/en/methods/menu-entry/Page.md new file mode 100644 index 000000000..b75e4af55 --- /dev/null +++ b/docs/content/en/methods/menu-entry/Page.md @@ -0,0 +1,53 @@ +--- +title: Page +description: Returns the Page object associated with the given menu entry. +categories: [] +keywords: [] +action: + related: [] + returnType: page.Page + signatures: [MENUENTRY.Page] +--- + +Regardless of how you [define menu entries], an entry associated with a page has access to its [methods]. + +In this menu definition, the first two entries are associated with a page, the last entry is not: + +{{< code-toggle file=hugo >}} +[[menus.main]] +pageRef = '/about' +weight = 10 + +[[menus.main]] +pageRef = '/contact' +weight = 20 + +[[menus.main]] +name = 'Hugo' +url = 'https://gohugo.io' +weight = 30 +{{< /code-toggle >}} + +In this example, if the menu entry is associated with a page, we use page's [`RelPermalink`] and [`LinkTitle`] when rendering the anchor element. + +If the entry is not associated with a page, we use its `url` and `name` properties. + +```go-html-template +<ul> + {{ range .Site.Menus.main }} + {{ with .Page }} + <li><a href="{{ .RelPermalink }}">{{ .Title }}</a></li> + {{ else }} + <li><a href="{{ .URL }}">{{ .Name }}</a></li> + {{ end }} + {{ end }} +</ul> +``` + +See the [menu templates] section for more information. + +[`LinkTitle`]: /methods/page/linktitle +[`RelPermalink`]: /methods/page/relpermalink +[define menu entries]: /content-management/menus/ +[menu templates]: /templates/menu-templates/#page-references +[methods]: /methods/page diff --git a/docs/content/en/methods/menu-entry/Params.md b/docs/content/en/methods/menu-entry/Params.md new file mode 100644 index 000000000..8af3f0637 --- /dev/null +++ b/docs/content/en/methods/menu-entry/Params.md @@ -0,0 +1,62 @@ +--- +title: Params +description: Returns the `params` property of the given menu entry. +categories: [] +keywords: [] +action: + related: [] + returnType: maps.Params + signatures: [MENUENTRY.Params] +--- + +When you define menu entries [in site configuration] or [in front matter], you can include a `params` key to attach additional information to the entry. For example: + +{{< code-toggle file=hugo >}} +[[menus.main]] +name = 'About' +pageRef = '/about' +weight = 10 + +[[menus.main]] +name = 'Contact' +pageRef = '/contact' +weight = 20 + +[[menus.main]] +name = 'Hugo' +url = 'https://gohugo.io' +weight = 30 +[menus.main.params] + rel = 'external' +{{< /code-toggle >}} + +With this template: + + +```go-html-template +<ul> + {{ range .Site.Menus.main }} + <li> + <a href="{{ .URL }}" {{ with .Params.rel }}rel="{{ . }}"{{ end }}> + {{ .Name }} + </a> + </li> + {{ end }} +</ul> +``` + +Hugo renders: + +```html +<ul> + <li><a href="/about/">About</a></li> + <li><a href="/contact/">Contact</a></li> + <li><a href="https://gohugo.io" rel="external">Hugo</a></li> +</ul> +``` + +See the [menu templates] section for more information. + +[menu templates]: /templates/menu-templates/#menu-entry-parameters +[in front matter]: /content-management/menus/#define-in-front-matter +[in site configuration]: /content-management/menus/ diff --git a/docs/content/en/methods/menu-entry/Parent.md b/docs/content/en/methods/menu-entry/Parent.md new file mode 100644 index 000000000..af1b4afe6 --- /dev/null +++ b/docs/content/en/methods/menu-entry/Parent.md @@ -0,0 +1,50 @@ +--- +title: Parent +description: Returns the `parent` property of the given menu entry. +categories: [] +keywords: [] +action: + related: [] + returnType: string + signatures: [MENUENTRY.Parent] +--- + +With this menu definition: + +{{< code-toggle file=hugo >}} +[[menus.main]] +name = 'Products' +pageRef = '/product' +weight = 10 + +[[menus.main]] +name = 'Product 1' +pageRef = '/products/product-1' +parent = 'Products' +weight = 1 + +[[menus.main]] +name = 'Product 2' +pageRef = '/products/product-2' +parent = 'Products' +weight = 2 +{{< /code-toggle >}} + +This template renders the nested menu, listing the `parent` property next each of the child entries: + +```go-html-template +<ul> + {{ range .Site.Menus.main }} + <li> + <a href="{{ .URL }}">{{ .Name }}</a> + {{ if .HasChildren }} + <ul> + {{ range .Children }} + <li><a href="{{ .URL }}">{{ .Name }}</a> ({{ .Parent }})</li> + {{ end }} + </ul> + {{ end }} + </li> + {{ end }} +</ul> +``` diff --git a/docs/content/en/methods/menu-entry/Post.md b/docs/content/en/methods/menu-entry/Post.md new file mode 100644 index 000000000..b2fa2da5b --- /dev/null +++ b/docs/content/en/methods/menu-entry/Post.md @@ -0,0 +1,13 @@ +--- +title: Post +description: Returns the `post` property of the given menu entry. +categories: [] +keywords: [] +action: + related: + - methods/menu-entry/Pre + returnType: template.HTML + signatures: [MENUENTRY.Post] +--- + +{{% include "methods/menu-entry/_common/pre-post.md" %}} diff --git a/docs/content/en/methods/menu-entry/Pre.md b/docs/content/en/methods/menu-entry/Pre.md new file mode 100644 index 000000000..df7c8f16e --- /dev/null +++ b/docs/content/en/methods/menu-entry/Pre.md @@ -0,0 +1,13 @@ +--- +title: Pre +description: Returns the `pre` property of the given menu entry. +categories: [] +keywords: [] +action: + related: + - methods/menu-entry/Post + returnType: template.HTML + signatures: [MENUENTRY.Pre] +--- + +{{% include "methods/menu-entry/_common/pre-post.md" %}} diff --git a/docs/content/en/methods/menu-entry/Title.md b/docs/content/en/methods/menu-entry/Title.md new file mode 100644 index 000000000..c1eec2cc0 --- /dev/null +++ b/docs/content/en/methods/menu-entry/Title.md @@ -0,0 +1,28 @@ +--- +title: Title +description: Returns the `title` property of the given menu entry. +categories: [] +keywords: [] +action: + related: [] + returnType: string + signatures: [MENUENTRY.Title] +--- + +If you define the menu entry [automatically], the `Title` method returns the page’s [`LinkTitle`], falling back to its [`Title`]. + +If you define the menu entry [in front matter] or [in site configuration], the `Name` method returns the `title` property, falling back to the page’s `LinkTitle`, then to its `Title`. + +[`LinkTitle`]: /methods/page/linktitle +[`Title`]: /methods/page/title +[automatically]: /content-management/menus/#define-automatically +[in front matter]: /content-management/menus/#define-in-front-matter +[in site configuration]: /content-management/menus/#define-in-site-configuration + +```go-html-template +<ul> + {{ range .Site.Menus.main }} + <li><a href="{{ .URL }}">{{ .Title }}</a></li> + {{ end }} +</ul> +``` diff --git a/docs/content/en/methods/menu-entry/URL.md b/docs/content/en/methods/menu-entry/URL.md new file mode 100644 index 000000000..c2b314b58 --- /dev/null +++ b/docs/content/en/methods/menu-entry/URL.md @@ -0,0 +1,23 @@ +--- +title: URL +description: Returns the relative permalink of the page associated with the given menu entry, else its `url` property. +categories: [] +keywords: [] +action: + related: [] + returnType: string + signatures: [MENUENTRY.URL] +--- + +For menu entries associated with a page, the `URL` method returns the page's [`RelPermalink`], otherwise it returns the entry's `url` property. + + +```go-html-template +<ul> + {{ range .Site.Menus.main }} + <li><a href="{{ .URL }}">{{ .Name }}</a></li> + {{ end }} +</ul> +``` + +[`RelPermalink`]: /methods/page/relpermalink diff --git a/docs/content/en/methods/menu-entry/Weight.md b/docs/content/en/methods/menu-entry/Weight.md new file mode 100644 index 000000000..7b0c24ae8 --- /dev/null +++ b/docs/content/en/methods/menu-entry/Weight.md @@ -0,0 +1,31 @@ +--- +title: Weight +description: Returns the `weight` property of the given menu entry. +categories: [] +keywords: [] +action: + related: [] + returnType: int + signatures: [MENUENTRY.Weight] +--- + +If you define the menu entry [automatically], the `Weight` method returns the page’s [`Weight`]. + +If you define the menu entry [in front matter] or [in site configuration], the `Weight` method returns the `weight` property, falling back to the page’s `Weight`. + +[`Weight`]: /methods/page/weight +[automatically]: /content-management/menus/#define-automatically +[in front matter]: /content-management/menus/#define-in-front-matter +[in site configuration]: /content-management/menus/#define-in-site-configuration + +In this contrived example, we limit the number of menu entries based on weight: + +```go-html-template +<ul> + {{ range .Site.Menus.main }} + {{ if le .Weight 42 }} + <li><a href="{{ .URL }}">{{ .Name }}</a></li> + {{ end }} + {{ end }} +</ul> +``` diff --git a/docs/content/en/methods/menu-entry/_common/_index.md b/docs/content/en/methods/menu-entry/_common/_index.md new file mode 100644 index 000000000..47d5812fb --- /dev/null +++ b/docs/content/en/methods/menu-entry/_common/_index.md @@ -0,0 +1,13 @@ +--- +cascade: + _build: + list: never + publishResources: false + render: never +--- + +<!-- +Files within this headless branch bundle are markdown snippets. Each file must contain front matter delimiters, though front matter fields are not required. + +Include the rendered content using the "include" shortcode. +--> diff --git a/docs/content/en/methods/menu-entry/_common/pre-post.md b/docs/content/en/methods/menu-entry/_common/pre-post.md new file mode 100644 index 000000000..fbfce062a --- /dev/null +++ b/docs/content/en/methods/menu-entry/_common/pre-post.md @@ -0,0 +1,39 @@ +--- +# Do not remove front matter. +--- + +In this site configuration we enable rendering of [emoji shortcodes], and add emoji shortcodes before (pre) and after (post) each menu entry: + +{{< code-toggle file=hugo >}} +enableEmoji = true + +[[menus.main]] +name = 'About' +pageRef = '/about' +post = ':point_left:' +pre = ':point_right:' +weight = 10 + +[[menus.main]] +name = 'Contact' +pageRef = '/contact' +post = ':arrow_left:' +pre = ':arrow_right:' +weight = 20 +{{< /code-toggle >}} + +To render the menu: + +```go-html-template +<ul> + {{ range .Site.Menus.main }} + <li> + {{ .Pre | markdownify }} + <a href="{{ .URL }}">{{ .Name }}</a> + {{ .Post | markdownify }} + </li> + {{ end }} +</ul> +``` + +[emoji shortcodes]: /quick-reference/emojis/ diff --git a/docs/content/en/methods/menu-entry/_index.md b/docs/content/en/methods/menu-entry/_index.md new file mode 100644 index 000000000..d89663593 --- /dev/null +++ b/docs/content/en/methods/menu-entry/_index.md @@ -0,0 +1,12 @@ +--- +title: Menu entry methods +linkTitle: Menu entry +description: Use these methods in your menu templates. +categories: [] +keywords: [] +menu: + docs: + parent: methods +--- + +Use these methods in your menu templates. diff --git a/docs/content/en/methods/menu/ByName.md b/docs/content/en/methods/menu/ByName.md new file mode 100644 index 000000000..04f25c22d --- /dev/null +++ b/docs/content/en/methods/menu/ByName.md @@ -0,0 +1,65 @@ +--- +title: ByName +description: Returns the given menu with its entries sorted by name. +categories: [] +keywords: [] +action: + related: [] + returnType: navigation.Menu + signatures: [MENU.ByName] +--- + +The `Sort` method returns the given menu with its entries sorted by `name`. + +Consider this menu definition: + +{{< code-toggle file=hugo >}} +[[menus.main]] +name = 'Services' +pageRef = '/services' +weight = 10 + +[[menus.main]] +name = 'About' +pageRef = '/about' +weight = 20 + +[[menus.main]] +name = 'Contact' +pageRef = '/contact' +weight = 30 +{{< /code-toggle >}} + +To sort the entries by `name`: + +```go-html-template +<ul> + {{ range .Site.Menus.main.ByName }} + <li><a href="{{ .URL }}">{{ .Name }}</a></li> + {{ end }} +</ul> +``` + +Hugo renders this to: + +```html +<ul> + <li><a href="/about/">About</a></li> + <li><a href="/contact">Contact</a></li> + <li><a href="/services/">Services</a></li> +</ul> +``` + +You can also sort menu entries using the [`sort`] function. For example, to sort by `name` in descending order: + +```go-html-template +<ul> + {{ range sort .Site.Menus.main "Name" "desc" }} + <li><a href="{{ .URL }}">{{ .Name }}</a></li> + {{ end }} +</ul> +``` + +When using the sort function with menu entries, specify any of the following keys: `Identifier`, `Name`, `Parent`, `Post`, `Pre`, `Title`, `URL`, or `Weight`. + +[`sort`]: /functions/collections/sort diff --git a/docs/content/en/methods/menu/ByWeight.md b/docs/content/en/methods/menu/ByWeight.md new file mode 100644 index 000000000..d5cb0444b --- /dev/null +++ b/docs/content/en/methods/menu/ByWeight.md @@ -0,0 +1,76 @@ +--- +title: ByWeight +description: Returns the given menu with its entries sorted by weight, then by name, then by identifier. +categories: [] +keywords: [] +action: + related: [] + returnType: navigation.Menu + signatures: [MENU.ByWeight] +--- + +The `ByWeight` method returns the given menu with its entries sorted by [`weight`], then by `name`, then by `identifier`. This is the default sort order. + +[`weight`]: /getting-started/glossary/#weight + +Consider this menu definition: + +{{< code-toggle file=hugo >}} +[[menus.main]] +identifier = 'about' +name = 'About' +pageRef = '/about' +weight = 20 + +[[menus.main]] +identifier = 'services' +name = 'Services' +pageRef = '/services' +weight = 10 + +[[menus.main]] +identifier = 'contact' +name = 'Contact' +pageRef = '/contact' +weight = 30 +{{< /code-toggle >}} + +To sort the entries by `weight`, then by `name`, then by `identifier`: + +```go-html-template +<ul> + {{ range .Site.Menus.main.ByWeight }} + <li><a href="{{ .URL }}">{{ .Name }}</a></li> + {{ end }} +</ul> +``` + +Hugo renders this to: + +```html +<ul> + <li><a href="/services/">Services</a></li> + <li><a href="/about/">About</a></li> + <li><a href="/contact">Contact</a></li> +</ul> +``` + +{{% note %}} +In the menu definition above, note that the `identifier` property is only required when two or more menu entries have the same name, or when localizing the name using translation tables. + +[details]: /content-management/menus/#properties-front-matter +{{% /note %}} + +You can also sort menu entries using the [`sort`] function. For example, to sort by `weight` in descending order: + +```go-html-template +<ul> + {{ range sort .Site.Menus.main "Weight" "desc" }} + <li><a href="{{ .URL }}">{{ .Name }}</a></li> + {{ end }} +</ul> +``` + +When using the sort function with menu entries, specify any of the following keys: `Identifier`, `Name`, `Parent`, `Post`, `Pre`, `Title`, `URL`, or `Weight`. + +[`sort`]: /functions/collections/sort diff --git a/docs/content/en/methods/menu/Limit.md b/docs/content/en/methods/menu/Limit.md new file mode 100644 index 000000000..23a523dbd --- /dev/null +++ b/docs/content/en/methods/menu/Limit.md @@ -0,0 +1,50 @@ +--- +title: Limit +description: Returns the given menu, limited to the first N entries. +categories: [] +keywords: [] +action: + related: [] + returnType: navigation.Menu + signatures: [MENU.Limit N] +--- + +The `Limit` method returns the given menu, limited to the first N entries. + +Consider this menu definition: + +{{< code-toggle file=hugo >}} +[[menus.main]] +name = 'Services' +pageRef = '/services' +weight = 10 + +[[menus.main]] +name = 'About' +pageRef = '/about' +weight = 20 + +[[menus.main]] +name = 'Contact' +pageRef = '/contact' +weight = 30 +{{< /code-toggle >}} + +To sort the entries by name, and limit to the first 2 entries: + +```go-html-template +<ul> + {{ range .Site.Menus.main.ByName.Limit 2 }} + <li><a href="{{ .URL }}">{{ .Name }}</a></li> + {{ end }} +</ul> +``` + +Hugo renders this to: + +```html +<ul> + <li><a href="/about/">About</a></li> + <li><a href="/contact">Contact</a></li> +</ul> +``` diff --git a/docs/content/en/methods/menu/Reverse.md b/docs/content/en/methods/menu/Reverse.md new file mode 100644 index 000000000..a3fe09dce --- /dev/null +++ b/docs/content/en/methods/menu/Reverse.md @@ -0,0 +1,51 @@ +--- +title: Reverse +description: Returns the given menu, reversing the sort order of its entries. +categories: [] +keywords: [] +action: + related: [] + returnType: navigation.Menu + signatures: [MENU.Reverse] +--- + +The `Reverse` method returns the given menu, reversing the sort order of its entries. + +Consider this menu definition: + +{{< code-toggle file=hugo >}} +[[menus.main]] +name = 'Services' +pageRef = '/services' +weight = 10 + +[[menus.main]] +name = 'About' +pageRef = '/about' +weight = 20 + +[[menus.main]] +name = 'Contact' +pageRef = '/contact' +weight = 30 +{{< /code-toggle >}} + +To sort the entries by name in descending order: + +```go-html-template +<ul> + {{ range .Site.Menus.main.ByName.Reverse }} + <li><a href="{{ .URL }}">{{ .Name }}</a></li> + {{ end }} +</ul> +``` + +Hugo renders this to: + +```html +<ul> + <li><a href="/services/">Services</a></li> + <li><a href="/contact">Contact</a></li> + <li><a href="/about/">About</a></li> +</ul> +``` diff --git a/docs/content/en/methods/menu/_index.md b/docs/content/en/methods/menu/_index.md new file mode 100644 index 000000000..f5b925fd6 --- /dev/null +++ b/docs/content/en/methods/menu/_index.md @@ -0,0 +1,12 @@ +--- +title: Menu methods +linkTitle: Menu +description: Use these methods when ranging through menu entries. +categories: [] +keywords: [] +menu: + docs: + parent: methods +--- + +Use these methods when ranging through menu entries. diff --git a/docs/content/en/methods/page/Aliases.md b/docs/content/en/methods/page/Aliases.md new file mode 100644 index 000000000..15e73384b --- /dev/null +++ b/docs/content/en/methods/page/Aliases.md @@ -0,0 +1,29 @@ +--- +title: Aliases +description: Returns the URL aliases as defined in front matter. +categories: [] +keywords: [] +action: + related: [] + returnType: '[]string' + signatures: [PAGE.Aliases] +--- + +The `Aliases` method on a `Page` object returns the URL [aliases] as defined in front matter. + +For example: + +{{< code-toggle file=content/about.md fm=true >}} +title = 'About' +aliases = ['/old-url','/really-old-url'] +{{< /code-toggle >}} + +To list the aliases: + +```go-html-template +{{ range .Aliases }} + {{ . }} +{{ end }} +``` + +[aliases]: /content-management/urls/#aliases diff --git a/docs/content/en/methods/page/AllTranslations.md b/docs/content/en/methods/page/AllTranslations.md new file mode 100644 index 000000000..b8cc65179 --- /dev/null +++ b/docs/content/en/methods/page/AllTranslations.md @@ -0,0 +1,91 @@ +--- +title: AllTranslations +description: Returns all translation of the given page, including the given page. +categories: [] +keywords: [] +action: + related: + - methods/page/Translations + - methods/page/IsTranslated + - methods/page/TranslationKey + returnType: page.Pages + signatures: [PAGE.AllTranslations] +--- + +With this site configuration: + +{{< code-toggle file=hugo >}} +defaultContentLanguage = 'en' + +[languages.en] +contentDir = 'content/en' +languageCode = 'en-US' +languageName = 'English' +weight = 1 + +[languages.de] +contentDir = 'content/de' +languageCode = 'de-DE' +languageName = 'Deutsch' +weight = 2 + +[languages.fr] +contentDir = 'content/fr' +languageCode = 'fr-FR' +languageName = 'Français' +weight = 3 +{{< /code-toggle >}} + +And this content: + +```text +content/ +├── de/ +│ ├── books/ +│ │ ├── book-1.md +│ │ └── book-2.md +│ └── _index.md +├── en/ +│ ├── books/ +│ │ ├── book-1.md +│ │ └── book-2.md +│ └── _index.md +├── fr/ +│ ├── books/ +│ │ └── book-1.md +│ └── _index.md +└── _index.md +``` + +And this template: + +```go-html-template +{{ with .AllTranslations }} + <ul> + {{ range . }} + {{ $langName := or .Language.LanguageName .Language.Lang }} + {{ $langCode := or .Language.LanguageCode .Language.Lang }} + <li><a href="{{ .RelPermalink }}" hreflang="{{ $langCode }}">{{ .LinkTitle }} ({{ $langName }})</a></li> + {{ end }} + </ul> +{{ end }} +``` + +Hugo will render this list on the "Book 1" page of each site: + +```html +<ul> + <li><a href="/books/book-1/" hreflang="en-US">Book 1 (English)</a></li> + <li><a href="/de/books/book-1/" hreflang="de-DE">Book 1 (Deutsch)</a></li> + <li><a href="/fr/books/book-1/" hreflang="fr-FR">Book 1 (Français)</a></li> +</ul> +``` + +On the "Book 2" page of the English and German sites, Hugo will render this: + +```html +<ul> + <li><a href="/books/book-1/" hreflang="en-US">Book 1 (English)</a></li> + <li><a href="/de/books/book-1/" hreflang="de-DE">Book 1 (Deutsch)</a></li> +</ul> +``` diff --git a/docs/content/en/methods/page/AlternativeOutputFormats.md b/docs/content/en/methods/page/AlternativeOutputFormats.md new file mode 100644 index 000000000..b48d1adf4 --- /dev/null +++ b/docs/content/en/methods/page/AlternativeOutputFormats.md @@ -0,0 +1,43 @@ +--- +title: AlternativeOutputFormats +description: Returns a slice of OutputFormat objects, excluding the current output format, each representing one of the output formats enabled for the given page. +categories: [] +keywords: [] +action: + related: + - methods/page/OutputFormats + returnType: page.OutputFormats + signatures: [PAGE.AlternativeOutputFormats] +--- + +{{% include "methods/page/_common/output-format-definition.md" %}} + +The `AlternativeOutputFormats` method on a `Page` object returns a slice of `OutputFormat` objects, excluding the current output format, each representing one of the output formats enabled for the given page.. See [details](/templates/output-formats/). + +## Methods + +{{% include "methods/page/_common/output-format-methods.md" %}} + +## Example + +Generate a `link` element in the `<head>` of each page for each of the alternative output formats: + +```go-html-template +<head> + ... + {{ $title := printf "%s | %s" .Title site.Title }} + {{ if .IsHome }} + {{ $title = site.Title }} + {{ end }} + {{ range .AlternativeOutputFormats -}} + {{ printf `<link rel=%q type=%q href=%q title=%q>` .Rel .MediaType.Type .Permalink $title | safeHTML }} + {{ end }} + ... +</head> +``` + +On the site's home page, Hugo renders this to: + +```html +<link rel="alternate" type="application/rss+xml" href="https://example.org/index.xml" title="ABC Widgets, Inc."> +``` diff --git a/docs/content/en/methods/page/Ancestors.md b/docs/content/en/methods/page/Ancestors.md new file mode 100644 index 000000000..3bf36d9aa --- /dev/null +++ b/docs/content/en/methods/page/Ancestors.md @@ -0,0 +1,87 @@ +--- +title: Ancestors +description: Returns a collection of Page objects, one for each ancestor section of the given page. +categories: [] +keywords: [] +action: + related: + - methods/page/CurrentSection + - methods/page/FirstSection + - methods/page/InSection + - methods/page/IsAncestor + - methods/page/IsDescendant + - methods/page/Parent + - methods/page/Sections + returnType: page.Pages + signatures: [PAGE.Ancestors] +--- + +{{< new-in 0.109.0 >}} + +{{% include "methods/page/_common/definition-of-section.md" %}} + +With this content structure: + +```text +content/ +├── auctions/ +│ ├── 2023-11/ +│ │ ├── _index.md <-- front matter: weight = 202311 +│ │ ├── auction-1.md +│ │ └── auction-2.md +│ ├── 2023-12/ +│ │ ├── _index.md <-- front matter: weight = 202312 +│ │ ├── auction-3.md +│ │ └── auction-4.md +│ ├── _index.md <-- front matter: weight = 30 +│ ├── bidding.md +│ └── payment.md +├── books/ +│ ├── _index.md <-- front matter: weight = 10 +│ ├── book-1.md +│ └── book-2.md +├── films/ +│ ├── _index.md <-- front matter: weight = 20 +│ ├── film-1.md +│ └── film-2.md +└── _index.md +``` + +And this template: + +```go-html-template +{{ range .Ancestors }} + <a href="{{ .RelPermalink }}">{{ .LinkTitle }}</a> +{{ end }} +``` + +On the November 2023 auctions page, Hugo renders: + +```html +<a href="/auctions/2023-11/">Auctions in November 2023</a> +<a href="/auctions/">Auctions</a> +<a href="/">Home</a> +``` + +In the example above, notice that Hugo orders the ancestors from closest to furthest. This makes breadcrumb navigation simple: + +```go-html-template +<nav aria-label="breadcrumb" class="breadcrumb"> + <ol> + {{ range .Ancestors.Reverse }} + <li> + <a href="{{ .RelPermalink }}">{{ .LinkTitle }}</a> + </li> + {{ end }} + <li class="active"> + <a aria-current="page" href="{{ .RelPermalink }}">{{ .LinkTitle }}</a> + </li> + </ol> +</nav> +``` + +With some CSS, the code above renders something like this, where each breadcrumb links to its page: + +```text +Home > Auctions > Auctions in November 2023 > Auction 1 +``` diff --git a/docs/content/en/methods/page/BundleType.md b/docs/content/en/methods/page/BundleType.md new file mode 100644 index 000000000..77d1d72eb --- /dev/null +++ b/docs/content/en/methods/page/BundleType.md @@ -0,0 +1,37 @@ +--- +title: BundleType +description: Returns the bundle type of the given page, or an empty string if the page is not a page bundle. +categories: [] +keywords: [] +action: + related: [] + returnType: files.ContentClass + signatures: [PAGE.BundleType] +--- + +A page bundle is a directory that encapsulates both content and associated [resources]. There are two types of page bundles: [leaf bundles] and [branch bundles]. See [details](/content-management/page-bundles/). + +The `BundleType` method on a `Page` object returns `branch` for branch bundles, `leaf` for leaf bundles, and an empty string if the page is not a page bundle. + +```text +content/ +├── films/ +│ ├── film-1/ +│ │ ├── a.jpg +│ │ └── index.md <-- leaf bundle +│ ├── _index.md <-- branch bundle +│ ├── b.jpg +│ ├── film-2.md +│ └── film-3.md +└── _index.md <-- branch bundle +``` + +To get the value within a template: + +```go-html-template +{{ .BundleType }} +``` + +[resources]: /getting-started/glossary/#resource +[leaf bundles]: /getting-started/glossary/#leaf-bundle +[branch bundles]: /getting-started/glossary/#branch-bundle diff --git a/docs/content/en/methods/page/CodeOwners.md b/docs/content/en/methods/page/CodeOwners.md new file mode 100644 index 000000000..068c4591f --- /dev/null +++ b/docs/content/en/methods/page/CodeOwners.md @@ -0,0 +1,66 @@ +--- +title: CodeOwners +description: Returns of slice of code owners for the given page, derived from the CODEOWNERS file in the root of the project directory. +categories: [] +keywords: [] +action: + related: + - methods/page/GitInfo + returnType: '[]string' + signatures: [PAGE.CodeOwners] +--- + +GitHub and GitLab support CODEOWNERS files. This file specifies the users responsible for developing and maintaining software and documentation. This definition can apply to the entire repository, specific directories, or to individual files. To learn more: + +- [GitHub CODEOWNERS documentation] +- [GitLab CODEOWNERS documentation] + +Use the `CodeOwners` method on a `Page` object to determine the code owners for the given page. + +[GitHub CODEOWNERS documentation]: https://docs.github.com/en/repositories/managing-your-repositorys-settings-and-features/customizing-your-repository/about-code-owners +[GitLab CODEOWNERS documentation]: https://docs.gitlab.com/ee/user/project/code_owners.html + +To use the `CodeOwners` method you must enable access to your local Git repository: + +{{< code-toggle file=hugo >}} +enableGitInfo = true +{{< /code-toggle >}} + +Consider this project structure: + +```text +my-project/ +├── content/ +│ ├── books/ +│ │ └── les-miserables.md +│ └── films/ +│ └── the-hunchback-of-notre-dame.md +└── CODEOWNERS +``` + +And this CODEOWNERS file: + +```text +* @jdoe +/content/books/ @tjones +/content/films/ @mrichards @rsmith +``` + +The table below shows the slice of code owners returned for each file: + +Path|Code owners +:--|:-- +`books/les-miserables.md`|`[@tjones]` +`films/the-hunchback-of-notre-dame.md`|`[@mrichards @rsmith]` + +Render the code owners for each content page: + +```go-html-template +{{ range .CodeOwners }} + {{ . }} +{{ end }} +``` + +Combine this method with [`resources.GetRemote`] to retrieve names and avatars from your Git provider by querying their API. + +[`resources.GetRemote`]: functions/resources/getremote diff --git a/docs/content/en/methods/page/Content.md b/docs/content/en/methods/page/Content.md new file mode 100644 index 000000000..40a057f02 --- /dev/null +++ b/docs/content/en/methods/page/Content.md @@ -0,0 +1,22 @@ +--- +title: Content +description: Returns the rendered content of the given page. +categories: [] +keywords: [] +action: + related: + - methods/page/RawContent + - methods/page/Plain + - methods/page/PlainWords + - methods/page/RenderShortcodes + returnType: template.HTML + signatures: [PAGE.Content] +--- + +The `Content` method on a `Page` object renders markdown and shortcodes to HTML. The content does not include front matter. + +[shortcodes]: /getting-started/glossary/#shortcode + +```go-html-template +{{ .Content }} +``` diff --git a/docs/content/en/methods/page/CurrentSection.md b/docs/content/en/methods/page/CurrentSection.md new file mode 100644 index 000000000..7049feb47 --- /dev/null +++ b/docs/content/en/methods/page/CurrentSection.md @@ -0,0 +1,60 @@ +--- +title: CurrentSection +description: Returns the Page object of the section in which the given page resides. +categories: [] +keywords: [] +action: + related: + - methods/page/Ancestors + - methods/page/FirstSection + - methods/page/InSection + - methods/page/IsAncestor + - methods/page/IsDescendant + - methods/page/Parent + - methods/page/Sections + returnType: page.Page + signatures: [PAGE.CurrentSection] +--- + +{{% include "methods/page/_common/definition-of-section.md" %}} + +{{% note %}} +The current section of a [section] page, [taxonomy] page, [term] page, or the home page, is itself. + +[section]: /getting-started/glossary/#section +[taxonomy]: /getting-started/glossary/#taxonomy +[term]: /getting-started/glossary/#term +{{% /note %}} + +Consider this content structure: + +```text +content/ +├── auctions/ +│ ├── 2023-11/ +│ │ ├── _index.md <-- current section: 2023-11 +│ │ ├── auction-1.md +│ │ └── auction-2.md <-- current section: 2023-11 +│ ├── 2023-12/ +│ │ ├── _index.md +│ │ ├── auction-3.md +│ │ └── auction-4.md +│ ├── _index.md <-- current section: auctions +│ ├── bidding.md +│ └── payment.md <-- current section: auctions +├── books/ +│ ├── _index.md <-- current section: books +│ ├── book-1.md +│ └── book-2.md <-- current section: books +├── films/ +│ ├── _index.md <-- current section: films +│ ├── film-1.md +│ └── film-2.md <-- current section: films +└── _index.md <-- current section: home +``` + +To create a link to the current section page: + +```go-html-template +<a href="{{ .CurrentSection.RelPermalink }}">{{ .CurrentSection.LinkTitle }}</a> +``` diff --git a/docs/content/en/methods/page/Data.md b/docs/content/en/methods/page/Data.md new file mode 100644 index 000000000..4eccde6ff --- /dev/null +++ b/docs/content/en/methods/page/Data.md @@ -0,0 +1,111 @@ +--- +title: Data +description: Returns a unique data object for each page kind. +categories: [] +keywords: [] +action: + related: [] + returnType: page.Data + signatures: [PAGE.Data] +toc: true +--- + +The `Data` method on a `Page` object returns a unique data object for each [page kind]. + +[page kind]: /getting-started/glossary/#page-kind + +{{% note %}} +The `Data` method is only useful within [taxonomy] and [term] templates. + +Themes that are not actively maintained may still use `.Data.Pages` in list templates. Although that syntax remains functional, use one of these methods instead: [`Pages`], [`RegularPages`], or [`RegularPagesRecursive`] + +[`Pages`]: /methods/page/pages/ +[`RegularPages`]: /methods/page/regularpages/ +[`RegularPagesRecursive`]: /methods/page/regularpagesrecursive/ +[term]: /getting-started/glossary/#term +[taxonomy]: /getting-started/glossary/#taxonomy +{{% /note %}} + +The examples that follow are based on this site configuration: + +{{< code-toggle file=hugo >}} +[taxonomies] +genre = 'genres' +author = 'authors' +{{< /code-toggle >}} + +And this content structure: + +```text +content/ +├── books/ +│ ├── and-then-there-were-none.md --> genres: suspense +│ ├── death-on-the-nile.md --> genres: suspense +│ └── jamaica-inn.md --> genres: suspense, romance +│ └── pride-and-prejudice.md --> genres: romance +└── _index.md +``` + +## In a taxonomy template + +Use these methods on the `Data` object within a taxonomy template. + +Singular +: (`string`) Returns the singular name of the taxonomy. + +```go-html-template +{{ .Data.Singular }} → genre +``` + +Plural +: (`string`) Returns the plural name of the taxonomy. + +```go-html-template +{{ .Data.Plural }} → genres +``` + +Terms +: (`page.Taxonomy`) Returns the taxonomy object, consisting of a map of terms and the [weighted pages] associated with each term. + +```go-html-template +{{ $taxonomyObject := .Data.Terms }} +``` + +{{% note %}} +Once you have captured the taxonomy object, use any of the [taxonomy methods] to sort, count, or capture a subset of its weighted pages. + +[taxonomy methods]: /methods/taxonomy +{{% /note %}} + +Learn more about [taxonomy templates]. + +## In a term template + +Use these methods on the `Data` object within a term template. + +Singular +: (`string`) Returns the singular name of the taxonomy. + +```go-html-template +{{ .Data.Singular }} → genre +``` + +Plural +: (`string`) Returns the plural name of the taxonomy. + +```go-html-template +{{ .Data.Plural }} → genres +``` + +Term +: (`string`) Returns the name of the term. + +```go-html-template +{{ .Data.Term }} → suspense +``` + +Learn more about [term templates]. + +[taxonomy templates]: /templates/taxonomy-templates/ +[term templates]: /templates/taxonomy-templates/ +[weighted pages]: /getting-started/glossary/#weighted-page diff --git a/docs/content/en/methods/page/Date.md b/docs/content/en/methods/page/Date.md new file mode 100644 index 000000000..83192f94c --- /dev/null +++ b/docs/content/en/methods/page/Date.md @@ -0,0 +1,39 @@ +--- +title: Date +description: Returns the date of the given page. +categories: [] +keywords: [] +action: + related: + - methods/page/ExpiryDate + - methods/page/LastMod + - methods/page/PublishDate + returnType: time.Time + signatures: [PAGE.Date] +--- + +Set the date in front matter: + +{{< code-toggle file=content/news/article-1.md fm=true >}} +title = 'Article 1' +date = 2023-10-19T00:40:04-07:00 +{{< /code-toggle >}} + +{{% note %}} +The date field in front matter is often considered to be the creation date, You can change its meaning, and its effect on your site, in the site configuration. See [details]. + +[details]: /getting-started/configuration/#configure-dates +{{% /note %}} + +The date is a [time.Time] value. Format and localize the value with the [`time.Format`] function, or use it with any of the [time methods]. + +```go-html-template +{{ .Date | time.Format ":date_medium" }} → Oct 19, 2023 +``` + +In the example above we explicitly set the date in front matter. With Hugo's default configuration, the `Date` method returns the front matter value. This behavior is configurable, allowing you to set fallback values if the date is not defined in front matter. See [details]. + +[`time.Format`]: /functions/time/format +[details]: /getting-started/configuration/#configure-dates +[time methods]: /methods/time +[time.Time]: https://pkg.go.dev/time#Time diff --git a/docs/content/en/methods/page/Description.md b/docs/content/en/methods/page/Description.md new file mode 100644 index 000000000..fbb43b8b5 --- /dev/null +++ b/docs/content/en/methods/page/Description.md @@ -0,0 +1,28 @@ +--- +title: Description +description: Returns the description of the given page as defined in front matter. +categories: [] +keywords: [] +action: + related: + - methods/page/Summary + returnType: string + signatures: [PAGE.Description] +--- + +Conceptually different that a [content summary], a page description is typically used in metadata about the page. + +{{< code-toggle file=content/recipes/sushi.md fm=true >}} +title = 'How to make spicy tuna hand rolls' +description = 'Instructions for making spicy tuna hand rolls.' +{{< /code-toggle >}} + +{{< code file=layouts/baseof.html >}} +<head> + ... + <meta name="description" content="{{ .Description }}"> + ... +</head> +{{< /code >}} + +[content summary]: /content-management/summaries diff --git a/docs/content/en/methods/page/Draft.md b/docs/content/en/methods/page/Draft.md new file mode 100644 index 000000000..fd55a9bc9 --- /dev/null +++ b/docs/content/en/methods/page/Draft.md @@ -0,0 +1,21 @@ +--- +title: Draft +description: Reports whether the given page is a draft as defined in front matter. +categories: [] +keywords: [] +action: + related: [] + returnType: bool + signatures: [PAGE.Draft] +--- + +By default, Hugo does not publish draft pages when you build your site. To include draft pages when you build your site, use the `--buildDrafts` command line flag. + +{{< code-toggle file=content/posts/post-1.md fm=true >}} +title = 'Post 1' +draft = true +{{< /code-toggle >}} + +```go-html-template +{{ .Draft }} → true +``` diff --git a/docs/content/en/methods/page/Eq.md b/docs/content/en/methods/page/Eq.md new file mode 100644 index 000000000..1be416295 --- /dev/null +++ b/docs/content/en/methods/page/Eq.md @@ -0,0 +1,21 @@ +--- +title: Eq +description: Reports whether two Page objects are equal. +categories: [] +keywords: [] +action: + related: [] + returnType: bool + signatures: [PAGE1.Eq PAGE2] +--- + +In this contrived example from a single page template, we list all pages in the current section except for the current page. + +```go-html-template +{{ $currentPage := . }} +{{ range .CurrentSection.Pages }} + {{ if not (.Eq $currentPage) }} + <a href="{{ .RelPermalink }}">{{ .LinkTitle }}</a> + {{ end }} +{{ end }} +``` diff --git a/docs/content/en/methods/page/ExpiryDate.md b/docs/content/en/methods/page/ExpiryDate.md new file mode 100644 index 000000000..353546449 --- /dev/null +++ b/docs/content/en/methods/page/ExpiryDate.md @@ -0,0 +1,35 @@ +--- +title: ExpiryDate +description: Returns the expiry date of the given page. +categories: [] +keywords: [] +action: + related: + - methods/page/Date + - methods/page/LastMod + - methods/page/PublishDate + returnType: time.Time + signatures: [PAGE.ExpiryDate] +--- + +By default, Hugo excludes expired pages when building your site. To include expired pages, use the `--buildExpired` command line flag. + +Set the expiry date in front matter: + +{{< code-toggle file=content/news/article-1.md fm=true >}} +title = 'Article 1' +expiryDate = 2024-10-19T00:32:13-07:00 +{{< /code-toggle >}} + +The expiry date is a [time.Time] value. Format and localize the value with the [`time.Format`] function, or use it with any of the [time methods]. + +```go-html-template +{{ .ExpiryDate | time.Format ":date_medium" }} → Oct 19, 2024 +``` + +In the example above we explicitly set the expiry date in front matter. With Hugo's default configuration, the `ExpiryDate` method returns the front matter value. This behavior is configurable, allowing you to set fallback values if the expiry date is not defined in front matter. See [details]. + +[`time.Format`]: /functions/time/format +[details]: /getting-started/configuration/#configure-dates +[time methods]: /methods/time +[time.Time]: https://pkg.go.dev/time#Time diff --git a/docs/content/en/methods/page/File.md b/docs/content/en/methods/page/File.md new file mode 100644 index 000000000..44b752215 --- /dev/null +++ b/docs/content/en/methods/page/File.md @@ -0,0 +1,190 @@ +--- +title: File +description: For pages backed by a file, returns file information for the given page. +categories: [] +keywords: [] +action: + related: [] + returnType: hugolib.fileInfo + signatures: [PAGE.File] +toc: true +--- + +By default, not all pages are backed by a file, including top level [section] pages, [taxonomy] pages, and [term] pages. By definition, you cannot retrieve file information when the file does not exist. + +To back one of the pages above with a file, create an _index.md file in the corresponding directory. For example: + +```text +content/ +└── books/ + ├── _index.md <-- the top level section page + ├── book-1.md + └── book-2.md +``` + +Code defensively by verifying file existence as shown in each of the examples below. + +## Methods + +{{% note %}} +The path separators (slash or backslash) in `Path`, `Dir`, and `Filename` depend on the operating system. +{{% /note %}} + +###### BaseFileName + +(`string`) The file name, excluding the extension. + +```go-html-template +{{ with .File }} + {{ .BaseFileName }} +{{ end }} +``` + +###### ContentBaseName + +(`string`) If the page is a branch or leaf bundle, the name of the containing directory, else the `TranslationBaseName`. + +```go-html-template +{{ with .File }} + {{ .ContentBaseName }} +{{ end }} +``` + +###### Dir + +(`string`) The file path, excluding the file name, relative to the `content` directory. + +```go-html-template +{{ with .File }} + {{ .Dir }} +{{ end }} +``` + +###### Ext + +(`string`) The file extension. + +```go-html-template +{{ with .File }} + {{ .Ext }} +{{ end }} +``` + +###### Filename + +(`string`) The absolute file path. + +```go-html-template +{{ with .File }} + {{ .Filename }} +{{ end }} +``` + +###### Lang + +(`string`) The language associated with the given file. + +```go-html-template +{{ with .File }} + {{ .Lang }} +{{ end }} +``` + +###### LogicalName + +(`string`) The file name. + +```go-html-template +{{ with .File }} + {{ .LogicalName }} +{{ end }} +``` + +###### Path + +(`string`) The file path, relative to the `content` directory. + +```go-html-template +{{ with .File }} + {{ .Path }} +{{ end }} +``` + +###### TranslationBaseName + +(`string`) The file name, excluding the extension and language identifier. + +```go-html-template +{{ with .File }} + {{ .TranslationBaseName }} +{{ end }} +``` + +###### UniqueID + +(`string`) The MD5 hash of `.File.Path`. + +```go-html-template +{{ with .File }} + {{ .UniqueID }} +{{ end }} +``` + +## Examples + +Consider this content structure in a multilingual project: + +```text +content/ +├── news/ +│ ├── b/ +│ │ ├── index.de.md <-- leaf bundle +│ │ └── index.en.md <-- leaf bundle +│ ├── a.de.md <-- regular content +│ ├── a.en.md <-- regular content +│ ├── _index.de.md <-- branch bundle +│ └── _index.en.md <-- branch bundle +├── _index.de.md +└── _index.en.md +``` + +With the English language site: + + |regular content|leaf bundle|branch bundle +:--|:--|:--|:-- +BaseFileName|a.en|index.en|_index.en +ContentBaseName|a|b|news +Dir|news/|news/b/|news/ +Ext|md|md|md +Filename|/home/user/...|/home/user/...|/home/user/... +Lang|en|en|en +LogicalName|a.en.md|index.en.md|_index.en.md +Path|news/a.en.md|news/b/index.en.md|news/_index.en.md +TranslationBaseName|a|index|_index +UniqueID|15be14b...|186868f...|7d9159d... + +## Defensive coding + +Some of the pages on a site may not be backed by a file. For example: + +- Top level section pages +- Taxonomy pages +- Term pages + +Without a backing file, Hugo will throw a warning if you attempt to access a `.File` property. For example: + +```text +WARN .File.ContentBaseName on zero object. Wrap it in if or with... +``` + +To code defensively, first check for file existence: + +```go-html-template +{{ with .File }} + {{ .ContentBaseName }} +{{ end }} +``` + +[section]: /getting-started/glossary/#section +[taxonomy]: /getting-started/glossary/#taxonomy +[term]: /getting-started/glossary/#term diff --git a/docs/content/en/methods/page/FirstSection.md b/docs/content/en/methods/page/FirstSection.md new file mode 100644 index 000000000..b3ae4c04a --- /dev/null +++ b/docs/content/en/methods/page/FirstSection.md @@ -0,0 +1,56 @@ +--- +title: FirstSection +description: Returns the Page object of the top level section of which the given page is a descendant. +categories: [] +keywords: [] +action: + related: + - methods/page/Ancestors + - methods/page/CurrentSection + - methods/page/InSection + - methods/page/IsAncestor + - methods/page/IsDescendant + - methods/page/Parent + - methods/page/Sections + returnType: page.Page + signatures: [PAGE.FirstSection] +--- + +{{% include "methods/page/_common/definition-of-section.md" %}} + +{{% note %}} +When called on the home page, the `FirstSection` method returns the `Page` object of the home page itself. +{{% /note %}} + +Consider this content structure: + +```text +content/ +├── auctions/ +│ ├── 2023-11/ +│ │ ├── _index.md <-- first section: auctions +│ │ ├── auction-1.md +│ │ └── auction-2.md <-- first section: auctions +│ ├── 2023-12/ +│ │ ├── _index.md +│ │ ├── auction-3.md +│ │ └── auction-4.md +│ ├── _index.md <-- first section: auctions +│ ├── bidding.md +│ └── payment.md <-- first section: auctions +├── books/ +│ ├── _index.md <-- first section: books +│ ├── book-1.md +│ └── book-2.md <-- first section: books +├── films/ +│ ├── _index.md <-- first section: films +│ ├── film-1.md +│ └── film-2.md <-- first section: films +└── _index.md <-- first section: home +``` + +To link to the top level section of which the current page is a descendant: + +```go-html-template +<a href="{{ .FirstSection.RelPermalink }}">{{ .FirstSection.LinkTitle }}</a> +``` diff --git a/docs/content/en/methods/page/Fragments.md b/docs/content/en/methods/page/Fragments.md new file mode 100644 index 000000000..89f82d2ce --- /dev/null +++ b/docs/content/en/methods/page/Fragments.md @@ -0,0 +1,106 @@ +--- +title: Fragments +description: Returns a data structure of the fragments in the given page. +categories: [] +keywords: [] +action: + related: + - methods/page/TableOfContents + returnType: tableofcontents.Fragments + signatures: [PAGE.Fragments] +toc: true +--- + +{{< new-in 0.111.0 >}} + +In a URL, whether absolute or relative, the [fragment] links to an `id` attribute of an HTML element on the page. + +```text +/articles/article-1#section-2 +------------------- --------- + path fragment +``` + +Hugo assigns an `id` attribute to each markdown [ATX] and [setext] heading within the page content. You can override the `id` with a [markdown attribute] as needed. This creates the relationship between an entry in the [table of contents] (TOC) and a heading on the page. + +Use the `Fragments` method on a `Page` object to create a table of contents with the `Fragments.ToHTML` method, or by [walking] the `Fragments.Map` data structure. + +## Methods + +Headings +: (`map`) A nested map of all headings on the page. Each map contains the following keys: `ID`, `Level`, `Title` and `Headings`. To inspect the data structure: + +```go-html-template +<pre>{{ .Fragments.Headings | jsonify (dict "indent" " ") }}</pre> +``` + +HeadingsMap +: (`slice`) A slice of maps of all headings on the page, with first-level keys for each heading. Each map contains the following keys: `ID`, `Level`, `Title` and `Headings`. To inspect the data structure: + +```go-html-template +<pre>{{ .Fragments.HeadingsMap | jsonify (dict "indent" " ") }}</pre> +``` + +Identifiers +: (`slice`) A slice containing the `id` of each heading on the page. To inspect the data structure: + +```go-html-template +<pre>{{ .Fragments.Identifiers | jsonify (dict "indent" " ") }}</pre> +``` + +Identifiers.Contains ID +: (`bool`) Reports whether one or more headings on the page has the given `id` attribute, useful for validating fragments within a link [render hook]. + +```go-html-template +{{ .Fragments.Identifiers.Contains "section-2" }} → true +``` + +Identifiers.Count ID +: (`int`) The number of headings on a page with the given `id` attribute, useful for detecting duplicates. + +```go-html-template +{{ .Fragments.Identifiers.Count "section-2" }} → 1 +``` + +ToHTML +: (`template.HTML`) Returns a TOC as a nested list, either ordered or unordered, identical to the HTML returned by the [`TableOfContents`] method. This method take three arguments: the start level (`int`), the end level (`int`), and a boolean (`true` to return an ordered list, `false` to return an unordered list). + +Use this method when you want to control the start level, end level, or list type independently from the table of contents settings in your site configuration. + +```go-html-template +{{ $startLevel := 2 }} +{{ $endLevel := 3 }} +{{ $ordered := true }} +{{ .Fragments.ToHTML $startLevel $endLevel $ordered }} +``` + +Hugo renders this to: + +```html +<nav id="TableOfContents"> + <ol> + <li><a href="#section-1">Section 1</a> + <ol> + <li><a href="#section-11">Section 1.1</a></li> + <li><a href="#section-12">Section 1.2</a></li> + </ol> + </li> + <li><a href="#section-2">Section 2</a></li> + </ol> +</nav> +``` + +{{% note %}} +It is safe to use the `Fragments` methods within a render hook, even for the current page. + +When using the `Fragments` methods within a shortcode, call the shortcode using the `{{</* */>}}` notation. If you use the `{{%/* */%}}` notation, the rendered shortcode is included in the creation of the fragments map, resulting in a circular loop. +{{% /note %}} + +[atx]: https://spec.commonmark.org/0.30/#atx-headings +[fragment]: /getting-started/glossary/#fragment +[markdown attribute]: /getting-started/glossary/#markdown-attribute +[setext]: https://spec.commonmark.org/0.30/#setext-headings +[table of contents]: /methods/page/tableofcontents +[walking]: /getting-started/glossary/#walk +[`tableofcontents`]: /methods/page/tableofcontents +[render hook]: /getting-started/glossary/#render-hook diff --git a/docs/content/en/methods/page/FuzzyWordCount.md b/docs/content/en/methods/page/FuzzyWordCount.md new file mode 100644 index 000000000..600ad48d5 --- /dev/null +++ b/docs/content/en/methods/page/FuzzyWordCount.md @@ -0,0 +1,20 @@ +--- +title: FuzzyWordCount +description: Returns the number of words in the content of the given page, rounded up to the nearest multiple of 100. +categories: [] +keywords: [] +action: + related: + - methods/page/WordCount + - methods/page/ReadingTime + returnType: int + signatures: [PAGE.FuzzyWordCount] +--- + +```go-html-template +{{ .FuzzyWordCount }} → 200 +``` + +To get the exact word count, use the [`WordCount`] method. + +[`WordCount`]: /methods/page/wordcount diff --git a/docs/content/en/methods/page/GetPage.md b/docs/content/en/methods/page/GetPage.md new file mode 100644 index 000000000..b1f192d58 --- /dev/null +++ b/docs/content/en/methods/page/GetPage.md @@ -0,0 +1,65 @@ +--- +title: GetPage +description: Returns a Page object from the given path. +categories: [] +keywords: [] +action: + related: + - methods/site/GetPage + returnType: page.Page + signatures: [PAGE.GetPage PATH] +aliases: [/functions/getpage] +--- + +The `GetPage` method is also available on a `Site` object. See [details]. + +[details]: /methods/site/getpage + +When using the `GetPage` method on the `Page` object, specify a path relative to the current directory or relative to the content directory. + +If Hugo cannot resolve the path to a page, the method returns nil. If the path is ambiguous, Hugo throws an error and fails the build. + +Consider this content structure: + +```text +content/ +├── works/ +│ ├── paintings/ +│ │ ├── _index.md +│ │ ├── starry-night.md +│ │ └── the-mona-lisa.md +│ ├── sculptures/ +│ │ ├── _index.md +│ │ ├── david.md +│ │ └── the-thinker.md +│ └── _index.md +└── _index.md +``` + +The examples below depict the result of rendering works/paintings/the-mona-list.md with a single page template: + +```go-html-template +{{ with .GetPage "starry-night" }} + {{ .Title }} → Starry Night +{{ end }} + +{{ with .GetPage "./starry-night" }} + {{ .Title }} → Starry Night +{{ end }} + +{{ with .GetPage "../paintings/starry-night" }} + {{ .Title }} → Starry Night +{{ end }} + +{{ with .GetPage "/works/paintings/starry-night" }} + {{ .Title }} → Starry Night +{{ end }} + +{{ with .GetPage "../sculptures/david" }} + {{ .Title }} → David +{{ end }} + +{{ with .GetPage "/works/sculptures/david" }} + {{ .Title }} → David +{{ end }} +``` diff --git a/docs/content/en/methods/page/GetTerms.md b/docs/content/en/methods/page/GetTerms.md new file mode 100644 index 000000000..3020e4c2e --- /dev/null +++ b/docs/content/en/methods/page/GetTerms.md @@ -0,0 +1,41 @@ +--- +title: GetTerms +description: Returns a collection of term pages for terms defined on the given page in the given taxonomy, ordered according to the sequence in which they appear in front matter. +categories: [] +keywords: [] +action: + related: [] + returnType: page.Pages + signatures: [PAGE.GetTerms TAXONOMY] +--- + +Given this front matter: + +{{< code-toggle file=content/books/les-miserables.md fm=true >}} +title = 'Les Misérables' +tags = ['historical','classic','fiction'] +{{< /code-toggle >}} + +This template code: + +```go-html-template +{{ with .GetTerms "tags" }} + <p>Tags</p> + <ul> + {{ range . }} + <li><a href="{{ .RelPermalink }}">{{ .LinkTitle }}</a></li> + {{ end }} + </ul> +{{ end }} +``` + +Is rendered to: + +```html +<p>Tags</p> +<ul> + <li><a href="/tags/historical/">historical</a></li> + <li><a href="/tags/classic/">classic</a></li> + <li><a href="/tags/fiction/">fiction</a></li> +</ul> +``` diff --git a/docs/content/en/methods/page/GitInfo.md b/docs/content/en/methods/page/GitInfo.md new file mode 100644 index 000000000..9dba2a2b2 --- /dev/null +++ b/docs/content/en/methods/page/GitInfo.md @@ -0,0 +1,146 @@ +--- +title: GitInfo +description: Returns Git information related to the last commit of the given page. +categories: [] +keywords: [] +action: + related: + - methods/page/CodeOwners + returnType: source.GitInfo + signatures: [PAGE.GitInfo] +toc: true +--- + +The `GitInfo` method on a `Page` object returns an object with additional methods. + +{{% note %}} +Hugo's Git integration is performant, but may increase build times on large sites. +{{% /note %}} + +## Prerequisites + +Install [Git], create a repository, and commit your project files. + +You must also allow Hugo to access your repository. In your site configuration: + +{{< code-toggle file=hugo >}} +enableGitInfo = true +{{< /code-toggle >}} + +Alternatively, use the command line flag when building your site: + +```sh +hugo --enableGitInfo +``` + +{{% note %}} +When you set `enableGitInfo` to `true`, or enable the feature with the command line flag, the last modification date for each content page will be the Author Date of the last commit for that file. + +This is configurable. See [details]. + +[details]: /getting-started/configuration/#configure-dates +{{% /note %}} + +## Methods + +###### AbbreviatedHash + +(`string`) The abbreviated commit hash. + +```go-html-template +{{ with .GitInfo }} + {{ .AbbreviatedHash }} → aab9ec0b3 +{{ end }} +``` + +###### AuthorDate + +(`time.Time`) The author date. + +```go-html-template +{{ with .GitInfo }} + {{ .AuthorDate.Format "2006-01-02" }} → 2023-10-09 +{{ end }} +``` + +###### AuthorEmail + +(`string`) The author's email address, respecting [gitmailmap]. + +```go-html-template +{{ with .GitInfo }} + {{ .AuthorEmail }} → [email protected] +{{ end }} +``` + +###### AuthorName + +(`string`) The author's name, respecting [gitmailmap]. + +```go-html-template +{{ with .GitInfo }} + {{ .AuthorName }} → John Smith +{{ end }} +``` + +###### CommitDate + +(`time.Time`) The commit date. + +```go-html-template +{{ with .GitInfo }} + {{ .CommitDate.Format "2006-01-02" }} → 2023-10-09 +{{ end }} +``` + +###### Hash + +(`string`) The commit hash. + +```go-html-template +{{ with .GitInfo }} + {{ .Hash }} → aab9ec0b31ebac916a1468c4c9c305f2bebf78d4 +{{ end }} +``` + +###### Subject + +(`string`) The commit message subject. + +```go-html-template +{{ with .GitInfo }} + {{ .Subject }} → Add tutorials +{{ end }} +``` + +## Last modified date + +By default, when `enableGitInfo` is `true`, the `Lastmod` method on a `Page` object returns the Git AuthorDate of the last commit that included the file. + +You can change this behavior in your [site configuration]. + +[git]: https://git-scm.com/book/en/v2/Getting-Started-Installing-Git +[gitmailmap]: https://git-scm.com/docs/gitmailmap +[site configuration]: /getting-started/configuration/#configure-front-matter + +## Hosting considerations + +When hosting your site in a CI/CD environment, the step that clones your project repository must perform a deep clone. If the clone is shallow, the Git information for a given file may not be accurate---it may reflect the most recent repository commit, not the commit that last modified the file. + +Some providers perform deep clones by default, others allow you to configure the clone depth, and some providers only perform shallow clones. + +Hosting service | Default clone depth | Configurable +:-- | :-- | :-- +Cloudflare Pages | Shallow | Yes [^CFP] +DigitalOcean App Platform | Deep | N/A +GitHub Pages | Shallow | Yes [^GHP] +GitLab Pages | Shallow | Yes [^GLP] +Netlify | Deep | N/A +Render | Shallow | No +Vercel | Shallow | No + +[^CFP]: To configure a Cloudflare Pages site for deep cloning, preface the site's normal Hugo build command with `git fetch --unshallow &&` (*e.g.*, `git fetch --unshallow && hugo`). + +[^GHP]: You can configure the GitHub Action to do a deep clone by specifying `fetch-depth: 0` in the applicable "checkout" step of your workflow file, as shown in the Hugo documentation's [example workflow file](/hosting-and-deployment/hosting-on-github/#procedure). + +[^GLP]: You can configure the GitLab Runner's clone depth [as explained in the GitLab documentation](https://docs.gitlab.com/ee/ci/large_repositories/#shallow-cloning); see also the Hugo documentation's [example workflow file](/hosting-and-deployment/hosting-on-gitlab/#configure-gitlab-cicd). diff --git a/docs/content/en/methods/page/HasMenuCurrent.md b/docs/content/en/methods/page/HasMenuCurrent.md new file mode 100644 index 000000000..68b645905 --- /dev/null +++ b/docs/content/en/methods/page/HasMenuCurrent.md @@ -0,0 +1,31 @@ +--- +title: HasMenuCurrent +description: Reports whether the given page object matches the page object associated with one of the child menu entries under the given menu entry in the given menu. +categories: [] +keywords: [] +action: + related: + - methods/page/IsMenuCurrent + returnType: bool + signatures: [PAGE.HasMenuCurrent MENU MENUENTRY] +aliases: [/functions/hasmenucurrent] +--- + +If the page object associated with the menu entry is a section, this method also returns `true` for any descendant of that section. + +```go-html-template +{{ $currentPage := . }} +{{ range site.Menus.main }} + {{ if $currentPage.IsMenuCurrent .Menu . }} + <a class="active" aria-current="page" href="{{ .URL }}">{{ .Name }}</a> + {{ else if $currentPage.HasMenuCurrent .Menu . }} + <a class="ancestor" aria-current="true" href="{{ .URL }}">{{ .Name }}</a> + {{ else }} + <a href="{{ .URL }}">{{ .Name }}</a> + {{ end }} +{{ end }} +``` + +See [menu templates] for a complete example. + +[menu templates]: /templates/menu-templates/#example diff --git a/docs/content/en/methods/page/HasShortcode.md b/docs/content/en/methods/page/HasShortcode.md new file mode 100644 index 000000000..2846e9535 --- /dev/null +++ b/docs/content/en/methods/page/HasShortcode.md @@ -0,0 +1,50 @@ +--- +title: HasShortcode +description: Reports whether the given shortcode is called by the given page. +categories: [] +keywords: [] +action: + related: [] + returnType: bool + signatures: [PAGE.HasShortcode NAME] +--- + +By example, let's use [Plotly] to render a chart: + +[Plotly]: https://plotly.com/javascript/ + +{{< code file=contents/example.md lang=markdown >}} +{{</* plotly */>}} +{ + "data": [ + { + "x": ["giraffes", "orangutans", "monkeys"], + "y": [20, 14, 23], + "type": "bar" + } + ], +} +{{</* /plotly */>}} +{{< /code >}} + +The shortcode is simple: + +{{< code file=layouts/shortcodes/plotly.html >}} +{{ $id := printf "plotly-%02d" .Ordinal }} +<div id="{{ $id }}"></div> +<script> + Plotly.newPlot(document.getElementById({{ $id }}), {{ .Inner | safeJS }}); +</script> +{{< /code >}} + +Now we can selectively load the required JavaScript on pages that call the "plotly" shortcode: + +{{< code file=layouts/baseof.html >}} +<head> + ... + {{ if .HasShortcode "plotly" }} + <script src="https://cdn.plot.ly/plotly-2.28.0.min.js"></script> + {{ end }} + ... +</head> +{{< /code >}} diff --git a/docs/content/en/methods/page/HeadingsFiltered.md b/docs/content/en/methods/page/HeadingsFiltered.md new file mode 100644 index 000000000..a39c48da1 --- /dev/null +++ b/docs/content/en/methods/page/HeadingsFiltered.md @@ -0,0 +1,18 @@ +--- +title: HeadingsFiltered +description: Returns a slice of headings for each page related to the given page. +categories: [] +keywords: [] +action: + related: + - methods/pages/Related + - methods/page/Fragments + returnType: tableofcontents.Headings + signatures: [PAGE.HeadingsFiltered] +--- + +Use in conjunction with the [`Related`] method on a [`Pages`] object. See [details]. + +[`Pages`]: /methods/pages/ +[`Related`]: /methods/pages/related +[details]: /content-management/related/#index-content-headings-in-related-content diff --git a/docs/content/en/methods/page/InSection.md b/docs/content/en/methods/page/InSection.md new file mode 100644 index 000000000..b98fbc808 --- /dev/null +++ b/docs/content/en/methods/page/InSection.md @@ -0,0 +1,102 @@ +--- +title: InSection +description: Reports whether the given page is in the given section. +categories: [] +keywords: [] +action: + related: + - methods/page/Ancestors + - methods/page/CurrentSection + - methods/page/FirstSection + - methods/page/IsAncestor + - methods/page/IsDescendant + - methods/page/Parent + - methods/page/Sections + returnType: bool + signatures: [PAGE.InSection SECTION] +toc: true +--- + +The `InSection` method on a page object reports whether the given page is in the given section. Note that the method returns `true` when comparing a page to a sibling. + +{{% include "methods/page/_common/definition-of-section.md" %}} + +With this content structure: + +```text +content/ +├── auctions/ +│ ├── 2023-11/ +│ │ ├── _index.md +│ │ ├── auction-1.md +│ │ └── auction-2.md +│ ├── 2023-12/ +│ │ ├── _index.md +│ │ ├── auction-3.md +│ │ └── auction-4.md +│ ├── _index.md +│ ├── bidding.md +│ └── payment.md +└── _index.md +``` + +When rendering the "auction-1" page: + +```go-html-template +{{ with .Site.GetPage "/" }} + {{ $.InSection . }} → false +{{ end }} + +{{ with .Site.GetPage "/auctions" }} + {{ $.InSection . }} → false +{{ end }} + +{{ with .Site.GetPage "/auctions/2023-11" }} + {{ $.InSection . }} → true +{{ end }} + +{{ with .Site.GetPage "/auctions/2023-11/auction-2" }} + {{ $.InSection . }} → true +{{ end }} +``` + +In the examples above we are coding defensively using the [`with`] statement, returning nothing if the page does not exist. By adding an [`else`] clause we can do some error reporting: + +```go-html-template +{{ $path := "/auctions/2023-11" }} +{{ with .Site.GetPage $path }} + {{ $.InSection . }} → true +{{ else }} + {{ errorf "Unable to find the section with path %s" $path }} +{{ end }} + ``` + +## Understanding context + +Inside of the `with` block, the [context] (the dot) is the section `Page` object, not the `Page` object passed into the template. If we were to use this syntax: + +```go-html-template +{{ with .Site.GetPage "/auctions" }} + {{ .InSection . }} → true +{{ end }} +``` + +The result would be wrong when rendering the "auction-1" page because we are comparing the section page to itself. + +{{% note %}} +Use the `$` to get the context passed into the template. +{{% /note %}} + +```go-html-template +{{ with .Site.GetPage "/auctions" }} + {{ $.InSection . }} → true +{{ end }} +``` + +{{% note %}} +Gaining a thorough understanding of context is critical for anyone writing template code. +{{% /note %}} + +[context]: /getting-started/glossary/#context +[`with`]: /functions/go-template/with +[`else`]: /functions/go-template/else diff --git a/docs/content/en/methods/page/IsAncestor.md b/docs/content/en/methods/page/IsAncestor.md new file mode 100644 index 000000000..ca23c0868 --- /dev/null +++ b/docs/content/en/methods/page/IsAncestor.md @@ -0,0 +1,100 @@ +--- +title: IsAncestor +description: Reports whether PAGE1 in an ancestor of PAGE2. +categories: [] +keywords: [] +action: + related: + - methods/page/Ancestors + - methods/page/CurrentSection + - methods/page/FirstSection + - methods/page/InSection + - methods/page/IsDescendant + - methods/page/Parent + - methods/page/Sections + returnType: bool + signatures: [PAGE1.IsAncestor PAGE2] +toc: true +--- + +{{% include "methods/page/_common/definition-of-section.md" %}} + +With this content structure: + +```text +content/ +├── auctions/ +│ ├── 2023-11/ +│ │ ├── _index.md +│ │ ├── auction-1.md +│ │ └── auction-2.md +│ ├── 2023-12/ +│ │ ├── _index.md +│ │ ├── auction-3.md +│ │ └── auction-4.md +│ ├── _index.md +│ ├── bidding.md +│ └── payment.md +└── _index.md +``` + +When rendering the "auctions" page: + +```go-html-template +{{ with .Site.GetPage "/" }} + {{ $.IsAncestor . }} → false +{{ end }} + +{{ with .Site.GetPage "/auctions" }} + {{ $.IsAncestor . }} → false +{{ end }} + +{{ with .Site.GetPage "/auctions/2023-11" }} + {{ $.IsAncestor . }} → true +{{ end }} + +{{ with .Site.GetPage "/auctions/2023-11/auction-2" }} + {{ $.IsAncestor . }} → true +{{ end }} +``` + +In the examples above we are coding defensively using the [`with`] statement, returning nothing if the page does not exist. By adding an [`else`] clause we can do some error reporting: + +```go-html-template +{{ $path := "/auctions/2023-11" }} +{{ with .Site.GetPage $path }} + {{ $.IsAncestor . }} → true +{{ else }} + {{ errorf "Unable to find the section with path %s" $path }} +{{ end }} + ``` + +## Understanding context + +Inside of the `with` block, the [context] (the dot) is the section `Page` object, not the `Page` object passed into the template. If we were to use this syntax: + +```go-html-template +{{ with .Site.GetPage "/auctions" }} + {{ .IsAncestor . }} → true +{{ end }} +``` + +The result would be wrong when rendering the "auction-1" page because we are comparing the section page to itself. + +{{% note %}} +Use the `$` to get the context passed into the template. +{{% /note %}} + +```go-html-template +{{ with .Site.GetPage "/auctions" }} + {{ $.IsAncestor . }} → true +{{ end }} +``` + +{{% note %}} +Gaining a thorough understanding of context is critical for anyone writing template code. +{{% /note %}} + +[context]: /getting-started/glossary/#context +[`with`]: /functions/go-template/with +[`else`]: /functions/go-template/else diff --git a/docs/content/en/methods/page/IsDescendant.md b/docs/content/en/methods/page/IsDescendant.md new file mode 100644 index 000000000..f1042564e --- /dev/null +++ b/docs/content/en/methods/page/IsDescendant.md @@ -0,0 +1,99 @@ +--- +title: IsDescendant +description: Reports whether PAGE1 in a descendant of PAGE2. +categories: [] +keywords: [] +action: + related: + - methods/page/Ancestors + - methods/page/CurrentSection + - methods/page/FirstSection + - methods/page/InSection + - methods/page/IsAncestor + - methods/page/Parent + - methods/page/Sections + returnType: bool + signatures: [PAGE1.IsDescendant PAGE2] +--- + +{{% include "methods/page/_common/definition-of-section.md" %}} + +With this content structure: + +```text +content/ +├── auctions/ +│ ├── 2023-11/ +│ │ ├── _index.md +│ │ ├── auction-1.md +│ │ └── auction-2.md +│ ├── 2023-12/ +│ │ ├── _index.md +│ │ ├── auction-3.md +│ │ └── auction-4.md +│ ├── _index.md +│ ├── bidding.md +│ └── payment.md +└── _index.md +``` + +When rendering the "auctions" page: + +```go-html-template +{{ with .Site.GetPage "/" }} + {{ $.IsDescendant . }} → true +{{ end }} + +{{ with .Site.GetPage "/auctions" }} + {{ $.IsDescendant . }} → false +{{ end }} + +{{ with .Site.GetPage "/auctions/2023-11" }} + {{ $.IsDescendant . }} → false +{{ end }} + +{{ with .Site.GetPage "/auctions/2023-11/auction-2" }} + {{ $.IsDescendant . }} → false +{{ end }} +``` + +In the examples above we are coding defensively using the [`with`] statement, returning nothing if the page does not exist. By adding an [`else`] clause we can do some error reporting: + +```go-html-template +{{ $path := "/auctions/2023-11" }} +{{ with .Site.GetPage $path }} + {{ $.IsDescendant . }} → true +{{ else }} + {{ errorf "Unable to find the section with path %s" $path }} +{{ end }} + ``` + +## Understanding context + +Inside of the `with` block, the [context] (the dot) is the section `Page` object, not the `Page` object passed into the template. If we were to use this syntax: + +```go-html-template +{{ with .Site.GetPage "/auctions" }} + {{ .IsDescendant . }} → true +{{ end }} +``` + +The result would be wrong when rendering the "auction-1" page because we are comparing the section page to itself. + +{{% note %}} +Use the `$` to get the context passed into the template. +{{% /note %}} + +```go-html-template +{{ with .Site.GetPage "/auctions" }} + {{ $.IsDescendant . }} → true +{{ end }} +``` + +{{% note %}} +Gaining a thorough understanding of context is critical for anyone writing template code. +{{% /note %}} + +[context]: /getting-started/glossary/#context +[`with`]: /functions/go-template/with +[`else`]: /functions/go-template/else diff --git a/docs/content/en/methods/page/IsHome.md b/docs/content/en/methods/page/IsHome.md new file mode 100644 index 000000000..b688f88c0 --- /dev/null +++ b/docs/content/en/methods/page/IsHome.md @@ -0,0 +1,31 @@ +--- +title: IsHome +description: Reports whether the given page is the home page. +categories: [] +keywords: [] +action: + related: + - methods/page/IsNode + - methods/page/IsPage + - methods/page/IsSection + returnType: bool + signatures: [PAGE.IsHome] +--- + +The `IsHome` method on a `Page` object returns `true` if the [page kind] is `home`. + +```text +content/ +├── books/ +│ ├── book-1/ +│ │ └── index.md <-- kind = page +│ ├── book-2.md <-- kind = page +│ └── _index.md <-- kind = section +└── _index.md <-- kind = home +``` + +```go-html-template +{{ .IsHome }} +``` + +[page kind]: /getting-started/glossary/#page-kind diff --git a/docs/content/en/methods/page/IsMenuCurrent.md b/docs/content/en/methods/page/IsMenuCurrent.md new file mode 100644 index 000000000..61283fd8b --- /dev/null +++ b/docs/content/en/methods/page/IsMenuCurrent.md @@ -0,0 +1,29 @@ +--- +title: IsMenuCurrent +description: Reports whether the given page object matches the page object associated with the given menu entry in the given menu. +categories: [] +keywords: [] +action: + related: + - methods/page/HasMenuCurrent + returnType: bool + signatures: [PAGE.IsMenuCurrent MENU MENUENTRY] +aliases: [/functions/ismenucurrent] +--- + +```go-html-template +{{ $currentPage := . }} +{{ range site.Menus.main }} + {{ if $currentPage.IsMenuCurrent .Menu . }} + <a class="active" aria-current="page" href="{{ .URL }}">{{ .Name }}</a> + {{ else if $currentPage.HasMenuCurrent .Menu . }} + <a class="ancestor" aria-current="true" href="{{ .URL }}">{{ .Name }}</a> + {{ else }} + <a href="{{ .URL }}">{{ .Name }}</a> + {{ end }} +{{ end }} +``` + +See [menu templates] for a complete example. + +[menu templates]: /templates/menu-templates/#example diff --git a/docs/content/en/methods/page/IsNode.md b/docs/content/en/methods/page/IsNode.md new file mode 100644 index 000000000..dfdf435c5 --- /dev/null +++ b/docs/content/en/methods/page/IsNode.md @@ -0,0 +1,36 @@ +--- +title: IsNode +description: Reports whether the given page is a node. +categories: [] +keywords: [] +action: + related: + - methods/page/IsHome + - methods/page/IsPage + - methods/page/IsSection + returnType: bool + signatures: [PAGE.IsNode] +--- + +The `IsNode` method on a `Page` object returns `true` if the [page kind] is `home`, `section`, `taxonomy`, or `term`. + +It returns `false` is the page kind is `page`. + +```text +content/ +├── books/ +│ ├── book-1/ +│ │ └── index.md <-- kind = page, node = false +│ ├── book-2.md <-- kind = page, node = false +│ └── _index.md <-- kind = section, node = true +├── tags/ +│ ├── fiction/ +│ │ └── _index.md <-- kind = term, node = true +│ └── _index.md <-- kind = taxonomy, node = true +└── _index.md <-- kind = home, node = true +``` + +```go-html-template +{{ .IsNode }} +``` +[page kind]: /getting-started/glossary/#page-kind diff --git a/docs/content/en/methods/page/IsPage.md b/docs/content/en/methods/page/IsPage.md new file mode 100644 index 000000000..672ee61f4 --- /dev/null +++ b/docs/content/en/methods/page/IsPage.md @@ -0,0 +1,31 @@ +--- +title: IsPage +description: Reports whether the given page is a regular page. +categories: [] +keywords: [] +action: + related: + - methods/page/IsHome + - methods/page/IsNode + - methods/page/IsSection + returnType: bool + signatures: [PAGE.IsPage] +--- + +The `IsPage` method on a `Page` object returns `true` if the [page kind] is `page`. + +```text +content/ +├── books/ +│ ├── book-1/ +│ │ └── index.md <-- kind = page +│ ├── book-2.md <-- kind = page +│ └── _index.md <-- kind = section +└── _index.md <-- kind = home +``` + +```go-html-template +{{ .IsPage }} +``` + +[page kind]: /getting-started/glossary/#page-kind diff --git a/docs/content/en/methods/page/IsSection.md b/docs/content/en/methods/page/IsSection.md new file mode 100644 index 000000000..b02e58a45 --- /dev/null +++ b/docs/content/en/methods/page/IsSection.md @@ -0,0 +1,31 @@ +--- +title: IsSection +description: Reports whether the given page is a section page. +categories: [] +keywords: [] +action: + related: + - methods/page/IsHome + - methods/page/IsNode + - methods/page/IsPage + returnType: bool + signatures: [PAGE.IsSection] +--- + +The `IsSection` method on a `Page` object returns `true` if the [page kind] is `section`. + +```text +content/ +├── books/ +│ ├── book-1/ +│ │ └── index.md <-- kind = page +│ ├── book-2.md <-- kind = page +│ └── _index.md <-- kind = section +└── _index.md <-- kind = home +``` + +```go-html-template +{{ .IsSection }} +``` + +[page kind]: /getting-started/glossary/#page-kind diff --git a/docs/content/en/methods/page/IsTranslated.md b/docs/content/en/methods/page/IsTranslated.md new file mode 100644 index 000000000..6a8f3f69e --- /dev/null +++ b/docs/content/en/methods/page/IsTranslated.md @@ -0,0 +1,59 @@ +--- +title: IsTranslated +description: Reports whether the given page has one or more translations. +categories: [] +keywords: [] +action: + related: + - methods/page/Translations + - methods/page/AllTranslations + - methods/page/TranslationKey + returnType: bool + signatures: [PAGE.IsTranslated] +--- + +With this site configuration: + +{{< code-toggle file=hugo >}} +defaultContentLanguage = 'en' + +[languages.en] +contentDir = 'content/en' +languageCode = 'en-US' +languageName = 'English' +weight = 1 + +[languages.de] +contentDir = 'content/de' +languageCode = 'de-DE' +languageName = 'Deutsch' +weight = 2 +{{< /code-toggle >}} + +And this content: + +```text +content/ +├── de/ +│ ├── books/ +│ │ └── book-1.md +│ └── _index.md +├── en/ +│ ├── books/ +│ │ ├── book-1.md +│ │ └── book-2.md +│ └── _index.md +└── _index.md +``` + +When rendering content/en/books/book-1.md: + +```go-html-template +{{ .IsTranslated }} → true +``` + +When rendering content/en/books/book-2.md: + +```go-html-template +{{ .IsTranslated }} → false +``` diff --git a/docs/content/en/methods/page/Keywords.md b/docs/content/en/methods/page/Keywords.md new file mode 100644 index 000000000..5ad37ce51 --- /dev/null +++ b/docs/content/en/methods/page/Keywords.md @@ -0,0 +1,46 @@ +--- +title: Keywords +description: Returns a slice of keywords as defined in front matter. +categories: [] +keywords: [] +action: + related: [] + returnType: '[]string' + signatures: [PAGE.Keywords] +--- + +By default, Hugo evaluates the keywords when creating collections of [related content]. + +[related content]: /content-management/related + +{{< code-toggle file=content/recipes/sushi.md fm=true >}} +title = 'How to make spicy tuna hand rolls' +keywords = ['tuna','sriracha','nori','rice'] +{{< /code-toggle >}} + +To list the keywords within a template: + +```go-html-template +{{ range .Keywords }} + {{ . }} +{{ end }} +``` + +Or use the [delimit] function: + +```go-html-template +{{ delimit .Keywords ", " ", and " }} → tuna, sriracha, nori, and rice +``` + +[delimit]: /functions/collections/delimit + +Keywords are also a useful [taxonomy]: + +{{< code-toggle file=hugo >}} +[taxonomies] +tag = 'tags' +keyword = 'keywords' +category = 'categories' +{{< /code-toggle >}} + +[taxonomy]: /content-management/taxonomies diff --git a/docs/content/en/methods/page/Kind.md b/docs/content/en/methods/page/Kind.md new file mode 100644 index 000000000..d901e9a7d --- /dev/null +++ b/docs/content/en/methods/page/Kind.md @@ -0,0 +1,35 @@ +--- +title: Kind +description: Returns the kind of the given page. +categories: [] +keywords: [] +action: + related: + - methods/page/Type + returnType: string + signatures: [PAGE.Kind] +--- + +The [page kind] is one of `home`, `page`, `section`, `taxonomy`, or `term`. + +```text +content/ +├── books/ +│ ├── book-1/ +│ │ └── index.md <-- kind = page +│ ├── book-2.md <-- kind = page +│ └── _index.md <-- kind = section +├── tags/ +│ ├── fiction/ +│ │ └── _index.md <-- kind = term +│ └── _index.md <-- kind = taxonomy +└── _index.md <-- kind = home +``` + +To get the value within a template: + +```go-html-template +{{ .Kind }} +``` + +[page kind]: /getting-started/glossary/#page-kind diff --git a/docs/content/en/methods/page/Language.md b/docs/content/en/methods/page/Language.md new file mode 100644 index 000000000..4e65107da --- /dev/null +++ b/docs/content/en/methods/page/Language.md @@ -0,0 +1,65 @@ +--- +title: Language +description: Returns the language object for the given page. +categories: [] +keywords: [] +action: + related: + - methods/site/Language + returnType: langs.Language + signatures: [PAGE.Language] +--- + +The `Language` method on a `Page` object returns the language object for the given page. The language object points to the language definition in the site configuration. + +You can also use the `Language` method on a `Site` object. See [details]. + +## Methods + +The examples below assume the following in your site configuration: + +{{< code-toggle file=hugo >}} +[languages.de] +languageCode = 'de-DE' +languageDirection = 'ltr' +languageName = 'Deutsch' +weight = 2 +{{< /code-toggle >}} + +Lang +: (`string`) The language tag as defined by [RFC 5646]. + +```go-html-template +{{ .Language.Lang }} → de +``` + +LanguageCode +: (`string`) The language code from the site configuration. + +```go-html-template +{{ .Language.LanguageCode }} → de-DE +``` + +LanguageDirection +: (`string`) The language direction from the site configuration, either `ltr` or `rtl`. + +```go-html-template +{{ .Language.LanguageDirection }} → ltr +``` + +LanguageName +: (`string`) The language name from the site configuration. + +```go-html-template +{{ .Language.LanguageName }} → Deutsch +``` + +Weight +: (`int`) The language weight from the site configuration which determines its order in the slice of languages returned by the `Languages` method on a `Site` object. + +```go-html-template +{{ .Language.Weight }} → 2 +``` + +[details]: /methods/site/language +[RFC 5646]: https://datatracker.ietf.org/doc/html/rfc5646 diff --git a/docs/content/en/methods/page/Lastmod.md b/docs/content/en/methods/page/Lastmod.md new file mode 100644 index 000000000..c1692233d --- /dev/null +++ b/docs/content/en/methods/page/Lastmod.md @@ -0,0 +1,40 @@ +--- +title: Lastmod +description: Returns the last modification date of the given page. +categories: [] +keywords: [] +action: + related: + - methods/page/Date + - methods/page/ExpiryDate + - methods/page/PublishDate + - methods/page/GitInfo + returnType: time.Time + signatures: [PAGE.Lastmod] +--- + +Set the last modification date in front matter: + +{{< code-toggle file=content/news/article-1.md fm=true >}} +title = 'Article 1' +lastmod = 2023-10-19T00:40:04-07:00 +{{< /code-toggle >}} + +The last modification date is a [time.Time] value. Format and localize the value with the [`time.Format`] function, or use it with any of the [time methods]. + +```go-html-template +{{ .Lastmod | time.Format ":date_medium" }} → Oct 19, 2023 +``` + +In the example above we explicitly set the last modification date in front matter. With Hugo's default configuration, the `Lastmod` method returns the front matter value. This behavior is configurable, allowing you to: + +- Set the last modification date to the Author Date of the last Git commit for that file. See [`GitInfo`] for details. +- Set fallback values if the last modification date is not defined in front matter. + +Learn more about [date configuration]. + +[`gitinfo`]: /methods/page/gitinfo +[`time.format`]: /functions/time/format +[date configuration]: /getting-started/configuration/#configure-dates +[time methods]: /methods/time +[time.time]: https://pkg.go.dev/time#time diff --git a/docs/content/en/methods/page/Layout.md b/docs/content/en/methods/page/Layout.md new file mode 100644 index 000000000..3d0cdc437 --- /dev/null +++ b/docs/content/en/methods/page/Layout.md @@ -0,0 +1,40 @@ +--- +title: Layout +description: Returns the layout for the given page as defined in front matter. +categories: [] +keywords: [] +action: + related: + - methods/page/Type + returnType: string + signatures: [PAGE.Layout] +--- + +Specify the `layout` field in front matter to target a particular template. See [details]. + +[details]: /templates/lookup-order/#target-a-template + +{{< code-toggle file=content/contact.md >}} +title = 'Contact' +layout = 'contact' +{{< /code-toggle >}} + +Hugo will render the page using contact.html. + +```text +layouts/ +└── _default/ + ├── baseof.html + ├── contact.html + ├── home.html + ├── list.html + └── single.html +``` + +Although rarely used within a template, you can access the value with: + +```go-html-template +{{ .Layout }} +``` + +The `Layout` method returns an empty string if the `layout` field in front matter is not defined. diff --git a/docs/content/en/methods/page/Len.md b/docs/content/en/methods/page/Len.md new file mode 100644 index 000000000..d4270bda3 --- /dev/null +++ b/docs/content/en/methods/page/Len.md @@ -0,0 +1,15 @@ +--- +title: Len +description: Returns the length, in bytes, of the rendered content of the given page. +categories: [] +keywords: [] +action: + related: + - methods/page/Content + returnType: int + signatures: [PAGE.Len] +--- + +```go-html-template +{{ .Len }} → 42 +``` diff --git a/docs/content/en/methods/page/LinkTitle.md b/docs/content/en/methods/page/LinkTitle.md new file mode 100644 index 000000000..746e433bb --- /dev/null +++ b/docs/content/en/methods/page/LinkTitle.md @@ -0,0 +1,30 @@ +--- +title: LinkTitle +description: Returns the link title of the given page. +categories: [] +keywords: [] +action: + related: + - methods/page/Title + returnType: string + signatures: [PAGE.LinkTitle] +--- + +The `LinkTitle` method returns the `linkTitle` field as defined in front matter, falling back to the value returned by the [`Title`] method. + +[`Title`]: /methods/page/title + +{{< code-toggle file=content/articles/healthy-desserts.md fm=true >}} +title = 'Seventeen delightful recipes for healthy desserts' +linkTitle = 'Dessert recipes' +{{< /code-toggle >}} + +```go-html-template +{{ .LinkTitle }} → Dessert recipes +``` + +As demonstrated above, defining a link title in front matter is advantageous when the page title is long. Use it when generating anchor elements in your templates: + +```go-html-template +<a href="{{ .RelPermalink }}">{{ .LinkTitle }}</a> +``` diff --git a/docs/content/en/methods/page/Next.md b/docs/content/en/methods/page/Next.md new file mode 100644 index 000000000..57fc1f2f8 --- /dev/null +++ b/docs/content/en/methods/page/Next.md @@ -0,0 +1,53 @@ +--- +title: Next +description: Returns the next page in a global page collection, relative to the given page. +categories: [] +keywords: [] +action: + related: + - methods/page/Prev + - methods/page/NextInSection + - methods/page/PrevInSection + - methods/pages/Next + - methods/pages/Prev + returnType: page.Page + signatures: [PAGE.Next] +toc: true +--- + +The behavior of the `Prev` and `Next` methods on a `Page` object is probably the reverse of what you expect. + +With this content structure: + +```text +content/ +├── pages/ +│ ├── _index.md +│ ├── page-1.md <-- front matter: weight = 10 +│ ├── page-2.md <-- front matter: weight = 20 +│ └── page-3.md <-- front matter: weight = 30 +└── _index.md +``` + +When you visit page-2: + +- The `Prev` method points to page-3 +- The `Next` method points to page-1 + +{{% note %}} +Use the opposite label in your navigation links as shown in the example below. +{{% /note %}} + +```go-html-template +{{ with .Next }} + <a href="{{ .RelPermalink }}">Prev</a> +{{ end }} + +{{ with .Prev }} + <a href="{{ .RelPermalink }}">Next</a> +{{ end }} +``` + +## Compare to Pages methods + +{{% include "methods/_common/next-prev-on-page-vs-next-prev-on-pages.md" %}} diff --git a/docs/content/en/methods/page/NextInSection.md b/docs/content/en/methods/page/NextInSection.md new file mode 100644 index 000000000..73f82d754 --- /dev/null +++ b/docs/content/en/methods/page/NextInSection.md @@ -0,0 +1,71 @@ +--- +title: NextInSection +description: Returns the next page within a section, relative to the given page. +categories: [] +keywords: [] +action: + related: + - methods/page/PrevInSection + - methods/page/Next + - methods/page/Prev + - methods/pages/Next + - methods/pages/Prev + returnType: page.Page + signatures: [PAGE.NextInSection] +--- + +The behavior of the `PrevInSection` and `NextInSection` methods on a `Page` object is probably the reverse of what you expect. + +With this content structure: + +```text +content/ +├── books/ +│ ├── _index.md +│ ├── book-1.md +│ ├── book-2.md +│ └── book-3.md +├── films/ +│ ├── _index.md +│ ├── film-1.md +│ ├── film-2.md +│ └── film-3.md +└── _index.md +``` + +When you visit book-2: + +- The `PrevInSection` method points to book-3 +- The `NextInSection` method points to book-1 + +{{% note %}} +Use the opposite label in your navigation links as shown in the example below. +{{% /note %}} + +```go-html-template +{{ with .NextInSection }} + <a href="{{ .RelPermalink }}">Previous in section</a> +{{ end }} + +{{ with .PrevInSection }} + <a href="{{ .RelPermalink }}">Next in section</a> +{{ end }} +``` + +{{% note %}} +The navigation sort order may be different than the page collection sort order. +{{% /note %}} + +With the `PrevInSection` and `NextInSection` methods, the navigation sort order is fixed, using Hugo’s default sort order. In order of precedence: + +1. Page [weight] +2. Page [date] (descending) +3. Page [linkTitle], falling back to page [title] +4. Page file path if the page is backed by a file + +For example, with a page collection sorted by title, the navigation sort order will use Hugo’s default sort order. This is probably not what you want or expect. For this reason, the Next and Prev methods on a Pages object are generally a better choice. + +[date]: /methods/page/date +[weight]: /methods/page/weight +[linkTitle]: /methods/page/linktitle +[title]: /methods/page/title diff --git a/docs/content/en/methods/page/OutputFormats.md b/docs/content/en/methods/page/OutputFormats.md new file mode 100644 index 000000000..03343cf8c --- /dev/null +++ b/docs/content/en/methods/page/OutputFormats.md @@ -0,0 +1,40 @@ +--- +title: OutputFormats +description: Returns a slice of OutputFormat objects, each representing one of the output formats enabled for the given page. +categories: [] +keywords: [] +action: + related: + - methods/page/AlternativeOutputFormats + returnType: '[]OutputFormat' + signatures: [PAGE.OutputFormats] +toc: true +--- + +{{% include "methods/page/_common/output-format-definition.md" %}} + +The `OutputFormats` method on a `Page` object returns a slice of `OutputFormat` objects, each representing one of the output formats enabled for the given page. See [details](/templates/output-formats/). + +## Methods + +{{% include "methods/page/_common/output-format-methods.md" %}} + +## Example + +To link to the RSS feed for the current page: + +```go-html-template +{{ with .OutputFormats.Get "rss" -}} + <a href="{{ .RelPermalink }}">RSS Feed</a> +{{ end }} +``` + +On the site's home page, Hugo renders this to: + +```html +<a href="/index.xml">RSS Feed</a> +``` + +Please see the [link to output formats] section to understand the importance of the construct above. + +[link to output formats]: /templates/output-formats/#link-to-output-formats diff --git a/docs/content/en/methods/page/Page.md b/docs/content/en/methods/page/Page.md new file mode 100644 index 000000000..4d81c04ef --- /dev/null +++ b/docs/content/en/methods/page/Page.md @@ -0,0 +1,40 @@ +--- +title: Page +description: Returns the Page object of the given page. +categories: [] +keywords: [] +action: + related: [] + returnType: page.Page + signatures: [PAGE.Page] +--- + +This is a convenience method, useful within partial templates that are called from both [shortcodes] and page templates. + +{{< code file=layouts/shortcodes/foo.html >}} +{{ partial "my-partial.html" . }} +{{< /code >}} + +When the shortcode calls the partial, it passes the current [context] (the dot). The context includes identifiers such as `Page`, `Params`, `Inner`, and `Name`. + +{{< code file=layouts/_default/single.html >}} +{{ partial "my-partial.html" . }} +{{< /code >}} + +When the page template calls the partial, it also passes the current context (the dot). But in this case, the dot _is_ the `Page` object. + +{{< code file=layouts/partials/my-partial.html >}} +The page title is: {{ .Page.Title }} +{{< /code >}} + +To handle both scenarios, the partial template must be able to access the `Page` object with `Page.Page`. + +{{% note %}} +And yes, that means you can do `.Page.Page.Page.Page.Title` too. + +But don't. +{{% /note %}} + + +[context]: getting-started/glossary/#context +[shortcodes]: /getting-started/glossary/#shortcode diff --git a/docs/content/en/methods/page/Pages.md b/docs/content/en/methods/page/Pages.md new file mode 100644 index 000000000..2f329eeec --- /dev/null +++ b/docs/content/en/methods/page/Pages.md @@ -0,0 +1,90 @@ +--- +title: Pages +description: Returns a collection of regular pages within the current section, and section pages of immediate descendant sections. +categories: [] +keywords: [] +action: + related: + - methods/page/RegularPages + - methods/page/RegularPagesRecursive + returnType: page.Pages + signatures: [PAGE.Pages] +--- + +The `Pages` method on a `Page` object is available to these [page kinds]: `home`, `section`, `taxonomy`, and `term`. The templates for these page kinds receive a page [collection] in [context]. + +Range through the page collection in your template: + +```go-html-template +{{ range .Pages.ByTitle }} + <h2><a href="{{ .RelPermalink }}">{{ .Title }}</a></h2> +{{ end }} +``` + +Consider this content structure: + +```text +content/ +├── lessons/ +│ ├── lesson-1/ +│ │ ├── _index.md +│ │ ├── part-1.md +│ │ └── part-2.md +│ ├── lesson-2/ +│ │ ├── resources/ +│ │ │ ├── task-list.md +│ │ │ └── worksheet.md +│ │ ├── _index.md +│ │ ├── part-1.md +│ │ └── part-2.md +│ ├── _index.md +│ ├── grading-policy.md +│ └── lesson-plan.md +├── _index.md +├── contact.md +└── legal.md +``` + +When rendering the home page, the `Pages` method returns: + + contact.md + legal.md + lessons/_index.md + +When rendering the lessons page, the `Pages` method returns: + + lessons/grading-policy.md + lessons/lesson-plan.md + lessons/lesson-1/_index.md + lessons/lesson-2/_index.md + +When rendering lesson-1, the `Pages` method returns: + + lessons/lesson-1/part-1.md + lessons/lesson-1/part-2.md + +When rendering lesson-2, the `Pages` method returns: + + lessons/lesson-2/part-1.md + lessons/lesson-2/part-2.md + lessons/lesson-2/resources/task-list.md + lessons/lesson-2/resources/worksheet.md + +In the last example, the collection includes pages in the resources subdirectory. That directory is not a [section]---it does not contain an _index.md file. Its contents are part of the lesson-2 section. + +{{% note %}} +When used with a `Site` object, the `Pages` method recursively returns all pages within the site. See [details]. + +[details]: /methods/site/pages +{{% /note %}} + +```go-html-template +{{ range .Site.Pages.ByTitle }} + <h2><a href="{{ .RelPermalink }}">{{ .Title }}</a></h2> +{{ end }} +``` + +[collection]: /getting-started/glossary/#collection +[context]: /getting-started/glossary/#context +[page kinds]: /getting-started/glossary/#page-kind +[section]: /getting-started/glossary/#section diff --git a/docs/content/en/methods/page/Paginate.md b/docs/content/en/methods/page/Paginate.md new file mode 100644 index 000000000..6b43b99dd --- /dev/null +++ b/docs/content/en/methods/page/Paginate.md @@ -0,0 +1,50 @@ +--- +title: Paginate +description: Paginates a collection of pages. +categories: [] +keywords: [] +action: + related: + - methods/page/Paginator + returnType: page.Pager + signatures: ['PAGE.Paginate COLLECTION [N]'] +--- + +[Pagination] is the process of splitting a list page into two or more pagers, where each pager contains a subset of the page collection and navigation links to other pagers. + +By default, the number of elements on each pager is determined by the value of the `paginate` setting in your site configuration. The default value is `10`. Override the value in your site configuration by providing a second argument, an integer, when calling the `Paginate` method. + +{{% note %}} +There is also a `Paginator` method on `Page` objects, but it can neither filter nor sort the page collection. + +The `Paginate` method is more flexible. +{{% /note %}} + +You can invoke pagination on the home page template, [`section`] templates, [`taxonomy`] templates, and [`term`] templates. + +{{< code file=layouts/_default/list.html >}} +{{ $pages := where .Site.RegularPages "Section" "articles" }} +{{ $pages = $pages.ByTitle }} +{{ range (.Paginate $pages 7).Pages }} + <h2><a href="{{ .RelPermalink }}">{{ .Title }}</a></h2> +{{ end }} +{{ template "_internal/pagination.html" . }} +{{< /code >}} + +In the example above, we: + +1. Build a page collection +2. Sort the collection by title +3. Paginate the collection, with 7 elements per pager +4. Range over the paginated page collection, rendering a link to each page +5. Call the internal "pagination" template to create the navigation links between pagers. + +{{% note %}} +Please note that the results of pagination are cached. Once you have invoked either the `Paginator` or `Paginate` method, the paginated collection is immutable. Additional invocations of these methods will have no effect. +{{% /note %}} + +[context]: /getting-started/glossary/#context +[pagination]: /templates/pagination/ +[`section`]: /getting-started/glossary/#section +[`taxonomy`]: /getting-started/glossary/#taxonomy +[`term`]: /getting-started/glossary/#term diff --git a/docs/content/en/methods/page/Paginator.md b/docs/content/en/methods/page/Paginator.md new file mode 100644 index 000000000..b1540286a --- /dev/null +++ b/docs/content/en/methods/page/Paginator.md @@ -0,0 +1,42 @@ +--- +title: Paginator +description: Paginates the collection of regular pages received in context. +categories: [] +keywords: [] +action: + related: + - methods/page/Paginate + returnType: page.Pager + signatures: [PAGE.Paginator] +--- + +[Pagination] is the process of splitting a list page into two or more pagers, where each pager contains a subset of the page collection and navigation links to other pagers. The number of elements on each pager is determined by the value of the `paginate` setting in your site configuration. The default value is `10`. + +You can invoke pagination on the home page template, [`section`] templates, [`taxonomy`] templates, and [`term`] templates. Each of these receive a collection of regular pages in [context]. When you invoke the `Paginator` method, it paginates the page collection received in context. + +{{< code file=layouts/_default/list.html >}} +{{ range .Paginator.Pages }} + <h2><a href="{{ .RelPermalink }}">{{ .LinkTitle }}</a></h2> +{{ end }} +{{ template "_internal/pagination.html" . }} +{{< /code >}} + +In the example above, the internal "pagination" template creates the navigation links between pagers. + +{{% note %}} +Although simple to invoke, with the `Paginator` method you can neither filter nor sort the page collection. It acts upon the page collection received in context. + +The [`Paginate`] method is more flexible, and strongly recommended. + +[`paginate`]: /methods/page/paginate +{{% /note %}} + +{{% note %}} +Please note that the results of pagination are cached. Once you have invoked either the `Paginator` or `Paginate` method, the paginated collection is immutable. Additional invocations of these methods will have no effect. +{{% /note %}} + +[context]: /getting-started/glossary/#context +[pagination]: /templates/pagination/ +[`section`]: /getting-started/glossary/#section +[`taxonomy`]: /getting-started/glossary/#taxonomy +[`term`]: /getting-started/glossary/#term diff --git a/docs/content/en/methods/page/Param.md b/docs/content/en/methods/page/Param.md new file mode 100644 index 000000000..b2932d981 --- /dev/null +++ b/docs/content/en/methods/page/Param.md @@ -0,0 +1,47 @@ +--- +title: Param +description: Returns a page parameter with the given key, falling back to a site parameter if present. +categories: [] +keywords: [] +action: + related: [] + returnType: any + signatures: [PAGE.Param KEY] +aliases: [/functions/param] +--- + +The `Param` method on a `Page` object looks for the given `KEY` in page parameters, and returns the corresponding value. If it cannot find the `KEY` in page parameters, it looks for the `KEY` in site parameters. If it cannot find the `KEY` in either location, the `Param` method returns `nil`. + +Site and theme developers commonly set parameters at the site level, allowing content authors to override those parameters at the page level. + +For example, to show a table of contents on every page, but allow authors to hide the table of contents as needed: + +Configuration: + +{{< code-toggle file=hugo >}} +[params] +display_toc = true +{{< /code-toggle >}} + +Content: + +{{< code-toggle file=content/example.md fm=true >}} +title = 'Example' +date = 2023-01-01 +draft = false +display_toc = false +{{< /code-toggle >}} + +Template: + +```go-html-template +{{ if .Param "display_toc" }} + {{ .TableOfContents }} +{{ end }} +``` + +The `Param` method returns the value associated with the given `KEY`, regardless of whether the value is truthy or falsy. If you need to ignore falsy values, use this construct instead: + +```go-html-template +{{ or .Params.foo site.Params.foo }} +``` diff --git a/docs/content/en/methods/page/Params.md b/docs/content/en/methods/page/Params.md new file mode 100644 index 000000000..3d79d15c5 --- /dev/null +++ b/docs/content/en/methods/page/Params.md @@ -0,0 +1,43 @@ +--- +title: Params +description: Returns a map of custom parameters as defined in the front matter of the given page. +categories: [] +keywords: [] +action: + related: + - functions/collections/IndexFunction + - methods/site/Params + - methods/page/Param + returnType: maps.Params + signatures: [PAGE.Params] +--- + +With this front matter: + +{{< code-toggle file=content/news/annual-conference.md >}} +title = 'Annual conference' +date = 2023-10-17T15:11:37-07:00 +display_related = true +[params.author] + email = '[email protected]' + name = 'John Smith' +{{< /code-toggle >}} + +The `title` and `date` fields are standard parameters---the other fields are user-defined. + +Access the custom parameters by [chaining] the [identifiers]: + +```go-html-template +{{ .Params.display_related }} → true +{{ .Params.author.name }} → John Smith +``` + +In the template example above, each of the keys is a valid identifier. For example, none of the keys contains a hyphen. To access a key that is not a valid identifier, use the [`index`] function: + +```go-html-template +{{ index .Params "key-with-hyphens" }} → 2023 +``` + +[`index`]: /functions/collections/indexfunction +[chaining]: /getting-started/glossary/#chain +[identifiers]: /getting-started/glossary/#identifier diff --git a/docs/content/en/methods/page/Parent.md b/docs/content/en/methods/page/Parent.md new file mode 100644 index 000000000..9d9ed7ea3 --- /dev/null +++ b/docs/content/en/methods/page/Parent.md @@ -0,0 +1,60 @@ +--- +title: Parent +description: Returns the Page object of the parent section of the given page. +categories: [] +keywords: [] +action: + related: + - methods/page/Ancestors + - methods/page/CurrentSection + - methods/page/FirstSection + - methods/page/InSection + - methods/page/IsAncestor + - methods/page/IsDescendant + - methods/page/Sections + returnType: page.Page + signatures: [PAGE.Parent] +--- + +{{% include "methods/page/_common/definition-of-section.md" %}} + +{{% note %}} +The parent section of a regular page is the [current section]. + +[current section]: /methods/page/currentsection +{{% /note %}} + +Consider this content structure: + +```text +content/ +├── auctions/ +│ ├── 2023-11/ +│ │ ├── _index.md <-- parent: auctions +│ │ ├── auction-1.md +│ │ └── auction-2.md <-- parent: 2023-11 +│ ├── 2023-12/ +│ │ ├── _index.md +│ │ ├── auction-3.md +│ │ └── auction-4.md +│ ├── _index.md <-- parent: home +│ ├── bidding.md +│ └── payment.md <-- parent: auctions +├── books/ +│ ├── _index.md <-- parent: home +│ ├── book-1.md +│ └── book-2.md <-- parent: books +├── films/ +│ ├── _index.md <-- parent: home +│ ├── film-1.md +│ └── film-2.md <-- parent: films +└── _index.md <-- parent: nil +``` + +In the example above, note the parent section of the home page is nil. Code defensively by verifying existence of the parent section before calling methods on its `Page` object. To create a link to the parent section page of the current page: + +```go-html-template +{{ with .Parent }} + <a href="{{ .RelPermalink }}">{{ .LinkTitle }}</a> +{{ end }} +``` diff --git a/docs/content/en/methods/page/Permalink.md b/docs/content/en/methods/page/Permalink.md new file mode 100644 index 000000000..d8416df86 --- /dev/null +++ b/docs/content/en/methods/page/Permalink.md @@ -0,0 +1,25 @@ +--- +title: Permalink +description: Returns the permalink of the given page. +categories: [] +keywords: [] +action: + related: + - methods/page/RelPermalink + returnType: string + signatures: [PAGE.Permalink] +--- + +Site configuration: + +{{< code-toggle file=hugo >}} +title = 'Documentation' +baseURL = 'https://example.org/docs/' +{{< /code-toggle >}} + +Template: + +```go-html-template +{{ $page := .Site.GetPage "/about" }} +{{ $page.Permalink }} → https://example.org/docs/about/ +``` diff --git a/docs/content/en/methods/page/Plain.md b/docs/content/en/methods/page/Plain.md new file mode 100644 index 000000000..6fdf60b62 --- /dev/null +++ b/docs/content/en/methods/page/Plain.md @@ -0,0 +1,28 @@ +--- +title: Plain +description: Returns the rendered content of the given page, removing all HTML tags. +categories: [] +keywords: [] +action: + related: + - methods/page/Content + - methods/page/RawContent + - methods/page/PlainWords + - methods/page/RenderShortcodes + returnType: string + signatures: [PAGE.Plain] +--- + +The `Plain` method on a `Page` object renders markdown and [shortcodes] to HTML, then strips the HTML [tags]. It does not strip HTML [entities]. The plain content does not include front matter. + +To prevent Go's [html/template] package from escaping HTML entities, pass the result through the [`htmlUnescape`] function. + +```go-html-template +{{ .Plain | htmlUnescape }} +``` + +[shortcodes]: /getting-started/glossary/#shortcode +[html/template]: https://pkg.go.dev/html/template +[entities]: https://developer.mozilla.org/en-US/docs/Glossary/Entity +[tags]: https://developer.mozilla.org/en-US/docs/Glossary/Tag +[`htmlUnescape`]: /functions/ diff --git a/docs/content/en/methods/page/PlainWords.md b/docs/content/en/methods/page/PlainWords.md new file mode 100644 index 000000000..4bc79d241 --- /dev/null +++ b/docs/content/en/methods/page/PlainWords.md @@ -0,0 +1,36 @@ +--- +title: PlainWords +description: Calls the Plain method, splits the result into a slice of words, and returns the slice. +categories: [] +keywords: [] +action: + related: + - methods/page/Content + - methods/page/RawContent + - methods/page/Plain + returnType: '[]string' + signatures: [PAGE.PlainWords] +--- + +The `PlainWords` method on a `Page` object calls the [`Plain`] method, then uses Go's [`strings.Fields`] function to split the result into words. + +{{% note %}} +_Fields splits the string s around each instance of one or more consecutive white space characters, as defined by [`unicode.IsSpace`], returning a slice of substrings of s or an empty slice if s contains only white space._ + +[`unicode.IsSpace`]: https://pkg.go.dev/unicode#IsSpace +{{% /note %}} + +As a result, elements within the slice may contain leading or trailing punctuation. + +```go-html-template +{{ .PlainWords }} +``` + +To determine the approximate number of unique words on a page: + +```go-html-template +{{ .PlainWords | uniq }} → 42 +``` + +[`Plain`]: /methods/page/plain +[`strings.Fields`]: https://pkg.go.dev/strings#Fields diff --git a/docs/content/en/methods/page/Prev.md b/docs/content/en/methods/page/Prev.md new file mode 100644 index 000000000..b1a503af5 --- /dev/null +++ b/docs/content/en/methods/page/Prev.md @@ -0,0 +1,53 @@ +--- +title: Prev +description: Returns the previous page in a global page collection, relative to the given page. +categories: [] +keywords: [] +action: + related: + - methods/page/Next + - methods/page/PrevInSection + - methods/page/NextInSection + - methods/pages/Prev + - methods/pages/Next + returnType: page.Page + signatures: [PAGE.Prev] +toc: true +--- + +The behavior of the `Prev` and `Next` methods on a `Page` object is probably the reverse of what you expect. + +With this content structure: + +```text +content/ +├── pages/ +│ ├── _index.md +│ ├── page-1.md <-- front matter: weight = 10 +│ ├── page-2.md <-- front matter: weight = 20 +│ └── page-3.md <-- front matter: weight = 30 +└── _index.md +``` + +When you visit page-2: + +- The `Prev` method points to page-3 +- The `Next` method points to page-1 + +{{% note %}} +Use the opposite label in your navigation links as shown in the example below. +{{% /note %}} + +```go-html-template +{{ with .Next }} + <a href="{{ .RelPermalink }}">Prev</a> +{{ end }} + +{{ with .Prev }} + <a href="{{ .RelPermalink }}">Next</a> +{{ end }} +``` + +## Compare to Pages methods + +{{% include "methods/_common/next-prev-on-page-vs-next-prev-on-pages.md" %}} diff --git a/docs/content/en/methods/page/PrevInSection.md b/docs/content/en/methods/page/PrevInSection.md new file mode 100644 index 000000000..c09e4580f --- /dev/null +++ b/docs/content/en/methods/page/PrevInSection.md @@ -0,0 +1,72 @@ +--- +title: PrevInSection +description: Returns the previous page within a section, relative to the given page. +categories: [] +keywords: [] +action: + related: + - methods/page/NextInSection + - methods/page/Next + - methods/pages/Next + - methods/page/Prev + - methods/pages/Prev + returnType: page.Page + signatures: [PAGE.PrevInSection] +--- + + +The behavior of the `PrevInSection` and `NextInSection` methods on a `Page` object is probably the reverse of what you expect. + +With this content structure: + +```text +content/ +├── books/ +│ ├── _index.md +│ ├── book-1.md +│ ├── book-2.md +│ └── book-3.md +├── films/ +│ ├── _index.md +│ ├── film-1.md +│ ├── film-2.md +│ └── film-3.md +└── _index.md +``` + +When you visit book-2: + +- The `PrevInSection` method points to book-3 +- The `NextInSection` method points to book-1 + +{{% note %}} +Use the opposite label in your navigation links as shown in the example below. +{{% /note %}} + +```go-html-template +{{ with .NextInSection }} + <a href="{{ .RelPermalink }}">Previous in section</a> +{{ end }} + +{{ with .PrevInSection }} + <a href="{{ .RelPermalink }}">Next in section</a> +{{ end }} +``` + +{{% note %}} +The navigation sort order may be different than the page collection sort order. +{{% /note %}} + +With the `PrevInSection` and `NextInSection` methods, the navigation sort order is fixed, using Hugo’s default sort order. In order of precedence: + +1. Page [weight] +2. Page [date] (descending) +3. Page [linkTitle], falling back to page [title] +4. Page file path if the page is backed by a file + +For example, with a page collection sorted by title, the navigation sort order will use Hugo’s default sort order. This is probably not what you want or expect. For this reason, the Next and Prev methods on a Pages object are generally a better choice. + +[date]: /methods/page/date +[weight]: /methods/page/weight +[linkTitle]: /methods/page/linktitle +[title]: /methods/page/title diff --git a/docs/content/en/methods/page/PublishDate.md b/docs/content/en/methods/page/PublishDate.md new file mode 100644 index 000000000..b1c0717a9 --- /dev/null +++ b/docs/content/en/methods/page/PublishDate.md @@ -0,0 +1,35 @@ +--- +title: PublishDate +description: Returns the publish date of the given page. +categories: [] +keywords: [] +action: + related: + - methods/page/Date + - methods/page/ExpiryDate + - methods/page/LastMod + returnType: time.Time + signatures: [PAGE.PublishDate] +--- + +By default, Hugo excludes pages with future publish dates when building your site. To include future pages, use the `--buildFuture` command line flag. + +Set the publish date in front matter: + +{{< code-toggle file=content/news/article-1.md fm=true >}} +title = 'Article 1' +publishDate = 2023-10-19T00:40:04-07:00 +{{< /code-toggle >}} + +The publish date is a [time.Time] value. Format and localize the value with the [`time.Format`] function, or use it with any of the [time methods]. + +```go-html-template +{{ .PublishDate | time.Format ":date_medium" }} → Oct 19, 2023 +``` + +In the example above we explicitly set the publish date in front matter. With Hugo's default configuration, the `PublishDate` method returns the front matter value. This behavior is configurable, allowing you to set fallback values if the publish date is not defined in front matter. See [details]. + +[`time.Format`]: /functions/time/format +[details]: /getting-started/configuration/#configure-dates +[time methods]: /methods/time +[time.Time]: https://pkg.go.dev/time#Time diff --git a/docs/content/en/methods/page/RawContent.md b/docs/content/en/methods/page/RawContent.md new file mode 100644 index 000000000..258a294d0 --- /dev/null +++ b/docs/content/en/methods/page/RawContent.md @@ -0,0 +1,31 @@ +--- +title: RawContent +description: Returns the raw content of the given page. +categories: [] +keywords: [] +action: + related: + - methods/page/Content + - methods/page/Plain + - methods/page/PlainWords + - methods/page/RenderShortcodes + returnType: string + signatures: [PAGE.RawContent] +--- + +The `RawContent` method on a `Page` object returns the raw content. The raw content does not include front matter. + +```go-html-template +{{ .RawContent }} +``` + +This is useful when rendering a page in a plain text [output format]. + +{{% note %}} +[Shortcodes] within the content are not rendered. To get the raw content with shortcodes rendered, use the [`RenderShortcodes`] method on a `Page` object. + +[shortcodes]: /getting-started/glossary/#shortcode +[`RenderShortcodes`]: /methods/page/rendershortcodes +{{% /note %}} + +[output format]: /templates/output-formats diff --git a/docs/content/en/methods/page/ReadingTime.md b/docs/content/en/methods/page/ReadingTime.md new file mode 100644 index 000000000..531824b9b --- /dev/null +++ b/docs/content/en/methods/page/ReadingTime.md @@ -0,0 +1,49 @@ +--- +title: ReadingTime +description: Returns the estimated reading time, in minutes, for the given page. +categories: [] +keywords: [] +action: + related: + - methods/page/WordCount + - methods/page/FuzzyWordCount + returnType: int + signatures: [PAGE.ReadingTime] +--- + +The estimated reading time is calculated by dividing the number of words in the content by the reading speed. + +By default, Hugo assumes a reading speed of 212 words per minute. For CJK languages, it assumes 500 words per minute. + +```go-html-template +{{ printf "Estimated reading time: %d minutes" .ReadingTime }} +``` + +Reading speed varies by language. Create language-specific estimated reading times on your multilingual site using site parameters. + +{{< code-toggle file=hugo >}} +[languages] + [languages.de] + contentDir = 'content/de' + languageCode = 'de-DE' + languageName = 'Deutsch' + weight = 2 + [languages.de.params] + reading_speed = 179 + [languages.en] + contentDir = 'content/en' + languageCode = 'en-US' + languageName = 'English' + weight = 1 + [languages.en.params] + reading_speed = 228 +{{< /code-toggle >}} + +Then in your template: + +```go-html-template +{{ $readingTime := div (float .WordCount) .Site.Params.reading_speed }} +{{ $readingTime = math.Ceil $readingTime }} +``` + +We cast the `.WordCount` to a float to obtain a float when we divide by the reading speed. Then round up to the nearest integer. diff --git a/docs/content/en/methods/page/Ref.md b/docs/content/en/methods/page/Ref.md new file mode 100644 index 000000000..e3c5569a4 --- /dev/null +++ b/docs/content/en/methods/page/Ref.md @@ -0,0 +1,44 @@ +--- +title: Ref +description: Returns the absolute URL of the page with the given path, language, and output format. +categories: [] +keywords: [] +action: + related: + - methods/page/RelRef + - functions/urls/RelRef + - functions/urls/Ref + returnType: string + signatures: [PAGE.Ref OPTIONS] +--- + +The map of option contains: + +path +: (`string`) The path to the page, relative to the content directory. Required. + +lang +: (`string`) The language (site) to search for the page. Default is the current language. Optional. + +outputFormat +: (`string`) The output format to search for the page. Default is the current output format. Optional. + +The examples below show the rendered output when visiting a page on the English language version of the site: + +```go-html-template +{{ $opts := dict "path" "/books/book-1" }} +{{ .Ref $opts }} → https://example.org/en/books/book-1/ + +{{ $opts := dict "path" "/books/book-1" "lang" "de" }} +{{ .Ref $opts }} → https://example.org/de/books/book-1/ + +{{ $opts := dict "path" "/books/book-1" "lang" "de" "outputFormat" "json" }} +{{ .Ref $opts }} → https://example.org/de/books/book-1/index.json +``` + +By default, Hugo will throw an error and fail the build if it cannot resolve the path. You can change this to a warning in your site configuration, and specify a URL to return when the path cannot be resolved. + +{{< code-toggle file=hugo >}} +refLinksErrorLevel = 'warning' +refLinksNotFoundURL = '/some/other/url' +{{< /code-toggle >}} diff --git a/docs/content/en/methods/page/RegularPages.md b/docs/content/en/methods/page/RegularPages.md new file mode 100644 index 000000000..b0ca7b1e1 --- /dev/null +++ b/docs/content/en/methods/page/RegularPages.md @@ -0,0 +1,87 @@ +--- +title: RegularPages +description: Returns a collection of regular pages within the current section. +categories: [] +keywords: [] +action: + related: + - methods/page/Pages + - methods/page/RegularPagesRecursive + returnType: page.Pages + signatures: [PAGE.RegularPages] +--- + +The `RegularPages` method on a `Page` object is available to these [page kinds]: `home`, `section`, `taxonomy`, and `term`. The templates for these page kinds receive a page [collection] in [context]. + +Range through the page collection in your template: + +```go-html-template +{{ range .RegularPages.ByTitle }} + <h2><a href="{{ .RelPermalink }}">{{ .Title }}</a></h2> +{{ end }} +``` + +Consider this content structure: + +```text +content/ +├── lessons/ +│ ├── lesson-1/ +│ │ ├── _index.md +│ │ ├── part-1.md +│ │ └── part-2.md +│ ├── lesson-2/ +│ │ ├── resources/ +│ │ │ ├── task-list.md +│ │ │ └── worksheet.md +│ │ ├── _index.md +│ │ ├── part-1.md +│ │ └── part-2.md +│ ├── _index.md +│ ├── grading-policy.md +│ └── lesson-plan.md +├── _index.md +├── contact.md +└── legal.md +``` + +When rendering the home page, the `RegularPages` method returns: + + contact.md + legal.md + +When rendering the lessons page, the `RegularPages` method returns: + + lessons/grading-policy.md + lessons/lesson-plan.md + +When rendering lesson-1, the `RegularPages` method returns: + + lessons/lesson-1/part-1.md + lessons/lesson-1/part-2.md + +When rendering lesson-2, the `RegularPages` method returns: + + lessons/lesson-2/part-1.md + lessons/lesson-2/part-2.md + lessons/lesson-2/resources/task-list.md + lessons/lesson-2/resources/worksheet.md + +In the last example, the collection includes pages in the resources subdirectory. That directory is not a [section]---it does not contain an _index.md file. Its contents are part of the lesson-2 section. + +{{% note %}} +When used with the `Site` object, the `RegularPages` method recursively returns all regular pages within the site. See [details]. + +[details]: /methods/site/regularpages +{{% /note %}} + +```go-html-template +{{ range .Site.RegularPages.ByTitle }} + <h2><a href="{{ .RelPermalink }}">{{ .Title }}</a></h2> +{{ end }} +``` + +[collection]: /getting-started/glossary/#collection +[context]: /getting-started/glossary/#context +[page kinds]: /getting-started/glossary/#page-kind +[section]: /getting-started/glossary/#section diff --git a/docs/content/en/methods/page/RegularPagesRecursive.md b/docs/content/en/methods/page/RegularPagesRecursive.md new file mode 100644 index 000000000..3dac8c85e --- /dev/null +++ b/docs/content/en/methods/page/RegularPagesRecursive.md @@ -0,0 +1,90 @@ +--- +title: RegularPagesRecursive +description: Returns a collection of regular pages within the current section, and regular pages within all descendant sections. +categories: [] +keywords: [] +action: + related: + - methods/page/Pages + - methods/page/RegularPages + returnType: page.Pages + signatures: [PAGE.RegularPagesRecursive] +--- + +The `RegularPagesRecursive` method on a `Page` object is available to these [page kinds]: `home`, `section`, `taxonomy`, and `term`. The templates for these page kinds receive a page [collection] in [context]. + +Range through the page collection in your template: + +```go-html-template +{{ range .RegularPagesRecursive.ByTitle }} + <h2><a href="{{ .RelPermalink }}">{{ .Title }}</a></h2> +{{ end }} +``` + +Consider this content structure: + +```text +content/ +├── lessons/ +│ ├── lesson-1/ +│ │ ├── _index.md +│ │ ├── part-1.md +│ │ └── part-2.md +│ ├── lesson-2/ +│ │ ├── resources/ +│ │ │ ├── task-list.md +│ │ │ └── worksheet.md +│ │ ├── _index.md +│ │ ├── part-1.md +│ │ └── part-2.md +│ ├── _index.md +│ ├── grading-policy.md +│ └── lesson-plan.md +├── _index.md +├── contact.md +└── legal.md +``` + +When rendering the home page, the `RegularPagesRecursive` method returns: + + contact.md + lessons/grading-policy.md + legal.md + lessons/lesson-plan.md + lessons/lesson-2/part-1.md + lessons/lesson-1/part-1.md + lessons/lesson-2/part-2.md + lessons/lesson-1/part-2.md + lessons/lesson-2/resources/task-list.md + lessons/lesson-2/resources/worksheet.md + +When rendering the lessons page, the `RegularPagesRecursive` method returns: + + lessons/grading-policy.md + lessons/lesson-plan.md + lessons/lesson-2/part-1.md + lessons/lesson-1/part-1.md + lessons/lesson-2/part-2.md + lessons/lesson-1/part-2.md + lessons/lesson-2/resources/task-list.md + lessons/lesson-2/resources/worksheet.md + +When rendering lesson-1, the `RegularPagesRecursive` method returns: + + lessons/lesson-1/part-1.md + lessons/lesson-1/part-2.md + +When rendering lesson-2, the `RegularPagesRecursive` method returns: + + lessons/lesson-2/part-1.md + lessons/lesson-2/part-2.md + lessons/lesson-2/resources/task-list.md + lessons/lesson-2/resources/worksheet.md + +{{% note %}} +The `RegularPagesRecursive` method in not available on a `Site` object. +{{% /note %}} + +[collection]: /getting-started/glossary/#collection +[context]: /getting-started/glossary/#context +[page kinds]: /getting-started/glossary/#page-kind diff --git a/docs/content/en/methods/page/RelPermalink.md b/docs/content/en/methods/page/RelPermalink.md new file mode 100644 index 000000000..817e3c862 --- /dev/null +++ b/docs/content/en/methods/page/RelPermalink.md @@ -0,0 +1,25 @@ +--- +title: RelPermalink +description: Returns the relative permalink of the given page. +categories: [] +keywords: [] +action: + related: + - methods/page/Permalink + returnType: string + signatures: [PAGE.RelPermalink] +--- + +Site configuration: + +{{< code-toggle file=hugo >}} +title = 'Documentation' +baseURL = 'https://example.org/docs/' +{{< /code-toggle >}} + +Template: + +```go-html-template +{{ $page := .Site.GetPage "/about" }} +{{ $page.RelPermalink }} → /docs/about/ +``` diff --git a/docs/content/en/methods/page/RelRef.md b/docs/content/en/methods/page/RelRef.md new file mode 100644 index 000000000..4c635e0e2 --- /dev/null +++ b/docs/content/en/methods/page/RelRef.md @@ -0,0 +1,44 @@ +--- +title: RelRef +description: Returns the relative URL of the page with the given path, language, and output format. +categories: [] +keywords: [] +action: + related: + - methods/page/Ref + - functions/urls/Ref + - functions/urls/RelRef + returnType: string + signatures: [PAGE.RelRef OPTIONS] +--- + +The map of option contains: + +path +: (`string`) The path to the page, relative to the content directory. Required. + +lang +: (`string`) The language (site) to search for the page. Default is the current language. Optional. + +outputFormat +: (`string`) The output format to search for the page. Default is the current output format. Optional. + +The examples below show the rendered output when visiting a page on the English language version of the site: + +```go-html-template +{{ $opts := dict "path" "/books/book-1" }} +{{ .RelRef $opts }} → /en/books/book-1/ + +{{ $opts := dict "path" "/books/book-1" "lang" "de" }} +{{ .RelRef $opts }} → /de/books/book-1/ + +{{ $opts := dict "path" "/books/book-1" "lang" "de" "outputFormat" "json" }} +{{ .RelRef $opts }} → /de/books/book-1/index.json +``` + +By default, Hugo will throw an error and fail the build if it cannot resolve the path. You can change this to a warning in your site configuration, and specify a URL to return when the path cannot be resolved. + +{{< code-toggle file=hugo >}} +refLinksErrorLevel = 'warning' +refLinksNotFoundURL = '/some/other/url' +{{< /code-toggle >}} diff --git a/docs/content/en/methods/page/Render.md b/docs/content/en/methods/page/Render.md new file mode 100644 index 000000000..bc3f58352 --- /dev/null +++ b/docs/content/en/methods/page/Render.md @@ -0,0 +1,75 @@ +--- +title: Render +description: Renders the given template with the given page as context. +categories: [] +keywords: [] +action: + related: + - functions/partials/Include + - functions/partials/IncludeCached + returnType: template.HTML + signatures: [PAGE.Render NAME] +aliases: [/functions/render] +--- + +Typically used when ranging over a page collection, the `Render` method on a `Page` object renders the given template, passing the given page as context. + +```go-html-template +{{ range site.RegularPages }} + <h2><a href="{{ .RelPermalink }}">{{ .LinkTitle }}</a></h2> + {{ .Render "summary" }} +{{ end }} +``` + +In the example above, note that the template ("summary") is identified by its file name without directory or extension. + +Although similar to the [`partial`] function, there are key differences. + +`Render` method|`partial` function| +:--|:-- +The `Page` object is automatically passed to the given template. You cannot pass additional context.| You must specify the context, allowing you to pass a combination of objects, slices, maps, and scalars. +The path to the template is determined by the [content type].|You must specify the path to the template, relative to the layouts/partials directory. + +Consider this layout structure: + +```text +layouts/ +├── _default/ +│ ├── baseof.html +│ ├── home.html +│ ├── li.html <-- used for other content types +│ ├── list.html +│ ├── single.html +│ └── summary.html +└── books/ + ├── li.html <-- used when content type is "books" + └── summary.html +``` + +And this template: + +```go-html-template +<ul> + {{ range site.RegularPages.ByDate }} + {{ .Render "li" }} + {{ end }} +</ul> +``` + +When rendering content of type "books" the `Render` method calls: + +```text +layouts/books/li.html +``` + +For all other content types the `Render` methods calls: + +```text +layouts/_default/li.html +``` + +See [content views] for more examples. + +[content views]: /templates/views +[`partial`]: /functions/partials/include +[content type]: /getting-started/glossary/#content-type diff --git a/docs/content/en/methods/page/RenderShortcodes.md b/docs/content/en/methods/page/RenderShortcodes.md new file mode 100644 index 000000000..4636bf8f5 --- /dev/null +++ b/docs/content/en/methods/page/RenderShortcodes.md @@ -0,0 +1,78 @@ +--- +title: RenderShortcodes +description: Renders all shortcodes in the content of the given page, preserving the surrounding markup. +categories: [] +keywords: [] +action: + related: + - methods/page/RenderString + - methods/page/Content + - methods/page/RawContent + - methods/page/Plain + - methods/page/PlainWords + returnType: template.HTML + signatures: [PAGE.RenderShortcodes] +toc: true +--- + +{{< new-in 0.117.0 >}} + +Use this method in shortcode templates to compose a page from multiple content files, while preserving a global context for footnotes and the table of contents. + +For example: + +{{< code file=layouts/shortcodes/include.html >}} +{{ $p := site.GetPage (.Get 0) }} +{{ $p.RenderShortcodes }} +{{< /code >}} + +Then in your markdown: + +{{< code file=content/about.md lang=md >}} +{{%/* include "/snippets/services.md" */%}} +{{%/* include "/snippets/values.md" */%}} +{{%/* include "/snippets/leadership.md" */%}} +{{< /code >}} + +Each of the included markdown files can contain calls to other shortcodes. + +## Shortcode notation + +In the example above it's important to understand the difference between the two delimiters used when calling a shortcode: + +- `{{</* myshortcode */>}}` tells Hugo that the rendered shortcode does not need further processing. For example, the shortcode content is HTML. +- `{{%/* myshortcode */%}}` tells Hugo that the rendered shortcode needs further processing. For example, the shortcode content is markdown. + +Use the latter for the "include" shortcode described above. + +## Further explanation + +To understand what is returned by the `RenderShortcodes` method, consider this content file + +{{< code file=content/about.md lang=text >}} ++++ +title = 'About' +date = 2023-10-07T12:28:33-07:00 ++++ + +{{</* ref "privacy" */>}} + +An *emphasized* word. +{{< /code >}} + +With this template code: + +```go-html-template +{{ $p := site.GetPage "/about" }} +{{ $p.RenderShortcodes }} +``` + +Hugo renders this:; + +```html +https://example.org/privacy/ + +An *emphasized* word. +``` + +Note that the shortcode within the content file was rendered, but the surrounding markdown was preserved. diff --git a/docs/content/en/methods/page/RenderString.md b/docs/content/en/methods/page/RenderString.md new file mode 100644 index 000000000..5782cd2b1 --- /dev/null +++ b/docs/content/en/methods/page/RenderString.md @@ -0,0 +1,51 @@ +--- +title: RenderString +description: Renders markup to HTML. +categories: [] +keywords: [] +action: + related: + - methods/page/RenderShortcodes + - functions/transform/Markdownify + returnType: template.HTML + signatures: ['PAGE.RenderString [OPTIONS] MARKUP'] +aliases: [/functions/renderstring] +--- + +```go-html-template +{{ $s := "An *emphasized* word" }} +{{ $s | .RenderString }} → An <em>emphasized</em> word +``` + +This method takes an optional map of options: + +display +: (`string`) Specify either `inline` or `block`. If `inline`, removes surrounding `p` tags from short snippets. Default is `inline`. + +markup +: (`string`) Specify a [markup identifier] for the provided markup. Default is the `markup` front matter value, falling back to the value derived from the page's file extension. + +Render with the default markup renderer: + +```go-html-template +{{ $s := "An *emphasized* word" }} +{{ $s | .RenderString }} → An <em>emphasized</em> word + +{{ $opts := dict "display" "block" }} +{{ $s | .RenderString $opts }} → <p>An <em>emphasized</em> word</p> +``` + +Render with [Pandoc]: + +```go-html-template +{{ $s := "H~2~O" }} + +{{ $opts := dict "markup" "pandoc" }} +{{ $s | .RenderString $opts }} → H<sub>2</sub>O + +{{ $opts := dict "display" "block" "markup" "pandoc" }} +{{ .RenderString $opts $s }} → <p>H<sub>2</sub>O</p> +``` + +[markup identifier]: /content-management/formats/#list-of-content-formats +[pandoc]: https://www.pandoc.org/ diff --git a/docs/content/en/methods/page/Resources.md b/docs/content/en/methods/page/Resources.md new file mode 100644 index 000000000..140b50020 --- /dev/null +++ b/docs/content/en/methods/page/Resources.md @@ -0,0 +1,85 @@ +--- +title: Resources +description: Returns a collection of page resources. +categories: [] +keywords: [] +action: + related: + - functions/resources/ByType + - functions/resources/Get + - functions/resources/GetMatch + - functions/resources/GetRemote + - functions/resources/Match + returnType: resource.Resources + signatures: [PAGE.Resources] +toc: true +--- + +The `Resources` method on a `Page` object returns a collection of page resources. A page resource is a file within a [page bundle]. + +To work with global or remote resources, see the [`resources`] functions. + +## Methods + +###### ByType + +(`resource.Resources`) Returns a collection of page resources of the given [media type], or nil if none found. The media type is typically one of `image`, `text`, `audio`, `video`, or `application`. + +```go-html-template +{{ range .Resources.ByType "image" }} + <img src="{{ .RelPermalink }}" width="{{ .Width }}" height="{{ .Height }}" alt=""> +{{ end }} +``` + +When working with global resources instead of page resources, use the [`resources.ByType`] function. + +###### Get + +(`resource.Resource`) Returns a page resource from the given path, or nil if none found. + +```go-html-template +{{ with .Resources.Get "images/a.jpg" }} + <img src="{{ .RelPermalink }}" width="{{ .Width }}" height="{{ .Height }}" alt=""> +{{ end }} +``` + +When working with global resources instead of page resources, use the [`resources.Get`] function. + +###### GetMatch + +(`resource.Resource`) Returns the first page resource from paths matching the given [glob pattern], or nil if none found. + +```go-html-template +{{ with .Resources.GetMatch "images/*.jpg" }} + <img src="{{ .RelPermalink }}" width="{{ .Width }}" height="{{ .Height }}" alt=""> +{{ end }} +``` + +When working with global resources instead of page resources, use the [`resources.GetMatch`] function. + +###### Match + +(`resource.Resources`) Returns a collection of page resources from paths matching the given [glob pattern], or nil if none found. + +```go-html-template +{{ range .Resources.Match "images/*.jpg" }} + <img src="{{ .RelPermalink }}" width="{{ .Width }}" height="{{ .Height }}" alt=""> +{{ end }} +``` + +When working with global resources instead of page resources, use the [`resources.Match`] function. + +## Pattern matching + +With the `GetMatch` and `Match` methods, Hugo determines a match using a case-insensitive [glob pattern]. + +{{% include "functions/_common/glob-patterns.md" %}} + +[`resources.ByType`]: /functions/resources/ByType +[`resources.GetMatch`]: /functions/resources/ByType +[`resources.Get`]: /functions/resources/ByType +[`resources.Match`]: /functions/resources/ByType +[`resources`]: /functions/resources +[glob pattern]: https://github.com/gobwas/glob#example +[media type]: https://en.wikipedia.org/wiki/Media_type +[page bundle]: /getting-started/glossary/#page-bundle diff --git a/docs/content/en/methods/page/Scratch.md b/docs/content/en/methods/page/Scratch.md new file mode 100644 index 000000000..f9ce7f7fb --- /dev/null +++ b/docs/content/en/methods/page/Scratch.md @@ -0,0 +1,23 @@ +--- +title: Scratch +description: Creates a "scratch pad" on the given page to store and manipulate data. +categories: [] +keywords: [] +action: + related: + - methods/page/Store + - functions/collections/NewScratch + returnType: maps.Scratch + signatures: [PAGE.Scratch] +aliases: [/extras/scratch/,/doc/scratch/,/functions/scratch] +--- + +The `Scratch` method on a `Page` object creates a [scratch pad] to store and manipulate data. To create a scratch pad that is not reset on server rebuilds, use the [`Store`] method instead. + +To create a locally scoped scratch pad that is not attached to a `Page` object, use the [`newScratch`] function. + +[`Store`]: /methods/page/store +[`newScratch`]: functions/collections/newscratch +[scratch pad]: /getting-started/glossary/#scratch-pad + +{{% include "methods/page/_common/scratch-methods.md" %}} diff --git a/docs/content/en/methods/page/Section.md b/docs/content/en/methods/page/Section.md new file mode 100644 index 000000000..30c8a9837 --- /dev/null +++ b/docs/content/en/methods/page/Section.md @@ -0,0 +1,54 @@ +--- +title: Section +description: Returns the name of the top level section in which the given page resides. +categories: [] +keywords: [] +action: + related: + - methods/page/Type + returnType: string + signatures: [PAGE.Section] +--- + +With this content structure: + +```text +content/ +├── lessons/ +│ ├── math/ +│ │ ├── _index.md +│ │ ├── lesson-1.md +│ │ └── lesson-2.md +│ └── _index.md +└── _index.md +``` + +When rendering lesson-1.md: + +```go-html-template +{{ .Section }} → lessons +``` + +In the example above "lessons" is the top level section. + +The `Section` method is often used with the [`where`] function to build a page collection. + +```go-html-template +{{ range where .Site.RegularPages "Section" "lessons" }} + <h2><a href="{{ .RelPermalink }}">{{ .LinkTitle }}</a></h2> +{{ end }} +``` + +This is similar to using the [`Type`] method with the `where` function + +```go-html-template +{{ range where .Site.RegularPages "Type" "lessons" }} + <h2><a href="{{ .RelPermalink }}">{{ .LinkTitle }}</a></h2> +{{ end }} +``` + +However, if the `type` field in front matter has been defined on one or more pages, the page collection based on `Type` will be different than the page collection based on `Section`. + + +[`where`]: /functions/collections/where +[`Type`]: /methods/page/type diff --git a/docs/content/en/methods/page/Sections.md b/docs/content/en/methods/page/Sections.md new file mode 100644 index 000000000..d64440038 --- /dev/null +++ b/docs/content/en/methods/page/Sections.md @@ -0,0 +1,69 @@ +--- +title: Sections +description: Returns a collection of section pages, one for each immediate descendant section of the given page. +categories: [] +keywords: [] +action: + related: + - methods/page/Ancestors + - methods/page/CurrentSection + - methods/page/FirstSection + - methods/page/InSection + - methods/page/IsAncestor + - methods/page/IsDescendant + - methods/page/Parent + returnType: page.Pages + signatures: [PAGE.Sections] +--- + +{{% include "methods/page/_common/definition-of-section.md" %}} + +With this content structure: + +```text +content/ +├── auctions/ +│ ├── 2023-11/ +│ │ ├── _index.md <-- front matter: weight = 202311 +│ │ ├── auction-1.md +│ │ └── auction-2.md +│ ├── 2023-12/ +│ │ ├── _index.md <-- front matter: weight = 202312 +│ │ ├── auction-3.md +│ │ └── auction-4.md +│ ├── _index.md <-- front matter: weight = 30 +│ ├── bidding.md +│ └── payment.md +├── books/ +│ ├── _index.md <-- front matter: weight = 10 +│ ├── book-1.md +│ └── book-2.md +├── films/ +│ ├── _index.md <-- front matter: weight = 20 +│ ├── film-1.md +│ └── film-2.md +└── _index.md +``` + +And this template: + +```go-html-template +{{ range .Sections.ByWeight }} + <h2><a href="{{ .RelPermalink }}">{{ .LinkTitle }}</a></h2> +{{ end }} +``` + +On the home page, Hugo renders: + +```html +<h2><a href="/films/">Films</a></h2> +<h2><a href="/books/">Books</a></h2> +<h2><a href="/auctions/">Auctions</a></h2> +``` + +On the auctions page, Hugo renders: + +```html +<h2><a href="/auctions/2023-11/">Auctions in November 2023</a></h2> +<h2><a href="/auctions/2023-12/">Auctions in December 2023</a></h2> +``` diff --git a/docs/content/en/methods/page/Site.md b/docs/content/en/methods/page/Site.md new file mode 100644 index 000000000..34748facd --- /dev/null +++ b/docs/content/en/methods/page/Site.md @@ -0,0 +1,19 @@ +--- +title: Site +description: Returns the Site object. +categories: [] +keywords: [] +action: + related: + - methods/page/Sites + returnType: page.siteWrapper + signatures: [PAGE.Site] +--- + +See [Site methods]. + +[Site methods]: /methods/site + +```go-html-template +{{ .Site.Title }} +``` diff --git a/docs/content/en/methods/page/Sitemap.md b/docs/content/en/methods/page/Sitemap.md new file mode 100644 index 000000000..08ff3f5d0 --- /dev/null +++ b/docs/content/en/methods/page/Sitemap.md @@ -0,0 +1,70 @@ +--- +title: Sitemap +description: Returns the sitemap settings for the given page as defined in front matter, falling back to the sitemap settings as defined in the site configuration. +categories: [] +keywords: [] +action: + related: [] + returnType: config.SitemapConfig + signatures: [PAGE.Sitemap] +toc: true +--- + +Access to the `Sitemap` method on a `Page` object is restricted to [sitemap templates]. + +## Methods + +ChangeFreq +: (`string`) How frequently a page is likely to change. Valid values are `always`, `hourly`, `daily`, `weekly`, `monthly`, `yearly`, and `never`. Default is "" (change frequency omitted from rendered sitemap). + +```go-html-template +{{ .Sitemap.ChangeFreq }} +``` + +Priority +: (`float`) The priority of a page relative to any other page on the site. Valid values range from 0.0 to 1.0. Default is -1 (priority omitted from rendered sitemap). + +```go-html-template +{{ .Sitemap.Priority }} +``` + +## Example + +With this site configuration: + +{{< code-toggle file=hugo >}} +[sitemap] +changeFreq = 'monthly' +{{< /code-toggle >}} + +And this content: + +{{< code-toggle file=content/news.md fm=true >}} +title = 'News' +[sitemap] +changeFreq = 'hourly' +{{< /code-toggle >}} + +And this simplistic sitemap template: + +{{< code file=layouts/_default/sitemap.xml >}} +{{ printf "<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"yes\"?>" | safeHTML }} +<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" + xmlns:xhtml="http://www.w3.org/1999/xhtml"> + {{ range .Pages }} + <url> + <loc>{{ .Permalink }}</loc> + {{ if not .Lastmod.IsZero }} + <lastmod>{{ .Lastmod.Format "2006-01-02T15:04:05-07:00" | safeHTML }}</lastmod> + {{ end }} + {{ with .Sitemap.ChangeFreq }} + <changefreq>{{ . }}</changefreq> + {{ end }} + </url> + {{ end }} +</urlset> +{{< /code >}} + +The change frequency will be `hourly` for the news page, and `monthly` for other pages. + +[sitemap templates]: /templates/sitemap-template/ diff --git a/docs/content/en/methods/page/Sites.md b/docs/content/en/methods/page/Sites.md new file mode 100644 index 000000000..1fbdfcdcd --- /dev/null +++ b/docs/content/en/methods/page/Sites.md @@ -0,0 +1,69 @@ +--- +title: Sites +description: Returns a collection of all Site objects, one for each language, ordered by language weight. +categories: [] +keywords: [] +action: + related: + - methods/page/Site + returnType: page.Sites + signatures: [PAGE.Sites] +--- + +This is a convenience method to access `.Site.Sites`. + +With this site configuration: + +{{< code-toggle file=hugo >}} +defaultContentLanguage = 'de' +defaultContentLanguageInSubdir = false + +[languages.de] +languageCode = 'de-DE' +languageDirection = 'ltr' +languageName = 'Deutsch' +title = 'Projekt Dokumentation' +weight = 1 + +[languages.en] +languageCode = 'en-US' +languageDirection = 'ltr' +languageName = 'English' +title = 'Project Documentation' +weight = 2 +{{< /code-toggle >}} + +This template: + +```go-html-template +<ul> + {{ range .Sites }} + <li><a href="{{ .Home.Permalink }}">{{ .Title }}</a></li> + {{ end }} +</ul> +``` + +Produces a list of links to each home page: + +```html +<ul> + <li><a href="https://example.org/de/">Projekt Dokumentation</a></li> + <li><a href="https://example.org/en/">Project Documentation</a></li> +</ul> +``` + +To render a link to home page of the primary (first) language: + +```go-html-template +{{ with .Sites.First }} + <a href="{{ .Home.Permalink }}">{{ .Title }}</a> +{{ end }} +``` + +This is equivalent to: + +```go-html-template +{{ with index .Sites 0 }} + <a href="{{ .Home.Permalink }}">{{ .Title }}</a> +{{ end }} +``` diff --git a/docs/content/en/methods/page/Slug.md b/docs/content/en/methods/page/Slug.md new file mode 100644 index 000000000..9fdb09b57 --- /dev/null +++ b/docs/content/en/methods/page/Slug.md @@ -0,0 +1,25 @@ +--- +title: Slug +description: Returns the URL slug of the given page as defined in front matter. +categories: [] +keywords: [] +action: + related: [] + returnType: string + signatures: [PAGE.Slug] +--- + +{{< code-toggle file=content/recipes/spicy-tuna-hand-rolls.md fm=true >}} +title = 'How to make spicy tuna hand rolls' +slug = 'sushi' +{{< /code-toggle >}} + +This page will be served from: + + https://example.org/recipes/sushi + +To get the slug value within a template: + +```go-html-template +{{ .Slug }} → sushi +``` diff --git a/docs/content/en/methods/page/Store.md b/docs/content/en/methods/page/Store.md new file mode 100644 index 000000000..8bc16034b --- /dev/null +++ b/docs/content/en/methods/page/Store.md @@ -0,0 +1,104 @@ +--- +title: Store +description: Creates a persistent "scratch pad" on the given page to store and manipulate data. +categories: [] +keywords: [] +action: + related: + - methods/page/scratch + - functions/collections/NewScratch + returnType: maps.Scratch + signatures: [PAGE.Store] +aliases: [/functions/store] +--- + +The `Store` method on a `Page` object creates a persistent [scratch pad] to store and manipulate data. In contrast with the [`Scratch`] method, the scratch pad created by the `Store` method is not reset on server rebuilds. + +To create a locally scoped scratch pad that is not attached to a `Page` object, use the [`newScratch`] function. + +[`Scratch`]: /methods/page/scratch +[`newScratch`]: functions/collections/newscratch +[scratch pad]: /getting-started/glossary/#scratch-pad + +## Methods + +###### Set + +Sets the value of a given key. + +```go-html-template +{{ .Store.Set "greeting" "Hello" }} +``` + +###### Get + +Gets the value of a given key. + +```go-html-template +{{ .Store.Set "greeting" "Hello" }} +{{ .Store.Get "greeting" }} → Hello +``` + +###### Add + +Adds a given value to existing value(s) of the given key. + +For single values, `Add` accepts values that support Go's `+` operator. If the first `Add` for a key is an array or slice, the following adds will be appended to that list. + +```go-html-template +{{ .Store.Set "greeting" "Hello" }} +{{ .Store.Add "greeting" "Welcome" }} +{{ .Store.Get "greeting" }} → HelloWelcome +``` + +```go-html-template +{{ .Store.Set "total" 3 }} +{{ .Store.Add "total" 7 }} +{{ .Store.Get "total" }} → 10 +``` + +```go-html-template +{{ .Store.Set "greetings" (slice "Hello") }} +{{ .Store.Add "greetings" (slice "Welcome" "Cheers") }} +{{ .Store.Get "greetings" }} → [Hello Welcome Cheers] +``` + +###### SetInMap + +Takes a `key`, `mapKey` and `value` and adds a map of `mapKey` and `value` to the given `key`. + +```go-html-template +{{ .Store.SetInMap "greetings" "english" "Hello" }} +{{ .Store.SetInMap "greetings" "french" "Bonjour" }} +{{ .Store.Get "greetings" }} → map[english:Hello french:Bonjour] +``` + +###### DeleteInMap + +Takes a `key` and `mapKey` and removes the map of `mapKey` from the given `key`. + +```go-html-template +{{ .Store.SetInMap "greetings" "english" "Hello" }} +{{ .Store.SetInMap "greetings" "french" "Bonjour" }} +{{ .Store.DeleteInMap "greetings" "english" }} +{{ .Store.Get "greetings" }} → map[french:Bonjour] +``` + +###### GetSortedMapValues + +Returns an array of values from `key` sorted by `mapKey`. + +```go-html-template +{{ .Store.SetInMap "greetings" "english" "Hello" }} +{{ .Store.SetInMap "greetings" "french" "Bonjour" }} +{{ .Store.GetSortedMapValues "greetings" }} → [Hello Bonjour] +``` + +###### Delete + +Removes the given key. + +```go-html-template +{{ .Store.Set "greeting" "Hello" }} +{{ .Store.Delete "greeting" }} +``` diff --git a/docs/content/en/methods/page/Summary.md b/docs/content/en/methods/page/Summary.md new file mode 100644 index 000000000..37ce86589 --- /dev/null +++ b/docs/content/en/methods/page/Summary.md @@ -0,0 +1,29 @@ +--- +title: Summary +description: Returns the content summary of the given page. +categories: [] +keywords: [] +action: + related: + - methods/page/Truncated + - methods/page/Description + returnType: template.HTML + signatures: [PAGE.Summary] +--- + +There are three ways to define the [content summary]: + +1. Let Hugo create the summary based on the first 70 words. You can change the number of words by setting the `summaryLength` in your site configuration. +2. Manually split the content with a `<--more-->` tag in markdown. Everything before the tag is included in the summary. +3. Create a `summary` field in front matter. + +To list the pages in a section with a summary beneath each link: + +```go-html-template +{{ range .Pages }} + <h2><a href="{{ .RelPermalink }}">{{ .LinkTitle }}</a></h2> + {{ .Summary }} +{{ end }} +``` + +[content summary]: /content-management/summaries diff --git a/docs/content/en/methods/page/TableOfContents.md b/docs/content/en/methods/page/TableOfContents.md new file mode 100644 index 000000000..2ab182e8c --- /dev/null +++ b/docs/content/en/methods/page/TableOfContents.md @@ -0,0 +1,47 @@ +--- +title: TableOfContents +description: Returns a table of contents for the given page. +categories: [] +keywords: [] +action: + related: + - methods/page/Fragments + returnType: template.HTML + signatures: [PAGE.TableOfContents] +--- + +The `TableOfContents` method on a `Page` object returns an ordered or unordered list of the markdown [ATX] and [setext] headings within the page content. + +[atx]: https://spec.commonmark.org/0.30/#atx-headings +[setext]: https://spec.commonmark.org/0.30/#setext-headings + +This template code: + +```go-html-template +{{ .TableOfContents }} +``` + +Produces this HTML: + +```html +<nav id="TableOfContents"> + <ul> + <li><a href="#section-1">Section 1</a> + <ul> + <li><a href="#section-11">Section 1.1</a></li> + <li><a href="#section-12">Section 1.2</a></li> + </ul> + </li> + <li><a href="#section-2">Section 2</a></li> + </ul> +</nav> +``` + +By default, the `TableOfContents` method returns an unordered list of level 2 and level 3 headings. You can adjust this in your site configuration: + +{{< code-toggle file=hugo >}} +[markup.tableOfContents] +endLevel = 3 +ordered = false +startLevel = 2 +{{< /code-toggle >}} diff --git a/docs/content/en/methods/page/Title.md b/docs/content/en/methods/page/Title.md new file mode 100644 index 000000000..52e46ff44 --- /dev/null +++ b/docs/content/en/methods/page/Title.md @@ -0,0 +1,38 @@ +--- +title: Title +description: Returns the title of the given page. +categories: [] +keywords: [] +action: + related: + - methods/page/LinkTitle + returnType: string + signatures: [PAGE.Title] +--- + +With pages backed by a file, the `Title` method returns the `title` field as defined in front matter: + +{{< code-toggle file=content/about.md fm=true >}} +title = 'About us' +{{< /code-toggle >}} + +```go-html-template +{{ .Title }} → About us +``` + +With section pages not backed by a file, the `Title` method returns the section name, pluralized and converted to title case. + +To disable [pluralization]: + +{{< code-toggle file=hugo >}} +pluralizeListTitles = false +{{< /code-toggle >}} + +To change the [title case style], specify one of `ap`, `chicago`, `go`, `firstupper`, or `none`: + +{{< code-toggle file=hugo >}} +titleCaseStyle = "ap" +{{< /code-toggle >}} + +[pluralization]: /functions/inflect/pluralize +[title case style]: /getting-started/configuration/#configure-title-case diff --git a/docs/content/en/methods/page/TranslationKey.md b/docs/content/en/methods/page/TranslationKey.md new file mode 100644 index 000000000..a9e4b97e9 --- /dev/null +++ b/docs/content/en/methods/page/TranslationKey.md @@ -0,0 +1,74 @@ +--- +title: TranslationKey +description: Returns the translation key of the given page. +categories: [] +keywords: [] +action: + related: + - methods/page/Translations + - methods/page/AllTranslations + - methods/page/IsTranslated + returnType: string + signatures: [PAGE.TranslationKey] +--- + +The translation key creates a relationship between all translations of a given page. The translation key is derived from the file path, or from the `translationKey` parameter if defined in front matter. + +With this site configuration: + +{{< code-toggle file=hugo >}} +defaultContentLanguage = 'en' + +[languages.en] +contentDir = 'content/en' +languageCode = 'en-US' +languageName = 'English' +weight = 1 + +[languages.de] +contentDir = 'content/de' +languageCode = 'de-DE' +languageName = 'Deutsch' +weight = 2 +{{< /code-toggle >}} + +And this content: + +```text +content/ +├── de/ +│ ├── books/ +│ │ ├── buch-1.md +│ │ └── book-2.md +│ └── _index.md +├── en/ +│ ├── books/ +│ │ ├── book-1.md +│ │ └── book-2.md +│ └── _index.md +└── _index.md +``` + +And this front matter: + +{{< code-toggle file=content/en/books/book-1.md fm=true >}} +title = 'Book 1' +translationKey = 'foo' +{{< /code-toggle >}} + +{{< code-toggle file=content/de/books/buch-1.md fm=true >}} +title = 'Buch 1' +translationKey = 'foo' +{{< /code-toggle >}} + +When rendering either either of the pages above: + +```go-html-template +{{ .TranslationKey }} → page/foo +``` + +If the front matter of Book 2, in both languages, does not include a translation key: + +```go-html-template +{{ .TranslationKey }} → page/books/book-2 +``` diff --git a/docs/content/en/methods/page/Translations.md b/docs/content/en/methods/page/Translations.md new file mode 100644 index 000000000..1ed256630 --- /dev/null +++ b/docs/content/en/methods/page/Translations.md @@ -0,0 +1,89 @@ +--- +title: Translations +description: Returns all translation of the given page, excluding the current language. +categories: [] +keywords: [] +action: + related: + - methods/page/AllTranslations + - methods/page/IsTranslated + - methods/page/TranslationKey + returnType: page.Pages + signatures: [PAGE.Translations] +--- + +With this site configuration: + +{{< code-toggle file=hugo >}} +defaultContentLanguage = 'en' + +[languages.en] +contentDir = 'content/en' +languageCode = 'en-US' +languageName = 'English' +weight = 1 + +[languages.de] +contentDir = 'content/de' +languageCode = 'de-DE' +languageName = 'Deutsch' +weight = 2 + +[languages.fr] +contentDir = 'content/fr' +languageCode = 'fr-FR' +languageName = 'Français' +weight = 3 +{{< /code-toggle >}} + +And this content: + +```text +content/ +├── de/ +│ ├── books/ +│ │ ├── book-1.md +│ │ └── book-2.md +│ └── _index.md +├── en/ +│ ├── books/ +│ │ ├── book-1.md +│ │ └── book-2.md +│ └── _index.md +├── fr/ +│ ├── books/ +│ │ └── book-1.md +│ └── _index.md +└── _index.md +``` + +And this template: + +```go-html-template +{{ with .Translations }} + <ul> + {{ range . }} + {{ $langName := or .Language.LanguageName .Language.Lang }} + {{ $langCode := or .Language.LanguageCode .Language.Lang }} + <li><a href="{{ .RelPermalink }}" hreflang="{{ $langCode }}">{{ .LinkTitle }} ({{ $langName }})</a></li> + {{ end }} + </ul> +{{ end }} +``` + +Hugo will render this list on the "Book 1" page of the English site: + +```html +<ul> + <li><a href="/de/books/book-1/" hreflang="de-DE">Book 1 (Deutsch)</a></li> + <li><a href="/fr/books/book-1/" hreflang="fr-FR">Book 1 (Français)</a></li> +</ul> +``` + +Hugo will render this list on the "Book 2" page of the English site: + +```html +<ul> + <li><a href="/de/books/book-1/" hreflang="de-DE">Book 1 (Deutsch)</a></li> +</ul> +``` diff --git a/docs/content/en/methods/page/Truncated.md b/docs/content/en/methods/page/Truncated.md new file mode 100644 index 000000000..e6051f0cd --- /dev/null +++ b/docs/content/en/methods/page/Truncated.md @@ -0,0 +1,35 @@ +--- +title: Truncated +description: Reports whether the content length exceeds the summary length. +categories: [] +keywords: [] +action: + related: + - methods/page/Summary + returnType: bool + signatures: [PAGE.Truncated] +--- + +There are three ways to define the [content summary]: + +1. Let Hugo create the summary based on the first 70 words. You can change the number of words by setting the `summaryLength` in your site configuration. +2. Manually split the content with a `<--more-->` tag in markdown. Everything before the tag is included in the summary. +3. Create a `summary` field in front matter. + +{{% note %}} +The `Truncated` method returns `false` if you define the summary in front matter. +{{% /note %}} + +The `Truncated` method returns `true` if the content length exceeds the summary length. This is useful for rendering a "read more" link: + +```go-html-template +{{ range .Pages }} + <h2><a href="{{ .RelPermalink }}">{{ .LinkTitle }}</a></h2> + {{ .Summary }} + {{ if .Truncated }} + <a href="{{ .RelPermalink }}">Read more...</a> + {{ end }} +{{ end }} +``` + +[content summary]: /content-management/summaries diff --git a/docs/content/en/methods/page/Type.md b/docs/content/en/methods/page/Type.md new file mode 100644 index 000000000..b7c62372b --- /dev/null +++ b/docs/content/en/methods/page/Type.md @@ -0,0 +1,56 @@ +--- +title: Type +description: Returns the content type of the given page. +categories: [] +keywords: [] +action: + related: + - methods/page/Kind + - methods/page/Layout + - methods/page/Type + returnType: string + signatures: [PAGE.Type] +--- + +The `Type` method on a `Page` object returns the [content type] of the given page. The content type is defined by the `type` field in front matter, or inferred from the top-level directory name if the `type` field in front matter is not defined. + +With this content structure: + +```text +content/ +├── auction/ +│ ├── _index.md +│ ├── item-1.md +│ └── item-2.md <-- front matter: type = books +├── books/ +│ ├── _index.md +│ ├── book-1.md +│ └── book-2.md +├── films/ +│ ├── _index.md +│ ├── film-1.md +│ └── film-2.md +└── _index.md +``` + +To list the books, regardless of [section]: + +```go-html-template +{{ range where .Site.RegularPages.ByTitle "Type" "books" }} + <h2><a href="{{ .RelPermalink }}">{{ .Title }}</a></h2> +{{ end }} +``` + +Hugo renders this to; + +```html +<h2><a href="/books/book-1/">Book 1</a></h2> +<h2><a href="/books/book-2/">Book 2</a></h2> +<h2><a href="/auction/item-2/">Item 2</a></h2> +``` + +The `type` field in front matter is also useful for targeting a template. See [details]. + +[content type]: /getting-started/glossary/#content-type +[details]: /templates/lookup-order/#target-a-template +[section]: /getting-started/glossary/#section diff --git a/docs/content/en/methods/page/Weight.md b/docs/content/en/methods/page/Weight.md new file mode 100644 index 000000000..75c75db86 --- /dev/null +++ b/docs/content/en/methods/page/Weight.md @@ -0,0 +1,27 @@ +--- +title: Weight +description: Returns the weight of the given page as defined in front matter. +categories: [] +keywords: [] +action: + related: [] + returnType: int + signatures: [PAGE.Weight] +--- + +The `Weight` method on a `Page` object returns the [weight] of the given page as defined in front matter. + +[weight]: /getting-started/glossary/#weight + +{{< code-toggle file=content/recipes/sushi.md fm=true >}} +title = 'How to make spicy tuna hand rolls' +weight = 42 +{{< /code-toggle >}} + +Page weight controls the position of a page within a collection that is sorted by weight. Assign weights using non-zero integers. Lighter items float to the top, while heavier items sink to the bottom. Unweighted or zero-weighted elements are placed at the end of the collection. + +Although rarely used within a template, you can access the value with: + +```go-html-template +{{ .Weight }} → 42 +``` diff --git a/docs/content/en/methods/page/WordCount.md b/docs/content/en/methods/page/WordCount.md new file mode 100644 index 000000000..bb1fdcf94 --- /dev/null +++ b/docs/content/en/methods/page/WordCount.md @@ -0,0 +1,20 @@ +--- +title: WordCount +description: Returns the number of words in the content of the given page. +categories: [] +keywords: [] +action: + related: + - methods/page/FuzzyWordCount + - methods/page/ReadingTime + returnType: int + signatures: [PAGE.WordCount] +--- + +```go-html-template +{{ .WordCount }} → 103 +``` + +To round up to nearest multiple of 100, use the [`FuzzyWordCount`] method. + +[`FuzzyWordCount`]: /methods/page/fuzzywordcount diff --git a/docs/content/en/methods/page/_common/_index.md b/docs/content/en/methods/page/_common/_index.md new file mode 100644 index 000000000..47d5812fb --- /dev/null +++ b/docs/content/en/methods/page/_common/_index.md @@ -0,0 +1,13 @@ +--- +cascade: + _build: + list: never + publishResources: false + render: never +--- + +<!-- +Files within this headless branch bundle are markdown snippets. Each file must contain front matter delimiters, though front matter fields are not required. + +Include the rendered content using the "include" shortcode. +--> diff --git a/docs/content/en/methods/page/_common/definition-of-section.md b/docs/content/en/methods/page/_common/definition-of-section.md new file mode 100644 index 000000000..7dc600789 --- /dev/null +++ b/docs/content/en/methods/page/_common/definition-of-section.md @@ -0,0 +1,5 @@ +--- +# Do not remove front matter. +--- + +A _section_ is a top-level content directory, or any content directory with an _index.md file. diff --git a/docs/content/en/methods/page/_common/output-format-definition.md b/docs/content/en/methods/page/_common/output-format-definition.md new file mode 100644 index 000000000..25944464a --- /dev/null +++ b/docs/content/en/methods/page/_common/output-format-definition.md @@ -0,0 +1,11 @@ +--- +# Do not remove front matter. +--- + +Hugo generates one or more files per page when building a site. For example, when rendering home, [section], [taxonomy], and [term] pages, Hugo generates an HTML file and an RSS file. Both HTML and RSS are built-in _output formats_. Create multiple output formats, and control generation based on [page kind], or by enabling one or more output formats for one or more pages. See [details]. + +[section]: /getting-started/glossary/#section +[taxonomy]: /getting-started/glossary/#taxonomy +[term]: /getting-started/glossary/#term +[page kind]: /getting-started/glossary/#page-kind +[details]: /templates/output-formats diff --git a/docs/content/en/methods/page/_common/output-format-methods.md b/docs/content/en/methods/page/_common/output-format-methods.md new file mode 100644 index 000000000..5e7111fe5 --- /dev/null +++ b/docs/content/en/methods/page/_common/output-format-methods.md @@ -0,0 +1,27 @@ +--- +# Do not remove front matter. +--- + +Get IDENTIFIER +: (`any`) Returns the `OutputFormat` object with the given identifier. + +MediaType +: (`media.Type`) Returns the media type of the output format. + +MediaType.MainType +: (`string`) Returns the main type of the output format's media type. + +MediaType.SubType +: (`string`) Returns the subtype of the current format's media type. + +Name +: (`string`) Returns the output identifier of the output format. + +Permalink +: (`string`) Returns the permalink of the page generated by the current output format. + +Rel +: (`string`) Returns the `rel` value of the output format, either the default or as defined in the site configuration. + +RelPermalink +: (`string`) Returns the relative permalink of the page generated by the current output format. diff --git a/docs/content/en/methods/page/_common/scratch-methods.md b/docs/content/en/methods/page/_common/scratch-methods.md new file mode 100644 index 000000000..b2650cdde --- /dev/null +++ b/docs/content/en/methods/page/_common/scratch-methods.md @@ -0,0 +1,86 @@ +--- +# Do not remove front matter. +--- + +## Methods + +###### Set + +Sets the value of a given key. + +```go-html-template +{{ .Scratch.Set "greeting" "Hello" }} +``` + +###### Get + +Gets the value of a given key. + +```go-html-template +{{ .Scratch.Set "greeting" "Hello" }} +{{ .Scratch.Get "greeting" }} → Hello +``` + +###### Add + +Adds a given value to existing value(s) of the given key. + +For single values, `Add` accepts values that support Go's `+` operator. If the first `Add` for a key is an array or slice, the following adds will be appended to that list. + +```go-html-template +{{ .Scratch.Set "greeting" "Hello" }} +{{ .Scratch.Add "greeting" "Welcome" }} +{{ .Scratch.Get "greeting" }} → HelloWelcome +``` + +```go-html-template +{{ .Scratch.Set "total" 3 }} +{{ .Scratch.Add "total" 7 }} +{{ .Scratch.Get "total" }} → 10 +``` + +```go-html-template +{{ .Scratch.Set "greetings" (slice "Hello") }} +{{ .Scratch.Add "greetings" (slice "Welcome" "Cheers") }} +{{ .Scratch.Get "greetings" }} → [Hello Welcome Cheers] +``` + +###### SetInMap + +Takes a `key`, `mapKey` and `value` and adds a map of `mapKey` and `value` to the given `key`. + +```go-html-template +{{ .Scratch.SetInMap "greetings" "english" "Hello" }} +{{ .Scratch.SetInMap "greetings" "french" "Bonjour" }} +{{ .Scratch.Get "greetings" }} → map[english:Hello french:Bonjour] +``` + +###### DeleteInMap + +Takes a `key` and `mapKey` and removes the map of `mapKey` from the given `key`. + +```go-html-template +{{ .Scratch.SetInMap "greetings" "english" "Hello" }} +{{ .Scratch.SetInMap "greetings" "french" "Bonjour" }} +{{ .Scratch.DeleteInMap "greetings" "english" }} +{{ .Scratch.Get "greetings" }} → map[french:Bonjour] +``` + +###### GetSortedMapValues + +Returns an array of values from `key` sorted by `mapKey`. + +```go-html-template +{{ .Scratch.SetInMap "greetings" "english" "Hello" }} +{{ .Scratch.SetInMap "greetings" "french" "Bonjour" }} +{{ .Scratch.GetSortedMapValues "greetings" }} → [Hello Bonjour] +``` + +###### Delete + +Removes the given key. + +```go-html-template +{{ .Scratch.Set "greeting" "Hello" }} +{{ .Scratch.Delete "greeting" }} +``` diff --git a/docs/content/en/methods/page/_index.md b/docs/content/en/methods/page/_index.md new file mode 100644 index 000000000..278541c5a --- /dev/null +++ b/docs/content/en/methods/page/_index.md @@ -0,0 +1,12 @@ +--- +title: Page methods +linkTitle: Page +description: Use these methods with a Page object. +categories: [] +keywords: [] +menu: + docs: + parent: methods +--- + +Use these methods with a Page object. diff --git a/docs/content/en/methods/pages/ByDate.md b/docs/content/en/methods/pages/ByDate.md new file mode 100644 index 000000000..eb4e86535 --- /dev/null +++ b/docs/content/en/methods/pages/ByDate.md @@ -0,0 +1,31 @@ +--- +title: ByDate +description: Returns the given page collection sorted by date in ascending order. +categories: [] +keywords: [] +action: + related: + - methods/pages/ByExpiryDate + - methods/pages/ByLastMod + - methods/pages/ByPublishDate + returnType: page.Pages + signatures: [PAGES.ByDate] +--- + +When sorting by date, the value is determined by your [site configuration], defaulting to the `date` field in front matter. + +[site configuration]: /getting-started/configuration/#configure-dates + +```go-html-template +{{ range .Pages.ByDate }} + <h2><a href="{{ .RelPermalink }}">{{ .LinkTitle }}</a></h2> +{{ end }} +``` + +To sort in descending order: + +```go-html-template +{{ range .Pages.ByDate.Reverse }} + <h2><a href="{{ .RelPermalink }}">{{ .LinkTitle }}</a></h2> +{{ end }} +``` diff --git a/docs/content/en/methods/pages/ByExpiryDate.md b/docs/content/en/methods/pages/ByExpiryDate.md new file mode 100644 index 000000000..41753c340 --- /dev/null +++ b/docs/content/en/methods/pages/ByExpiryDate.md @@ -0,0 +1,31 @@ +--- +title: ByExpiryDate +description: Returns the given page collection sorted by expiration date in ascending order. +categories: [] +keywords: [] +action: + related: + - methods/pages/ByDate + - methods/pages/ByLastMod + - methods/pages/ByPublishDate + returnType: page.Pages + signatures: [PAGES.ByExpiryDate] +--- + +When sorting by expiration date, the value is determined by your [site configuration], defaulting to the `expiryDate` field in front matter. + +[site configuration]: /getting-started/configuration/#configure-dates + +```go-html-template +{{ range .Pages.ByExpiryDate }} + <h2><a href="{{ .RelPermalink }}">{{ .LinkTitle }}</a></h2> +{{ end }} +``` + +To sort in descending order: + +```go-html-template +{{ range .Pages.ByExpiryDate.Reverse }} + <h2><a href="{{ .RelPermalink }}">{{ .LinkTitle }}</a></h2> +{{ end }} +``` diff --git a/docs/content/en/methods/pages/ByLanguage.md b/docs/content/en/methods/pages/ByLanguage.md new file mode 100644 index 000000000..30d87f954 --- /dev/null +++ b/docs/content/en/methods/pages/ByLanguage.md @@ -0,0 +1,24 @@ +--- +title: ByLanguage +description: Returns the given page collection sorted by language in ascending order. +categories: [] +keywords: [] +action: + related: [] + returnType: page.Pages + signatures: [PAGES.ByLanguage] +--- + +```go-html-template +{{ range .Site.AllPages.ByLanguage }} + <h2><a href="{{ .RelPermalink }}">{{ .LinkTitle }}</a></h2> +{{ end }} +``` + +To sort in descending order: + +```go-html-template +{{ range .Site.AllPages.ByLanguage.Reverse }} + <h2><a href="{{ .RelPermalink }}">{{ .LinkTitle }}</a></h2> +{{ end }} +``` diff --git a/docs/content/en/methods/pages/ByLastmod.md b/docs/content/en/methods/pages/ByLastmod.md new file mode 100644 index 000000000..385093134 --- /dev/null +++ b/docs/content/en/methods/pages/ByLastmod.md @@ -0,0 +1,31 @@ +--- +title: ByLastmod +description: Returns the given page collection sorted by last modification date in ascending order. +categories: [] +keywords: [] +action: + related: + - methods/pages/ByDate + - methods/pages/ByExpiryDate + - methods/pages/ByPublishDate + returnType: page.Pages + signatures: [PAGES.ByLastmod] +--- + +When sorting by last modification date, the value is determined by your [site configuration], defaulting to the `lastmod` field in front matter. + +[site configuration]: /getting-started/configuration/#configure-dates + +```go-html-template +{{ range .Pages.ByLastmod }} + <h2><a href="{{ .RelPermalink }}">{{ .LinkTitle }}</a></h2> +{{ end }} +``` + +To sort in descending order: + +```go-html-template +{{ range .Pages.ByLastmod.Reverse }} + <h2><a href="{{ .RelPermalink }}">{{ .LinkTitle }}</a></h2> +{{ end }} +``` diff --git a/docs/content/en/methods/pages/ByLength.md b/docs/content/en/methods/pages/ByLength.md new file mode 100644 index 000000000..602b548c2 --- /dev/null +++ b/docs/content/en/methods/pages/ByLength.md @@ -0,0 +1,24 @@ +--- +title: ByLength +description: Returns the given page collection sorted by content length in ascending order. +categories: [] +keywords: [] +action: + related: [] + returnType: page.Pages + signatures: [PAGES.ByLength] +--- + +```go-html-template +{{ range .Pages.ByLength }} + <h2><a href="{{ .RelPermalink }}">{{ .LinkTitle }}</a></h2> +{{ end }} +``` + +To sort in descending order: + +```go-html-template +{{ range .Pages.ByLength.Reverse }} + <h2><a href="{{ .RelPermalink }}">{{ .LinkTitle }}</a></h2> +{{ end }} +``` diff --git a/docs/content/en/methods/pages/ByLinkTitle.md b/docs/content/en/methods/pages/ByLinkTitle.md new file mode 100644 index 000000000..073b1e1ba --- /dev/null +++ b/docs/content/en/methods/pages/ByLinkTitle.md @@ -0,0 +1,26 @@ +--- +title: ByLinkTitle +description: Returns the given page collection sorted by link title in ascending order, falling back to title if link title is not defined. +categories: [] +keywords: [] +action: + related: + - methods/pages/ByTitle + - methods/pages/ByParam + returnType: page.Pages + signatures: [PAGES.ByLinkTitle] +--- + +```go-html-template +{{ range .Pages.ByLinkTitle }} + <h2><a href="{{ .RelPermalink }}">{{ .LinkTitle }}</a></h2> +{{ end }} +``` + +To sort in descending order: + +```go-html-template +{{ range .Pages.ByLinkTitle.Reverse }} + <h2><a href="{{ .RelPermalink }}">{{ .LinkTitle }}</a></h2> +{{ end }} +``` diff --git a/docs/content/en/methods/pages/ByParam.md b/docs/content/en/methods/pages/ByParam.md new file mode 100644 index 000000000..9a919cc88 --- /dev/null +++ b/docs/content/en/methods/pages/ByParam.md @@ -0,0 +1,36 @@ +--- +title: ByParam +description: Returns the given page collection sorted by the given parameter in ascending order. +categories: [] +keywords: [] +action: + related: + - methods/pages/ByTitle + - methods/pages/ByLinkTitle + returnType: page.Pages + signatures: [PAGES.ByParam PARAM] +--- + +If the given parameter is not present in front matter, Hugo will use the matching parameter in your site configuration if present. + +```go-html-template +{{ range .Pages.ByParam "author" }} + <h2><a href="{{ .RelPermalink }}">{{ .LinkTitle }}</a></h2> +{{ end }} +``` + +To sort in descending order: + +```go-html-template +{{ range (.Pages.ByParam "author").Reverse }} + <h2><a href="{{ .RelPermalink }}">{{ .LinkTitle }}</a></h2> +{{ end }} +``` + +If the targeted parameter is nested, access the field using dot notation: + +```go-html-template +{{ range .Pages.ByParam "author.last_name" }} + <h2><a href="{{ .RelPermalink }}">{{ .LinkTitle }}</a></h2> +{{ end }} +``` diff --git a/docs/content/en/methods/pages/ByPublishDate.md b/docs/content/en/methods/pages/ByPublishDate.md new file mode 100644 index 000000000..e622636a2 --- /dev/null +++ b/docs/content/en/methods/pages/ByPublishDate.md @@ -0,0 +1,31 @@ +--- +title: ByPublishDate +description: Returns the given page collection sorted by publish date in ascending order. +categories: [] +keywords: [] +action: + related: + - methods/pages/ByDate + - methods/pages/ByExpiryDate + - methods/pages/ByLastMod + returnType: page.Pages + signatures: [PAGES.ByPublishDate] +--- + +When sorting by publish date, the value is determined by your [site configuration], defaulting to the `publishDate` field in front matter. + +[site configuration]: /getting-started/configuration/#configure-dates + +```go-html-template +{{ range .Pages.ByPublishDate }} + <h2><a href="{{ .RelPermalink }}">{{ .LinkTitle }}</a></h2> +{{ end }} +``` + +To sort in descending order: + +```go-html-template +{{ range .Pages.ByPublishDate.Reverse }} + <h2><a href="{{ .RelPermalink }}">{{ .LinkTitle }}</a></h2> +{{ end }} +``` diff --git a/docs/content/en/methods/pages/ByTitle.md b/docs/content/en/methods/pages/ByTitle.md new file mode 100644 index 000000000..ee54d5cda --- /dev/null +++ b/docs/content/en/methods/pages/ByTitle.md @@ -0,0 +1,26 @@ +--- +title: ByTitle +description: Returns the given page collection sorted by title in ascending order. +categories: [] +keywords: [] +action: + related: + - methods/pages/ByLinkTitle + - methods/pages/ByParam + returnType: page.Pages + signatures: [PAGES.ByTitle] +--- + +```go-html-template +{{ range .Pages.ByTitle }} + <h2><a href="{{ .RelPermalink }}">{{ .Title }}</a></h2> +{{ end }} +``` + +To sort in descending order: + +```go-html-template +{{ range .Pages.ByTitle.Reverse }} + <h2><a href="{{ .RelPermalink }}">{{ .Title }}</a></h2> +{{ end }} +``` diff --git a/docs/content/en/methods/pages/ByWeight.md b/docs/content/en/methods/pages/ByWeight.md new file mode 100644 index 000000000..4eafee11f --- /dev/null +++ b/docs/content/en/methods/pages/ByWeight.md @@ -0,0 +1,28 @@ +--- +title: ByWeight +description: Returns the given page collection sorted by weight in ascending order. +categories: [] +keywords: [] +action: + related: [] + returnType: page.Pages + signatures: [PAGES.ByWeight] +--- + +Assign a [weight] to a page using the `weight` field in front matter. The weight must be a non-zero integer. Lighter items float to the top, while heavier items sink to the bottom. Unweighted or zero-weighted pages are placed at the end of the collection. + +[weight]: /getting-started/glossary/#weight + +```go-html-template +{{ range .Pages.ByWeight }} + <h2><a href="{{ .RelPermalink }}">{{ .LinkTitle }}</a></h2> +{{ end }} +``` + +To sort in descending order: + +```go-html-template +{{ range .Pages.ByWeight.Reverse }} + <h2><a href="{{ .RelPermalink }}">{{ .LinkTitle }}</a></h2> +{{ end }} +``` diff --git a/docs/content/en/methods/pages/GroupBy.md b/docs/content/en/methods/pages/GroupBy.md new file mode 100644 index 000000000..b46a39bdf --- /dev/null +++ b/docs/content/en/methods/pages/GroupBy.md @@ -0,0 +1,36 @@ +--- +title: GroupBy +description: Returns the given page collection grouped by the given field in ascending order. +categories: [] +keywords: [] +action: + related: [] + returnType: page.PagesGroup + signatures: ['PAGES.GroupBy FIELD [SORT]'] +--- + +{{% include "methods/pages/_common/group-sort-order.md" %}} + +```go-html-template +{{ range .Pages.GroupBy "Section" }} + <p>{{ .Key }}</p> + <ul> + {{ range .Pages }} + <li><a href="{{ .RelPermalink }}">{{ .LinkTitle }}</a></li> + {{ end }} + </ul> +{{ end }} +``` + +To sort the groups in descending order: + +```go-html-template +{{ range .Pages.GroupBy "Section" "desc" }} + <p>{{ .Key }}</p> + <ul> + {{ range .Pages }} + <li><a href="{{ .RelPermalink }}">{{ .LinkTitle }}</a></li> + {{ end }} + </ul> +{{ end }} +``` diff --git a/docs/content/en/methods/pages/GroupByDate.md b/docs/content/en/methods/pages/GroupByDate.md new file mode 100644 index 000000000..8b5fcd6f1 --- /dev/null +++ b/docs/content/en/methods/pages/GroupByDate.md @@ -0,0 +1,68 @@ +--- +title: GroupByDate +description: Returns the given page collection grouped by date in descending order. +categories: [] +keywords: [] +action: + related: + - methods/pages/GroupByExpiryDate + - methods/pages/GroupByLastMod + - methods/pages/GroupByParamDate + - methods/pages/GroupByPublishDate + returnType: page.PagesGroup + signatures: ['PAGES.GroupByDate LAYOUT [SORT]'] +--- + +When grouping by date, the value is determined by your [site configuration], defaulting to the `date` field in front matter. + +The [layout string] has the same format as the layout string for the [`time.Format`] function. The resulting group key is [localized] for language and region. + +[`time.Format`]: /functions/time/format/ +[layout string]: #layout-string +[localized]: /getting-started/glossary/#localization +[site configuration]: /getting-started/configuration/#configure-dates + +{{% include "methods/pages/_common/group-sort-order.md" %}} + +To group content by year and month: + +```go-html-template +{{ range .Pages.GroupByDate "January 2006" }} + <p>{{ .Key }}</p> + <ul> + {{ range .Pages }} + <li><a href="{{ .RelPermalink }}">{{ .LinkTitle }}</a></li> + {{ end }} + </ul> +{{ end }} +``` + +To sort the groups in ascending order: + +```go-html-template +{{ range .Pages.GroupByDate "January 2006" "asc" }} + <p>{{ .Key }}</p> + <ul> + {{ range .Pages }} + <li><a href="{{ .RelPermalink }}">{{ .LinkTitle }}</a></li> + {{ end }} + </ul> +{{ end }} +``` + +The pages within each group will also be sorted by date, either ascending or descending depending on the grouping option. To sort the pages within each group, use one of the sorting methods. For example, to sort the pages within each group by title: + +```go-html-template +{{ range .Pages.GroupByDate "January 2006" }} + <p>{{ .Key }}</p> + <ul> + {{ range .Pages.ByTitle }} + <li><a href="{{ .RelPermalink }}">{{ .Title }}</a></li> + {{ end }} + </ul> +{{ end }} +``` + +## Layout string + +{{% include "functions/_common/time-layout-string.md" %}} diff --git a/docs/content/en/methods/pages/GroupByExpiryDate.md b/docs/content/en/methods/pages/GroupByExpiryDate.md new file mode 100644 index 000000000..a9b248297 --- /dev/null +++ b/docs/content/en/methods/pages/GroupByExpiryDate.md @@ -0,0 +1,68 @@ +--- +title: GroupByExpiryDate +description: Returns the given page collection grouped by expiration date in descending order. +categories: [] +keywords: [] +action: + related: + - methods/pages/GroupByDate + - methods/pages/GroupByLastMod + - methods/pages/GroupByParamDate + - methods/pages/GroupByPublishDate + returnType: page.PagesGroup + signatures: ['PAGES.GroupByExpiryDate LAYOUT [SORT]'] +--- + +When grouping by expiration date, the value is determined by your [site configuration], defaulting to the `expiryDate` field in front matter. + +The [layout string] has the same format as the layout string for the [`time.Format`] function. The resulting group key is [localized] for language and region. + +[`time.Format`]: /functions/time/format/ +[layout string]: #layout-string +[localized]: /getting-started/glossary/#localization +[site configuration]: /getting-started/configuration/#configure-dates + +{{% include "methods/pages/_common/group-sort-order.md" %}} + +To group content by year and month: + +```go-html-template +{{ range .Pages.GroupByExpiryDate "January 2006" }} + <p>{{ .Key }}</p> + <ul> + {{ range .Pages }} + <li><a href="{{ .RelPermalink }}">{{ .LinkTitle }}</a></li> + {{ end }} + </ul> +{{ end }} +``` + +To sort the groups in ascending order: + +```go-html-template +{{ range .Pages.GroupByExpiryDate "January 2006" "asc" }} + <p>{{ .Key }}</p> + <ul> + {{ range .Pages }} + <li><a href="{{ .RelPermalink }}">{{ .LinkTitle }}</a></li> + {{ end }} + </ul> +{{ end }} +``` + +The pages within each group will also be sorted by expiration date, either ascending or descending depending on your grouping option. To sort the pages within each group, use one of the sorting methods. For example, to sort the pages within each group by title: + +```go-html-template +{{ range .Pages.GroupByExpiryDate "January 2006" }} + <p>{{ .Key }}</p> + <ul> + {{ range .Pages.ByTitle }} + <li><a href="{{ .RelPermalink }}">{{ .Title }}</a></li> + {{ end }} + </ul> +{{ end }} +``` + +## Layout string + +{{% include "functions/_common/time-layout-string.md" %}} diff --git a/docs/content/en/methods/pages/GroupByLastmod.md b/docs/content/en/methods/pages/GroupByLastmod.md new file mode 100644 index 000000000..877692521 --- /dev/null +++ b/docs/content/en/methods/pages/GroupByLastmod.md @@ -0,0 +1,68 @@ +--- +title: GroupByLastmod +description: Returns the given page collection grouped by last modification date in descending order. +categories: [] +keywords: [] +action: + related: + - methods/pages/GroupByDate + - methods/pages/GroupByExpiryDate + - methods/pages/GroupByParamDate + - methods/pages/GroupByPublishDate + returnType: page.PagesGroup + signatures: ['PAGES.GroupByLastmod LAYOUT [SORT]'] +--- + +When grouping by last modification date, the value is determined by your [site configuration], defaulting to the `lastmod` field in front matter. + +The [layout string] has the same format as the layout string for the [`time.Format`] function. The resulting group key is [localized] for language and region. + +[`time.Format`]: /functions/time/format/ +[layout string]: #layout-string +[localized]: /getting-started/glossary/#localization +[site configuration]: /getting-started/configuration/#configure-dates + +{{% include "methods/pages/_common/group-sort-order.md" %}} + +To group content by year and month: + +```go-html-template +{{ range .Pages.GroupByLastmod "January 2006" }} + <p>{{ .Key }}</p> + <ul> + {{ range .Pages }} + <li><a href="{{ .RelPermalink }}">{{ .LinkTitle }}</a></li> + {{ end }} + </ul> +{{ end }} +``` + +To sort the groups in ascending order: + +```go-html-template +{{ range .Pages.GroupByLastmod "January 2006" "asc" }} + <p>{{ .Key }}</p> + <ul> + {{ range .Pages }} + <li><a href="{{ .RelPermalink }}">{{ .LinkTitle }}</a></li> + {{ end }} + </ul> +{{ end }} +``` + +The pages within each group will also be sorted by last modification date, either ascending or descending depending on your grouping option. To sort the pages within each group, use one of the sorting methods. For example, to sort the pages within each group by title: + +```go-html-template +{{ range .Pages.GroupByLastmod "January 2006" }} + <p>{{ .Key }}</p> + <ul> + {{ range .Pages.ByTitle }} + <li><a href="{{ .RelPermalink }}">{{ .Title }}</a></li> + {{ end }} + </ul> +{{ end }} +``` + +## Layout string + +{{% include "functions/_common/time-layout-string.md" %}} diff --git a/docs/content/en/methods/pages/GroupByParam.md b/docs/content/en/methods/pages/GroupByParam.md new file mode 100644 index 000000000..9c63ab902 --- /dev/null +++ b/docs/content/en/methods/pages/GroupByParam.md @@ -0,0 +1,36 @@ +--- +title: GroupByParam +description: Returns the given page collection grouped by the given parameter in ascending order. +categories: [] +keywords: [] +action: + related: [] + returnType: page.PagesGroup + signatures: ['PAGES.GroupByParam PARAM [SORT]'] +--- + +{{% include "methods/pages/_common/group-sort-order.md" %}} + +```go-html-template +{{ range .Pages.GroupByParam "color" }} + <p>{{ .Key | title }}</p> + <ul> + {{ range .Pages }} + <li><a href="{{ .RelPermalink }}">{{ .LinkTitle }}</a></li> + {{ end }} + </ul> +{{ end }} +``` + +To sort the groups in descending order: + +```go-html-template +{{ range .Pages.GroupByParam "color" "desc" }} + <p>{{ .Key | title }}</p> + <ul> + {{ range .Pages }} + <li><a href="{{ .RelPermalink }}">{{ .LinkTitle }}</a></li> + {{ end }} + </ul> +{{ end }} +``` diff --git a/docs/content/en/methods/pages/GroupByParamDate.md b/docs/content/en/methods/pages/GroupByParamDate.md new file mode 100644 index 000000000..c7fedbb1a --- /dev/null +++ b/docs/content/en/methods/pages/GroupByParamDate.md @@ -0,0 +1,65 @@ +--- +title: GroupByParamDate +description: Returns the given page collection grouped by the given date parameter in descending order. +categories: [] +keywords: [] +action: + related: + - methods/pages/GroupByDate + - methods/pages/GroupByExpiryDate + - methods/pages/GroupByLastMod + - methods/pages/GroupByPublishDate + returnType: page.PagesGroup + signatures: ['PAGES.GroupByParamDate PARAM LAYOUT [SORT]'] +--- + +The [layout string] has the same format as the layout string for the [`time.Format`] function. The resulting group key is [localized] for language and region. + +[`time.Format`]: /functions/time/format/ +[layout string]: #layout-string +[localized]: /getting-started/glossary/#localization + +{{% include "methods/pages/_common/group-sort-order.md" %}} + +To group content by year and month: + +```go-html-template +{{ range .Pages.GroupByParamDate "eventDate" "January 2006" }} + <p>{{ .Key }}</p> + <ul> + {{ range .Pages }} + <li><a href="{{ .RelPermalink }}">{{ .LinkTitle }}</a></li> + {{ end }} + </ul> +{{ end }} +``` + +To sort the groups in ascending order: + +```go-html-template +{{ range .Pages.GroupByParamDate "eventDate" "January 2006" "asc" }} + <p>{{ .Key }}</p> + <ul> + {{ range .Pages }} + <li><a href="{{ .RelPermalink }}">{{ .LinkTitle }}</a></li> + {{ end }} + </ul> +{{ end }} +``` + +The pages within each group will also be sorted by the parameter date, either ascending or descending depending on your grouping option. To sort the pages within each group, use one of the sorting methods. For example, to sort the pages within each group by title: + +```go-html-template +{{ range .Pages.GroupByParamDate "eventDate" "January 2006" }} + <p>{{ .Key }}</p> + <ul> + {{ range .Pages.ByTitle }} + <li><a href="{{ .RelPermalink }}">{{ .Title }}</a></li> + {{ end }} + </ul> +{{ end }} +``` + +## Layout string + +{{% include "functions/_common/time-layout-string.md" %}} diff --git a/docs/content/en/methods/pages/GroupByPublishDate.md b/docs/content/en/methods/pages/GroupByPublishDate.md new file mode 100644 index 000000000..f6603e858 --- /dev/null +++ b/docs/content/en/methods/pages/GroupByPublishDate.md @@ -0,0 +1,68 @@ +--- +title: GroupByPublishDate +description: Returns the given page collection grouped by publish date in descending order. +categories: [] +keywords: [] +action: + related: + - methods/pages/GroupByDate + - methods/pages/GroupByExpiryDate + - methods/pages/GroupByLastMod + - methods/pages/GroupByParamDate + returnType: page.PagesGroup + signatures: ['PAGES.GroupByPublishDate LAYOUT [SORT]'] +--- + +When grouping by publish date, the value is determined by your [site configuration], defaulting to the `publishDate` field in front matter. + +The [layout string] has the same format as the layout string for the [`time.Format`] function. The resulting group key is [localized] for language and region. + +[`time.Format`]: /functions/time/format/ +[layout string]: #layout-string +[localized]: /getting-started/glossary/#localization +[site configuration]: /getting-started/configuration/#configure-dates + +{{% include "methods/pages/_common/group-sort-order.md" %}} + +To group content by year and month: + +```go-html-template +{{ range .Pages.GroupByPublishDate "January 2006" }} + <p>{{ .Key }}</p> + <ul> + {{ range .Pages }} + <li><a href="{{ .RelPermalink }}">{{ .LinkTitle }}</a></li> + {{ end }} + </ul> +{{ end }} +``` + +To sort the groups in ascending order: + +```go-html-template +{{ range .Pages.GroupByPublishDate "January 2006" "asc" }} + <p>{{ .Key }}</p> + <ul> + {{ range .Pages }} + <li><a href="{{ .RelPermalink }}">{{ .LinkTitle }}</a></li> + {{ end }} + </ul> +{{ end }} +``` + +The pages within each group will also be sorted by publish date, either ascending or descending depending on your grouping option. To sort the pages within each group, use one of the sorting methods. For example, to sort the pages within each group by title: + +```go-html-template +{{ range .Pages.GroupByPublishDate "January 2006" }} + <p>{{ .Key }}</p> + <ul> + {{ range .Pages.ByTitle }} + <li><a href="{{ .RelPermalink }}">{{ .Title }}</a></li> + {{ end }} + </ul> +{{ end }} +``` + +## Layout string + +{{% include "functions/_common/time-layout-string.md" %}} diff --git a/docs/content/en/methods/pages/Len.md b/docs/content/en/methods/pages/Len.md new file mode 100644 index 000000000..0a5989a1a --- /dev/null +++ b/docs/content/en/methods/pages/Len.md @@ -0,0 +1,14 @@ +--- +title: Len +description: Returns the number of pages in the given page collection. +categories: [] +keywords: [] +action: + related: [] + returnType: int + signatures: [PAGES.Len] +--- + +```go-html-template +{{ .Pages.Len }} → 42 +``` diff --git a/docs/content/en/methods/pages/Limit.md b/docs/content/en/methods/pages/Limit.md new file mode 100644 index 000000000..bf889fd7e --- /dev/null +++ b/docs/content/en/methods/pages/Limit.md @@ -0,0 +1,16 @@ +--- +title: Limit +description: Returns the first N pages from the given page collection. +categories: [] +keywords: [] +action: + related: [] + returnType: page.Pages + signatures: [PAGES.Limit NUMBER] +--- + +```go-html-template +{{ range .Pages.Limit 3 }} + <h2><a href="{{ .RelPermalink }}">{{ .LinkTitle }}</a></h2> +{{ end }} +``` diff --git a/docs/content/en/methods/pages/Next.md b/docs/content/en/methods/pages/Next.md new file mode 100644 index 000000000..b7284609f --- /dev/null +++ b/docs/content/en/methods/pages/Next.md @@ -0,0 +1,55 @@ +--- +title: Next +description: Returns the next page in a local page collection, relative to the given page. +categories: [] +keywords: [] +action: + related: + - methods/pages/Prev + - methods/page/Next + - methods/page/NextInSection + - methods/page/Prev + - methods/page/PrevInSection + returnType: page.Page + signatures: [PAGES.Next PAGE] +toc: true +--- + +The behavior of the `Prev` and `Next` methods on a `Pages` objects is probably the reverse of what you expect. + +With this content structure and the page collection sorted by weight in ascending order: + +```text +content/ +├── pages/ +│ ├── _index.md +│ ├── page-1.md <-- front matter: weight = 10 +│ ├── page-2.md <-- front matter: weight = 20 +│ └── page-3.md <-- front matter: weight = 30 +└── _index.md +``` + +When you visit page-2: + +- The `Prev` method points to page-3 +- The `Next` method points to page-1 + +{{% note %}} +Use the opposite label in your navigation links as shown in the example below. +{{% /note %}} + +```go-html-template +{{ $pages := where .Site.RegularPages.ByWeight "Section" "pages" }} + +{{ with $pages.Next . }} + <a href="{{ .RelPermalink }}">Previous</a> +{{ end }} + +{{ with $pages.Prev . }} + <a href="{{ .RelPermalink }}">Next</a> +{{ end }} +``` + +## Compare to Page methods + +{{% include "methods/_common/next-prev-on-page-vs-next-prev-on-pages.md" %}} diff --git a/docs/content/en/methods/pages/Prev.md b/docs/content/en/methods/pages/Prev.md new file mode 100644 index 000000000..b9ef27a45 --- /dev/null +++ b/docs/content/en/methods/pages/Prev.md @@ -0,0 +1,55 @@ +--- +title: Prev +description: Returns the previous page in a local page collection, relative to the given page. +categories: [] +keywords: [] +action: + related: + - methods/pages/Next + - methods/page/Next + - methods/page/NextInSection + - methods/page/Prev + - methods/page/PrevInSection + returnType: page.Pages + signatures: [PAGES.Prev PAGE] +toc: true +--- + +The behavior of the `Prev` and `Next` methods on a `Pages` objects is probably the reverse of what you expect. + +With this content structure and the page collection sorted by weight in ascending order: + +```text +content/ +├── pages/ +│ ├── _index.md +│ ├── page-1.md <-- front matter: weight = 10 +│ ├── page-2.md <-- front matter: weight = 20 +│ └── page-3.md <-- front matter: weight = 30 +└── _index.md +``` + +When you visit page-2: + +- The `Prev` method points to page-3 +- The `Next` method points to page-1 + +{{% note %}} +Use the opposite label in your navigation links as shown in the example below. +{{% /note %}} + +```go-html-template +{{ $pages := where .Site.RegularPages.ByWeight "Section" "pages" }} + +{{ with $pages.Next . }} + <a href="{{ .RelPermalink }}">Previous</a> +{{ end }} + +{{ with $pages.Prev . }} + <a href="{{ .RelPermalink }}">Next</a> +{{ end }} +``` + +## Compare to Page methods + +{{% include "methods/_common/next-prev-on-page-vs-next-prev-on-pages.md" %}} diff --git a/docs/content/en/methods/pages/Related.md b/docs/content/en/methods/pages/Related.md new file mode 100644 index 000000000..1cee88745 --- /dev/null +++ b/docs/content/en/methods/pages/Related.md @@ -0,0 +1,79 @@ +--- +title: Related +description: Returns a collection of pages related to the given page. +categories: [] +keywords: [] +action: + related: + - methods/page/HeadingsFiltered + - functions/collections/KeyVals + returnType: page.Pages + signatures: + - PAGES.Related PAGE + - PAGES.Related OPTIONS +--- + +Based on front matter, Hugo uses several factors to identify content related to the given page. Use the default [related content configuration], or tune the results to the desired indices and parameters. See [details]. + +The argument passed to the `Related` method may be a `Page` or an options map. For example, to pass the current page: + +{{< code file=layouts/_default/single.html >}} +{{ with .Site.RegularPages.Related . | first 5 }} + <p>Related pages:</p> + <ul> + {{ range . }} + <li><a href="{{ .RelPermalink }}">{{ .LinkTitle }}</a></li> + {{ end }} + </ul> +{{ end }} +{{< /code >}} + +To pass an options map: + +{{< code file=layouts/_default/single.html >}} +{{ $opts := dict + "document" . + "indices" (slice "tags" "keywords") +}} +{{ with .Site.RegularPages.Related $opts | first 5 }} + <p>Related pages:</p> + <ul> + {{ range . }} + <li><a href="{{ .RelPermalink }}">{{ .LinkTitle }}</a></li> + {{ end }} + </ul> +{{ end }} +{{< /code >}} + + +## Options + +indices +: (`slice`) The indices to search within. + +document +: (`page`) The page for which to find related content. Required when specifying an options map. + +namedSlices +: (`slice`) The keywords to search for, expressed as a slice of `KeyValues` using the [`keyVals`] function. + +[`keyVals`]: /functions/collections/keyvals/ + +fragments +: (`slice`) A list of special keywords that is used for indices configured as type "fragments". This will match the [fragment] identifiers of the documents. + +A contrived example using all of the above: + +```go-html-template +{{ $page := . }} +{{ $opts := dict + "indices" (slice "tags" "keywords") + "document" $page + "namedSlices" (slice (keyVals "tags" "hugo" "rocks") (keyVals "date" $page.Date)) + "fragments" (slice "heading-1" "heading-2") +}} +``` + +[details]: /content-management/related/ +[fragment]: /getting-started/glossary/#fragment +[related content configuration]: /content-management/related/ diff --git a/docs/content/en/methods/pages/Reverse.md b/docs/content/en/methods/pages/Reverse.md new file mode 100644 index 000000000..e03e0ea47 --- /dev/null +++ b/docs/content/en/methods/pages/Reverse.md @@ -0,0 +1,16 @@ +--- +title: Reverse +description: Returns the given page collection in reverse order. +categories: [] +keywords: [] +action: + related: [] + returnType: page.Pages + signatures: [PAGES.Reverse] +--- + +```go-html-template +{{ range .Pages.ByDate.Reverse }} + <h2><a href="{{ .RelPermalink }}">{{ .LinkTitle }}</a></h2> +{{ end }} +``` diff --git a/docs/content/en/methods/pages/_common/_index.md b/docs/content/en/methods/pages/_common/_index.md new file mode 100644 index 000000000..47d5812fb --- /dev/null +++ b/docs/content/en/methods/pages/_common/_index.md @@ -0,0 +1,13 @@ +--- +cascade: + _build: + list: never + publishResources: false + render: never +--- + +<!-- +Files within this headless branch bundle are markdown snippets. Each file must contain front matter delimiters, though front matter fields are not required. + +Include the rendered content using the "include" shortcode. +--> diff --git a/docs/content/en/methods/pages/_common/group-sort-order.md b/docs/content/en/methods/pages/_common/group-sort-order.md new file mode 100644 index 000000000..bb5be82f6 --- /dev/null +++ b/docs/content/en/methods/pages/_common/group-sort-order.md @@ -0,0 +1,5 @@ +--- +# Do not remove front matter. +--- + +For the optional sort order, specify either `asc` for ascending order, or `desc` for descending order. diff --git a/docs/content/en/methods/pages/_index.md b/docs/content/en/methods/pages/_index.md new file mode 100644 index 000000000..d8a64f5d5 --- /dev/null +++ b/docs/content/en/methods/pages/_index.md @@ -0,0 +1,13 @@ +--- +title: Pages methods +linkTitle: Pages +description: Use these methods with a collection of Page objects. +categories: [] +keywords: [] +menu: + docs: + parent: methods +aliases: [/variables/pages] +--- + +Use these methods with a collection of Page objects. diff --git a/docs/content/en/methods/resource/Colors.md b/docs/content/en/methods/resource/Colors.md new file mode 100644 index 000000000..1452d558f --- /dev/null +++ b/docs/content/en/methods/resource/Colors.md @@ -0,0 +1,22 @@ +--- +title: Colors +description: Applicable to images, returns a slice of the most dominant colors using a simple histogram method. +categories: [] +keywords: [] +action: + related: [] + returnType: '[]string' + signatures: [RESOURCE.Colors] +--- + +{{< new-in 0.104.0 >}} + +```go-html-template +{{ with resources.Get "images/a.jpg" }} + {{ .Colors }} → [#bebebd #514947 #768a9a #647789 #90725e #a48974] +{{ end }} +``` + +This method is fast, but if you also scale down your images, it would be good for performance to extract the colors from the scaled image. + +{{% include "methods/resource/_common/global-page-remote-resources.md" %}} diff --git a/docs/content/en/methods/resource/Content.md b/docs/content/en/methods/resource/Content.md new file mode 100644 index 000000000..a5945ff65 --- /dev/null +++ b/docs/content/en/methods/resource/Content.md @@ -0,0 +1,61 @@ +--- +title: Content +description: Returns the content of the given resource. +categories: [] +keywords: [] +action: + related: [] + returnType: any + signatures: [RESOURCE.Content] +toc: +--- + +The `Content` method on a `Resource` object returns `template.HTML` when the resource type is `page`, otherwise it returns a `string`. + +[resource type]: /methods/resource/resourcetype + +{{< code file=assets/quotations/kipling.txt >}} +He travels the fastest who travels alone. +{{< /code >}} + +To get the content: + +```go-html-template +{{ with resources.Get "quotations/kipling.txt" }} + {{ .Content }} → He travels the fastest who travels alone. +{{ end }} +``` + +To get the size in bytes: + +```go-html-template +{{ with resources.Get "quotations/kipling.txt" }} + {{ .Content | len }} → 42 +{{ end }} +``` + +To create an inline image: + +```go-html-template +{{ with resources.Get "images/a.jpg" }} + <img src="data:{{ .MediaType.Type }};base64,{{ .Content | base64Encode }}"> +{{ end }} +``` + +To create inline CSS: + +```go-html-template +{{ with resources.Get "css/style.css" }} + <style>{{ .Content | safeCSS }}</style> +{{ end }} +``` + +To create inline JavaScript: + +```go-html-template +{{ with resources.Get "js/script.js" }} + <script>{{ .Content | safeJS }}</script> +{{ end }} +``` + +{{% include "methods/resource/_common/global-page-remote-resources.md" %}} diff --git a/docs/content/en/methods/resource/Crop.md b/docs/content/en/methods/resource/Crop.md new file mode 100644 index 000000000..711fc07b0 --- /dev/null +++ b/docs/content/en/methods/resource/Crop.md @@ -0,0 +1,48 @@ +--- +title: Crop +description: Applicable to images, returns an image resource cropped to the given dimensions without resizing. +categories: [] +keywords: [] +action: + related: + - methods/resource/Fit + - methods/resource/Fill + - methods/resource/Resize + - methods/resource/Process + - functions/images/Process + returnType: images.ImageResource + signatures: [RESOURCE.Crop SPEC] +toc: true +--- + +Crop an image to match the given dimensions without resizing. You must provide both width and height. + +```go-html-template +{{ with resources.Get "images/original.jpg" }} + {{ with .Crop "200x200" }} + <img src="{{ .RelPermalink }}" width="{{ .Width }}" height="{{ .Height }}" alt=""> + {{ end }} +{{ end }} +``` + +{{% include "methods/resource/_common/global-page-remote-resources.md" %}} + +{{% include "/methods/resource/_common/processing-spec.md" %}} + +## Example + +```go-html-template +{{ with resources.Get "images/original.jpg" }} + {{ with .Crop "200x200 topright webp q85 lanczos" }} + <img src="{{ .RelPermalink }}" width="{{ .Width }}" height="{{ .Height }}" alt=""> + {{ end }} +{{ end }} +``` + +{{< img + src="images/examples/zion-national-park.jpg" + alt="Zion National Park" + filter="Process" + filterArgs="crop 200x200 topright webp q85 lanczos" + example=true +>}} diff --git a/docs/content/en/methods/resource/Data.md b/docs/content/en/methods/resource/Data.md new file mode 100644 index 000000000..0fbaf6199 --- /dev/null +++ b/docs/content/en/methods/resource/Data.md @@ -0,0 +1,53 @@ +--- +title: Data +description: Applicable to resources returned by the resources.GetRemote function, returns information from the HTTP response. +categories: [] +keywords: [] +action: + related: + - functions/resources/GetRemote + - methods/resource/Err + returnType: map + signatures: [RESOURCE.Data] +--- + +The `Data` method on a resource returned by the [`resources.GetRemote`] function returns information from the HTTP response. + +[`resources.GetRemote`]: functions/resources/getremote + +```go-html-template +{{ $url := "https://example.org/images/a.jpg" }} +{{ with resources.GetRemote $url }} + {{ with .Err }} + {{ errorf "%s" . }} + {{ else }} + {{ with .Data }} + {{ .ContentLength }} → 42764 + {{ .ContentType }} → image/jpeg + {{ .Status }} → 200 OK + {{ .StatusCode }} → 200 + {{ .TransferEncoding }} → [] + {{ end }} + {{ end }} +{{ else }} + {{ errorf "Unable to get remote resource %q" $url }} +{{ end }} +``` + +ContentLength +: (`int`) The content length in bytes. + +ContentType +: (`string`) The content type. + +Status +: (`string`) The HTTP status text. + +StatusCode +: (`int`) The HTTP status code. + +TransferEncoding +: (`string`) The transfer encoding. + + +[`resources.GetRemote`]: functions/resources/getremote diff --git a/docs/content/en/methods/resource/Err.md b/docs/content/en/methods/resource/Err.md new file mode 100644 index 000000000..f4b410aa7 --- /dev/null +++ b/docs/content/en/methods/resource/Err.md @@ -0,0 +1,56 @@ +--- +title: Err +description: Applicable to resources returned by the resources.GetRemote function, returns an error message if the HTTP request fails, else nil. +categories: [] +keywords: [] +action: + related: + - functions/resources/GetRemote + - methods/resource/Data + returnType: resource.resourceError + signatures: [RESOURCE.Err] +--- + +The `Err` method on a resource returned by the [`resources.GetRemote`] function returns an error message if the HTTP request fails, else nil. If you do not handle the error yourself, Hugo will fail the build. + +[`resources.GetRemote`]: functions/resources/getremote + +In this example we send an HTTP request to a nonexistent domain: + +```go-html-template +{{ $url := "https://broken-example.org/images/a.jpg" }} +{{ with resources.GetRemote $url }} + {{ with .Err }} + {{ errorf "%s" . }} + {{ else }} + <img src="{{ .RelPermalink }}" width="{{ .Width }}" height="{{ .Height }}" alt=""> + {{ end }} +{{ else }} + {{ errorf "Unable to get remote resource %q" $url }} +{{ end }} +``` + +The code above captures the error from the HTTP request, then fails the build: + +```text +ERROR error calling resources.GetRemote: Get "https://broken-example.org/images/a.jpg": dial tcp: lookup broken-example.org on 127.0.0.53:53: no such host +``` + +To log an error as a warning instead of an error: + +```go-html-template +{{ $url := "https://broken-example.org/images/a.jpg" }} +{{ with resources.GetRemote $url }} + {{ with .Err }} + {{ warnf "%s" . }} + {{ else }} + <img src="{{ .RelPermalink }}" width="{{ .Width }}" height="{{ .Height }}" alt=""> + {{ end }} +{{ else }} + {{ errorf "Unable to get remote resource %q" $url }} +{{ end }} +``` + +{{% note %}} +An HTTP response with a 404 status code is not an HTTP request error. To handle 404 status codes, code defensively using the nested `with-else-end` construct as shown above. +{{% /note %}} diff --git a/docs/content/en/methods/resource/Exif.md b/docs/content/en/methods/resource/Exif.md new file mode 100644 index 000000000..765b4c92f --- /dev/null +++ b/docs/content/en/methods/resource/Exif.md @@ -0,0 +1,78 @@ +--- +title: Exif +description: Applicable to JPEG and TIFF images, returns an EXIF object containing image metadata. +categories: [] +keywords: [] +action: + related: [] + returnType: exif.ExifInfo + signatures: [RESOURCE.Exif] +toc: true +--- + +Applicable to JPEG and TIFF images, the `Exif` method on an image `Resource` object returns an [EXIF] object containing image metadata. + +## Methods + +Date +: (`time.Time`) Returns the image creation date/time. Format with the [`time.Format`]function. + +Lat +: (`float64`) Returns the GPS latitude in degrees. + +Long +: (`float64`) Returns the GPS longitude in degrees. + +Tags +: (`exif.Tags`) Returns a collection of the available EXIF tags for this image. You may include or exclude specific tags from this collection in the [site configuration]. + +## Examples + +To list the creation date, location, and EXIF tags: + +```go-html-template +{{ with resources.Get "images/a.jpg" }} + {{ with .Exif }} + <p>Date: {{ .Date }}</p> + <p>Lat/Long: {{ .Lat }}/{{ .Long }}</p> + {{ with .Tags }} + <p>Tags</p> + <table> + <thead> + <tr><th>Tag</th><th>Value</th></tr> + </thead> + <tbody> + {{ range $k, $v := . }} + <tr><td>{{ $k }}</td><td>{{ $v }}</td></tr> + {{ end }} + </tbody> + </table> + {{ end }} + {{ end }} +{{ end }} +``` + +To list specific values: + +```go-html-template +{{ with resources.Get "images/a.jpg" }} + {{ with .Exif }} + <ul> + {{ with .Date }}<li>Date: {{ .Format "January 02, 2006" }}</li>{{ end }} + {{ with .Tags.ApertureValue }}<li>Aperture: {{ lang.FormatNumber 2 . }}</li>{{ end }} + {{ with .Tags.BrightnessValue }}<li>Brightness: {{ lang.FormatNumber 2 . }}</li>{{ end }} + {{ with .Tags.ExposureTime }}<li>Exposure Time: {{ . }}</li>{{ end }} + {{ with .Tags.FNumber }}<li>F Number: {{ . }}</li>{{ end }} + {{ with .Tags.FocalLength }}<li>Focal Length: {{ . }}</li>{{ end }} + {{ with .Tags.ISOSpeedRatings }}<li>ISO Speed Ratings: {{ . }}</li>{{ end }} + {{ with .Tags.LensModel }}<li>Lens Model: {{ . }}</li>{{ end }} + </ul> + {{ end }} +{{ end }} +``` + +{{% include "methods/resource/_common/global-page-remote-resources.md" %}} + +[exif]: https://en.wikipedia.org/wiki/Exif +[site configuration]: /content-management/image-processing/#exif-data +[`time.Format`]: /functions/time/format diff --git a/docs/content/en/methods/resource/Fill.md b/docs/content/en/methods/resource/Fill.md new file mode 100644 index 000000000..8bbaf93ee --- /dev/null +++ b/docs/content/en/methods/resource/Fill.md @@ -0,0 +1,48 @@ +--- +title: Fill +description: Applicable to images, returns an image resource cropped and resized to the given dimensions. +categories: [] +keywords: [] +action: + related: + - methods/resource/Crop + - methods/resource/Fit + - methods/resource/Resize + - methods/resource/Process + - functions/images/Process + returnType: images.ImageResource + signatures: [RESOURCE.Fill SPEC] +toc: true +--- + +Crop and resize an image to match the given dimensions. You must provide both width and height. + +```go-html-template +{{ with resources.Get "images/original.jpg" }} + {{ with .Fill "200x200" }} + <img src="{{ .RelPermalink }}" width="{{ .Width }}" height="{{ .Height }}" alt=""> + {{ end }} +{{ end }} +``` + +{{% include "methods/resource/_common/global-page-remote-resources.md" %}} + +{{% include "/methods/resource/_common/processing-spec.md" %}} + +## Example + +```go-html-template +{{ with resources.Get "images/original.jpg" }} + {{ with .Fill "200x200 top webp q85 lanczos" }} + <img src="{{ .RelPermalink }}" width="{{ .Width }}" height="{{ .Height }}" alt=""> + {{ end }} +{{ end }} +``` + +{{< img + src="images/examples/zion-national-park.jpg" + alt="Zion National Park" + filter="Process" + filterArgs="fill 200x200 top webp q85 lanczos" + example=true +>}} diff --git a/docs/content/en/methods/resource/Filter.md b/docs/content/en/methods/resource/Filter.md new file mode 100644 index 000000000..329168da7 --- /dev/null +++ b/docs/content/en/methods/resource/Filter.md @@ -0,0 +1,68 @@ +--- +title: Filter +description: Applicable to images, applies one or more image filters to the given image resource. +categories: [] +keywords: [] +action: + related: + - functions/images/Filter + returnType: resources.resourceAdapter + signatures: [RESOURCE.Filter FILTER...] +toc: true +--- + +Apply one or more [image filters](#image-filters) to the given image. + +To apply a single filter: + +```go-html-template +{{ with resources.Get "images/original.jpg" }} + {{ with .Filter images.Grayscale }} + <img src="{{ .RelPermalink }}" width="{{ .Width }}" height="{{ .Height }}" alt=""> + {{ end }} +{{ end }} +``` + +To apply two or more filters, executing from left to right: + +```go-html-template +{{ $filters := slice + images.Grayscale + (images.GaussianBlur 8) +}} +{{ with resources.Get "images/original.jpg" }} + {{ with .Filter $filters }} + <img src="{{ .RelPermalink }}" width="{{ .Width }}" height="{{ .Height }}" alt=""> + {{ end }} +{{ end }} +``` + +You can also apply image filters using the [`images.Filter`] function. + +[`images.Filter`]: /functions/images/filter + +{{% include "methods/resource/_common/global-page-remote-resources.md" %}} + +## Example + +```go-html-template +{{ with resources.Get "images/original.jpg" }} + {{ with .Filter images.Grayscale }} + <img src="{{ .RelPermalink }}" width="{{ .Width }}" height="{{ .Height }}" alt=""> + {{ end }} +{{ end }} +``` + +{{< img + src="images/examples/zion-national-park.jpg" + alt="Zion National Park" + filter="Grayscale" + filterArgs="" + example=true +>}} + +## Image filters + +Use any of these filters with the `Filter` method. + +{{< list-pages-in-section path=/functions/images filter=functions_images_no_filters filterType=exclude >}} diff --git a/docs/content/en/methods/resource/Fit.md b/docs/content/en/methods/resource/Fit.md new file mode 100644 index 000000000..13354fe5a --- /dev/null +++ b/docs/content/en/methods/resource/Fit.md @@ -0,0 +1,48 @@ +--- +title: Fit +description: Applicable to images, returns an image resource downscaled to fit the given dimensions while maintaining aspect ratio. +categories: [] +keywords: [] +action: + related: + - methods/resource/Crop + - methods/resource/Fill + - methods/resource/Resize + - methods/resource/Process + - functions/images/Process + returnType: images.ImageResource + signatures: [RESOURCE.Fit SPEC] +toc: true +--- + +Downscale an image to fit the given dimensions while maintaining aspect ratio. You must provide both width and height. + +```go-html-template +{{ with resources.Get "images/original.jpg" }} + {{ with .Fit "200x200" }} + <img src="{{ .RelPermalink }}" width="{{ .Width }}" height="{{ .Height }}" alt=""> + {{ end }} +{{ end }} +``` + +{{% include "methods/resource/_common/global-page-remote-resources.md" %}} + +{{% include "/methods/resource/_common/processing-spec.md" %}} + +## Example + +```go-html-template +{{ with resources.Get "images/original.jpg" }} + {{ with .Fit "300x175 webp q85 lanczos" }} + <img src="{{ .RelPermalink }}" width="{{ .Width }}" height="{{ .Height }}" alt=""> + {{ end }} +{{ end }} +``` + +{{< img + src="images/examples/zion-national-park.jpg" + alt="Zion National Park" + filter="Process" + filterArgs="fit 300x175 webp q85 lanczos" + example=true +>}} diff --git a/docs/content/en/methods/resource/Height.md b/docs/content/en/methods/resource/Height.md new file mode 100644 index 000000000..dcaf6c514 --- /dev/null +++ b/docs/content/en/methods/resource/Height.md @@ -0,0 +1,27 @@ +--- +title: Height +description: Applicable to images, returns the height of the given resource. +categories: [] +keywords: [] +action: + related: + - methods/resource/Width + returnType: int + signatures: [RESOURCE.Height] +--- + +```go-html-template +{{ with resources.Get "images/a.jpg" }} + {{ .Height }} → 400 +{{ end }} +``` + +Use the `Width` and `Height` methods together when rendering an `img` element: + +```go-html-template +{{ with resources.Get "images/a.jpg" }} + <img src="{{ .RelPermalink }}" width="{{ .Width }}" height="{{ .Height }}"> +{{ end }} +``` + +{{% include "methods/resource/_common/global-page-remote-resources.md" %}} diff --git a/docs/content/en/methods/resource/Key.md b/docs/content/en/methods/resource/Key.md new file mode 100644 index 000000000..15927aea9 --- /dev/null +++ b/docs/content/en/methods/resource/Key.md @@ -0,0 +1,45 @@ +--- +title: Key +description: Returns the unique key for the given resource, equivalent to its publishing path. +categories: [] +keywords: [] +action: + related: + - methods/resource/Permalink + - methods/resource/RelPermalink + - methods/resource/Publish + returnType: string + signatures: [RESOURCE.Key] +--- + +By way of example, consider this site configuration: + +{{< code-toggle file=hugo >}} +baseURL = 'https://example.org/docs/' +{{< /code-toggle >}} + +And this template: + +```go-html-template + {{ with resources.Get "images/a.jpg" }} + {{ with resources.Copy "foo/bar/b.jpg" . }} + {{ .Key }} → foo/bar/b.jpg + + {{ .Name }} → images/a.jpg + {{ .Title }} → images/a.jpg + + {{ .RelPermalink }} → /docs/foo/bar/b.jpg + {{ end }} + {{ end }} +``` + +We used the [`resources.Copy`] function to change the publishing path. The `Key` method returns the updated path, but note that it is different than the value returned by [`RelPermalink`]. The `RelPermalink` value includes the subdirectory segment of the `baseURL` in the site configuration. + +The `Key` method is useful if you need to get the resource's publishing path without publishing the resource. Unlike the `Permalink`, `RelPermalink`, or `Publish` methods, calling `Key` will not publish the resource. + + +{{% include "methods/resource/_common/global-page-remote-resources.md" %}} + +[`Permalink`]: /methods/resource/permalink +[`RelPermalink`]: /methods/resource/relpermalink +[`resources.Copy`]: /functions/resources/copy diff --git a/docs/content/en/methods/resource/MediaType.md b/docs/content/en/methods/resource/MediaType.md new file mode 100644 index 000000000..6dea8706c --- /dev/null +++ b/docs/content/en/methods/resource/MediaType.md @@ -0,0 +1,52 @@ +--- +title: MediaType +description: Returns a media type object for the given resource. +categories: [] +keywords: [] +action: + related: [] + returnType: media.Type + signatures: [RESOURCE.MediaType] +--- + +The `MediaType` method on a `Resource` object returns an object with additional methods. + +## Methods + +Type +: (`string`) The resource's media type. + +```go-html-template +{{ with resources.Get "images/a.jpg" }} + {{ .MediaType.Type }} → image/jpeg +{{ end }} +``` + +MainType +: (`string`) The main type of the resource’s media type. + +```go-html-template +{{ with resources.Get "images/a.jpg" }} + {{ .MediaType.MainType }} → image +{{ end }} +``` + +SubType +: (`string`) The subtype of the resource’s media type. This may or may not correspond to the file suffix. + +```go-html-template +{{ with resources.Get "images/a.jpg" }} + {{ .MediaType.SubType }} → jpeg +{{ end }} +``` + +Suffixes +: (`slice`) A slice of possible file suffixes for the resource’s media type. + +```go-html-template +{{ with resources.Get "images/a.jpg" }} + {{ .MediaType.Suffixes }} → [jpg jpeg jpe jif jfif] +{{ end }} +``` + +{{% include "methods/resource/_common/global-page-remote-resources.md" %}} diff --git a/docs/content/en/methods/resource/Name.md b/docs/content/en/methods/resource/Name.md new file mode 100644 index 000000000..01b75e5b2 --- /dev/null +++ b/docs/content/en/methods/resource/Name.md @@ -0,0 +1,82 @@ +--- +title: Name +description: Returns the name of the given resource as optionally defined in front matter, falling back to a relative path or hashed file name depending on resource type. +categories: [] +keywords: [] +action: + related: + - methods/resource/Title + returnType: string + signatures: [RESOURCE.Name] +toc: true +--- + +The value returned by the `Name` method on a `Resource` object depends on the resource type. + +## Global resource + +With a [global resource], the `Name` method returns the path to the resource, relative to the assets directory. + +```text +assets/ +└── images/ + └── a.jpg +``` + +```go-html-template +{{ with resources.Get "images/a.jpg" }} + {{ .Name }} → images/a.jpg +{{ end }} +``` + +## Page resource + +With a [page resource], the `Name` method returns the path to the resource, relative to the page bundle. + +```text +content/ +├── posts/ +│ ├── post-1/ +│ │ ├── images/ +│ │ │ └── a.jpg +│ │ └── index.md +│ └── _index.md +└── _index.md +``` + +```go-html-template +{{ with .Resources.Get "images/a.jpg" }} + {{ .Name }} → images/a.jpg +{{ end }} +``` + +If you create an element in the `resources` array in front matter, the `Name` method returns the value of the `name` parameter: + +{{< code-toggle file=content/posts/post-1.md fm=true >}} +title = 'Post 1' +[[resources]] +src = 'images/a.jpg' +name = 'cat' +title = 'Felix the cat' +[resources.params] +temperament = 'malicious' +{{< /code-toggle >}} + +```go-html-template +{{ with .Resources.Get "cat" }} + {{ .Name }} → cat +{{ end }} +``` +## Remote resource + +With a [remote resource], the `Name` method returns a hashed file name. + +```go-html-template +{{ with resources.GetRemote "https://example.org/images/a.jpg" }} + {{ .Name }} → a_18432433023265451104.jpg +{{ end }} +``` + +[global resource]: /getting-started/glossary/#global-resource +[page resource]: /getting-started/glossary/#page-resource +[remote resource]: /getting-started/glossary/#remote-resource diff --git a/docs/content/en/methods/resource/Params.md b/docs/content/en/methods/resource/Params.md new file mode 100644 index 000000000..275182c46 --- /dev/null +++ b/docs/content/en/methods/resource/Params.md @@ -0,0 +1,65 @@ +--- +title: Params +description: Returns a map of resource parameters as defined in front matter. +categories: [] +keywords: [] +action: + related: [] + returnType: map + signatures: [RESOURCE.Params] +--- + +Use the `Params` method with [page resources]. It is not applicable to either [global] or [remote] resources. + +[global]: /getting-started/glossary/#global-resource +[page resources]: /getting-started/glossary/#page-resource +[remote]: /getting-started/glossary/#remote-resource + +With this content structure: + +```text +content/ +├── posts/ +│ ├── cats/ +│ │ ├── images/ +│ │ │ └── a.jpg +│ │ └── index.md +│ └── _index.md +└── _index.md +``` + +And this front matter: + +{{< code-toggle file=content/posts/cats.md fm=true >}} +title = 'Cats' +[[resources]] + src = 'images/a.jpg' + title = 'Felix the cat' + [resources.params] + alt = 'Photograph of black cat' + temperament = 'vicious' +{{< /code-toggle >}} + +And this template: + +```go-html-template +{{ with .Resources.Get "images/a.jpg" }} + <figure> + <img alt="{{ .Params.alt }}" src="{{ .RelPermalink }}" width="{{ .Width }}" height="{{ .Height }}"> + <figcaption>{{ .Title }} is {{ .Params.temperament }}</figcaption> + </figure> +{{ end }} +``` + +Hugo renders: + +```html +<figure> + <img alt="Photograph of black cat" src="/posts/post-1/images/a.jpg" width="600" height="400"> + <figcaption>Felix the cat is vicious</figcaption> +</figure> +``` + +See the [page resources] section for more information. + +[page resources]: /content-management/page-resources diff --git a/docs/content/en/methods/resource/Permalink.md b/docs/content/en/methods/resource/Permalink.md new file mode 100644 index 000000000..ab0ad41b0 --- /dev/null +++ b/docs/content/en/methods/resource/Permalink.md @@ -0,0 +1,25 @@ +--- +title: Permalink +description: Publishes the given resource and returns its permalink. +categories: [] +keywords: [] +action: + related: + - methods/resource/RelPermalink + - methods/resource/Publish + - methods/resource/Key + returnType: string + signatures: [RESOURCE.Permalink] +--- + +The `Permalink` method on a `Resource` object writes the resource to the publish directory, typically `public`, and returns its [permalink]. + +[permalink]: /getting-started/glossary/#permalink + +```go-html-template +{{ with resources.Get "images/a.jpg" }} + {{ .Permalink }} → https://example.org/images/a.jpg +{{ end }} +``` + +{{% include "methods/resource/_common/global-page-remote-resources.md" %}} diff --git a/docs/content/en/methods/resource/Process.md b/docs/content/en/methods/resource/Process.md new file mode 100644 index 000000000..3c88492df --- /dev/null +++ b/docs/content/en/methods/resource/Process.md @@ -0,0 +1,66 @@ +--- +title: Process +description: Applicable to images, returns an image resource processed with the given specification. +categories: [] +keywords: [] +action: + related: + - methods/resource/Crop + - methods/resource/Fit + - methods/resource/Fill + - methods/resource/Resize + - functions/images/Process + returnType: images.ImageResource + signatures: [RESOURCE.Process SPEC] +toc: true +--- + +Process an image with the given specification. The specification can contain an optional action, one of `crop`, `fill`, `fit`, or `resize`. This means that you can use this method instead of [`Crop`], [`Fill`], [`Fit`], or [`Resize`]. + +```go-html-template +{{ with resources.Get "images/original.jpg" }} + {{ with .Process "crop 200x200" }} + <img src="{{ .RelPermalink }}" width="{{ .Width }}" height="{{ .Height }}" alt=""> + {{ end }} +{{ end }} +``` + +You can also use this method to apply simple transformations such as rotation and conversion: + +```go-html-template +{{/* Rotate 90 degrees counter-clockwise. */}} +{{ $image := $image.Process "r90" }} + +{{/* Convert to WebP. */}} +{{ $image := $image.Process "webp" }} +``` + +The `Process` method is also available as a filter, which is more effective if you need to apply multiple filters to an image. See [`images.Process`]. + +{{% include "methods/resource/_common/global-page-remote-resources.md" %}} + +{{% include "/methods/resource/_common/processing-spec.md" %}} + +## Example + +```go-html-template +{{ with resources.Get "images/original.jpg" }} + {{ with .Process "crop 200x200 topright webp q85 lanczos" }} + <img src="{{ .RelPermalink }}" width="{{ .Width }}" height="{{ .Height }}" alt=""> + {{ end }} +{{ end }} +``` + +{{< img + src="images/examples/zion-national-park.jpg" + alt="Zion National Park" + filter="Process" + filterArgs="crop 200x200 topright webp q85 lanczos" + example=true +>}} + +[`Crop`]: /methods/resource/crop +[`Fill`]: /methods/resource/fill +[`Fit`]: /methods/resource/fit +[`Resize`]: /methods/resource/resize +[`images.Process`]: /functions/images/process diff --git a/docs/content/en/methods/resource/Publish.md b/docs/content/en/methods/resource/Publish.md new file mode 100644 index 000000000..b090bfe5a --- /dev/null +++ b/docs/content/en/methods/resource/Publish.md @@ -0,0 +1,35 @@ +--- +title: Publish +description: Publishes the given resource. +categories: [] +keywords: [] +action: + related: + - methods/resource/Permalink + - methods/resource/RelPermalink + - methods/resource/Key + returnType: nil + signatures: [RESOURCE.Publish] +--- + +The `Publish` method on a `Resource` object writes the resource to the publish directory, typically `public`. + +```go-html-template +{{ with resources.Get "images/a.jpg" }} + {{ .Publish }} +{{ end }} +``` + +The `Permalink` and `RelPermalink` methods also publish a resource. `Publish` is a convenience method for publishing without a return value. For example, this: + +```go-html-template +{{ $resource.Publish }} +``` + +Instead of this: + +```go-html-template +{{ $noop := $resource.Permalink }} +``` + +{{% include "methods/resource/_common/global-page-remote-resources.md" %}} diff --git a/docs/content/en/methods/resource/RelPermalink.md b/docs/content/en/methods/resource/RelPermalink.md new file mode 100644 index 000000000..2b96c35d7 --- /dev/null +++ b/docs/content/en/methods/resource/RelPermalink.md @@ -0,0 +1,25 @@ +--- +title: RelPermalink +description: Publishes the given resource and returns its relative permalink. +categories: [] +keywords: [] +action: + related: + - methods/resource/Permalink + - methods/resource/Publish + - methods/resource/Key + returnType: string + signatures: [RESOURCE.RelPermalink] +--- + +The `Permalink` method on a `Resource` object writes the resource to the publish directory, typically `public`, and returns its [relative permalink]. + +[relative permalink]: /getting-started/glossary/#relative-permalink + +```go-html-template +{{ with resources.Get "images/a.jpg" }} + {{ .RelPermalink }} → /images/a.jpg +{{ end }} +``` + +{{% include "methods/resource/_common/global-page-remote-resources.md" %}} diff --git a/docs/content/en/methods/resource/Resize.md b/docs/content/en/methods/resource/Resize.md new file mode 100644 index 000000000..4ba054bb5 --- /dev/null +++ b/docs/content/en/methods/resource/Resize.md @@ -0,0 +1,49 @@ +--- +title: Resize +description: Applicable to images, returns an image resource resized to the given width and/or height. +categories: [] +keywords: [] +action: + related: + - methods/resource/Crop + - methods/resource/Fit + - methods/resource/Fill + - methods/resource/Process + - functions/images/Process + returnType: images.ImageResource + signatures: [RESOURCE.Resize SPEC] +--- + +Resize an image to the given width and/or height. + +If you specify both width and height, the resulting image will be disproportionally scaled unless the original image has the same aspect ratio. + +```go-html-template +{{ with resources.Get "images/original.jpg" }} + {{ with .Resize "300x" }} + <img src="{{ .RelPermalink }}" width="{{ .Width }}" height="{{ .Height }}" alt=""> + {{ end }} +{{ end }} +``` + +{{% include "methods/resource/_common/global-page-remote-resources.md" %}} + +{{% include "/methods/resource/_common/processing-spec.md" %}} + +## Example + +```go-html-template +{{ with resources.Get "images/original.jpg" }} + {{ with .Resize "300x webp q85 lanczos" }} + <img src="{{ .RelPermalink }}" width="{{ .Width }}" height="{{ .Height }}" alt=""> + {{ end }} +{{ end }} +``` + +{{< img + src="images/examples/zion-national-park.jpg" + alt="Zion National Park" + filter="Process" + filterArgs="resize 300x webp q85 lanczos" + example=true +>}} diff --git a/docs/content/en/methods/resource/ResourceType.md b/docs/content/en/methods/resource/ResourceType.md new file mode 100644 index 000000000..db52e7b10 --- /dev/null +++ b/docs/content/en/methods/resource/ResourceType.md @@ -0,0 +1,43 @@ +--- +title: ResourceType +description: Returns the main type of the given resource's media type. +categories: [] +keywords: [] +action: + related: [] + returnType: string + signatures: [RESOURCE.ResourceType] +--- + +Common resource types include `audio`, `image`, `text`, and `video`. + +```go-html-template +{{ with resources.Get "image/a.jpg" }} + {{ .ResourceType }} → image + {{ .MediaType.MainType }} → image +{{ end }} +``` + +When working with content files, the resource type is `page`. + +```text +content/ +├── lessons/ +│ ├── lesson-1/ +│ │ ├── _objectives.md <-- resource type = page +│ │ ├── _topics.md <-- resource type = page +│ │ ├── _example.jpg <-- resource type = image +│ │ └── index.md +│ └── _index.md +└── _index.md +``` + +With the structure above, we can range through page resources of type `page` to build content: + +{{< code file=layouts/lessons/single.html >}} +{{ range .Resources.ByType "page" }} + {{ .Content }} +{{ end }} +{{< /code >}} + +{{% include "methods/resource/_common/global-page-remote-resources.md" %}} diff --git a/docs/content/en/methods/resource/Title.md b/docs/content/en/methods/resource/Title.md new file mode 100644 index 000000000..e30f86d2e --- /dev/null +++ b/docs/content/en/methods/resource/Title.md @@ -0,0 +1,95 @@ +--- +title: Title +description: Returns the title of the given resource as optionally defined in front matter, falling back to a relative path or hashed file name depending on resource type. +categories: [] +keywords: [] +action: + related: + - methods/resource/Name + returnType: string + signatures: [RESOURCE.Title] +toc: true +--- + +The value returned by the `Title` method on a `Resource` object depends on the resource type. + +## Global resource + +With a [global resource], the `Title` method returns the path to the resource, relative to the assets directory. + +```text +assets/ +└── images/ + └── a.jpg +``` + +```go-html-template +{{ with resources.Get "images/a.jpg" }} + {{ .Title }} → images/a.jpg +{{ end }} +``` + +## Page resource + +With a [page resource], the `Title` method returns the path to the resource, relative to the page bundle. + +```text +content/ +├── posts/ +│ ├── post-1/ +│ │ ├── images/ +│ │ │ └── a.jpg +│ │ └── index.md +│ └── _index.md +└── _index.md +``` + +```go-html-template +{{ with .Resources.Get "images/a.jpg" }} + {{ .Title }} → images/a.jpg +{{ end }} +``` + +If you create an element in the `resources` array in front matter, the `Title` method returns the value of the `title` parameter: + +{{< code-toggle file=content/posts/post-1.md fm=true >}} +title = 'Post 1' +[[resources]] +src = 'images/a.jpg' +name = 'cat' +title = 'Felix the cat' +[resources.params] +temperament = 'malicious' +{{< /code-toggle >}} + +```go-html-template +{{ with .Resources.Get "cat" }} + {{ .Title }} → Felix the cat +{{ end }} +``` + +If the page resource is a content file, the `Title` methods return the `title` field as defined in front matter. + +```text +content/ +├── lessons/ +│ ├── lesson-1/ +│ │ ├── _objectives.md <-- resource type = page +│ │ └── index.md +│ └── _index.md +└── _index.md +``` + +## Remote resource + +With a [remote resource], the `Title` method returns a hashed file name. + +```go-html-template +{{ with resources.GetRemote "https://example.org/images/a.jpg" }} + {{ .Title }} → a_18432433023265451104.jpg +{{ end }} +``` + +[global resource]: /getting-started/glossary/#global-resource +[page resource]: /getting-started/glossary/#page-resource +[remote resource]: /getting-started/glossary/#remote-resource diff --git a/docs/content/en/methods/resource/Width.md b/docs/content/en/methods/resource/Width.md new file mode 100644 index 000000000..8b96c95e8 --- /dev/null +++ b/docs/content/en/methods/resource/Width.md @@ -0,0 +1,27 @@ +--- +title: Width +description: Applicable to images, returns the width of the given resource. +categories: [] +keywords: [] +action: + related: + - methods/resource/Height + returnType: int + signatures: [RESOURCE.Width] +--- + +```go-html-template +{{ with resources.Get "images/a.jpg" }} + {{ .Width }} → 600 +{{ end }} +``` + +Use the `Width` and `Height` methods together when rendering an `img` element: + +```go-html-template +{{ with resources.Get "images/a.jpg" }} + <img src="{{ .RelPermalink }}" width="{{ .Width }}" height="{{ .Height }}"> +{{ end }} +``` + +{{% include "methods/resource/_common/global-page-remote-resources.md" %}} diff --git a/docs/content/en/methods/resource/_common/_index.md b/docs/content/en/methods/resource/_common/_index.md new file mode 100644 index 000000000..47d5812fb --- /dev/null +++ b/docs/content/en/methods/resource/_common/_index.md @@ -0,0 +1,13 @@ +--- +cascade: + _build: + list: never + publishResources: false + render: never +--- + +<!-- +Files within this headless branch bundle are markdown snippets. Each file must contain front matter delimiters, though front matter fields are not required. + +Include the rendered content using the "include" shortcode. +--> diff --git a/docs/content/en/methods/resource/_common/global-page-remote-resources.md b/docs/content/en/methods/resource/_common/global-page-remote-resources.md new file mode 100644 index 000000000..4ea4d1b87 --- /dev/null +++ b/docs/content/en/methods/resource/_common/global-page-remote-resources.md @@ -0,0 +1,13 @@ +--- +# Do not remove front matter. +--- + +{{% note %}} + +Use this method with [global], [page], or [remote] resources. + +[global]: /getting-started/glossary/#global-resource +[page]: /getting-started/glossary/#page-resource +[remote]: /getting-started/glossary/#remote-resource + +{{% /note %}} diff --git a/docs/content/en/methods/resource/_common/processing-spec.md b/docs/content/en/methods/resource/_common/processing-spec.md new file mode 100644 index 000000000..b12a21d3a --- /dev/null +++ b/docs/content/en/methods/resource/_common/processing-spec.md @@ -0,0 +1,36 @@ +--- +# Do not remove front matter. +--- + +## Process specification + +The process specification is a space-delimited, case-insensitive list of one or more of the following in any sequence: + +action +: Applicable to the [`Process`](/methods/resource/process) method only. Specify zero or one of `crop`, `fill`, `fit`, or `resize`. If you specify an action you must also provide dimensions. + +dimensions +: Provide width _or_ height when using the [`Resize`](/methods/resource/resize) method, else provide both width _and_ height. See [details](/content-management/image-processing/#dimensions). + +anchor +: Use with the [`Crop`](/methods/resource/crop) and [`Fill`](/methods/resource/fill) methods. Specify zero or one of `TopLeft`, `Top`, `TopRight`, `Left`, `Center`, `Right`, `BottomLeft`, `Bottom`, `BottomRight`, or `Smart`. Default is `Smart`. See [details](/content-management/image-processing/#anchor). + +rotation +: Typically specify zero or one of `r90`, `r180`, or `r270`. Also supports arbitrary rotation angles. See [details](/content-management/image-processing/#rotation). + +target format +: Specify zero or one of `gif`, `jpeg`, `png`, `tiff`, or `webp`. See [details](/content-management/image-processing/#target-format). + +quality +: Applicable to JPEG and WebP images. Optionally specify `qN` where `N` is an integer in the range [0, 100]. Default is `75`. See [details](/content-management/image-processing/#quality). + +hint +: Applicable to WebP images and equivalent to the `-preset` flag for the [`cwebp`] encoder. Specify zero or one of `drawing`, `icon`, `photo`, `picture`, or `text`. Default is `photo`. See [details](/content-management/image-processing/#hint). + +[`cwebp`]: https://developers.google.com/speed/webp/docs/cwebp + +background color +: When converting a PNG or WebP with transparency to a format that does not support transparency, optionally specify a background color using a 3-digit or a 6-digit hexadecimal color code. Default is `#ffffff` (white). See [details](/content-management/image-processing/#background-color). + +resampling filter +: Typically specify zero or one of `Box`, `Lanczos`, `CatmullRom`, `MitchellNetravali`, `Linear`, or `NearestNeighbor`. Other resampling filters are available. See [details](/content-management/image-processing/#resampling-filter). diff --git a/docs/content/en/methods/resource/_index.md b/docs/content/en/methods/resource/_index.md new file mode 100644 index 000000000..e9426e1a5 --- /dev/null +++ b/docs/content/en/methods/resource/_index.md @@ -0,0 +1,12 @@ +--- +title: Resource methods +linkTitle: Resource +description: Use these methods with global, page, and remote Resource objects. +categories: [] +keywords: [] +menu: + docs: + parent: methods +--- + +Use these methods with global, page, and remote Resource objects. diff --git a/docs/content/en/methods/shortcode/Get.md b/docs/content/en/methods/shortcode/Get.md new file mode 100644 index 000000000..cd674614f --- /dev/null +++ b/docs/content/en/methods/shortcode/Get.md @@ -0,0 +1,51 @@ +--- +title: Get +description: Returns the value of the given parameter. +categories: [] +keywords: [] +action: + related: + - methods/shortcode/IsNamedParams + - methods/shortcode/Params + returnType: any + signatures: [SHORTCODE.Get PARAM] +toc: true +--- + +Specify the parameter by position or by name. When calling a shortcode within markdown, use either positional or named parameters, but not both. + +{{% note %}} +Some shortcodes support positional parameters, some support named parameters, and others support both. Refer to the shortcode's documentation for usage details. +{{% /note %}} + +## Positional parameters + +This shortcode call uses positional parameters: + +{{< code file=content/about.md lang=md >}} +{{</* myshortcode "Hello" "world" */>}} +{{< /code >}} + +To retrieve parameters by position: + +{{< code file=layouts/shortcodes/myshortcode.html >}} +{{ printf "%s %s." (.Get 0) (.Get 1) }} → Hello world. +{{< /code >}} + +## Named parameters + +This shortcode call uses named parameters: + +{{< code file=content/about.md lang=md >}} +{{</* myshortcode greeting="Hello" firstName="world" */>}} +{{< /code >}} + +To retrieve parameters by name: + +{{< code file=layouts/shortcodes/myshortcode.html >}} +{{ printf "%s %s." (.Get "greeting") (.Get "firstName") }} → Hello world. +{{< /code >}} + +{{% note %}} +Parameter names are case-sensitive. +{{% /note %}} diff --git a/docs/content/en/methods/shortcode/Inner.md b/docs/content/en/methods/shortcode/Inner.md new file mode 100644 index 000000000..de7c284cb --- /dev/null +++ b/docs/content/en/methods/shortcode/Inner.md @@ -0,0 +1,153 @@ +--- +title: Inner +description: Returns the content between opening and closing shortcode tags, applicable when the shortcode call includes a closing tag. +categories: [] +keywords: [] +action: + related: + - functions/strings/Trim + - methods/page/RenderString + - functions/transform/Markdownify + - methods/shortcode/InnerDeindent + returnType: template.HTML + signatures: [SHORTCODE.Inner] +--- + +This content: + +{{< code file=content/services.md lang=md >}} +{{</* card title="Product Design" */>}} +We design the **best** widgets in the world. +{{</* /card */>}} +{{< /code >}} + +With this shortcode: + +{{< code file=layouts/shortcodes/card.html >}} +<div class="card"> + {{ with .Get "title" }} + <div class="card-title">{{ . }}</div> + {{ end }} + <div class="card-content"> + {{ trim .Inner "\r\n" }} + </div> +</div> +{{< /code >}} + +Is rendered to: + +```html +<div class="card"> + <div class="card-title">Product Design</div> + <div class="card-content"> + We design the **best** widgets in the world. + </div> +</div> +``` + +{{% note %}} +Content between opening and closing shortcode tags may include leading and/or trailing newlines, depending on placement within the markdown. Use the [`trim`] function as shown above to remove both carriage returns and newlines. + +[`trim`]: /functions/strings/trim +{{% /note %}} + +{{% note %}} +In the example above, the value returned by `Inner` is markdown, but it was rendered as plain text. Use either of the following approaches to render markdown to HTML. +{{% /note %}} + + +## Use the RenderString method + +Let's modify the example above to pass the value returned by `Inner` through the [`RenderString`] method on the `Page` object: + +[`RenderString`]: /methods/page/renderstring + +{{< code file=layouts/shortcodes/card.html >}} +<div class="card"> + {{ with .Get "title" }} + <div class="card-title">{{ . }}</div> + {{ end }} + <div class="card-content"> + {{ trim .Inner "\r\n" | .Page.RenderString }} + </div> +</div> +{{< /code >}} + +Hugo renders this to: + +```html +<div class="card"> + <div class="card-title">Product design</div> + <div class="card-content"> + We produce the <strong>best</strong> widgets in the world. + </div> +</div> +``` + +You can use the [`markdownify`] function instead of the `RenderString` method, but the latter is more flexible. See [details]. + +[details]: /methods/page/renderstring +[`markdownify`]: /functions/transform/markdownify + +## Use alternate notation + +Instead of calling the shortcode with the `{{</* */>}}` notation, use the `{{%/* */%}}` notation: + +{{< code file=content/services.md lang=md >}} +{{%/* card title="Product Design" */%}} +We design the **best** widgets in the world. +{{%/* /card */%}} +{{< /code >}} + +When you use the `{{%/* */%}}` notation, Hugo renders the entire shortcode as markdown, requiring the following changes. + +First, configure the renderer to allow raw HTML within markdown: + +{{< code-toggle file=hugo >}} +[markup.goldmark.renderer] +unsafe = true +{{< /code-toggle >}} + +This configuration is not unsafe if _you_ control the content. Read more about Hugo's [security model]. + +Second, because we are rendering the entire shortcode as markdown, we must adhere to the rules governing [indentation] and inclusion of [raw HTML blocks] as provided in the [CommonMark] specification. + +{{< code file=layouts/shortcodes/card.html >}} +<div class="card"> + {{ with .Get "title" }} + <div class="card-title">{{ . }}</div> + {{ end }} + <div class="card-content"> + + {{ trim .Inner "\r\n" }} + </div> +</div> +{{< /code >}} + +The difference between this and the previous example is subtle but required. Note the change in indentation, the addition of a blank line, and removal of the `RenderString` method. + +```diff +--- layouts/shortcodes/a.html ++++ layouts/shortcodes/b.html +@@ -1,8 +1,9 @@ + <div class="card"> + {{ with .Get "title" }} +- <div class="card-title">{{ . }}</div> ++ <div class="card-title">{{ . }}</div> + {{ end }} + <div class="card-content"> +- {{ trim .Inner "\r\n" | .Page.RenderString }} ++ ++ {{ trim .Inner "\r\n" }} + </div> + </div> +``` + +{{% note %}} +When using the `{{%/* */%}}` notation, do not pass the value returned by `Inner` through the `RenderString` method or the `markdownify` function. +{{% /note %}} + +[commonmark]: https://commonmark.org/ +[indentation]: https://spec.commonmark.org/0.30/#indented-code-blocks +[raw html blocks]: https://spec.commonmark.org/0.30/#html-blocks +[security model]: /about/security-model/ diff --git a/docs/content/en/methods/shortcode/InnerDeindent.md b/docs/content/en/methods/shortcode/InnerDeindent.md new file mode 100644 index 000000000..136412bc7 --- /dev/null +++ b/docs/content/en/methods/shortcode/InnerDeindent.md @@ -0,0 +1,99 @@ +--- +title: InnerDeindent +description: Returns the content between opening and closing shortcode tags, with indentation removed, applicable when the shortcode call includes a closing tag. +categories: [] +keywords: [] +action: + related: + - methods/shortcode/Inner + returnType: template.HTML + signatures: [SHORTCODE.InnerDeindent] +--- + +Similar to the [`Inner`] method, `InnerDeindent` returns the content between opening and closing shortcode tags. However, with `InnerDeindent`, indentation before the content is removed. + +This allows us to effectively bypass the rules governing [indentation] as provided in the [CommonMark] specification. + +Consider this markdown, an unordered list with a small gallery of thumbnail images within each list item: + +{{< code file=content/about.md lang=md >}} +- Gallery one + + {{</* gallery */>}} + ![kitten a](thumbnails/a.jpg) + ![kitten b](thumbnails/b.jpg) + {{</* /gallery */>}} + +- Gallery two + + {{</* gallery */>}} + ![kitten c](thumbnails/c.jpg) + ![kitten d](thumbnails/d.jpg) + {{</* /gallery */>}} +{{< /code >}} + +In the example above, notice that the content between the opening and closing shortcode tags is indented by four spaces. Per the CommonMark specification, this is treated as an indented code block. + +With this shortcode, calling `Inner` instead of `InnerDeindent`: + +{{< code file=layouts/shortcodes/gallery.html >}} +<div class="gallery"> + {{ trim .Inner "\r\n" | .Page.RenderString }} +</div> +{{< /code >}} + +Hugo renders the markdown to: + +```html +<ul> + <li> + <p>Gallery one</p> + <div class="gallery"> + <pre><code>![kitten a](images/a.jpg) + ![kitten b](images/b.jpg) + </code></pre> + </div> + </li> + <li> + <p>Gallery two</p> + <div class="gallery"> + <pre><code>![kitten c](images/c.jpg) + ![kitten d](images/d.jpg) + </code></pre> + </div> + </li> +</ul> +``` + +Although technically correct per the CommonMark specification, this is not what we want. If we remove the indentation using the `InnerDeindent` method: + +{{< code file=layouts/shortcodes/gallery.html >}} +<div class="gallery"> + {{ trim .InnerDeindent "\r\n" | .Page.RenderString }} +</div> +{{< /code >}} + +Hugo renders the markdown to: + +```html +<ul> + <li> + <p>Gallery one</p> + <div class="gallery"> + <img src="images/a.jpg" alt="kitten a"> + <img src="images/b.jpg" alt="kitten b"> + </div> + </li> + <li> + <p>Gallery two</p> + <div class="gallery"> + <img src="images/c.jpg" alt="kitten c"> + <img src="images/d.jpg" alt="kitten d"> + </div> + </li> +</ul> +``` + +[commonmark]: https://commonmark.org/ +[indentation]: https://spec.commonmark.org/0.30/#indented-code-blocks +[`Inner`]: /methods/shortcode/inner diff --git a/docs/content/en/methods/shortcode/IsNamedParams.md b/docs/content/en/methods/shortcode/IsNamedParams.md new file mode 100644 index 000000000..83eeb2f74 --- /dev/null +++ b/docs/content/en/methods/shortcode/IsNamedParams.md @@ -0,0 +1,30 @@ +--- +title: IsNamedParams +description: Reports whether the shortcode call uses named parameters. +categories: [] +keywords: [] +action: + related: + - methods/shortcode/Get + returnType: bool + signatures: [SHORTCODE.IsNamedParams] +--- + +To support both positional and named parameters when calling a shortcode, use the `IsNamedParams` method to determine how the shortcode was called. + +With this shortcode template: + +{{< code file=layouts/shortcodes/myshortcode.html >}} +{{ if .IsNamedParams }} + {{ printf "%s %s." (.Get "greeting") (.Get "firstName") }} +{{ else }} + {{ printf "%s %s." (.Get 0) (.Get 1) }} +{{ end }} +{{< /code >}} + +Both of these calls return the same value: + +{{< code file=content/about.md lang=md >}} +{{</* myshortcode greeting="Hello" firstName="world" */>}} +{{</* myshortcode "Hello" "world" */>}} +{{< /code >}} diff --git a/docs/content/en/methods/shortcode/Name.md b/docs/content/en/methods/shortcode/Name.md new file mode 100644 index 000000000..18bddfe1f --- /dev/null +++ b/docs/content/en/methods/shortcode/Name.md @@ -0,0 +1,29 @@ +--- +title: Name +description: Returns the shortcode file name, excluding the file extension. +categories: [] +keywords: [] +action: + related: + - methods/shortcode/Position + - functions/fmt/Errorf + returnType: string + signatures: [SHORTCODE.Name] +--- + +The `Name` method is useful for error reporting. For example, if your shortcode requires a "greeting" parameter: + +{{< code file=layouts/shortcodes/myshortcode.html >}} +{{ $greeting := "" }} +{{ with .Get "greeting" }} + {{ $greeting = . }} +{{ else }} + {{ errorf "The %q shortcode requires a 'greeting' parameter. See %s" .Name .Position }} +{{ end }} +{{< /code >}} + +In the absence of a "greeting" parameter, Hugo will throw an error message and fail the build: + +```text +ERROR The "myshortcode" shortcode requires a 'greeting' parameter. See "/home/user/project/content/about.md:11:1" +``` diff --git a/docs/content/en/methods/shortcode/Ordinal.md b/docs/content/en/methods/shortcode/Ordinal.md new file mode 100644 index 000000000..954940258 --- /dev/null +++ b/docs/content/en/methods/shortcode/Ordinal.md @@ -0,0 +1,50 @@ +--- +title: Ordinal +description: Returns the zero-based ordinal of the shortcode in relation to its parent. +categories: [] +keywords: [] +action: + related: [] + returnType: int + signatures: [SHORTCODE.Ordinal] +--- + +The `Ordinal` method returns the zero-based ordinal of the shortcode in relation to its parent. If the parent is the page itself, the ordinal represents the position of this shortcode in the page content. + +This method is useful for, among other things, assigning unique element IDs when a shortcode is called two or more times from the same page. For example: + +{{< code file=content/about.md lang=md >}} +{{</* img src="images/a.jpg" */>}} + +{{</* img src="images/b.jpg" */>}} +{{< /code >}} + +This shortcode performs error checking, then renders an HTML `img` element with a unique `id` attribute: + +{{< code file=layouts/shortcodes/img.html >}} +{{ $src := "" }} +{{ with .Get "src" }} + {{ $src = . }} + {{ with resources.Get $src }} + {{ $id := printf "img-%03d" $.Ordinal }} + <img id="{{ $id }}" src="{{ .RelPermalink }}" width="{{ .Width }}" height="{{ .Height }}" alt=""> + {{ else }} + {{ errorf "The %q shortcode was unable to find %s. See %s" $.Name $src $.Position }} + {{ end }} +{{ else }} + {{ errorf "The %q shortcode requires a 'src' parameter. See %s" .Name .Position }} +{{ end }} +{{< /code >}} + +Hugo renders the page to: + +```html +<img id="img-000" src="/images/a.jpg" width="600" height="400" alt=""> +<img id="img-001" src="/images/b.jpg" width="600" height="400" alt=""> +``` + +{{% note %}} +In the shortcode template above, the [`with`] statement is used to create conditional blocks. Remember that the `with` statement binds context (the dot) to its expression. Inside of a `with` block, preface shortcode method calls with a `$` to access the top level context passed into the template. + +[`with`]: /functions/go-template/with +{{% /note %}} diff --git a/docs/content/en/methods/shortcode/Page.md b/docs/content/en/methods/shortcode/Page.md new file mode 100644 index 000000000..8bb58fa18 --- /dev/null +++ b/docs/content/en/methods/shortcode/Page.md @@ -0,0 +1,36 @@ +--- +title: Page +description: Returns the Page object from which the shortcode was called. +categories: [] +keywords: [] +action: + related: [] + returnType: hugolib.pageForShortcode + signatures: [SHORTCODE.Page] +--- + +With this content: + +{{< code-toggle file=content/books/les-miserables.md fm=true >}} +title = 'Les Misérables' +author = 'Victor Hugo' +publication_year = 1862 +isbn = '978-0451419439' +{{< /code-toggle >}} + +Calling this shortcode: + +```text +{{</* book-details */>}} +``` + +We can access the front matter values using the `Page` method: + +{{< code file=layouts/shortcodes/book-details.html >}} +<ul> + <li>Title: {{ .Page.Title }}</li> + <li>Author: {{ .Page.Params.author }}</li> + <li>Published: {{ .Page.Params.publication_year }}</li> + <li>ISBN: {{ .Page.Params.isbn }}</li> +</ul> +{{< /code >}} diff --git a/docs/content/en/methods/shortcode/Params.md b/docs/content/en/methods/shortcode/Params.md new file mode 100644 index 000000000..63df768a6 --- /dev/null +++ b/docs/content/en/methods/shortcode/Params.md @@ -0,0 +1,33 @@ +--- +title: Params +description: Returns a collection of the shortcode parameters. +categories: [] +keywords: [] +action: + related: + - methods/shortcode/Get + returnType: any + signatures: [SHORTCODE.Params] +--- + +When you call a shortcode using positional parameters, the `Params` method returns a slice. + +{{< code file=content/about.md lang=md >}} +{{</* myshortcode "Hello" "world" */>}} +{{< /code >}} + +{{< code file=layouts/shortcodes/myshortcode.html >}} +{{ index .Params 0 }} → Hello +{{ index .Params 1 }} → world +{{< /code >}} + +When you call a shortcode using named parameters, the `Params` method returns a map. + +{{< code file=content/about.md lang=md >}} +{{</* myshortcode greeting="Hello" name="world" */>}} +{{< /code >}} + +{{< code file=layouts/shortcodes/myshortcode.html >}} +{{ .Params.greeting }} → Hello +{{ .Params.name }} → world +{{< /code >}} diff --git a/docs/content/en/methods/shortcode/Parent.md b/docs/content/en/methods/shortcode/Parent.md new file mode 100644 index 000000000..50ae521da --- /dev/null +++ b/docs/content/en/methods/shortcode/Parent.md @@ -0,0 +1,50 @@ +--- +title: Parent +description: Returns the parent shortcode context in nested shortcodes. +categories: [] +keywords: [] +action: + related: [] + returnType: hugolib.ShortcodeWithPage + signatures: [SHORTCODE.Parent] +--- + +This is useful for inheritance of common shortcode parameters from the root. + +In this contrived example, the "greeting" shortcode is the parent, and the "now" shortcode is child. + +{{< code file=content/welcome.md lang=md >}} +{{</* greeting dateFormat="Jan 2, 2006" */>}} +Welcome. Today is {{</* now */>}}. +{{</* /greeting */>}} +{{< /code >}} + +{{< code file=layouts/shortcodes/greeting.html >}} +<div class="greeting"> + {{ trim .Inner "\r\n" | .Page.RenderString }} +</div> +{{< /code >}} + +{{< code file=layouts/shortcodes/now.html >}} +{{- $dateFormat := "January 2, 2006 15:04:05" }} + +{{- with .Params }} + {{- with .dateFormat }} + {{- $dateFormat = . }} + {{- end }} +{{- else }} + {{- with .Parent.Params }} + {{- with .dateFormat }} + {{- $dateFormat = . }} + {{- end }} + {{- end }} +{{- end }} + +{{- now | time.Format $dateFormat -}} +{{< /code >}} + +The "now" shortcode formats the current time using: + +1. The `dateFormat` parameter passed to the "now" shortcode, if present +2. The `dateFormat` parameter passed to the "greeting" shortcode, if present +3. The default layout string defined at the top of the shortcode diff --git a/docs/content/en/methods/shortcode/Position.md b/docs/content/en/methods/shortcode/Position.md new file mode 100644 index 000000000..565a158bf --- /dev/null +++ b/docs/content/en/methods/shortcode/Position.md @@ -0,0 +1,33 @@ +--- +title: Position +description: Returns the filename and position from which the shortcode was called. +categories: [] +keywords: [] +action: + related: + - methods/shortcode/Name + - functions/fmt/Errorf + returnType: text.Position + signatures: [SHORTCODE.Position] +--- + +The `Position` method is useful for error reporting. For example, if your shortcode requires a "greeting" parameter: + +{{< code file=layouts/shortcodes/myshortcode.html >}} +{{ $greeting := "" }} +{{ with .Get "greeting" }} + {{ $greeting = . }} +{{ else }} + {{ errorf "The %q shortcode requires a 'greeting' parameter. See %s" .Name .Position }} +{{ end }} +{{< /code >}} + +In the absence of a "greeting" parameter, Hugo will throw an error message and fail the build: + +```text +ERROR The "myshortcode" shortcode requires a 'greeting' parameter. See "/home/user/project/content/about.md:11:1" +``` + +{{% note %}} +The position can be expensive to calculate. Limit its use to error reporting. +{{% /note %}} diff --git a/docs/content/en/methods/shortcode/Ref.md b/docs/content/en/methods/shortcode/Ref.md new file mode 100644 index 000000000..293c772d9 --- /dev/null +++ b/docs/content/en/methods/shortcode/Ref.md @@ -0,0 +1,44 @@ +--- +title: Ref +description: Returns the absolute URL of the page with the given path, language, and output format. +categories: [] +keywords: [] +action: + related: + - methods/shortcode/RelRef + - functions/urls/RelRef + - functions/urls/Ref + returnType: string + signatures: [SHORTCODE.Ref OPTIONS] +--- + +The map of option contains: + +path +: (`string`) The path to the page, relative to the content directory. Required. + +lang +: (`string`) The language (site) to search for the page. Default is the current language. Optional. + +outputFormat +: (`string`) The output format to search for the page. Default is the current output format. Optional. + +The examples below show the rendered output when visiting a page on the English language version of the site: + +```go-html-template +{{ $opts := dict "path" "/books/book-1" }} +{{ .Ref $opts }} → https://example.org/en/books/book-1/ + +{{ $opts := dict "path" "/books/book-1" "lang" "de" }} +{{ .Ref $opts }} → https://example.org/de/books/book-1/ + +{{ $opts := dict "path" "/books/book-1" "lang" "de" "outputFormat" "json" }} +{{ .Ref $opts }} → https://example.org/de/books/book-1/index.json +``` + +By default, Hugo will throw an error and fail the build if it cannot resolve the path. You can change this to a warning in your site configuration, and specify a URL to return when the path cannot be resolved. + +{{< code-toggle file=hugo >}} +refLinksErrorLevel = 'warning' +refLinksNotFoundURL = '/some/other/url' +{{< /code-toggle >}} diff --git a/docs/content/en/methods/shortcode/RelRef.md b/docs/content/en/methods/shortcode/RelRef.md new file mode 100644 index 000000000..07f221a99 --- /dev/null +++ b/docs/content/en/methods/shortcode/RelRef.md @@ -0,0 +1,44 @@ +--- +title: RelRef +description: Returns the relative URL of the page with the given path, language, and output format. +categories: [] +keywords: [] +action: + related: + - methods/shortcode/Ref + - functions/urls/Ref + - functions/urls/RelRef + returnType: string + signatures: [SHORTCODE.RelRef OPTIONS] +--- + +The map of option contains: + +path +: (`string`) The path to the page, relative to the content directory. Required. + +lang +: (`string`) The language (site) to search for the page. Default is the current language. Optional. + +outputFormat +: (`string`) The output format to search for the page. Default is the current output format. Optional. + +The examples below show the rendered output when visiting a page on the English language version of the site: + +```go-html-template +{{ $opts := dict "path" "/books/book-1" }} +{{ .RelRef $opts }} → /en/books/book-1/ + +{{ $opts := dict "path" "/books/book-1" "lang" "de" }} +{{ .RelRef $opts }} → /de/books/book-1/ + +{{ $opts := dict "path" "/books/book-1" "lang" "de" "outputFormat" "json" }} +{{ .RelRef $opts }} → /de/books/book-1/index.json +``` + +By default, Hugo will throw an error and fail the build if it cannot resolve the path. You can change this to a warning in your site configuration, and specify a URL to return when the path cannot be resolved. + +{{< code-toggle file=hugo >}} +refLinksErrorLevel = 'warning' +refLinksNotFoundURL = '/some/other/url' +{{< /code-toggle >}} diff --git a/docs/content/en/methods/shortcode/Scratch.md b/docs/content/en/methods/shortcode/Scratch.md new file mode 100644 index 000000000..3ab195a3f --- /dev/null +++ b/docs/content/en/methods/shortcode/Scratch.md @@ -0,0 +1,24 @@ +--- +title: Scratch +description: Creates a "scratch pad" scoped to the shortcode to store and manipulate data. +categories: [] +keywords: [] +action: + related: + - functions/collections/NewScratch + returnType: maps.Scratch + signatures: [SHORTCODE.Scratch] +--- + +The `Scratch` method within a shortcode creates a [scratch pad] to store and manipulate data. The scratch pad is scoped to the shortcode, and is reset on server rebuilds. + +{{% note %}} +With the introduction of the [`newScratch`] function, and the ability to [assign values to template variables] after initialization, the `Scratch` method within a shortcode is obsolete. + +[assign values to template variables]: https://go.dev/doc/go1.11#text/template +[`newScratch`]: functions/collections/newscratch +{{% /note %}} + +[scratch pad]: /getting-started/glossary/#scratch-pad + +{{% include "methods/page/_common/scratch-methods.md" %}} diff --git a/docs/content/en/methods/shortcode/Site.md b/docs/content/en/methods/shortcode/Site.md new file mode 100644 index 000000000..fa2d274de --- /dev/null +++ b/docs/content/en/methods/shortcode/Site.md @@ -0,0 +1,19 @@ +--- +title: Site +description: Returns the Site object. +categories: [] +keywords: [] +action: + related: + - methods/page/Sites + returnType: page.siteWrapper + signatures: [SHORTCODE.Site] +--- + +See [Site methods]. + +[Site methods]: /methods/site + +```go-html-template +{{ .Site.Title }} +``` diff --git a/docs/content/en/methods/shortcode/_index.md b/docs/content/en/methods/shortcode/_index.md new file mode 100644 index 000000000..d26366844 --- /dev/null +++ b/docs/content/en/methods/shortcode/_index.md @@ -0,0 +1,12 @@ +--- +title: Shortcode methods +linkTitle: Shortcode +description: Use these methods in your shortcode templates. +categories: [] +keywords: [] +menu: + docs: + parent: methods +--- + +Use these methods in your shortcode templates. diff --git a/docs/content/en/methods/site/AllPages.md b/docs/content/en/methods/site/AllPages.md new file mode 100644 index 000000000..8df6348f9 --- /dev/null +++ b/docs/content/en/methods/site/AllPages.md @@ -0,0 +1,26 @@ +--- +title: AllPages +description: Returns a collection of all pages in all languages. +categories: [] +keywords: [] +action: + related: + - methods/site/Pages + - methods/site/RegularPages + - methods/site/Sections + returnType: page.Pages + signatures: [SITE.AllPages] +--- + +This method returns all page [kinds] in all languages. That includes the home page, section pages, taxonomy pages, term pages, and regular pages. + +In most cases you should use the [`RegularPages`] method instead. + +[`RegularPages`]: methods/site/regularpages +[kinds]: /getting-started/glossary/#page-kind + +```go-html-template +{{ range .Site.AllPages }} + <h2><a href="{{ .RelPermalink }}">{{ .LinkTitle }}</a></h2> +{{ end }} +``` diff --git a/docs/content/en/methods/site/BaseURL.md b/docs/content/en/methods/site/BaseURL.md new file mode 100644 index 000000000..f9c43bca3 --- /dev/null +++ b/docs/content/en/methods/site/BaseURL.md @@ -0,0 +1,37 @@ +--- +title: BaseURL +description: Returns the base URL as defined in the site configuration. +categories: [] +keywords: [] +action: + related: + - functions/urls/AbsURL + - functions/urls/AbsLangURL + - functions/urls/RelURL + - functions/urls/RelLangURL + returnType: string + signatures: [SITE.BaseURL] +--- + +Site configuration: + +{{< code-toggle file=hugo >}} +baseURL = 'https://example.org/docs/' +{{< /code-toggle >}} + +Template: + +```go-html-template +{{ .Site.BaseURL }} → https://example.org/docs/ +``` + +{{% note %}} +There is almost never a good reason to use this method in your templates. Its usage tends to be fragile due to misconfiguration. + +Use the [`absURL`], [`absLangURL`], [`relURL`], or [`relLangURL`] functions instead. + +[`absURL`]: /functions/urls/absURL +[`absLangURL`]: /functions/urls/absLangURL +[`relURL`]: /functions/urls/relURL +[`relLangURL`]: /functions/urls/relLangURL +{{% /note %}} diff --git a/docs/content/en/methods/site/BuildDrafts.md b/docs/content/en/methods/site/BuildDrafts.md new file mode 100644 index 000000000..0d85c78fd --- /dev/null +++ b/docs/content/en/methods/site/BuildDrafts.md @@ -0,0 +1,28 @@ +--- +title: BuildDrafts +description: Reports whether the current build includes draft pages. +categories: [] +keywords: [] +action: + related: [] + returnType: bool + signatures: [SITE.BuildDrafts] +--- + +By default, draft pages are not published when building a site. You can change this behavior with a command line flag: + +```sh +hugo --buildDrafts +``` + +Or by setting `buildDrafts` to `true` in your site configuration: + +{{< code-toggle file=hugo >}} +buildDrafts = true +{{< /code-toggle >}} + +Use the `BuildDrafts` method on a `Site` object to determine the current configuration: + +```go-html-template +{{ .Site.BuildDrafts }} → true +``` diff --git a/docs/content/en/methods/site/Config.md b/docs/content/en/methods/site/Config.md new file mode 100644 index 000000000..0ff4cddec --- /dev/null +++ b/docs/content/en/methods/site/Config.md @@ -0,0 +1,57 @@ +--- +title: Config +description: Returns a subset of the site configuration. +categories: [] +keywords: [] +action: + related: [] + returnType: page.SiteConfig + signatures: [SITE.Config] +toc: true +--- + +The `Config` method on a `Site` object provides access to a subset of the site configuration, specifically the `services` and `privacy` keys. + +## Services + +These are the default service settings, typically used by Hugo's built-in templates and shortcodes. + +{{< code-toggle config=services />}} + +For example, to use Hugo's built-in Google Analytics template you must add a [Google tag ID]: + +[Google tag ID]: https://support.google.com/tagmanager/answer/12326985?hl=en + +{{< code-toggle file=hugo >}} +[services.googleAnalytics] +id = 'G-XXXXXXXXX' +{{< /code-toggle >}} + +To access this value from a template: + +```go-html-template +{{ .Site.Config.Services.GoogleAnalytics.ID }} → G-XXXXXXXXX +``` + +You must capitalize each identifier as shown above. + +## Privacy + +These are the default privacy settings, typically used by Hugo's built-in templates and shortcodes: + +{{< code-toggle config=privacy />}} + +For example, to disable usage of the built-in YouTube shortcode: + +{{< code-toggle file=hugo >}} +[privacy.youtube] +disable = true +{{< /code-toggle >}} + +To access this value from a template: + +```go-html-template +{{ .Site.Config.Privacy.YouTube.Disable }} → true +``` + +You must capitalize each identifier as shown above. diff --git a/docs/content/en/methods/site/Copyright.md b/docs/content/en/methods/site/Copyright.md new file mode 100644 index 000000000..e2ae7d2a5 --- /dev/null +++ b/docs/content/en/methods/site/Copyright.md @@ -0,0 +1,22 @@ +--- +title: Copyright +description: Returns the copyright notice as defined in the site configuration. +categories: [] +keywords: [] +action: + related: [] + returnType: string + signatures: [SITE.Copyright] +--- + +Site configuration: + +{{< code-toggle file=hugo >}} +copyright = '© 2023 ABC Widgets, Inc.' +{{< /code-toggle >}} + +Template: + +```go-html-template +{{ .Site.Copyright }} → © 2023 ABC Widgets, Inc. +``` diff --git a/docs/content/en/methods/site/Data.md b/docs/content/en/methods/site/Data.md new file mode 100644 index 000000000..b78caddec --- /dev/null +++ b/docs/content/en/methods/site/Data.md @@ -0,0 +1,108 @@ +--- +title: Data +description: Returns a data structure composed from the files in the data directory. +categories: [] +keywords: [] +action: + related: + - functions/collections/IndexFunction + - functions/transform/Unmarshal + - functions/collections/Where + - functions/collections/Sort + returnType: map + signatures: [SITE.Data] +--- + +Use the `Data` method on a `Site` object to access data within the data directory, or within any directory [mounted] to the data directory. Supported data formats include JSON, TOML, YAML, and XML. + +[mounted]: /hugo-modules/configuration/#module-configuration-mounts + +{{% note %}} +Although Hugo can unmarshal CSV files with the [`transform.Unmarshal`] function, do not place CSV files in the data directory. You cannot access data within CSV files using this method. + +[`transform.Unmarshal`]: /functions/transform/unmarshal +{{% /note %}} + +Consider this data directory: + +```text +data/ +├── books/ +│ ├── fiction.yaml +│ └── nonfiction.yaml +├── films.json +├── paintings.xml +└── sculptures.toml +``` + +And these data files: + +{{< code file=data/books/fiction.yaml lang=yaml >}} +- title: The Hunchback of Notre Dame + author: Victor Hugo + isbn: 978-0140443530 +- title: Les Misérables + author: Victor Hugo + isbn: 978-0451419439 +{{< /code >}} + +{{< code file=data/books/nonfiction.yaml lang=yaml >}} +- title: The Ancien Régime and the Revolution + author: Alexis de Tocqueville + isbn: 978-0141441641 +- title: Interpreting the French Revolution + author: François Furet + isbn: 978-0521280495 +{{< /code >}} + +Access the data by [chaining] the [identifiers]: + +```go-html-template +{{ range $category, $books := .Site.Data.books }} + <p>{{ $category | title }}</p> + <ul> + {{ range $books }} + <li>{{ .title }} ({{ .isbn }})</li> + {{ end }} + </ul> +{{ end }} +``` + +Hugo renders this to: + +```html +<p>Fiction</p> +<ul> + <li>The Hunchback of Notre Dame (978-0140443530)</li> + <li>Les Misérables (978-0451419439)</li> +</ul> +<p>Nonfiction</p> +<ul> + <li>The Ancien Régime and the Revolution (978-0141441641)</li> + <li>Interpreting the French Revolution (978-0521280495)</li> +</ul> +``` + +To limit the listing to fiction, and sort by title: + +```go-html-template +<ul> + {{ range sort .Site.Data.books.fiction "title" }} + <li>{{ .title }} ({{ .author }})</li> + {{ end }} +</ul> +``` + +To find a fiction book by ISBN: + +```go-html-template +{{ range where .Site.Data.books.fiction "isbn" "978-0140443530" }} + <li>{{ .title }} ({{ .author }})</li> +{{ end }} +``` + +In the template examples above, each of the keys is a valid identifier. For example, none of the keys contains a hyphen. To access a key that is not a valid identifier, use the [`index`] function: + +[`index`]: /functions/collections/indexfunction +[chaining]: /getting-started/glossary/#chain +[identifiers]: /getting-started/glossary/#identifier diff --git a/docs/content/en/methods/site/DisqusShortname.md b/docs/content/en/methods/site/DisqusShortname.md new file mode 100644 index 000000000..2d4447485 --- /dev/null +++ b/docs/content/en/methods/site/DisqusShortname.md @@ -0,0 +1,17 @@ +--- +title: DisqusShortname +description: Returns the Disqus shortname as defined in the site configuration. +categories: [] +keywords: [] +action: + related: [] + returnType: string + signatures: [SITE.DisqusShortname] +expiryDate: 2024-10-30 # deprecated 2023-10-30 +--- + +{{% deprecated-in 0.120.0 %}} +Use [`Site.Config.Services.Disqus.Shortname`] instead. + +[`Site.Config.Services.Disqus.Shortname`]: /methods/site/config +{{% /deprecated-in %}} diff --git a/docs/content/en/methods/site/GetPage.md b/docs/content/en/methods/site/GetPage.md new file mode 100644 index 000000000..b7d4b8f32 --- /dev/null +++ b/docs/content/en/methods/site/GetPage.md @@ -0,0 +1,109 @@ +--- +title: GetPage +description: Returns a Page object from the given path. +categories: [] +keywords: [] +action: + related: + - methods/page/GetPage + returnType: page.Page + signatures: [SITE.GetPage PATH] +toc: true +--- + +The `GetPage` method is also available on `Page` objects, allowing you to specify a path relative to the current page. See [details]. + +[details]: /methods/page/getpage + +When using the `GetPage` method on a `Site` object, specify a path relative to the content directory. + +If Hugo cannot resolve the path to a page, the method returns nil. + +Consider this content structure: + +```text +content/ +├── works/ +│ ├── paintings/ +│ │ ├── _index.md +│ │ ├── starry-night.md +│ │ └── the-mona-lisa.md +│ ├── sculptures/ +│ │ ├── _index.md +│ │ ├── david.md +│ │ └── the-thinker.md +│ └── _index.md +└── _index.md +``` + +This home page template: + +```go-html-template +{{ with .Site.GetPage "/works/paintings" }} + <ul> + {{ range .Pages }} + <li>{{ .Title }} by {{ .Params.artist }}</li> + {{ end }} + </ul> +{{ end }} +``` + +Is rendered to: + +```html +<ul> + <li>Starry Night by Vincent van Gogh</li> + <li>The Mona Lisa by Leonardo da Vinci</li> +</ul> +``` + +To get a regular page instead of a section page: + +```go-html-template +{{ with .Site.GetPage "/works/paintings/starry-night" }} + {{ .Title }} → Starry Night + {{ .Params.artist }} → Vincent van Gogh +{{ end }} +``` + +## Multilingual projects + +With multilingual projects, the `GetPage` method on a `Site` object resolves the given path to a page in the current language. + +To get a page from a different language, query the `Sites` object: + +```go-html-template +{{ with where .Site.Sites "Language.Lang" "eq" "de" }} + {{ with index . 0 }} + {{ with .GetPage "/works/paintings/starry-night" }} + {{ .Title }} → Sternenklare Nacht + {{ end }} + {{ end }} +{{ end }} +``` + +## Page bundles + +Consider this content structure: + +```text +content/ +├── headless/ +│ ├── a.jpg +│ ├── b.jpg +│ ├── c.jpg +│ └── index.md <-- front matter: headless = true +└── _index.md +``` + +In the home page template, use the `GetPage` method on a `Site` object to render all the images in the headless [page bundle]: + +```go-html-template +{{ with .Site.GetPage "/headless" }} + {{ range .Resources.ByType "image" }} + <img src="{{ .RelPermalink }}" width="{{ .Width }}" height="{{ .Height }}" alt=""> + {{ end }} +{{ end }} +``` + +[page bundle]: /getting-started/glossary/#page-bundle diff --git a/docs/content/en/methods/site/GoogleAnalytics.md b/docs/content/en/methods/site/GoogleAnalytics.md new file mode 100644 index 000000000..50f479b49 --- /dev/null +++ b/docs/content/en/methods/site/GoogleAnalytics.md @@ -0,0 +1,17 @@ +--- +title: GoogleAnalytics +description: Returns the Google Analytics tracking ID as defined in the site configuration. +categories: [] +keywords: [] +action: + related: [] + returnType: string + signatures: [SITE.GoogleAnalytics] +expiryDate: 2024-10-30 # deprecated 2023-10-30 +--- + +{{% deprecated-in 0.120.0 %}} +Use [`Site.Config.Services.GoogleAnalytics.ID`] instead. + +[`Site.Config.Services.GoogleAnalytics.ID`]: /methods/site/config +{{% /deprecated-in %}} diff --git a/docs/content/en/methods/site/Home.md b/docs/content/en/methods/site/Home.md new file mode 100644 index 000000000..a25491a8e --- /dev/null +++ b/docs/content/en/methods/site/Home.md @@ -0,0 +1,25 @@ +--- +title: Home +description: Returns the home Page object for the given site. +categories: [] +keywords: [] +action: + related: [] + returnType: page.Page + signatures: [SITE.Home] +--- + +This method is useful for obtaining a link to the home page. + +Site configuration: + +{{< code-toggle file=hugo >}} +baseURL = 'https://example.org/docs/' +{{< /code-toggle >}} + +Template: + +```go-html-template +{{ .Site.Home.Permalink }} → https://example.org/docs/ +{{ .Site.Home.RelPermalink }} → /docs/ +``` diff --git a/docs/content/en/methods/site/IsDevelopment.md b/docs/content/en/methods/site/IsDevelopment.md new file mode 100644 index 000000000..c009ba0de --- /dev/null +++ b/docs/content/en/methods/site/IsDevelopment.md @@ -0,0 +1,21 @@ +--- +title: IsDevelopment +description: Reports whether the current running environment is “development”. +categories: [] +keywords: [] +action: + related: [] + returnType: bool + signatures: [SITE.IsDevelopment] +expiryDate: 2024-10-30 # deprecated 2023-10-30 +--- + +{{% deprecated-in 0.120.0 %}} +Use [`hugo.IsDevelopment`] instead. + +[`hugo.IsDevelopment`]: /functions/hugo/isdevelopment +{{% /deprecated-in %}} + +```go-html-template +{{ .Site.IsDevelopment }} → true/false +``` diff --git a/docs/content/en/methods/site/IsMultiLingual.md b/docs/content/en/methods/site/IsMultiLingual.md new file mode 100644 index 000000000..61cc5e462 --- /dev/null +++ b/docs/content/en/methods/site/IsMultiLingual.md @@ -0,0 +1,34 @@ +--- +title: IsMultiLingual +description: Reports whether the site is multilingual. +categories: [] +keywords: [] +action: + related: [] + returnType: bool + signatures: [SITE.IsMultiLingual] +--- + +Site configuration: + +{{< code-toggle file=hugo >}} +defaultContentLanguage = 'de' +defaultContentLanguageInSubdir = true +[languages] + [languages.de] + languageCode = 'de-DE' + languageName = 'Deutsch' + title = 'Projekt Dokumentation' + weight = 1 + [languages.en] + languageCode = 'en-US' + languageName = 'English' + title = 'Project Documentation' + weight = 2 +{{< /code-toggle >}} + +Template: + +```go-html-template +{{ .Site.IsMultiLingual }} → true +``` diff --git a/docs/content/en/methods/site/IsServer.md b/docs/content/en/methods/site/IsServer.md new file mode 100644 index 000000000..3d5ce41b5 --- /dev/null +++ b/docs/content/en/methods/site/IsServer.md @@ -0,0 +1,21 @@ +--- +title: IsServer +description: Reports whether the built-in development server is running. +categories: [] +keywords: [] +action: + related: [] + returnType: bool + signatures: [SITE.IsServer] +expiryDate: 2024-10-30 # deprecated 2023-10-30 +--- + +{{% deprecated-in 0.120.0 %}} +Use [`hugo.IsServer`] instead. + +[`hugo.IsServer`]: /functions/hugo/isserver +{{% /deprecated-in %}} + +```go-html-template +{{ .Site.IsServer }} → true/false +``` diff --git a/docs/content/en/methods/site/Language.md b/docs/content/en/methods/site/Language.md new file mode 100644 index 000000000..1babc099b --- /dev/null +++ b/docs/content/en/methods/site/Language.md @@ -0,0 +1,83 @@ +--- +title: Language +description: Returns the language object for the given site. +categories: [] +keywords: [] +action: + related: + - methods/page/language + returnType: langs.Language + signatures: [SITE.Language] +toc: true +--- + +The `Language` method on a `Site` object returns the language object for the given site. The language object points to the language definition in the site configuration. + +You can also use the `Language` method on a `Page` object. See [details]. + +## Methods + +The examples below assume the following in your site configuration: + +{{< code-toggle file=hugo >}} +[languages.de] +languageCode = 'de-DE' +languageDirection = 'ltr' +languageName = 'Deutsch' +weight = 1 +{{< /code-toggle >}} + +Lang +: (`string`) The language tag as defined by [RFC 5646]. + +```go-html-template +{{ .Site.Language.Lang }} → de +``` + +LanguageCode +: (`string`) The language code from the site configuration. + +```go-html-template +{{ .Site.Language.LanguageCode }} → de-DE +``` + +LanguageDirection +: (`string`) The language direction from the site configuration, either `ltr` or `rtl`. + +```go-html-template +{{ .Site.Language.LanguageDirection }} → ltr +``` + +LanguageName +: (`string`) The language name from the site configuration. + +```go-html-template +{{ .Site.Language.LanguageName }} → Deutsch +``` + +Weight +: (`int`) The language weight from the site configuration which determines its order in the slice of languages returned by the `Languages` method on a `Site` object. + +```go-html-template +{{ .Site.Language.Weight }} → 1 +``` + +## Example + +Some of the methods above are commonly used in a base template as attributes for the `html` element. + +```go-html-template +<html + lang="{{ or site.Language.LanguageCode site.Language.Lang }}" + dir="{{ or site.Language.LanguageDirection `ltr` }} +> +``` + +The example above uses the global [`site`] function instead of accessing the `Site` object via the `.Site` notation. + +Also note that each attribute has a fallback value assigned via the [`or`] operator. + +[details]: /methods/page/language +[RFC 5646]: https://datatracker.ietf.org/doc/html/rfc5646 +[`or`]: /functions/go-template/or +[`site`]: /functions/global/site diff --git a/docs/content/en/methods/site/LanguagePrefix.md b/docs/content/en/methods/site/LanguagePrefix.md new file mode 100644 index 000000000..88808eda0 --- /dev/null +++ b/docs/content/en/methods/site/LanguagePrefix.md @@ -0,0 +1,53 @@ +--- +title: LanguagePrefix +description: Returns the URL language prefix, if any, for the given site. +categories: [] +keywords: [] +action: + related: + - functions/urls/AbsLangURL + - functions/urls/RelLangURL + returnType: string + signatures: [SITE.LanguagePrefix] +--- + +Consider this site configuration: + +{{< code-toggle file=hugo >}} +defaultContentLanguage = 'de' +defaultContentLanguageInSubdir = false + +[languages.de] +languageCode = 'de-DE' +languageDirection = 'ltr' +languageName = 'Deutsch' +title = 'Projekt Dokumentation' +weight = 1 + +[languages.en] +languageCode = 'en-US' +languageDirection = 'ltr' +languageName = 'English' +title = 'Project Documentation' +weight = 2 +{{< /code-toggle >}} + +When visiting the German language site: + +```go-html-template +{{ .Site.LanguagePrefix }} → "" +``` + +When visiting the English language site: + +```go-html-template +{{ .Site.LanguagePrefix }} → /en +``` + +If you change `defaultContentLanguageInSubdir` to `true`, when visiting the German language site: + +```go-html-template +{{ .Site.LanguagePrefix }} → /de +``` + +You may use the `LanguagePrefix` method with both monolingual and multilingual sites. diff --git a/docs/content/en/methods/site/Languages.md b/docs/content/en/methods/site/Languages.md new file mode 100644 index 000000000..26bdefc21 --- /dev/null +++ b/docs/content/en/methods/site/Languages.md @@ -0,0 +1,59 @@ +--- +title: Languages +description: Returns a collection of language objects for all sites, ordered by language weight. +categories: [] +keywords: [] +action: + related: + - methods/site/Language + returnType: langs.Languages + signatures: [SITE.Languages] +--- + +The `Languages` method on a `Site` object returns a collection of language objects for all sites, ordered by language weight. Each language object points to its language definition in the site configuration. + +To view the data structure: + +```go-html-template +<pre>{{ jsonify (dict "indent" " ") .Site.Languages }}</pre> +``` + +With this site configuration: + +{{< code-toggle file=hugo >}} +defaultContentLanguage = 'de' +defaultContentLanguageInSubdir = false + +[languages.de] +languageCode = 'de-DE' +languageDirection = 'ltr' +languageName = 'Deutsch' +title = 'Projekt Dokumentation' +weight = 1 + +[languages.en] +languageCode = 'en-US' +languageDirection = 'ltr' +languageName = 'English' +title = 'Project Documentation' +weight = 2 +{{< /code-toggle >}} + +This template: + +```go-html-template +<ul> + {{ range .Site.Languages }} + <li>{{ .Title }} ({{ .LanguageName }})</li> + {{ end }} +</ul> +``` + +Is rendered to: + +```html +<ul> + <li>Projekt Dokumentation (Deutsch)</li> + <li>Project Documentation (English)</li> +</ul> +``` diff --git a/docs/content/en/methods/site/LastChange.md b/docs/content/en/methods/site/LastChange.md new file mode 100644 index 000000000..aceee691d --- /dev/null +++ b/docs/content/en/methods/site/LastChange.md @@ -0,0 +1,21 @@ +--- +title: LastChange +description: Returns the last modification date of site content. +categories: [] +keywords: [] +action: + related: [] + returnType: time.Time + signatures: [SITE.LastChange] +--- + +The `LastChange` method on a `Site` object returns a [`time.Time`] value. Use this with time [functions] and [methods]. For example: + +```go-html-template +{{ .Site.LastChange | time.Format ":date_long" }} → October 16, 2023 + +``` + +[`time.Time`]: https://pkg.go.dev/time#Time +[functions]: /functions/time +[methods]: /methods/time diff --git a/docs/content/en/methods/site/MainSections.md b/docs/content/en/methods/site/MainSections.md new file mode 100644 index 000000000..251fe1a97 --- /dev/null +++ b/docs/content/en/methods/site/MainSections.md @@ -0,0 +1,55 @@ +--- +title: MainSections +description: Returns a slice of the main section names as defined in the site configuration, falling back to the top level section with the most pages. +categories: [] +keywords: [] +action: + related: [] + returnType: '[]string' + signatures: [SITE.MainSections] +--- + +Site configuration: + +{{< code-toggle file=hugo >}} +[params] +mainSections = ['books','films'] +{{< /code-toggle >}} + +Template: + +```go-html-template +{{ .Site.MainSections }} → [books films] +``` + +If `params.mainSections` is not defined in the site configuration, this method returns a slice with one element---the top level section with the most pages. + +With this content structure, the "films" section has the most pages: + +```text +content/ +├── books/ +│ ├── book-1.md +│ └── book-2.md +├── films/ +│ ├── film-1.md +│ ├── film-2.md +│ └── film-3.md +└── _index.md +``` + +Template: + +```go-html-template +{{ .Site.MainSections }} → [films] +``` + +When creating a theme, instead of hardcoding section names when listing the most relevant pages on the front page, instruct site authors to set `params.mainSections` in their site configuration. + +Then your home page template can do something like this: + +```go-html-template +{{ range where .Site.RegularPages "Section" "in" .Site.MainSections }} + <h2><a href="{{ .RelPermalink }}">{{ .LinkTitle }}</a></h2> +{{ end }} +``` diff --git a/docs/content/en/methods/site/Menus.md b/docs/content/en/methods/site/Menus.md new file mode 100644 index 000000000..c204fe97b --- /dev/null +++ b/docs/content/en/methods/site/Menus.md @@ -0,0 +1,94 @@ +--- +title: Menus +description: Returns a collection of menu objects for the given site. +categories: [] +keywords: [] +action: + related: + - methods/page/IsMenuCurrent + - methods/page/HasMenuCurrent + returnType: navigation.Menus + signatures: [SITE.Menus] +--- + +The `Menus` method on a `Site` object returns a collection of menus, where each menu contains one or more entries, either flat or nested. Each entry points to a page within the site, or to an external resource. + +{{% note %}} +Menus can be defined and localized in several ways. Please see the [menus] section for a complete explanation and examples. + +[menus]: /content-management/menus/ +{{% /note %}} + +A site can have multiple menus. For example, a main menu and a footer menu: + +{{< code-toggle file=hugo >}} +[[menus.main]] +name = 'Home' +pageRef = '/' +weight = 10 + +[[menus.main]] +name = 'Books' +pageRef = '/books' +weight = 20 + +[[menus.main]] +name = 'Films' +pageRef = '/films' +weight = 30 + +[[menus.footer]] +name = 'Legal' +pageRef = '/legal' +weight = 10 + +[[menus.footer]] +name = 'Privacy' +pageRef = '/privacy' +weight = 20 +{{< /code-toggle >}} + +This template renders the main menu: + +```go-html-template +{{ with site.Menus.main }} + <nav class="menu"> + {{ range . }} + {{ if $.IsMenuCurrent .Menu . }} + <a class="active" aria-current="page" href="{{ .URL }}">{{ .Name }}</a> + {{ else }} + <a href="{{ .URL }}">{{ .Name }}</a> + {{ end }} + {{ end }} + </nav> +{{ end }} +``` + +When viewing the home page, the result is: + +```html +<nav class="menu"> + <a class="active" aria-current="page" href="/">Home</a> + <a href="/books/">Books</a> + <a href="/films/">Films</a> +</nav> +``` + +When viewing the "books" page, the result is: + +```html +<nav class="menu"> + <a href="/">Home</a> + <a class="active" aria-current="page" href="/books/">Books</a> + <a href="/films/">Films</a> +</nav> +``` + +You will typically render a menu using a partial template. As the active menu entry will be different on each page, use the [`partial`] function to call the template. Do not use the [`partialCached`] function. + +The example above is simplistic. Please see the [menu templates] section for more information. + +[menu templates]: /templates/menu-templates + +[`partial`]: /functions/partials/include +[`partialCached`]: /functions/partials/includecached diff --git a/docs/content/en/methods/site/Pages.md b/docs/content/en/methods/site/Pages.md new file mode 100644 index 000000000..583e98c11 --- /dev/null +++ b/docs/content/en/methods/site/Pages.md @@ -0,0 +1,26 @@ +--- +title: Pages +description: Returns a collection of all pages. +categories: [] +keywords: [] +action: + related: + - methods/site/AllPages + - methods/site/RegularPages + - methods/site/Sections + returnType: page.Pages + signatures: [SITE.Pages] +--- + +This method returns all page [kinds] in the current language. That includes the home page, section pages, taxonomy pages, term pages, and regular pages. + +In most cases you should use the [`RegularPages`] method instead. + +[`RegularPages`]: methods/site/regularpages +[kinds]: /getting-started/glossary/#page-kind + +```go-html-template +{{ range .Site.Pages }} + <h2><a href="{{ .RelPermalink }}">{{ .LinkTitle }}</a></h2> +{{ end }} +``` diff --git a/docs/content/en/methods/site/Param.md b/docs/content/en/methods/site/Param.md new file mode 100644 index 000000000..b699ef2d4 --- /dev/null +++ b/docs/content/en/methods/site/Param.md @@ -0,0 +1,29 @@ +--- +title: Param +description: Returns the site parameter with the given key. +categories: [] +keywords: [] +action: + related: [] + returnType: any + signatures: [SITE.Param KEY] +--- + +The `Param` method on a `Site` object is a convenience method to return the value of a user-defined parameter in the site configuration. + +{{< code-toggle file=hugo >}} +[params] +display_toc = true +{{< /code-toggle >}} + + +```go-html-template +{{ .Site.Param "display_toc" }} → true +``` + +The above is equivalent to either of these: + +```go-html-template +{{ .Site.Params.display_toc }} +{{ index .Site.Params "display_toc" }} +``` diff --git a/docs/content/en/methods/site/Params.md b/docs/content/en/methods/site/Params.md new file mode 100644 index 000000000..518d93bf3 --- /dev/null +++ b/docs/content/en/methods/site/Params.md @@ -0,0 +1,47 @@ +--- +title: Params +description: Returns a map of custom parameters as defined in the site configuration. +categories: [] +keywords: [] +action: + related: + - functions/collections/indexFunction + - methods/page/Params + - methods/page/Param + returnType: maps.Params + signatures: [SITE.Params] +--- + +With this site configuration: + +{{< code-toggle file=hugo >}} +[params] + subtitle = 'The Best Widgets on Earth' + copyright-year = '2023' + [params.author] + email = '[email protected]' + name = 'John Smith' + [params.layouts] + rfc_1123 = 'Mon, 02 Jan 2006 15:04:05 MST' + rfc_3339 = '2006-01-02T15:04:05-07:00' +{{< /code-toggle >}} + +Access the custom parameters by [chaining] the [identifiers]: + +```go-html-template +{{ .Site.Params.subtitle }} → The Best Widgets on Earth +{{ .Site.Params.author.name }} → John Smith + +{{ $layout := .Site.Params.layouts.rfc_1123 }} +{{ .Site.LastChange.Format $layout }} → Tue, 17 Oct 2023 13:21:02 PDT +``` + +In the template example above, each of the keys is a valid identifier. For example, none of the keys contains a hyphen. To access a key that is not a valid identifier, use the [`index`] function: + +```go-html-template +{{ index .Site.Params "copyright-year" }} → 2023 +``` + +[`index`]: /functions/collections/indexfunction +[chaining]: /getting-started/glossary/#chain +[identifiers]: /getting-started/glossary/#identifier diff --git a/docs/content/en/methods/site/RegularPages.md b/docs/content/en/methods/site/RegularPages.md new file mode 100644 index 000000000..b163ad919 --- /dev/null +++ b/docs/content/en/methods/site/RegularPages.md @@ -0,0 +1,38 @@ +--- +title: RegularPages +description: Returns a collection of all regular pages. +categories: [] +keywords: [] +action: + related: + - methods/site/AllPages + - methods/site/RegularPages + - methods/site/Sections + returnType: page.Pages + signatures: [SITE.RegularPages] +--- + +```go-html-template +{{ range .Site.RegularPages }} + <h2><a href="{{ .RelPermalink }}">{{ .LinkTitle }}</a></h2> +{{ end }} +``` + +By default, Hugo sorts page collections by: + +1. The page `weight` as defined in front matter +1. The page `date` as defined in front matter +1. The page `linkTitle` as defined in front matter +1. The file path + +If the `linkTitle` is not defined, Hugo evaluates the `title` instead. + +To change the sort order, use any of the `Pages` [sorting methods]. For example: + +```go-html-template +{{ range .Site.RegularPages.ByTitle }} + <h2><a href="{{ .RelPermalink }}">{{ .Title }}</a></h2> +{{ end }} +``` + +[sorting methods]: /methods/pages/ diff --git a/docs/content/en/methods/site/Sections.md b/docs/content/en/methods/site/Sections.md new file mode 100644 index 000000000..a397c5926 --- /dev/null +++ b/docs/content/en/methods/site/Sections.md @@ -0,0 +1,41 @@ +--- +title: Sections +description: Returns a collection of first level section pages. +categories: [] +keywords: [] +action: + related: + - methods/site/AllPages + - methods/site/Pages + - methods/site/RegularPages + returnType: page.Pages + signatures: [SITE.Sections] +--- + +Given this content structure: + +```text +content/ +├── books/ +│ ├── book-1.md +│ └── book-2.md +├── films/ +│ ├── film-1.md +│ └── film-2.md +└── _index.md +``` + +This template: + +```go-html-template +{{ range .Site.Sections }} + <h2><a href="{{ .RelPermalink }}">{{ .LinkTitle }}</a></h2> +{{ end }} +``` + +Is rendered to: + +```html +<h2><a href="/books/">Books</a></h2> +<h2><a href="/films/">Films</a></h2> +``` diff --git a/docs/content/en/methods/site/Sites.md b/docs/content/en/methods/site/Sites.md new file mode 100644 index 000000000..f7bafd3ed --- /dev/null +++ b/docs/content/en/methods/site/Sites.md @@ -0,0 +1,66 @@ +--- +title: Sites +description: Returns a collection of all Site objects, one for each language, ordered by language weight. +categories: [] +keywords: [] +action: + related: [] + returnType: page.Sites + signatures: [SITE.Sites] +--- + +With this site configuration: + +{{< code-toggle file=hugo >}} +defaultContentLanguage = 'de' +defaultContentLanguageInSubdir = false + +[languages.de] +languageCode = 'de-DE' +languageDirection = 'ltr' +languageName = 'Deutsch' +title = 'Projekt Dokumentation' +weight = 1 + +[languages.en] +languageCode = 'en-US' +languageDirection = 'ltr' +languageName = 'English' +title = 'Project Documentation' +weight = 2 +{{< /code-toggle >}} + +This template: + +```go-html-template +<ul> + {{ range .Site.Sites }} + <li><a href="{{ .Home.Permalink }}">{{ .Title }}</a></li> + {{ end }} +</ul> +``` + +Produces a list of links to each home page: + +```html +<ul> + <li><a href="https://example.org/de/">Projekt Dokumentation</a></li> + <li><a href="https://example.org/en/">Project Documentation</a></li> +</ul> +``` + +To render a link to home page of the primary (first) language: + +```go-html-template +{{ with .Site.Sites.First }} + <a href="{{ .Home.Permalink }}">{{ .Title }}</a> +{{ end }} +``` + +This is equivalent to: + +```go-html-template +{{ with index .Site.Sites 0 }} + <a href="{{ .Home.Permalink }}">{{ .Title }}</a> +{{ end }} +``` diff --git a/docs/content/en/methods/site/Taxonomies.md b/docs/content/en/methods/site/Taxonomies.md new file mode 100644 index 000000000..72bfc75d5 --- /dev/null +++ b/docs/content/en/methods/site/Taxonomies.md @@ -0,0 +1,99 @@ +--- +title: Taxonomies +description: Returns a data structure containing the site's taxonomy objects, the terms within each taxonomy object, and the pages to which the terms are assigned. +categories: [] +keywords: [] +action: + related: [] + returnType: page.TaxonomyList + signatures: [SITE.Taxonomies] +--- + +Conceptually, the `Taxonomies` method on a `Site` object returns a data structure such as: + +{{< code-toggle >}} +taxonomy a: + - term 1: + - page 1 + - page 2 + - term 2: + - page 1 +taxonomy b: + - term 1: + - page 2 + - term 2: + - page 1 + - page 2 +{{< /code-toggle >}} + +For example, on a book review site you might create two taxonomies; one for genres and another for authors. + +With this site configuration: + +{{< code-toggle file=hugo >}} +[taxonomies] +genre = 'genres' +author = 'authors' +{{< /code-toggle >}} + +And this content structure: + +```text +content/ +├── books/ +│ ├── and-then-there-were-none.md --> genres: suspense +│ ├── death-on-the-nile.md --> genres: suspense +│ └── jamaica-inn.md --> genres: suspense, romance +│ └── pride-and-prejudice.md --> genres: romance +└── _index.md +``` + +Conceptually, the taxonomies data structure looks like: + +{{< code-toggle >}} +genres: + - suspense: + - And Then There Were None + - Death on the Nile + - Jamaica Inn + - romance: + - Jamaica Inn + - Pride and Prejudice +authors: + - achristie: + - And Then There Were None + - Death on the Nile + - ddmaurier: + - Jamaica Inn + - jausten: + - Pride and Prejudice +{{< /code-toggle >}} + + +To list the "suspense" books: + +```go-html-template +<ul> + {{ range .Site.Taxonomies.genres.suspense }} + <li><a href="{{ .RelPermalink }}">{{ .LinkTitle }}</a></li> + {{ end }} +</ul> +``` + +Hugo renders this to: + +```html +<ul> + <li><a href="/books/and-then-there-were-none/">And Then There Were None</a></li> + <li><a href="/books/death-on-the-nile/">Death on the Nile</a></li> + <li><a href="/books/jamaica-inn/">Jamaica Inn</a></li> +</ul> +``` + +{{% note %}} +Hugo's taxonomy system is powerful, allowing you to classify content and create relationships between pages. + +Please see the [taxonomies] section for a complete explanation and examples. + +[taxonomies]: content-management/taxonomies/ +{{% /note %}} diff --git a/docs/content/en/methods/site/Title.md b/docs/content/en/methods/site/Title.md new file mode 100644 index 000000000..a357286c1 --- /dev/null +++ b/docs/content/en/methods/site/Title.md @@ -0,0 +1,22 @@ +--- +title: Title +description: Returns the title as defined in the site configuration. +categories: [] +keywords: [] +action: + related: [] + returnType: string + signatures: [SITE.Title] +--- + +Site configuration: + +{{< code-toggle file=hugo >}} +title = 'My Documentation Site' +{{< /code-toggle >}} + +Template: + +```go-html-template +{{ .Site.Title }} → My Documentation Site +``` diff --git a/docs/content/en/methods/site/_index.md b/docs/content/en/methods/site/_index.md new file mode 100644 index 000000000..39f66f308 --- /dev/null +++ b/docs/content/en/methods/site/_index.md @@ -0,0 +1,12 @@ +--- +title: Site methods +linkTitle: Site +description: Use these methods with Site objects. +categories: [] +keywords: [] +menu: + docs: + parent: methods +--- + +Use these methods with Site objects. A multilingual project will have two or more sites, one for each language. diff --git a/docs/content/en/methods/taxonomy/Alphabetical.md b/docs/content/en/methods/taxonomy/Alphabetical.md new file mode 100644 index 000000000..7845dbf3d --- /dev/null +++ b/docs/content/en/methods/taxonomy/Alphabetical.md @@ -0,0 +1,78 @@ +--- +title: Alphabetical +description: Returns an ordered taxonomy, sorted alphabetically by term. +categories: [] +keywords: [] +action: + related: + - methods/taxonomy/ByCount + returnType: page.OrderedTaxonomy + signatures: [TAXONOMY.Alphabetical] +toc: true +--- + +The `Alphabetical` method on a `Taxonomy` object returns an [ordered taxonomy], sorted alphabetically by [term]. + +While a `Taxonomy` object is a [map], an ordered taxonomy is a [slice], where each element is an object that contains the term and a slice of its [weighted pages]. + +{{% include "methods/taxonomy/_common/get-a-taxonomy-object.md" %}} + +## Get the ordered taxonomy + +Now that we have captured the “genres” Taxonomy object, let’s get the ordered taxonomy sorted alphabetically by term: + +```go-html-template +{{ $taxonomyObject.Alphabetical }} +``` + +To reverse the sort order: + +```go-html-template +{{ $taxonomyObject.Alphabetical.Reverse }} +``` + +To inspect the data structure: + +```go-html-template +<pre>{{ jsonify (dict "indent" " ") $taxonomyObject.Alphabetical }}</pre> +``` + +{{% include "methods/taxonomy/_common/ordered-taxonomy-element-methods.md" %}} + +## Example + +With this template: + +```go-html-template +{{ range $taxonomyObject.Alphabetical }} + <h2><a href="{{ .Page.RelPermalink }}">{{ .Page.LinkTitle }}</a> ({{ .Count }})</h2> + <ul> + {{ range .Pages.ByTitle }} + <li><a href="{{ .RelPermalink }}">{{ .Title }}</a></li> + {{ end }} + </ul> +{{ end }} +``` + +Hugo renders: + +```html +<h2><a href="/genres/romance/">romance</a> (2)</h2> +<ul> + <li><a href="/books/jamaica-inn/">Jamaica inn</a></li> + <li><a href="/books/pride-and-prejudice/">Pride and prejudice</a></li> +</ul> +<h2><a href="/genres/suspense/">suspense</a> (3)</h2> +<ul> + <li><a href="/books/and-then-there-were-none/">And then there were none</a></li> + <li><a href="/books/death-on-the-nile/">Death on the nile</a></li> + <li><a href="/books/jamaica-inn/">Jamaica inn</a></li> +</ul> +``` + +[ordered taxonomy]: /getting-started/glossary/#ordered-taxonomy +[term]: /getting-started/glossary/#term +[map]: /getting-started/glossary/#map +[slice]: /getting-started/glossary/#slice +[term]: /getting-started/glossary/#term +[weighted pages]: /getting-started/glossary/#weighted-page diff --git a/docs/content/en/methods/taxonomy/ByCount.md b/docs/content/en/methods/taxonomy/ByCount.md new file mode 100644 index 000000000..40f58420a --- /dev/null +++ b/docs/content/en/methods/taxonomy/ByCount.md @@ -0,0 +1,78 @@ +--- +title: ByCount +description: Returns an ordered taxonomy, sorted by the number of pages associated with each term. +categories: [] +keywords: [] +action: + related: + - methods/taxonomy/Alphabetical + returnType: page.OrderedTaxonomy + signatures: [TAXONOMY.ByCount] +toc: true +--- + +The `ByCount` method on a `Taxonomy` object returns an [ordered taxonomy], sorted by the number of pages associated with each [term]. + +While a `Taxonomy` object is a [map], an ordered taxonomy is a [slice], where each element is an object that contains the term and a slice of its [weighted pages]. + +{{% include "methods/taxonomy/_common/get-a-taxonomy-object.md" %}} + +## Get the ordered taxonomy + +Now that we have captured the “genres” Taxonomy object, let’s get the ordered taxonomy sorted by the number of pages associated with each term: + +```go-html-template +{{ $taxonomyObject.ByCount }} +``` + +To reverse the sort order: + +```go-html-template +{{ $taxonomyObject.ByCount.Reverse }} +``` + +To inspect the data structure: + +```go-html-template +<pre>{{ jsonify (dict "indent" " ") $taxonomyObject.ByCount }}</pre> +``` + +{{% include "methods/taxonomy/_common/ordered-taxonomy-element-methods.md" %}} + +## Example + +With this template: + +```go-html-template +{{ range $taxonomyObject.ByCount }} + <h2><a href="{{ .Page.RelPermalink }}">{{ .Page.LinkTitle }}</a> ({{ .Count }})</h2> + <ul> + {{ range .Pages.ByTitle }} + <li><a href="{{ .RelPermalink }}">{{ .Title }}</a></li> + {{ end }} + </ul> +{{ end }} +``` + +Hugo renders: + +```html +<h2><a href="/genres/suspense/">suspense</a> (3)</h2> +<ul> + <li><a href="/books/and-then-there-were-none/">And then there were none</a></li> + <li><a href="/books/death-on-the-nile/">Death on the nile</a></li> + <li><a href="/books/jamaica-inn/">Jamaica inn</a></li> +</ul> +<h2><a href="/genres/romance/">romance</a> (2)</h2> +<ul> + <li><a href="/books/jamaica-inn/">Jamaica inn</a></li> + <li><a href="/books/pride-and-prejudice/">Pride and prejudice</a></li> +</ul> +``` + +[ordered taxonomy]: /getting-started/glossary/#ordered-taxonomy +[term]: /getting-started/glossary/#term +[map]: /getting-started/glossary/#map +[slice]: /getting-started/glossary/#slice +[term]: /getting-started/glossary/#term +[weighted pages]: /getting-started/glossary/#weighted-page diff --git a/docs/content/en/methods/taxonomy/Count.md b/docs/content/en/methods/taxonomy/Count.md new file mode 100644 index 000000000..50f705ec9 --- /dev/null +++ b/docs/content/en/methods/taxonomy/Count.md @@ -0,0 +1,26 @@ +--- +title: Count +description: Returns the number of number of weighted pages to which the given term has been assigned. +categories: [] +keywords: [] +action: + related: [] + returnType: int + signatures: [TAXONOMY.Count TERM] +toc: true +--- + +The `Count` method on a `Taxonomy` object returns the number of number of [weighted pages] to which the given [term] has been assigned. + +{{% include "methods/taxonomy/_common/get-a-taxonomy-object.md" %}} + +## Count the weighted pages + +Now that we have captured the "genres" `Taxonomy` object, let's count the number of weighted pages to which the "suspense" term has been assigned: + +```go-html-template +{{ $taxonomyObject.Count "suspense" }} → 3 +``` + +[weighted pages]: /getting-started/glossary/#weighted-page +[term]: /getting-started/glossary/#term diff --git a/docs/content/en/methods/taxonomy/Get.md b/docs/content/en/methods/taxonomy/Get.md new file mode 100644 index 000000000..3bac86f08 --- /dev/null +++ b/docs/content/en/methods/taxonomy/Get.md @@ -0,0 +1,72 @@ +--- +title: Get +description: Returns a slice of weighted pages to which the given term has been assigned. +categories: [] +keywords: [] +action: + related: [] + returnType: page.WeightedPages + signatures: [TAXONOMY.Get TERM] +toc: true +--- + +The `Get` method on a `Taxonomy` object returns a slice of [weighted pages] to which the given [term] has been assigned. + +{{% include "methods/taxonomy/_common/get-a-taxonomy-object.md" %}} + +## Get the weighted pages + +Now that we have captured the "genres" `Taxonomy` object, let's get the weighted pages to which the "suspense" term has been assigned: + +```go-html-template +{{ $weightedPages := $taxonomyObject.Get "suspense" }} +``` + +The above is equivalent to: + +```go-html-template +{{ $weightedPages := $taxonomyObject.suspense }} +``` + +But, if the term is not a valid [identifier], you cannot use the [chaining] syntax. For example, this will throw an error because the identifier contains a hyphen: + +```go-html-template +{{ $weightedPages := $taxonomyObject.my-genre }} +``` + +You could also use the [`index`] function, but the syntax is more verbose: + +```go-html-template +{{ $weightedPages := index $taxonomyObject "my-genre" }} +``` + +To inspect the data structure: + +```go-html-template +<pre>{{ jsonify (dict "indent" " ") $weightedPages }}</pre> +``` + +## Example + +With this template: + +```go-html-template +{{ $weightedPages := $taxonomyObject.Get "suspense" }} +{{ range $weightedPages }} + <h2><a href="{{ .RelPermalink }}">{{ .LinkTitle }}</a></h2> +{{ end }} +``` + +Hugo renders: + +```html +<h2><a href="/books/jamaica-inn/">Jamaica inn</a></h2> +<h2><a href="/books/death-on-the-nile/">Death on the nile</a></h2> +<h2><a href="/books/and-then-there-were-none/">And then there were none</a></h2> +``` + +[chaining]: /getting-started/glossary/#chain +[`index`]: /functions/collections/indexfunction +[identifier]: /getting-started/glossary/#identifier +[term]: /getting-started/glossary/#term +[weighted pages]: /getting-started/glossary/#weighted-page diff --git a/docs/content/en/methods/taxonomy/_common/_index.md b/docs/content/en/methods/taxonomy/_common/_index.md new file mode 100644 index 000000000..47d5812fb --- /dev/null +++ b/docs/content/en/methods/taxonomy/_common/_index.md @@ -0,0 +1,13 @@ +--- +cascade: + _build: + list: never + publishResources: false + render: never +--- + +<!-- +Files within this headless branch bundle are markdown snippets. Each file must contain front matter delimiters, though front matter fields are not required. + +Include the rendered content using the "include" shortcode. +--> diff --git a/docs/content/en/methods/taxonomy/_common/get-a-taxonomy-object.md b/docs/content/en/methods/taxonomy/_common/get-a-taxonomy-object.md new file mode 100644 index 000000000..4c4fc42c9 --- /dev/null +++ b/docs/content/en/methods/taxonomy/_common/get-a-taxonomy-object.md @@ -0,0 +1,68 @@ +--- +# Do not remove front matter. +--- + +Before we can use a `Taxonomy` method, we need to capture a `Taxonomy` object. + +## Capture a taxonomy object + +Consider this site configuration: + +{{< code-toggle file=hugo >}} +[taxonomies] +genre = 'genres' +author = 'authors' +{{< /code-toggle >}} + +And this content structure: + +```text +content/ +├── books/ +│ ├── and-then-there-were-none.md --> genres: suspense +│ ├── death-on-the-nile.md --> genres: suspense +│ └── jamaica-inn.md --> genres: suspense, romance +│ └── pride-and-prejudice.md --> genres: romance +└── _index.md +``` + +To capture the "genres" taxonomy object from within any template, use the [`Taxonomies`] method on a `Site` object. + +```go-html-template +{{ $taxonomyObject := .Site.Taxonomies.genres }} +``` + +To capture the "genres" taxonomy object when rendering its page with a taxonomy template, use the [`Terms`] method on the page's [`Data`] object: + +{{< code file=layouts/_default/taxonomy.html >}} +{{ $taxonomyObject := .Data.Terms }} +{{< /code >}} + +To inspect the data structure: + +```go-html-template +<pre>{{ jsonify (dict "indent" " ") $taxonomyObject }}</pre> +``` + +Although the [`Alphabetical`] and [`ByCount`] methods provide a better data structure for ranging through the taxonomy, you can render the weighted pages by term directly from the `Taxonomy` object: + +```go-html-template +{{ range $term, $weightedPages := $taxonomyObject }} + <h2><a href="{{ .Page.RelPermalink }}">{{ .Page.LinkTitle }}</a></h2> + <ul> + {{ range $weightedPages }} + <li><a href="{{ .RelPermalink }}">{{ .LinkTitle }}</a></li> + {{ end }} + </ul> +{{ end }} +``` + +In the example above, the first anchor element is a link to the term page. + + +[`Alphabetical`]: /methods/taxonomy/alphabetical +[`ByCount`]: /methods/taxonomy/bycount + +[`data`]: /methods/page/data +[`terms`]: /methods/page/data/#in-a-taxonomy-template +[`taxonomies`]: /methods/site/taxonomies diff --git a/docs/content/en/methods/taxonomy/_common/ordered-taxonomy-element-methods.md b/docs/content/en/methods/taxonomy/_common/ordered-taxonomy-element-methods.md new file mode 100644 index 000000000..9c94729ba --- /dev/null +++ b/docs/content/en/methods/taxonomy/_common/ordered-taxonomy-element-methods.md @@ -0,0 +1,25 @@ +--- +# Do not remove front matter. +--- + +An ordered taxonomy is a slice, where each element is an object that contains the term and a slice of its weighted pages. + +Each element of the slice provides these methods: + +Count +: (`int`) Returns the number of pages to which the term is assigned. + +Page +: (`page.Page`) Returns the term's `Page` object, useful for linking to the term page. + +Pages +: (`page.Pages`) Returns a `Pages` object containing the `Page` objects to which the term is assigned, sorted by [taxonomic weight]. To sort or group, use any of the [methods] available to the `Pages` object. For example, sort by the last modification date. + +Term +: (`string`) Returns the term name. + +WeightedPages +: (`page.WeightedPages`) Returns a slice of weighted pages to which the term is assigned, sorted by [taxonomic weight]. The `Pages` method above is more flexible, allowing you to sort and group. + +[methods]: /methods/pages +[taxonomic weight]: /getting-started/glossary/#taxonomic-weight diff --git a/docs/content/en/methods/taxonomy/_index.md b/docs/content/en/methods/taxonomy/_index.md new file mode 100644 index 000000000..e7eb57834 --- /dev/null +++ b/docs/content/en/methods/taxonomy/_index.md @@ -0,0 +1,12 @@ +--- +title: Taxonomy methods +linkTitle: Taxonomy +description: Use these methods with Taxonomy objects. +keywords: [] +menu: + docs: + identifier: + parent: methods +--- + +Use these methods with Taxonomy objects. diff --git a/docs/content/en/methods/time/Add.md b/docs/content/en/methods/time/Add.md new file mode 100644 index 000000000..8fd755244 --- /dev/null +++ b/docs/content/en/methods/time/Add.md @@ -0,0 +1,23 @@ +--- +title: Add +description: Returns the given time plus the given duration. +categories: [] +keywords: [] +action: + related: + - functions/time/AsTime + - functions/time/Duration + - functions/time/ParseDuration + returnType: time.Time + signatures: [TIME.Add DURATION] +--- + +```go-html-template +{{ $t := time.AsTime "2023-01-27T23:44:58-08:00" }} + +{{ $d1 = time.ParseDuration "3h20m10s" }} +{{ $d2 = time.ParseDuration "-3h20m10s" }} + +{{ $t.Add $d1 }} → 2023-01-28 03:05:08 -0800 PST +{{ $t.Add $d2 }} → 2023-01-27 20:24:48 -0800 PST +``` diff --git a/docs/content/en/methods/time/AddDate.md b/docs/content/en/methods/time/AddDate.md new file mode 100644 index 000000000..8537d6e25 --- /dev/null +++ b/docs/content/en/methods/time/AddDate.md @@ -0,0 +1,39 @@ +--- +title: AddDate +description: Returns the time corresponding to adding the given number of years, months, and days to the given time.Time value. +categories: [] +keywords: [] +action: + aliases: [] + related: [] + returnType: time.Time + signatures: [TIME.AddDate YEARS MONTHS DAYS] +aliases: [/functions/adddate] +--- + +```go-html-template +{{ $d := "2022-01-01" | time.AsTime }} + +{{ $d.AddDate 0 0 1 | time.Format "2006-01-02" }} → 2022-01-02 +{{ $d.AddDate 0 1 1 | time.Format "2006-01-02" }} → 2022-02-02 +{{ $d.AddDate 1 1 1 | time.Format "2006-01-02" }} → 2023-02-02 + +{{ $d.AddDate -1 -1 -1 | time.Format "2006-01-02" }} → 2020-11-30 +``` + +{{% note %}} +When adding months or years, Hugo normalizes the final `time.Time` value if the resulting day does not exist. For example, adding one month to 31 January produces 2 March or 3 March, depending on the year. + +See [this explanation](https://github.com/golang/go/issues/31145#issuecomment-479067967) from the Go team. +{{% /note %}} + +```go-html-template +{{ $d := "2023-01-31" | time.AsTime }} +{{ $d.AddDate 0 1 0 | time.Format "2006-01-02" }} → 2023-03-03 + +{{ $d := "2024-01-31" | time.AsTime }} +{{ $d.AddDate 0 1 0 | time.Format "2006-01-02" }} → 2024-03-02 + +{{ $d := "2024-02-29" | time.AsTime }} +{{ $d.AddDate 1 0 0 | time.Format "2006-01-02" }} → 2025-03-01 +``` diff --git a/docs/content/en/methods/time/After.md b/docs/content/en/methods/time/After.md new file mode 100644 index 000000000..0aeeb38d8 --- /dev/null +++ b/docs/content/en/methods/time/After.md @@ -0,0 +1,20 @@ +--- +title: After +description: Reports whether TIME1 is after TIME2. +categories: [] +keywords: [] +action: + related: + - methods/time/Before + - methods/time/After + - functions/time/AsTime + returnType: bool + signatures: [TIME1.After TIME2] +--- + +```go-html-template +{{ $t1 := time.AsTime "2023-01-01T17:00:00-08:00" }} +{{ $t2 := time.AsTime "2010-01-01T17:00:00-08:00" }} + +{{ $t1.After $t2 }} → true +``` diff --git a/docs/content/en/methods/time/Before.md b/docs/content/en/methods/time/Before.md new file mode 100644 index 000000000..c3d582860 --- /dev/null +++ b/docs/content/en/methods/time/Before.md @@ -0,0 +1,19 @@ +--- +title: Before +description: Reports whether TIME1 is before TIME2. +categories: [] +keywords: [] +action: + related: + - methods/time/After + - methods/time/Equal + - functions/time/AsTime + returnType: bool + signatures: [TIME1.Before TIME2] +--- + +```go-html-template +{{ $t1 := time.AsTime "2023-01-01T17:00:00-08:00" }} +{{ $t2 := time.AsTime "2030-01-01T17:00:00-08:00" }} + +{{ $t1.Before $t2 }} → true diff --git a/docs/content/en/methods/time/Day.md b/docs/content/en/methods/time/Day.md new file mode 100644 index 000000000..1173b8489 --- /dev/null +++ b/docs/content/en/methods/time/Day.md @@ -0,0 +1,21 @@ +--- +title: Day +description: Returns the day of the month of the given time.Time value. +categories: [] +keywords: [] +action: + related: + - methods/time/Year + - methods/time/Month + - methods/time/Hour + - methods/time/Minute + - methods/time/Second + - functions/time/AsTime + returnType: int + signatures: [TIME.Day] +--- + +```go-html-template +{{ $t := time.AsTime "2023-01-27T23:44:58-08:00" }} +{{ $t.Day }} → 27 +``` diff --git a/docs/content/en/methods/time/Equal.md b/docs/content/en/methods/time/Equal.md new file mode 100644 index 000000000..4d45a3ada --- /dev/null +++ b/docs/content/en/methods/time/Equal.md @@ -0,0 +1,20 @@ +--- +title: Equal +description: Reports whether TIME1 is equal to TIME2. +categories: [] +keywords: [] +action: + related: + - methods/time/After + - methods/time/Before + - functions/time/AsTime + returnType: bool + signatures: [TIME1.Equal TIME2] +--- + +```go-html-template +{{ $t1 := time.AsTime "2023-01-01T17:00:00-08:00" }} +{{ $t2 := time.AsTime "2023-01-01T20:00:00-05:00" }} + +{{ $t1.Equal $t2 }} → true +``` diff --git a/docs/content/en/methods/time/Format.md b/docs/content/en/methods/time/Format.md new file mode 100644 index 000000000..fc3e2635c --- /dev/null +++ b/docs/content/en/methods/time/Format.md @@ -0,0 +1,98 @@ +--- +title: Format +description: Returns a textual representation of the time.Time value formatted according to the layout string. +categories: [] +keywords: [] +action: + aliases: [] + related: + - functions/time/AsTime + - methods/time/UTC + - methods/time/Local + returnType: string + signatures: [TIME.Format LAYOUT] +toc: true +aliases: [/methods/time/format] +--- + +```go-template +{{ $t := "2023-01-27T23:44:58-08:00" }} +{{ $t = time.AsTime $t }} +{{ $format := "2 Jan 2006" }} + +{{ $t.Format $format }} → 27 Jan 2023 +``` + +{{% note %}} +To [localize] the return value, use the [`time.Format`] function instead. + +[localize]: /getting-started/glossary/#localization +[`time.Format`]: /functions/time/format +{{% /note %}} + +Use the `Format` method with any `time.Time` value, including the four predefined front matter dates: + +```go-html-template +{{ $format := "2 Jan 2006" }} + +{{ .Date.Format $format }} +{{ .PublishDate.Format $format }} +{{ .ExpiryDate.Format $format }} +{{ .Lastmod.Format $format }} +``` + +{{% note %}} +Use the [`time.Format`] function to format string representations of dates, and to format raw TOML dates that exclude time and time zone offset. + +[`time.Format`]: /functions/time/format +{{% /note %}} + +## Layout string + +{{% include "functions/_common/time-layout-string.md" %}} + +## Examples + +Given this front matter: + +{{< code-toggle fm=true >}} +title = "About time" +date = 2023-01-27T23:44:58-08:00 +{{< /code-toggle >}} + +The examples below were rendered in the `America/Los_Angeles` time zone: + +Format string|Result +:--|:-- +`Monday, January 2, 2006`|`Friday, January 27, 2023` +`Mon Jan 2 2006`|`Fri Jan 27 2023` +`January 2006`|`January 2023` +`2006-01-02`|`2023-01-27` +`Monday`|`Friday` +`02 Jan 06 15:04 MST`|`27 Jan 23 23:44 PST` +`Mon, 02 Jan 2006 15:04:05 MST`|`Fri, 27 Jan 2023 23:44:58 PST` +`Mon, 02 Jan 2006 15:04:05 -0700`|`Fri, 27 Jan 2023 23:44:58 -0800` + +## UTC and local time + +Convert and format any `time.Time` value to either Coordinated Universal Time (UTC) or local time. + +```go-html-template +{{ $t := "2023-01-27T23:44:58-08:00" }} +{{ $t = time.AsTime $t }} +{{ $format := "2 Jan 2006 3:04:05 PM MST" }} + +{{ $t.UTC.Format $format }} → 28 Jan 2023 7:44:58 AM UTC +{{ $t.Local.Format $format }} → 27 Jan 2023 11:44:58 PM PST +``` + +## Ordinal representation + +Use the [`humanize`](/functions/inflect/humanize) function to render the day of the month as an ordinal number: + +```go-html-template +{{ $t := "2023-01-27T23:44:58-08:00" }} +{{ $t = time.AsTime $t }} + +{{ humanize $t.Day }} of {{ $t.Format "January 2006" }} → 27th of January 2023 +``` diff --git a/docs/content/en/methods/time/Hour.md b/docs/content/en/methods/time/Hour.md new file mode 100644 index 000000000..58ed00260 --- /dev/null +++ b/docs/content/en/methods/time/Hour.md @@ -0,0 +1,21 @@ +--- +title: Hour +description: Returns the hour within the day of the given time.Time value, in the range [0, 23]. +categories: [] +keywords: [] +action: + related: + - methods/time/Year + - methods/time/Month + - methods/time/Day + - methods/time/Minute + - methods/time/Second + - functions/time/AsTime + returnType: int + signatures: [TIME.Hour] +--- + +```go-html-template +{{ $t := time.AsTime "2023-01-27T23:44:58-08:00" }} +{{ $t.Hour }} → 23 +``` diff --git a/docs/content/en/methods/time/IsDST.md b/docs/content/en/methods/time/IsDST.md new file mode 100644 index 000000000..df2b84cae --- /dev/null +++ b/docs/content/en/methods/time/IsDST.md @@ -0,0 +1,19 @@ +--- +title: IsDST +description: Reports whether the given time.Time value is in Daylight Savings Time. +categories: [] +keywords: [] +action: + related: + - functions/time/AsTime + returnType: bool + signatures: [TIME.IsDST] +--- + +```go-html-template +{{ $t1 := time.AsTime "2023-01-01T00:00:00-08:00" }} +{{ $t2 := time.AsTime "2023-07-01T00:00:00-07:00" }} + +{{ $t1.IsDST }} → false +{{ $t2.IsDST }} → true +``` diff --git a/docs/content/en/methods/time/IsZero.md b/docs/content/en/methods/time/IsZero.md new file mode 100644 index 000000000..2026f3b2e --- /dev/null +++ b/docs/content/en/methods/time/IsZero.md @@ -0,0 +1,19 @@ +--- +title: IsZero +description: Reports whether the given time.Time value represents the zero time instant, January 1, year 1, 00:00:00 UTC. +categories: [] +keywords: [] +action: + related: + - functions/time/AsTime + returnType: bool + signatures: [TIME.IsZero] +--- + +````go-html-template +{{ $t1 := time.AsTime "2023-01-01T00:00:00-08:00" }} +{{ $t2 := time.AsTime "0001-01-01T00:00:00-00:00" }} + +{{ $t1.IsZero }} → false +{{ $t2.IsZero }} → true +``` diff --git a/docs/content/en/methods/time/Local.md b/docs/content/en/methods/time/Local.md new file mode 100644 index 000000000..bd40e3a44 --- /dev/null +++ b/docs/content/en/methods/time/Local.md @@ -0,0 +1,17 @@ +--- +title: Local +description: Returns the given time.Time value with the location set to local time. +categories: [] +keywords: [] +action: + related: + - methods/time/UTC + - functions/time/AsTime + returnType: time.Time + signatures: [TIME.Local] +--- + +```go-html-template +{{ $t := time.AsTime "2023-01-28T07:44:58+00:00" }} +{{ $t.Local }} → 2023-01-27 23:44:58 -0800 PST +``` diff --git a/docs/content/en/methods/time/Minute.md b/docs/content/en/methods/time/Minute.md new file mode 100644 index 000000000..d482fab5d --- /dev/null +++ b/docs/content/en/methods/time/Minute.md @@ -0,0 +1,21 @@ +--- +title: Minute +description: Returns the minute offset within the hour of the given time.Time value, in the range [0, 59]. +categories: [] +keywords: [] +action: + related: + - methods/time/Year + - methods/time/Month + - methods/time/Day + - methods/time/Hour + - methods/time/Second + - functions/time/AsTime + returnType: int + signatures: [TIME.Minute] +--- + +```go-html-template +{{ $t := time.AsTime "2023-01-27T23:44:58-08:00" }} +{{ $t.Minute }} → 44 +``` diff --git a/docs/content/en/methods/time/Month.md b/docs/content/en/methods/time/Month.md new file mode 100644 index 000000000..0a01d1a70 --- /dev/null +++ b/docs/content/en/methods/time/Month.md @@ -0,0 +1,30 @@ +--- +title: Month +description: Returns the month of the year of the given time.Time value. +categories: [] +keywords: [] +action: + related: + - methods/time/Year + - methods/time/Day + - methods/time/Hour + - methods/time/Minute + - methods/time/Second + - functions/time/AsTime + returnType: time.Month + signatures: [TIME.Month] +--- + +To convert the `time.Month` value to a string: + +```go-html-template +{{ $t := time.AsTime "2023-01-27T23:44:58-08:00" }} +{{ $t.Month.String }} → January +``` + +To convert the `time.Month` value to an integer. + +```go-html-template +{{ $t := time.AsTime "2023-01-27T23:44:58-08:00" }} +{{ $t.Month | int }} → 1 +``` diff --git a/docs/content/en/methods/time/Nanosecond.md b/docs/content/en/methods/time/Nanosecond.md new file mode 100644 index 000000000..606143139 --- /dev/null +++ b/docs/content/en/methods/time/Nanosecond.md @@ -0,0 +1,16 @@ +--- +title: Nanosecond +description: Returns the nanosecond offset within the second of the given time.Time value, in the range [0, 999999999]. +categories: [] +keywords: [] +action: + related: + - functions/time/AsTime + returnType: int + signatures: [TIME.Nanosecond] +--- + +```go-html-template +{{ $t := time.AsTime "2023-01-27T23:44:58-08:00" }} +{{ $t.Nanosecond }} → 0 +``` diff --git a/docs/content/en/methods/time/Second.md b/docs/content/en/methods/time/Second.md new file mode 100644 index 000000000..e326c64bc --- /dev/null +++ b/docs/content/en/methods/time/Second.md @@ -0,0 +1,21 @@ +--- +title: Second +description: Returns the second offset within the minute of the given time.Time value, in the range [0, 59]. +categories: [] +keywords: [] +action: + related: + - methods/time/Year + - methods/time/Month + - methods/time/Day + - methods/time/Hour + - methods/time/Minute + - functions/time/AsTime + returnType: int + signatures: [TIME.Second] +--- + +```go-html-template +{{ $t := time.AsTime "2023-01-27T23:44:58-08:00" }} +{{ $t.Second }} → 58 +``` diff --git a/docs/content/en/methods/time/Sub.md b/docs/content/en/methods/time/Sub.md new file mode 100644 index 000000000..9678365eb --- /dev/null +++ b/docs/content/en/methods/time/Sub.md @@ -0,0 +1,18 @@ +--- +title: Sub +description: Returns the duration computed by subtracting TIME2 from TIME1. +categories: [] +keywords: [] +action: + related: + - functions/time/AsTime + returnType: time.Duration + signatures: [TIME1.Sub TIME2] +--- + +```go-html-template +{{ $t1 := time.AsTime "2023-01-27T23:44:58-08:00" }} +{{ $t2 := time.AsTime "2023-01-26T22:34:38-08:00" }} + +{{ $t1.Sub $t2 }} → 25h10m20s +``` diff --git a/docs/content/en/methods/time/UTC.md b/docs/content/en/methods/time/UTC.md new file mode 100644 index 000000000..6fd7b526d --- /dev/null +++ b/docs/content/en/methods/time/UTC.md @@ -0,0 +1,16 @@ +--- +title: UTC +description: Returns the given time.Time value with the location set to UTC. +categories: [] +keywords: [] +action: + related: + - methods/time/Local + - functions/time/AsTime + returnType: time.Time + signatures: [TIME.UTC] +--- + +```go-html-template +{{ $t := time.AsTime "2023-01-27T23:44:58-08:00" }} +{{ $t.UTC }} → 2023-01-28 07:44:58 +0000 UTC diff --git a/docs/content/en/methods/time/Unix.md b/docs/content/en/methods/time/Unix.md new file mode 100644 index 000000000..fcfc661fe --- /dev/null +++ b/docs/content/en/methods/time/Unix.md @@ -0,0 +1,21 @@ +--- +title: Unix +description: Returns the given time.Time value expressed as the number of seconds elapsed since January 1, 1970 UTC. +categories: [] +action: + related: + - methods/time/UnixMilli + - methods/time/UnixMicro + - methods/time/UnixNano + - functions/time/AsTime + returnType: int64 + signatures: [TIME.Unix] +aliases: [/functions/unix] +--- + +See [Unix epoch](https://en.wikipedia.org/wiki/Unix_time). + +```go-html-template +{{ $t := time.AsTime "2023-01-27T23:44:58-08:00" }} +{{ $t.Unix }} → 1674891898 +``` diff --git a/docs/content/en/methods/time/UnixMicro.md b/docs/content/en/methods/time/UnixMicro.md new file mode 100644 index 000000000..150497cd3 --- /dev/null +++ b/docs/content/en/methods/time/UnixMicro.md @@ -0,0 +1,21 @@ +--- +title: UnixMicro +description: Returns the given time.Time value expressed as the number of microseconds elapsed since January 1, 1970 UTC. +categories: [] +keywords: [] +action: + related: + - methods/time/Unix + - methods/time/UnixMilli + - methods/time/UnixNano + - functions/time/AsTime + returnType: int64 + signatures: [TIME.UnixMicro] +--- + +See [Unix epoch](https://en.wikipedia.org/wiki/Unix_time). + +```go-html-template +{{ $t := time.AsTime "2023-01-27T23:44:58-08:00" }} +{{ $t.UnixMicro }} → 1674891898000000 +``` diff --git a/docs/content/en/methods/time/UnixMilli.md b/docs/content/en/methods/time/UnixMilli.md new file mode 100644 index 000000000..e5e90ba25 --- /dev/null +++ b/docs/content/en/methods/time/UnixMilli.md @@ -0,0 +1,21 @@ +--- +title: UnixMilli +description: Returns the given time.Time value expressed as the number of milliseconds elapsed since January 1, 1970 UTC. +categories: [] +keywords: [] +action: + related: + - methods/time/Unix + - methods/time/UnixMicro + - methods/time/UnixNano + - functions/time/AsTime + returnType: int64 + signatures: [TIME.UnixMilli] +--- + +See [Unix epoch](https://en.wikipedia.org/wiki/Unix_time). + +```go-html-template +{{ $t := time.AsTime "2023-01-27T23:44:58-08:00" }} +{{ $t.UnixMilli }} → 1674891898000 +``` diff --git a/docs/content/en/methods/time/UnixNano.md b/docs/content/en/methods/time/UnixNano.md new file mode 100644 index 000000000..63db320a3 --- /dev/null +++ b/docs/content/en/methods/time/UnixNano.md @@ -0,0 +1,21 @@ +--- +title: UnixNano +description: Returns the given time.Time value expressed as the number of nanoseconds elapsed since January 1, 1970 UTC. +categories: [] +keywords: [] +action: + related: + - methods/time/Unix + - methods/time/UnixMilli + - methods/time/UnixMicro + - functions/time/AsTime + returnType: int64 + signatures: [TIME.UnixNano] +--- + +See [Unix epoch](https://en.wikipedia.org/wiki/Unix_time). + +```go-html-template +{{ $t := time.AsTime "2023-01-27T23:44:58-08:00" }} +{{ $t.UnixNano }} → 1674891898000000000 +``` diff --git a/docs/content/en/methods/time/Weekday.md b/docs/content/en/methods/time/Weekday.md new file mode 100644 index 000000000..b2a95fe9c --- /dev/null +++ b/docs/content/en/methods/time/Weekday.md @@ -0,0 +1,24 @@ +--- +title: Weekday +description: Returns the day of the week of the given time.Time value. +categories: [] +keywords: [] +action: + related: + - functions/time/AsTime + returnType: time.Weekday + signatures: [TIME.Weekday] +--- + +To convert the `time.Weekday` value to a string: + +```go-html-template +{{ $t := time.AsTime "2023-01-27T23:44:58-08:00" }} +{{ $t.Weekday.String }} → Friday +``` + +To convert the `time.Weekday` value to an integer. + +```go-html-template +{{ $t := time.AsTime "2023-01-27T23:44:58-08:00" }} +{{ $t.Weekday | int }} → 5 diff --git a/docs/content/en/methods/time/Year.md b/docs/content/en/methods/time/Year.md new file mode 100644 index 000000000..b046896f4 --- /dev/null +++ b/docs/content/en/methods/time/Year.md @@ -0,0 +1,21 @@ +--- +title: Year +description: Returns the year of the given time.Time value. +categories: [] +keywords: [] +action: + related: + - methods/time/Month + - methods/time/Day + - methods/time/Hour + - methods/time/Minute + - methods/time/Second + - functions/time/AsTime + returnType: int + signatures: [TIME.Year] +--- + +```go-html-template +{{ $t := time.AsTime "2023-01-27T23:44:58-08:00" }} +{{ $t.Year }} → 2023 +``` diff --git a/docs/content/en/methods/time/YearDay.md b/docs/content/en/methods/time/YearDay.md new file mode 100644 index 000000000..40d7d6aab --- /dev/null +++ b/docs/content/en/methods/time/YearDay.md @@ -0,0 +1,15 @@ +--- +title: YearDay +description: Returns the day of the year of the given time.Time value, in the range [1, 365] for non-leap years, and [1,366] in leap years. +categories: [] +keywords: [] +action: + related: [] + returnType: int + signatures: [TIME.YearDay] +--- + +```go-html-template +{{ $t := time.AsTime "2023-01-27T23:44:58-08:00" }} +{{ $t.YearDay }} → 27 +``` diff --git a/docs/content/en/methods/time/_index.md b/docs/content/en/methods/time/_index.md new file mode 100644 index 000000000..81d4690e0 --- /dev/null +++ b/docs/content/en/methods/time/_index.md @@ -0,0 +1,13 @@ +--- +title: Time methods +linkTitle: Time +description: Use these methods with time.Time values. +categories: [] +keywords: [] +menu: + docs: + identifier: time-methods + parent: methods +--- + +Use these methods with time.Time values. diff --git a/docs/content/en/myshowcase/bio.md b/docs/content/en/myshowcase/bio.md new file mode 100644 index 000000000..6b8f7e1a9 --- /dev/null +++ b/docs/content/en/myshowcase/bio.md @@ -0,0 +1,7 @@ + +Add some **general info** about Myshowcase here. + +The site is built by: + +* [Person 1](https://example.org) +* [Person 1](https://example.org) diff --git a/docs/content/en/myshowcase/featured.png b/docs/content/en/myshowcase/featured.png Binary files differnew file mode 100644 index 000000000..4f390132e --- /dev/null +++ b/docs/content/en/myshowcase/featured.png diff --git a/docs/content/en/myshowcase/index.md b/docs/content/en/myshowcase/index.md new file mode 100644 index 000000000..08ea1e55f --- /dev/null +++ b/docs/content/en/myshowcase/index.md @@ -0,0 +1,37 @@ +--- + +title: Myshowcase +date: 2021-01-14 + +description: "A short description of this page." + +# The URL to the site on the internet. +siteURL: https://gohugo.io/ + +# Link to the site's Hugo source code if public and you can/want to share. +# Remove or leave blank if not needed/wanted. +siteSource: https://github.com/gohugoio/hugoDocs + +# Add credit to the article author. Leave blank or remove if not needed/wanted. +byline: "[bep](https://github.com/bep), Hugo Lead" + +--- + +To complete this showcase: + +1. Write the story about your site in this file. +2. Add a summary to the `bio.md` file in this folder. +3. Replace the `featured-template.png` with a screenshot of your site. You can rename it, but it must contain the word `featured`. +4. Create a new pull request in https://github.com/gohugoio/hugoDocs/pulls + +The content of this bundle explained: + +index.md +: The main content file. Fill in required front matter metadata and write your story. I does not have to be a novel. It can even be self-promotional, but it should include Hugo in some form. + +bio.md +: A short summary of the website. Site credits (who built it) fits nicely here. + +featured.png +: A reasonably sized screenshot of your website. It can be named anything, but the name must start with "featured". The sample image is `1500x750` (2:1 aspect ratio). + diff --git a/docs/content/en/news/_index.md b/docs/content/en/news/_index.md new file mode 100644 index 000000000..e37c33a3c --- /dev/null +++ b/docs/content/en/news/_index.md @@ -0,0 +1,4 @@ +--- +title: Hugo News +aliases: [/release-notes/] +--- diff --git a/docs/content/en/quick-reference/_index.md b/docs/content/en/quick-reference/_index.md new file mode 100644 index 000000000..492cfa09b --- /dev/null +++ b/docs/content/en/quick-reference/_index.md @@ -0,0 +1,16 @@ +--- +title: Quick reference guides +linkTitle: Overview +description: Quick reference guides to Hugo's features, functions, and methods. +categories: [] +keywords: [] +menu: + docs: + identifier: quick-reference-overview + parent: quick-reference + weight: 10 +weight: 10 +showSectionMenu: false +--- + +Quick reference guides to Hugo's features, functions, and methods. diff --git a/docs/content/en/quick-reference/emojis.md b/docs/content/en/quick-reference/emojis.md new file mode 100644 index 000000000..e6b1ed415 --- /dev/null +++ b/docs/content/en/quick-reference/emojis.md @@ -0,0 +1,1624 @@ +--- +title: Emojis +description: Include emoji shortcodes in your markdown or templates. +categories: [quick reference] +keywords: [emoji] +menu: + docs: + parent: quick-reference + weight: 20 +weight: 20 +toc: true +--- + +Configure Hugo to enable emoji processing in markdown: + +{{< code-toggle file=hugo >}} +enableEmoji = true +{{< /code-toggle >}} + +With emoji processing enabled, this markdown: + +```md +Hello! :wave: +``` + +Is rendered to: + +```html +Hello! 👋 +``` + +And in your browser... Hello! :wave: + +To process an emoji shortcode from within a template, use the [`emojify`] function or pass the string through the [`RenderString`] method on a `Page` object: + +```go-html-template +{{ "Hello! :wave:" | .RenderString }} +``` + +[`emojify`]: /functions/transform/emojify +[`RenderString`]: /methods/page/renderstring + +## Introduction + +This quick reference guide was automatically generated from [GitHub Emoji API] and [Unicode Full Emoji List]. Specials thanks to [@ikatyang] for making [this list] available to the open-source community. + +GitHub [custom emoji] are not supported. + +[custom emoji]: #github-custom-emoji +[@ikatyang]: https://github.com/ikatyang +[github emoji api]: https://api.github.com/emojis +[unicode full emoji list]: https://unicode.org/emoji/charts/full-emoji-list.html +[this list]: https://github.com/ikatyang/emoji-cheat-sheet/#readme + +## Smileys & Emotion + +- [Face Smiling](#face-smiling) +- [Face Affection](#face-affection) +- [Face Tongue](#face-tongue) +- [Face Hand](#face-hand) +- [Face Neutral Skeptical](#face-neutral-skeptical) +- [Face Sleepy](#face-sleepy) +- [Face Unwell](#face-unwell) +- [Face Hat](#face-hat) +- [Face Glasses](#face-glasses) +- [Face Concerned](#face-concerned) +- [Face Negative](#face-negative) +- [Face Costume](#face-costume) +- [Cat Face](#cat-face) +- [Monkey Face](#monkey-face) +- [Heart](#heart) +- [Emotion](#emotion) + +### Face Smiling + +| | ico | shortcode | ico | shortcode | | +| - | :-: | - | :-: | - | - | +| [top](#introduction) | :grinning: | `:grinning:` | :smiley: | `:smiley:` | [top](#introduction) | +| [top](#introduction) | :smile: | `:smile:` | :grin: | `:grin:` | [top](#introduction) | +| [top](#introduction) | :laughing: | `:laughing:` `:satisfied:` | :sweat_smile: | `:sweat_smile:` | [top](#introduction) | +| [top](#introduction) | :rofl: | `:rofl:` | :joy: | `:joy:` | [top](#introduction) | +| [top](#introduction) | :slightly_smiling_face: | `:slightly_smiling_face:` | :upside_down_face: | `:upside_down_face:` | [top](#introduction) | +| [top](#introduction) | :wink: | `:wink:` | :blush: | `:blush:` | [top](#introduction) | +| [top](#introduction) | :innocent: | `:innocent:` | | | [top](#introduction) | + +### Face Affection + +| | ico | shortcode | ico | shortcode | | +| - | :-: | - | :-: | - | - | +| [top](#introduction) | :smiling_face_with_three_hearts: | `:smiling_face_with_three_hearts:` | :heart_eyes: | `:heart_eyes:` | [top](#introduction) | +| [top](#introduction) | :star_struck: | `:star_struck:` | :kissing_heart: | `:kissing_heart:` | [top](#introduction) | +| [top](#introduction) | :kissing: | `:kissing:` | :relaxed: | `:relaxed:` | [top](#introduction) | +| [top](#introduction) | :kissing_closed_eyes: | `:kissing_closed_eyes:` | :kissing_smiling_eyes: | `:kissing_smiling_eyes:` | [top](#introduction) | +| [top](#introduction) | :smiling_face_with_tear: | `:smiling_face_with_tear:` | | | [top](#introduction) | + +### Face Tongue + +| | ico | shortcode | ico | shortcode | | +| - | :-: | - | :-: | - | - | +| [top](#introduction) | :yum: | `:yum:` | :stuck_out_tongue: | `:stuck_out_tongue:` | [top](#introduction) | +| [top](#introduction) | :stuck_out_tongue_winking_eye: | `:stuck_out_tongue_winking_eye:` | :zany_face: | `:zany_face:` | [top](#introduction) | +| [top](#introduction) | :stuck_out_tongue_closed_eyes: | `:stuck_out_tongue_closed_eyes:` | :money_mouth_face: | `:money_mouth_face:` | [top](#introduction) | + +### Face Hand + +| | ico | shortcode | ico | shortcode | | +| - | :-: | - | :-: | - | - | +| [top](#introduction) | :hugs: | `:hugs:` | :hand_over_mouth: | `:hand_over_mouth:` | [top](#introduction) | +| [top](#introduction) | :shushing_face: | `:shushing_face:` | :thinking: | `:thinking:` | [top](#introduction) | + +### Face Neutral Skeptical + +| | ico | shortcode | ico | shortcode | | +| - | :-: | - | :-: | - | - | +| [top](#introduction) | :zipper_mouth_face: | `:zipper_mouth_face:` | :raised_eyebrow: | `:raised_eyebrow:` | [top](#introduction) | +| [top](#introduction) | :neutral_face: | `:neutral_face:` | :expressionless: | `:expressionless:` | [top](#introduction) | +| [top](#introduction) | :no_mouth: | `:no_mouth:` | :face_in_clouds: | `:face_in_clouds:` | [top](#introduction) | +| [top](#introduction) | :smirk: | `:smirk:` | :unamused: | `:unamused:` | [top](#introduction) | +| [top](#introduction) | :roll_eyes: | `:roll_eyes:` | :grimacing: | `:grimacing:` | [top](#introduction) | +| [top](#introduction) | :face_exhaling: | `:face_exhaling:` | :lying_face: | `:lying_face:` | [top](#introduction) | + +### Face Sleepy + +| | ico | shortcode | ico | shortcode | | +| - | :-: | - | :-: | - | - | +| [top](#introduction) | :relieved: | `:relieved:` | :pensive: | `:pensive:` | [top](#introduction) | +| [top](#introduction) | :sleepy: | `:sleepy:` | :drooling_face: | `:drooling_face:` | [top](#introduction) | +| [top](#introduction) | :sleeping: | `:sleeping:` | | | [top](#introduction) | + +### Face Unwell + +| | ico | shortcode | ico | shortcode | | +| - | :-: | - | :-: | - | - | +| [top](#introduction) | :mask: | `:mask:` | :face_with_thermometer: | `:face_with_thermometer:` | [top](#introduction) | +| [top](#introduction) | :face_with_head_bandage: | `:face_with_head_bandage:` | :nauseated_face: | `:nauseated_face:` | [top](#introduction) | +| [top](#introduction) | :vomiting_face: | `:vomiting_face:` | :sneezing_face: | `:sneezing_face:` | [top](#introduction) | +| [top](#introduction) | :hot_face: | `:hot_face:` | :cold_face: | `:cold_face:` | [top](#introduction) | +| [top](#introduction) | :woozy_face: | `:woozy_face:` | :dizzy_face: | `:dizzy_face:` | [top](#introduction) | +| [top](#introduction) | :face_with_spiral_eyes: | `:face_with_spiral_eyes:` | :exploding_head: | `:exploding_head:` | [top](#introduction) | + +### Face Hat + +| | ico | shortcode | ico | shortcode | | +| - | :-: | - | :-: | - | - | +| [top](#introduction) | :cowboy_hat_face: | `:cowboy_hat_face:` | :partying_face: | `:partying_face:` | [top](#introduction) | +| [top](#introduction) | :disguised_face: | `:disguised_face:` | | | [top](#introduction) | + +### Face Glasses + +| | ico | shortcode | ico | shortcode | | +| - | :-: | - | :-: | - | - | +| [top](#introduction) | :sunglasses: | `:sunglasses:` | :nerd_face: | `:nerd_face:` | [top](#introduction) | +| [top](#introduction) | :monocle_face: | `:monocle_face:` | | | [top](#introduction) | + +### Face Concerned + +| | ico | shortcode | ico | shortcode | | +| - | :-: | - | :-: | - | - | +| [top](#introduction) | :confused: | `:confused:` | :worried: | `:worried:` | [top](#introduction) | +| [top](#introduction) | :slightly_frowning_face: | `:slightly_frowning_face:` | :frowning_face: | `:frowning_face:` | [top](#introduction) | +| [top](#introduction) | :open_mouth: | `:open_mouth:` | :hushed: | `:hushed:` | [top](#introduction) | +| [top](#introduction) | :astonished: | `:astonished:` | :flushed: | `:flushed:` | [top](#introduction) | +| [top](#introduction) | :pleading_face: | `:pleading_face:` | :frowning: | `:frowning:` | [top](#introduction) | +| [top](#introduction) | :anguished: | `:anguished:` | :fearful: | `:fearful:` | [top](#introduction) | +| [top](#introduction) | :cold_sweat: | `:cold_sweat:` | :disappointed_relieved: | `:disappointed_relieved:` | [top](#introduction) | +| [top](#introduction) | :cry: | `:cry:` | :sob: | `:sob:` | [top](#introduction) | +| [top](#introduction) | :scream: | `:scream:` | :confounded: | `:confounded:` | [top](#introduction) | +| [top](#introduction) | :persevere: | `:persevere:` | :disappointed: | `:disappointed:` | [top](#introduction) | +| [top](#introduction) | :sweat: | `:sweat:` | :weary: | `:weary:` | [top](#introduction) | +| [top](#introduction) | :tired_face: | `:tired_face:` | :yawning_face: | `:yawning_face:` | [top](#introduction) | + +### Face Negative + +| | ico | shortcode | ico | shortcode | | +| - | :-: | - | :-: | - | - | +| [top](#introduction) | :triumph: | `:triumph:` | :pout: | `:pout:` `:rage:` | [top](#introduction) | +| [top](#introduction) | :angry: | `:angry:` | :cursing_face: | `:cursing_face:` | [top](#introduction) | +| [top](#introduction) | :smiling_imp: | `:smiling_imp:` | :imp: | `:imp:` | [top](#introduction) | +| [top](#introduction) | :skull: | `:skull:` | :skull_and_crossbones: | `:skull_and_crossbones:` | [top](#introduction) | + +### Face Costume + +| | ico | shortcode | ico | shortcode | | +| - | :-: | - | :-: | - | - | +| [top](#introduction) | :hankey: | `:hankey:` `:poop:` `:shit:` | :clown_face: | `:clown_face:` | [top](#introduction) | +| [top](#introduction) | :japanese_ogre: | `:japanese_ogre:` | :japanese_goblin: | `:japanese_goblin:` | [top](#introduction) | +| [top](#introduction) | :ghost: | `:ghost:` | :alien: | `:alien:` | [top](#introduction) | +| [top](#introduction) | :space_invader: | `:space_invader:` | :robot: | `:robot:` | [top](#introduction) | + +### Cat Face + +| | ico | shortcode | ico | shortcode | | +| - | :-: | - | :-: | - | - | +| [top](#introduction) | :smiley_cat: | `:smiley_cat:` | :smile_cat: | `:smile_cat:` | [top](#introduction) | +| [top](#introduction) | :joy_cat: | `:joy_cat:` | :heart_eyes_cat: | `:heart_eyes_cat:` | [top](#introduction) | +| [top](#introduction) | :smirk_cat: | `:smirk_cat:` | :kissing_cat: | `:kissing_cat:` | [top](#introduction) | +| [top](#introduction) | :scream_cat: | `:scream_cat:` | :crying_cat_face: | `:crying_cat_face:` | [top](#introduction) | +| [top](#introduction) | :pouting_cat: | `:pouting_cat:` | | | [top](#introduction) | + +### Monkey Face + +| | ico | shortcode | ico | shortcode | | +| - | :-: | - | :-: | - | - | +| [top](#introduction) | :see_no_evil: | `:see_no_evil:` | :hear_no_evil: | `:hear_no_evil:` | [top](#introduction) | +| [top](#introduction) | :speak_no_evil: | `:speak_no_evil:` | | | [top](#introduction) | + +### Heart + +| | ico | shortcode | ico | shortcode | | +| - | :-: | - | :-: | - | - | +| [top](#introduction) | :love_letter: | `:love_letter:` | :cupid: | `:cupid:` | [top](#introduction) | +| [top](#introduction) | :gift_heart: | `:gift_heart:` | :sparkling_heart: | `:sparkling_heart:` | [top](#introduction) | +| [top](#introduction) | :heartpulse: | `:heartpulse:` | :heartbeat: | `:heartbeat:` | [top](#introduction) | +| [top](#introduction) | :revolving_hearts: | `:revolving_hearts:` | :two_hearts: | `:two_hearts:` | [top](#introduction) | +| [top](#introduction) | :heart_decoration: | `:heart_decoration:` | :heavy_heart_exclamation: | `:heavy_heart_exclamation:` | [top](#introduction) | +| [top](#introduction) | :broken_heart: | `:broken_heart:` | :heart_on_fire: | `:heart_on_fire:` | [top](#introduction) | +| [top](#introduction) | :mending_heart: | `:mending_heart:` | :heart: | `:heart:` | [top](#introduction) | +| [top](#introduction) | :orange_heart: | `:orange_heart:` | :yellow_heart: | `:yellow_heart:` | [top](#introduction) | +| [top](#introduction) | :green_heart: | `:green_heart:` | :blue_heart: | `:blue_heart:` | [top](#introduction) | +| [top](#introduction) | :purple_heart: | `:purple_heart:` | :brown_heart: | `:brown_heart:` | [top](#introduction) | +| [top](#introduction) | :black_heart: | `:black_heart:` | :white_heart: | `:white_heart:` | [top](#introduction) | + +### Emotion + +| | ico | shortcode | ico | shortcode | | +| - | :-: | - | :-: | - | - | +| [top](#introduction) | :kiss: | `:kiss:` | :100: | `:100:` | [top](#introduction) | +| [top](#introduction) | :anger: | `:anger:` | :boom: | `:boom:` `:collision:` | [top](#introduction) | +| [top](#introduction) | :dizzy: | `:dizzy:` | :sweat_drops: | `:sweat_drops:` | [top](#introduction) | +| [top](#introduction) | :dash: | `:dash:` | :hole: | `:hole:` | [top](#introduction) | +| [top](#introduction) | :speech_balloon: | `:speech_balloon:` | :eye_speech_bubble: | `:eye_speech_bubble:` | [top](#introduction) | +| [top](#introduction) | :left_speech_bubble: | `:left_speech_bubble:` | :right_anger_bubble: | `:right_anger_bubble:` | [top](#introduction) | +| [top](#introduction) | :thought_balloon: | `:thought_balloon:` | :zzz: | `:zzz:` | [top](#introduction) | + +## People & Body + +- [Hand Fingers Open](#hand-fingers-open) +- [Hand Fingers Partial](#hand-fingers-partial) +- [Hand Single Finger](#hand-single-finger) +- [Hand Fingers Closed](#hand-fingers-closed) +- [Hands](#hands) +- [Hand Prop](#hand-prop) +- [Body Parts](#body-parts) +- [Person](#person) +- [Person Gesture](#person-gesture) +- [Person Role](#person-role) +- [Person Fantasy](#person-fantasy) +- [Person Activity](#person-activity) +- [Person Sport](#person-sport) +- [Person Resting](#person-resting) +- [Family](#family) +- [Person Symbol](#person-symbol) + +### Hand Fingers Open + +| | ico | shortcode | ico | shortcode | | +| - | :-: | - | :-: | - | - | +| [top](#people--body) | :wave: | `:wave:` | :raised_back_of_hand: | `:raised_back_of_hand:` | [top](#introduction) | +| [top](#people--body) | :raised_hand_with_fingers_splayed: | `:raised_hand_with_fingers_splayed:` | :hand: | `:hand:` `:raised_hand:` | [top](#introduction) | +| [top](#people--body) | :vulcan_salute: | `:vulcan_salute:` | | | [top](#introduction) | + +### Hand Fingers Partial + +| | ico | shortcode | ico | shortcode | | +| - | :-: | - | :-: | - | - | +| [top](#people--body) | :ok_hand: | `:ok_hand:` | :pinched_fingers: | `:pinched_fingers:` | [top](#introduction) | +| [top](#people--body) | :pinching_hand: | `:pinching_hand:` | :v: | `:v:` | [top](#introduction) | +| [top](#people--body) | :crossed_fingers: | `:crossed_fingers:` | :love_you_gesture: | `:love_you_gesture:` | [top](#introduction) | +| [top](#people--body) | :metal: | `:metal:` | :call_me_hand: | `:call_me_hand:` | [top](#introduction) | + +### Hand Single Finger + +| | ico | shortcode | ico | shortcode | | +| - | :-: | - | :-: | - | - | +| [top](#people--body) | :point_left: | `:point_left:` | :point_right: | `:point_right:` | [top](#introduction) | +| [top](#people--body) | :point_up_2: | `:point_up_2:` | :fu: | `:fu:` `:middle_finger:` | [top](#introduction) | +| [top](#people--body) | :point_down: | `:point_down:` | :point_up: | `:point_up:` | [top](#introduction) | + +### Hand Fingers Closed + +| | ico | shortcode | ico | shortcode | | +| - | :-: | - | :-: | - | - | +| [top](#people--body) | :+1: | `:+1:` `:thumbsup:` | :-1: | `:-1:` `:thumbsdown:` | [top](#introduction) | +| [top](#people--body) | :fist: | `:fist:` `:fist_raised:` | :facepunch: | `:facepunch:` `:fist_oncoming:` `:punch:` | [top](#introduction) | +| [top](#people--body) | :fist_left: | `:fist_left:` | :fist_right: | `:fist_right:` | [top](#introduction) | + +### Hands + +| | ico | shortcode | ico | shortcode | | +| - | :-: | - | :-: | - | - | +| [top](#people--body) | :clap: | `:clap:` | :raised_hands: | `:raised_hands:` | [top](#introduction) | +| [top](#people--body) | :open_hands: | `:open_hands:` | :palms_up_together: | `:palms_up_together:` | [top](#introduction) | +| [top](#people--body) | :handshake: | `:handshake:` | :pray: | `:pray:` | [top](#introduction) | + +### Hand Prop + +| | ico | shortcode | ico | shortcode | | +| - | :-: | - | :-: | - | - | +| [top](#people--body) | :writing_hand: | `:writing_hand:` | :nail_care: | `:nail_care:` | [top](#introduction) | +| [top](#people--body) | :selfie: | `:selfie:` | | | [top](#introduction) | + +### Body Parts + +| | ico | shortcode | ico | shortcode | | +| - | :-: | - | :-: | - | - | +| [top](#people--body) | :muscle: | `:muscle:` | :mechanical_arm: | `:mechanical_arm:` | [top](#introduction) | +| [top](#people--body) | :mechanical_leg: | `:mechanical_leg:` | :leg: | `:leg:` | [top](#introduction) | +| [top](#people--body) | :foot: | `:foot:` | :ear: | `:ear:` | [top](#introduction) | +| [top](#people--body) | :ear_with_hearing_aid: | `:ear_with_hearing_aid:` | :nose: | `:nose:` | [top](#introduction) | +| [top](#people--body) | :brain: | `:brain:` | :anatomical_heart: | `:anatomical_heart:` | [top](#introduction) | +| [top](#people--body) | :lungs: | `:lungs:` | :tooth: | `:tooth:` | [top](#introduction) | +| [top](#people--body) | :bone: | `:bone:` | :eyes: | `:eyes:` | [top](#introduction) | +| [top](#people--body) | :eye: | `:eye:` | :tongue: | `:tongue:` | [top](#introduction) | +| [top](#people--body) | :lips: | `:lips:` | | | [top](#introduction) | + +### Person + +| | ico | shortcode | ico | shortcode | | +| - | :-: | - | :-: | - | - | +| [top](#people--body) | :baby: | `:baby:` | :child: | `:child:` | [top](#introduction) | +| [top](#people--body) | :boy: | `:boy:` | :girl: | `:girl:` | [top](#introduction) | +| [top](#people--body) | :adult: | `:adult:` | :blond_haired_person: | `:blond_haired_person:` | [top](#introduction) | +| [top](#people--body) | :man: | `:man:` | :bearded_person: | `:bearded_person:` | [top](#introduction) | +| [top](#people--body) | :man_beard: | `:man_beard:` | :woman_beard: | `:woman_beard:` | [top](#introduction) | +| [top](#people--body) | :red_haired_man: | `:red_haired_man:` | :curly_haired_man: | `:curly_haired_man:` | [top](#introduction) | +| [top](#people--body) | :white_haired_man: | `:white_haired_man:` | :bald_man: | `:bald_man:` | [top](#introduction) | +| [top](#people--body) | :woman: | `:woman:` | :red_haired_woman: | `:red_haired_woman:` | [top](#introduction) | +| [top](#people--body) | :person_red_hair: | `:person_red_hair:` | :curly_haired_woman: | `:curly_haired_woman:` | [top](#introduction) | +| [top](#people--body) | :person_curly_hair: | `:person_curly_hair:` | :white_haired_woman: | `:white_haired_woman:` | [top](#introduction) | +| [top](#people--body) | :person_white_hair: | `:person_white_hair:` | :bald_woman: | `:bald_woman:` | [top](#introduction) | +| [top](#people--body) | :person_bald: | `:person_bald:` | :blond_haired_woman: | `:blond_haired_woman:` `:blonde_woman:` | [top](#introduction) | +| [top](#people--body) | :blond_haired_man: | `:blond_haired_man:` | :older_adult: | `:older_adult:` | [top](#introduction) | +| [top](#people--body) | :older_man: | `:older_man:` | :older_woman: | `:older_woman:` | [top](#introduction) | + +### Person Gesture + +| | ico | shortcode | ico | shortcode | | +| - | :-: | - | :-: | - | - | +| [top](#people--body) | :frowning_person: | `:frowning_person:` | :frowning_man: | `:frowning_man:` | [top](#introduction) | +| [top](#people--body) | :frowning_woman: | `:frowning_woman:` | :pouting_face: | `:pouting_face:` | [top](#introduction) | +| [top](#people--body) | :pouting_man: | `:pouting_man:` | :pouting_woman: | `:pouting_woman:` | [top](#introduction) | +| [top](#people--body) | :no_good: | `:no_good:` | :ng_man: | `:ng_man:` `:no_good_man:` | [top](#introduction) | +| [top](#people--body) | :ng_woman: | `:ng_woman:` `:no_good_woman:` | :ok_person: | `:ok_person:` | [top](#introduction) | +| [top](#people--body) | :ok_man: | `:ok_man:` | :ok_woman: | `:ok_woman:` | [top](#introduction) | +| [top](#people--body) | :information_desk_person: | `:information_desk_person:` `:tipping_hand_person:` | :sassy_man: | `:sassy_man:` `:tipping_hand_man:` | [top](#introduction) | +| [top](#people--body) | :sassy_woman: | `:sassy_woman:` `:tipping_hand_woman:` | :raising_hand: | `:raising_hand:` | [top](#introduction) | +| [top](#people--body) | :raising_hand_man: | `:raising_hand_man:` | :raising_hand_woman: | `:raising_hand_woman:` | [top](#introduction) | +| [top](#people--body) | :deaf_person: | `:deaf_person:` | :deaf_man: | `:deaf_man:` | [top](#introduction) | +| [top](#people--body) | :deaf_woman: | `:deaf_woman:` | :bow: | `:bow:` | [top](#introduction) | +| [top](#people--body) | :bowing_man: | `:bowing_man:` | :bowing_woman: | `:bowing_woman:` | [top](#introduction) | +| [top](#people--body) | :facepalm: | `:facepalm:` | :man_facepalming: | `:man_facepalming:` | [top](#introduction) | +| [top](#people--body) | :woman_facepalming: | `:woman_facepalming:` | :shrug: | `:shrug:` | [top](#introduction) | +| [top](#people--body) | :man_shrugging: | `:man_shrugging:` | :woman_shrugging: | `:woman_shrugging:` | [top](#introduction) | + +### Person Role + +| | ico | shortcode | ico | shortcode | | +| - | :-: | - | :-: | - | - | +| [top](#people--body) | :health_worker: | `:health_worker:` | :man_health_worker: | `:man_health_worker:` | [top](#introduction) | +| [top](#people--body) | :woman_health_worker: | `:woman_health_worker:` | :student: | `:student:` | [top](#introduction) | +| [top](#people--body) | :man_student: | `:man_student:` | :woman_student: | `:woman_student:` | [top](#introduction) | +| [top](#people--body) | :teacher: | `:teacher:` | :man_teacher: | `:man_teacher:` | [top](#introduction) | +| [top](#people--body) | :woman_teacher: | `:woman_teacher:` | :judge: | `:judge:` | [top](#introduction) | +| [top](#people--body) | :man_judge: | `:man_judge:` | :woman_judge: | `:woman_judge:` | [top](#introduction) | +| [top](#people--body) | :farmer: | `:farmer:` | :man_farmer: | `:man_farmer:` | [top](#introduction) | +| [top](#people--body) | :woman_farmer: | `:woman_farmer:` | :cook: | `:cook:` | [top](#introduction) | +| [top](#people--body) | :man_cook: | `:man_cook:` | :woman_cook: | `:woman_cook:` | [top](#introduction) | +| [top](#people--body) | :mechanic: | `:mechanic:` | :man_mechanic: | `:man_mechanic:` | [top](#introduction) | +| [top](#people--body) | :woman_mechanic: | `:woman_mechanic:` | :factory_worker: | `:factory_worker:` | [top](#introduction) | +| [top](#people--body) | :man_factory_worker: | `:man_factory_worker:` | :woman_factory_worker: | `:woman_factory_worker:` | [top](#introduction) | +| [top](#people--body) | :office_worker: | `:office_worker:` | :man_office_worker: | `:man_office_worker:` | [top](#introduction) | +| [top](#people--body) | :woman_office_worker: | `:woman_office_worker:` | :scientist: | `:scientist:` | [top](#introduction) | +| [top](#people--body) | :man_scientist: | `:man_scientist:` | :woman_scientist: | `:woman_scientist:` | [top](#introduction) | +| [top](#people--body) | :technologist: | `:technologist:` | :man_technologist: | `:man_technologist:` | [top](#introduction) | +| [top](#people--body) | :woman_technologist: | `:woman_technologist:` | :singer: | `:singer:` | [top](#introduction) | +| [top](#people--body) | :man_singer: | `:man_singer:` | :woman_singer: | `:woman_singer:` | [top](#introduction) | +| [top](#people--body) | :artist: | `:artist:` | :man_artist: | `:man_artist:` | [top](#introduction) | +| [top](#people--body) | :woman_artist: | `:woman_artist:` | :pilot: | `:pilot:` | [top](#introduction) | +| [top](#people--body) | :man_pilot: | `:man_pilot:` | :woman_pilot: | `:woman_pilot:` | [top](#introduction) | +| [top](#people--body) | :astronaut: | `:astronaut:` | :man_astronaut: | `:man_astronaut:` | [top](#introduction) | +| [top](#people--body) | :woman_astronaut: | `:woman_astronaut:` | :firefighter: | `:firefighter:` | [top](#introduction) | +| [top](#people--body) | :man_firefighter: | `:man_firefighter:` | :woman_firefighter: | `:woman_firefighter:` | [top](#introduction) | +| [top](#people--body) | :cop: | `:cop:` `:police_officer:` | :policeman: | `:policeman:` | [top](#introduction) | +| [top](#people--body) | :policewoman: | `:policewoman:` | :detective: | `:detective:` | [top](#introduction) | +| [top](#people--body) | :male_detective: | `:male_detective:` | :female_detective: | `:female_detective:` | [top](#introduction) | +| [top](#people--body) | :guard: | `:guard:` | :guardsman: | `:guardsman:` | [top](#introduction) | +| [top](#people--body) | :guardswoman: | `:guardswoman:` | :ninja: | `:ninja:` | [top](#introduction) | +| [top](#people--body) | :construction_worker: | `:construction_worker:` | :construction_worker_man: | `:construction_worker_man:` | [top](#introduction) | +| [top](#people--body) | :construction_worker_woman: | `:construction_worker_woman:` | :prince: | `:prince:` | [top](#introduction) | +| [top](#people--body) | :princess: | `:princess:` | :person_with_turban: | `:person_with_turban:` | [top](#introduction) | +| [top](#people--body) | :man_with_turban: | `:man_with_turban:` | :woman_with_turban: | `:woman_with_turban:` | [top](#introduction) | +| [top](#people--body) | :man_with_gua_pi_mao: | `:man_with_gua_pi_mao:` | :woman_with_headscarf: | `:woman_with_headscarf:` | [top](#introduction) | +| [top](#people--body) | :person_in_tuxedo: | `:person_in_tuxedo:` | :man_in_tuxedo: | `:man_in_tuxedo:` | [top](#introduction) | +| [top](#people--body) | :woman_in_tuxedo: | `:woman_in_tuxedo:` | :person_with_veil: | `:person_with_veil:` | [top](#introduction) | +| [top](#people--body) | :man_with_veil: | `:man_with_veil:` | :bride_with_veil: | `:bride_with_veil:` `:woman_with_veil:` | [top](#introduction) | +| [top](#people--body) | :pregnant_woman: | `:pregnant_woman:` | :breast_feeding: | `:breast_feeding:` | [top](#introduction) | +| [top](#people--body) | :woman_feeding_baby: | `:woman_feeding_baby:` | :man_feeding_baby: | `:man_feeding_baby:` | [top](#introduction) | +| [top](#people--body) | :person_feeding_baby: | `:person_feeding_baby:` | | | [top](#introduction) | + +### Person Fantasy + +| | ico | shortcode | ico | shortcode | | +| - | :-: | - | :-: | - | - | +| [top](#people--body) | :angel: | `:angel:` | :santa: | `:santa:` | [top](#introduction) | +| [top](#people--body) | :mrs_claus: | `:mrs_claus:` | :mx_claus: | `:mx_claus:` | [top](#introduction) | +| [top](#people--body) | :superhero: | `:superhero:` | :superhero_man: | `:superhero_man:` | [top](#introduction) | +| [top](#people--body) | :superhero_woman: | `:superhero_woman:` | :supervillain: | `:supervillain:` | [top](#introduction) | +| [top](#people--body) | :supervillain_man: | `:supervillain_man:` | :supervillain_woman: | `:supervillain_woman:` | [top](#introduction) | +| [top](#people--body) | :mage: | `:mage:` | :mage_man: | `:mage_man:` | [top](#introduction) | +| [top](#people--body) | :mage_woman: | `:mage_woman:` | :fairy: | `:fairy:` | [top](#introduction) | +| [top](#people--body) | :fairy_man: | `:fairy_man:` | :fairy_woman: | `:fairy_woman:` | [top](#introduction) | +| [top](#people--body) | :vampire: | `:vampire:` | :vampire_man: | `:vampire_man:` | [top](#introduction) | +| [top](#people--body) | :vampire_woman: | `:vampire_woman:` | :merperson: | `:merperson:` | [top](#introduction) | +| [top](#people--body) | :merman: | `:merman:` | :mermaid: | `:mermaid:` | [top](#introduction) | +| [top](#people--body) | :elf: | `:elf:` | :elf_man: | `:elf_man:` | [top](#introduction) | +| [top](#people--body) | :elf_woman: | `:elf_woman:` | :genie: | `:genie:` | [top](#introduction) | +| [top](#people--body) | :genie_man: | `:genie_man:` | :genie_woman: | `:genie_woman:` | [top](#introduction) | +| [top](#people--body) | :zombie: | `:zombie:` | :zombie_man: | `:zombie_man:` | [top](#introduction) | +| [top](#people--body) | :zombie_woman: | `:zombie_woman:` | | | [top](#introduction) | + +### Person Activity + +| | ico | shortcode | ico | shortcode | | +| - | :-: | - | :-: | - | - | +| [top](#people--body) | :massage: | `:massage:` | :massage_man: | `:massage_man:` | [top](#introduction) | +| [top](#people--body) | :massage_woman: | `:massage_woman:` | :haircut: | `:haircut:` | [top](#introduction) | +| [top](#people--body) | :haircut_man: | `:haircut_man:` | :haircut_woman: | `:haircut_woman:` | [top](#introduction) | +| [top](#people--body) | :walking: | `:walking:` | :walking_man: | `:walking_man:` | [top](#introduction) | +| [top](#people--body) | :walking_woman: | `:walking_woman:` | :standing_person: | `:standing_person:` | [top](#introduction) | +| [top](#people--body) | :standing_man: | `:standing_man:` | :standing_woman: | `:standing_woman:` | [top](#introduction) | +| [top](#people--body) | :kneeling_person: | `:kneeling_person:` | :kneeling_man: | `:kneeling_man:` | [top](#introduction) | +| [top](#people--body) | :kneeling_woman: | `:kneeling_woman:` | :person_with_probing_cane: | `:person_with_probing_cane:` | [top](#introduction) | +| [top](#people--body) | :man_with_probing_cane: | `:man_with_probing_cane:` | :woman_with_probing_cane: | `:woman_with_probing_cane:` | [top](#introduction) | +| [top](#people--body) | :person_in_motorized_wheelchair: | `:person_in_motorized_wheelchair:` | :man_in_motorized_wheelchair: | `:man_in_motorized_wheelchair:` | [top](#introduction) | +| [top](#people--body) | :woman_in_motorized_wheelchair: | `:woman_in_motorized_wheelchair:` | :person_in_manual_wheelchair: | `:person_in_manual_wheelchair:` | [top](#introduction) | +| [top](#people--body) | :man_in_manual_wheelchair: | `:man_in_manual_wheelchair:` | :woman_in_manual_wheelchair: | `:woman_in_manual_wheelchair:` | [top](#introduction) | +| [top](#people--body) | :runner: | `:runner:` `:running:` | :running_man: | `:running_man:` | [top](#introduction) | +| [top](#people--body) | :running_woman: | `:running_woman:` | :dancer: | `:dancer:` `:woman_dancing:` | [top](#introduction) | +| [top](#people--body) | :man_dancing: | `:man_dancing:` | :business_suit_levitating: | `:business_suit_levitating:` | [top](#introduction) | +| [top](#people--body) | :dancers: | `:dancers:` | :dancing_men: | `:dancing_men:` | [top](#introduction) | +| [top](#people--body) | :dancing_women: | `:dancing_women:` | :sauna_person: | `:sauna_person:` | [top](#introduction) | +| [top](#people--body) | :sauna_man: | `:sauna_man:` | :sauna_woman: | `:sauna_woman:` | [top](#introduction) | +| [top](#people--body) | :climbing: | `:climbing:` | :climbing_man: | `:climbing_man:` | [top](#introduction) | +| [top](#people--body) | :climbing_woman: | `:climbing_woman:` | | | [top](#introduction) | + +### Person Sport + +| | ico | shortcode | ico | shortcode | | +| - | :-: | - | :-: | - | - | +| [top](#people--body) | :person_fencing: | `:person_fencing:` | :horse_racing: | `:horse_racing:` | [top](#introduction) | +| [top](#people--body) | :skier: | `:skier:` | :snowboarder: | `:snowboarder:` | [top](#introduction) | +| [top](#people--body) | :golfing: | `:golfing:` | :golfing_man: | `:golfing_man:` | [top](#introduction) | +| [top](#people--body) | :golfing_woman: | `:golfing_woman:` | :surfer: | `:surfer:` | [top](#introduction) | +| [top](#people--body) | :surfing_man: | `:surfing_man:` | :surfing_woman: | `:surfing_woman:` | [top](#introduction) | +| [top](#people--body) | :rowboat: | `:rowboat:` | :rowing_man: | `:rowing_man:` | [top](#introduction) | +| [top](#people--body) | :rowing_woman: | `:rowing_woman:` | :swimmer: | `:swimmer:` | [top](#introduction) | +| [top](#people--body) | :swimming_man: | `:swimming_man:` | :swimming_woman: | `:swimming_woman:` | [top](#introduction) | +| [top](#people--body) | :bouncing_ball_person: | `:bouncing_ball_person:` | :basketball_man: | `:basketball_man:` `:bouncing_ball_man:` | [top](#introduction) | +| [top](#people--body) | :basketball_woman: | `:basketball_woman:` `:bouncing_ball_woman:` | :weight_lifting: | `:weight_lifting:` | [top](#introduction) | +| [top](#people--body) | :weight_lifting_man: | `:weight_lifting_man:` | :weight_lifting_woman: | `:weight_lifting_woman:` | [top](#introduction) | +| [top](#people--body) | :bicyclist: | `:bicyclist:` | :biking_man: | `:biking_man:` | [top](#introduction) | +| [top](#people--body) | :biking_woman: | `:biking_woman:` | :mountain_bicyclist: | `:mountain_bicyclist:` | [top](#introduction) | +| [top](#people--body) | :mountain_biking_man: | `:mountain_biking_man:` | :mountain_biking_woman: | `:mountain_biking_woman:` | [top](#introduction) | +| [top](#people--body) | :cartwheeling: | `:cartwheeling:` | :man_cartwheeling: | `:man_cartwheeling:` | [top](#introduction) | +| [top](#people--body) | :woman_cartwheeling: | `:woman_cartwheeling:` | :wrestling: | `:wrestling:` | [top](#introduction) | +| [top](#people--body) | :men_wrestling: | `:men_wrestling:` | :women_wrestling: | `:women_wrestling:` | [top](#introduction) | +| [top](#people--body) | :water_polo: | `:water_polo:` | :man_playing_water_polo: | `:man_playing_water_polo:` | [top](#introduction) | +| [top](#people--body) | :woman_playing_water_polo: | `:woman_playing_water_polo:` | :handball_person: | `:handball_person:` | [top](#introduction) | +| [top](#people--body) | :man_playing_handball: | `:man_playing_handball:` | :woman_playing_handball: | `:woman_playing_handball:` | [top](#introduction) | +| [top](#people--body) | :juggling_person: | `:juggling_person:` | :man_juggling: | `:man_juggling:` | [top](#introduction) | +| [top](#people--body) | :woman_juggling: | `:woman_juggling:` | | | [top](#introduction) | + +### Person Resting + +| | ico | shortcode | ico | shortcode | | +| - | :-: | - | :-: | - | - | +| [top](#people--body) | :lotus_position: | `:lotus_position:` | :lotus_position_man: | `:lotus_position_man:` | [top](#introduction) | +| [top](#people--body) | :lotus_position_woman: | `:lotus_position_woman:` | :bath: | `:bath:` | [top](#introduction) | +| [top](#people--body) | :sleeping_bed: | `:sleeping_bed:` | | | [top](#introduction) | + +### Family + +| | ico | shortcode | ico | shortcode | | +| - | :-: | - | :-: | - | - | +| [top](#people--body) | :people_holding_hands: | `:people_holding_hands:` | :two_women_holding_hands: | `:two_women_holding_hands:` | [top](#introduction) | +| [top](#people--body) | :couple: | `:couple:` | :two_men_holding_hands: | `:two_men_holding_hands:` | [top](#introduction) | +| [top](#people--body) | :couplekiss: | `:couplekiss:` | :couplekiss_man_woman: | `:couplekiss_man_woman:` | [top](#introduction) | +| [top](#people--body) | :couplekiss_man_man: | `:couplekiss_man_man:` | :couplekiss_woman_woman: | `:couplekiss_woman_woman:` | [top](#introduction) | +| [top](#people--body) | :couple_with_heart: | `:couple_with_heart:` | :couple_with_heart_woman_man: | `:couple_with_heart_woman_man:` | [top](#introduction) | +| [top](#people--body) | :couple_with_heart_man_man: | `:couple_with_heart_man_man:` | :couple_with_heart_woman_woman: | `:couple_with_heart_woman_woman:` | [top](#introduction) | +| [top](#people--body) | :family_man_woman_boy: | `:family_man_woman_boy:` | :family_man_woman_girl: | `:family_man_woman_girl:` | [top](#introduction) | +| [top](#people--body) | :family_man_woman_girl_boy: | `:family_man_woman_girl_boy:` | :family_man_woman_boy_boy: | `:family_man_woman_boy_boy:` | [top](#introduction) | +| [top](#people--body) | :family_man_woman_girl_girl: | `:family_man_woman_girl_girl:` | :family_man_man_boy: | `:family_man_man_boy:` | [top](#introduction) | +| [top](#people--body) | :family_man_man_girl: | `:family_man_man_girl:` | :family_man_man_girl_boy: | `:family_man_man_girl_boy:` | [top](#introduction) | +| [top](#people--body) | :family_man_man_boy_boy: | `:family_man_man_boy_boy:` | :family_man_man_girl_girl: | `:family_man_man_girl_girl:` | [top](#introduction) | +| [top](#people--body) | :family_woman_woman_boy: | `:family_woman_woman_boy:` | :family_woman_woman_girl: | `:family_woman_woman_girl:` | [top](#introduction) | +| [top](#people--body) | :family_woman_woman_girl_boy: | `:family_woman_woman_girl_boy:` | :family_woman_woman_boy_boy: | `:family_woman_woman_boy_boy:` | [top](#introduction) | +| [top](#people--body) | :family_woman_woman_girl_girl: | `:family_woman_woman_girl_girl:` | :family_man_boy: | `:family_man_boy:` | [top](#introduction) | +| [top](#people--body) | :family_man_boy_boy: | `:family_man_boy_boy:` | :family_man_girl: | `:family_man_girl:` | [top](#introduction) | +| [top](#people--body) | :family_man_girl_boy: | `:family_man_girl_boy:` | :family_man_girl_girl: | `:family_man_girl_girl:` | [top](#introduction) | +| [top](#people--body) | :family_woman_boy: | `:family_woman_boy:` | :family_woman_boy_boy: | `:family_woman_boy_boy:` | [top](#introduction) | +| [top](#people--body) | :family_woman_girl: | `:family_woman_girl:` | :family_woman_girl_boy: | `:family_woman_girl_boy:` | [top](#introduction) | +| [top](#people--body) | :family_woman_girl_girl: | `:family_woman_girl_girl:` | | | [top](#introduction) | + +### Person Symbol + +| | ico | shortcode | ico | shortcode | | +| - | :-: | - | :-: | - | - | +| [top](#people--body) | :speaking_head: | `:speaking_head:` | :bust_in_silhouette: | `:bust_in_silhouette:` | [top](#introduction) | +| [top](#people--body) | :busts_in_silhouette: | `:busts_in_silhouette:` | :people_hugging: | `:people_hugging:` | [top](#introduction) | +| [top](#people--body) | :family: | `:family:` | :footprints: | `:footprints:` | [top](#introduction) | + +## Animals & Nature + +- [Animal Mammal](#animal-mammal) +- [Animal Bird](#animal-bird) +- [Animal Amphibian](#animal-amphibian) +- [Animal Reptile](#animal-reptile) +- [Animal Marine](#animal-marine) +- [Animal Bug](#animal-bug) +- [Plant Flower](#plant-flower) +- [Plant Other](#plant-other) + +### Animal Mammal + +| | ico | shortcode | ico | shortcode | | +| - | :-: | - | :-: | - | - | +| [top](#animals--nature) | :monkey_face: | `:monkey_face:` | :monkey: | `:monkey:` | [top](#introduction) | +| [top](#animals--nature) | :gorilla: | `:gorilla:` | :orangutan: | `:orangutan:` | [top](#introduction) | +| [top](#animals--nature) | :dog: | `:dog:` | :dog2: | `:dog2:` | [top](#introduction) | +| [top](#animals--nature) | :guide_dog: | `:guide_dog:` | :service_dog: | `:service_dog:` | [top](#introduction) | +| [top](#animals--nature) | :poodle: | `:poodle:` | :wolf: | `:wolf:` | [top](#introduction) | +| [top](#animals--nature) | :fox_face: | `:fox_face:` | :raccoon: | `:raccoon:` | [top](#introduction) | +| [top](#animals--nature) | :cat: | `:cat:` | :cat2: | `:cat2:` | [top](#introduction) | +| [top](#animals--nature) | :black_cat: | `:black_cat:` | :lion: | `:lion:` | [top](#introduction) | +| [top](#animals--nature) | :tiger: | `:tiger:` | :tiger2: | `:tiger2:` | [top](#introduction) | +| [top](#animals--nature) | :leopard: | `:leopard:` | :horse: | `:horse:` | [top](#introduction) | +| [top](#animals--nature) | :racehorse: | `:racehorse:` | :unicorn: | `:unicorn:` | [top](#introduction) | +| [top](#animals--nature) | :zebra: | `:zebra:` | :deer: | `:deer:` | [top](#introduction) | +| [top](#animals--nature) | :bison: | `:bison:` | :cow: | `:cow:` | [top](#introduction) | +| [top](#animals--nature) | :ox: | `:ox:` | :water_buffalo: | `:water_buffalo:` | [top](#introduction) | +| [top](#animals--nature) | :cow2: | `:cow2:` | :pig: | `:pig:` | [top](#introduction) | +| [top](#animals--nature) | :pig2: | `:pig2:` | :boar: | `:boar:` | [top](#introduction) | +| [top](#animals--nature) | :pig_nose: | `:pig_nose:` | :ram: | `:ram:` | [top](#introduction) | +| [top](#animals--nature) | :sheep: | `:sheep:` | :goat: | `:goat:` | [top](#introduction) | +| [top](#animals--nature) | :dromedary_camel: | `:dromedary_camel:` | :camel: | `:camel:` | [top](#introduction) | +| [top](#animals--nature) | :llama: | `:llama:` | :giraffe: | `:giraffe:` | [top](#introduction) | +| [top](#animals--nature) | :elephant: | `:elephant:` | :mammoth: | `:mammoth:` | [top](#introduction) | +| [top](#animals--nature) | :rhinoceros: | `:rhinoceros:` | :hippopotamus: | `:hippopotamus:` | [top](#introduction) | +| [top](#animals--nature) | :mouse: | `:mouse:` | :mouse2: | `:mouse2:` | [top](#introduction) | +| [top](#animals--nature) | :rat: | `:rat:` | :hamster: | `:hamster:` | [top](#introduction) | +| [top](#animals--nature) | :rabbit: | `:rabbit:` | :rabbit2: | `:rabbit2:` | [top](#introduction) | +| [top](#animals--nature) | :chipmunk: | `:chipmunk:` | :beaver: | `:beaver:` | [top](#introduction) | +| [top](#animals--nature) | :hedgehog: | `:hedgehog:` | :bat: | `:bat:` | [top](#introduction) | +| [top](#animals--nature) | :bear: | `:bear:` | :polar_bear: | `:polar_bear:` | [top](#introduction) | +| [top](#animals--nature) | :koala: | `:koala:` | :panda_face: | `:panda_face:` | [top](#introduction) | +| [top](#animals--nature) | :sloth: | `:sloth:` | :otter: | `:otter:` | [top](#introduction) | +| [top](#animals--nature) | :skunk: | `:skunk:` | :kangaroo: | `:kangaroo:` | [top](#introduction) | +| [top](#animals--nature) | :badger: | `:badger:` | :feet: | `:feet:` `:paw_prints:` | [top](#introduction) | + +### Animal Bird + +| | ico | shortcode | ico | shortcode | | +| - | :-: | - | :-: | - | - | +| [top](#animals--nature) | :turkey: | `:turkey:` | :chicken: | `:chicken:` | [top](#introduction) | +| [top](#animals--nature) | :rooster: | `:rooster:` | :hatching_chick: | `:hatching_chick:` | [top](#introduction) | +| [top](#animals--nature) | :baby_chick: | `:baby_chick:` | :hatched_chick: | `:hatched_chick:` | [top](#introduction) | +| [top](#animals--nature) | :bird: | `:bird:` | :penguin: | `:penguin:` | [top](#introduction) | +| [top](#animals--nature) | :dove: | `:dove:` | :eagle: | `:eagle:` | [top](#introduction) | +| [top](#animals--nature) | :duck: | `:duck:` | :swan: | `:swan:` | [top](#introduction) | +| [top](#animals--nature) | :owl: | `:owl:` | :dodo: | `:dodo:` | [top](#introduction) | +| [top](#animals--nature) | :feather: | `:feather:` | :flamingo: | `:flamingo:` | [top](#introduction) | +| [top](#animals--nature) | :peacock: | `:peacock:` | :parrot: | `:parrot:` | [top](#introduction) | + +### Animal Amphibian + +| | ico | shortcode | | +| - | :-: | - | - | +| [top](#animals--nature) | :frog: | `:frog:` | [top](#introduction) | + +### Animal Reptile + +| | ico | shortcode | ico | shortcode | | +| - | :-: | - | :-: | - | - | +| [top](#animals--nature) | :crocodile: | `:crocodile:` | :turtle: | `:turtle:` | [top](#introduction) | +| [top](#animals--nature) | :lizard: | `:lizard:` | :snake: | `:snake:` | [top](#introduction) | +| [top](#animals--nature) | :dragon_face: | `:dragon_face:` | :dragon: | `:dragon:` | [top](#introduction) | +| [top](#animals--nature) | :sauropod: | `:sauropod:` | :t-rex: | `:t-rex:` | [top](#introduction) | + +### Animal Marine + +| | ico | shortcode | ico | shortcode | | +| - | :-: | - | :-: | - | - | +| [top](#animals--nature) | :whale: | `:whale:` | :whale2: | `:whale2:` | [top](#introduction) | +| [top](#animals--nature) | :dolphin: | `:dolphin:` `:flipper:` | :seal: | `:seal:` | [top](#introduction) | +| [top](#animals--nature) | :fish: | `:fish:` | :tropical_fish: | `:tropical_fish:` | [top](#introduction) | +| [top](#animals--nature) | :blowfish: | `:blowfish:` | :shark: | `:shark:` | [top](#introduction) | +| [top](#animals--nature) | :octopus: | `:octopus:` | :shell: | `:shell:` | [top](#introduction) | + +### Animal Bug + +| | ico | shortcode | ico | shortcode | | +| - | :-: | - | :-: | - | - | +| [top](#animals--nature) | :snail: | `:snail:` | :butterfly: | `:butterfly:` | [top](#introduction) | +| [top](#animals--nature) | :bug: | `:bug:` | :ant: | `:ant:` | [top](#introduction) | +| [top](#animals--nature) | :bee: | `:bee:` `:honeybee:` | :beetle: | `:beetle:` | [top](#introduction) | +| [top](#animals--nature) | :lady_beetle: | `:lady_beetle:` | :cricket: | `:cricket:` | [top](#introduction) | +| [top](#animals--nature) | :cockroach: | `:cockroach:` | :spider: | `:spider:` | [top](#introduction) | +| [top](#animals--nature) | :spider_web: | `:spider_web:` | :scorpion: | `:scorpion:` | [top](#introduction) | +| [top](#animals--nature) | :mosquito: | `:mosquito:` | :fly: | `:fly:` | [top](#introduction) | +| [top](#animals--nature) | :worm: | `:worm:` | :microbe: | `:microbe:` | [top](#introduction) | + +### Plant Flower + +| | ico | shortcode | ico | shortcode | | +| - | :-: | - | :-: | - | - | +| [top](#animals--nature) | :bouquet: | `:bouquet:` | :cherry_blossom: | `:cherry_blossom:` | [top](#introduction) | +| [top](#animals--nature) | :white_flower: | `:white_flower:` | :rosette: | `:rosette:` | [top](#introduction) | +| [top](#animals--nature) | :rose: | `:rose:` | :wilted_flower: | `:wilted_flower:` | [top](#introduction) | +| [top](#animals--nature) | :hibiscus: | `:hibiscus:` | :sunflower: | `:sunflower:` | [top](#introduction) | +| [top](#animals--nature) | :blossom: | `:blossom:` | :tulip: | `:tulip:` | [top](#introduction) | + +### Plant Other + +| | ico | shortcode | ico | shortcode | | +| - | :-: | - | :-: | - | - | +| [top](#animals--nature) | :seedling: | `:seedling:` | :potted_plant: | `:potted_plant:` | [top](#introduction) | +| [top](#animals--nature) | :evergreen_tree: | `:evergreen_tree:` | :deciduous_tree: | `:deciduous_tree:` | [top](#introduction) | +| [top](#animals--nature) | :palm_tree: | `:palm_tree:` | :cactus: | `:cactus:` | [top](#introduction) | +| [top](#animals--nature) | :ear_of_rice: | `:ear_of_rice:` | :herb: | `:herb:` | [top](#introduction) | +| [top](#animals--nature) | :shamrock: | `:shamrock:` | :four_leaf_clover: | `:four_leaf_clover:` | [top](#introduction) | +| [top](#animals--nature) | :maple_leaf: | `:maple_leaf:` | :fallen_leaf: | `:fallen_leaf:` | [top](#introduction) | +| [top](#animals--nature) | :leaves: | `:leaves:` | :mushroom: | `:mushroom:` | [top](#introduction) | + +## Food & Drink + +- [Food Fruit](#food-fruit) +- [Food Vegetable](#food-vegetable) +- [Food Prepared](#food-prepared) +- [Food Asian](#food-asian) +- [Food Marine](#food-marine) +- [Food Sweet](#food-sweet) +- [Drink](#drink) +- [Dishware](#dishware) + +### Food Fruit + +| | ico | shortcode | ico | shortcode | | +| - | :-: | - | :-: | - | - | +| [top](#food--drink) | :grapes: | `:grapes:` | :melon: | `:melon:` | [top](#introduction) | +| [top](#food--drink) | :watermelon: | `:watermelon:` | :mandarin: | `:mandarin:` `:orange:` `:tangerine:` | [top](#introduction) | +| [top](#food--drink) | :lemon: | `:lemon:` | :banana: | `:banana:` | [top](#introduction) | +| [top](#food--drink) | :pineapple: | `:pineapple:` | :mango: | `:mango:` | [top](#introduction) | +| [top](#food--drink) | :apple: | `:apple:` | :green_apple: | `:green_apple:` | [top](#introduction) | +| [top](#food--drink) | :pear: | `:pear:` | :peach: | `:peach:` | [top](#introduction) | +| [top](#food--drink) | :cherries: | `:cherries:` | :strawberry: | `:strawberry:` | [top](#introduction) | +| [top](#food--drink) | :blueberries: | `:blueberries:` | :kiwi_fruit: | `:kiwi_fruit:` | [top](#introduction) | +| [top](#food--drink) | :tomato: | `:tomato:` | :olive: | `:olive:` | [top](#introduction) | +| [top](#food--drink) | :coconut: | `:coconut:` | | | [top](#introduction) | + +### Food Vegetable + +| | ico | shortcode | ico | shortcode | | +| - | :-: | - | :-: | - | - | +| [top](#food--drink) | :avocado: | `:avocado:` | :eggplant: | `:eggplant:` | [top](#introduction) | +| [top](#food--drink) | :potato: | `:potato:` | :carrot: | `:carrot:` | [top](#introduction) | +| [top](#food--drink) | :corn: | `:corn:` | :hot_pepper: | `:hot_pepper:` | [top](#introduction) | +| [top](#food--drink) | :bell_pepper: | `:bell_pepper:` | :cucumber: | `:cucumber:` | [top](#introduction) | +| [top](#food--drink) | :leafy_green: | `:leafy_green:` | :broccoli: | `:broccoli:` | [top](#introduction) | +| [top](#food--drink) | :garlic: | `:garlic:` | :onion: | `:onion:` | [top](#introduction) | +| [top](#food--drink) | :peanuts: | `:peanuts:` | :chestnut: | `:chestnut:` | [top](#introduction) | + +### Food Prepared + +| | ico | shortcode | ico | shortcode | | +| - | :-: | - | :-: | - | - | +| [top](#food--drink) | :bread: | `:bread:` | :croissant: | `:croissant:` | [top](#introduction) | +| [top](#food--drink) | :baguette_bread: | `:baguette_bread:` | :flatbread: | `:flatbread:` | [top](#introduction) | +| [top](#food--drink) | :pretzel: | `:pretzel:` | :bagel: | `:bagel:` | [top](#introduction) | +| [top](#food--drink) | :pancakes: | `:pancakes:` | :waffle: | `:waffle:` | [top](#introduction) | +| [top](#food--drink) | :cheese: | `:cheese:` | :meat_on_bone: | `:meat_on_bone:` | [top](#introduction) | +| [top](#food--drink) | :poultry_leg: | `:poultry_leg:` | :cut_of_meat: | `:cut_of_meat:` | [top](#introduction) | +| [top](#food--drink) | :bacon: | `:bacon:` | :hamburger: | `:hamburger:` | [top](#introduction) | +| [top](#food--drink) | :fries: | `:fries:` | :pizza: | `:pizza:` | [top](#introduction) | +| [top](#food--drink) | :hotdog: | `:hotdog:` | :sandwich: | `:sandwich:` | [top](#introduction) | +| [top](#food--drink) | :taco: | `:taco:` | :burrito: | `:burrito:` | [top](#introduction) | +| [top](#food--drink) | :tamale: | `:tamale:` | :stuffed_flatbread: | `:stuffed_flatbread:` | [top](#introduction) | +| [top](#food--drink) | :falafel: | `:falafel:` | :egg: | `:egg:` | [top](#introduction) | +| [top](#food--drink) | :fried_egg: | `:fried_egg:` | :shallow_pan_of_food: | `:shallow_pan_of_food:` | [top](#introduction) | +| [top](#food--drink) | :stew: | `:stew:` | :fondue: | `:fondue:` | [top](#introduction) | +| [top](#food--drink) | :bowl_with_spoon: | `:bowl_with_spoon:` | :green_salad: | `:green_salad:` | [top](#introduction) | +| [top](#food--drink) | :popcorn: | `:popcorn:` | :butter: | `:butter:` | [top](#introduction) | +| [top](#food--drink) | :salt: | `:salt:` | :canned_food: | `:canned_food:` | [top](#introduction) | + +### Food Asian + +| | ico | shortcode | ico | shortcode | | +| - | :-: | - | :-: | - | - | +| [top](#food--drink) | :bento: | `:bento:` | :rice_cracker: | `:rice_cracker:` | [top](#introduction) | +| [top](#food--drink) | :rice_ball: | `:rice_ball:` | :rice: | `:rice:` | [top](#introduction) | +| [top](#food--drink) | :curry: | `:curry:` | :ramen: | `:ramen:` | [top](#introduction) | +| [top](#food--drink) | :spaghetti: | `:spaghetti:` | :sweet_potato: | `:sweet_potato:` | [top](#introduction) | +| [top](#food--drink) | :oden: | `:oden:` | :sushi: | `:sushi:` | [top](#introduction) | +| [top](#food--drink) | :fried_shrimp: | `:fried_shrimp:` | :fish_cake: | `:fish_cake:` | [top](#introduction) | +| [top](#food--drink) | :moon_cake: | `:moon_cake:` | :dango: | `:dango:` | [top](#introduction) | +| [top](#food--drink) | :dumpling: | `:dumpling:` | :fortune_cookie: | `:fortune_cookie:` | [top](#introduction) | +| [top](#food--drink) | :takeout_box: | `:takeout_box:` | | | [top](#introduction) | + +### Food Marine + +| | ico | shortcode | ico | shortcode | | +| - | :-: | - | :-: | - | - | +| [top](#food--drink) | :crab: | `:crab:` | :lobster: | `:lobster:` | [top](#introduction) | +| [top](#food--drink) | :shrimp: | `:shrimp:` | :squid: | `:squid:` | [top](#introduction) | +| [top](#food--drink) | :oyster: | `:oyster:` | | | [top](#introduction) | + +### Food Sweet + +| | ico | shortcode | ico | shortcode | | +| - | :-: | - | :-: | - | - | +| [top](#food--drink) | :icecream: | `:icecream:` | :shaved_ice: | `:shaved_ice:` | [top](#introduction) | +| [top](#food--drink) | :ice_cream: | `:ice_cream:` | :doughnut: | `:doughnut:` | [top](#introduction) | +| [top](#food--drink) | :cookie: | `:cookie:` | :birthday: | `:birthday:` | [top](#introduction) | +| [top](#food--drink) | :cake: | `:cake:` | :cupcake: | `:cupcake:` | [top](#introduction) | +| [top](#food--drink) | :pie: | `:pie:` | :chocolate_bar: | `:chocolate_bar:` | [top](#introduction) | +| [top](#food--drink) | :candy: | `:candy:` | :lollipop: | `:lollipop:` | [top](#introduction) | +| [top](#food--drink) | :custard: | `:custard:` | :honey_pot: | `:honey_pot:` | [top](#introduction) | + +### Drink + +| | ico | shortcode | ico | shortcode | | +| - | :-: | - | :-: | - | - | +| [top](#food--drink) | :baby_bottle: | `:baby_bottle:` | :milk_glass: | `:milk_glass:` | [top](#introduction) | +| [top](#food--drink) | :coffee: | `:coffee:` | :teapot: | `:teapot:` | [top](#introduction) | +| [top](#food--drink) | :tea: | `:tea:` | :sake: | `:sake:` | [top](#introduction) | +| [top](#food--drink) | :champagne: | `:champagne:` | :wine_glass: | `:wine_glass:` | [top](#introduction) | +| [top](#food--drink) | :cocktail: | `:cocktail:` | :tropical_drink: | `:tropical_drink:` | [top](#introduction) | +| [top](#food--drink) | :beer: | `:beer:` | :beers: | `:beers:` | [top](#introduction) | +| [top](#food--drink) | :clinking_glasses: | `:clinking_glasses:` | :tumbler_glass: | `:tumbler_glass:` | [top](#introduction) | +| [top](#food--drink) | :cup_with_straw: | `:cup_with_straw:` | :bubble_tea: | `:bubble_tea:` | [top](#introduction) | +| [top](#food--drink) | :beverage_box: | `:beverage_box:` | :mate: | `:mate:` | [top](#introduction) | +| [top](#food--drink) | :ice_cube: | `:ice_cube:` | | | [top](#introduction) | + +### Dishware + +| | ico | shortcode | ico | shortcode | | +| - | :-: | - | :-: | - | - | +| [top](#food--drink) | :chopsticks: | `:chopsticks:` | :plate_with_cutlery: | `:plate_with_cutlery:` | [top](#introduction) | +| [top](#food--drink) | :fork_and_knife: | `:fork_and_knife:` | :spoon: | `:spoon:` | [top](#introduction) | +| [top](#food--drink) | :hocho: | `:hocho:` `:knife:` | :amphora: | `:amphora:` | [top](#introduction) | + +## Travel & Places + +- [Place Map](#place-map) +- [Place Geographic](#place-geographic) +- [Place Building](#place-building) +- [Place Religious](#place-religious) +- [Place Other](#place-other) +- [Transport Ground](#transport-ground) +- [Transport Water](#transport-water) +- [Transport Air](#transport-air) +- [Hotel](#hotel) +- [Time](#time) +- [Sky & Weather](#sky--weather) + +### Place Map + +| | ico | shortcode | ico | shortcode | | +| - | :-: | - | :-: | - | - | +| [top](#travel--places) | :earth_africa: | `:earth_africa:` | :earth_americas: | `:earth_americas:` | [top](#introduction) | +| [top](#travel--places) | :earth_asia: | `:earth_asia:` | :globe_with_meridians: | `:globe_with_meridians:` | [top](#introduction) | +| [top](#travel--places) | :world_map: | `:world_map:` | :japan: | `:japan:` | [top](#introduction) | +| [top](#travel--places) | :compass: | `:compass:` | | | [top](#introduction) | + +### Place Geographic + +| | ico | shortcode | ico | shortcode | | +| - | :-: | - | :-: | - | - | +| [top](#travel--places) | :mountain_snow: | `:mountain_snow:` | :mountain: | `:mountain:` | [top](#introduction) | +| [top](#travel--places) | :volcano: | `:volcano:` | :mount_fuji: | `:mount_fuji:` | [top](#introduction) | +| [top](#travel--places) | :camping: | `:camping:` | :beach_umbrella: | `:beach_umbrella:` | [top](#introduction) | +| [top](#travel--places) | :desert: | `:desert:` | :desert_island: | `:desert_island:` | [top](#introduction) | +| [top](#travel--places) | :national_park: | `:national_park:` | | | [top](#introduction) | + +### Place Building + +| | ico | shortcode | ico | shortcode | | +| - | :-: | - | :-: | - | - | +| [top](#travel--places) | :stadium: | `:stadium:` | :classical_building: | `:classical_building:` | [top](#introduction) | +| [top](#travel--places) | :building_construction: | `:building_construction:` | :bricks: | `:bricks:` | [top](#introduction) | +| [top](#travel--places) | :rock: | `:rock:` | :wood: | `:wood:` | [top](#introduction) | +| [top](#travel--places) | :hut: | `:hut:` | :houses: | `:houses:` | [top](#introduction) | +| [top](#travel--places) | :derelict_house: | `:derelict_house:` | :house: | `:house:` | [top](#introduction) | +| [top](#travel--places) | :house_with_garden: | `:house_with_garden:` | :office: | `:office:` | [top](#introduction) | +| [top](#travel--places) | :post_office: | `:post_office:` | :european_post_office: | `:european_post_office:` | [top](#introduction) | +| [top](#travel--places) | :hospital: | `:hospital:` | :bank: | `:bank:` | [top](#introduction) | +| [top](#travel--places) | :hotel: | `:hotel:` | :love_hotel: | `:love_hotel:` | [top](#introduction) | +| [top](#travel--places) | :convenience_store: | `:convenience_store:` | :school: | `:school:` | [top](#introduction) | +| [top](#travel--places) | :department_store: | `:department_store:` | :factory: | `:factory:` | [top](#introduction) | +| [top](#travel--places) | :japanese_castle: | `:japanese_castle:` | :european_castle: | `:european_castle:` | [top](#introduction) | +| [top](#travel--places) | :wedding: | `:wedding:` | :tokyo_tower: | `:tokyo_tower:` | [top](#introduction) | +| [top](#travel--places) | :statue_of_liberty: | `:statue_of_liberty:` | | | [top](#introduction) | + +### Place Religious + +| | ico | shortcode | ico | shortcode | | +| - | :-: | - | :-: | - | - | +| [top](#travel--places) | :church: | `:church:` | :mosque: | `:mosque:` | [top](#introduction) | +| [top](#travel--places) | :hindu_temple: | `:hindu_temple:` | :synagogue: | `:synagogue:` | [top](#introduction) | +| [top](#travel--places) | :shinto_shrine: | `:shinto_shrine:` | :kaaba: | `:kaaba:` | [top](#introduction) | + +### Place Other + +| | ico | shortcode | ico | shortcode | | +| - | :-: | - | :-: | - | - | +| [top](#travel--places) | :fountain: | `:fountain:` | :tent: | `:tent:` | [top](#introduction) | +| [top](#travel--places) | :foggy: | `:foggy:` | :night_with_stars: | `:night_with_stars:` | [top](#introduction) | +| [top](#travel--places) | :cityscape: | `:cityscape:` | :sunrise_over_mountains: | `:sunrise_over_mountains:` | [top](#introduction) | +| [top](#travel--places) | :sunrise: | `:sunrise:` | :city_sunset: | `:city_sunset:` | [top](#introduction) | +| [top](#travel--places) | :city_sunrise: | `:city_sunrise:` | :bridge_at_night: | `:bridge_at_night:` | [top](#introduction) | +| [top](#travel--places) | :hotsprings: | `:hotsprings:` | :carousel_horse: | `:carousel_horse:` | [top](#introduction) | +| [top](#travel--places) | :ferris_wheel: | `:ferris_wheel:` | :roller_coaster: | `:roller_coaster:` | [top](#introduction) | +| [top](#travel--places) | :barber: | `:barber:` | :circus_tent: | `:circus_tent:` | [top](#introduction) | + +### Transport Ground + +| | ico | shortcode | ico | shortcode | | +| - | :-: | - | :-: | - | - | +| [top](#travel--places) | :steam_locomotive: | `:steam_locomotive:` | :railway_car: | `:railway_car:` | [top](#introduction) | +| [top](#travel--places) | :bullettrain_side: | `:bullettrain_side:` | :bullettrain_front: | `:bullettrain_front:` | [top](#introduction) | +| [top](#travel--places) | :train2: | `:train2:` | :metro: | `:metro:` | [top](#introduction) | +| [top](#travel--places) | :light_rail: | `:light_rail:` | :station: | `:station:` | [top](#introduction) | +| [top](#travel--places) | :tram: | `:tram:` | :monorail: | `:monorail:` | [top](#introduction) | +| [top](#travel--places) | :mountain_railway: | `:mountain_railway:` | :train: | `:train:` | [top](#introduction) | +| [top](#travel--places) | :bus: | `:bus:` | :oncoming_bus: | `:oncoming_bus:` | [top](#introduction) | +| [top](#travel--places) | :trolleybus: | `:trolleybus:` | :minibus: | `:minibus:` | [top](#introduction) | +| [top](#travel--places) | :ambulance: | `:ambulance:` | :fire_engine: | `:fire_engine:` | [top](#introduction) | +| [top](#travel--places) | :police_car: | `:police_car:` | :oncoming_police_car: | `:oncoming_police_car:` | [top](#introduction) | +| [top](#travel--places) | :taxi: | `:taxi:` | :oncoming_taxi: | `:oncoming_taxi:` | [top](#introduction) | +| [top](#travel--places) | :car: | `:car:` `:red_car:` | :oncoming_automobile: | `:oncoming_automobile:` | [top](#introduction) | +| [top](#travel--places) | :blue_car: | `:blue_car:` | :pickup_truck: | `:pickup_truck:` | [top](#introduction) | +| [top](#travel--places) | :truck: | `:truck:` | :articulated_lorry: | `:articulated_lorry:` | [top](#introduction) | +| [top](#travel--places) | :tractor: | `:tractor:` | :racing_car: | `:racing_car:` | [top](#introduction) | +| [top](#travel--places) | :motorcycle: | `:motorcycle:` | :motor_scooter: | `:motor_scooter:` | [top](#introduction) | +| [top](#travel--places) | :manual_wheelchair: | `:manual_wheelchair:` | :motorized_wheelchair: | `:motorized_wheelchair:` | [top](#introduction) | +| [top](#travel--places) | :auto_rickshaw: | `:auto_rickshaw:` | :bike: | `:bike:` | [top](#introduction) | +| [top](#travel--places) | :kick_scooter: | `:kick_scooter:` | :skateboard: | `:skateboard:` | [top](#introduction) | +| [top](#travel--places) | :roller_skate: | `:roller_skate:` | :busstop: | `:busstop:` | [top](#introduction) | +| [top](#travel--places) | :motorway: | `:motorway:` | :railway_track: | `:railway_track:` | [top](#introduction) | +| [top](#travel--places) | :oil_drum: | `:oil_drum:` | :fuelpump: | `:fuelpump:` | [top](#introduction) | +| [top](#travel--places) | :rotating_light: | `:rotating_light:` | :traffic_light: | `:traffic_light:` | [top](#introduction) | +| [top](#travel--places) | :vertical_traffic_light: | `:vertical_traffic_light:` | :stop_sign: | `:stop_sign:` | [top](#introduction) | +| [top](#travel--places) | :construction: | `:construction:` | | | [top](#introduction) | + +### Transport Water + +| | ico | shortcode | ico | shortcode | | +| - | :-: | - | :-: | - | - | +| [top](#travel--places) | :anchor: | `:anchor:` | :boat: | `:boat:` `:sailboat:` | [top](#introduction) | +| [top](#travel--places) | :canoe: | `:canoe:` | :speedboat: | `:speedboat:` | [top](#introduction) | +| [top](#travel--places) | :passenger_ship: | `:passenger_ship:` | :ferry: | `:ferry:` | [top](#introduction) | +| [top](#travel--places) | :motor_boat: | `:motor_boat:` | :ship: | `:ship:` | [top](#introduction) | + +### Transport Air + +| | ico | shortcode | ico | shortcode | | +| - | :-: | - | :-: | - | - | +| [top](#travel--places) | :airplane: | `:airplane:` | :small_airplane: | `:small_airplane:` | [top](#introduction) | +| [top](#travel--places) | :flight_departure: | `:flight_departure:` | :flight_arrival: | `:flight_arrival:` | [top](#introduction) | +| [top](#travel--places) | :parachute: | `:parachute:` | :seat: | `:seat:` | [top](#introduction) | +| [top](#travel--places) | :helicopter: | `:helicopter:` | :suspension_railway: | `:suspension_railway:` | [top](#introduction) | +| [top](#travel--places) | :mountain_cableway: | `:mountain_cableway:` | :aerial_tramway: | `:aerial_tramway:` | [top](#introduction) | +| [top](#travel--places) | :artificial_satellite: | `:artificial_satellite:` | :rocket: | `:rocket:` | [top](#introduction) | +| [top](#travel--places) | :flying_saucer: | `:flying_saucer:` | | | [top](#introduction) | + +### Hotel + +| | ico | shortcode | ico | shortcode | | +| - | :-: | - | :-: | - | - | +| [top](#travel--places) | :bellhop_bell: | `:bellhop_bell:` | :luggage: | `:luggage:` | [top](#introduction) | + +### Time + +| | ico | shortcode | ico | shortcode | | +| - | :-: | - | :-: | - | - | +| [top](#travel--places) | :hourglass: | `:hourglass:` | :hourglass_flowing_sand: | `:hourglass_flowing_sand:` | [top](#introduction) | +| [top](#travel--places) | :watch: | `:watch:` | :alarm_clock: | `:alarm_clock:` | [top](#introduction) | +| [top](#travel--places) | :stopwatch: | `:stopwatch:` | :timer_clock: | `:timer_clock:` | [top](#introduction) | +| [top](#travel--places) | :mantelpiece_clock: | `:mantelpiece_clock:` | :clock12: | `:clock12:` | [top](#introduction) | +| [top](#travel--places) | :clock1230: | `:clock1230:` | :clock1: | `:clock1:` | [top](#introduction) | +| [top](#travel--places) | :clock130: | `:clock130:` | :clock2: | `:clock2:` | [top](#introduction) | +| [top](#travel--places) | :clock230: | `:clock230:` | :clock3: | `:clock3:` | [top](#introduction) | +| [top](#travel--places) | :clock330: | `:clock330:` | :clock4: | `:clock4:` | [top](#introduction) | +| [top](#travel--places) | :clock430: | `:clock430:` | :clock5: | `:clock5:` | [top](#introduction) | +| [top](#travel--places) | :clock530: | `:clock530:` | :clock6: | `:clock6:` | [top](#introduction) | +| [top](#travel--places) | :clock630: | `:clock630:` | :clock7: | `:clock7:` | [top](#introduction) | +| [top](#travel--places) | :clock730: | `:clock730:` | :clock8: | `:clock8:` | [top](#introduction) | +| [top](#travel--places) | :clock830: | `:clock830:` | :clock9: | `:clock9:` | [top](#introduction) | +| [top](#travel--places) | :clock930: | `:clock930:` | :clock10: | `:clock10:` | [top](#introduction) | +| [top](#travel--places) | :clock1030: | `:clock1030:` | :clock11: | `:clock11:` | [top](#introduction) | +| [top](#travel--places) | :clock1130: | `:clock1130:` | | | [top](#introduction) | + +### Sky & Weather + +| | ico | shortcode | ico | shortcode | | +| - | :-: | - | :-: | - | - | +| [top](#travel--places) | :new_moon: | `:new_moon:` | :waxing_crescent_moon: | `:waxing_crescent_moon:` | [top](#introduction) | +| [top](#travel--places) | :first_quarter_moon: | `:first_quarter_moon:` | :moon: | `:moon:` `:waxing_gibbous_moon:` | [top](#introduction) | +| [top](#travel--places) | :full_moon: | `:full_moon:` | :waning_gibbous_moon: | `:waning_gibbous_moon:` | [top](#introduction) | +| [top](#travel--places) | :last_quarter_moon: | `:last_quarter_moon:` | :waning_crescent_moon: | `:waning_crescent_moon:` | [top](#introduction) | +| [top](#travel--places) | :crescent_moon: | `:crescent_moon:` | :new_moon_with_face: | `:new_moon_with_face:` | [top](#introduction) | +| [top](#travel--places) | :first_quarter_moon_with_face: | `:first_quarter_moon_with_face:` | :last_quarter_moon_with_face: | `:last_quarter_moon_with_face:` | [top](#introduction) | +| [top](#travel--places) | :thermometer: | `:thermometer:` | :sunny: | `:sunny:` | [top](#introduction) | +| [top](#travel--places) | :full_moon_with_face: | `:full_moon_with_face:` | :sun_with_face: | `:sun_with_face:` | [top](#introduction) | +| [top](#travel--places) | :ringed_planet: | `:ringed_planet:` | :star: | `:star:` | [top](#introduction) | +| [top](#travel--places) | :star2: | `:star2:` | :stars: | `:stars:` | [top](#introduction) | +| [top](#travel--places) | :milky_way: | `:milky_way:` | :cloud: | `:cloud:` | [top](#introduction) | +| [top](#travel--places) | :partly_sunny: | `:partly_sunny:` | :cloud_with_lightning_and_rain: | `:cloud_with_lightning_and_rain:` | [top](#introduction) | +| [top](#travel--places) | :sun_behind_small_cloud: | `:sun_behind_small_cloud:` | :sun_behind_large_cloud: | `:sun_behind_large_cloud:` | [top](#introduction) | +| [top](#travel--places) | :sun_behind_rain_cloud: | `:sun_behind_rain_cloud:` | :cloud_with_rain: | `:cloud_with_rain:` | [top](#introduction) | +| [top](#travel--places) | :cloud_with_snow: | `:cloud_with_snow:` | :cloud_with_lightning: | `:cloud_with_lightning:` | [top](#introduction) | +| [top](#travel--places) | :tornado: | `:tornado:` | :fog: | `:fog:` | [top](#introduction) | +| [top](#travel--places) | :wind_face: | `:wind_face:` | :cyclone: | `:cyclone:` | [top](#introduction) | +| [top](#travel--places) | :rainbow: | `:rainbow:` | :closed_umbrella: | `:closed_umbrella:` | [top](#introduction) | +| [top](#travel--places) | :open_umbrella: | `:open_umbrella:` | :umbrella: | `:umbrella:` | [top](#introduction) | +| [top](#travel--places) | :parasol_on_ground: | `:parasol_on_ground:` | :zap: | `:zap:` | [top](#introduction) | +| [top](#travel--places) | :snowflake: | `:snowflake:` | :snowman_with_snow: | `:snowman_with_snow:` | [top](#introduction) | +| [top](#travel--places) | :snowman: | `:snowman:` | :comet: | `:comet:` | [top](#introduction) | +| [top](#travel--places) | :fire: | `:fire:` | :droplet: | `:droplet:` | [top](#introduction) | +| [top](#travel--places) | :ocean: | `:ocean:` | | | [top](#introduction) | + +## Activities + +- [Event](#event) +- [Award Medal](#award-medal) +- [Sport](#sport) +- [Game](#game) +- [Arts & Crafts](#arts--crafts) + +### Event + +| | ico | shortcode | ico | shortcode | | +| - | :-: | - | :-: | - | - | +| [top](#activities) | :jack_o_lantern: | `:jack_o_lantern:` | :christmas_tree: | `:christmas_tree:` | [top](#introduction) | +| [top](#activities) | :fireworks: | `:fireworks:` | :sparkler: | `:sparkler:` | [top](#introduction) | +| [top](#activities) | :firecracker: | `:firecracker:` | :sparkles: | `:sparkles:` | [top](#introduction) | +| [top](#activities) | :balloon: | `:balloon:` | :tada: | `:tada:` | [top](#introduction) | +| [top](#activities) | :confetti_ball: | `:confetti_ball:` | :tanabata_tree: | `:tanabata_tree:` | [top](#introduction) | +| [top](#activities) | :bamboo: | `:bamboo:` | :dolls: | `:dolls:` | [top](#introduction) | +| [top](#activities) | :flags: | `:flags:` | :wind_chime: | `:wind_chime:` | [top](#introduction) | +| [top](#activities) | :rice_scene: | `:rice_scene:` | :red_envelope: | `:red_envelope:` | [top](#introduction) | +| [top](#activities) | :ribbon: | `:ribbon:` | :gift: | `:gift:` | [top](#introduction) | +| [top](#activities) | :reminder_ribbon: | `:reminder_ribbon:` | :tickets: | `:tickets:` | [top](#introduction) | +| [top](#activities) | :ticket: | `:ticket:` | | | [top](#introduction) | + +### Award Medal + +| | ico | shortcode | ico | shortcode | | +| - | :-: | - | :-: | - | - | +| [top](#activities) | :medal_military: | `:medal_military:` | :trophy: | `:trophy:` | [top](#introduction) | +| [top](#activities) | :medal_sports: | `:medal_sports:` | :1st_place_medal: | `:1st_place_medal:` | [top](#introduction) | +| [top](#activities) | :2nd_place_medal: | `:2nd_place_medal:` | :3rd_place_medal: | `:3rd_place_medal:` | [top](#introduction) | + +### Sport + +| | ico | shortcode | ico | shortcode | | +| - | :-: | - | :-: | - | - | +| [top](#activities) | :soccer: | `:soccer:` | :baseball: | `:baseball:` | [top](#introduction) | +| [top](#activities) | :softball: | `:softball:` | :basketball: | `:basketball:` | [top](#introduction) | +| [top](#activities) | :volleyball: | `:volleyball:` | :football: | `:football:` | [top](#introduction) | +| [top](#activities) | :rugby_football: | `:rugby_football:` | :tennis: | `:tennis:` | [top](#introduction) | +| [top](#activities) | :flying_disc: | `:flying_disc:` | :bowling: | `:bowling:` | [top](#introduction) | +| [top](#activities) | :cricket_game: | `:cricket_game:` | :field_hockey: | `:field_hockey:` | [top](#introduction) | +| [top](#activities) | :ice_hockey: | `:ice_hockey:` | :lacrosse: | `:lacrosse:` | [top](#introduction) | +| [top](#activities) | :ping_pong: | `:ping_pong:` | :badminton: | `:badminton:` | [top](#introduction) | +| [top](#activities) | :boxing_glove: | `:boxing_glove:` | :martial_arts_uniform: | `:martial_arts_uniform:` | [top](#introduction) | +| [top](#activities) | :goal_net: | `:goal_net:` | :golf: | `:golf:` | [top](#introduction) | +| [top](#activities) | :ice_skate: | `:ice_skate:` | :fishing_pole_and_fish: | `:fishing_pole_and_fish:` | [top](#introduction) | +| [top](#activities) | :diving_mask: | `:diving_mask:` | :running_shirt_with_sash: | `:running_shirt_with_sash:` | [top](#introduction) | +| [top](#activities) | :ski: | `:ski:` | :sled: | `:sled:` | [top](#introduction) | +| [top](#activities) | :curling_stone: | `:curling_stone:` | | | [top](#introduction) | + +### Game + +| | ico | shortcode | ico | shortcode | | +| - | :-: | - | :-: | - | - | +| [top](#activities) | :dart: | `:dart:` | :yo_yo: | `:yo_yo:` | [top](#introduction) | +| [top](#activities) | :kite: | `:kite:` | :gun: | `:gun:` | [top](#introduction) | +| [top](#activities) | :8ball: | `:8ball:` | :crystal_ball: | `:crystal_ball:` | [top](#introduction) | +| [top](#activities) | :magic_wand: | `:magic_wand:` | :video_game: | `:video_game:` | [top](#introduction) | +| [top](#activities) | :joystick: | `:joystick:` | :slot_machine: | `:slot_machine:` | [top](#introduction) | +| [top](#activities) | :game_die: | `:game_die:` | :jigsaw: | `:jigsaw:` | [top](#introduction) | +| [top](#activities) | :teddy_bear: | `:teddy_bear:` | :pinata: | `:pinata:` | [top](#introduction) | +| [top](#activities) | :nesting_dolls: | `:nesting_dolls:` | :spades: | `:spades:` | [top](#introduction) | +| [top](#activities) | :hearts: | `:hearts:` | :diamonds: | `:diamonds:` | [top](#introduction) | +| [top](#activities) | :clubs: | `:clubs:` | :chess_pawn: | `:chess_pawn:` | [top](#introduction) | +| [top](#activities) | :black_joker: | `:black_joker:` | :mahjong: | `:mahjong:` | [top](#introduction) | +| [top](#activities) | :flower_playing_cards: | `:flower_playing_cards:` | | | [top](#introduction) | + +### Arts & Crafts + +| | ico | shortcode | ico | shortcode | | +| - | :-: | - | :-: | - | - | +| [top](#activities) | :performing_arts: | `:performing_arts:` | :framed_picture: | `:framed_picture:` | [top](#introduction) | +| [top](#activities) | :art: | `:art:` | :thread: | `:thread:` | [top](#introduction) | +| [top](#activities) | :sewing_needle: | `:sewing_needle:` | :yarn: | `:yarn:` | [top](#introduction) | +| [top](#activities) | :knot: | `:knot:` | | | [top](#introduction) | + +## Objects + +- [Clothing](#clothing) +- [Sound](#sound) +- [Music](#music) +- [Musical Instrument](#musical-instrument) +- [Phone](#phone) +- [Computer](#computer) +- [Light & Video](#light--video) +- [Book Paper](#book-paper) +- [Money](#money) +- [Mail](#mail) +- [Writing](#writing) +- [Office](#office) +- [Lock](#lock) +- [Tool](#tool) +- [Science](#science) +- [Medical](#medical) +- [Household](#household) +- [Other Object](#other-object) + +### Clothing + +| | ico | shortcode | ico | shortcode | | +| - | :-: | - | :-: | - | - | +| [top](#objects) | :eyeglasses: | `:eyeglasses:` | :dark_sunglasses: | `:dark_sunglasses:` | [top](#introduction) | +| [top](#objects) | :goggles: | `:goggles:` | :lab_coat: | `:lab_coat:` | [top](#introduction) | +| [top](#objects) | :safety_vest: | `:safety_vest:` | :necktie: | `:necktie:` | [top](#introduction) | +| [top](#objects) | :shirt: | `:shirt:` `:tshirt:` | :jeans: | `:jeans:` | [top](#introduction) | +| [top](#objects) | :scarf: | `:scarf:` | :gloves: | `:gloves:` | [top](#introduction) | +| [top](#objects) | :coat: | `:coat:` | :socks: | `:socks:` | [top](#introduction) | +| [top](#objects) | :dress: | `:dress:` | :kimono: | `:kimono:` | [top](#introduction) | +| [top](#objects) | :sari: | `:sari:` | :one_piece_swimsuit: | `:one_piece_swimsuit:` | [top](#introduction) | +| [top](#objects) | :swim_brief: | `:swim_brief:` | :shorts: | `:shorts:` | [top](#introduction) | +| [top](#objects) | :bikini: | `:bikini:` | :womans_clothes: | `:womans_clothes:` | [top](#introduction) | +| [top](#objects) | :purse: | `:purse:` | :handbag: | `:handbag:` | [top](#introduction) | +| [top](#objects) | :pouch: | `:pouch:` | :shopping: | `:shopping:` | [top](#introduction) | +| [top](#objects) | :school_satchel: | `:school_satchel:` | :thong_sandal: | `:thong_sandal:` | [top](#introduction) | +| [top](#objects) | :mans_shoe: | `:mans_shoe:` `:shoe:` | :athletic_shoe: | `:athletic_shoe:` | [top](#introduction) | +| [top](#objects) | :hiking_boot: | `:hiking_boot:` | :flat_shoe: | `:flat_shoe:` | [top](#introduction) | +| [top](#objects) | :high_heel: | `:high_heel:` | :sandal: | `:sandal:` | [top](#introduction) | +| [top](#objects) | :ballet_shoes: | `:ballet_shoes:` | :boot: | `:boot:` | [top](#introduction) | +| [top](#objects) | :crown: | `:crown:` | :womans_hat: | `:womans_hat:` | [top](#introduction) | +| [top](#objects) | :tophat: | `:tophat:` | :mortar_board: | `:mortar_board:` | [top](#introduction) | +| [top](#objects) | :billed_cap: | `:billed_cap:` | :military_helmet: | `:military_helmet:` | [top](#introduction) | +| [top](#objects) | :rescue_worker_helmet: | `:rescue_worker_helmet:` | :prayer_beads: | `:prayer_beads:` | [top](#introduction) | +| [top](#objects) | :lipstick: | `:lipstick:` | :ring: | `:ring:` | [top](#introduction) | +| [top](#objects) | :gem: | `:gem:` | | | [top](#introduction) | + +### Sound + +| | ico | shortcode | ico | shortcode | | +| - | :-: | - | :-: | - | - | +| [top](#objects) | :mute: | `:mute:` | :speaker: | `:speaker:` | [top](#introduction) | +| [top](#objects) | :sound: | `:sound:` | :loud_sound: | `:loud_sound:` | [top](#introduction) | +| [top](#objects) | :loudspeaker: | `:loudspeaker:` | :mega: | `:mega:` | [top](#introduction) | +| [top](#objects) | :postal_horn: | `:postal_horn:` | :bell: | `:bell:` | [top](#introduction) | +| [top](#objects) | :no_bell: | `:no_bell:` | | | [top](#introduction) | + +### Music + +| | ico | shortcode | ico | shortcode | | +| - | :-: | - | :-: | - | - | +| [top](#objects) | :musical_score: | `:musical_score:` | :musical_note: | `:musical_note:` | [top](#introduction) | +| [top](#objects) | :notes: | `:notes:` | :studio_microphone: | `:studio_microphone:` | [top](#introduction) | +| [top](#objects) | :level_slider: | `:level_slider:` | :control_knobs: | `:control_knobs:` | [top](#introduction) | +| [top](#objects) | :microphone: | `:microphone:` | :headphones: | `:headphones:` | [top](#introduction) | +| [top](#objects) | :radio: | `:radio:` | | | [top](#introduction) | + +### Musical Instrument + +| | ico | shortcode | ico | shortcode | | +| - | :-: | - | :-: | - | - | +| [top](#objects) | :saxophone: | `:saxophone:` | :accordion: | `:accordion:` | [top](#introduction) | +| [top](#objects) | :guitar: | `:guitar:` | :musical_keyboard: | `:musical_keyboard:` | [top](#introduction) | +| [top](#objects) | :trumpet: | `:trumpet:` | :violin: | `:violin:` | [top](#introduction) | +| [top](#objects) | :banjo: | `:banjo:` | :drum: | `:drum:` | [top](#introduction) | +| [top](#objects) | :long_drum: | `:long_drum:` | | | [top](#introduction) | + +### Phone + +| | ico | shortcode | ico | shortcode | | +| - | :-: | - | :-: | - | - | +| [top](#objects) | :iphone: | `:iphone:` | :calling: | `:calling:` | [top](#introduction) | +| [top](#objects) | :phone: | `:phone:` `:telephone:` | :telephone_receiver: | `:telephone_receiver:` | [top](#introduction) | +| [top](#objects) | :pager: | `:pager:` | :fax: | `:fax:` | [top](#introduction) | + +### Computer + +| | ico | shortcode | ico | shortcode | | +| - | :-: | - | :-: | - | - | +| [top](#objects) | :battery: | `:battery:` | :electric_plug: | `:electric_plug:` | [top](#introduction) | +| [top](#objects) | :computer: | `:computer:` | :desktop_computer: | `:desktop_computer:` | [top](#introduction) | +| [top](#objects) | :printer: | `:printer:` | :keyboard: | `:keyboard:` | [top](#introduction) | +| [top](#objects) | :computer_mouse: | `:computer_mouse:` | :trackball: | `:trackball:` | [top](#introduction) | +| [top](#objects) | :minidisc: | `:minidisc:` | :floppy_disk: | `:floppy_disk:` | [top](#introduction) | +| [top](#objects) | :cd: | `:cd:` | :dvd: | `:dvd:` | [top](#introduction) | +| [top](#objects) | :abacus: | `:abacus:` | | | [top](#introduction) | + +### Light & Video + +| | ico | shortcode | ico | shortcode | | +| - | :-: | - | :-: | - | - | +| [top](#objects) | :movie_camera: | `:movie_camera:` | :film_strip: | `:film_strip:` | [top](#introduction) | +| [top](#objects) | :film_projector: | `:film_projector:` | :clapper: | `:clapper:` | [top](#introduction) | +| [top](#objects) | :tv: | `:tv:` | :camera: | `:camera:` | [top](#introduction) | +| [top](#objects) | :camera_flash: | `:camera_flash:` | :video_camera: | `:video_camera:` | [top](#introduction) | +| [top](#objects) | :vhs: | `:vhs:` | :mag: | `:mag:` | [top](#introduction) | +| [top](#objects) | :mag_right: | `:mag_right:` | :candle: | `:candle:` | [top](#introduction) | +| [top](#objects) | :bulb: | `:bulb:` | :flashlight: | `:flashlight:` | [top](#introduction) | +| [top](#objects) | :izakaya_lantern: | `:izakaya_lantern:` `:lantern:` | :diya_lamp: | `:diya_lamp:` | [top](#introduction) | + +### Book Paper + +| | ico | shortcode | ico | shortcode | | +| - | :-: | - | :-: | - | - | +| [top](#objects) | :notebook_with_decorative_cover: | `:notebook_with_decorative_cover:` | :closed_book: | `:closed_book:` | [top](#introduction) | +| [top](#objects) | :book: | `:book:` `:open_book:` | :green_book: | `:green_book:` | [top](#introduction) | +| [top](#objects) | :blue_book: | `:blue_book:` | :orange_book: | `:orange_book:` | [top](#introduction) | +| [top](#objects) | :books: | `:books:` | :notebook: | `:notebook:` | [top](#introduction) | +| [top](#objects) | :ledger: | `:ledger:` | :page_with_curl: | `:page_with_curl:` | [top](#introduction) | +| [top](#objects) | :scroll: | `:scroll:` | :page_facing_up: | `:page_facing_up:` | [top](#introduction) | +| [top](#objects) | :newspaper: | `:newspaper:` | :newspaper_roll: | `:newspaper_roll:` | [top](#introduction) | +| [top](#objects) | :bookmark_tabs: | `:bookmark_tabs:` | :bookmark: | `:bookmark:` | [top](#introduction) | +| [top](#objects) | :label: | `:label:` | | | [top](#introduction) | + +### Money + +| | ico | shortcode | ico | shortcode | | +| - | :-: | - | :-: | - | - | +| [top](#objects) | :moneybag: | `:moneybag:` | :coin: | `:coin:` | [top](#introduction) | +| [top](#objects) | :yen: | `:yen:` | :dollar: | `:dollar:` | [top](#introduction) | +| [top](#objects) | :euro: | `:euro:` | :pound: | `:pound:` | [top](#introduction) | +| [top](#objects) | :money_with_wings: | `:money_with_wings:` | :credit_card: | `:credit_card:` | [top](#introduction) | +| [top](#objects) | :receipt: | `:receipt:` | :chart: | `:chart:` | [top](#introduction) | + +### Mail + +| | ico | shortcode | ico | shortcode | | +| - | :-: | - | :-: | - | - | +| [top](#objects) | :envelope: | `:envelope:` | :e-mail: | `:e-mail:` `:email:` | [top](#introduction) | +| [top](#objects) | :incoming_envelope: | `:incoming_envelope:` | :envelope_with_arrow: | `:envelope_with_arrow:` | [top](#introduction) | +| [top](#objects) | :outbox_tray: | `:outbox_tray:` | :inbox_tray: | `:inbox_tray:` | [top](#introduction) | +| [top](#objects) | :package: | `:package:` | :mailbox: | `:mailbox:` | [top](#introduction) | +| [top](#objects) | :mailbox_closed: | `:mailbox_closed:` | :mailbox_with_mail: | `:mailbox_with_mail:` | [top](#introduction) | +| [top](#objects) | :mailbox_with_no_mail: | `:mailbox_with_no_mail:` | :postbox: | `:postbox:` | [top](#introduction) | +| [top](#objects) | :ballot_box: | `:ballot_box:` | | | [top](#introduction) | + +### Writing + +| | ico | shortcode | ico | shortcode | | +| - | :-: | - | :-: | - | - | +| [top](#objects) | :pencil2: | `:pencil2:` | :black_nib: | `:black_nib:` | [top](#introduction) | +| [top](#objects) | :fountain_pen: | `:fountain_pen:` | :pen: | `:pen:` | [top](#introduction) | +| [top](#objects) | :paintbrush: | `:paintbrush:` | :crayon: | `:crayon:` | [top](#introduction) | +| [top](#objects) | :memo: | `:memo:` `:pencil:` | | | [top](#introduction) | + +### Office + +| | ico | shortcode | ico | shortcode | | +| - | :-: | - | :-: | - | - | +| [top](#objects) | :briefcase: | `:briefcase:` | :file_folder: | `:file_folder:` | [top](#introduction) | +| [top](#objects) | :open_file_folder: | `:open_file_folder:` | :card_index_dividers: | `:card_index_dividers:` | [top](#introduction) | +| [top](#objects) | :date: | `:date:` | :calendar: | `:calendar:` | [top](#introduction) | +| [top](#objects) | :spiral_notepad: | `:spiral_notepad:` | :spiral_calendar: | `:spiral_calendar:` | [top](#introduction) | +| [top](#objects) | :card_index: | `:card_index:` | :chart_with_upwards_trend: | `:chart_with_upwards_trend:` | [top](#introduction) | +| [top](#objects) | :chart_with_downwards_trend: | `:chart_with_downwards_trend:` | :bar_chart: | `:bar_chart:` | [top](#introduction) | +| [top](#objects) | :clipboard: | `:clipboard:` | :pushpin: | `:pushpin:` | [top](#introduction) | +| [top](#objects) | :round_pushpin: | `:round_pushpin:` | :paperclip: | `:paperclip:` | [top](#introduction) | +| [top](#objects) | :paperclips: | `:paperclips:` | :straight_ruler: | `:straight_ruler:` | [top](#introduction) | +| [top](#objects) | :triangular_ruler: | `:triangular_ruler:` | :scissors: | `:scissors:` | [top](#introduction) | +| [top](#objects) | :card_file_box: | `:card_file_box:` | :file_cabinet: | `:file_cabinet:` | [top](#introduction) | +| [top](#objects) | :wastebasket: | `:wastebasket:` | | | [top](#introduction) | + +### Lock + +| | ico | shortcode | ico | shortcode | | +| - | :-: | - | :-: | - | - | +| [top](#objects) | :lock: | `:lock:` | :unlock: | `:unlock:` | [top](#introduction) | +| [top](#objects) | :lock_with_ink_pen: | `:lock_with_ink_pen:` | :closed_lock_with_key: | `:closed_lock_with_key:` | [top](#introduction) | +| [top](#objects) | :key: | `:key:` | :old_key: | `:old_key:` | [top](#introduction) | + +### Tool + +| | ico | shortcode | ico | shortcode | | +| - | :-: | - | :-: | - | - | +| [top](#objects) | :hammer: | `:hammer:` | :axe: | `:axe:` | [top](#introduction) | +| [top](#objects) | :pick: | `:pick:` | :hammer_and_pick: | `:hammer_and_pick:` | [top](#introduction) | +| [top](#objects) | :hammer_and_wrench: | `:hammer_and_wrench:` | :dagger: | `:dagger:` | [top](#introduction) | +| [top](#objects) | :crossed_swords: | `:crossed_swords:` | :bomb: | `:bomb:` | [top](#introduction) | +| [top](#objects) | :boomerang: | `:boomerang:` | :bow_and_arrow: | `:bow_and_arrow:` | [top](#introduction) | +| [top](#objects) | :shield: | `:shield:` | :carpentry_saw: | `:carpentry_saw:` | [top](#introduction) | +| [top](#objects) | :wrench: | `:wrench:` | :screwdriver: | `:screwdriver:` | [top](#introduction) | +| [top](#objects) | :nut_and_bolt: | `:nut_and_bolt:` | :gear: | `:gear:` | [top](#introduction) | +| [top](#objects) | :clamp: | `:clamp:` | :balance_scale: | `:balance_scale:` | [top](#introduction) | +| [top](#objects) | :probing_cane: | `:probing_cane:` | :link: | `:link:` | [top](#introduction) | +| [top](#objects) | :chains: | `:chains:` | :hook: | `:hook:` | [top](#introduction) | +| [top](#objects) | :toolbox: | `:toolbox:` | :magnet: | `:magnet:` | [top](#introduction) | +| [top](#objects) | :ladder: | `:ladder:` | | | [top](#introduction) | + +### Science + +| | ico | shortcode | ico | shortcode | | +| - | :-: | - | :-: | - | - | +| [top](#objects) | :alembic: | `:alembic:` | :test_tube: | `:test_tube:` | [top](#introduction) | +| [top](#objects) | :petri_dish: | `:petri_dish:` | :dna: | `:dna:` | [top](#introduction) | +| [top](#objects) | :microscope: | `:microscope:` | :telescope: | `:telescope:` | [top](#introduction) | +| [top](#objects) | :satellite: | `:satellite:` | | | [top](#introduction) | + +### Medical + +| | ico | shortcode | ico | shortcode | | +| - | :-: | - | :-: | - | - | +| [top](#objects) | :syringe: | `:syringe:` | :drop_of_blood: | `:drop_of_blood:` | [top](#introduction) | +| [top](#objects) | :pill: | `:pill:` | :adhesive_bandage: | `:adhesive_bandage:` | [top](#introduction) | +| [top](#objects) | :stethoscope: | `:stethoscope:` | | | [top](#introduction) | + +### Household + +| | ico | shortcode | ico | shortcode | | +| - | :-: | - | :-: | - | - | +| [top](#objects) | :door: | `:door:` | :elevator: | `:elevator:` | [top](#introduction) | +| [top](#objects) | :mirror: | `:mirror:` | :window: | `:window:` | [top](#introduction) | +| [top](#objects) | :bed: | `:bed:` | :couch_and_lamp: | `:couch_and_lamp:` | [top](#introduction) | +| [top](#objects) | :chair: | `:chair:` | :toilet: | `:toilet:` | [top](#introduction) | +| [top](#objects) | :plunger: | `:plunger:` | :shower: | `:shower:` | [top](#introduction) | +| [top](#objects) | :bathtub: | `:bathtub:` | :mouse_trap: | `:mouse_trap:` | [top](#introduction) | +| [top](#objects) | :razor: | `:razor:` | :lotion_bottle: | `:lotion_bottle:` | [top](#introduction) | +| [top](#objects) | :safety_pin: | `:safety_pin:` | :broom: | `:broom:` | [top](#introduction) | +| [top](#objects) | :basket: | `:basket:` | :roll_of_paper: | `:roll_of_paper:` | [top](#introduction) | +| [top](#objects) | :bucket: | `:bucket:` | :soap: | `:soap:` | [top](#introduction) | +| [top](#objects) | :toothbrush: | `:toothbrush:` | :sponge: | `:sponge:` | [top](#introduction) | +| [top](#objects) | :fire_extinguisher: | `:fire_extinguisher:` | :shopping_cart: | `:shopping_cart:` | [top](#introduction) | + +### Other Object + +| | ico | shortcode | ico | shortcode | | +| - | :-: | - | :-: | - | - | +| [top](#objects) | :smoking: | `:smoking:` | :coffin: | `:coffin:` | [top](#introduction) | +| [top](#objects) | :headstone: | `:headstone:` | :funeral_urn: | `:funeral_urn:` | [top](#introduction) | +| [top](#objects) | :nazar_amulet: | `:nazar_amulet:` | :moyai: | `:moyai:` | [top](#introduction) | +| [top](#objects) | :placard: | `:placard:` | | | [top](#introduction) | + +## Symbols + +- [Transport Sign](#transport-sign) +- [Warning](#warning) +- [Arrow](#arrow) +- [Religion](#religion) +- [Zodiac](#zodiac) +- [Av Symbol](#av-symbol) +- [Gender](#gender) +- [Math](#math) +- [Punctuation](#punctuation) +- [Currency](#currency) +- [Other Symbol](#other-symbol) +- [Keycap](#keycap) +- [Alphanum](#alphanum) +- [Geometric](#geometric) + +### Transport Sign + +| | ico | shortcode | ico | shortcode | | +| - | :-: | - | :-: | - | - | +| [top](#symbols) | :atm: | `:atm:` | :put_litter_in_its_place: | `:put_litter_in_its_place:` | [top](#introduction) | +| [top](#symbols) | :potable_water: | `:potable_water:` | :wheelchair: | `:wheelchair:` | [top](#introduction) | +| [top](#symbols) | :mens: | `:mens:` | :womens: | `:womens:` | [top](#introduction) | +| [top](#symbols) | :restroom: | `:restroom:` | :baby_symbol: | `:baby_symbol:` | [top](#introduction) | +| [top](#symbols) | :wc: | `:wc:` | :passport_control: | `:passport_control:` | [top](#introduction) | +| [top](#symbols) | :customs: | `:customs:` | :baggage_claim: | `:baggage_claim:` | [top](#introduction) | +| [top](#symbols) | :left_luggage: | `:left_luggage:` | | | [top](#introduction) | + +### Warning + +| | ico | shortcode | ico | shortcode | | +| - | :-: | - | :-: | - | - | +| [top](#symbols) | :warning: | `:warning:` | :children_crossing: | `:children_crossing:` | [top](#introduction) | +| [top](#symbols) | :no_entry: | `:no_entry:` | :no_entry_sign: | `:no_entry_sign:` | [top](#introduction) | +| [top](#symbols) | :no_bicycles: | `:no_bicycles:` | :no_smoking: | `:no_smoking:` | [top](#introduction) | +| [top](#symbols) | :do_not_litter: | `:do_not_litter:` | :non-potable_water: | `:non-potable_water:` | [top](#introduction) | +| [top](#symbols) | :no_pedestrians: | `:no_pedestrians:` | :no_mobile_phones: | `:no_mobile_phones:` | [top](#introduction) | +| [top](#symbols) | :underage: | `:underage:` | :radioactive: | `:radioactive:` | [top](#introduction) | +| [top](#symbols) | :biohazard: | `:biohazard:` | | | [top](#introduction) | + +### Arrow + +| | ico | shortcode | ico | shortcode | | +| - | :-: | - | :-: | - | - | +| [top](#symbols) | :arrow_up: | `:arrow_up:` | :arrow_upper_right: | `:arrow_upper_right:` | [top](#introduction) | +| [top](#symbols) | :arrow_right: | `:arrow_right:` | :arrow_lower_right: | `:arrow_lower_right:` | [top](#introduction) | +| [top](#symbols) | :arrow_down: | `:arrow_down:` | :arrow_lower_left: | `:arrow_lower_left:` | [top](#introduction) | +| [top](#symbols) | :arrow_left: | `:arrow_left:` | :arrow_upper_left: | `:arrow_upper_left:` | [top](#introduction) | +| [top](#symbols) | :arrow_up_down: | `:arrow_up_down:` | :left_right_arrow: | `:left_right_arrow:` | [top](#introduction) | +| [top](#symbols) | :leftwards_arrow_with_hook: | `:leftwards_arrow_with_hook:` | :arrow_right_hook: | `:arrow_right_hook:` | [top](#introduction) | +| [top](#symbols) | :arrow_heading_up: | `:arrow_heading_up:` | :arrow_heading_down: | `:arrow_heading_down:` | [top](#introduction) | +| [top](#symbols) | :arrows_clockwise: | `:arrows_clockwise:` | :arrows_counterclockwise: | `:arrows_counterclockwise:` | [top](#introduction) | +| [top](#symbols) | :back: | `:back:` | :end: | `:end:` | [top](#introduction) | +| [top](#symbols) | :on: | `:on:` | :soon: | `:soon:` | [top](#introduction) | +| [top](#symbols) | :top: | `:top:` | | | [top](#introduction) | + +### Religion + +| | ico | shortcode | ico | shortcode | | +| - | :-: | - | :-: | - | - | +| [top](#symbols) | :place_of_worship: | `:place_of_worship:` | :atom_symbol: | `:atom_symbol:` | [top](#introduction) | +| [top](#symbols) | :om: | `:om:` | :star_of_david: | `:star_of_david:` | [top](#introduction) | +| [top](#symbols) | :wheel_of_dharma: | `:wheel_of_dharma:` | :yin_yang: | `:yin_yang:` | [top](#introduction) | +| [top](#symbols) | :latin_cross: | `:latin_cross:` | :orthodox_cross: | `:orthodox_cross:` | [top](#introduction) | +| [top](#symbols) | :star_and_crescent: | `:star_and_crescent:` | :peace_symbol: | `:peace_symbol:` | [top](#introduction) | +| [top](#symbols) | :menorah: | `:menorah:` | :six_pointed_star: | `:six_pointed_star:` | [top](#introduction) | + +### Zodiac + +| | ico | shortcode | ico | shortcode | | +| - | :-: | - | :-: | - | - | +| [top](#symbols) | :aries: | `:aries:` | :taurus: | `:taurus:` | [top](#introduction) | +| [top](#symbols) | :gemini: | `:gemini:` | :cancer: | `:cancer:` | [top](#introduction) | +| [top](#symbols) | :leo: | `:leo:` | :virgo: | `:virgo:` | [top](#introduction) | +| [top](#symbols) | :libra: | `:libra:` | :scorpius: | `:scorpius:` | [top](#introduction) | +| [top](#symbols) | :sagittarius: | `:sagittarius:` | :capricorn: | `:capricorn:` | [top](#introduction) | +| [top](#symbols) | :aquarius: | `:aquarius:` | :pisces: | `:pisces:` | [top](#introduction) | +| [top](#symbols) | :ophiuchus: | `:ophiuchus:` | | | [top](#introduction) | + +### Av Symbol + +| | ico | shortcode | ico | shortcode | | +| - | :-: | - | :-: | - | - | +| [top](#symbols) | :twisted_rightwards_arrows: | `:twisted_rightwards_arrows:` | :repeat: | `:repeat:` | [top](#introduction) | +| [top](#symbols) | :repeat_one: | `:repeat_one:` | :arrow_forward: | `:arrow_forward:` | [top](#introduction) | +| [top](#symbols) | :fast_forward: | `:fast_forward:` | :next_track_button: | `:next_track_button:` | [top](#introduction) | +| [top](#symbols) | :play_or_pause_button: | `:play_or_pause_button:` | :arrow_backward: | `:arrow_backward:` | [top](#introduction) | +| [top](#symbols) | :rewind: | `:rewind:` | :previous_track_button: | `:previous_track_button:` | [top](#introduction) | +| [top](#symbols) | :arrow_up_small: | `:arrow_up_small:` | :arrow_double_up: | `:arrow_double_up:` | [top](#introduction) | +| [top](#symbols) | :arrow_down_small: | `:arrow_down_small:` | :arrow_double_down: | `:arrow_double_down:` | [top](#introduction) | +| [top](#symbols) | :pause_button: | `:pause_button:` | :stop_button: | `:stop_button:` | [top](#introduction) | +| [top](#symbols) | :record_button: | `:record_button:` | :eject_button: | `:eject_button:` | [top](#introduction) | +| [top](#symbols) | :cinema: | `:cinema:` | :low_brightness: | `:low_brightness:` | [top](#introduction) | +| [top](#symbols) | :high_brightness: | `:high_brightness:` | :signal_strength: | `:signal_strength:` | [top](#introduction) | +| [top](#symbols) | :vibration_mode: | `:vibration_mode:` | :mobile_phone_off: | `:mobile_phone_off:` | [top](#introduction) | + +### Gender + +| | ico | shortcode | ico | shortcode | | +| - | :-: | - | :-: | - | - | +| [top](#symbols) | :female_sign: | `:female_sign:` | :male_sign: | `:male_sign:` | [top](#introduction) | +| [top](#symbols) | :transgender_symbol: | `:transgender_symbol:` | | | [top](#introduction) | + +### Math + +| | ico | shortcode | ico | shortcode | | +| - | :-: | - | :-: | - | - | +| [top](#symbols) | :heavy_multiplication_x: | `:heavy_multiplication_x:` | :heavy_plus_sign: | `:heavy_plus_sign:` | [top](#introduction) | +| [top](#symbols) | :heavy_minus_sign: | `:heavy_minus_sign:` | :heavy_division_sign: | `:heavy_division_sign:` | [top](#introduction) | +| [top](#symbols) | :infinity: | `:infinity:` | | | [top](#introduction) | + +### Punctuation + +| | ico | shortcode | ico | shortcode | | +| - | :-: | - | :-: | - | - | +| [top](#symbols) | :bangbang: | `:bangbang:` | :interrobang: | `:interrobang:` | [top](#introduction) | +| [top](#symbols) | :question: | `:question:` | :grey_question: | `:grey_question:` | [top](#introduction) | +| [top](#symbols) | :grey_exclamation: | `:grey_exclamation:` | :exclamation: | `:exclamation:` `:heavy_exclamation_mark:` | [top](#introduction) | +| [top](#symbols) | :wavy_dash: | `:wavy_dash:` | | | [top](#introduction) | + +### Currency + +| | ico | shortcode | ico | shortcode | | +| - | :-: | - | :-: | - | - | +| [top](#symbols) | :currency_exchange: | `:currency_exchange:` | :heavy_dollar_sign: | `:heavy_dollar_sign:` | [top](#introduction) | + +### Other Symbol + +| | ico | shortcode | ico | shortcode | | +| - | :-: | - | :-: | - | - | +| [top](#symbols) | :medical_symbol: | `:medical_symbol:` | :recycle: | `:recycle:` | [top](#introduction) | +| [top](#symbols) | :fleur_de_lis: | `:fleur_de_lis:` | :trident: | `:trident:` | [top](#introduction) | +| [top](#symbols) | :name_badge: | `:name_badge:` | :beginner: | `:beginner:` | [top](#introduction) | +| [top](#symbols) | :o: | `:o:` | :white_check_mark: | `:white_check_mark:` | [top](#introduction) | +| [top](#symbols) | :ballot_box_with_check: | `:ballot_box_with_check:` | :heavy_check_mark: | `:heavy_check_mark:` | [top](#introduction) | +| [top](#symbols) | :x: | `:x:` | :negative_squared_cross_mark: | `:negative_squared_cross_mark:` | [top](#introduction) | +| [top](#symbols) | :curly_loop: | `:curly_loop:` | :loop: | `:loop:` | [top](#introduction) | +| [top](#symbols) | :part_alternation_mark: | `:part_alternation_mark:` | :eight_spoked_asterisk: | `:eight_spoked_asterisk:` | [top](#introduction) | +| [top](#symbols) | :eight_pointed_black_star: | `:eight_pointed_black_star:` | :sparkle: | `:sparkle:` | [top](#introduction) | +| [top](#symbols) | :copyright: | `:copyright:` | :registered: | `:registered:` | [top](#introduction) | +| [top](#symbols) | :tm: | `:tm:` | | | [top](#introduction) | + +### Keycap + +| | ico | shortcode | ico | shortcode | | +| - | :-: | - | :-: | - | - | +| [top](#symbols) | :hash: | `:hash:` | :asterisk: | `:asterisk:` | [top](#introduction) | +| [top](#symbols) | :zero: | `:zero:` | :one: | `:one:` | [top](#introduction) | +| [top](#symbols) | :two: | `:two:` | :three: | `:three:` | [top](#introduction) | +| [top](#symbols) | :four: | `:four:` | :five: | `:five:` | [top](#introduction) | +| [top](#symbols) | :six: | `:six:` | :seven: | `:seven:` | [top](#introduction) | +| [top](#symbols) | :eight: | `:eight:` | :nine: | `:nine:` | [top](#introduction) | +| [top](#symbols) | :keycap_ten: | `:keycap_ten:` | | | [top](#introduction) | + +### Alphanum + +| | ico | shortcode | ico | shortcode | | +| - | :-: | - | :-: | - | - | +| [top](#symbols) | :capital_abcd: | `:capital_abcd:` | :abcd: | `:abcd:` | [top](#introduction) | +| [top](#symbols) | :1234: | `:1234:` | :symbols: | `:symbols:` | [top](#introduction) | +| [top](#symbols) | :abc: | `:abc:` | :a: | `:a:` | [top](#introduction) | +| [top](#symbols) | :ab: | `:ab:` | :b: | `:b:` | [top](#introduction) | +| [top](#symbols) | :cl: | `:cl:` | :cool: | `:cool:` | [top](#introduction) | +| [top](#symbols) | :free: | `:free:` | :information_source: | `:information_source:` | [top](#introduction) | +| [top](#symbols) | :id: | `:id:` | :m: | `:m:` | [top](#introduction) | +| [top](#symbols) | :new: | `:new:` | :ng: | `:ng:` | [top](#introduction) | +| [top](#symbols) | :o2: | `:o2:` | :ok: | `:ok:` | [top](#introduction) | +| [top](#symbols) | :parking: | `:parking:` | :sos: | `:sos:` | [top](#introduction) | +| [top](#symbols) | :up: | `:up:` | :vs: | `:vs:` | [top](#introduction) | +| [top](#symbols) | :koko: | `:koko:` | :sa: | `:sa:` | [top](#introduction) | +| [top](#symbols) | :u6708: | `:u6708:` | :u6709: | `:u6709:` | [top](#introduction) | +| [top](#symbols) | :u6307: | `:u6307:` | :ideograph_advantage: | `:ideograph_advantage:` | [top](#introduction) | +| [top](#symbols) | :u5272: | `:u5272:` | :u7121: | `:u7121:` | [top](#introduction) | +| [top](#symbols) | :u7981: | `:u7981:` | :accept: | `:accept:` | [top](#introduction) | +| [top](#symbols) | :u7533: | `:u7533:` | :u5408: | `:u5408:` | [top](#introduction) | +| [top](#symbols) | :u7a7a: | `:u7a7a:` | :congratulations: | `:congratulations:` | [top](#introduction) | +| [top](#symbols) | :secret: | `:secret:` | :u55b6: | `:u55b6:` | [top](#introduction) | +| [top](#symbols) | :u6e80: | `:u6e80:` | | | [top](#introduction) | + +### Geometric + +| | ico | shortcode | ico | shortcode | | +| - | :-: | - | :-: | - | - | +| [top](#symbols) | :red_circle: | `:red_circle:` | :orange_circle: | `:orange_circle:` | [top](#introduction) | +| [top](#symbols) | :yellow_circle: | `:yellow_circle:` | :green_circle: | `:green_circle:` | [top](#introduction) | +| [top](#symbols) | :large_blue_circle: | `:large_blue_circle:` | :purple_circle: | `:purple_circle:` | [top](#introduction) | +| [top](#symbols) | :brown_circle: | `:brown_circle:` | :black_circle: | `:black_circle:` | [top](#introduction) | +| [top](#symbols) | :white_circle: | `:white_circle:` | :red_square: | `:red_square:` | [top](#introduction) | +| [top](#symbols) | :orange_square: | `:orange_square:` | :yellow_square: | `:yellow_square:` | [top](#introduction) | +| [top](#symbols) | :green_square: | `:green_square:` | :blue_square: | `:blue_square:` | [top](#introduction) | +| [top](#symbols) | :purple_square: | `:purple_square:` | :brown_square: | `:brown_square:` | [top](#introduction) | +| [top](#symbols) | :black_large_square: | `:black_large_square:` | :white_large_square: | `:white_large_square:` | [top](#introduction) | +| [top](#symbols) | :black_medium_square: | `:black_medium_square:` | :white_medium_square: | `:white_medium_square:` | [top](#introduction) | +| [top](#symbols) | :black_medium_small_square: | `:black_medium_small_square:` | :white_medium_small_square: | `:white_medium_small_square:` | [top](#introduction) | +| [top](#symbols) | :black_small_square: | `:black_small_square:` | :white_small_square: | `:white_small_square:` | [top](#introduction) | +| [top](#symbols) | :large_orange_diamond: | `:large_orange_diamond:` | :large_blue_diamond: | `:large_blue_diamond:` | [top](#introduction) | +| [top](#symbols) | :small_orange_diamond: | `:small_orange_diamond:` | :small_blue_diamond: | `:small_blue_diamond:` | [top](#introduction) | +| [top](#symbols) | :small_red_triangle: | `:small_red_triangle:` | :small_red_triangle_down: | `:small_red_triangle_down:` | [top](#introduction) | +| [top](#symbols) | :diamond_shape_with_a_dot_inside: | `:diamond_shape_with_a_dot_inside:` | :radio_button: | `:radio_button:` | [top](#introduction) | +| [top](#symbols) | :white_square_button: | `:white_square_button:` | :black_square_button: | `:black_square_button:` | [top](#introduction) | + +## Flags + +- [Flag](#flag) +- [Country Flag](#country-flag) +- [Subdivision Flag](#subdivision-flag) + +### Flag + +| | ico | shortcode | ico | shortcode | | +| - | :-: | - | :-: | - | - | +| [top](#flags) | :checkered_flag: | `:checkered_flag:` | :triangular_flag_on_post: | `:triangular_flag_on_post:` | [top](#introduction) | +| [top](#flags) | :crossed_flags: | `:crossed_flags:` | :black_flag: | `:black_flag:` | [top](#introduction) | +| [top](#flags) | :white_flag: | `:white_flag:` | :rainbow_flag: | `:rainbow_flag:` | [top](#introduction) | +| [top](#flags) | :transgender_flag: | `:transgender_flag:` | :pirate_flag: | `:pirate_flag:` | [top](#introduction) | + +### Country Flag + +| | ico | shortcode | ico | shortcode | | +| - | :-: | - | :-: | - | - | +| [top](#flags) | :ascension_island: | `:ascension_island:` | :andorra: | `:andorra:` | [top](#introduction) | +| [top](#flags) | :united_arab_emirates: | `:united_arab_emirates:` | :afghanistan: | `:afghanistan:` | [top](#introduction) | +| [top](#flags) | :antigua_barbuda: | `:antigua_barbuda:` | :anguilla: | `:anguilla:` | [top](#introduction) | +| [top](#flags) | :albania: | `:albania:` | :armenia: | `:armenia:` | [top](#introduction) | +| [top](#flags) | :angola: | `:angola:` | :antarctica: | `:antarctica:` | [top](#introduction) | +| [top](#flags) | :argentina: | `:argentina:` | :american_samoa: | `:american_samoa:` | [top](#introduction) | +| [top](#flags) | :austria: | `:austria:` | :australia: | `:australia:` | [top](#introduction) | +| [top](#flags) | :aruba: | `:aruba:` | :aland_islands: | `:aland_islands:` | [top](#introduction) | +| [top](#flags) | :azerbaijan: | `:azerbaijan:` | :bosnia_herzegovina: | `:bosnia_herzegovina:` | [top](#introduction) | +| [top](#flags) | :barbados: | `:barbados:` | :bangladesh: | `:bangladesh:` | [top](#introduction) | +| [top](#flags) | :belgium: | `:belgium:` | :burkina_faso: | `:burkina_faso:` | [top](#introduction) | +| [top](#flags) | :bulgaria: | `:bulgaria:` | :bahrain: | `:bahrain:` | [top](#introduction) | +| [top](#flags) | :burundi: | `:burundi:` | :benin: | `:benin:` | [top](#introduction) | +| [top](#flags) | :st_barthelemy: | `:st_barthelemy:` | :bermuda: | `:bermuda:` | [top](#introduction) | +| [top](#flags) | :brunei: | `:brunei:` | :bolivia: | `:bolivia:` | [top](#introduction) | +| [top](#flags) | :caribbean_netherlands: | `:caribbean_netherlands:` | :brazil: | `:brazil:` | [top](#introduction) | +| [top](#flags) | :bahamas: | `:bahamas:` | :bhutan: | `:bhutan:` | [top](#introduction) | +| [top](#flags) | :bouvet_island: | `:bouvet_island:` | :botswana: | `:botswana:` | [top](#introduction) | +| [top](#flags) | :belarus: | `:belarus:` | :belize: | `:belize:` | [top](#introduction) | +| [top](#flags) | :canada: | `:canada:` | :cocos_islands: | `:cocos_islands:` | [top](#introduction) | +| [top](#flags) | :congo_kinshasa: | `:congo_kinshasa:` | :central_african_republic: | `:central_african_republic:` | [top](#introduction) | +| [top](#flags) | :congo_brazzaville: | `:congo_brazzaville:` | :switzerland: | `:switzerland:` | [top](#introduction) | +| [top](#flags) | :cote_divoire: | `:cote_divoire:` | :cook_islands: | `:cook_islands:` | [top](#introduction) | +| [top](#flags) | :chile: | `:chile:` | :cameroon: | `:cameroon:` | [top](#introduction) | +| [top](#flags) | :cn: | `:cn:` | :colombia: | `:colombia:` | [top](#introduction) | +| [top](#flags) | :clipperton_island: | `:clipperton_island:` | :costa_rica: | `:costa_rica:` | [top](#introduction) | +| [top](#flags) | :cuba: | `:cuba:` | :cape_verde: | `:cape_verde:` | [top](#introduction) | +| [top](#flags) | :curacao: | `:curacao:` | :christmas_island: | `:christmas_island:` | [top](#introduction) | +| [top](#flags) | :cyprus: | `:cyprus:` | :czech_republic: | `:czech_republic:` | [top](#introduction) | +| [top](#flags) | :de: | `:de:` | :diego_garcia: | `:diego_garcia:` | [top](#introduction) | +| [top](#flags) | :djibouti: | `:djibouti:` | :denmark: | `:denmark:` | [top](#introduction) | +| [top](#flags) | :dominica: | `:dominica:` | :dominican_republic: | `:dominican_republic:` | [top](#introduction) | +| [top](#flags) | :algeria: | `:algeria:` | :ceuta_melilla: | `:ceuta_melilla:` | [top](#introduction) | +| [top](#flags) | :ecuador: | `:ecuador:` | :estonia: | `:estonia:` | [top](#introduction) | +| [top](#flags) | :egypt: | `:egypt:` | :western_sahara: | `:western_sahara:` | [top](#introduction) | +| [top](#flags) | :eritrea: | `:eritrea:` | :es: | `:es:` | [top](#introduction) | +| [top](#flags) | :ethiopia: | `:ethiopia:` | :eu: | `:eu:` `:european_union:` | [top](#introduction) | +| [top](#flags) | :finland: | `:finland:` | :fiji: | `:fiji:` | [top](#introduction) | +| [top](#flags) | :falkland_islands: | `:falkland_islands:` | :micronesia: | `:micronesia:` | [top](#introduction) | +| [top](#flags) | :faroe_islands: | `:faroe_islands:` | :fr: | `:fr:` | [top](#introduction) | +| [top](#flags) | :gabon: | `:gabon:` | :gb: | `:gb:` `:uk:` | [top](#introduction) | +| [top](#flags) | :grenada: | `:grenada:` | :georgia: | `:georgia:` | [top](#introduction) | +| [top](#flags) | :french_guiana: | `:french_guiana:` | :guernsey: | `:guernsey:` | [top](#introduction) | +| [top](#flags) | :ghana: | `:ghana:` | :gibraltar: | `:gibraltar:` | [top](#introduction) | +| [top](#flags) | :greenland: | `:greenland:` | :gambia: | `:gambia:` | [top](#introduction) | +| [top](#flags) | :guinea: | `:guinea:` | :guadeloupe: | `:guadeloupe:` | [top](#introduction) | +| [top](#flags) | :equatorial_guinea: | `:equatorial_guinea:` | :greece: | `:greece:` | [top](#introduction) | +| [top](#flags) | :south_georgia_south_sandwich_islands: | `:south_georgia_south_sandwich_islands:` | :guatemala: | `:guatemala:` | [top](#introduction) | +| [top](#flags) | :guam: | `:guam:` | :guinea_bissau: | `:guinea_bissau:` | [top](#introduction) | +| [top](#flags) | :guyana: | `:guyana:` | :hong_kong: | `:hong_kong:` | [top](#introduction) | +| [top](#flags) | :heard_mcdonald_islands: | `:heard_mcdonald_islands:` | :honduras: | `:honduras:` | [top](#introduction) | +| [top](#flags) | :croatia: | `:croatia:` | :haiti: | `:haiti:` | [top](#introduction) | +| [top](#flags) | :hungary: | `:hungary:` | :canary_islands: | `:canary_islands:` | [top](#introduction) | +| [top](#flags) | :indonesia: | `:indonesia:` | :ireland: | `:ireland:` | [top](#introduction) | +| [top](#flags) | :israel: | `:israel:` | :isle_of_man: | `:isle_of_man:` | [top](#introduction) | +| [top](#flags) | :india: | `:india:` | :british_indian_ocean_territory: | `:british_indian_ocean_territory:` | [top](#introduction) | +| [top](#flags) | :iraq: | `:iraq:` | :iran: | `:iran:` | [top](#introduction) | +| [top](#flags) | :iceland: | `:iceland:` | :it: | `:it:` | [top](#introduction) | +| [top](#flags) | :jersey: | `:jersey:` | :jamaica: | `:jamaica:` | [top](#introduction) | +| [top](#flags) | :jordan: | `:jordan:` | :jp: | `:jp:` | [top](#introduction) | +| [top](#flags) | :kenya: | `:kenya:` | :kyrgyzstan: | `:kyrgyzstan:` | [top](#introduction) | +| [top](#flags) | :cambodia: | `:cambodia:` | :kiribati: | `:kiribati:` | [top](#introduction) | +| [top](#flags) | :comoros: | `:comoros:` | :st_kitts_nevis: | `:st_kitts_nevis:` | [top](#introduction) | +| [top](#flags) | :north_korea: | `:north_korea:` | :kr: | `:kr:` | [top](#introduction) | +| [top](#flags) | :kuwait: | `:kuwait:` | :cayman_islands: | `:cayman_islands:` | [top](#introduction) | +| [top](#flags) | :kazakhstan: | `:kazakhstan:` | :laos: | `:laos:` | [top](#introduction) | +| [top](#flags) | :lebanon: | `:lebanon:` | :st_lucia: | `:st_lucia:` | [top](#introduction) | +| [top](#flags) | :liechtenstein: | `:liechtenstein:` | :sri_lanka: | `:sri_lanka:` | [top](#introduction) | +| [top](#flags) | :liberia: | `:liberia:` | :lesotho: | `:lesotho:` | [top](#introduction) | +| [top](#flags) | :lithuania: | `:lithuania:` | :luxembourg: | `:luxembourg:` | [top](#introduction) | +| [top](#flags) | :latvia: | `:latvia:` | :libya: | `:libya:` | [top](#introduction) | +| [top](#flags) | :morocco: | `:morocco:` | :monaco: | `:monaco:` | [top](#introduction) | +| [top](#flags) | :moldova: | `:moldova:` | :montenegro: | `:montenegro:` | [top](#introduction) | +| [top](#flags) | :st_martin: | `:st_martin:` | :madagascar: | `:madagascar:` | [top](#introduction) | +| [top](#flags) | :marshall_islands: | `:marshall_islands:` | :macedonia: | `:macedonia:` | [top](#introduction) | +| [top](#flags) | :mali: | `:mali:` | :myanmar: | `:myanmar:` | [top](#introduction) | +| [top](#flags) | :mongolia: | `:mongolia:` | :macau: | `:macau:` | [top](#introduction) | +| [top](#flags) | :northern_mariana_islands: | `:northern_mariana_islands:` | :martinique: | `:martinique:` | [top](#introduction) | +| [top](#flags) | :mauritania: | `:mauritania:` | :montserrat: | `:montserrat:` | [top](#introduction) | +| [top](#flags) | :malta: | `:malta:` | :mauritius: | `:mauritius:` | [top](#introduction) | +| [top](#flags) | :maldives: | `:maldives:` | :malawi: | `:malawi:` | [top](#introduction) | +| [top](#flags) | :mexico: | `:mexico:` | :malaysia: | `:malaysia:` | [top](#introduction) | +| [top](#flags) | :mozambique: | `:mozambique:` | :namibia: | `:namibia:` | [top](#introduction) | +| [top](#flags) | :new_caledonia: | `:new_caledonia:` | :niger: | `:niger:` | [top](#introduction) | +| [top](#flags) | :norfolk_island: | `:norfolk_island:` | :nigeria: | `:nigeria:` | [top](#introduction) | +| [top](#flags) | :nicaragua: | `:nicaragua:` | :netherlands: | `:netherlands:` | [top](#introduction) | +| [top](#flags) | :norway: | `:norway:` | :nepal: | `:nepal:` | [top](#introduction) | +| [top](#flags) | :nauru: | `:nauru:` | :niue: | `:niue:` | [top](#introduction) | +| [top](#flags) | :new_zealand: | `:new_zealand:` | :oman: | `:oman:` | [top](#introduction) | +| [top](#flags) | :panama: | `:panama:` | :peru: | `:peru:` | [top](#introduction) | +| [top](#flags) | :french_polynesia: | `:french_polynesia:` | :papua_new_guinea: | `:papua_new_guinea:` | [top](#introduction) | +| [top](#flags) | :philippines: | `:philippines:` | :pakistan: | `:pakistan:` | [top](#introduction) | +| [top](#flags) | :poland: | `:poland:` | :st_pierre_miquelon: | `:st_pierre_miquelon:` | [top](#introduction) | +| [top](#flags) | :pitcairn_islands: | `:pitcairn_islands:` | :puerto_rico: | `:puerto_rico:` | [top](#introduction) | +| [top](#flags) | :palestinian_territories: | `:palestinian_territories:` | :portugal: | `:portugal:` | [top](#introduction) | +| [top](#flags) | :palau: | `:palau:` | :paraguay: | `:paraguay:` | [top](#introduction) | +| [top](#flags) | :qatar: | `:qatar:` | :reunion: | `:reunion:` | [top](#introduction) | +| [top](#flags) | :romania: | `:romania:` | :serbia: | `:serbia:` | [top](#introduction) | +| [top](#flags) | :ru: | `:ru:` | :rwanda: | `:rwanda:` | [top](#introduction) | +| [top](#flags) | :saudi_arabia: | `:saudi_arabia:` | :solomon_islands: | `:solomon_islands:` | [top](#introduction) | +| [top](#flags) | :seychelles: | `:seychelles:` | :sudan: | `:sudan:` | [top](#introduction) | +| [top](#flags) | :sweden: | `:sweden:` | :singapore: | `:singapore:` | [top](#introduction) | +| [top](#flags) | :st_helena: | `:st_helena:` | :slovenia: | `:slovenia:` | [top](#introduction) | +| [top](#flags) | :svalbard_jan_mayen: | `:svalbard_jan_mayen:` | :slovakia: | `:slovakia:` | [top](#introduction) | +| [top](#flags) | :sierra_leone: | `:sierra_leone:` | :san_marino: | `:san_marino:` | [top](#introduction) | +| [top](#flags) | :senegal: | `:senegal:` | :somalia: | `:somalia:` | [top](#introduction) | +| [top](#flags) | :suriname: | `:suriname:` | :south_sudan: | `:south_sudan:` | [top](#introduction) | +| [top](#flags) | :sao_tome_principe: | `:sao_tome_principe:` | :el_salvador: | `:el_salvador:` | [top](#introduction) | +| [top](#flags) | :sint_maarten: | `:sint_maarten:` | :syria: | `:syria:` | [top](#introduction) | +| [top](#flags) | :swaziland: | `:swaziland:` | :tristan_da_cunha: | `:tristan_da_cunha:` | [top](#introduction) | +| [top](#flags) | :turks_caicos_islands: | `:turks_caicos_islands:` | :chad: | `:chad:` | [top](#introduction) | +| [top](#flags) | :french_southern_territories: | `:french_southern_territories:` | :togo: | `:togo:` | [top](#introduction) | +| [top](#flags) | :thailand: | `:thailand:` | :tajikistan: | `:tajikistan:` | [top](#introduction) | +| [top](#flags) | :tokelau: | `:tokelau:` | :timor_leste: | `:timor_leste:` | [top](#introduction) | +| [top](#flags) | :turkmenistan: | `:turkmenistan:` | :tunisia: | `:tunisia:` | [top](#introduction) | +| [top](#flags) | :tonga: | `:tonga:` | :tr: | `:tr:` | [top](#introduction) | +| [top](#flags) | :trinidad_tobago: | `:trinidad_tobago:` | :tuvalu: | `:tuvalu:` | [top](#introduction) | +| [top](#flags) | :taiwan: | `:taiwan:` | :tanzania: | `:tanzania:` | [top](#introduction) | +| [top](#flags) | :ukraine: | `:ukraine:` | :uganda: | `:uganda:` | [top](#introduction) | +| [top](#flags) | :us_outlying_islands: | `:us_outlying_islands:` | :united_nations: | `:united_nations:` | [top](#introduction) | +| [top](#flags) | :us: | `:us:` | :uruguay: | `:uruguay:` | [top](#introduction) | +| [top](#flags) | :uzbekistan: | `:uzbekistan:` | :vatican_city: | `:vatican_city:` | [top](#introduction) | +| [top](#flags) | :st_vincent_grenadines: | `:st_vincent_grenadines:` | :venezuela: | `:venezuela:` | [top](#introduction) | +| [top](#flags) | :british_virgin_islands: | `:british_virgin_islands:` | :us_virgin_islands: | `:us_virgin_islands:` | [top](#introduction) | +| [top](#flags) | :vietnam: | `:vietnam:` | :vanuatu: | `:vanuatu:` | [top](#introduction) | +| [top](#flags) | :wallis_futuna: | `:wallis_futuna:` | :samoa: | `:samoa:` | [top](#introduction) | +| [top](#flags) | :kosovo: | `:kosovo:` | :yemen: | `:yemen:` | [top](#introduction) | +| [top](#flags) | :mayotte: | `:mayotte:` | :south_africa: | `:south_africa:` | [top](#introduction) | +| [top](#flags) | :zambia: | `:zambia:` | :zimbabwe: | `:zimbabwe:` | [top](#introduction) | + +### Subdivision Flag + +| | ico | shortcode | ico | shortcode | | +| - | :-: | - | :-: | - | - | +| [top](#flags) | :england: | `:england:` | :scotland: | `:scotland:` | [top](#introduction) | +| [top](#flags) | :wales: | `:wales:` | | | [top](#introduction) | + +## GitHub Custom Emoji + +| | ico | shortcode | ico | shortcode | | +| - | :-: | - | :-: | - | - | +| [top](#github-custom-emoji) | :accessibility: | `:accessibility:` | :atom: | `:atom:` | [top](#introduction) | +| [top](#github-custom-emoji) | :basecamp: | `:basecamp:` | :basecampy: | `:basecampy:` | [top](#introduction) | +| [top](#github-custom-emoji) | :bowtie: | `:bowtie:` | :dependabot: | `:dependabot:` | [top](#introduction) | +| [top](#github-custom-emoji) | :electron: | `:electron:` | :feelsgood: | `:feelsgood:` | [top](#introduction) | +| [top](#github-custom-emoji) | :finnadie: | `:finnadie:` | :fishsticks: | `:fishsticks:` | [top](#introduction) | +| [top](#github-custom-emoji) | :goberserk: | `:goberserk:` | :godmode: | `:godmode:` | [top](#introduction) | +| [top](#github-custom-emoji) | :hurtrealbad: | `:hurtrealbad:` | :neckbeard: | `:neckbeard:` | [top](#introduction) | +| [top](#github-custom-emoji) | :octocat: | `:octocat:` | :rage1: | `:rage1:` | [top](#introduction) | +| [top](#github-custom-emoji) | :rage2: | `:rage2:` | :rage3: | `:rage3:` | [top](#introduction) | +| [top](#github-custom-emoji) | :rage4: | `:rage4:` | :shipit: | `:shipit:` | [top](#introduction) | +| [top](#github-custom-emoji) | :suspect: | `:suspect:` | :trollface: | `:trollface:` | [top](#introduction) | diff --git a/docs/content/en/quick-reference/functions.md b/docs/content/en/quick-reference/functions.md new file mode 100644 index 000000000..42eafedd3 --- /dev/null +++ b/docs/content/en/quick-reference/functions.md @@ -0,0 +1,14 @@ +--- +title: Functions +description: A quick reference guide to Hugo's functions, grouped by namespace. Aliases, if any, appear in parentheses to the right of the function name. +categories: [quick reference] +keywords: [] +menu: + docs: + parent: quick-reference + weight: 30 +weight: 30 +toc: true +--- + +{{% quick-reference section="functions" %}} diff --git a/docs/content/en/quick-reference/methods.md b/docs/content/en/quick-reference/methods.md new file mode 100644 index 000000000..abd1db709 --- /dev/null +++ b/docs/content/en/quick-reference/methods.md @@ -0,0 +1,14 @@ +--- +title: Methods +description: A quick reference guide to Hugo's methods, grouped by object. +categories: [quick reference] +keywords: [] +menu: + docs: + parent: quick-reference + weight: 40 +weight: 40 +toc: true +--- + +{{% quick-reference section="methods" %}} diff --git a/docs/content/en/quick-reference/page-collections.md b/docs/content/en/quick-reference/page-collections.md new file mode 100644 index 000000000..795eb494d --- /dev/null +++ b/docs/content/en/quick-reference/page-collections.md @@ -0,0 +1,46 @@ +--- +title: Page collections +description: A quick reference guide to Hugo's page collections. +categories: [quick reference] +keywords: [] +menu: + docs: + parent: quick-reference + weight: 50 +weight: 50 +toc: true +--- + +## Page + +Use these `Page` methods when rendering lists on [section] pages, [taxonomy] pages, [term] pages, and the home page. + +[section]: /getting-started/glossary/#section +[taxonomy]: /getting-started/glossary/#taxonomy +[term]: /getting-started/glossary/#term + +{{< list-pages-in-section path=/methods/page filter=methods_page_page_collections filterType=include omitElementIDs=true titlePrefix=PAGE. >}} + +## Site + +Use these `Site` methods when rendering lists on any page. + +{{< list-pages-in-section path=/methods/site filter=methods_site_page_collections filterType=include omitElementIDs=true titlePrefix=SITE. >}} + +## Filter + +Use the [`where`] function to filter page collections. + +[`where`]: /functions/collections/where + +## Sort + +Use these methods to sort page collections. + +{{< list-pages-in-section path=/methods/pages filter=methods_pages_sort filterType=include titlePrefix=. omitElementIDs=true titlePrefix=PAGES. >}} + +## Group + +Use these methods to group page collections. + +{{< list-pages-in-section path=/methods/pages filter=methods_pages_group filterType=include titlePrefix=. omitElementIDs=true titlePrefix=PAGES. >}} diff --git a/docs/content/en/showcase/1password-support/bio.md b/docs/content/en/showcase/1password-support/bio.md new file mode 100644 index 000000000..3e15adc9f --- /dev/null +++ b/docs/content/en/showcase/1password-support/bio.md @@ -0,0 +1,4 @@ + +**1Password** is a password manager that keeps you safe online. It protects your secure information behind the one password only you know. + +The [1Password Support](https://support.1password.com/) website was built from scratch with **Hugo** and enhanced with **React** and **Elasticsearch** to give us the best of both worlds: The simplicity and performance of a static site, with the richness of a hosted web app. diff --git a/docs/content/en/showcase/1password-support/featured.png b/docs/content/en/showcase/1password-support/featured.png Binary files differnew file mode 100644 index 000000000..8e46495e6 --- /dev/null +++ b/docs/content/en/showcase/1password-support/featured.png diff --git a/docs/content/en/showcase/1password-support/index.md b/docs/content/en/showcase/1password-support/index.md new file mode 100644 index 000000000..ed44053c8 --- /dev/null +++ b/docs/content/en/showcase/1password-support/index.md @@ -0,0 +1,39 @@ +--- + +title: 1Password Support +date: 2018-02-22 +description: "Showcase: \"Compiles 400 pages in five languages in the blink of an eye.\"" +siteURL: https://support.1password.com/ +byline: "[Mitch Cohen](https://github.com/mitchchn), Documentation Team Lead" +aliases: [/showcase/1password/] + +--- + +At 1Password, we used to go through a different documentation platform every month: blog engines, ebooks, wikis, site generators written in Ruby and JavaScript. Each was inadequate in its own special way. Then we found **Hugo**. We made one last switch, and we're glad we did. + +### Not all static site generators are created equal + +Finding a tool that will make your customers, writers, designers, _and_ DevOps team happy is no easy task, but we managed it with Hugo: + +**Hugo is static**. We're a security company, so we swear by static sites and use them wherever possible. We feel much safer pointing customers at HTML files than at a complicated server which needs to be hardened. + +**Hugo is Go**. We love the Go programming language at 1Password, and we were delighted to learn that Hugo used the same Go template syntax that our designers and front-end developers had already mastered. + +**Hugo is FAST**. Our previous static site generator took nearly a minute to compile our (then much smaller) site. Developers might be used to this, but it wasn't cutting it for writers who wanted to see live previews of their work. Hugo did the same job in milliseconds, and to this day compiles 400 pages in five languages in the blink of an eye. + +**Hugo is flexible**. Thanks to Hugo's content and layout system, we were able to preserve our existing file and folder structure and port our entire production site in a few days. We could then create new content types that weren't possible before, like these snazzy [showcases](https://support.1password.com/explore/extension/). + +**Hugo is great for writers**. Our documentation team was already comfortable with Markdown and Git and could start creating content for Hugo with zero downtime. Once we added shortcodes, our writers were able to dress up articles with features like [platform boxes](https://support.1password.com/get-the-apps/) with just a bit of new syntax. + +**Hugo has an amazing developer community**. Hugo updates are frequent and filled to the brim with features and fixes. As we developed the multilingual version of our site, we submitted PRs for features we needed and were helped through the process by [@bep](https://github.com/bep) and others. + +**Hugo is simple to deploy**. Hugo has just the right amount of configuration options to fit into our build system without being too complicated. + +### Tech specs + +* [1Password Support](https://support.1password.com) uses Hugo with a custom theme. It shares styles and some template code with [1Password.com](https://1password.com), which we also moved to Hugo in 2016. +* Code and articles live in a private GitHub repository, which is deployed to a static content server using Git hooks. +* Writers build and preview the site on their computers and contribute content using pull requests. +* We use Hugo's [multilingual support](/content-management/multilingual/) to build the site in English, Spanish, French, Italian, German, and Russian. With the help of Hugo, 1Password Support became our very first site in multiple languages. +* Our [contact form](https://support.1password.com/contact) is a single-page React app. We were able to integrate it with Hugo seamlessly thanks to its support for static files. +* The one part of the support site which is not static is our search engine, which we developed with Elasticsearch and host on AWS. diff --git a/docs/content/en/showcase/alora-labs/bio.md b/docs/content/en/showcase/alora-labs/bio.md new file mode 100644 index 000000000..f14a90b75 --- /dev/null +++ b/docs/content/en/showcase/alora-labs/bio.md @@ -0,0 +1,3 @@ +**Alora Labs** is a product development consultancy headquartered in Toronto, Canada. + +We help companies build software and IoT products and were recently recognized as one of the [**top IoT development firms**](https://aloralabs.com/insights/alora-labs-receives-clutch-2021-top-iot-agency-award) in Toronto. diff --git a/docs/content/en/showcase/alora-labs/featured.png b/docs/content/en/showcase/alora-labs/featured.png Binary files differnew file mode 100644 index 000000000..b8e1f302b --- /dev/null +++ b/docs/content/en/showcase/alora-labs/featured.png diff --git a/docs/content/en/showcase/alora-labs/index.md b/docs/content/en/showcase/alora-labs/index.md new file mode 100644 index 000000000..559169319 --- /dev/null +++ b/docs/content/en/showcase/alora-labs/index.md @@ -0,0 +1,18 @@ +--- +title: Alora Labs +date: 2021-05-27 +description: "Showcase: \"Making performant websites accessible for everyone.\"" +siteURL: https://aloralabs.com/ +siteSource: https://github.com/aloralabs/homepage +aliases: [/showcase/aloralabs/] +--- + +At Alora Labs we always have an eye open for new tools and technology that we can utilize to the benefit of our customers or internal projects like our website. + +The previous iteration of our site was built with Jekyll, which served us well at first. However as time went on, we became frustrated with the number of dependencies we had to rely on, that would often break at the most inconvenient times. + +Hugo was a breath of fresh air in this regard, a single binary that works equally well on Windows as it did on macOS or Linux. We no longer need additional tools for image optimization, Sass compilation or JavaScript bundling. Everything just works, and with a substantial performance boost too. + +Hugo has become a favorite tool in the tool belt and the foundation for many client projects. We couldn't be happier with the switch and we are optimistic about recommending Hugo for many years to come. + +Thank you to the vibrant community and talented development team for all the hard work in making Hugo a success. As excellent as Hugo is now, we cannot wait to see what the release notes have in store for us next. diff --git a/docs/content/en/showcase/ampio-help/bio.md b/docs/content/en/showcase/ampio-help/bio.md new file mode 100644 index 000000000..c7dd9894a --- /dev/null +++ b/docs/content/en/showcase/ampio-help/bio.md @@ -0,0 +1,11 @@ + +__We are Ampio.__ We design and manufacture a building automation system that provides control, comfort, safety and reliability. Visit [our page](http://ampio.com/) to learn more about our solution! + +__Ampio Knowledge Base__ is a service built and maintained with Hugo. It is a self-service support platform for our customers and certified installers. It also contains a complete portfolio of our modules---building blocks of the Ampio building automation system. + +The site is built by: + +* [@mgetka](https://github.com/mgetka), developer +* [@SteynAnna](https://github.com/SteynAnna), maintainer + +and other members of the Ampio team responsible for content creation. diff --git a/docs/content/en/showcase/ampio-help/featured.png b/docs/content/en/showcase/ampio-help/featured.png Binary files differnew file mode 100644 index 000000000..07974e7f1 --- /dev/null +++ b/docs/content/en/showcase/ampio-help/featured.png diff --git a/docs/content/en/showcase/ampio-help/index.md b/docs/content/en/showcase/ampio-help/index.md new file mode 100644 index 000000000..2daafbbe1 --- /dev/null +++ b/docs/content/en/showcase/ampio-help/index.md @@ -0,0 +1,77 @@ +--- +title: Ampio Knowledge Base +date: 2022-10-30 + +description: "Knowledge base for the Ampio building automation system." +siteURL: https://help.ampio.com/ +--- + +As a company that specializes in highly customizable smart solutions for various industries, Ampio has accumulated a vast amount of knowledge throughout the years. We were on the lookout for a user-friendly platform to impart this knowledge to our clients and installers. Delivering a service that caters to both audiences, scattered around the globe with vastly divergent needs and expectations, was a challenge. + +On the one hand, we needed something that would let us educate a client with no technical knowledge about our system in a visually appealing way. + +On the other hand, our installers required technical drawings, offline manuals, and a deep dive into highly specialized subjects. + +Over and above that, we could not overlook the fact that our internal team of editors and maintainers of the Knowledge Base included non-programmers who had to be able to create content and navigate the architecture of the site just as well as those adept at coding. + +We started our journey with the following requirements: + + - Ease of contribution + - Efficient search capabilities + - The possibility of deployment to simple shared hosting + - Proper support for multilingualism + +## Dark ages of WordPress + +With the above-mentioned in mind, we built our first revision of the service in WordPress with a commercial knowledge base plugin. The initial requirements seemed not to be exorbitant, and yet we were surprised to see that only a few of the available solutions covered them. Especially, the case of multilingualism appeared to be particularly neglected across the available products. + +The WordPress-based products made big promises: pay some bucks, bootstrap the service in minutes, and forget about all the development troubles. And although those promises could possibly be deliverable on WordPress' end, it was definitely not true for anything more than the most generic deployments. In our case, we were dealing with more and more trade-offs. Plus, the solution was just slow on the simple shared hosting environment that we dedicated to the job. + +## Turning point + +The turning point was the introduction of a new key requirement---each document was to be downloadable in the PDF format. Such functionality was not available in the plugins we owned, nor did it look like any of the other existing WordPress plugins could fulfill our needs to a satisfactory degree. Nobody in our team was brave enough to add such a functionality to the current stack, so we decided to start from scratch. + +On top of that new development, we had to remember another one of our key requirements, namely, that mostly non-programmers were to be responsible for the service maintenance and content creation. Initially, we were leaning towards headless CMS-based solutions, but finally we made a bold move and decided to create a Git-managed Jamstack service and see what happens. + +## Hugo to the rescue + +Hugo was our first choice of SSG. The multilingualism support was the primary feature that convinced us. Later on, going through the documentation, we continued to discover new exciting features that we didn't even know we needed when we started. + +The rich functionalities of WordPress WYSIWYG editors soon turned out to be a curse. It became burdensome to maintain formatting consistency across documents prepared by multiple contributors. When we considered Markdown, we knew that it would give us a lot less flexibility. In our case, it proved to be a blessing in disguise---the constraints imposed by the notation ensured that each document was prepared in the same way. And in the cases where Markdown was not enough, Hugo shortcodes gave us all that we needed to get the results we anticipated. + +In terms of PDF generation, we utilized [custom output formats](/templates/output-formats/) to produce intermediary document representations, which are consumed by our custom tool transforming them to TeX documents, which are finally used to produce PDF files. + +Custom output formats were also used to create search indexes. The search functionality is built on the brilliant [TNTSearch](https://github.com/teamtnt/tntsearch) library. The search queries and results are handled by PHP snippets embedded into static documents handled by Hugo. + +We even implemented a simple REST API generated by Hugo! We have yet to find something that cannot be achieved with this stack, while in WordPress-based solutions we were struggling with things as simple as defining custom document ordering in one of the categories list views. + +When talking about Hugo, we cannot forget about the speed. At the beginning we were not considering it a killer feature, but as our document base grew bigger, we appreciated it more and more. Dry-runs are not so common---most of the time we are working on one of the documents with cache already built during one of the previous Hugo runs. In such a scenario, Hugo rebuilds the site in about a second and we consider it a very good result. + +```text + | EN | PL +-------------------+-----+------ + Pages | 483 | 486 + Paginator pages | 56 | 55 + Non-page files | 745 | 749 + Static files | 917 | 917 + Processed images | 487 | 490 + Aliases | 80 | 79 + Sitemaps | 2 | 1 + Cleaned | 0 | 0 + +Total in 1096 ms +``` + +## Adaptation among the contributors + +Very quickly it became apparent that our initial concerns about the adaptation of the workflow among contributors were grossly exaggerated. Markdown is fairly straightforward and did not cause any trouble for the contributors. + +We recommended that our colleagues use Visual Studio Code as a tool for content creation. The project’s repository tracks project-scoped configuration of the editor, which includes a set of _tasks_ allowing to run a live server from the GUI level. This is very useful for those who are easily frightened when faced with the mighty terminal. + +The basic skills of the Git workflow were also easily acquired. At the end of the day, builds and deployments are fully managed by CI/CD processes, so the administration of the service drills down to reviewing and accepting merge requests in the Git frontend. As a side effect, we receive a full and clear history of contributions, which is well appreciated by our quality assurance auditors. + +We could even say that our experiment spread the love for Git among non-programmers in our organization! + +## Summary + +Hugo is the best! Definitely give it a try if you are ever faced with a challenge similar to ours. And do not give it a second thought if your service contributors are not too technically inclined---it might still turn out great! diff --git a/docs/content/en/showcase/bypasscensorship/bio.md b/docs/content/en/showcase/bypasscensorship/bio.md new file mode 100644 index 000000000..0a847df1e --- /dev/null +++ b/docs/content/en/showcase/bypasscensorship/bio.md @@ -0,0 +1,6 @@ +Bypass Censorship find and promote tools that provide Internet access to everyone. + +The site is built by: + +* [Leyla Avsar](https://www.leylaavsar.com/) (designer) +* [Fredrik Jonsson](https://xdeb.net/) (dev) diff --git a/docs/content/en/showcase/bypasscensorship/featured.png b/docs/content/en/showcase/bypasscensorship/featured.png Binary files differnew file mode 100644 index 000000000..d6f429112 --- /dev/null +++ b/docs/content/en/showcase/bypasscensorship/featured.png diff --git a/docs/content/en/showcase/bypasscensorship/index.md b/docs/content/en/showcase/bypasscensorship/index.md new file mode 100644 index 000000000..8cbda9aa6 --- /dev/null +++ b/docs/content/en/showcase/bypasscensorship/index.md @@ -0,0 +1,24 @@ +--- +title: Bypass Censorship +date: 2019-06-16 +description: "Showcase: Bypass Censorship find and promote tools that provide Internet access to everyone." +siteURL: https://www.bypasscensorship.org/ +byline: "[Fredrik Jonsson](https://xdeb.net/), Web developer & Linux sysadmin" + +--- + +The British Broadcasting Corporation (BBC) (UK), Deutsche Welle (DW) (Germany), France Médias Monde (FMM) (France), the U.S. Agency for Global Media (USAGM) (US) and the Open Technology Fund (OTF) (US) co-sponsor the Bypass Censorship website. + +Websites of international news agencies are often blocked in many countries. In order to connect people to these sites, Bypass Censorship feature and recommend tools in the following languages: English, French, Spanish, Arabic, Farsi, Chinese, and Russian. + +One of the tools is the Bypass Censorship Extension for Firefox and Chrome. The extension help direct people to mirrors of partners sites if they are being censored. + +The first version of the site was built in Drupal 8 but it was relaunched as a static site built with Hugo in 2019. + +Security, page load time and easy of hosting is the main reasons for switching to a static site. As the lead developer I had good experience with Hugo and was interested in exploring the multilingual features. + +It's a simply site, basically one page in seven languages. I had no problems getting Hugo to output what I wanted. Found the multilingual support straight forward and easy to work with. + +Thanks to the design by [Leyla Avsar](https://www.leylaavsar.com/) the site also looks good. I used the [Hugo Zen theme](https://github.com/frjo/hugo-theme-zen) with a few custom templates and the needed CSS. + +The editors can maintain content via [Forestry.io CMS](https://forestry.io/) or directly via Git. Forestry does unfortunately not have multilingual support. All the language versions are in one pile making it harder to find the right file to edit, but it works. diff --git a/docs/content/en/showcase/digitalgov/bio.md b/docs/content/en/showcase/digitalgov/bio.md new file mode 100644 index 000000000..db3ffafaf --- /dev/null +++ b/docs/content/en/showcase/digitalgov/bio.md @@ -0,0 +1,2 @@ + +**Digital.gov** helps people in the U.S. government deliver better, more accessible digital services through publishing essential guidance, resources, tools, and online events that make it easier for people to design, build, and deliver essential services for the public. diff --git a/docs/content/en/showcase/digitalgov/featured.png b/docs/content/en/showcase/digitalgov/featured.png Binary files differnew file mode 100644 index 000000000..7d065dce9 --- /dev/null +++ b/docs/content/en/showcase/digitalgov/featured.png diff --git a/docs/content/en/showcase/digitalgov/index.md b/docs/content/en/showcase/digitalgov/index.md new file mode 100644 index 000000000..3db2c608f --- /dev/null +++ b/docs/content/en/showcase/digitalgov/index.md @@ -0,0 +1,64 @@ +--- +title: Digital.gov +date: 2020-05-01 +description: "Showcase: \"Guidance on building better digital services in government.\"" +siteURL: https://digital.gov/ +siteSource: https://github.com/gsa/digitalgov.gov +--- + +For over a decade, Digital.gov has provided guidance, training, and community support to the people who are responsible for delivering digital services in the U.S. government. Essentially, it is a place where people can find examples of problems being solved in government, and get links to the tools and resources they need. + +Through collaboration in our communities of practice, Digital.gov is a window into the people who work in technology in government and the challenges they face making digital services stronger and more effective. [Read more about our site »](https://digital.gov/2019/12/19/a-new-digitalgov/) + +Digital.gov is built using the [U.S. Web Design System](https://designsystem.digital.gov/) (USWDS) and have followed the [design principles](https://designsystem.digital.gov/maturity-model/) in building out our new site: + +- **Start with real user needs** — We used human-centered design methods to inform our product decisions (like qualitative user research), and gathered feedback from real users. We also continually test our assumptions with small experiments. +- **Earn trust** —We recognize that trust has to be earned every time. We are including all [required links and content](https://digital.gov/resources/required-web-content-and-links/) on our site, clearly identifying as a government site, building with modern best practices, and using HTTPS. +- **Embrace accessibility** — [Accessibility](https://digital.gov/resources/intro-accessibility/) affects everybody, and we built it into every decision. We’re continually working to conform to Section 508 requirements, use user experience best practices, and support a wide range of devices. +- **Promote continuity** — We started from shared solutions like USWDS and [Federalist](https://federalist.18f.gov/). We designed our site to clearly identify as a government site by including USWDS’s .gov banner, common colors and patterns, and built with modern best practices. +- **Listen** — We actively collect user feedback and web metrics. We use the [Digital Analytics Program](https://digital.gov/services/dap/) (DAP) and analyze the data to discover actionable insights. We make small, incremental changes to continuously improve our website by listening to readers and learning from what we hear. + +_More on the [USWDS maturity model »](https://designsystem.digital.gov/maturity-model/)_ + +## Open tools + +We didn’t start from scratch. We built and designed the Digital.gov using many of the open-source tools and services that we develop for government here in the [Technology Transformation Services](https://www.gsa.gov/tts/) (TTS). + +Using services that make it possible to design, build, and iterate quickly are essential to modern web design and development, which is why [Federalist](https://federalist.18f.gov/) and the [U.S. Web Design System](https://designsystem.digital.gov/) are such a great combination. + +**Why Hugo?** Well, with around `~3,000` files _(and growing)_ and `~9,000` built pages, we needed a site generator that could handle that volume with lightning fast speed. + +Hugo was the clear option. The [Federalist](https://federalist.18f.gov/) team quickly added it to their available site generators, and we were off. + +At the moment, it takes around `32 seconds` to build close to `~10,000` pages! + +Take a look: + +```text + + | EN +-------------------+------- + Pages | 7973 + Paginator pages | 600 + Non-page files | 108 + Static files | 851 + Processed images | 0 + Aliases | 1381 + Sitemaps | 1 + Cleaned | 0 + +Built in 32.427 seconds +``` + +In addition to Hugo, we are proudly using a number of other tools and services, all built by government are free to use: + +- [Federalist](https://federalist.18f.gov/) +- [Search.gov](https://www.search.gov/) — A free, hosted search platform for federal websites. +- [Cloud.gov](https://www.cloud.gov/) — helps teams build, run, and authorize cloud-ready or legacy government systems quickly and cheaply. +- [Federal CrowdSource Mobile Testing Program](https://digital.gov/services/service_mobile-testing-program/) — Free mobile compatibility testing by feds, for feds. +- [Digital Analytics Program](https://digital.gov/services/dap/) (DAP) — A free analytics tool for measuring digital services in the federal government +- [Section508.gov](https://www.section508.gov/) and [PlainLanguage.gov](https://www.plainlanguage.gov/) resources +- [API.data.gov](https://api.data.gov/) — a free API management service for federal agencies +- [U.S. Digital Registry](https://digital.gov/services/u-s-digital-registry/) — A resource for confirming the official status of government social media accounts, mobile apps, and mobile websites. + +**Questions or feedback?** [Submit an issue](https://github.com/GSA/digitalgov.gov/issues) or send us an email to [[email protected]](mailto:[email protected]) :heart: diff --git a/docs/content/en/showcase/fireship/bio.md b/docs/content/en/showcase/fireship/bio.md new file mode 100644 index 000000000..faf739bfa --- /dev/null +++ b/docs/content/en/showcase/fireship/bio.md @@ -0,0 +1,6 @@ + +**Fireship.io** is an ecosystem of detailed and practical resources for developers who want to build and ship high-quality apps. + +The site is built by: + +* [Jeff Delaney](https://fireship.io/contributors/jeff-delaney/) diff --git a/docs/content/en/showcase/fireship/featured.png b/docs/content/en/showcase/fireship/featured.png Binary files differnew file mode 100644 index 000000000..33d1a47c5 --- /dev/null +++ b/docs/content/en/showcase/fireship/featured.png diff --git a/docs/content/en/showcase/fireship/index.md b/docs/content/en/showcase/fireship/index.md new file mode 100644 index 000000000..a229e4f6a --- /dev/null +++ b/docs/content/en/showcase/fireship/index.md @@ -0,0 +1,17 @@ +--- +title: fireship.io +date: 2019-02-02 +description: "Showcase: \"Hugo helps us create complex technical content that integrates engaging web components\"" +siteURL: https://fireship.io +siteSource: https://github.com/fireship-io/fireship.io +byline: "[Jeff Delaney](https://github.com/codediodeio), Fireship.io Creator" +--- + +After careful consideration of JavaScript/JSX-based static site generators, it became clear that Hugo was the only tool capable of handling our project's complex demands. Not only do we have multiple content formats and taxonomies, but we often need to customize the experience at a more granular level. The problems Hugo has solved for us include: + +- **Render speed.** We know from past experience that JavaScript-based static site generators become very slow when you have thousands of pages and images. +- **Feature-rich.** Our site has a long list of specialized needs and Hugo somehow manages to cover every single use case. +- **Composability.** Hugo's partial and shortcode systems empower us to write DRY and maintainable templates. +- **Simplicity.** Hugo is easy to learn (even without Go experience) and doesn't burden us with brittle dependencies. + +The site is able to achieve Lighthouse performance scores of 95+, despite the fact that it is a fully interactive PWA that ships Angular and Firebase in the JS bundle. This is made possible by (1) prerendering content with Hugo and (2) lazily embedding native web components directly in the HTML and Markdown. We provide a [detailed explanation](https://youtu.be/gun8OiGtlNc) of the architecture on YouTube and can't imagine development without Hugo. diff --git a/docs/content/en/showcase/forestry/bio.md b/docs/content/en/showcase/forestry/bio.md new file mode 100644 index 000000000..0b8f28743 --- /dev/null +++ b/docs/content/en/showcase/forestry/bio.md @@ -0,0 +1,4 @@ + +Forestry.io is a Git-backed CMS (content management system) for websites and web products built using static site generators such as Hugo. + +Forestry bridges the gap between developers and their teams, by making development fun and easy, while providing powerful content management for their teams. diff --git a/docs/content/en/showcase/forestry/featured.png b/docs/content/en/showcase/forestry/featured.png Binary files differnew file mode 100644 index 000000000..1ee315e78 --- /dev/null +++ b/docs/content/en/showcase/forestry/featured.png diff --git a/docs/content/en/showcase/forestry/index.md b/docs/content/en/showcase/forestry/index.md new file mode 100644 index 000000000..32a932a7a --- /dev/null +++ b/docs/content/en/showcase/forestry/index.md @@ -0,0 +1,48 @@ +--- +title: Forestry.io +date: 2018-03-16 +description: "Showcase: \"Seeing Hugo in action is a whole different world of awesome.\"" +siteURL: https://forestry.io/ +siteSource: https://github.com/forestryio/forestry.io +--- + +It was clear from the get-go that we had to go with a static site generator. Static sites are secure, performant, and give you 100% flexibility. At [Forestry.io](https://forestry.io/) we provide Content Management Solutions for websites built with static site generators, so we might be a little biased. The only question: Which static site generator was the right choice for us? + +### Why Hugo? + +In our early research we looked at Ionic’s [site](https://github.com/ionic-team/ionic) to get some inspiration. They used Jekyll to build their website. While Jekyll is a great generator, the build times for larger sites can be painfully slow. With more than 150 pages plus many custom configurations and add-ons, our website doesn’t fall into the low-volume category anymore. Our developers want a smooth experience when working on the website and our content editors need the ability to preview content quickly. In short, we need our builds to be lightning fast. + +We knew Hugo was fast but we did [some additional benchmarking](https://forestry.io/blog/hugo-vs-jekyll-benchmark/) before making our decision. Seeing Hugo in action is a whole different world of awesome. Hugo takes less than one second to build our 150-page site! Take a look: + +```text + | EN ++------------------+-----+ + Pages | 141 + Paginator pages | 4 + Non-page files | 0 + Static files | 537 + Processed images | 0 + Aliases | 60 + Sitemaps | 1 + Cleaned | 0 + +Total in 739 ms +``` + +In fact, we liked Hugo so much that our wizard Chris made his workflow public and we started the open-source project [Create-Static-Site](https://github.com/forestryio/create-static-site). It's [a simple way to spin up sites](https://forestry.io/blog/up-and-running-with-hugo/) and set up a modern web development workflow with one line of code. Essentially it adds build configurations as a dependency for JS, CSS and Image Processing. + +Lastly, we want to take the opportunity to give some love to other amazing tools we used building our website. + +### What tools did we use? + +* Our Norwegian designer Nichlas is in love with [**Sketch**](https://www.sketchapp.com/). From what we hear it’s a designer’s dream come true. +* Some say our main graphic is [mesmerizing](https://twitter.com/hmncllctv/status/968907474664284160). Nichlas created it using [**3DS Max**](https://www.autodesk.com/products/3ds-max/overview). +* [**Hugo**](https://gohugo.io/) -- of course. +* Chris can’t think of modern web development without [**Gulp**](https://gulpjs.com/) & [**Webpack**](https://webpack.js.org/). We used them to add additional build steps such as Browsersync, CSS, JS and SVG optimization. +* Speaking about adding steps to our build, our lives would be much harder without [**CircleCI**](https://circleci.com/) for continuous deployment and automated testing purposes. +* We can’t stop raving about [**Algolia**](https://www.algolia.com/). Chris loves it and even wrote a tutorial on [how to implement Algolia](https://forestry.io/blog/search-with-algolia-in-hugo/) into static sites using Hugo’s [Custom Outputs](/templates/output-formats/). +* [**Cloudinary**](https://cloudinary.com/) is probably one of the easiest ways to get responsive images into your website. +* We might be a little biased on this one - We think [**Forestry.io**](https://forestry.io/) is a great way to add a content management system with a clean UI on top of your site without interrupting your experience as a developer. +* For hosting purposes we use the almighty [**AWS**](https://aws.amazon.com/). +* [**Formspree.io**](https://formspree.io/) is managing our support and enterprise requests. +* We also use browser cookies and JS to customize our user’s experience and give it a more dynamic feel. diff --git a/docs/content/en/showcase/godot-tutorials/bio.md b/docs/content/en/showcase/godot-tutorials/bio.md new file mode 100644 index 000000000..fd849f844 --- /dev/null +++ b/docs/content/en/showcase/godot-tutorials/bio.md @@ -0,0 +1,7 @@ +[Godot Tutorials](https://godottutorials.com) aims to teach beginners how to get up and running with basic game programming and game development skills. + +The website is built with the **Hugo Framework** alongside aws+cloudfront+lambda. + +The site is built by: + +- [Godot Tutorials](https://godottutorials.com) diff --git a/docs/content/en/showcase/godot-tutorials/featured.png b/docs/content/en/showcase/godot-tutorials/featured.png Binary files differnew file mode 100644 index 000000000..fef13b996 --- /dev/null +++ b/docs/content/en/showcase/godot-tutorials/featured.png diff --git a/docs/content/en/showcase/godot-tutorials/index.md b/docs/content/en/showcase/godot-tutorials/index.md new file mode 100644 index 000000000..3b71fd8bc --- /dev/null +++ b/docs/content/en/showcase/godot-tutorials/index.md @@ -0,0 +1,24 @@ +--- + +title: Godot Tutorials +date: 2021-01-07 + +description: "Teaching game development skills with love." + +# The URL to the site on the internet. +siteURL: https://godottutorials.com + +# Add credit to the article author. Leave blank or remove if not needed/wanted. +byline: "[Godot Tutorials](https://godottutorials.com), Web Developer & Game Programmer" + +--- + +[Godot Tutorials](https://godottutorials.com) started as a way to teach beginners game programming and game development. +As I created videos, I ran into a problem; if I made a mistake with a YouTube video, it was difficult to correct errors. + +I discovered that blogging episodes and having articles that teach on top of my videos is a fantastic solution to my problem. + +As I researched blogging platforms, I came across two solutions; however, I chose [Hugo](https://gohugo.io) because it's built with Markdown in mind and simplified my workflow. + +In a sense, with [Hugo](https://gohugo.io) programmed the right way, I can focus **more time on planning, creating, and editing** +my videos and **less time maintaining and fixing** my website. diff --git a/docs/content/en/showcase/hapticmedia/bio.md b/docs/content/en/showcase/hapticmedia/bio.md new file mode 100644 index 000000000..4423edb70 --- /dev/null +++ b/docs/content/en/showcase/hapticmedia/bio.md @@ -0,0 +1 @@ +**Hapticmedia** provides interactive 3D configurators for eCommerce. diff --git a/docs/content/en/showcase/hapticmedia/featured.png b/docs/content/en/showcase/hapticmedia/featured.png Binary files differnew file mode 100644 index 000000000..a47ea9c2c --- /dev/null +++ b/docs/content/en/showcase/hapticmedia/featured.png diff --git a/docs/content/en/showcase/hapticmedia/index.md b/docs/content/en/showcase/hapticmedia/index.md new file mode 100644 index 000000000..7ca2b6cef --- /dev/null +++ b/docs/content/en/showcase/hapticmedia/index.md @@ -0,0 +1,31 @@ +--- +title: Hapticmedia Blog +date: 2019-10-01 +description: "Showcase: \"A simple, but powerful, multilingual blog.\"" +siteURL: https://hapticmedia.fr/blog/en/ +byline: "[Cyril Bonnet](https://github.com/monsieurnebo), Web Developer" +--- + +Our goal was to create a simple, effective and multilingual blog on [3D technology](https://hapticmedia.fr/blog/en/3d-technology/) that could be managed by a non-technical profile. + +## Why Hugo? + +Hugo addresses all these needs, coupled with [Forestry.io](https://forestry.io/) for its administration via a "turnkey" interface. We have attached particular importance to SEO, and therefore to the creation of an advanced taxonomy system. Thus, each author and tag has a dedicated page, listing the related posts. + +## What we liked + +- The **multilingual** content support, especially simple to setup. +- The **multiple environments** support (develop, staging, test, production, ...). +- Although a hard start with the Go language, the power of the **Hugo's templating**. +- The **partial layouts**, including the `internals` (e.g. social meta tags). +- The **build time**, unbeatable ⚡️⚡️⚡️. + +## Tools & workflow + +- We used the same design as **[our website](https://hapticmedia.fr/en/)**, recreated as a Hugo HTML template. +- **[Hugo](https://gohugo.io)** for the static website generator. +- **[CircleCI](https://circleci.com)** for continuous integration & deployment. +- **[AWS](https://aws.amazon.com/)** for web hosting. +- **[Forestry.io](https://forestry.io)** for the content management. + +**All of these tools allow our editor to manage the blog's content without having to worry about its technical aspect, which is managed by the developers.** diff --git a/docs/content/en/showcase/hartwell-insurance/bio.md b/docs/content/en/showcase/hartwell-insurance/bio.md new file mode 100644 index 000000000..7fab74292 --- /dev/null +++ b/docs/content/en/showcase/hartwell-insurance/bio.md @@ -0,0 +1,6 @@ + +Hartwell Insurance is an insurance company set up solely to service the Broker community. + +By combining **Hugo**, **Service Worker** and **Netlify**, we were able to achieve incredible global site performance. + +The site was built by [Tomango](https://www.tomango.co.uk) diff --git a/docs/content/en/showcase/hartwell-insurance/featured.png b/docs/content/en/showcase/hartwell-insurance/featured.png Binary files differnew file mode 100644 index 000000000..ced251f98 --- /dev/null +++ b/docs/content/en/showcase/hartwell-insurance/featured.png diff --git a/docs/content/en/showcase/hartwell-insurance/hartwell-columns.png b/docs/content/en/showcase/hartwell-insurance/hartwell-columns.png Binary files differnew file mode 100644 index 000000000..c9d36b67d --- /dev/null +++ b/docs/content/en/showcase/hartwell-insurance/hartwell-columns.png diff --git a/docs/content/en/showcase/hartwell-insurance/hartwell-lighthouse.png b/docs/content/en/showcase/hartwell-insurance/hartwell-lighthouse.png Binary files differnew file mode 100644 index 000000000..a882f01fd --- /dev/null +++ b/docs/content/en/showcase/hartwell-insurance/hartwell-lighthouse.png diff --git a/docs/content/en/showcase/hartwell-insurance/hartwell-webpagetest.png b/docs/content/en/showcase/hartwell-insurance/hartwell-webpagetest.png Binary files differnew file mode 100644 index 000000000..f60994ea1 --- /dev/null +++ b/docs/content/en/showcase/hartwell-insurance/hartwell-webpagetest.png diff --git a/docs/content/en/showcase/hartwell-insurance/index.md b/docs/content/en/showcase/hartwell-insurance/index.md new file mode 100644 index 000000000..ef0587e41 --- /dev/null +++ b/docs/content/en/showcase/hartwell-insurance/index.md @@ -0,0 +1,69 @@ +--- + +title: Hartwell Insurance + +date: 2018-02-09 + +description: "Showcase: \"Hugo + Netlify + PWA makes for a rapid website.\"" + +siteURL: https://www.hartwell-insurance.com/ + +byline: "[Trys Mudford](http://www.trysmudford.com), Lead Developer, Tomango" + +--- + +We’ve just launched a shiny new website for [Hartwell Insurance](https://www.hartwell-insurance.com/) – I’m really proud of it. It was tackled in a different way to most previous Tomango site builds, using some fancy new tools and some vintage web standards. + +It’s a multi-page, single-page (!) website written in Hugo, a static site generator built with performance as a first-class feature. _I’ve outlined a load of benefits to Hugo & static sites [here](https://why-static.netlify.com/), in case you’re interested._ + +> **In essence, a static site generator pre-renders the whole site into HTML files and serves them like it’s 1995.** + +There’s no Apache or Node backend that does compilation at runtime, it’s all done at the build step. This means the server; Netlify in this case, only has to do one thing – serve files. Unsurprisingly, serving simple files is VERY quick. + +The starter point was the [Victor Hugo](https://github.com/netlify/victor-hugo) repository that Netlify have created. It let me dive in with Hugo, PostCSS, Browsersync and ES6 without setting up any tooling myself – always a win! + +I then took all the content from the design file and moved it into Markdown, putting shortcodes in where necessary. This site did need a number of custom shortcodes for the presentational elements like the expanding circles and full width backgrounds. But mostly it was just clean, semantic HTML with some CSS and JS enhancement thrown in. + +For example, this two column layout shown below. I used CSS Columns with a `break-after: always;` on the `<h1>`. No multi-wrapper or difficult-to-clear shortcodes, just clean HTML. + +![The multi-column setup on Hartwell Insurance](hartwell-columns.png) + +For the ripple effects on the section headings, I used JS to prepend a `<canvas>` element then animated it with `RequestAnimationFrame`. It adds a nice bit of movement on the page. + +On the Hartwell Profitmaker section, I toyed with the idea of using Vue.js for the calculator, but after giving it some thought, I decided to code in Vanilla. The result, all of the site JS comes in at 3.2KB! + +The plan was to host with Netlify and therefore get access to Netlify Forms. It meant spending 0 minutes on getting a backend set up – I could focus fully on the frontend. + +Cache invalidation isn’t normally something I spend all that much time thinking about when building a site. But as this site was going to be a Progressive Web App, invalidating files would be important to ensure the site didn’t appear broken when we made changes. As I was using Victor-Hugo, I wasn’t really sure how to best tackle this and sadly spent far too many hours wrangling with Webpack and Gulp files to try and get hashed file names working nicely. + +Then; while I was waiting for a haircut, I read a [Netlify blog post](https://www.netlify.com/blog/2017/02/23/better-living-through-caching/) on how they do cache invalidation with HTTP2 and it promptly blew my mind. + +When you request an asset, they send an ETag in the headers which is a hash of the file. There’s also a header to tell the browser not to trust it’s own cache (which sounds a little bit bonkers). + +So when you request the page, it opens a persistent HTTP2 connection up (so no new connections for file requests). When it gets to requesting that asset, the browser sends the ETag back to Netlify and they either return nothing if the ETag matches, or the new file with the new ETag. No `app.klfjlkdsfjdslkfjdslkfdsj.js` or `app.js?v=20180112`. Just a clean `app.js` with instant cache invalidation. Amazing. + +Finally, the [Service Worker](https://www.hartwell-insurance.com/sw.js) could be added. This turned out to be straightforward as the Netlify cache invalidation system solved most of the pain points. I went for a network-first, cache-fallback setup for both assets and HTML. This does mean flaky speeds are reliant on the page connection time, but given we’re on HTTP2, I’m hoping the persistent connection and tiny ETag size will keep it quick. For online connections, every request is up to date and instantly live after any update. Offline connections fall back to every assets’ last cached state. It seems to work really nicely, and there’s no need for an update prompt if assets have changed. + +--- + +## The results + +The WebPageTest results are looking good. The speed index is 456, 10x smaller than the average Alexa top 300,000 score. + +![WebPageTest results](hartwell-webpagetest.png) + +[TestMySite.io](https://testmysite.io/5a7e1bb2df99531a23c9ad2f/hartwell-insurance.com) is return ~2ms time to first byte from the CDN edge nodes. Lighthouse audits are also very promising. There’s still some improvement to be gained lazy-loading the images and inlining the CSS. I’m less excited about the [second suggestion](http://www.trysmudford.com/css-in-2017/), but I’ll certainly look at some lazy-loading, especially as I’m already using `IntersectionObserver` for some animations. + +![Lighthouse results](hartwell-lighthouse.png) + +The most encouraging result is how quick the site is around the world. Most Tomango clients (and their customers) are pretty local and almost exclusively UK-based. We have a dedicated server in Surrey that serves our market pretty well. It did take me by surprise just how much slower a connection from the USA, Australia and Japan to our server was. They’re waiting ~500ms just for the first byte, let alone downloading each asset. + +[Hartwell Insurance](https://www.hartwell-insurance.com/) are a US company so by putting them on our server, we’d be instantly hampering their local response times by literally seconds. This was one of the main reasons for going with Netlify. They provide global CDN hosting that’s quick from anywhere in the world. + +--- + +This project was such a blast to develop, it’s a real pleasure to put new technologies to good use in production, and to see real performance and usability benefits from them. Even using classic web methods of serving folders with files is fun when you’ve been using dynamic systems for a while – there’s something really pure about it. + +--- + +_This was originally posted on [my website](http://www.trysmudford.com/perfomance-wins-with-hugo-and-netlify/)_ diff --git a/docs/content/en/showcase/keycdn/bio.md b/docs/content/en/showcase/keycdn/bio.md new file mode 100644 index 000000000..90f623dca --- /dev/null +++ b/docs/content/en/showcase/keycdn/bio.md @@ -0,0 +1 @@ +[KeyCDN](https://www.keycdn.com) is a high performance content delivery network (CDN) offering many powerful features, including image processing that can transform and optimize images in real time. Our network offers global coverage to speed up content delivery and is capable of delivering entire static websites, like those built with Hugo, at the edge. diff --git a/docs/content/en/showcase/keycdn/featured.png b/docs/content/en/showcase/keycdn/featured.png Binary files differnew file mode 100644 index 000000000..46018a8f9 --- /dev/null +++ b/docs/content/en/showcase/keycdn/featured.png diff --git a/docs/content/en/showcase/keycdn/index.md b/docs/content/en/showcase/keycdn/index.md new file mode 100644 index 000000000..d092aa07d --- /dev/null +++ b/docs/content/en/showcase/keycdn/index.md @@ -0,0 +1,30 @@ +--- + +title: KeyCDN +date: 2020-04-10 +description: "Showcase: \"Hugo has become an integral part of our stack.\"" +siteURL: https://www.keycdn.com + +--- + +At KeyCDN one of our primary focuses is on performance. With speed being ingrained in our DNA we knew from the start that we must use a fast static website generator that could meet our requirements. When evaluating the right solution, Hugo met our requirements and we looked no further as it was the fastest and most flexible. + +## Why we chose Hugo + +Before our migration to Hugo our website was powered by a PHP-based website that had about 50 pages and a WordPress website that had over 500 posts between our blog and knowledge base. This became harder to maintain as time continued. We felt like we were losing the speed and flexibility that we require. To overcome this we knew we needed to convert our website to be static. This would allow our website to be faster and more secure as it could be delivered by all of our edge locations. + +It wasn’t an easy task at the beginning, however, after evaluating Hugo and benchmarking it we knew we had found the ideal solution. Hugo was by far the fastest setup and offered an intuitive way to build our entire website exactly as needed. The Go-based templates, shortcodes, and configuration options made it easy to build a complex website. + +In the fall of 2018 we started the migration and within a couple short months we had built a custom static website with Hugo and migrated all content from our old systems. The simplicity and vast amount of functionality that Hugo offers made this process fast and left our entire team, including all of our writers and developers, happy with the migration. Since migrating to Hugo we haven’t looked back. Hugo has become an integral part of our stack. We’re grateful to all those who have contributed to make Hugo what it is today. + +## Technical overview + +Below is an overview of what we used with Hugo to build our website: + +* [KeyCDN](https://www.keycdn.com) uses a custom theme and is our primary hub for all style sheets and JavaScript. Our other websites, like [KeyCDN Tools](https://tools.keycdn.com), only import the required style sheets and JavaScript. +* We use [Gulp](https://gulpjs.com) in our build process for many tasks, such as combining, versioning, and compressing our style sheets as well as our JavaScript. +* Our search is powered by a custom solution that we’ve built. It allows our pages, blog, and knowledge base to be searched. It uses [Axios](https://github.com/axios/axios) to send a `POST` request containing the search query. An index file in JSON generated by Hugo is searched and the results are then returned. +* Our commenting system is also powered by a custom solution that we’ve built. It uses Axios to send a `GET` request containing the slug to pull the comment thread and a `POST` request containing the name, email address, and comment when submitting a comment. +* Our contact form is a simple HTML form, which uses Axios as well. +* Our writers use shortcodes to enhance the capability of markdown. +* Our entire website is delivered through KeyCDN using a Pull Zone, which means all of our edge locations are delivering our website. diff --git a/docs/content/en/showcase/letsencrypt/bio.md b/docs/content/en/showcase/letsencrypt/bio.md new file mode 100644 index 000000000..92551dc47 --- /dev/null +++ b/docs/content/en/showcase/letsencrypt/bio.md @@ -0,0 +1,3 @@ + + +Let's Encrypt is a free, automated, and open certificate authority (CA), run for the public's benefit. It is a service provided by the [Internet Security Research Group (ISRG)](https://www.abetterinternet.org/). diff --git a/docs/content/en/showcase/letsencrypt/featured.png b/docs/content/en/showcase/letsencrypt/featured.png Binary files differnew file mode 100644 index 000000000..9535d91bd --- /dev/null +++ b/docs/content/en/showcase/letsencrypt/featured.png diff --git a/docs/content/en/showcase/letsencrypt/index.md b/docs/content/en/showcase/letsencrypt/index.md new file mode 100644 index 000000000..6ad4b7840 --- /dev/null +++ b/docs/content/en/showcase/letsencrypt/index.md @@ -0,0 +1,20 @@ +--- +title: Let’s Encrypt +date: 2018-03-13 +description: "Showcase: Lessons learned from taking letsencrypt.org to Hugo." +siteURL: https://letsencrypt.org/ +siteSource: https://github.com/letsencrypt/website +byline: "[bep](https://github.com/bep), Hugo Lead" +--- + +The **Let’s Encrypt website** has a common set of elements: A landing page and some other static info-pages, a document section, a blog, and a documentation section. Having it moved to Hugo was mostly motivated by a _simpler administration and Hugo's [multilingual support](/content-management/multilingual/)_. They already serve HTTPS to more than 60 million domains, and having the documentation available in more languages will increase that reach.[^1] + +{{< tweet user="letsencrypt" id="971755920639307777" >}} + +I helped them port the site from Jekyll to Hugo. There are usually very few surprises doing this. I know Hugo very well, but working on sites with a history usually comes up with something new. + +That site is bookmarked in many browsers, so preserving the URLs was a must. Hugo's URL handling is very flexible, but there was one challenge. The website has a mix of standard and what we in Hugo call _ugly URLs_ (`https://letsencrypt.org/2017/12/07/looking-forward-to-2018.html`). In Hugo this is handled automatically, and you can turn it on globally or per language. But before Hugo `0.33` you could not configure it for parts of your site. You could set it manually for the relevant pages in front matter -- which is how it was done in Jekyll -- but that would be hard to manage, especially when you start to introduce translations. So, in Hugo 0.33 I added support for _ugly URLs_ per section and also `url` set in front matter for list pages (`https://letsencrypt.org/blog/`). + +The lessons learned from this also lead to [disableLanguages](/content-management/multilingual/#disable-a-language) in Hugo `0.34` (a way to turn off languages during translation). And I also registered [this issue](https://github.com/gohugoio/hugo/issues/4463). Once fixed it will make it easier to handle partially translated sites. + +[^1]: The work on getting the content translated is in progress. diff --git a/docs/content/en/showcase/linode/bio.md b/docs/content/en/showcase/linode/bio.md new file mode 100644 index 000000000..42fa92229 --- /dev/null +++ b/docs/content/en/showcase/linode/bio.md @@ -0,0 +1,4 @@ + +**Linode** is a cloud hosting provider that offers high performance SSD Linux servers for your infrastructure needs. + +**Hugo** offers the documentation team incredible performance as we scale and continue providing quality Linux tutorials. diff --git a/docs/content/en/showcase/linode/featured.png b/docs/content/en/showcase/linode/featured.png Binary files differnew file mode 100644 index 000000000..8e517eacb --- /dev/null +++ b/docs/content/en/showcase/linode/featured.png diff --git a/docs/content/en/showcase/linode/index.md b/docs/content/en/showcase/linode/index.md new file mode 100644 index 000000000..5a341be8a --- /dev/null +++ b/docs/content/en/showcase/linode/index.md @@ -0,0 +1,15 @@ +--- +title: Linode Docs +date: 2018-02-12 +description: "Showcase: \"Hugo allows us to build thousands of pages in seconds.\"" +siteURL: https://linode.com/docs/ +siteSource: https://github.com/linode/docs +--- + +The documentation team at Linode has been writing guides since 2009, with the goal of helping new and experienced Linux users find the best tools and get the most out of their systems. + +As our library grew into thousands of guides, we needed a fast static site generator with intuitive templating and the flexibility to extend Markdown without constantly writing HTML and CSS. + +Hugo solved a lot of our growing pains with features like shortcodes, customizable URLs, LiveReload, and more. We have already brought our site build time down from minutes to just a few seconds, and we are excited to see what future developments in Hugo will bring. + +Thank you to all the [Hugo contributors](https://github.com/gohugoio/hugo/graphs/contributors) and especially [@bep](https://github.com/bep) for helping us with the adoption of Hugo. diff --git a/docs/content/en/showcase/overmindstudios/bio.md b/docs/content/en/showcase/overmindstudios/bio.md new file mode 100644 index 000000000..1bd870984 --- /dev/null +++ b/docs/content/en/showcase/overmindstudios/bio.md @@ -0,0 +1,7 @@ + +**Overmind Studios** is a visual effects studio headquartered in Southern Germany. + +The site is built by: + +* [Tobias Kummer](https://www.overmind-studios.de/about/) + diff --git a/docs/content/en/showcase/overmindstudios/featured.png b/docs/content/en/showcase/overmindstudios/featured.png Binary files differnew file mode 100644 index 000000000..c3eaaaf4c --- /dev/null +++ b/docs/content/en/showcase/overmindstudios/featured.png diff --git a/docs/content/en/showcase/overmindstudios/index.md b/docs/content/en/showcase/overmindstudios/index.md new file mode 100644 index 000000000..3208b2b72 --- /dev/null +++ b/docs/content/en/showcase/overmindstudios/index.md @@ -0,0 +1,13 @@ +--- +title: Overmind Studios +description: "A fresh start to make things easier in the future." +siteURL: https://www.overmind-studios.de/ +byline: "[tobkum](https://github.com/tobkum), Co-Founder Overmind Studios" +--- +After many years of running our site on WordPress, we decided to switch to Hugo. + +WordPress is a great CMS for many people, but it has some downsides, especially for those who need a fast, secure, and customizable site. Plugins can become outdated, customization can be difficult, and bloat can slow down page loading times. + +Hugo is a static site generator that addresses many of these problems. It is fast to build and iterate, does not require PHP, is highly customizable, and is easy to learn and use. It is also secure, as it does not have a backend or MySQL database that can be hacked. + +We are very happy with our switch to Hugo. It is easy to update our site with new projects, and our Lighthouse score and loading times are both excellent. We now have more time to be creative instead of troubleshooting WordPress quirks and updates. diff --git a/docs/content/en/showcase/pharmaseal/bio.md b/docs/content/en/showcase/pharmaseal/bio.md new file mode 100644 index 000000000..7477f1c32 --- /dev/null +++ b/docs/content/en/showcase/pharmaseal/bio.md @@ -0,0 +1,7 @@ +PHARMASEAL began in 2016 with the purpose of disrupting the Clinical Trials Management market through continuous validation and integration + +We've been using **Hugo + Webpack + Netlify** to provide a scalable, modular design for the website, complete with Forestry building blocks to quickly be able to generate engagement pages. + +The site is built by: + +- [Roboto Studio](https://roboto.studio) diff --git a/docs/content/en/showcase/pharmaseal/featured-pharmaseal.png b/docs/content/en/showcase/pharmaseal/featured-pharmaseal.png Binary files differnew file mode 100644 index 000000000..4a64325b7 --- /dev/null +++ b/docs/content/en/showcase/pharmaseal/featured-pharmaseal.png diff --git a/docs/content/en/showcase/pharmaseal/index.md b/docs/content/en/showcase/pharmaseal/index.md new file mode 100644 index 000000000..d324833c9 --- /dev/null +++ b/docs/content/en/showcase/pharmaseal/index.md @@ -0,0 +1,35 @@ +--- + +title: PHARMASEAL +date: 2019-04-29 + +description: "Pharmaseal website developed using Hugo, Forestry, hosted and deployed by Netlify." + +# The URL to the site on the internet. +siteURL: https://pharmaseal.co/ + +# Link to the site's Hugo source code if public and you can/want to share. +# Remove or leave blank if not needed/wanted. + +# Add credit to the article author. Leave blank or remove if not needed/wanted. +byline: "[Roboto Studio](https://roboto.studio), Jonathan Alford" + +--- + +We wanted to shake the status quo with PHARMASEAL, opting for a fast and scalable website built with Hugo instead of slower monolithic systems the competitors were using. + +We had two goals: + +**Make it fast** + +We wanted to optimize the site as much as possible, so we opted for using Cloudinary, enabling us to take advantage of on-the-fly image manipulation, and thanks to the sheer speed of static sites, we achieved a perfect optimization score with Google audits. + +Because we're hosting the site through Netlify and our target audience is in America, we are taking advantage of Netlify edge (Their alternative to a CDN). We're talking blazing fast. + +**Make it easy** + +We're big fans of simplicity, and that's what we delivered with the Forestry building blocks. Every element on the site is built with building blocks in mind, allowing PHARMASEAL to generate multiple pages in the blink of an eye. + +PHARMASEAL have found Forestry CMS combined with HUGO to be so effective at producing fast, purpose driven pages, that we have worked with them to add even more blocks in a scalable, modular fashion. + +**TLDR:** We're blown away with HUGO, the sheer speed, scalability and deployment possibilities with Netlify is the 💣 diff --git a/docs/content/en/showcase/quiply-employee-communications-app/bio.md b/docs/content/en/showcase/quiply-employee-communications-app/bio.md new file mode 100644 index 000000000..f79677a1a --- /dev/null +++ b/docs/content/en/showcase/quiply-employee-communications-app/bio.md @@ -0,0 +1,4 @@ +**Quiply** is an employee communications app enabling mobile collaboration across an entire organization. +Our customers get their own branded app enabling them to communicate fast and effectively with all employees, also non-desk and shift workers. + +As the Quiply app's build process is based on **Gulp**, we have started to build our company and product website using **Gulp + Hugo** which is super-fast and gives us exactly the flexibility we need. diff --git a/docs/content/en/showcase/quiply-employee-communications-app/featured.png b/docs/content/en/showcase/quiply-employee-communications-app/featured.png Binary files differnew file mode 100644 index 000000000..a4e9f046e --- /dev/null +++ b/docs/content/en/showcase/quiply-employee-communications-app/featured.png diff --git a/docs/content/en/showcase/quiply-employee-communications-app/index.md b/docs/content/en/showcase/quiply-employee-communications-app/index.md new file mode 100644 index 000000000..a8c31cc33 --- /dev/null +++ b/docs/content/en/showcase/quiply-employee-communications-app/index.md @@ -0,0 +1,29 @@ +--- + +# A suitable title for this article. +title: Quiply Employee Communications App + +# Set this to the current date. +date: 2018-02-13 + +description: "\"It became immediately clear that we'd use Hugo going forward as it compiles super-fast, is intuitive to use and offers all the features we need.\"" + +# The URL to the site on the internet. +siteURL: https://www.quiply.com + +# Link to the site's Hugo source code if public and you can/want to share. +# Remove or leave blank if not needed/wanted. +# siteSource: https://github.com/gohugoio/hugoDocs + +# Add credit to the article author. Leave blank or remove if not needed/wanted. +byline: "[Sebastian Schirmer](mailto:[email protected]), Quiply Co-Founder" + +--- + +With the launch of our Employee Communications app Quiply we created a very simple and static one-page website to showcase our product. + +As our customer base and demand for marketing and communication started to grow, we needed a solution to easily grow and extend the contents of our web presence. As we do not have the need to serve dynamic content, we decided to use a static site generator. Amongst a couple of others, we tried Hugo and it became immediately clear that we'd use Hugo going forward as it compiles super-fast, is intuitive to use and offers all the features we need. + +Our website which we launched a couple of weeks ago is still growing and new content is being added constantly. By using Hugo, this can be easily done by content authors writing markdown files without always having to touch HTML or CSS code. It is available in German only for the time being, an English version is in the works. + +Huge thanks to everyone involved in making Hugo a success. diff --git a/docs/content/en/showcase/template/bio.md b/docs/content/en/showcase/template/bio.md new file mode 100644 index 000000000..de9287898 --- /dev/null +++ b/docs/content/en/showcase/template/bio.md @@ -0,0 +1,7 @@ + +Add some **general info** about the site here. + +The site is built by: + +* [Person 1](https://example.org) +* [Person 1](https://example.org) diff --git a/docs/content/en/showcase/template/featured-template.png b/docs/content/en/showcase/template/featured-template.png Binary files differnew file mode 100644 index 000000000..4f390132e --- /dev/null +++ b/docs/content/en/showcase/template/featured-template.png diff --git a/docs/content/en/showcase/template/index.md b/docs/content/en/showcase/template/index.md new file mode 100644 index 000000000..4dc662332 --- /dev/null +++ b/docs/content/en/showcase/template/index.md @@ -0,0 +1,18 @@ +--- +title: Hugo Showcase Template +date: 2018-02-07 +description: "A short description of this page." +siteURL: https://gohugo.io/ +siteSource: https://github.com/gohugoio/hugoDocs +byline: "[bep](https://github.com/bep), Hugo Lead" +--- +Have a **notable Hugo site[^1]**? We would love to feature it in this **Showcase Section** + +Please: + +1. Fork https://github.com/gohugoio/hugoDocs. +2. Run `hugo new content showcase/your-site`. This will use the archetype bundle in the [docs repo](https://github.com/gohugoio/hugoDocs/tree/master/archetypes). +3. Follow the instructions in the newly created page bundle. +4. Create a new pull request in https://github.com/gohugoio/hugoDocs/pulls. + +[^1]: We want this to show Hugo in its best light, so this is not for the average Hugo blog. In most cases the answer to "Is my site [notable](https://www.dictionary.com/browse/notable)?" will be obvious, but if in doubt, create an [issue](https://github.com/gohugoio/hugoDocs/issues) with a link and some words, and we can discuss it. But if you have a site with an interesting Hugo story or a company site where the company itself is notable, you are most welcome. diff --git a/docs/content/en/showcase/tomango/bio.md b/docs/content/en/showcase/tomango/bio.md new file mode 100644 index 000000000..052bd93cd --- /dev/null +++ b/docs/content/en/showcase/tomango/bio.md @@ -0,0 +1,6 @@ + +We help ambitious businesses grow by getting more of the customers they want. + +Our new site runs quickly, anywhere in the world, regardless of internet connectivity. + +The site was built by [Tomango](https://www.tomango.co.uk) diff --git a/docs/content/en/showcase/tomango/featured.png b/docs/content/en/showcase/tomango/featured.png Binary files differnew file mode 100644 index 000000000..d4b037e0f --- /dev/null +++ b/docs/content/en/showcase/tomango/featured.png diff --git a/docs/content/en/showcase/tomango/index.md b/docs/content/en/showcase/tomango/index.md new file mode 100644 index 000000000..6dc1a5c1f --- /dev/null +++ b/docs/content/en/showcase/tomango/index.md @@ -0,0 +1,29 @@ +--- + +title: Tomango + +date: 2018-05-04 + +description: "Showcase: \"Tomango site relaunch: Building our JAMstack site\"" + +siteURL: https://www.tomango.co.uk + +siteSource: https://github.com/trys/tomango-2018 + +byline: "[Trys Mudford](https://www.trysmudford.com), Lead Developer, Tomango" + +--- + +Hugo is our static site generator (SSG) of choice. It's **really quick**. After using it on a number of [client projects](/showcase/hartwell-insurance/), it became clear that our new site _had_ to be built with Hugo. + +The big benefit of an SSG is how it moves all the heavy lifting to the build time. + +For example in WordPress, all the category pages are created at runtime, generating a lot of database queries. In Hugo, the paginated category pages are created at build time - so all the computational complexity is done once, and doesn't impact the user at all. + +Similarly, instead of running a live, or even a heavily cached Instagram feed that checked for new photos on page load, we used IFTTT to flip the feature to work performantly. I've [written about it](https://www.trysmudford.com/blog/making-the-static-dynamic-instagram-importer/) in detail on my blog but in essence: IFTTT sends a webhook to a Netlify Cloud Function every time a photo is uploaded. The function scrapes the photo and commits it to our GitHub repo which triggers a Hugo build on Netlify, deploying the site immediately! + +Shortcodes allow copy editors to continue using WordPress-esque features, Markdown keeps our developers happy, and our users don't have any of the database overheads. It's win-win! + +--- + +This is an extract from our [technical launch post](https://www.tomango.co.uk/thinks/tomango-progressive-web-app/). diff --git a/docs/content/en/templates/404.md b/docs/content/en/templates/404.md new file mode 100644 index 000000000..7fd27a358 --- /dev/null +++ b/docs/content/en/templates/404.md @@ -0,0 +1,55 @@ +--- +title: Custom 404 page +linkTitle: 404 page +description: If you know how to create a single page template, you have unlimited options for creating a custom 404. +categories: [templates] +keywords: ['404',page not found] +menu: + docs: + parent: templates + weight: 220 +weight: 220 +--- + +When using Hugo with [GitHub Pages](https://pages.github.com/), you can provide your own template for a [custom 404 error page](https://docs.github.com/en/pages/getting-started-with-github-pages/creating-a-custom-404-page-for-your-github-pages-site) by creating a 404.html template file in the root of your `layouts` folder. When Hugo generates your site, the `404.html` file will be placed in the root. + +404 pages will have all the regular [page variables][pagevars] available to use in the templates. + +In addition to the standard page variables, the 404 page has access to all site content accessible from `.Pages`. + +```txt +▾ layouts/ + 404.html +``` + +## 404.html + +This is a basic example of a 404.html template: + +{{< code file=layouts/404.html >}} +{{ define "main" }} + <main id="main"> + <div> + <h1 id="title"><a href="{{ "" | relURL }}">Go Home</a></h1> + </div> + </main> +{{ end }} +{{< /code >}} + +## Automatic loading + +Your 404.html file can be set to load automatically when a visitor enters a mistaken URL path, dependent upon the web serving environment you are using. For example: + +* [GitHub Pages](/hosting-and-deployment/hosting-on-github/), [GitLab Pages](/hosting-and-deployment/hosting-on-gitlab/) and [Cloudflare Pages](/hosting-and-deployment/hosting-on-cloudflare-pages/). The 404 page is automatic. +* Apache. You can specify `ErrorDocument 404 /404.html` in an `.htaccess` file in the root of your site. +* Nginx. You might specify `error_page 404 /404.html;` in your `nginx.conf` file. [Details here](https://nginx.org/en/docs/http/ngx_http_core_module.html#error_page). +* Amazon AWS S3. When setting a bucket up for static web serving, you can specify the error file from within the S3 GUI. +* Amazon CloudFront. You can specify the page in the Error Pages section in the CloudFront Console. [Details here](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/custom-error-pages.html) +* Caddy Server. Use the `handle_errors` directive to specify error pages for one or more status codes. [Details here](https://caddyserver.com/docs/caddyfile/directives/handle_errors) +* Netlify. Add `/* /404.html 404` to `content/_redirects`. [Details Here](https://www.netlify.com/docs/redirects/#custom-404) +* Azure Static Web App. set `responseOverrides.404.rewrite` and `responseOverrides.404.statusCode` in configfile `staticwebapp.config.json`. [Details here](https://docs.microsoft.com/en-us/azure/static-web-apps/configuration#response-overrides) +* Azure Storage as Static Web Site Hosting. You can specify the `Error document path` in the Static website configuration page of the Azure portal. [Details here](https://docs.microsoft.com/en-us/azure/storage/blobs/storage-blob-static-website). +* DigitalOcean App Platform. You can specify `error_document` in your app specification file or use control panel to set up error document. [Details here](https://docs.digitalocean.com/products/app-platform/how-to/manage-static-sites/#configure-a-static-site). +* [Firebase Hosting](https://firebase.google.com/docs/hosting/full-config#404): `/404.html` automatically gets used as the 404 page. + +[pagevars]: /variables/page/ diff --git a/docs/content/en/templates/_index.md b/docs/content/en/templates/_index.md new file mode 100644 index 000000000..b2197d162 --- /dev/null +++ b/docs/content/en/templates/_index.md @@ -0,0 +1,16 @@ +--- +title: Templates +linkTitle: Overview +description: Go templating, template types and lookup order, shortcodes, and data. +categories: [] +keywords: [] +menu: + docs: + identifier: templates-overview + parent: templates + weight: 10 +weight: 10 +aliases: [/templates/overview/,/templates/content] +--- + +A template is an HTML file with [template actions](/getting-started/glossary/#template-action), located within the layouts directory of a project, theme, or module. Visit the topics below, in the order presented, to understand template selection and creation. diff --git a/docs/content/en/templates/base.md b/docs/content/en/templates/base.md new file mode 100644 index 000000000..63bf2f9b2 --- /dev/null +++ b/docs/content/en/templates/base.md @@ -0,0 +1,97 @@ +--- +title: Base templates and blocks +description: The base and block constructs allow you to define the outer shell of your master templates (i.e., the chrome of the page). +categories: [templates,fundamentals] +keywords: [blocks,base] +menu: + docs: + parent: templates + weight: 40 +weight: 40 +toc: true +aliases: [/templates/blocks/,/templates/base-templates-and-blocks/] +--- + +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 base template lookup order closely follows that of the template it applies to (e.g. `_default/list.html`). + +See [Template Lookup Order](/templates/lookup-order/) for details and examples. + +## 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 >}} +<!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 >}} +{{ 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. + +{{% note %}} +Code that you put outside the block definitions *can* break your layout. This even includes HTML comments. For example: + +```go-html-template +<!-- 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) +{{% /note %}} + +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 >}} +{{ define "title" }} + <!-- This will override the default value set in baseof.html; i.e., "{{ .Site.Title }}" in the original example--> + {{ .Title }} – {{ .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 --git a/docs/content/en/templates/data-templates.md b/docs/content/en/templates/data-templates.md new file mode 100644 index 000000000..b862f727e --- /dev/null +++ b/docs/content/en/templates/data-templates.md @@ -0,0 +1,177 @@ +--- +title: Data templates +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. +categories: [templates] +keywords: [data,dynamic,csv,json,toml,yaml,xml] +menu: + docs: + parent: templates + weight: 150 +weight: 150 +toc: true +aliases: [/extras/datafiles/,/extras/datadrivencontent/,/doc/datafiles/] +--- + +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 directory + +The `data` directory 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. + +To access the data using the `site.Data.filename` notation, the file name 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 + +To access the data using the [`index`](/functions/collections/indexfunction) function, the file name 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 + +Data Files can also be used in 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*). + +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. + +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: + +## Examples + +### 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=data/jazz/bass/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 file name 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. + +### Accessing named values in a data file + +Assume you have the following data structure in your `user0123` data file located directly in `data/`: + +{{< code-toggle file=data/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`] function. This will send the description through the Markdown rendering engine. + +## Remote data + +Retrieve remote data using these template functions: + +- [`resources.GetRemote`](/functions/resources/getremote) (recommended) +- [`data.GetCSV`](/functions/data/getcsv) +- [`data.GetJSON`](/functions/data/getjson) + +## 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. + +{{% note %}} +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. +{{% /note %}} + +## 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]: /hugo-modules/theme-components/ +[json]: https://www.ecma-international.org/publications/files/ECMA-ST/ECMA-404.pdf +[LiveReload]: /getting-started/usage/#livereload +[lookup]: /templates/lookup-order/ +[`markdownify`]: /functions/transform/markdownify +[OAuth]: https://en.wikipedia.org/wiki/OAuth +[partials]: /templates/partials/ +[toml]: https://toml.io/en/latest +[variadic]: https://en.wikipedia.org/wiki/Variadic_function +[vars]: /variables/ +[yaml]: https://yaml.org/spec/ +[xml]: https://www.w3.org/XML/ diff --git a/docs/content/en/templates/files.md b/docs/content/en/templates/files.md new file mode 100644 index 000000000..1847af9bc --- /dev/null +++ b/docs/content/en/templates/files.md @@ -0,0 +1,56 @@ +--- +title: Local file templates +description: Hugo's `readDir` and `readFile` functions make it easy to traverse your project's directory structure and write file contents to your templates. +categories: [templates] +keywords: [files,directories] +menu: + docs: + parent: templates + weight: 180 +weight: 180 +toc: true +aliases: [/extras/localfiles/,/templates/local-files/] +--- + +## Traverse local files + +With Hugo's [`readDir`] and [`readFile`] template functions, you can traverse your website's files on your server. + +## Use `readDir` + +The [`readDir`] function returns an array of [`os.FileInfo`] structures. It takes the file's `path` as a single string argument. This path can be to any directory of your website (i.e., as found on your server's file system). + +Whether the path is absolute or relative does not matter because---at least for `readDir`---the root of your website (typically `./public/`) in effect becomes both: + +1. The file system root +2. The current working directory + +## Use `readFile` + +The [`readfile`] function reads a file from disk and converts it into a string to be manipulated by other Hugo functions or added as-is. `readFile` takes the file, including path, as an argument passed to the function. + +To use the `readFile` function in your templates, make sure the path is relative to your *Hugo project's root directory*: + +```go-html-template +{{ readFile "/content/templates/local-file-templates" }} +``` + +### `readFile` Example: Add a Project File to Content + +As `readFile` is a function, it is only available to you in your templates and not your content. However, we can create a simple [shortcode template][sct] that calls `readFile`, passes the first argument through the function, and then allows an optional second argument to send the file through the Markdown processor. The pattern for adding this shortcode to your content will be as follows: + +```go-html-template +{{</* readfile file="/path/to/local/file.txt" markdown="true" */>}} +``` + +{{% note %}} +If you are going to create [custom shortcodes](/templates/shortcode-templates/) with `readFile` for a theme, note that usage of the shortcode will refer to the project root and *not* your `themes` directory. +{{% /note %}} + +[called directly in the Hugo docs]: https://github.com/gohugoio/hugoDocs/blob/master/content/en/templates/files.md +[`os.FileInfo`]: https://pkg.go.dev/io/fs#FileInfo +[`readDir`]: /functions/os/readdir +[`readFile`]: /functions/os/readfile +[sc]: /content-management/shortcodes/ +[sct]: /templates/shortcode-templates/ +[readfilesource]: https://github.com/gohugoio/hugoDocs/blob/master/layouts/shortcodes/readfile.html diff --git a/docs/content/en/templates/homepage.md b/docs/content/en/templates/homepage.md new file mode 100644 index 000000000..59b7472fb --- /dev/null +++ b/docs/content/en/templates/homepage.md @@ -0,0 +1,65 @@ +--- +title: 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. +categories: [templates] +keywords: [homepage] +menu: + docs: + parent: templates + weight: 70 +weight: 70 +toc: true +aliases: [/layout/homepage/,/templates/homepage-template/] +--- + +Homepage is a `Page` and therefore has all the [page variables][pagevars] and [site variables][sitevars] available for use. + +{{% note %}} +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 >}} +{{ 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/ diff --git a/docs/content/en/templates/internal.md b/docs/content/en/templates/internal.md new file mode 100644 index 000000000..9438bfa6f --- /dev/null +++ b/docs/content/en/templates/internal.md @@ -0,0 +1,221 @@ +--- +title: Internal templates +description: Hugo ships with a group of boilerplate templates that cover the most common use cases for static websites. +categories: [templates] +keywords: [internal, analytics,] +menu: + docs: + parent: templates + weight: 190 +weight: 190 +toc: true +--- + +{{% note %}} +While the following internal templates are called similar to partials, they do *not* observe the partial template lookup order. +{{% /note %}} + +## Google Analytics + +Hugo ships with an internal template supporting [Google Analytics 4]. + +[Google Analytics 4]: https://support.google.com/analytics/answer/10089681 + +### Configure Google Analytics + +Provide your tracking ID in your configuration file: + +**Google Analytics 4 (gtag.js)** +{{< code-toggle file=hugo >}} +[services.googleAnalytics] +ID = "G-MEASUREMENT_ID" +{{</ code-toggle >}} + +### Use the Google Analytics template + +Include the Google Analytics internal template in your templates where you want the code to appear: + +```go-html-template +{{ template "_internal/google_analytics.html" . }} +``` + +To create your own template, 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. To effectively use Disqus, secure a Disqus "shortname" by [signing up for the free service][disqussignup]. + +### Configure Disqus + +To use Hugo's Disqus template, first set up a single configuration value: + +{{< code-toggle file="hugo" >}} +[services.disqus] +shortname = 'your-disqus-shortname' +{{</ code-toggle >}} + +Hugo's Disqus template accesses this value with: + +```go-html-template +{{ .Site.Config.Services.Disqus.Shortname }} +``` + +You can also 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 the templates where you want your comments to appear: + +```go-html-template +{{ template "_internal/disqus.html" . }} +``` + +### 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 >}} +<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.Config.Services.Disqus.Shortname }}'; + 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=hugo >}} +[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.md >}} +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 file names 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/twitter-for-websites/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=hugo >}} +[params] + images = ["site-feature-image.jpg"] + description = "Text about my cool site" +{{</ code-toggle >}} + +{{< code-toggle file=content/blog/my-post.md >}} +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. + +Set the value of `twitter:site` in your site configuration: + +{{< code-toggle file="hugo" copy=false >}} +[params.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/opengraph.html` +* `_internal/pagination.html` +* `_internal/schema.html` +* `_internal/twitter_cards.html` + +[disqus]: https://disqus.com +[disqussignup]: https://disqus.com/profile/signup/ diff --git a/docs/content/en/templates/introduction.md b/docs/content/en/templates/introduction.md new file mode 100644 index 000000000..7fb0ddecf --- /dev/null +++ b/docs/content/en/templates/introduction.md @@ -0,0 +1,672 @@ +--- +title: Templating +linkTitle: Templating +description: Hugo uses Go's `html/template` and `text/template` libraries as the basis for the templating. +categories: [templates,fundamentals] +keywords: [go] +menu: + docs: + parent: templates + weight: 20 +weight: 20 +toc: true +aliases: [/layouts/introduction/,/layout/introduction/, /templates/go-templates/] +--- + +{{% 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](#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 + +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 + +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 }} +``` + +Variable names must conform to Go's naming rules for [identifiers][identifier]. + +## 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 %}} +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`] + `.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, 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 parameters 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 >}} + +{{% note %}} +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. +{{% /note %}} + +## 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_: + +* space +* horizontal tab +* carriage return +* 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 + +You can add html comments by piping a string HTML code comment to `safeHTML`. + +For example: + +```go-html-template +{{ "<!-- This is an HTML comment -->" | safeHTML }} +``` + +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 + +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](/content-management/front-matter#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: + +{{< code-toggle file=content/example.md fm=true >}} +title: Example +notoc: true +{{< /code-toggle >}} + +Here is an example of corresponding code that could be used inside a `toc.html` [partial template][partials]: + +{{< code file=layouts/partials/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=hugo >}} +params: + copyrighthtml: "Copyright © 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 so that the HTML entity is not escaped again. This would let you easily update just your top-level configuration 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`] 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`] 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 }}">{{ .LinkTitle }}</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 >}} +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 >}} + +[`first`]: /functions/collections/first +[`index`]: /functions/collections/indexfunction +[`isset`]: /functions/collections/isset +[config]: /getting-started/configuration +[dotdoc]: https://golang.org/pkg/text/template/#hdr-Variables +[front matter]: /content-management/front-matter +[functions]: /functions +[identifier]: /getting-started/glossary/#identifier +[internal templates]: /templates/internal +[math]: /functions/math +[pagevars]: /variables/page +[param]: /methods/page/param +[partials]: /templates/partials +[relpermalink]: /variables/page +[`safehtml`]: /functions/safe/html +[sitevars]: /variables/site +[variables]: /variables +[`with`]: /functions/go-template/with diff --git a/docs/content/en/templates/lists/index.md b/docs/content/en/templates/lists/index.md new file mode 100644 index 000000000..c26174974 --- /dev/null +++ b/docs/content/en/templates/lists/index.md @@ -0,0 +1,252 @@ +--- +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. +categories: [templates] +keywords: [lists,sections,rss,taxonomies,terms] +menu: + docs: + parent: templates + weight: 60 +weight: 60 +toc: true +aliases: [/templates/list/,/layout/indexes/] +--- + +## 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: + +* [Home page](/templates/homepage) +* [Section pages](/templates/section-templates) +* [Taxonomy pages](/templates/taxonomy-templates) +* [Taxonomy term pages](/templates/taxonomy-templates) +* [RSS feeds](/templates/rss) +* [Sitemaps](/templates/sitemap-template) + +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.](site-hierarchy.svg)](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 >}} +{{ 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="{{ .RelPermalink }}">{{ .Date.Format "2006-01-02" }} | {{ .LinkTitle }}</a> + </li> + {{ end }} + </ul> + </main> +{{ end }} +{{< /code >}} + +This above will output the following HTML: + +{{< code file=example.com/posts/index.html >}} +<!--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 >}} +<!--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.org/quote/quotes-01/">Quote 1</a></li> + <li><a href="https://example.org/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 >}} +{{ 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 >}} + +## Sort content + +By default, Hugo sorts page collections by: + +1. Page [weight] +2. Page [date] (descending) +3. Page [linkTitle], falling back to page [title] +4. Page file path if the page is backed by a file + +[date]: /methods/page/date +[weight]: /methods/page/weight +[linkTitle]: /methods/page/linktitle +[title]: /methods/page/title + +Change the sort order using any of the methods below. + +{{< list-pages-in-section path=/methods/pages filter=methods_pages_sort filterType=include titlePrefix=. omitElementIDs=true >}} + +## Group content + +Group your content by field, parameter, or date using any of the methods below. + +{{< list-pages-in-section path=/methods/pages filter=methods_pages_group filterType=include titlePrefix=. omitElementIDs=true >}} + +## 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] +on the blog's homepage. + +See the documentation on [`where`] and +[`first`] for further details. + +[base]: /templates/base/ +[bepsays]: https://bepsays.com/en/2016/12/19/hugo-018/ +[directorystructure]: /getting-started/directory-structure/ +[`Format` function]: /methods/time/format/ +[front matter]: /content-management/front-matter/ +[getpage]: /methods/page/getpage/ +[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]: /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/ +[`where`]: /functions/collections/where +[`first`]: /functions/collections/first/ +[main sections]: /methods/site/mainsections +[`time.Format`]: /functions/time/format diff --git a/docs/content/en/templates/lists/site-hierarchy.svg b/docs/content/en/templates/lists/site-hierarchy.svg new file mode 100644 index 000000000..3c744871b --- /dev/null +++ b/docs/content/en/templates/lists/site-hierarchy.svg @@ -0,0 +1 @@ +<svg height="446" viewBox="0 0 1730 446" width="1730" xmlns="http://www.w3.org/2000/svg"><g fill="none" fill-rule="evenodd" transform="translate(.538462 .461538)"><g transform="translate(2.996935 .388277)"><path d="m64.0494614 5.00059856 58.8489506 34.18916364v67.3333318l-58.8489506 33.404195-58.75248965-33.404195v-67.3333318z" fill="#ff4088"/><path d="m126.283637 35.8185172 1.230228 2.1375217v69.8133611l-1.253295 2.152899-60.9934622 34.621142h-2.4387878l-60.89490434-34.623239-1.25189712-2.1522v-69.8112641l1.22883034-2.1368227 60.89280732-35.43476985h2.4891154zm-116.37121203 6.0253228v61.994421l54.13913343 30.780872 54.2320996-30.782969v-61.990227l-54.2320996-31.5064271z" fill="#c9177e"/></g><path d="m60.4490685 78.3838073h-16.0432056v-32.93617h-27.9340521v32.93617h-16.04320555v-77.90259702h16.04320555v32.56189542h27.9340521v-32.56189542h16.0432056z" fill="#fff" fill-rule="nonzero" transform="translate(35.169824 33.865851)"/><g transform="translate(329.992265 24.431705)"><path d="m.21765.21067h263.332986v115.673517h-263.332986z" fill="#0083c0"/><path d="m263.550636 115.884187h-263.33298624v-115.6735171h263.33298624zm-260.79463916-113.13482905v110.59614105h258.25629216v-110.59614105z" fill="#000"/></g><g fill="#f2f2f2" fill-rule="nonzero" transform="translate(352.419436 42.870159)"><path d="m22.7288949.05688029h3.6312065v31.52968501h-3.6312065v-14.4804699h-18.90904412v14.4804699h-3.58685032v-31.52968501h3.58685032v13.99359541h18.90904412z"/><path d="m37.3865286 30.4794869c-1.5939528-.9445259-2.826533-2.2879966-3.6974799-4.0296294-.8709468-1.7418937-1.3064203-3.7788866-1.3064203-6.1112394 0-2.332092.4354735-4.3693457 1.3064203-6.1109785.8709469-1.7418937 2.1035271-3.0851036 3.6974799-4.0298904 1.5942137-.94478689 3.4394312-1.41704986 5.5356526-1.41704986 2.0959605 0 3.941178.47226297 5.5353917 1.41704986 1.5942137.9447868 2.826533 2.2879967 3.6974799 4.0298904.8709468 1.7416328 1.3064203 3.7788865 1.3064203 6.1109785 0 2.3323528-.4354735 4.3693457-1.3064203 6.1112394-.8709469 1.7416328-2.1032662 3.0851035-3.6974799 4.0296294-1.5942137.9447869-3.4394312 1.4170499-5.5353917 1.4170499-2.0962214 0-3.9414389-.472263-5.5356526-1.4170499zm10.6280042-3.741836c1.1809184-1.461406 1.7713776-3.594417 1.7713776-6.3990328 0-2.7159035-.6050707-4.8194306-1.8154728-6.3103205-1.2104022-1.4908898-2.8933283-2.2363347-5.0482564-2.2363347-2.1846728 0-3.8822104.7454449-5.0926125 2.2363347-1.2104022 1.4908899-1.8157337 3.594417-1.8157337 6.3103205 0 2.8046158.5977649 4.9376268 1.7935556 6.3990328 1.1955298 1.461406 2.9006339 2.1919786 5.1147906 2.1919786s3.9116942-.7305726 5.0923516-2.1919786z"/><path d="m91.1464927 17.5929699v13.9935954h-3.5868503v-13.8164316c0-2.0959605-.3616334-3.6163341-1.0849002-4.561121-.7232669-.9447869-1.8968795-1.4170498-3.520577-1.4170498-1.8893128 0-3.3655912.6348153-4.4283133 1.9041851-1.0627222 1.2693698-1.5942137 2.9966521-1.5942137 5.181064v12.7093533h-3.5868503v-13.8164316c0-2.0664767-.3692001-3.5795446-1.1070784-4.5389429-.7381392-.9593983-1.9190575-1.4392279-3.542755-1.4392279-1.8893128 0-3.3728969.6348153-4.4504915 1.9041851-1.0775945 1.2693698-1.6163917 2.9966521-1.6163917 5.181064v12.7093533h-3.5868504v-16.0305883c0-2.3026081-.1181962-4.3839571-.3543276-6.24378613h3.4099473l.3540668 3.89682183c.619943-1.4170498 1.5425518-2.5092558 2.7678263-3.27687883 1.2252746-.76762302 2.6496301-1.15143453 4.2733276-1.15143453 1.7713775 0 3.2179112.35432769 4.3398619 1.06272215 1.1216898.70865541 1.9482805 1.80086131 2.479772 3.27713971.6789106-1.3285983 1.6753594-2.3840148 2.9890854-3.16624924 1.313726-.78249538 2.7973101-1.17361262 4.4504915-1.17361262 4.930321 0 7.3952206 2.93742346 7.3952206 8.81227056z"/><path d="m116.609555 20.3386181h-16.340559c.029483 2.8340996.686477 4.9744163 1.970458 6.4212109 1.284242 1.4465336 3.151638 2.1698005 5.601926 2.1698005 2.597968 0 4.989289-.8709469 7.173962-2.6128406l1.19553 2.6128406c-.974271.915303-2.221463 1.6385698-3.741837 2.1698004-1.520373.5314916-3.077797.7971069-4.672011.7971069-3.483526 0-6.214302-1.0259326-8.1923275-3.0775369-1.9780252-2.0518652-2.9669073-4.8637868-2.9669073-8.4360256 0-2.2731244.4427791-4.2882 1.3283374-6.0447052.8858192-1.7565051 2.1257054-3.121893 3.7199194-4.0961637 1.594213-.97427072 3.409686-1.46140606 5.44694-1.46140606 2.952035 0 5.269515.96696496 6.952441 2.90063396 1.682665 1.933669 2.524128 4.5979105 2.524128 7.9929856zm-13.971417-7.0852492c-1.166046 1.1216898-1.911491 2.701292-2.236335 4.7382848h12.974969c-.177164-2.0959604-.789801-3.6901741-1.837651-4.782641-1.048111-1.092206-2.50195-1.6385699-4.36204-1.6385699-1.859829 0-3.372897.5609754-4.538943 1.6829261z"/><path d="m138.352699 10.2421054c1.505502.9742707 2.671548 2.3396586 3.498399 4.0961637.826591 1.7565052 1.239886 3.7861923 1.239886 6.0890613 0 2.3026082-.413295 4.3174229-1.239886 6.0444443-.826851 1.7272822-1.985592 3.0631863-3.476221 4.0077122-1.49089.9447869-3.225478 1.4170499-5.203503 1.4170499-1.741632 0-3.262006-.3838115-4.561121-1.1511736-1.298853-.767623-2.287996-1.8600899-2.966907-3.2771398v13.683624h-3.587111v-25.5958704c0-2.3026081-.117936-4.3839571-.354067-6.24378613h3.409686l.354328 4.29550573c.619943-1.5352461 1.60152-2.7234701 2.944729-3.5649332 1.343471-.841463 2.930118-1.26206406 4.760463-1.26206406 1.948542 0 3.675563.48713534 5.181325 1.46140606zm-.774929 16.4733674c1.19553-1.4760175 1.793295-3.5722389 1.793295-6.2881424 0-2.7161643-.60507-4.8343029-1.815473-6.3546766-1.210402-1.5203736-2.893328-2.2806909-5.048256-2.2806909-2.214418 0-3.911694.7381392-5.092613 2.2141566-1.180918 1.4760175-1.771377 3.5868504-1.771377 6.3324986s.590459 4.8637867 1.771377 6.3546766c1.180919 1.4908898 2.878195 2.2363348 5.092613 2.2363348 2.184412 0 3.874644-.7381392 5.070434-2.2141567z"/><path d="m168.243032 9.31219087v22.27437443h-3.540668v-4.0296295c-.649688 1.387566-1.633352 2.4575939-2.945773 3.2103445-1.313987.7530116-2.841666 1.1292565-4.58356 1.1292565-1.978025 0-3.712352-.472263-5.203242-1.4170499-1.49089-.9445259-2.642325-2.28043-3.454043-4.0077122-.811979-1.7270214-1.217969-3.7418361-1.217969-6.0444443 0-2.302869.413296-4.3325561 1.239886-6.0890613.826852-1.7565051 1.985592-3.121893 3.476221-4.0961637 1.49089-.97427072 3.210606-1.46140606 5.159147-1.46140606 1.741894 0 3.262267.38381151 4.560077 1.15143453 1.299376.76762303 2.288258 1.84521753 2.969256 3.23252263v-3.85246563zm-5.312307 17.38110383c1.179353-1.4908899 1.771639-3.6090284 1.771639-6.3546766s-.592286-4.8564811-1.771639-6.3324986c-1.181962-1.4760174-2.864627-2.2141566-5.0493-2.2141566-2.184412 0-3.889516.7603173-5.114529 2.2806909-1.225275 1.5203737-1.837912 3.6385123-1.837912 6.3546766 0 2.7159035.605331 4.8121249 1.815734 6.2881424 1.210402 1.4760175 2.922551 2.2141567 5.136707 2.2141567 2.184673 0 3.867338-.745445 5.0493-2.2363348z"/><path d="m195.034171 9.31219087v22.09721053c0 3.3066236-.847986 5.8085737-2.543958 7.5061112-1.698581 1.6975375-4.200792 2.5463063-7.506633 2.5463063-3.394553 0-6.319453-.7676231-8.76948-2.3028691l.620987-2.9225511c1.416789.7971068 2.752693 1.3726936 4.007712 1.7270213s2.63528.5314915 4.140781.5314915c2.155189 0 3.778104-.568281 4.871353-1.7051041 1.090641-1.1365622 1.63857-2.826533 1.63857-5.0704345v-5.2695154c-.680998 1.4170498-1.675098 2.5165615-2.990129 3.2990569-1.315031.7822345-2.870106 1.1733517-4.670446 1.1733517-1.949063 0-3.684173-.4573906-5.205329-1.3726936-1.518548-.9150422-2.692682-2.2141567-3.519795-3.8968219-.827112-1.682926-1.239364-3.616595-1.239364-5.8012679 0-2.1846728.412252-4.1183418 1.239364-5.801007.827113-1.682926 2.001247-2.9817797 3.519795-3.8970827 1.521156-.91504214 3.256266-1.37269366 5.205329-1.37269366 1.769029 0 3.313668.38381151 4.62609 1.15143453 1.31503.76762303 2.309131 1.84521753 2.990129 3.23252263v-3.85246563zm-5.424501 16.45118933c1.226318-1.4319222 1.839477-3.4023808 1.839477-5.9118975 0-2.5092558-.613159-4.4799752-1.839477-5.9116365-1.223709-1.4319222-2.914463-2.1478833-5.069652-2.1478833-2.18389 0-3.903345.7159611-5.158364 2.1478833-1.255019 1.4316613-1.881224 3.4023807-1.881224 5.9116365 0 2.5095167.626205 4.4799753 1.881224 5.9118975s2.974474 2.1476224 5.158364 2.1476224c2.155189 0 3.845943-.7157002 5.069652-2.1476224z"/><path d="m220.585946 20.3386181h-16.338733c.028701 2.8340996.686216 4.9744163 1.969936 6.4212109 1.283721 1.4465336 3.151899 2.1698005 5.601926 2.1698005 2.598751 0 4.988767-.8709469 7.172657-2.6128406l1.195008 2.6128406c-.973227.915303-2.220419 1.6385698-3.741575 2.1698004-1.518547.5314916-3.076232.7971069-4.670446.7971069-3.483266 0-6.215085-1.0259326-8.192849-3.0775369-1.977765-2.0518652-2.966647-4.8637868-2.966647-8.4360256 0-2.2731244.443562-4.2882 1.328077-6.0447052.887124-1.7565051 2.126488-3.121893 3.720701-4.0961637 1.594214-.97427072 3.410209-1.46140606 5.445375-1.46140606 2.953601 0 5.270559.96696496 6.953485 2.90063396s2.523085 4.5979105 2.523085 7.9929856zm-13.969591-7.0852492c-1.166307 1.1216898-1.912535 2.701292-2.236074 4.7382848h12.972881c-.177424-2.0959604-.787974-3.6901741-1.836868-4.782641-1.048893-1.092206-2.502211-1.6385699-4.362562-1.6385699-1.86035 0-3.37107.5609754-4.537377 1.6829261z"/></g><g fill="#f2f2f2" fill-rule="nonzero" transform="translate(347.017193 95.746626)"><path d="m.13103057 17.5444886 1.30960428-16.95274668h3.09535177l-1.16678937 14.42893518h7.92875255l-.1903731 2.5238115z"/><path d="m13.2028032 17.5444886.9524268-12.02408921h2.9762458l-.9524267 12.02408921zm1.1904984-17.47658839h3.3095741l-.2142224 2.92868762h-3.3095741z"/><path d="m18.7267099 16.2111754 1.0238341-2.0715176c1.3493063.936574 2.7858728 1.404861 4.3096994 1.404861 1.5396794 0 2.3095892-.4444378 2.3095892-1.3334535 0-.412592-.202438-.7261395-.6071738-.9405021-.4047358-.2142224-1.0516115-.4563624-1.940487-.7261395-.8413173-.2380716-1.5398197-.4762835-2.0953669-.7143551-.5555471-.2380716-1.0277622-.5833245-1.4166453-1.0357588-.388883-.452294-.5833245-1.04361503-.5833245-1.77382287 0-1.14279984.4602905-2.06352109 1.3808714-2.76188318.9207213-.69850237 2.1429251-1.04768342 3.6667517-1.04768342.8890158 0 1.7461858.13495869 2.5715101.40473576.8254645.26991737 1.5159704.64294766 2.0715176 1.11909088l-.999985 2.0238191c-1.1904983-.90472823-2.4206986-1.35716248-3.6906009-1.35716248-.7460606 0-1.3174605.11910595-1.71434.35717755-.3968796.23807161-.5952492.58725266-.5952492 1.04768343 0 .42858501.202438.74998869.6071738.96421105.4047358.21436265 1.0594677.45636238 1.9643363.72627978.8730227.2539243 1.5793813.4960643 2.1190758.7261394.5396944.2302154 1.0040533.5754683 1.3929363 1.0357588.388883.4604308.5833246 1.0556799.5833246 1.7857475 0 1.1587929-.4602905 2.0635211-1.3810118 2.714325-.9207212.6508038-2.1587778.9762759-3.7143099.9762759-1.9525519 0-3.7064536-.5079889-5.262126-1.5238266z"/><path d="m35.3699775 13.1396729c-.1111094 1.4127172.4841397 2.1190758 1.7857475 2.1190758.3651741 0 .7777661-.0555547 1.2381968-.1666642l-.1905134 2.3334385c-.5238417.1903731-1.1746456.2856298-1.9524116.2856298-1.2540496 0-2.2143325-.3294002-2.8809891-.9880603-.6667969-.6588004-1.0001253-1.6151552-1.0001253-2.8690645 0-.2382119.0079966-.4207288.0238493-.547691l.428585-5.54775586h-2.3095892l.1905134-2.23818175h2.28574l.2380716-2.92854732 3.0476532-1.00012522-.309479 3.92867254h3.2143174l-.1903731 2.23818175h-3.1906085z"/><path d="m39.5605709 16.2111754 1.0238342-2.0715176c1.349166.936574 2.7857324 1.404861 4.309559 1.404861 1.5398197 0 2.3095893-.4444378 2.3095893-1.3334535 0-.412592-.2022978-.7261395-.6071738-.9405021-.4047358-.2142224-1.0516116-.4563624-1.9404871-.7261395-.8413172-.2380716-1.5396793-.4762835-2.0952265-.7143551s-1.0279026-.5833245-1.4167856-1.0357588c-.388883-.452294-.5833246-1.04361503-.5833246-1.77382287 0-1.14279984.4602905-2.06352109 1.3810118-2.76188318.9207212-.69850237 2.142925-1.04768342 3.6667517-1.04768342.8888754 0 1.7460455.13495869 2.57151.40473576.8253243.26991737 1.5158301.64294766 2.0715176 1.11909088l-1.0001252 2.0238191c-1.1904983-.90472823-2.4206986-1.35716248-3.6904606-1.35716248-.7460606 0-1.3176008.11910595-1.7143401.35717755-.3968795.23807161-.5952492.58725266-.5952492 1.04768343 0 .42858501.2022978.74998869.6071738.96421105.4047358.21436265 1.0594678.45636238 1.964196.72627978.8731631.2539243 1.5795217.4960643 2.1192161.7261394.5396945.2302154 1.003913.5754683 1.3927961 1.0357588.388883.4604308.5833245 1.0556799.5833245 1.7857475 0 1.1587929-.4602905 2.0635211-1.3808714 2.714325-.9207213.6508038-2.1587778.9762759-3.7144502.9762759-1.9524117 0-3.7064537-.5079889-5.2619858-1.5238266z"/><path d="m58.3943218 15.592077.7380641-1.4999774c.8413173.7142148 1.6984873 1.2222038 2.57151 1.5238266.8730228.3016229 1.8890008.4524343 3.0476533.4524343 1.365159 0 2.4167706-.2659893 3.1548346-.7976872.7382044-.5318382 1.1071663-1.2818269 1.1071663-2.2501064 0-.5713999-.1784485-1.0357588-.5356261-1.392796-.3571775-.3571776-.8254645-.6390196-1.4048609-.8452454-.5793965-.2063662-1.3532344-.4207288-2.3215139-.6429477-1.3016077-.2857701-2.3730001-.59524916-3.2143174-.92857747s-1.5238266-.81353993-2.0476684-1.44049456c-.5238417-.62695464-.7857625-1.44849108-.7857625-2.46432874 0-.96827945.2540646-1.82152136.7619133-2.55958543.507989-.73820436 1.2262722-1.31353239 2.1548497-1.72626467.9285774-.41273227 2.0120347-.61909841 3.2500913-.61909841 1.1746456 0 2.2698872.18265718 3.2857249.54769096 1.0159779.36503378 1.8731479.896872 2.57151 1.59523409l-.7619133 1.50011768c-.7936188-.68264964-1.5991622-1.18264211-2.4166302-1.50011768-.8174681-.31747557-1.710412-.47614322-2.6786914-.47614322-1.3174605 0-2.3492912.28170171-3.0953518.8452454s-1.1190909 1.33738164-1.1190909 2.32151383c0 .85717002.3254721 1.49997739.976276 1.9285624s1.6507888.8016153 3.0000951 1.11909087c1.4602754.34918105 2.6071436.67058473 3.4404644.96435135.833461.29362633 1.527895.73806407 2.0834422 1.3333132.5555472.5952492.8333208 1.3849399.8333208 2.3690721 0 .9524267-.2539244 1.7896756-.7619133 2.5120272-.507989.7222113-1.2341285 1.2816866-2.1785587 1.6785662-.9445705.3968795-2.0517367.5952491-3.3214987.5952491-2.6509141 0-4.7619934-.7143551-6.3335185-2.142925z"/><path d="m83.9663269 11.4967403h-8.7859225c.0158527 1.5238266.3691021 2.674623 1.059608 3.4525293.6905059.7777661 1.6944189 1.1666491 3.0118794 1.1666491 1.3968645 0 2.6826195-.468287 3.8572651-1.404861l.6429477 1.404861c-.5238417.4921362-1.1945668.8810193-2.0120348 1.1666491-.817468.2857701-1.6547169.428585-2.5118869.428585-1.873148 0-3.3414199-.5516191-4.4049561-1.6547169-1.0635361-1.1032382-1.5952341-2.6151402-1.5952341-4.5358464 0-1.2222038.2380716-2.30566106.7143551-3.25009127.4761433-.94443021 1.1427999-1.67856617 1.9999699-2.20240788s1.833446-.78576257 2.9286876-.78576257c1.5872376 0 2.8334309.5199136 3.7381591 1.55960051.9047283 1.03968691 1.3571625 2.47218496 1.3571625 4.29763441zm-7.5120921-3.80956661c-.6269547.60310539-1.0277623 1.45241918-1.202423 2.54766081h6.9763258c-.0951164-1.1269471-.4245166-1.98411712-.9880603-2.57151006-.5635437-.58725265-1.3452378-.88101927-2.345363-.88101927-.999985 0-1.8135249.30162284-2.4404795.90486852z"/><path d="m88.8830598 16.9492395c-.8650263-.5078487-1.5316829-1.2261319-1.9999699-2.1548497-.468287-.9285775-.7024305-2.0118945-.7024305-3.249951 0-1.2381968.2380716-2.32951036.7143551-3.27394057.4761433-.94443021 1.1547245-1.67856617 2.0357438-2.20240788.8808789-.52384171 1.9087815-.78576257 3.0834271-.78576257.8094715 0 1.591306.1388868 2.3452228.41666039.7540571.27777359 1.3770836.66272851 1.8690796 1.15486475l-.6428074 1.42856993c-.6032457-.4762835-1.1865702-.82546455-1.7501139-1.04768342s-1.1388717-.33332831-1.7262647-.33332831c-1.2222038 0-2.1824867.40880417-2.8809891 1.2262722-.6983621.81746804-1.0475431 1.95633978-1.0475431 3.41675548 0 1.4444227.3452529 2.5674416 1.0356185 3.3690569.6905059.8016153 1.6548572 1.202423 2.8929137 1.202423.587393 0 1.162721-.1111094 1.7262647-.3333283s1.1468682-.5713999 1.7501139-1.0476834l.6428074 1.4285699c-.507989.4762835-1.1468683.8532419-1.9166378 1.1310155-.7699098.2777736-1.567597.4166604-2.3929213.4166604-1.1587928 0-2.1707024-.2539244-3.0358689-.7619133z"/><path d="m101.276251 7.09192453v6.54774077c0 .8888755.182517 1.511902.547691 1.8690796.365034.3571776.880879.5357663 1.547536.5357663.444437 0 .873023-.0714074 1.285755-.2143626v1.6429326c-.491996.1588079-1.047543.2380716-1.666642.2380716-1.14294 0-2.035743-.3214037-2.678691-.9642111-.6428075-.6429476-.9642112-1.591306-.9642112-2.8453555v-6.80966167h-2.3334385v-1.52382664h2.3334385v-3.07150253l1.9285622-.69050586v3.76200839h3.42868v1.52382664z"/><path d="m107.038229 17.5444886v-11.97639071h1.928703v11.97639071zm-.190373-17.04800338h2.357148v2.19062355h-2.357148z"/><path d="m114.681352 16.9492395c-.85717-.5078487-1.519898-1.2302003-1.988185-2.166634-.468287-.936574-.702431-2.0318157-.702431-3.2858652 0-1.2539093.234144-2.3492912.702431-3.2857249.468287-.93657398 1.131015-1.65878532 1.988185-2.1667743.85717-.50798897 1.849159-.76191332 2.976246-.76191332 1.126947 0 2.119076.25392435 2.976246.76191332.85717.50798898 1.519898 1.23020032 1.988185 2.1667743.468147.9364337.702291 2.0318156.702291 3.2857249 0 1.2540495-.234144 2.3492912-.702291 3.2858652-.468287.9364337-1.131015 1.6587853-1.988185 2.166634-.85717.5079889-1.849299.7619133-2.976246.7619133-1.127087 0-2.119076-.2539244-2.976246-.7619133zm5.71442-2.0118945c.634951-.7857626.952287-1.9326308.952287-3.4406047 0-1.4602754-.325332-2.59129092-.976136-3.39290622-.650804-.80161531-1.555532-1.20242296-2.714325-1.20242296-1.174646 0-2.08737.40080765-2.738174 1.20242296-.650804.8016153-.976276 1.93263082-.976276 3.39290622 0 1.5079739.321544 2.6548421.964351 3.4406047.642808.7857626 1.559601 1.1785737 2.750099 1.1785737s2.103223-.3928111 2.738174-1.1785737z"/><path d="m136.610315 10.0204719v7.5240167h-1.928563v-7.42876c0-1.11109441-.222219-1.92463434-.666656-2.44047953-.444438-.5158452-1.142941-.77383795-2.095367-.77383795-1.111095 0-1.99997.34132482-2.666627 1.02383418-.666656.68250935-1.000125 1.6032306-1.000125 2.7620235v6.8572198h-1.928562v-8.61925838c0-1.23805653-.063411-2.35714741-.190514-3.35713233h1.833446l.190514 2.14292505c.365033-.77790635.912724-1.37708362 1.642792-1.79767212.730208-.42072879 1.563529-.63102304 2.500102-.63102304 2.873133 0 4.30956 1.57938136 4.30956 4.73814412z"/><path d="m139.515153 16.1634769.642948-1.4285699c.650803.5079889 1.309464.8730227 1.97626 1.0952416.666517.2222189 1.412858.3333283 2.237761.3333283.904869 0 1.590885-.1547395 2.059453-.4642186s.702851-.7579852.702851-1.3452379c0-.4762835-.158527-.85717-.475582-1.1429401-.318457-.2857701-.841738-.507989-1.572647-.6666566l-2.022977-.4762835c-1.000406-.2222189-1.774104-.6189581-2.321795-1.1904983-.547691-.5713999-.821396-1.2539093-.821396-2.04766838 0-1.04754313.420588-1.90078504 1.261906-2.55958543.841317-.65866011 1.952832-.98806031 3.333283-.98806031.841738 0 1.635778.13495869 2.380716.40473577.746341.26991736 1.373436.65880039 1.881285 1.16678937l-.642527 1.40472069c-1.127929-.93657399-2.333018-1.40472069-3.619474-1.40472069-.85717 0-1.519338.16259575-1.987905.48806784-.468427.32533179-.702571.78169416-.702571 1.3690871 0 .49199596.146883.88101927.44051 1.16664909.294328.28577005.765701.50798895 1.416645.66665665l2.02438.4999924c1.111095.2540647 1.935998.6468758 2.476113 1.178714.540116.531698.809472 1.2261319.809472 2.083302 0 1.0318306-.420869 1.8571549-1.262607 2.4762533-.840336.6190984-1.983697.9285775-3.42868.9285775-2.015402 0-3.610776-.5158452-4.785422-1.5476759z"/><path d="m171.469076 17.5444886-1.857435-4.3572575h-8.857891l-1.881285 4.3572575h-2.022977l7.452188-16.95274668h1.71434l7.452189 16.95274668zm-10.025101-5.9763409h7.476038l-3.737318-8.71437478z"/><path d="m178.348883 15.0920845v1.7381893c0 .6666566-.110829 1.2777585-.332487 1.8333057-.22306.5555472-.596231 1.0952416-1.119511 1.6190833l-.904869-.6905058c.618678-.7142148.967999-1.3968645 1.047964-2.0476684h-1.143361v-2.4524041z"/><path d="m200.064324 10.2943173c.540116.7063586.809472 1.5834498.809472 2.6309929 0 1.4762685-.492417 2.6151402-1.475848 3.4167555-.984833.8016153-2.373701 1.2024229-4.166603 1.2024229h-7.048155v-16.95274668h6.809662c1.729772 0 3.07515.38495492 4.036134 1.15486475.959582.76976954 1.439373 1.86108306 1.439373 3.27380026 0 .90486851-.232881 1.68656268-.701449 2.34536307-.468567.65866011-1.12372 1.14686824-1.964055 1.46420352.967998.26991737 1.721354.75798521 2.261469 1.46434378zm-9.95215-2.1785586h4.570638c1.269622 0 2.230606-.25406463 2.88155-.76191332.650944-.50798897.976416-1.25404956.976416-2.23818175 0-1.93655891-1.286456-2.90483837-3.857966-2.90483837h-4.570638zm7.892698 7.0596579c.627095-.4999925.939941-1.2658339.939941-2.2976646 0-2.0793738-1.293471-3.11906071-3.880413-3.11906071h-4.952226v6.16671401h4.952226c1.332752 0 2.313377-.2499962 2.940472-.7499887z"/><path d="m206.064515 15.0920845v1.7381893c0 .6666566-.110829 1.2777585-.33389 1.8333057-.221658.5555472-.594828 1.0952416-1.118109 1.6190833l-.904868-.6905058c.618677-.7142148.967999-1.3968645 1.046561-2.0476684h-1.141958v-2.4524041z"/><path d="m218.957137 16.6873186c-1.182642-.6983621-2.090316-1.7024154-2.725828-3.0118794-.635513-1.3096043-.952567-2.853352-.952567-4.63110303 0-1.77789127.317054-3.31364253.952567-4.60725378.635512-1.29361125 1.543186-2.28966807 2.725828-2.98817045 1.182642-.69836209 2.575719-1.04768342 4.17923-1.04768342 1.174225 0 2.250247.17858878 3.226663.53576634.975013.35717755 1.82096.89294389 2.535035 1.60715871l-.737924 1.50011768c-.809471-.69850238-1.60772-1.19849484-2.393342-1.50011768s-1.654016-.45229397-2.606583-.45229397c-1.857435 0-3.29821.60310539-4.322325 1.80945645-1.022712 1.20635107-1.534769 2.92069111-1.534769 5.14302012 0 2.23818173.507848 3.96430613 1.523546 5.17865373 1.015697 1.2143476 2.460681 1.8215213 4.333548 1.8215213.952567 0 1.820961-.1508114 2.606583-.4524342.785622-.3016229 1.583871-.8016153 2.393342-1.4999774l.737924 1.4999774c-.714075.7143551-1.560022 1.2499811-2.535035 1.6071587-.976416.3571776-2.052438.5357663-3.226663.5357663-1.603511 0-2.996588-.349181-4.17923-1.0476834z"/></g><g transform="translate(.267895 224.553185)"><path d="m.21765.193821h263.332986v106.422426h-263.332986z" fill="#c9177e"/><path d="m263.550636 106.616248h-263.33298624v-106.42242661h263.33298624zm-260.79463916-103.88400537v101.34558437h258.25629216v-101.34558437z" fill="#000"/></g><g transform="translate(.968438 362.150954)"><path d="m.058374.14766h70.625927v81.076506h-70.625927z" fill="#00a88a"/><path d="m70.6843004 81.224166h-70.62592672v-81.07650576h70.62592672zm-68.08746821-78.53804774v75.99958964h65.54828551v-75.99958964z" fill="#000"/></g><g transform="translate(97.321977 362.150954)"><path d="m.058374.14766h70.625927v81.076506h-70.625927z" fill="#00a88a"/><path d="m70.6843004 81.224166h-70.62592672v-81.07650576h70.62592672zm-68.08746821-78.53804774v75.99958964h65.54828551v-75.99958964z" fill="#000"/></g><g transform="translate(193.675515 362.150954)"><path d="m.058374.14766h70.625927v81.076506h-70.625927z" fill="#00a88a"/><path d="m70.6843004 81.224166h-70.62592672v-81.07650576h70.62592672zm-68.08746821-78.53804774v75.99958964h65.54828551v-75.99958964z" fill="#000"/></g><g transform="translate(329.309669 362.924954)"><path d="m.058374.14766h70.625927v81.076506h-70.625927z" fill="#00a88a"/><path d="m70.6843004 81.224166h-70.62592672v-81.07650576h70.62592672zm-68.08746821-78.53804774v75.99958964h65.54828551v-75.99958964z" fill="#000"/></g><g transform="translate(425.663669 362.924954)"><path d="m.058374.14766h70.625927v81.076506h-70.625927z" fill="#00a88a"/><path d="m70.6843004 81.224166h-70.62592672v-81.07650576h70.62592672zm-68.08746821-78.53804774v75.99958964h65.54828551v-75.99958964z" fill="#000"/></g><g transform="translate(523.997669 362.924954)"><path d="m.058374.14766h70.625927v81.076506h-70.625927z" fill="#00a88a"/><path d="m70.6843004 81.224166h-70.62592672v-81.07650576h70.62592672zm-68.08746821-78.53804774v75.99958964h65.54828551v-75.99958964z" fill="#000"/></g><g transform="translate(660.171823 361.893877)"><path d="m.058374.14766h70.625927v81.076506h-70.625927z" fill="#00a88a"/><path d="m70.6843004 81.224166h-70.62592672v-81.07650576h70.62592672zm-68.08746821-78.53804774v75.99958964h65.54828551v-75.99958964z" fill="#000"/></g><g transform="translate(756.527208 361.893877)"><path d="m.058374.14766h70.625927v81.076506h-70.625927z" fill="#00a88a"/><path d="m70.6843004 81.224166h-70.62592672v-81.07650576h70.62592672zm-68.08746821-78.53804774v75.99958964h65.54828551v-75.99958964z" fill="#000"/></g><g transform="translate(852.877977 361.893877)"><path d="m.058374.14766h70.625927v81.076506h-70.625927z" fill="#00a88a"/><path d="m70.6843004 81.224166h-70.62592672v-81.07650576h70.62592672zm-68.08746821-78.53804774v75.99958964h65.54828551v-75.99958964z" fill="#000"/></g><g fill="#f2f2f2" fill-rule="nonzero" transform="translate(26.69736 242.51167)"><path d="m.00427353 31.0947909 1.49915514-3.0461739c1.70855821 1.4504369 3.44902547 2.4820676 5.22225648 3.0946072 1.7729461.6125397 3.83592255.9188095 6.18921435.9188095 2.772098 0 4.9077245-.5401745 6.4068797-1.6199537 1.4988702-1.080064 2.2484478-2.6031509 2.2484478-4.5695456 0-1.1604065-.3626805-2.1034326-1.0880414-2.8285086-.7253608-.7253609-1.6763642-1.2977293-2.8527252-1.7165355-1.1766459-.419091-2.7481662-.8544215-4.7145609-1.3057065-2.6433221-.5803457-4.8194048-1.2088399-6.52767811-1.8857674-1.70855822-.6769275-3.0948921-1.6521476-4.15843184-2.9253753-1.06382464-1.2732277-1.59573696-2.9416147-1.59573696-5.0045912 0-1.96639471.51567289-3.69916961 1.54730359-5.19803984 1.0316307-1.49915513 2.49004483-2.66753887 4.37609709-3.505721 1.88576735-.83818214 4.08578183-1.25727321 6.60004333-1.25727321 2.3854857 0 4.6097168.37094261 6.6729782 1.11225801 2.0629765.74131541 3.8037287 1.82137947 5.2222565 3.23962239l-1.5473036 3.04645873c-1.6119764-1.38633388-3.2478846-2.40172515-4.9080094-3.04645873-1.6601249-.64473357-3.4735271-.96695791-5.4399217-.96695791-2.6755162 0-4.7706866.57208353-6.28579626 1.71653548-1.51510965 1.14445195-2.27266448 2.71597223-2.27266448 4.71456088 0 1.7407521.6606881 3.0461738 1.98234919 3.9165499 1.32166109.870376 3.35272854 1.6279309 6.09263255 2.2726645 2.9658314.7091214 5.2949065 1.3618322 6.9872253 1.9584174 1.6923188.5963002 3.1025845 1.4988702 4.230797 2.70771 1.1284974 1.2088399 1.6926037 2.8125541 1.6926037 4.8111427 0 1.9342007-.5159578 3.6344968-1.5473036 5.101458-1.0316307 1.4666763-2.5065691 2.602866-4.4245304 3.4088542s-4.1664091 1.2088399-6.7453434 1.2088399c-5.38322623 0-9.67071874-1.4507218-12.86219267-4.3518804z"/><path d="m51.9362381 22.7779272h-17.8425672c.0324789 3.0946072.7495776 5.4316596 2.151866 7.011442 1.4022884 1.5794975 3.4413331 2.3692463 6.1168493 2.3692463 2.8367707 0 5.4478989-.9510034 7.8330998-2.8530102l1.3057065 2.8530102c-1.0638246.9994368-2.4256569 1.7891855-4.0857817 2.3692463-1.6604098.5803457-3.3607058.8703761-5.101458.8703761-3.8037287 0-6.7855146-1.1202353-8.9453578-3.3604209-2.1598433-2.2404705-3.2399073-5.310861-3.2399073-9.2114564 0-2.4820676.4837638-4.6823669 1.4507217-6.6003282s2.3210979-3.4088543 4.06185-4.4726789c1.7404673-1.0638247 3.7231014-1.595737 5.9473325-1.595737 3.2236679 0 5.7541688 1.0558474 7.5915028 3.1672572 1.8376189 2.1114099 2.7561434 5.0205458 2.7561434 8.7276926zm-15.2553707-7.736518c-1.2735126 1.2247944-2.0874781 2.949592-2.4418964 5.1738231h14.1676144c-.1934486-2.288619-.8623989-4.0293711-2.0068508-5.2222565-1.1441671-1.1926004-2.7319268-1.7891855-4.7627093-1.7891855-2.0307826 0-3.6829302.6125397-4.9561579 1.8376189z"/><path d="m61.9214888 33.8509343c-1.7569916-1.0313458-3.1108466-2.4900448-4.06185-4.3760971-.9510034-1.8857673-1.4265051-4.0857818-1.4265051-6.6000433 0-2.5145464.4837639-4.7308002 1.4507218-6.6487615s2.3453145-3.4088543 4.1342152-4.4726789c1.7891855-1.0638247 3.8763787-1.595737 6.2618644-1.595737 1.6441703 0 3.2316451.2820531 4.7627093.8461594 1.5313491.5641063 2.7965995 1.3458778 3.7960363 2.3453145l-1.3057066 2.9011587c-1.2247943-.9672429-2.4097024-1.6763643-3.5538694-2.1276493-1.144452-.451285-2.3131206-.6769276-3.505721-.6769276-2.4820676 0-4.4325078.8302049-5.8507507 2.4903298-1.4185278 1.6601248-2.1276493 3.9729605-2.1276493 6.9387919 0 2.9333526.7011442 5.2139943 2.1034326 6.8419253 1.4022884 1.6279309 3.3604209 2.4418963 5.8749674 2.4418963 1.1926004 0 2.361269-.2256425 3.505721-.6769275 1.144167-.451285 2.3290751-1.1604065 3.5538694-2.1276493l1.3057066 2.9011586c-1.0316307.9672429-2.3290751 1.7327749-3.8926181 2.2968812-1.5635431.5641063-3.1832118.8461594-4.8595761.8461594-2.3532918 0-4.408291-.5156729-6.1649977-1.5473036z"/><path d="m87.0894602 13.8325694v13.2972382c0 1.80514.3709426 3.0703905 1.112258 3.7957514s1.7891855 1.0880413 3.1430406 1.0880413c.90257 0 1.7729461-.1450152 2.6111282-.4353305v3.3364892c-.9994368.3225092-2.1276493.4834789-3.3849225.4834789-2.3208129 0-4.1342151-.6527108-5.4396368-1.9581325-1.3057066-1.3057066-1.9584174-3.2316451-1.9584174-5.7783855v-13.8291505h-4.7387775v-3.0946072h4.7387775v-6.23764778l3.9165499-1.4022884v7.63993618h6.9630086v3.0946072z"/><path d="m98.7912464 35.0597742v-24.321812h3.9165496v24.321812zm-.3868972-34.62130978h4.7869258v4.44874713h-4.7869258z"/><path d="m114.312716 33.8509343c-1.740752-1.0313458-3.08663-2.498307-4.037634-4.4000289-.950718-1.9020067-1.42622-4.1262378-1.42622-6.6729782 0-2.5464555.475502-4.7709715 1.42622-6.6726933.951004-1.9020068 2.296882-3.3686831 4.037634-4.4003138s3.75558-1.5473036 6.044199-1.5473036c2.288904 0 4.303447.5156729 6.044199 1.5473036s3.08663 2.498307 4.037633 4.4003138c.951004 1.9017218 1.426505 4.1262378 1.426505 6.6726933 0 2.5467404-.475501 4.7709715-1.426505 6.6729782-.951003 1.9017219-2.296881 3.3686831-4.037633 4.4000289-1.740752 1.0316307-3.755295 1.5473036-6.044199 1.5473036-2.288619 0-4.303447-.5156729-6.044199-1.5473036zm11.604919-4.0857818c1.289467-1.5957369 1.934201-3.924812 1.934201-6.9872253 0-2.9655465-.660973-5.2624277-1.982634-6.8903586s-3.158995-2.4418964-5.512287-2.4418964c-2.385486 0-4.239059.8139655-5.56072 2.4418964s-1.98235 3.9248121-1.98235 6.8903586c0 3.0624133.652711 5.3914884 1.958133 6.9872253 1.305707 1.595737 3.167257 2.393463 5.584937 2.393463s4.271253-.797726 5.56072-2.393463z"/><path d="m158.846626 19.7799018v15.2798724h-3.916835v-15.0864238c0-2.2564251-.451285-3.9085727-1.353855-4.9561579s-2.320813-1.5715203-4.255013-1.5715203c-2.256425 0-4.06185.693167-5.415705 2.079216-1.353856 1.3860489-2.030783 3.2558618-2.030783 5.6091536v13.9257324h-3.91655v-17.5041035c0-2.5142615-.129061-4.786926-.386897-6.8177085h3.723101l.386897 4.3518804c.741316-1.5797825 1.853574-2.7965996 3.33649-3.6507362 1.482915-.8544216 3.175234-1.2814899 5.076956-1.2814899 5.834796 0 8.752194 3.2074284 8.752194 9.6222853z"/><path d="m205.653771 35.0597742-3.772105-8.848776h-17.988722l-3.817689 8.848776h-4.111138l15.134003-34.42786122h3.481504l15.134002 34.42786122zm-20.359108-12.1368318h15.185285l-7.592643-17.69726709z"/></g><g fill="#f2f2f2" fill-rule="nonzero" transform="translate(22.788376 290.137172)"><path d="m.04658391 21.7701602 1.62834138-20.70276002h4.56506199l-1.36656882 17.01005832h9.24650314l-.2907867 3.6927017z"/><path d="m16.3006611 21.7701602 1.1629859-14.74195382h4.3906544l-1.1629859 14.74195382zm1.5119622-21.66232409h4.7104554l-.319801 4.12904304h-4.7104553z"/><path d="m23.395439 20.2000084 1.4247584-3.0530998c.8141707.5622308 1.6863698.9935752 2.6169196 1.2940334.9303887.3004581 1.8609386.4506872 2.7913273.4506872.8141707 0 1.415087-.1163792 1.8027489-.3489764.387662-.2325971.5815736-.5427267.5815736-.9303886 0-.407166-.2277615-.7269669-.6832845-.9595641-.4555229-.2325972-1.1969969-.5040411-2.224422-.8141707-1.0661106-.2907868-1.9384709-.5815735-2.6169196-.8723603-.6784487-.2907867-1.2648579-.72197-1.7590665-1.2938721-.4943697-.5719021-.741474-1.3133761-.741474-2.224422 0-.9498927.2664471-1.78340617.7995024-2.50054048.5330554-.7172955 1.2891976-1.27936503 2.2681045-1.68653097.9789069-.40700475 2.0983714-.61058772 3.3583937-.61058772 1.1047962 0 2.1855752.16473618 3.2420144.49436973 1.0564393.32947236 1.9433067.7753239 2.6606022 1.33755462l-1.3957442 2.93672062c-.7172955-.5233839-1.4732766-.9208785-2.2679433-1.1921612-.7948279-.27144401-1.5701518-.40716599-2.3262941-.40716599-.7946667 0-1.395583.11637918-1.802749.34897639-.4070047.2325971-.6105877.5523981-.6105877.959564 0 .4265088.2422686.7656525.7269669 1.0177537.4845371.25194 1.2211754.5135513 2.2097537.7849953 1.0662719.3101296 1.9336353.6105877 2.6024126.9013745.6687773.2907867 1.2503508.7221312 1.7447205 1.2938721.4942086.5719021.7413128 1.3133761.7413128 2.224422 0 1.4539338-.5765766 2.5927412-1.7300522 3.4165832-1.1533145.8238421-2.7089592 1.2356826-4.6667729 1.2356826-2.5200445 0-4.768645-.6009163-6.7458015-1.802749z"/><path d="m44.7087867 16.0421124c-.0581896.8141707.1065466 1.415087.4942086 1.8027489.3878231.387662.9208784.5815736 1.5993272.5815736.4458515 0 .94006-.0776936 1.482948-.2327584l-.2907868 3.4020761c-.6591059.271444-1.5119622.4070048-2.5587301.4070048-1.6671881 0-2.9417175-.4458516-3.8237491-1.3375546-.8818705-.8915419-1.3228864-2.1515642-1.3228864-3.7799055 0-.3296336.0096714-.5815736.0290142-.7559811l.4651944-5.8154129h-2.7913273l.2616114-3.28569692h2.7914884l.2616114-3.46010454 4.5070336-1.42475841-.3779906 4.88486295h3.7508913l-.2617725 3.28569692h-3.7508913z"/><path d="m49.3900667 20.2000084 1.4247584-3.0530998c.8141707.5622308 1.686531.9935752 2.6169197 1.2940334.9305498.3004581 1.8609385.4506872 2.7914884.4506872.8141707 0 1.415087-.1163792 1.802749-.3489764.3876619-.2325971.5815735-.5427267.5815735-.9303886 0-.407166-.2277615-.7269669-.6832844-.9595641-.4556842-.2325972-1.196997-.5040411-2.224422-.8141707-1.0661107-.2907868-1.938471-.5815735-2.6169197-.8723603-.6784487-.2907867-1.2648579-.72197-1.7592276-1.2938721-.4942086-.5719021-.741474-1.3133761-.741474-2.224422 0-.9498927.2666082-1.78340617.7996635-2.50054048.5330554-.7172955 1.2890365-1.27936503 2.2679433-1.68653097.9789069-.40700475 2.0983715-.61058772 3.3583937-.61058772 1.1049574 0 2.1857364.16473618 3.2421757.49436973 1.0564392.32947236 1.9433066.7753239 2.6604409 1.33755462l-1.395583 2.93672062c-.7172955-.5233839-1.4732766-.9208785-2.2681045-1.1921612-.7946667-.27144401-1.5701518-.40716599-2.3261329-.40716599-.7948279 0-1.3957442.11637918-1.802749.34897639-.4070047.2325971-.6105877.5523981-.6105877.959564 0 .4265088.2422686.7656525.7269669 1.0177537.4845372.25194 1.2211755.5135513 2.2097537.7849953 1.0661107.3101296 1.9336353.6105877 2.6024126.9013745.6687773.2907867 1.2503508.7221312 1.7445594 1.2938721.4943697.5719021.741474 1.3133761.741474 2.224422 0 1.4539338-.5767379 2.5927412-1.7300523 3.4165832-1.1533145.8238421-2.7089592 1.2356826-4.6667729 1.2356826-2.5200445 0-4.768645-.6009163-6.7459627-1.802749z"/><path d="m73.2145935 2.29179942h7.7695192c2.0061707 0 3.5700361.48340881 4.6917573 1.44990405 1.12156.96665643 1.68234 2.29808583 1.68234 3.9942882 0 1.69604118-.5652933 3.03198393-1.6960412 4.00782813-1.1307478.9756831-2.6900999 1.4636052-4.6780561 1.4636052h-5.526238v8.5627352h-2.2432812zm7.5778643 9.05533178c1.4408774 0 2.5260084-.3101295 3.2555544-.9302274.7295459-.62009798 1.0943189-1.51373534 1.0943189-2.68091213 0-1.16733798-.364773-2.05646202-1.0943189-2.66737212-.729546-.61107129-1.814677-.91652634-3.2555544-.91652634h-5.3345831v7.19503799z"/><path d="m102.432215 8.0095311v13.7606291h-2.188638v-2.4894183c-.4012015.8572084-1.0075983 1.5182486-1.8193511 1.9832817-.8115916.4651944-1.7553591.6976303-2.8314635.6976303-1.2218202 0-2.2934114-.2917539-3.214451-.8754229-.9210397-.5835078-1.63221-1.4088006-2.1338332-2.4758784-.5016233-1.0669166-.7522738-2.3116257-.7522738-3.7341275 0-1.4226629.255325-2.6765599.7659749-3.761691s1.2264947-1.92863838 2.1475344-2.53052184c.9210396-.60188346 1.9834429-.90282519 3.1870487-.90282519 1.0761044 0 2.0153585.23711049 2.8179235.71133147.8024039.47422098 1.4134752 1.13993568 1.8328911 1.99698296v-2.3799704zm-3.2829565 10.7376719c.729546-.9210397 1.0943185-2.2295801 1.0943185-3.9257825s-.3647725-3.0002295-1.0943185-3.9120813c-.7295459-.91185183-1.7690602-1.36785834-3.1187041-1.36785834s-2.4028593.46970764-3.1598076 1.40896184c-.756787.9392541-1.1352611 2.2477945-1.1352611 3.9257824 0 1.6778267.3737996 2.9728272 1.12156 3.884679s1.8056504 1.3678583 3.1735087 1.3678583c1.3496439 0 2.3891582-.4605198 3.1187041-1.3815594z"/><path d="m118.983366 8.0095311v13.6511811c0 2.0427609-.524351 3.5884118-1.573054 4.6371139-1.048702 1.0487022-2.594514 1.5730532-4.637113 1.5730532-2.097405 0-3.903055-.4742209-5.41679-1.4226629l.382987-1.8054892c.875423.4924355 1.700716.8480206 2.475878 1.0669166.775163.218896 1.627697.328344 2.557925.328344 1.331429 0 2.334514-.3510718 3.009256-1.0533766.674902-.7021436 1.012273-1.7461713 1.012273-3.1324053v-3.2553932c-.419417.8754229-1.035001 1.5546775-1.846593 2.0380863-.811591.4832477-1.773735.7248715-2.886268.7248715-1.203606 0-2.275197-.2825661-3.214451-.8480206-.939254-.5652933-1.664287-1.3678584-2.174937-2.4073727-.51065-1.0396755-.765974-2.2342546-.765974-3.5838984 0-1.3496439.255324-2.544223.765974-3.5837373.51065-1.0396755 1.235683-1.84207932 2.174937-2.40753384.939254-.56529333 2.010845-.84802059 3.214451-.84802059 1.094319 0 2.047274.23711049 2.858866.71133147s1.427176 1.13993568 1.846593 1.99698296v-2.3799704zm-3.351302 10.1631907c.756787-.8846107 1.135262-2.1019176 1.135262-3.652243 0-1.5501643-.378475-2.7676323-1.135262-3.6520819-.756948-.88461068-1.800976-1.32691604-3.132405-1.32691604-1.349644 0-2.412047.44230536-3.18721 1.32691604-.775001.8844496-1.162663 2.1019176-1.162663 3.6520819 0 1.5503254.387662 2.7676323 1.162663 3.652243.775163.8846107 1.837566 1.3267549 3.18721 1.3267549 1.331429 0 2.375457-.4421442 3.132405-1.3267549z"/><path d="m134.76838 14.8214205h-10.094846c.018375 1.7508458.424091 3.0730874 1.217468 3.9668859.793377.8936374 1.947014 1.340456 3.460749 1.340456 1.604969 0 3.082275-.5380522 4.431758-1.6141566l.738734 1.6141566c-.601884.5654546-1.372372 1.0122732-2.311626 1.3404561-.939415.328344-1.901397.4924354-2.886268.4924354-2.152048 0-3.839062-.633799-5.061044-1.901236-1.221981-1.2675982-1.833052-3.0047428-1.833052-5.2115951 0-1.4042873.2737-2.6491576.820779-3.7342887s1.313215-1.92863838 2.298086-2.53052184c.98471-.60188346 2.106431-.90282519 3.364841-.90282519 1.823865 0 3.255555.59737014 4.295069 1.79194923 1.039675 1.1945791 1.559352 2.8404902 1.559352 4.9378945zm-8.63108-4.3771144c-.720519.6929558-1.181039 1.6688-1.381559 2.9272104h8.015656c-.109448-1.2948393-.487922-2.2797102-1.135422-2.9546127-.647339-.67474139-1.545651-1.01227325-2.694614-1.01227325-1.148962 0-2.083703.3465585-2.804061 1.03967555z"/><path d="m137.285362 20.1834059.738572-1.6413978c.747761.583669 1.504709 1.0030854 2.270684 1.2584103.765975.255325 1.623506.3829875 2.571303.3829875 1.039675 0 1.827894-.1777926 2.366269-.5333778.538375-.3555851.807562-.8709095.807562-1.5456509 0-.54724-.182145-.9848709-.546434-1.3132149-.365901-.328344-.96714-.583669-1.80694-.7659749l-2.32436-.54724c-1.149446-.255325-2.03857-.7111703-2.667856-1.3678584-.629124-.6565268-.943767-1.4407162-.943767-2.3527292 0-1.2036057.483248-2.18396332 1.449904-2.94091156.966656-.75678705 2.243926-1.13526117 3.830036-1.13526117.96714 0 1.877863.15506478 2.735394.46503315.857531.31012956 1.57805.75694824 2.161558 1.34061723l-.73825 1.61399545c-1.295968-1.0761044-2.682202-1.61399545-4.158702-1.61399545-.984871 0-1.745688.18681921-2.284063.56078005-.538213.3737996-.807239.8981506-.807239 1.5730532 0 .5652933.168605 1.0122732.505975 1.340456.336726.328344.879936.583669 1.627858.7659749l2.325972.5744812c1.276625.291915 2.224422.743247 2.845003 1.3543183.61897.6109101.930067 1.4088006.930067 2.3936715 0 1.1855525-.48357 2.1338333-1.45071 2.8451647-.965529.7113315-2.279227 1.0669166-3.939484 1.0669166-2.315817 0-4.148708-.5926956-5.498352-1.778248z"/><path d="m166.776845 19.8826253h4.294102v1.8875349h-10.860982v-1.8875349h4.295713v-14.8003046l-3.994288 2.54422296v-2.16123552l4.979159-3.17350872h1.286296z"/><path d="m177.692632 18.9523978v1.9971441c0 .7659749-.128952 1.4681185-.383632 2.1064309s-.683446 1.2584104-1.286296 1.8602938l-1.039676-.7933771c.71246-.8206183 1.113823-1.6049689 1.20409-2.3527293h-1.313699v-2.8177624z"/><path d="m194.243621 19.8826253v1.8875349h-12.529298v-1.6960412l6.811889-7.5506231c.910724-1.0214611 1.576438-1.9425007 1.997144-2.76311902.419094-.82077948.628641-1.64139777.628641-2.46217725 0-1.07610444-.311096-1.90139724-.930066-2.4758784-.620582-.57448116-1.505515-.86172174-2.654799-.86172174-1.860133 0-3.700923.74776041-5.525594 2.24328123l-.847859-1.72344348c.765652-.72954594 1.732792-1.31321493 2.899808-1.75084578 1.167016-.43779204 2.343703-.65668806 3.530061-.65668806 1.785985 0 3.199622.46051983 4.239297 1.38155949 1.039676.92103966 1.560319 2.16574884 1.560319 3.73428873 0 1.11253338-.251456 2.18396331-.752757 3.21445098-.501301 1.0304877-1.336265 2.1841245-2.503281 3.4607493l-5.552995 6.0186734z"/><path d="m200.425258 18.9523978v1.9971441c0 .7659749-.12734 1.4681185-.38202 2.1064309-.256292.6383124-.683446 1.2584104-1.286297 1.8602938l-1.039675-.7933771c.710848-.8206183 1.112211-1.6049689 1.204089-2.3527293h-1.313698v-2.8177624z"/><path d="m215.691563 13.4535622c.601239.802565.902664 1.814677.902664 3.0366584 0 1.6962023-.575448 3.0321451-1.723121 4.0078281-1.149285.9758443-2.709604 1.4636052-4.679346 1.4636052-1.257282 0-2.466207-.2097082-3.623551-.6291245-1.158956-.4195776-2.138991-1.0122732-2.941718-1.7782481l.875262-1.7236047c1.805328 1.495682 3.684803 2.2434424 5.635202 2.2434424 1.386234 0 2.440417-.3101295 3.160936-.9302275.72052-.6200979 1.079973-1.5319497 1.079973-2.7357166 0-2.3891582-1.495843-3.5837373-4.485917-3.5837373h-2.243765v-1.8876961h1.805328c1.441038 0 2.54519-.3191562 3.310842-.9574686.765653-.63847359 1.149285-1.55032542 1.149285-2.73571668 0-1.05788997-.315932-1.86948162-.944573-2.43493614-.628641-.56529333-1.51841-.84802059-2.667695-.84802059-1.860132 0-3.702534.74776041-5.525593 2.24328123l-.847859-1.72344348c.783383-.74776041 1.745687-1.33594272 2.885301-1.76454693 1.141225-.42860421 2.330807-.64298691 3.570358-.64298691 1.752135 0 3.151265.44681868 4.200612 1.34061723 1.047735.89363736 1.571602 2.09740428 1.571602 3.61113957 0 1.11253338-.272411 2.08821645-.820457 2.9272104-.546434.838994-1.304027 1.4408774-2.269555 1.8054892 1.147673.328344 2.022934.8937985 2.625785 1.6962024z"/></g><g transform="translate(329.992265 224.553185)"><path d="m.21765.193821h263.332986v106.422426h-263.332986z" fill="#c9177e"/><path d="m263.550636 106.616248h-263.33298624v-106.42242661h263.33298624zm-260.79463916-103.88400537v101.34558437h258.25629216v-101.34558437z" fill="#000"/></g><g fill="#f2f2f2" fill-rule="nonzero" transform="translate(359.320353 242.51167)"><path d="m.14615481 31.0947909 1.49887023-3.0461739c1.70855821 1.4504369 3.44931037 2.4820676 5.22225648 3.0946072 1.7729461.6125397 3.83620748.9188095 6.18921438.9188095 2.7723829 0 4.9080094-.5401745 6.4068796-1.6199537 1.4991552-1.080064 2.2484478-2.6031509 2.2484478-4.5695456 0-1.1604065-.3623955-2.1034326-1.0877564-2.8285086-.7253609-.7253609-1.6763643-1.2977293-2.8530102-1.7165355-1.1766458-.419091-2.7481661-.8544215-4.7145608-1.3057065-2.6433222-.5803457-4.81911993-1.2088399-6.52767814-1.8857674-1.70855822-.6769275-3.0946072-1.6521476-4.15843184-2.9253753s-1.59573696-2.9416147-1.59573696-5.0045912c0-1.96639471.5159578-3.69916961 1.54730359-5.19803984 1.0316307-1.49915513 2.49032973-2.66753887 4.37609709-3.505721 1.88576735-.83818214 4.08606666-1.25727321 6.60032816-1.25727321 2.3854858 0 4.6097169.37094261 6.6726934 1.11225801 2.0632614.74131541 3.8040135 1.82137947 5.2222565 3.23962239l-1.5473036 3.04645873c-1.6116915-1.38633388-3.2475997-2.40172515-4.9077245-3.04645873-1.6601249-.64473357-3.4735271-.96695791-5.4399218-.96695791-2.6755161 0-4.77097143.57208353-6.28608109 1.71653548-1.51510965 1.14445195-2.27266448 2.71597223-2.27266448 4.71456088 0 1.7407521.660973 3.0461738 1.98263409 3.9165499 1.32166109.870376 3.35244368 1.6279309 6.09263258 2.2726645 2.9655465.7091214 5.2946216 1.3618322 6.9869404 1.9584174 1.6926037.5963002 3.1028694 1.4988702 4.2310819 2.70771 1.1282125 1.2088399 1.6923188 2.8125541 1.6923188 4.8111427 0 1.9342007-.5156729 3.6344968-1.5473036 5.101458-1.0316307 1.4666763-2.5062843 2.602866-4.4242456 3.4088542-1.9182462.8059882-4.166694 1.2088399-6.7453434 1.2088399-5.38351106 0-9.67071867-1.4507218-12.86219259-4.3518804z"/><path d="m52.0781194 22.7779272h-17.8425672c.032194 3.0946072.7495776 5.4316596 2.151866 7.011442 1.4022884 1.5794975 3.4410482 2.3692463 6.1165643 2.3692463 2.8367708 0 5.447899-.9510034 7.8333847-2.8530102l1.3057066 2.8530102c-1.0638246.9994368-2.4259418 1.7891855-4.0860667 2.3692463-1.6601248.5803457-3.3604209.8703761-5.101173.8703761-3.8040136 0-6.7857995-1.1202353-8.9456428-3.3604209-2.1598432-2.2404705-3.2396224-5.310861-3.2396224-9.2114564 0-2.4820676.483479-4.6823669 1.4507218-6.6003282.9669579-1.9179613 2.320813-3.4088543 4.0615651-4.4726789 1.7407522-1.0638247 3.7233863-1.595737 5.9476174-1.595737 3.2233829 0 5.7541688 1.0558474 7.5915028 3.1672572 1.837334 2.1114099 2.7561434 5.0205458 2.7561434 8.7276926zm-15.2556556-7.736518c-1.2732277 1.2247944-2.0871932 2.949592-2.4418964 5.1738231h14.1676143c-.1931636-2.288619-.8621139-4.0293711-2.0065658-5.2222565-1.144452-1.1926004-2.7319268-1.7891855-4.7627094-1.7891855-2.0310674 0-3.683215.6125397-4.9564427 1.8376189z"/><path d="m62.0630852 33.8509343c-1.7567067-1.0313458-3.1105617-2.4900448-4.0615651-4.3760971-.9510034-1.8857673-1.4265051-4.0857818-1.4265051-6.6000433 0-2.5145464.483479-4.7308002 1.4507218-6.6487615.9669579-1.9179613 2.3450296-3.4088543 4.1342151-4.4726789 1.7889007-1.0638247 3.8763787-1.595737 6.2618645-1.595737 1.6438854 0 3.2316451.2820531 4.7627093.8461594 1.531349.5641063 2.7965995 1.3458778 3.7957514 2.3453145l-1.3054217 2.9011587c-1.2250793-.9672429-2.4097024-1.6763643-3.5541544-2.1276493-1.144167-.451285-2.3128357-.6769276-3.505721-.6769276-2.4820675 0-4.4322228.8302049-5.8507506 2.4903298-1.4182429 1.6601248-2.1273644 3.9729605-2.1273644 6.9387919 0 2.9333526.7011442 5.2139943 2.1031477 6.8419253 1.4022884 1.6279309 3.3607058 2.4418963 5.8749673 2.4418963 1.1928853 0 2.361554-.2256425 3.505721-.6769275 1.144452-.451285 2.3290751-1.1604065 3.5541544-2.1276493l1.3054217 2.9011586c-1.0316307.9672429-2.3290751 1.7327749-3.8923333 2.2968812-1.563543.5641063-3.1834966.8461594-4.859576.8461594-2.3532918 0-4.408291-.5156729-6.1652826-1.5473036z"/><path d="m87.2313415 13.8325694v13.2972382c0 1.80514.3706577 3.0703905 1.112258 3.7957514.7413154.7253609 1.7889006 1.0880413 3.1427556 1.0880413.9025701 0 1.7729461-.1450152 2.6111283-.4353305v3.3364892c-.9991519.3225092-2.1273644.4834789-3.3846376.4834789-2.3210979 0-4.1342152-.6527108-5.4399217-1.9581325-1.3054217-1.3057066-1.9581325-3.2316451-1.9581325-5.7783855v-13.8291505h-4.7387776v-3.0946072h4.7387776v-6.23764778l3.9165499-1.4022884v7.63993618h6.9630086v3.0946072z"/><path d="m98.9328427 35.0597742v-24.321812h3.9168353v24.321812zm-.3866122-34.62130978h4.7869255v4.44874713h-4.7869255z"/><path d="m114.454597 33.8509343c-1.740752-1.0313458-3.08663-2.498307-4.037633-4.4000289-.951004-1.9020067-1.426505-4.1262378-1.426505-6.6729782 0-2.5464555.475501-4.7709715 1.426505-6.6726933.951003-1.9020068 2.296881-3.3686831 4.037633-4.4003138s3.755295-1.5473036 6.044199-1.5473036c2.288619 0 4.303447.5156729 6.044199 1.5473036 1.740753 1.0316307 3.08663 2.498307 4.037634 4.4003138.950718 1.9017218 1.42622 4.1262378 1.42622 6.6726933 0 2.5467404-.475502 4.7709715-1.42622 6.6729782-.951004 1.9017219-2.296881 3.3686831-4.037634 4.4000289-1.740752 1.0316307-3.75558 1.5473036-6.044199 1.5473036-2.288904 0-4.303447-.5156729-6.044199-1.5473036zm11.604919-4.0857818c1.289468-1.5957369 1.933916-3.924812 1.933916-6.9872253 0-2.9655465-.660688-5.2624277-1.982349-6.8903586s-3.158995-2.4418964-5.512287-2.4418964c-2.385486 0-4.239059.8139655-5.56072 2.4418964s-1.982634 3.9248121-1.982634 6.8903586c0 3.0624133.652996 5.3914884 1.958417 6.9872253 1.305707 1.595737 3.167257 2.393463 5.584937 2.393463s4.271253-.797726 5.56072-2.393463z"/><path d="m158.988222 19.7799018v15.2798724h-3.916549v-15.0864238c0-2.2564251-.451285-3.9085727-1.353856-4.9561579-.90257-1.0475852-2.321097-1.5715203-4.255298-1.5715203-2.256425 0-4.061565.693167-5.41542 2.079216-1.353855 1.3860489-2.031068 3.2558618-2.031068 5.6091536v13.9257324h-3.91655v-17.5041035c0-2.5142615-.128775-4.786926-.386897-6.8177085h3.723387l.386897 4.3518804c.741315-1.5797825 1.853573-2.7965996 3.336204-3.6507362 1.482916-.8544216 3.175234-1.2814899 5.077241-1.2814899 5.834796 0 8.751909 3.2074284 8.751909 9.6222853z"/><path d="m203.619569 20.3360308c1.096874 1.4344824 1.643886 3.2156906 1.643886 5.343055 0 2.9980254-1.000007 5.3108611-3.00002 6.938792-1.997164 1.6279309-4.817695 2.4418964-8.461594 2.4418964h-14.310635v-34.42786122h13.82915c3.512844 0 6.245056.78177151 8.196635 2.34531453 1.948731 1.56325812 2.923097 3.77951197 2.923097 6.64847666 0 1.83761893-.475787 3.42509373-1.424511 4.76299423-.951573 1.3376156-2.282066 2.3290751-3.991479 2.9735238 1.968673.5481517 3.498598 1.5393263 4.595471 2.9738086zm-20.213807-4.4242455h9.284961c2.578364 0 4.529944-.5159578 5.85189-1.5473036 1.321946-1.0316307 1.982919-2.5467404 1.982919-4.54532897 0-3.93278933-2.612553-5.899184-7.834809-5.899184h-9.284961zm16.031444 14.3368462c1.273512-1.0153913 1.908844-2.5706722 1.908844-4.6661275 0-4.2228197-2.626798-6.3342296-7.880393-6.3342296h-10.059895v12.523444h10.059895c2.70657 0 4.698036-.5076956 5.971549-1.5230869z"/></g><g fill="#f2f2f2" fill-rule="nonzero" transform="translate(356.809897 292.199308)"><path d="m.10689318 19.8854177 1.48742717-18.91226722h4.17039899l-1.24844346 15.53895012h8.44675212l-.2655896 3.3733171z"/><path d="m14.955185 19.8854177 1.0625151-13.46697537h4.01092l-1.0625151 13.46697537zm1.3811601-19.78885388h4.3031155l-.2921955 3.77193628h-4.3031156z"/><path d="m21.436386 18.4510458 1.3014988-2.7889259c.7437136.5134941 1.540639.9074182 2.3906198 1.1819286.8499807.2745105 1.6999614.4117657 2.5499422.4117657.7437136 0 1.2927345-.1062672 1.6469061-.3188015.3541717-.2125343.5311793-.495809.5311793-.8499807 0-.3718568-.2079956-.6640524-.6241435-.8765867-.4161478-.2123778-1.0935031-.4602823-2.0320659-.7437136-.973933-.2655896-1.7708584-.5311792-2.3906197-.7967689-.6197613-.2657461-1.1554793-.6596702-1.6069973-1.1820852-.451518-.5224149-.6773553-1.1997702-.6773553-2.0320659 0-.86766582.2435224-1.62906451.7305671-2.28435256.4868883-.65513154 1.1775465-1.16862571 2.0718183-1.5404825s1.916878-.5579417 3.0679751-.5579417c1.0093032 0 1.9965392.15055818 2.9615514.45167454.9651687.30095986 1.7752405.70834338 2.4305286 1.22183754l-1.2750494 2.68281528c-.6551315-.47812392-1.3457898-.84121642-2.0718183-1.08912095s-1.4343718-.37185679-2.1250301-.37185679c-.7260285 0-1.2748928.10626716-1.6467496.31880147-.3718568.21237781-.5577852.50457336-.5577852.87643017 0 .3896984.2212986.6995791.6640523.9297985.4425972.2302194 1.1155704.4692031 2.0186065.7171076.9740895.2832748 1.7664762.5577852 2.3773168.8233749.610997.2657461 1.1421763.6596702 1.5938508 1.1820851.451518.522415.6773553 1.1997703.6773553 2.032066 0 1.3281047-.5269536 2.3683959-1.5805479 3.1210303-1.0535942.7526344-2.4746631 1.1288734-4.2632067 1.1288734-2.3020377 0-4.3561708-.5490209-6.1623995-1.6469062z"/><path d="m40.9064384 14.6526601c-.0530553.7437136.0973463 1.2927345.451518 1.6469062s.8412165.5311793 1.4609778.5311793c.407227 0 .8589015-.0707405 1.3547106-.2123778l-.2657461 3.1077274c-.6020763.2479045-1.3811601.3718568-2.337408.3718568-1.5229539 0-2.6871974-.407227-3.4928871-1.2218376-.8056897-.8146105-1.2085346-1.9655511-1.2085346-3.4531348 0-.3009598.0087643-.5311792.0264494-.6906582l.4250686-5.31241881h-2.5499422l.2389837-3.00146026h2.5499422l.2391403-3.16093925 4.1170306-1.30149878-.3452509 4.46243803h3.4265289l-.2389837 3.00146026h-3.4265289z"/><path d="m45.182948 18.4510458 1.3014988-2.7889259c.7438701.5134941 1.540639.9074182 2.3906198 1.1819286.8499807.2745105 1.6999614.4117657 2.5499422.4117657.7438701 0 1.2927345-.1062672 1.6469062-.3188015.3541716-.2125343.5313357-.495809.5313357-.8499807 0-.3718568-.2081521-.6640524-.6242999-.8765867-.4161479-.2123778-1.0935032-.4602823-2.032066-.7437136-.973933-.2655896-1.7707019-.5311792-2.3904632-.7967689-.6199178-.2657461-1.1554793-.6596702-1.6069973-1.1820852-.4516745-.5224149-.6773553-1.1997702-.6773553-2.0320659 0-.86766582.2433659-1.62906451.7304106-2.28435256.4868883-.65513154 1.1775465-1.16862571 2.0718183-1.5404825s1.916878-.5579417 3.0679751-.5579417c1.0093032 0 1.9965392.15055818 2.9617079.45167454.9650122.30095986 1.7752405.70834338 2.4303721 1.22183754l-1.2748929 2.68281528c-.655288-.47812392-1.3459463-.84121642-2.0719748-1.08912095-.7260284-.24790453-1.4343718-.37185679-2.1248736-.37185679-.7260284 0-1.2750493.10626716-1.6469061.31880147-.3718568.21237781-.5577852.50457336-.5577852.87643017 0 .3896984.2212986.6995791.6640523.9297985.4427538.2302194 1.1155704.4692031 2.018763.7171076.973933.2832748 1.7663198.5577852 2.3773168.8233749.6108405.2657461 1.1421763.6596702 1.5936943 1.1820851.451518.522415.6773553 1.1997703.6773553 2.032066 0 1.3281047-.5267971 2.3683959-1.5805479 3.1210303-1.0535942.7526344-2.4746631 1.1288734-4.2632066 1.1288734-2.3020378 0-4.3561709-.5490209-6.1623996-1.6469062z"/><path d="m67.4951382.97315048h7.543716c1.9478661 0 3.4664378.46935965 4.5554023 1.40776594 1.0891209.93856279 1.6336032 2.23129726 1.6336032 3.87820343 0 1.64674965-.5490209 2.94386628-1.6469062 3.89134985-1.0978853.9473271-2.6119184 1.4210689-4.5420993 1.4210689h-5.3654741v8.3138791h-2.1782419zm7.3577876 8.7921595c1.3990017 0 2.4525959-.30111636 3.1609393-.90319258.7083434-.60207621 1.062515-1.46974206 1.062515-2.60299755 0-1.133412-.3541716-1.9966957-1.062515-2.58985111-.7083434-.59331191-1.7619376-.88988961-3.1609393-.88988961h-5.1795457v6.98593085z"/><path d="m95.8636172 6.52470948v13.36070822h-2.1250301v-2.4170692c-.3895419.8322956-.9783152 1.4741242-1.7663198 1.9256423-.7880046.4516745-1.7043436.6773553-2.7491736.6773553-1.1864673 0-2.2267586-.2832748-3.1210303-.8499808-.8942718-.5665495-1.5849301-1.367857-2.0718183-2.4039227-.4870448-1.0359091-.7305671-2.2444437-.7305671-3.6256037 0-1.3813166.2479045-2.5987719.7437135-3.65236619.4959656-1.05359425 1.191006-1.87258693 2.0852778-2.45697803.8941152-.58439111 1.9256422-.87658666 3.0944244-.87658666 1.04483 0 1.9567869.23021942 2.7358707.69065826.7792403.46043884 1.3723957 1.10680608 1.7796227 1.93894521v-2.31080201zm-3.1873886 10.42560622c.7083433-.8942718 1.0623585-2.1647825 1.0623585-3.8116887 0-1.6469061-.3540152-2.9130347-1.0623585-3.79838565-.7083434-.88535096-1.7178031-1.32810469-3.0280662-1.32810469-1.3104196 0-2.3331823.45605669-3.0679751 1.36801357-.7349493.91195687-1.1024239 2.18246757-1.1024239 3.81168867 0 1.6290645.3630925 2.8864288 1.089121 3.7717797.7260284.885351 1.7530168 1.3281047 3.081278 1.3281047 1.3102631 0 2.3197228-.4471359 3.0280662-1.3414076z"/><path d="m111.933747 6.52470948v13.25444102c0 1.9833927-.509112 3.4841229-1.527336 4.5023469s-2.518955 1.5273361-4.502191 1.5273361c-2.036448 0-3.789621-.4604389-5.259363-1.3813166l.371857-1.7530168c.84998.478124 1.651288.8233749 2.403922 1.0359092.752478.2125343 1.580392.3188014 2.483584.3188014 1.292578 0 2.266511-.3408687 2.921799-1.0227627.655132-.6817374.982854-1.6954228.982854-3.0413691v-3.1607827c-.407384.8499807-1.005078 1.5094944-1.793082 1.978854-.788005.4692032-1.722029.7038048-2.802229.7038048-1.168782 0-2.209074-.274354-3.12103-.8233749-.911957-.5488644-1.615919-1.3281047-2.1117276-2.3374079-.4958091-1.0094597-.7437136-2.1693211-.7437136-3.4797407s.2479045-2.470281.7437136-3.47958423c.4958086-1.00945973 1.1997706-1.78854354 2.1117276-2.33756443.911956-.54886438 1.952248-.82337482 3.12103-.82337482 1.062515 0 1.987775.23021942 2.775779.69065826.788005.46043884 1.385543 1.10680608 1.792926 1.93894521v-2.31080201zm-3.253904 9.86782102c.734949-.8589016 1.102424-2.0408302 1.102424-3.546099 0-1.5051123-.367475-2.6871975-1.102424-3.54594251-.734793-.85890155-1.748634-1.28835233-3.041369-1.28835233-1.31042 0-2.34179.42945078-3.094424 1.28835233-.752635.85874501-1.128874 2.04083021-1.128874 3.54594251 0 1.5052688.376239 2.6871974 1.128874 3.546099.752634.8589015 1.784004 1.2881958 3.094424 1.2881958 1.292735 0 2.306576-.4292943 3.041369-1.2881958z"/><path d="m127.260162 13.138627h-9.801462c.017685 1.6999615.411765 2.9837752 1.182085 3.8515976.770319.8676658 1.890272 1.3014987 3.360014 1.3014987 1.558324 0 2.992696-.5224149 4.303116-1.5672449l.717264 1.5672449c-.584391.5490209-1.332644.9828538-2.244601 1.3014988-.911956.3188015-1.845981.478124-2.802228.478124-2.08966 0-3.727646-.6153792-4.914113-1.8459811-1.186467-1.2307583-1.779623-2.9174168-1.779623-5.060132 0-1.363475.26559-2.572166.796926-3.62576029.531179-1.05359425 1.274893-1.87258693 2.23114-2.45697803.956248-.58439111 2.045369-.87658666 3.267207-.87658666 1.770702 0 3.160939.58000895 4.170242 1.73987036 1.009304 1.1598614 1.514033 2.75793792 1.514033 4.79438592zm-8.380393-4.24990368c-.699423.67281665-1.146559 1.62030028-1.341408 2.84213778h7.7827c-.106111-1.2572078-.473586-2.21345565-1.102268-2.8687437-.628682-.65513154-1.50073-.98285381-2.616457-.98285381-1.11557 0-2.023145.33648658-2.722567 1.00945973z"/><path d="m129.703837 18.3447787.717265-1.5936944c.726028.566706 1.460821.973933 2.204691 1.2218376.743714.2479045 1.576009.3718568 2.496261.3718568 1.00946 0 1.776336-.1726255 2.297499-.5178764.522728-.3452508.784092-.8455986.784092-1.5007301 0-.5313358-.176851-.9562479-.530553-1.2750494-.355268-.3188014-.939033-.566706-1.752861-.7437135l-2.258529-.5313358c-1.115727-.2479046-1.97901-.6905018-2.589851-1.3281047-.610997-.6374465-.916339-1.3988452-.916339-2.2843526 0-1.16862572.469203-2.12049147 1.407766-2.85544076.938563-.73479278 2.178085-1.10226742 3.718411-1.10226742.939033 0 1.824853.15055818 2.655897.45151803.832608.30111636 1.532187.73494929 2.098737 1.30165528l-.716795 1.56708842c-1.256738-1.04482995-2.602684-1.56708842-4.037839-1.56708842-.955934 0-1.695266.18138975-2.217681.54448224-.522415.36293598-.783622.872048-.783622 1.52733603 0 .5488644.163861.9828538.491427 1.3014988.327565.3188015.854362.566706 1.580391.7437136l2.258216.5577852c1.239523.2834312 2.159774.7216463 2.76232 1.3149582.602546.5931554.903036 1.3678571.903036 2.324105 0 1.1510971-.469516 2.0718183-1.408548 2.7624765-.937467.6906583-2.212986 1.0359092-3.824992 1.0359092-2.248356 0-4.027979-.5754703-5.338399-1.7265674z"/><path d="m163.62325 13.9621584v1.8062286h-2.868744v4.1170307h-2.17699v-4.1170307h-8.712655v-1.6469061l9.110179-13.14833042h1.779466v12.98900792zm-11.500016 0h6.454282v-9.29688939z"/><path d="m168.936607 17.149547v1.9391018c0 .7437135-.123639 1.425451-.372483 2.0452123-.247278.6197613-.663582 1.2218376-1.247347 1.8062287l-1.011025-.7703195c.691754-.796769 1.081452-1.5583242 1.169095-2.2843526h-1.273954v-2.7358707z"/><path d="m182.52284 8.76915321c.893645.50472986 1.580704 1.20853458 2.058046 2.11172719.478906.903036.718359 1.947866.718359 3.1343333s-.261364 2.2400616-.784092 3.1609393c-.522728.9207211-1.266128 1.6336032-2.231766 2.1381765-.964074.5047299-2.094043.7570166-3.386777.7570166-1.150315 0-2.283414-.2079957-3.399297-.6241435s-2.054916-.987236-2.815532-1.7132645l.823218-1.673512c1.752861 1.4522134 3.551108 2.1782419 5.391611 2.1782419 1.328731 0 2.369492-.3763954 3.122282-1.1290298.751226-.7524779 1.128404-1.7752406 1.128404-3.0678186 0-1.2573642-.372483-2.2710496-1.115883-3.0413691-.743401-.7703195-1.735645-1.15547928-2.975168-1.15547928-1.806072 0-3.249051.73479278-4.328938 2.20469138h-1.514973v-11.07651212h11.341946v1.80622865h-9.163391v6.74679062c1.045456-1.00930322 2.382012-1.51403309 4.011233-1.51403309 1.186311 0 2.227072.25228668 3.120718.75701655z"/><path d="m191.010127 17.149547v1.9391018c0 .7437135-.125205 1.425451-.372483 2.0452123-.247279.6197613-.663583 1.2218376-1.248913 1.8062287l-1.00946-.7703195c.691754-.796769 1.081452-1.5583242 1.169095-2.2843526h-1.275518v-2.7358707z"/><path d="m204.543147 8.76915321c.893646.50472986 1.58853 1.21307323 2.084652 2.12503009.496122.9119569.743401 1.9522482.743401 3.1210304s-.259799 2.2134557-.782527 3.1343333c-.522728.9208777-1.244218 1.6423675-2.166035 2.1647825-.920251.522415-1.964142.7836225-3.133238.7836225-2.284978 0-4.047229-.7969254-5.286751-2.3906198-1.239523-1.5936943-1.859284-3.8603618-1.859284-6.7998459 0-2.12503014.287969-3.94894389.863909-5.47189779.57594-1.52279739 1.406984-2.6828153 2.496261-3.47958421 1.089278-.79692542 2.396098-1.19538813 3.918895-1.19538813 1.097103 0 2.164469.20377001 3.200535.61099702s1.943797.98285382 2.721629 1.7265674l-.823219 1.67335558c-.88582-.74371359-1.735644-1.29273448-2.549472-1.64690617-.813828-.35401518-1.646437-.53117927-2.496261-.53117927-1.629221 0-2.89535.72602848-3.798386 2.17808544-.903036 1.45205695-1.355336 3.48850502-1.355336 6.10934423v.3984627c.406914-1.0094598 1.072061-1.80622867 1.992313-2.39061978s1.975098-.87658666 3.161409-.87658666c1.150314 0 2.172295.25228668 3.067505.75701655zm-.438215 8.34048499c.743401-.770163 1.115884-1.7929257 1.115884-3.0678186 0-1.2573642-.377178-2.2710496-1.129969-3.0413691s-1.73095-1.15547928-2.934476-1.15547928c-1.239523 0-2.248983.38954188-3.028379 1.16878218-.779397.7790838-1.169096 1.7883871-1.169096 3.0280662 0 1.2572078.389699 2.2754318 1.169096 3.0546721.779396.7790838 1.796681 1.1686257 3.054985 1.1686257 1.203526 0 2.178555-.3851597 2.921955-1.1554792z"/></g><g transform="translate(660.011742 224.553185)"><path d="m.21765.193821h263.332986v106.422426h-263.332986z" fill="#c9177e"/><path d="m263.550636 106.616248h-263.33298624v-106.42242661h263.33298624zm-260.79463916-103.88400537v101.34558437h258.25629216v-101.34558437z" fill="#000"/></g><g fill="#f2f2f2" fill-rule="nonzero" transform="translate(688.758199 242.51167)"><path d="m.07350476 31.0947909 1.49915513-3.0461739c1.70855822 1.4504369 3.44902547 2.4820676 5.22225648 3.0946072 1.7729461.6125397 3.83592263.9188095 6.18921443.9188095 2.7720979 0 4.9077245-.5401745 6.4068796-1.6199537 1.4988702-1.080064 2.2484478-2.6031509 2.2484478-4.5695456 0-1.1604065-.3626804-2.1034326-1.0880413-2.8285086-.7253609-.7253609-1.6763643-1.2977293-2.8527253-1.7165355-1.1766459-.419091-2.7481662-.8544215-4.7145608-1.3057065-2.6433222-.5803457-4.81940488-1.2088399-6.52767819-1.8857674-1.70855822-.6769275-3.0948921-1.6521476-4.15843184-2.9253753-1.06382464-1.2732277-1.59573696-2.9416147-1.59573696-5.0045912 0-1.96639471.5156729-3.69916961 1.5473036-5.19803984 1.0316307-1.49915513 2.49004482-2.66753887 4.37609708-3.505721 1.88576736-.83818214 4.08578181-1.25727321 6.60004331-1.25727321 2.3854857 0 4.6097168.37094261 6.6729782 1.11225801 2.0629765.74131541 3.8037287 1.82137947 5.2222565 3.23962239l-1.5473036 3.04645873c-1.6119764-1.38633388-3.2478845-2.40172515-4.9080094-3.04645873-1.6601248-.64473357-3.473527-.96695791-5.4399217-.96695791-2.6755161 0-4.77068658.57208353-6.28579623 1.71653548-1.51510966 1.14445195-2.27266449 2.71597223-2.27266449 4.71456088 0 1.7407521.6606881 3.0461738 1.98234919 3.9165499 1.32166109.870376 3.35272853 1.6279309 6.09263253 2.2726645 2.9658315.7091214 5.2949066 1.3618322 6.9872254 1.9584174 1.6923187.5963002 3.1025844 1.4988702 4.2307969 2.70771 1.1284975 1.2088399 1.6926037 2.8125541 1.6926037 4.8111427 0 1.9342007-.5159578 3.6344968-1.5473036 5.101458-1.0316307 1.4666763-2.5065691 2.602866-4.4245304 3.4088542s-4.1664091 1.2088399-6.7453434 1.2088399c-5.3832262 0-9.67071872-1.4507218-12.86219264-4.3518804z"/><path d="m52.0054694 22.7779272h-17.8425672c.0324788 3.0946072.7495775 5.4316596 2.1518659 7.011442 1.4022884 1.5794975 3.4413332 2.3692463 6.1168493 2.3692463 2.8367707 0 5.447899-.9510034 7.8330998-2.8530102l1.3057066 2.8530102c-1.0638247.9994368-2.425657 1.7891855-4.0857818 2.3692463-1.6604098.5803457-3.3607058.8703761-5.101458.8703761-3.8037286 0-6.7855146-1.1202353-8.9453578-3.3604209-2.1598432-2.2404705-3.2399073-5.310861-3.2399073-9.2114564 0-2.4820676.4837639-4.6823669 1.4507218-6.6003282s2.3210978-3.4088543 4.06185-4.4726789c1.7407521-1.0638247 3.7231013-1.595737 5.9473324-1.595737 3.2236679 0 5.7541688 1.0558474 7.5915028 3.1672572 1.8376189 2.1114099 2.7561435 5.0205458 2.7561435 8.7276926zm-15.2553708-7.736518c-1.2735126 1.2247944-2.0874781 2.949592-2.4418963 5.1738231h14.1676143c-.1934486-2.288619-.8623988-4.0293711-2.0068508-5.2222565-1.144167-1.1926004-2.7319268-1.7891855-4.7627093-1.7891855-2.0307826 0-3.6829301.6125397-4.9561579 1.8376189z"/><path d="m61.99072 33.8509343c-1.7569915-1.0313458-3.1108466-2.4900448-4.06185-4.3760971-.9510034-1.8857673-1.426505-4.0857818-1.426505-6.6000433 0-2.5145464.4837638-4.7308002 1.4507217-6.6487615s2.3453146-3.4088543 4.1342152-4.4726789c1.7891855-1.0638247 3.8763787-1.595737 6.2618644-1.595737 1.6441703 0 3.2316451.2820531 4.7629942.8461594 1.5310642.5641063 2.7963147 1.3458778 3.7957514 2.3453145l-1.3057066 2.9011587c-1.2247943-.9672429-2.4097024-1.6763643-3.5538694-2.1276493-1.144452-.451285-2.3131206-.6769276-3.505721-.6769276-2.4820676 0-4.4325077.8302049-5.8507507 2.4903298-1.4185278 1.6601248-2.1276492 3.9729605-2.1276492 6.9387919 0 2.9333526.7011442 5.2139943 2.1034326 6.8419253 1.4022884 1.6279309 3.3604209 2.4418963 5.8749673 2.4418963 1.1926004 0 2.361269-.2256425 3.505721-.6769275 1.144167-.451285 2.3290751-1.1604065 3.5538694-2.1276493l1.3057066 2.9011586c-1.0316307.9672429-2.3290751 1.7327749-3.8926181 2.2968812s-3.1832118.8461594-4.859576.8461594c-2.3532918 0-4.4082911-.5156729-6.1649978-1.5473036z"/><path d="m87.1586914 13.8325694v13.2972382c0 1.80514.3709426 3.0703905 1.112258 3.7957514s1.7891856 1.0880413 3.1430406 1.0880413c.90257 0 1.7729461-.1450152 2.6111282-.4353305v3.3364892c-.9994367.3225092-2.1276493.4834789-3.3849225.4834789-2.3208129 0-4.1342151-.6527108-5.4396368-1.9581325-1.3057066-1.3057066-1.9584174-3.2316451-1.9584174-5.7783855v-13.8291505h-4.7387775v-3.0946072h4.7387775v-6.23764778l3.9165499-1.4022884v7.63993618h6.9630087v3.0946072z"/><path d="m98.8604776 35.0597742v-24.321812h3.9165494v24.321812zm-.3868971-34.62130978h4.7869255v4.44874713h-4.7869255z"/><path d="m114.381947 33.8509343c-1.740752-1.0313458-3.08663-2.498307-4.037633-4.4000289-.950719-1.9020067-1.426221-4.1262378-1.426221-6.6729782 0-2.5464555.475502-4.7709715 1.426221-6.6726933.951003-1.9020068 2.296881-3.3686831 4.037633-4.4003138s3.75558-1.5473036 6.044199-1.5473036c2.288904 0 4.303447.5156729 6.044199 1.5473036s3.08663 2.498307 4.037634 4.4003138c.951003 1.9017218 1.426505 4.1262378 1.426505 6.6726933 0 2.5467404-.475502 4.7709715-1.426505 6.6729782-.951004 1.9017219-2.296882 3.3686831-4.037634 4.4000289-1.740752 1.0316307-3.755295 1.5473036-6.044199 1.5473036-2.288619 0-4.303447-.5156729-6.044199-1.5473036zm11.604919-4.0857818c1.289468-1.5957369 1.934201-3.924812 1.934201-6.9872253 0-2.9655465-.660973-5.2624277-1.982634-6.8903586s-3.158995-2.4418964-5.512287-2.4418964c-2.385486 0-4.239059.8139655-5.56072 2.4418964s-1.982349 3.9248121-1.982349 6.8903586c0 3.0624133.652711 5.3914884 1.958132 6.9872253 1.305707 1.595737 3.167257 2.393463 5.584937 2.393463s4.271253-.797726 5.56072-2.393463z"/><path d="m158.915857 19.7799018v15.2798724h-3.916835v-15.0864238c0-2.2564251-.451285-3.9085727-1.353855-4.9561579s-2.320812-1.5715203-4.255013-1.5715203c-2.256425 0-4.06185.693167-5.415705 2.079216-1.353855 1.3860489-2.030783 3.2558618-2.030783 5.6091536v13.9257324h-3.91655v-17.5041035c0-2.5142615-.12906-4.786926-.386897-6.8177085h3.723101l.386898 4.3518804c.741315-1.5797825 1.853573-2.7965996 3.336489-3.6507362 1.482915-.8544216 3.175234-1.2814899 5.076956-1.2814899 5.834796 0 8.752194 3.2074284 8.752194 9.6222853z"/><path d="m185.630847 33.319022c-2.401725-1.4182429-4.247891-3.4572876-5.535648-6.1165644-1.290607-2.6595616-1.934486-5.7946249-1.934486-9.404905 0-3.6105649.643879-6.7293888 1.934486-9.35647159 1.287757-2.62708276 3.133923-4.64988805 5.535648-6.06841587 2.401726-1.41824292 5.230804-2.12764929 8.487236-2.12764929 2.384631 0 4.56983.36268044 6.552749 1.08804133 1.98007.72536088 3.69803 1.81340221 5.148182 3.26383907l-1.498585 3.04645873c-1.643886-1.41852782-3.264979-2.4339191-4.860431-3.04645873s-3.358996-.91852454-5.293482-.91852454c-3.772105 0-6.69805 1.22479436-8.777835 3.67466798-2.079786 2.44987362-3.11683 5.93137791-3.11683 10.44451291 0 4.545329 1.031346 8.0507651 3.094037 10.5168782 2.062692 2.466113 4.997184 3.6991695 8.800628 3.6991695 1.934486 0 3.69803-.3062698 5.293482-.9188094 1.595452-.6125397 3.216545-1.6279309 4.860431-3.0461739l1.498585 3.0461739c-1.450152 1.4507217-3.168112 2.5384782-5.148182 3.263839-1.982919.7253609-4.168118 1.0880414-6.552749 1.0880414-3.256432 0-6.08551-.7091215-8.487236-2.1276493z"/></g><g fill="#f2f2f2" fill-rule="nonzero" transform="translate(683.970025 292.181215)"><path d="m.10947429 20.3655834 1.52334352-19.36893462h4.27110005l-1.27858915 15.91416332h8.65071269l-.2720028 3.4547713z"/><path d="m15.3163023 20.3655834 1.0881712-13.79215735h4.1077702l-1.0881712 13.79215735zm1.4145104-20.26668789h4.4070212l-.2992511 3.86301581h-4.4070212z"/><path d="m21.9540024 18.8965763 1.3329256-2.8562691c.7616718.5258933 1.5778402.9293293 2.4483451 1.2104683.870505.2811389 1.7410099.4217084 2.6115148.4217084.7616717 0 1.3239496-.1088332 1.6866734-.3264995.3627237-.2176663.5440054-.5077811.5440054-.8705049 0-.3808359-.213018-.680087-.6392144-.8977533-.4261964-.217506-1.1199075-.4713966-2.0811335-.7616717-.9974502-.2720027-1.8136186-.5440055-2.4483451-.8160082-.6347265-.272163-1.1833802-.675599-1.6458009-1.2106285-.4624206-.5350296-.6937111-1.2287407-.6937111-2.0811335 0-.88861705.2494026-1.66840095.7482079-2.33951199.4986449-.67095076 1.2059803-1.19684408 2.1218457-1.57767996s1.963164-.5714141 3.1420563-.5714141c1.0336745 0 2.0447488.15419365 3.0330628.46258095.9884743.30822702 1.8181067.72544747 2.4892177 1.25134079l-1.3058375 2.74759621c-.6709507-.489669-1.3782861-.86152895-2.1218457-1.11541954-.7435596-.25389058-1.4690071-.38083588-2.1763424-.38083588-.7435596 0-1.3056772.10883315-1.6865131.32649945-.3808359.21750602-.5712538.51675707-.5712538.89759297 0 .3991083.2266422.7164716.6800869.95225.4532845.2357784 1.1425077.4805328 2.067349.7344234.9976105.2901149 1.8091307.5712538 2.434721.8432566.6257505.272163 1.169756.675599 1.6323369 1.2106285.4624207.5350295.6937112 1.2287407.6937112 2.0811334 0 1.360174-.5396778 2.4255848-1.6187128 3.1963928s-2.5344179 1.1561318-4.3661487 1.1561318c-2.3576242 0-4.4613577-.5622779-6.3112007-1.6866734z"/><path d="m41.8941909 15.0064724c-.0543365.7616718.0996969 1.3239497.4624206 1.6866734.3627238.3627238.861529.5440055 1.4962555.5440055.4170601 0 .8796411-.0724486 1.3874223-.217506l-.272163 3.1827685c-.6166144.2538906-1.4145104.3808359-2.3938485.3808359-1.5597281 0-2.7520842-.4170602-3.5772286-1.2513408s-1.2377166-2.0130125-1.2377166-3.5365164c0-.308227.0089759-.5440054.0270881-.7073353l.4353326-5.44069574h-2.6115148l.2447544-3.07393541h2.6115147l.2449147-3.23726527 4.216443-1.33292558-.3535875 4.57019085h3.509268l-.2447544 3.07393541h-3.509268z"/><path d="m46.2739638 18.8965763 1.3329255-2.8562691c.7618321.5258933 1.5778403.9293293 2.4483452 1.2104683.8705049.2811389 1.7410098.4217084 2.6115147.4217084.7618321 0 1.3239497-.1088332 1.6866734-.3264995.3627238-.2176663.5441658-.5077811.5441658-.8705049 0-.3808359-.2131784-.680087-.6393748-.8977533-.4261963-.217506-1.1199075-.4713966-2.0811334-.7616717-.9974502-.2720027-1.8134584-.5440055-2.4481849-.8160082-.6348867-.272163-1.1833801-.675599-1.6458008-1.2106285-.462581-.5350296-.6937112-1.2287407-.6937112-2.0811335 0-.88861705.2492424-1.66840095.7480476-2.33951199.498645-.67095076 1.2059803-1.19684408 2.1218457-1.57767996s1.9631641-.5714141 3.1420563-.5714141c1.0336745 0 2.0447489.15419365 3.0332232.46258095.988314.30822702 1.8181066.72544747 2.4890574 1.25134079l-1.3056773 2.74759621c-.671111-.489669-1.3784463-.86152895-2.1220059-1.11541954-.7435597-.25389058-1.4690071-.38083588-2.1761822-.38083588-.7435596 0-1.3058375.10883315-1.6866734.32649945-.3808358.21750602-.5712538.51675707-.5712538.89759297 0 .3991083.2266422.7164716.680087.95225.4534447.2357784 1.1425076.4805328 2.0675093.7344234.9974502.2901149 1.8089704.5712538 2.4347209.8432566.6255903.272163 1.169756.675599 1.6321767 1.2106285s.6937111 1.2287407.6937111 2.0811334c0 1.360174-.5395175 2.4255848-1.6187127 3.1963928-1.079035.770808-2.5344179 1.1561318-4.3661488 1.1561318-2.3576241 0-4.4613577-.5622779-6.3112006-1.6866734z"/><path d="m69.124918.99664878h7.7258714c1.9949004 0 3.5501405.4806931 4.6653998 1.44175873 1.1154195.96122592 1.6730492 2.28517557 1.6730492 3.97184896 0 1.6865131-.5622779 3.01495072-1.6866734 3.98531283-1.1243955.9702019-2.6749874 1.4553829-4.6517756 1.4553829h-5.4950322v8.5146312h-2.2308392zm7.5354534 9.00446052c1.4327828 0 2.5118178-.30838734 3.2372653-.92500167.7254475-.61661432 1.0881712-1.50523137 1.0881712-2.66585116 0-1.16078007-.3627237-2.04490916-1.0881712-2.65238727-.7254475-.60763839-1.8044825-.91137745-3.2372653-.91137745h-5.3046142v7.15461755z"/><path d="m98.1784001 6.6822592v13.6833242h-2.1763424v-2.4754332c-.3989481.8523927-1.0019382 1.5097193-1.8089705 1.97214-.8070322.4625809-1.7454977.6937111-2.8155568.6937111-1.2151165 0-2.2805273-.2901148-3.1963927-.8705049-.9158655-.5802297-1.6232008-1.4008862-2.1218457-2.4619693-.4988053-1.0609229-.7482079-2.2986395-.7482079-3.7131498 0-1.4146707.2538906-2.6615235.7616717-3.74055852.5079415-1.07903499 1.2197648-1.91780358 2.1356302-2.51630576.9157051-.59850218 1.97214-.89775327 3.1691444-.89775327 1.0700591 0 2.0040366.23577845 2.8019327.70733533.7980563.47155689 1.4055344 1.13353171 1.8225946 1.9857642v-2.36660008zm-3.2643534 10.6773494c.7254475-.9158654 1.088011-2.2170547 1.088011-3.9037281 0-1.6866733-.3625635-2.9833746-1.088011-3.89010384-.7254474-.90672919-1.7592822-1.36017394-3.1011837-1.36017394-1.3420618 0-2.3895208.46706892-3.1420563 1.40104648-.7526958.9339776-1.1290438 2.2351668-1.1290438 3.9037281 0 1.6684009.37186 2.9561263 1.1154196 3.8628555s1.7953463 1.3601739 3.1556805 1.3601739c1.3419015 0 2.3757363-.4579327 3.1011837-1.3737981z"/><path d="m114.636569 6.6822592v13.574491c0 2.031285-.521405 3.5682527-1.564216 4.6110634s-2.579779 1.5642161-4.610903 1.5642161c-2.085622 0-3.881128-.4715569-5.38636-1.4146707l.380836-1.7953462c.870505.489669 1.691162.8432565 2.46197 1.0609228.770647.2176663 1.618552.3264995 2.543554.3264995 1.323789 0 2.321239-.3490996 2.99235-1.047459.670951-.6981991 1.006587-1.7363615 1.006587-3.1148079v-3.237105c-.417221.8705049-1.029347 1.5459436-1.836379 2.0266367-.807033.4805329-1.76361.7207993-2.869894.7207993-1.197004 0-2.262415-.2809787-3.196392-.8432566-.933978-.5621176-1.654937-1.3601739-2.162719-2.3938484-.507781-1.0338348-.761671-2.2217029-.761671-3.5637647s.25389-2.52993.761671-3.56360448c.507782-1.03383477 1.228741-1.83173082 2.162719-2.39400871.933977-.56211761 1.999388-.84325656 3.196392-.84325656 1.088172 0 2.035773.23577845 2.842806.70733533.807032.47155689 1.418998 1.13353171 1.836218 1.9857642v-2.36660008zm-3.332474 10.1060956c.752695-.8796411 1.129043-2.0901094 1.129043-3.6317253 0-1.5414557-.376348-2.7520842-1.129043-3.63156509-.752536-.87964112-1.790859-1.31946169-3.114808-1.31946169-1.342062 0-2.398337.43982057-3.169145 1.31946169-.770808.87948089-1.156131 2.09010939-1.156131 3.63156509 0 1.5416159.385323 2.7520842 1.156131 3.6317253s1.827083 1.3193014 3.169145 1.3193014c1.323949 0 2.362272-.4396603 3.114808-1.3193014z"/><path d="m130.333066 13.4558805h-10.038135c.018112 1.7410099.421708 3.0558233 1.210628 3.9446006.788921.8886171 1.935916 1.3329256 3.441148 1.3329256 1.595952 0 3.064959-.5350295 4.407021-1.6050886l.734584 1.6050886c-.598503.5622779-1.364823 1.0065864-2.2988 1.3329256-.933978.3264995-1.890555.489669-2.869893.489669-2.140119 0-3.817656-.6302385-5.032772-1.8905552-1.215117-1.260477-1.822595-2.9878626-1.822595-5.1823172 0-1.3963982.272003-2.6342751.816169-3.71331012.544005-1.07903499 1.305677-1.91780358 2.285015-2.51630576s2.094757-.89775327 3.346098-.89775327c1.813459 0 3.237266.59401422 4.27094 1.78188236 1.033675 1.18786815 1.550592 2.82453279 1.550592 4.91015419zm-8.582752-4.35252451c-.716311.6890629-1.174244 1.65942501-1.373798 2.91076581h7.970625c-.108672-1.2875651-.48502-2.26690312-1.128883-2.93801417-.643863-.67095075-1.536968-1.00658641-2.679636-1.00658641-1.142507 0-2.071997.34461159-2.788308 1.03383477z"/><path d="m132.835747 18.7877432.734584-1.6321767c.74356.58039 1.496095.9974502 2.257927 1.2513408.761672.2538906 1.614065.3808359 2.556538.3808359 1.033834 0 1.819228-.1767938 2.352975-.5303813.535351-.3535875.803026-.866017.803026-1.5369677 0-.5441658-.181122-.9793381-.543365-1.3058375-.363845-.3264995-.961706-.5803901-1.795186-.7616718l-2.313065-.5441657c-1.142668-.2538906-2.026797-.7071751-2.652387-1.360174-.625751-.6528386-.938466-1.4326225-.938466-2.339512 0-1.19684406.480533-2.17169415 1.441759-2.92438998.961226-.75253555 2.230679-1.12888347 3.808199-1.12888347.961706 0 1.868917.15419366 2.720027.46242067.852713.30838731 1.569185.75269584 2.149415 1.33308587l-.734103 1.60492831c-1.287084-1.07005906-2.665531-1.60492831-4.135339-1.60492831-.979018 0-1.736202.18576969-2.271231.55762964-.53503.37169967-.802544.89310502-.802544 1.56421607 0 .5621176.167817 1.0065864.503293 1.3329256.335475.3264994.874993.58039 1.618552.7616717l2.312745.5712539c1.269453.2902751 2.211925.7390716 2.829021 1.34671.617095.6074781.924841 1.4008862.924841 2.3802243 0 1.1788922-.480854 2.1218457-1.44256 2.829181-.960104.7073353-2.266423 1.0609228-3.917353 1.0609228-2.302646 0-4.125241-.5893659-5.467303-1.7682581z"/><path d="m153.917963.99664878h12.785891v1.65942503l-9.084923 17.70950959h-2.39465l9.032029-17.49184329h-10.338347z"/><path d="m173.015856 17.5636507v1.9859245c0 .7616718-.126624 1.4598709-.381477 2.0945973-.253249.6347265-.679606 1.2513408-1.277467 1.849843l-1.035437-.7889201c.708457-.8160082 1.107565-1.5959524 1.197324-2.339512h-1.304715v-2.8019327z"/><path d="m188.807081 12.1909156c.698841.8434168 1.048261 1.8543309 1.048261 3.0332231 0 1.6502888-.626712 2.9516384-1.878534 3.9037281-1.250219.9520897-2.938014 1.4281345-5.058578 1.4281345-2.122166 0-3.809961-.4760448-5.06018-1.4281345-1.251822-.9520897-1.876931-2.2534393-1.876931-3.9037281 0-1.1788922.357434-2.1944545 1.073906-3.0468473.716471-.8523928 1.700618-1.4417587 2.95244-1.7682582-1.16046-.3444513-2.050039-.91121715-2.667134-1.70013727-.615492-.78892012-.924841-1.71840971-.924841-2.78830849 0-1.03383478.272483-1.93607601.815848-2.70688399.544967-.77064769 1.311127-1.36914987 2.300082-1.79534625.987352-.42619638 2.117357-.63937472 3.38681-.63937472s2.397856.21317834 3.386811.63937472c.987352.42619638 1.753512 1.02469856 2.298479 1.79534625.543365.77080798.815848 1.67304921.815848 2.70688399 0 1.06989878-.312555 1.99938837-.939267 2.78830849-.625109.78892012-1.500262 1.35568597-2.623856 1.70013727 1.269452.3446116 2.251996.9386258 2.950836 1.7818824zm-9.004781-3.59085282c.770969.64386269 1.809612 1.03832275 3.11593 1.18338018 1.304716-.14505743 2.343359-.53951749 3.114327-1.18338018.770969-.64386268 1.155651-1.48263127 1.155651-2.51630576 0-1.07005906-.376668-1.91331562-1.128402-2.52992994-.753337-.61661432-1.799995-.92500163-3.141576-.92500163-1.343183 0-2.389841.30838731-3.143178.92500163-.751734.61661432-1.128403 1.45987088-1.128403 2.52992994 0 1.03367449.384683 1.87244308 1.155651 2.51630576zm6.624557 9.18125422c.815848-.6166143 1.224574-1.5143676 1.224574-2.6932598 0-1.0698988-.431166-1.9267795-1.291893-2.5706422-.862331-.6438627-2.009967-1.0383227-3.441308-1.1833802-1.432943.1450575-2.580579.5395175-3.441307 1.1833802-.86233.6438627-1.293496 1.5007434-1.293496 2.5706422 0 1.1788922.408726 2.0766455 1.224574 2.6932598s1.985924.9248414 3.510229.9248414c1.522703 0 2.692779-.3082271 3.508627-.9248414z"/><path d="m195.622377 17.5636507v1.9859245c0 .7616718-.128228 1.4598709-.381477 2.0945973-.25325.6347265-.679606 1.2513408-1.27907 1.849843l-1.033835-.7889201c.708457-.8160082 1.107566-1.5959524 1.197325-2.339512h-1.306318v-2.8019327z"/><path d="m210.339696 3.22732763c1.26785 1.63217667 1.902577 3.95357653 1.902577 6.96419957 0 3.2824655-.657167 5.8351558-1.971499 7.6577504-1.314333 1.8225946-3.151193 2.7339721-5.508977 2.7339721-1.105963 0-2.189486-.2085301-3.250569-.6257505-1.061083-.4170602-1.998747-1.0064262-2.816198-1.7680979l.871947-1.7139218c.924842.7799442 1.803201 1.3465498 2.638283 1.7002976.833479.3535875 1.676575.5303813 2.529288.5303813 1.668562 0 2.960454-.7435596 3.877282-2.2306789.915224-1.4871192 1.373637-3.5727406 1.373637-6.2568642v-.35358755c-.416739 1.01556235-1.097948 1.81810665-2.040421 2.40747265-.944075.5895262-2.02279.8841291-3.237746.8841291-1.178091 0-2.221543-.2583786-3.128753-.775296-.905607-.5167571-1.614064-1.2422046-2.120563-2.1761821-.508102-.93413786-.762954-1.99954868-.762954-3.19655303 0-1.19684408.267675-2.26690314.803025-3.21001692.53535-.94295348 1.274262-1.68202514 2.216734-2.21705467.944076-.53502953 2.013173-.8025443 3.210498-.8025443 2.340153 0 4.143353.81616848 5.414409 2.44834515zm-2.176663 6.85536647c.796614-.79805638 1.195722-1.83173087 1.195722-3.10118381 0-1.28772536-.399108-2.33053607-1.195722-3.12843212-.798217-.79805633-1.841668-1.19700436-3.128753-1.19700436-1.232587 0-2.231159.39446006-2.992511 1.18338018-.761351.78892012-1.142828 1.83621879-1.142828 3.1420563 0 1.28756508.381477 2.32588782 1.142828 3.11480791.761352.7889202 1.767938 1.1833802 3.01976 1.1833802 1.269453 0 2.303287-.3991083 3.101504-1.1970043z"/></g><path d="m17.8381448 46.9715784h11.4351924v5.0258027h-28.91585333v-5.0258027h11.43519243v-39.40433576l-10.63396507 6.77374006v-5.75407418l13.25608567-8.44915063h3.4233479z" fill="#f2f2f2" fill-rule="nonzero" transform="translate(21.524072 376.769072)"/><path d="m35.1591611 47.829883v5.0258027h-33.35886717v-4.5159698l18.13640567-20.1027815c2.4277146-2.719109 4.2001136-5.1712853 5.3167679-7.3565289 1.1170835-2.1848144 1.6754107-4.3700579 1.6754107-6.5553015 0-2.8645916-.8256891-5.06185144-2.476638-6.59135026-1.6509489-1.52992798-4.0057077-2.29467739-7.0651345-2.29467739-4.9528467 0-9.85677016 1.99083755-14.71262852 5.97294185l-2.25819944-4.58892566c2.03976092-1.94234334 4.61295815-3.4958747 7.72087917-4.66145237 3.10749189-1.16557766 6.23944539-1.74793734 9.39586059-1.74793734 4.7584408 0 8.5216774 1.22608814 11.2897098 3.67826442 2.7676032 2.45217629 4.1516194 5.76609041 4.1516194 9.94174235 0 2.9620092-.667761 5.8150138-2.003283 8.5585845-1.3350928 2.7431415-3.5568143 5.8145846-6.6643061 9.2134709l-14.7855845 16.024118z" fill="#f2f2f2" fill-rule="nonzero" transform="translate(113.15712 375.910768)"/><path d="m32.1649655 30.7131432c1.6024547 2.1367493 2.403682 4.8318258 2.403682 8.0848003 0 4.5159698-1.5294988 8.0727841-4.5884964 10.6708722-3.0594268 2.5976589-7.2110463 3.8967029-12.4548583 3.8967029-3.3508212 0-6.5677469-.5587563-9.65077711-1.6754106-3.08345933-1.1166543-5.69356366-2.6950765-7.82988385-4.7344083l2.33072618-4.5884964c4.806935 3.9816751 9.80827598 5.9725126 15.00402298 5.9725126 3.6902807 0 6.494791-.825689 8.4126727-2.4766379 1.9178817-1.650949 2.8770371-4.0786636 2.8770371-7.283573 0-6.3608955-3.9816751-9.5413433-11.9450254-9.5413433h-5.9729418v-5.0258026h4.8073642c3.8361924 0 6.77374-.8497216 8.8130718-2.5491647 2.0393317-1.6994432 3.0594268-4.1275869 3.0594268-7.283573 0-2.8165266-.8377053-4.97730847-2.513116-6.48234561-1.6749814-1.50546629-4.0421855-2.25819944-7.1016123-2.25819944-4.9528468 0-9.85677025 1.99083755-14.71262861 5.97294185l-2.25819944-4.58892566c2.08825513-1.99083756 4.6494361-3.55681433 7.68440122-4.69793031 3.03496513-1.14111599 6.20339663-1.7114594 9.50529443-1.7114594 4.6614524 0 8.388211 1.18961019 11.180276 3.56883059 2.7920649 2.37922039 4.1880973 5.58412982 4.1880973 9.61429918 0 2.9620092-.7287006 5.5596681-2.1852435 7.7934059-1.456543 2.2337377-3.4718422 3.8361925-6.0454686 4.8073641 3.0589977.8737541 5.390153 2.3792204 6.9921786 4.5155406z" fill="#f2f2f2" fill-rule="nonzero" transform="translate(210.490122 375.910768)"/><path d="m37.9113149 35.7548245v4.9528468h-7.8663618v11.2897098h-5.9725127v-11.2897098h-23.89005067v-4.5159697l24.98267247-36.05394371h4.8798909v35.61706661zm-31.53797398 0h17.69909948v-25.4925054z" fill="#f2f2f2" fill-rule="nonzero" transform="translate(344.333123 377.543534)"/><path d="m27.0614862 21.5151218c2.4521763 1.3840162 4.3340092 3.3143433 5.6450695 5.7905521 1.3110603 2.4766379 1.9663758 5.3412296 1.9663758 8.5946332 0 3.2534037-.7162552 6.142457-2.1487656 8.6675892-1.4320812 2.5251322-3.4718421 4.4794918-6.1179953 5.863508-2.6465822 1.383587-5.7420578 2.0758097-9.2868559 2.0758097-3.1559861 0-6.2634779-.5707726-9.32290473-1.7118886-3.05899765-1.1411159-5.63262403-2.7070927-7.72045001-4.6979303l2.25777029-4.5884964c4.80736415 3.9816751 9.73574925 5.9725126 14.78558445 5.9725126 3.6422156 0 6.494791-1.0316821 8.5585845-3.0954756 2.0633643-2.0637934 3.0954756-4.8678746 3.0954756-8.4126727 0-3.4473804-1.0196659-6.2274291-3.0589977-8.3397168-2.0397609-2.1122876-4.7588699-3.1684314-8.1577562-3.1684314-4.9528468 0-8.91048936 2.0152992-11.87249858 6.0454685h-4.15161943v-30.37282541h31.10109691v4.95284678h-25.12858424v18.50075603c2.86502084-2.7680324 6.53126894-4.1520486 10.99831534-4.1520486 3.2534036 0 6.105979.6922227 8.5581553 2.0758097z" fill="#f2f2f2" fill-rule="nonzero" transform="translate(442.786269 377.543534)"/><path d="m28.6326128 22.3734264c2.4521763 1.3840162 4.3580417 3.3263595 5.7175962 5.82703s2.0393318 5.3536751 2.0393318 8.5581554c0 3.2049094-.7162552 6.0699302-2.1487656 8.5946332-1.4320813 2.5251322-3.4109026 4.5039535-5.9360347 5.9364639-2.5247031 1.4320813-5.3897239 2.1483365-8.5946333 2.1483365-6.2639071 0-11.09530378-2.1848144-14.49419005-6.5553015-3.39931543-4.370058-5.09875857-10.5854709-5.09875857-18.6458095 0-5.82703.78921109-10.828371 2.36720413-15.004023 1.57799303-4.1760811 3.86022501-7.35652885 6.84669592-9.5417724 2.98604177-2.18524355 6.56731777-3.27743617 10.74339887-3.27743617 3.0105034 0 5.9360347.55832715 8.7765938 1.67498145 2.8405592 1.11708346 5.3292134 2.69507649 7.4655336 4.73440826l-2.2577703 4.58892566c-2.4277146-2.03976095-4.7584408-3.5447981-6.9921786-4.51596977-2.2337377-.97117167-4.5159697-1.45697208-6.8466959-1.45697208-4.4670463 0-7.9388885 1.99083755-10.41552648 5.97294185-2.47620881 3.9816751-3.71474237 9.5653758-3.71474237 16.7519603v1.0926218c1.11708345-2.7676033 2.93797669-4.9528468 5.46267975-6.5553015 2.5251321-1.6024547 5.4141855-2.4036821 8.6675891-2.4036821 3.1564153 0 5.9604964.6922227 8.4126727 2.0758097zm-1.2016264 22.8708139c2.0393317-2.1122876 3.0589976-4.9163688 3.0589976-8.4126726 0-3.4473805-1.0321113-6.2274292-3.0954756-8.3397168-2.0637934-2.1122877-4.7464245-3.1684315-8.0483224-3.1684315-3.3993154 0-6.1669186 1.0681601-8.303668 3.2049094-2.13632016 2.1363202-3.20448025 4.9043526-3.20448025 8.3032389 0 3.4473804 1.06816009 6.2394454 3.20448025 8.3761947 2.1367494 2.1363202 4.9288143 3.2049094 8.3761948 3.2049094 3.3018978 0 5.9725126-1.0561438 8.0122736-3.1684315z" fill="#f2f2f2" fill-rule="nonzero" transform="translate(539.405045 376.685229)"/><path d="m.06008132.13775789h34.23305048v4.44301384l-24.32735691 47.41660937h-6.40938972l24.18144513-46.83382053h-27.67774898z" fill="#f2f2f2" fill-rule="nonzero" transform="translate(678.757195 376.512457)"/><path d="m34.6622027 30.9684888c1.8693875 2.2577703 2.8040812 4.9648631 2.8040812 8.1208491 0 4.4189814-1.6749814 7.9028398-5.0253735 10.4520045-3.3508212 2.5495939-7.8663618 3.8241762-13.5474801 3.8241762-5.6815474 0-10.19708794-1.2745823-13.54748-3.8241762-3.35082122-2.5491647-5.02580268-6.0330231-5.02580268-10.4520045 0-3.155986.95872626-5.875095 2.87703707-8.157327 1.91788167-2.282232 4.55201853-3.8606542 7.90241061-4.7344083-3.10749187-.9226774-5.48671227-2.44016-7.1376612-4.5524477-1.65094892-2.1122876-2.47663796-4.6005127-2.47663796-7.4655335 0-2.7676032.72870062-5.18373073 2.18524355-7.24709502 1.45654293-2.06379345 3.50832011-3.66624817 6.15447324-4.80736415 2.64658227-1.14111599 5.66910197-1.7114594 9.06841737-1.7114594 3.3988863 0 6.421406.57034341 9.0679883 1.7114594 2.6461531 1.14111598 4.6979303 2.7435707 6.1544733 4.80736415 1.456972 2.06336429 2.1852435 4.47949182 2.1852435 7.24709502 0 2.8650208-.8377053 5.3532459-2.5131159 7.4655335-1.6749815 2.1122877-4.0177239 3.6297703-7.0286565 4.5524477 3.3993154.9226775 6.0334523 2.5126868 7.9028397 4.7708862zm-24.1084891-9.6147283c2.0633642 1.7239048 4.8434129 2.7800487 8.3397167 3.1684315 3.4958747-.3883828 6.2759234-1.4445267 8.3397168-3.1684315 2.0633643-1.7234756 3.0954756-3.9692297 3.0954756-6.7372621 0-2.8645916-1.0076496-5.12279105-3.0229488-6.77373998-2.0148701-1.65094892-4.8193804-2.47620881-8.4122436-2.47620881-3.5932922 0-6.3978026.82525989-8.4126726 2.47620881-2.01529928 1.65094893-3.0229489 3.90914838-3.0229489 6.77373998 0 2.7680324 1.0321113 5.0137865 3.0959048 6.7372621zm17.7355774 24.5822734c2.1848144-1.650949 3.2774361-4.054631 3.2774361-7.2106171 0-2.8650208-1.1531322-5.1592691-3.4598259-6.8831739-2.3062645-1.7239048-5.3777075-2.7800486-9.2134709-3.1684315-3.8361924.3883829-6.9076355 1.4445267-9.2139 3.1684315-2.30669365 1.7239048-3.4598259 4.0181531-3.4598259 6.8831739 0 3.1559861 1.09262177 5.5596681 3.27786532 7.2106171 2.18481438 1.6509489 5.31676798 2.4766379 9.39586058 2.4766379 4.0786636 0 7.2106171-.825689 9.3958607-2.4766379z" fill="#f2f2f2" fill-rule="nonzero" transform="translate(773.608278 376.236614)"/><path d="m31.3560134 6.96900432c3.3988862 4.37005798 5.0987585 10.58547078 5.0987585 18.64580948 0 8.7890393-1.7603827 15.6232898-5.2807191 20.5031806-3.5203364 4.8803201-8.4367052 7.320051-14.7495357 7.320051-2.9620092 0-5.8630788-.5583272-8.70363793-1.6749815-2.84055913-1.1170835-5.35367504-2.6950765-7.53848944-4.7344083l2.33072618-4.5884964c2.47620882 2.0878259 4.83139668 3.6053085 7.06513445 4.5520185 2.23330864.94671 4.49150804 1.4204941 6.77374004 1.4204941 4.4670464 0 7.9268723-1.9908375 10.3790485-5.9725126 2.4521763-3.9821043 3.6782645-9.565805 3.6782645-16.7523895v-.9471392c-1.1170835 2.7195382-2.9379767 4.8678747-5.4626798 6.4462969-2.5251321 1.577993-5.4141855 2.3672041-8.6675891 2.3672041-3.1564152 0-5.9484801-.6922227-8.37619475-2.0758097-2.42771461-1.3840162-4.32156374-3.3263596-5.68111825-5.8270301s-2.03933177-5.353675-2.03933177-8.5581553c0-3.2049094.7162552-6.0699302 2.14833645-8.59463325 1.43251041-2.52513218 3.4113317-4.50395347 5.93646388-5.93646387 2.52470304-1.43208125 5.38972384-2.14833645 8.59463324-2.14833645 6.2639071 0 11.0953038 2.18481439 14.4941901 6.55530149zm-5.8270301 18.35441508c2.1367494-2.1363202 3.2049095-4.9043526 3.2049095-8.3032389 0-3.4473805-1.0681601-6.2394454-3.2049095-8.37619472-2.1363202-2.13632019-4.9283851-3.20490943-8.3757656-3.20490943-3.3018978 0-5.9729418 1.05614383-8.01227355 3.16843149-2.03933176 2.11228766-3.05899765 4.91636886-3.05899765 8.41267266 0 3.4473805 1.01966589 6.2274292 3.05899765 8.3397168 2.03933175 2.1122877 4.73440825 3.1684315 8.08480035 3.1684315 3.3993154 0 6.1669186-1.0681601 8.3032388-3.2049094z" fill="#f2f2f2" fill-rule="nonzero" transform="translate(867.854354 375.654152)"/><path d="m330.093135.33214542v84.43190468-42.5518783h-329.66215607v42.5518783" stroke="#000" stroke-width="2.538347" transform="translate(131.785126 139.982935)"/><path d="m.10801477.42233775h329.31542823v42.21595235" stroke="#000" stroke-width="2.538347" transform="translate(461.770246 182.108695)"/><path d="m36.186655 346.60579v15.692843" stroke="#000" stroke-width="2.540394"/><path d="m132.152376 331.426017v30.871702" stroke="#000" stroke-width="2.538347"/><path d="m228.893645 346.60579v15.692843" stroke="#000" stroke-width="2.540394"/><g transform="translate(1221.45577 24.489117)"><path d="m.197608.154988h239.084215v85.099871h-239.084215z" fill="#0083c0"/><path d="m239.281823 85.2548586h-239.08421531v-85.09987082h239.08421531zm-236.54571658-82.56147761v80.02308441h234.00574658v-80.02308441z" fill="#000"/></g><g transform="translate(956.909366 124.770501)"><path d="m.184449.095195h223.163411v52.269131h-223.163411z" fill="#c9177e"/><path d="m223.347859 52.3643259h-223.16341016v-52.26913097h223.16341016zm-220.62506465-49.73066919v47.19220749h218.08488865v-47.19220749z" fill="#000"/></g><g transform="translate(1231.923745 124.770501)"><path d="m.183618.095195h222.158079v52.269131h-222.158079z" fill="#c9177e"/><path d="m222.341696 52.3643259h-222.15807809v-52.26913097h222.15807809zm-219.61932129-49.73066919v47.19220749h217.08147629v-47.19220749z" fill="#000"/></g><path d="m91.4241325.12672749v8.67595862h-91.3476086v8.67108449" stroke="#000" stroke-width="2.539424" transform="translate(1252.516016 177.005152)"/><g transform="translate(1504.487683 124.770501)"><path d="m.182671.095195h221.012609v52.269131h-221.012609z" fill="#c9177e"/><path d="m221.19528 52.3643259h-221.01260884v-52.26913097h221.01260884zm-218.47425033-49.73066919v47.19220749h215.93589233v-47.19220749z" fill="#000"/></g><g transform="translate(1018.734446 194.392443)"><path d="m.035471.089728h42.916712v49.26713h-42.916712z" fill="#00a88a"/><path d="m42.9521838 49.3568579h-42.91671231v-49.26713035h42.91671231zm-40.37825665-46.72872807v44.19032577h37.83980095v-44.19032577z" fill="#000"/></g><path d="m19.5454361 18.6632185c.9737513 1.298422 1.4606269 2.9361183 1.4606269 4.9128281 0 2.7441845-.9294187 4.9055264-2.7882562 6.4842865-1.8590982 1.5784993-4.3818807 2.3678794-7.5683475 2.3678794-2.03616765 0-3.99097204-.3395352-5.86441318-1.0180839-1.87370191-.6785486-3.45976385-1.6376963-4.75792503-2.8769212l1.41629437-2.7882563c2.92099306 2.4195138 5.96011931 3.6292707 9.11737874 3.6292707 2.2424444 0 3.9466395-.5017401 5.1120638-1.5049595 1.1654244-1.0032194 1.7482669-2.4784499 1.7482669-4.4259525 0-3.8652762-2.4195137-5.7979144-7.2585412-5.7979144h-3.62953146v-3.0539906h2.92125384c2.33110942 0 4.11614632-.5163438 5.35537122-1.5490313 1.239225-1.0326875 1.8590983-2.5081788 1.8590983-4.4259525 0-1.71149696-.5090419-3.02452258-1.5271257-3.93907688-1.0178231-.91481507-2.4562837-1.37222261-4.315382-1.37222261-3.00965814 0-5.9895874 1.20975688-8.94030934 3.62953142l-1.37222261-2.78851699c1.26895386-1.20975688 2.82528692-2.16134189 4.66952073-2.85475502 1.84423381-.69341314 3.7695701-1.03998932 5.77600882-1.03998932 2.8325888 0 5.0971994.72288124 6.7938319 2.16864372 1.6966326 1.44576248 2.5449488 3.39326503 2.5449488 5.8422469 0 1.79990128-.4428039 3.37840058-1.32789 4.73575878-.8850862 1.3573582-2.1097076 2.3311094-3.6736032 2.9212538 1.8588374.5309474 3.2753926 1.4457625 4.2488831 2.7439237z" fill="#f2f2f2" fill-rule="nonzero" transform="translate(1028.654902 202.599599)"/><g transform="translate(1078.488158 194.392443)"><path d="m.035471.089728h42.916712v49.26713h-42.916712z" fill="#00a88a"/><path d="m42.9521838 49.3568579h-42.91671231v-49.26713035h42.91671231zm-40.37825665-46.72872807v44.19032577h37.83980095v-44.19032577z" fill="#000"/></g><path d="m22.936251 22.0604515v3.0096581h-4.7800913v6.8603307h-3.6292707v-6.8603307h-14.51708251v-2.7441844l15.18102761-21.9086215h2.9653256v21.6431478zm-19.16443702 0h10.75507502v-15.49083387z" fill="#f2f2f2" fill-rule="nonzero" transform="translate(1089.451732 203.121158)"/><g transform="translate(1138.52553 194.392443)"><path d="m.035471.089728h42.916712v49.26713h-42.916712z" fill="#00a88a"/><path d="m42.9521838 49.3568579h-42.91671231v-49.26713035h42.91671231zm-40.37825665-46.72872807v44.19032577h37.83980095v-44.19032577z" fill="#000"/></g><path d="m16.4136394 13.9290806c1.4900951.8410145 2.6336139 2.0140014 3.4302958 3.5187001.7966819 1.5049595 1.1948924 3.2456637 1.1948924 5.2226344s-.4352412 3.7325394-1.3057238 5.2669669c-.8702217 1.5344276-2.1097075 2.7220182-3.7176749 3.5630326-1.6082282.8407537-3.489232 1.2613913-5.643272 1.2613913-1.9177737 0-3.80607928-.346837-5.66517753-1.0402501-1.85883747-.6934131-3.42273314-1.6449981-4.69142622-2.854755l1.37196183-2.7882562c2.92125384 2.4195137 5.91604755 3.6292706 8.98464192 3.6292706 2.213237 0 3.9466395-.6269143 5.2007289-1.8810037 1.2538286-1.2540895 1.8810037-2.9580238 1.8810037-5.1120639 0-2.094843-.6196125-3.7841737-1.8588374-5.0677312-1.2394858-1.2835576-2.8917858-1.9253363-4.9571607-1.9253363-3.00965819 0-5.41456828 1.2246213-7.21446955 3.6736031h-2.52278251v-18.45642016h18.89896326v3.00965815h-15.26969262v11.24221151c1.74096506-1.6820289 3.96880576-2.5230433 6.68326132-2.5230433 1.9769707 0 3.7103731.4206376 5.2004681 1.2613912z" fill="#f2f2f2" fill-rule="nonzero" transform="translate(1148.445985 201.599599)"/><g transform="translate(957.360703 194.392443)"><path d="m.035471.089728h42.916712v49.26713h-42.916712z" fill="#00a88a"/><path d="m42.9521838 49.3568579h-42.91671231v-49.26713035h42.91671231zm-40.37816863-46.72872807v44.19032577h37.83971293v-44.19032577z" fill="#000"/></g><path d="m10.8395677 28.5428562h6.948735v3.0539907h-17.57107324v-3.0539907h6.94873503v-23.94452832l-6.46185939 4.11614628v-3.49653379l8.05522316-5.1342301h2.08023944z" fill="#f2f2f2" fill-rule="nonzero" transform="translate(970.410431 203.121158)"/><g transform="translate(1231.099754 194.213333)"><path d="m.035471.089728h42.916712v49.26713h-42.916712z" fill="#00a88a"/><path d="m42.9521838 49.3568579h-42.91671231v-49.26713035h42.91671231zm-40.37816863-46.72872807v44.19032577h37.83971293v-44.19032577z" fill="#000"/></g><path d="m21.3648958 29.0644155v3.0539907h-20.27092509v-2.7441844l11.02080949-12.215702c1.4752306-1.6523 2.5522507-3.142395 3.2307994-4.4702851.6788094-1.3276293 1.0180838-2.6555193 1.0180838-3.98340939 0-1.74070428-.5017401-3.07589618-1.5049595-4.00531492-1.0032194-.92967951-2.4341174-1.39438888-4.2932157-1.39438888-3.0096581 0-5.98958737 1.20975688-8.94030931 3.62953142l-1.37222261-2.78851699c1.23948576-1.18028878 2.80312065-2.12431118 4.691687-2.83258875 1.88830558-.70827758 3.79147559-1.06215559 5.70951002-1.06215559 2.891525 0 5.1783019.74504751 6.8603307 2.23514253 1.6817681 1.49009502 2.5227826 3.50383562 2.5227826 6.04122179 0 1.79990128-.4057732 3.53356448-1.2173195 5.20072888-.8112856 1.6669037-2.1613419 3.5333038-4.0496475 5.5986787l-8.98464189 9.737252z" fill="#f2f2f2" fill-rule="nonzero" transform="translate(1241.784164 202.570441)"/><g transform="translate(1292.473373 194.213333)"><path d="m.035471.089728h42.916712v49.26713h-42.916712z" fill="#00a88a"/><path d="m42.9521838 49.3568579h-42.91671231v-49.26713035h42.91671231zm-40.37825665-46.72872807v44.19032577h37.83980095v-44.19032577z" fill="#000"/></g><path d="m23.0372759 21.726858v3.0096582h-4.7800914v6.8603307h-3.6292706v-6.8603307h-14.51708254v-2.7441845l15.18102754-21.90862143h2.9653256v21.64314773zm-19.16443705 0h10.75507505v-15.4908338z" fill="#f2f2f2" fill-rule="nonzero" transform="translate(1301.574474 203.100332)"/><g fill="#fff" fill-rule="nonzero" transform="translate(974.127869 141.527307)"><path d="m5.47365255 15.5387394v-13.14066544h-5.07689804v-1.43299542h11.85291919v1.43299542h-5.07689802v13.14066544z"/><path d="m21.1342453 10.3380383h-7.553933c.0136476 1.3111421.3173061 2.3005913.9109757 2.9683477.5936695.6677563 1.4568786 1.0040716 2.5896274 1.0040716 1.2009866 0 2.3064402-.4045531 3.3163608-1.2087853l.5527268 1.2087853c-.45037.4240497-1.02698.7554908-1.7298302 1.0040716-.7028501.2437067-1.4227597.3655601-2.1597288.3655601-1.6104139 0-2.8728146-.472791-3.7872021-1.418373-.9143876-.9504562-1.3715814-2.25185-1.3715814-3.9041814 0-1.04793885.2047137-1.97889846.6141409-2.79287884.4094273-.80910626.9826255-1.44274368 1.7195945-1.89116402.7369691-.45329446 1.576295-.67750463 2.5179777-.67750463 1.3647575 0 2.4360922.44842033 3.214004 1.34038686.7779118.89684067 1.1668677 2.12512245 1.1668677 3.69459363zm-6.4587151-3.27541805c-.5390792.52153234-.8836805 1.24777832-1.0338038 2.19336032h5.9981094c-.0818855-.96995267-.3650727-1.70594692-.8495616-2.21285686s-1.156632-.75549078-2.0164293-.75549078c-.8597972 0-1.5592354.25832911-2.0983147.77498732z"/><path d="m29.3842046 5.11784076-.0409427 1.51585569c-.3138943-.10723095-.675555-.16572056-1.0849823-.16572056-.996273 0-1.736654.31194458-2.2211429.93095961-.4844889.62388916-.7267334 1.37937994-.7267334 2.26647234v5.87333156h-1.6581804v-7.40868379c0-1.06743536-.0545903-2.02763977-.1637709-2.8903615h1.576295l.1637709 1.90578642c.2593039-.69700117.675555-1.22828178 1.2487531-1.59871597.5731982-.36556006 1.2282818-.55077715 1.9652509-.55077715.3411894 0 .6550836.03899307.9416827.12185335z"/><path d="m45.9045945 9.07076348v6.46797592h-1.6581804v-6.38511564c0-.96995268-.1671828-1.67182798-.5015484-2.11050005-.3343655-.43867206-.8768567-.65313396-1.6274733-.65313396-.8734448 0-1.5558236.29244804-2.0471363.87734413-.4913127.58977022-.7369691 1.38425407-.7369691 2.39807396v5.87333156h-1.6581804v-6.38511564c0-.95533028-.1705947-1.65720558-.5117841-2.10075178s-.8870924-.66288223-1.637709-.66288223c-.8734448 0-1.5592355.29244804-2.057372.87734413-.4981365.58977022-.7472047 1.38425407-.7472047 2.39807396v5.87333156h-1.6581805v-7.40868379c0-1.06743536-.0545903-2.02763977-.1637709-2.8903615h1.576295l.1637709 1.8034296c.2865991-.65313396.7130858-1.1600439 1.2794602-1.51585569s1.2248699-.53128061 1.9754865-.53128061c.8188545 0 1.4875857.16572056 2.0061936.49228754s.90074.83347692 1.1463963 1.51585569c.3138943-.61414089.7744999-1.1015543 1.381817-1.46711435.6073171-.36068592 1.2931078-.54102888 2.057372-.54102888 2.2791451 0 3.4187176 1.3598834 3.4187176 4.07477607z"/><path d="m60.3369055 14.1252405h3.214004v1.4134989h-8.1271311v-1.4134989h3.214004v-11.07403258l-2.988819 1.90578642v-1.61821251l3.725788-2.37370329h.9621541z"/><path d="m66.396429 5.46877841h2.1085503v2.12512245h-2.1085503zm0 7.95946089h2.1085503v1.4963592c0 .5751478-.095533 1.0966801-.286599 1.5743453-.1910661.4776651-.5117841.945582-.9621541 1.3940023l-.7779118-.5946443c.5322554-.6141409.8325021-1.199037.90074-1.7595624h-.9826254z"/><path d="m76.2226832 15.5387394 1.1463963-14.57366086h3.214004l-.962154 11.97574736h6.5098934l-.2047136 2.5979135z"/><path d="m87.6661752 15.5387394.8188545-10.37703143h3.0911758l-.8188545 10.37703143zm1.0645108-15.25116549h3.3163608l-.225185 2.9049839h-3.3163608z"/><path d="m92.6611877 14.4323109 1.0030968-2.1494931c.5731982.3948049 1.1873391.7018753 1.8424227.9114631.6550836.2144619 1.3101672.3168187 1.9652508.3168187.5731982 0 .996273-.0828603 1.2692246-.2437067.2729515-.1657206.4094272-.3850566.4094272-.6580081 0-.2826998-.160359-.5117841-.481077-.6726305-.320718-.1657206-.8427378-.3558118-1.5660593-.5751478-.7506166-.2047136-1.3647575-.4094273-1.8424227-.6141409-.4776651-.2047136-.8905043-.5069099-1.2385174-.91146307-.3480132-.399679-.5220198-.92121134-.5220198-1.56459704 0-.66775636.1876542-1.25752658.5629625-1.75956239.3753083-.50690994.9075638-.9017148 1.5967663-1.18928871.6892026-.28757391 1.4773501-.4289238 2.3644424-.4289238.7779118 0 1.5387642.11697922 2.2825572.34606352.743793.23395844 1.368169.54590302 1.87313.94558201l-.982626 2.06663284c-.50496-.37043419-1.037216-.64825983-1.5967662-.83835106-.5595506-.19496536-1.1054536-.28757391-1.637709-.28757391-.5595506 0-.9826255.08286028-1.2692245.2437067-.2865991.16572056-.4298987.38993073-.4298987.67750464 0 .29732218.1705947.53615474.5117841.7164977.3411894.17546883.8597973.36068592 1.5558236.55077715.7506166.21933604 1.3613456.4289238 1.8321867.63363743.470842.20471359.880269.51178409 1.228282.91146309.348013.4045531.52202.9260855.52202 1.5694711 0 1.0235682-.406016 1.8229262-1.218046 2.4029481-.812031.580022-1.9072489.87247-3.285654.87247-1.7741848 0-3.3573036-.4240496-4.7493563-1.272149z"/><path d="m107.666697 11.5078305c-.040943.5702737.075062.9943234.348013 1.2672749.272952.2729515.64826.4094272 1.125925.4094272.313894 0 .661907-.0536155 1.044039-.1657205l-.204713 2.3980739c-.464018.1900913-1.064511.2875739-1.80148.2875739-1.173692 0-2.07102-.3168187-2.691984-.945582-.620965-.6238891-.931447-1.5109815-.931447-2.6612772 0-.2290843.006823-.4094272.020471-.5312806l.327542-4.09427259h-1.965251l.184242-2.31033954h1.965251l.184242-2.43706703 3.173062-1.00407162-.266128 3.44113865h2.640806l-.184243 2.31033954h-2.640805z"/><path d="m110.962586 14.4323109 1.003097-2.1494931c.573198.3948049 1.187339.7018753 1.842423.9114631.655083.2144619 1.310167.3168187 1.965251.3168187.573198 0 .996273-.0828603 1.269224-.2437067.272952-.1657206.409427-.3850566.409427-.6580081 0-.2826998-.160359-.5117841-.481077-.6726305-.320718-.1657206-.842737-.3558118-1.566059-.5751478-.750617-.2047136-1.364757-.4094273-1.842423-.6141409-.477665-.2047136-.890504-.5069099-1.238517-.91146307-.348013-.399679-.52202-.92121134-.52202-1.56459704 0-.66775636.187654-1.25752658.562963-1.75956239.375308-.50690994.907563-.9017148 1.596766-1.18928871s1.47735-.4289238 2.364442-.4289238c.777912 0 1.538765.11697922 2.282557.34606352.743793.23395844 1.36817.54590302 1.87313.94558201l-.982625 2.06663284c-.504961-.37043419-1.037216-.64825983-1.596767-.83835106-.55955-.19496536-1.105453-.28757391-1.637709-.28757391-.55955 0-.982625.08286028-1.269224.2437067-.286599.16572056-.429899.38993073-.429899.67750464 0 .29732218.170595.53615474.511784.7164977.34119.17546883.859798.36068592 1.555824.55077715.750616.21933604 1.361345.4289238 1.832187.63363743.470841.20471359.880268.51178409 1.228282.91146309.348013.4045531.522019.9260855.522019 1.5694711 0 1.0235682-.406015 1.8229262-1.218046 2.4029481-.81203.580022-1.907248.87247-3.285653.87247-1.774185 0-3.357304-.4240496-4.749357-1.272149z"/><path d="m133.890513 14.1252405h3.214004v1.4134989h-8.127131v-1.4134989h3.214004v-11.07403258l-2.988819 1.90578642v-1.61821251l3.725788-2.37370329h.962154z"/><path d="m142.058587 13.4282393v1.4963592c0 .5751478-.095533 1.0966801-.286599 1.5743453-.191066.4776651-.511784.945582-.962154 1.3940023l-.777912-.5946443c.532255-.6141409.832502-1.199037.90074-1.7595624h-.982626v-2.1105001z"/><path d="m153.481607 9.31447018c.45037.59951849.675555 1.35988342.675555 2.27134652 0 1.2721489-.429898 2.2713464-1.289696 3.0024665-.859797.726246-2.026665 1.0918061-3.500603 1.0918061-.941682 0-1.845834-.1559723-2.712455-.4679169-.866621-.3168187-1.600178-.7603649-2.200672-1.3306386l.655084-1.2916455c1.35111 1.1210508 2.75681 1.6815762 4.217101 1.6815762 1.037215 0 1.825363-.2339584 2.364442-.6970012.539079-.4630427.808619-1.1454215.808619-2.0471363 0-1.78880715-1.119101-2.68077369-3.357304-2.68077369h-1.678651v-1.41349887h1.35111c1.078158 0 1.903836-.23883257 2.477034-.71649771.573199-.47766514.859798-1.1600439.859798-2.0471363 0-.79448385-.235421-1.39887648-.706262-1.82292614-.470842-.42404966-1.136161-.63363743-1.995958-.63363743-1.392053 0-2.770458.56052542-4.135216 1.67670212l-.634612-1.28677139c.586846-.56052542 1.306756-.99919749 2.159729-1.32089033.852973-.32169285 1.743478-.48253927 2.671513-.48253927 1.310167 0 2.357619.33631525 3.142354 1.00407161.784736.66775637 1.177103 1.56947117 1.177103 2.70027027 0 .83347692-.204713 1.56459703-.61414 2.19336032-.409428.62388916-.975802 1.07718363-1.699124 1.35013514.859798.2437067 1.514881.66775636 1.965251 1.26727485z"/><path d="m159.070289 13.4282393v1.4963592c0 .5751478-.095533 1.0966801-.286599 1.5743453-.191066.4776651-.511784.945582-.962154 1.3940023l-.777912-.5946443c.532256-.6141409.832503-1.199037.90074-1.7595624h-.982625v-2.1105001z"/><path d="m171.98772 10.9716758v1.3940023h-2.210908v3.1730613h-1.678651v-3.1730613h-6.714608v-1.2672749l7.021678-10.13332466h1.371581v10.00659726zm-8.864101 0h4.974542v-7.1649771z"/><path d="m176.081992 13.4282393v1.4963592c0 .5751478-.095533 1.0966801-.286599 1.5743453-.191066.4776651-.511784.945582-.962154 1.3940023l-.777912-.5946443c.532256-.6141409.832502-1.199037.90074-1.7595624h-.982625v-2.1105001z"/><path d="m186.553094 6.9700117c.689203.38993073 1.218046.93095961 1.586531 1.62796078.368484.69700117.552727 1.50123332.552727 2.41757052 0 .911463-.201302 1.7254434-.603905 2.437067-.402604.7067494-.975802 1.2575266-1.719595 1.6474573s-1.613826.580022-2.610099.580022c-.887092 0-1.760537-.1559723-2.620334-.4776652-.859797-.3216928-1.583119-.7603649-2.169965-1.3208903l.634613-1.2916455c1.35111 1.1210508 2.736338 1.6815762 4.155686 1.6815762 1.023568 0 1.825363-.292448 2.405385-.87247.580022-.5800219.870033-1.3696316.870033-2.363955 0-.9699527-.286599-1.74981412-.859797-2.34445848-.573198-.59464435-1.337462-.89196653-2.292793-.89196653-1.392052 0-2.50433.57027369-3.336832 1.70107279h-1.166867v-8.53460874h8.741272v1.38912821h-7.062621v5.20070104c.805207-.77986145 1.835599-1.16491804 3.091176-1.16491804.914388 0 1.716183.19496536 2.405385.58002195z"/></g><g fill="#fff" fill-rule="nonzero" transform="translate(1248.643217 141.651852)"><path d="m5.47365255 15.5387394v-13.14066544h-5.07689804v-1.43299542h11.85291919v1.43299542h-5.07689802v13.14066544z"/><path d="m21.1342453 10.3380383h-7.553933c.0136476 1.3111421.3173061 2.3005913.9109757 2.9683477.5936695.6677563 1.4568786 1.0040716 2.5896274 1.0040716 1.2009866 0 2.3064402-.4045531 3.3163608-1.2087853l.5527268 1.2087853c-.45037.4240497-1.02698.7554908-1.7298302 1.0040716-.7028501.2437067-1.4227597.3655601-2.1597288.3655601-1.6104139 0-2.8728146-.472791-3.7872021-1.418373-.9143876-.9504562-1.3715814-2.25185-1.3715814-3.9041814 0-1.04793885.2047137-1.97889846.6141409-2.79287884.4094273-.80910626.9826255-1.44274368 1.7195945-1.89116402.7369691-.45329446 1.576295-.67750463 2.5179777-.67750463 1.3647575 0 2.4360922.44842033 3.214004 1.34038686.7779118.89684067 1.1668677 2.12512245 1.1668677 3.69459363zm-6.4587151-3.27541805c-.5390792.52153234-.8836805 1.24777832-1.0338038 2.19336032h5.9981094c-.0818855-.96995267-.3650727-1.70594692-.8495616-2.21285686s-1.156632-.75549078-2.0164293-.75549078c-.8597972 0-1.5592354.25832911-2.0983147.77498732z"/><path d="m29.3842046 5.11784076-.0409427 1.51585569c-.3138943-.10723095-.675555-.16572056-1.0849823-.16572056-.996273 0-1.736654.31194458-2.2211429.93095961-.4844889.62388916-.7267334 1.37937994-.7267334 2.26647234v5.87333156h-1.6581804v-7.40868379c0-1.06743536-.0545903-2.02763977-.1637709-2.8903615h1.576295l.1637709 1.90578642c.2593039-.69700117.675555-1.22828178 1.2487531-1.59871597.5731982-.36556006 1.2282818-.55077715 1.9652509-.55077715.3411894 0 .6550836.03899307.9416827.12185335z"/><path d="m45.9045945 9.07076348v6.46797592h-1.6581804v-6.38511564c0-.96995268-.1671828-1.67182798-.5015484-2.11050005-.3343655-.43867206-.8768567-.65313396-1.6274733-.65313396-.8734448 0-1.5558236.29244804-2.0471363.87734413-.4913127.58977022-.7369691 1.38425407-.7369691 2.39807396v5.87333156h-1.6581804v-6.38511564c0-.95533028-.1705947-1.65720558-.5117841-2.10075178s-.8870924-.66288223-1.637709-.66288223c-.8734448 0-1.5592355.29244804-2.057372.87734413-.4981365.58977022-.7472047 1.38425407-.7472047 2.39807396v5.87333156h-1.6581805v-7.40868379c0-1.06743536-.0545903-2.02763977-.1637709-2.8903615h1.576295l.1637709 1.8034296c.2865991-.65313396.7130858-1.1600439 1.2794602-1.51585569s1.2248699-.53128061 1.9754865-.53128061c.8188545 0 1.4875857.16572056 2.0061936.49228754s.90074.83347692 1.1463963 1.51585569c.3138943-.61414089.7744999-1.1015543 1.381817-1.46711435.6073171-.36068592 1.2931078-.54102888 2.057372-.54102888 2.2791451 0 3.4187176 1.3598834 3.4187176 4.07477607z"/><path d="m63.8784513 14.1252405v1.4134989h-9.3758843v-1.2672749l5.0973694-5.65399549c.6823788-.76036491 1.1805153-1.45249195 1.4944095-2.06663284.3138943-.61414089.4708414-1.22828178.4708414-1.84242267 0-.80423212-.2320088-1.42324715-.6960264-1.85217094-.4640175-.4289238-1.1259249-.6433857-1.9857222-.6433857-1.3920527 0-2.7704578.56052542-4.1352153 1.67670212l-.6346123-1.28677139c.5731982-.54590302 1.2965197-.98457508 2.1699645-1.31114206.8734448-.32656699 1.7537134-.49228754 2.6408058-.49228754 1.3374624 0 2.3951495.34606351 3.1730613 1.03331642.7779118.6872529 1.1668677 1.62308664 1.1668677 2.79287881 0 .83347692-.1876542 1.63770904-.5629625 2.40782222-.3753083.77011319-.9996849 1.63283491-1.8731297 2.58816519l-4.1556867 4.50369987z"/><path d="m66.396429 5.46877841h2.1085503v2.12512245h-2.1085503zm0 7.95946089h2.1085503v1.4963592c0 .5751478-.095533 1.0966801-.286599 1.5743453-.1910661.4776651-.5117841.945582-.9621541 1.3940023l-.7779118-.5946443c.5322554-.6141409.8325021-1.199037.90074-1.7595624h-.9826254z"/><path d="m76.2226832 15.5387394 1.1463963-14.57366086h3.214004l-.962154 11.97574736h6.5098934l-.2047136 2.5979135z"/><path d="m87.6661752 15.5387394.8188545-10.37703143h3.0911758l-.8188545 10.37703143zm1.0645108-15.25116549h3.3163608l-.225185 2.9049839h-3.3163608z"/><path d="m92.6611877 14.4323109 1.0030968-2.1494931c.5731982.3948049 1.1873391.7018753 1.8424227.9114631.6550836.2144619 1.3101672.3168187 1.9652508.3168187.5731982 0 .996273-.0828603 1.2692246-.2437067.2729515-.1657206.4094272-.3850566.4094272-.6580081 0-.2826998-.160359-.5117841-.481077-.6726305-.320718-.1657206-.8427378-.3558118-1.5660593-.5751478-.7506166-.2047136-1.3647575-.4094273-1.8424227-.6141409-.4776651-.2047136-.8905043-.5069099-1.2385174-.91146307-.3480132-.399679-.5220198-.92121134-.5220198-1.56459704 0-.66775636.1876542-1.25752658.5629625-1.75956239.3753083-.50690994.9075638-.9017148 1.5967663-1.18928871.6892026-.28757391 1.4773501-.4289238 2.3644424-.4289238.7779118 0 1.5387642.11697922 2.2825572.34606352.743793.23395844 1.368169.54590302 1.87313.94558201l-.982626 2.06663284c-.50496-.37043419-1.037216-.64825983-1.5967662-.83835106-.5595506-.19496536-1.1054536-.28757391-1.637709-.28757391-.5595506 0-.9826255.08286028-1.2692245.2437067-.2865991.16572056-.4298987.38993073-.4298987.67750464 0 .29732218.1705947.53615474.5117841.7164977.3411894.17546883.8597973.36068592 1.5558236.55077715.7506166.21933604 1.3613456.4289238 1.8321867.63363743.470842.20471359.880269.51178409 1.228282.91146309.348013.4045531.52202.9260855.52202 1.5694711 0 1.0235682-.406016 1.8229262-1.218046 2.4029481-.812031.580022-1.9072489.87247-3.285654.87247-1.7741848 0-3.3573036-.4240496-4.7493563-1.272149z"/><path d="m107.666697 11.5078305c-.040943.5702737.075062.9943234.348013 1.2672749.272952.2729515.64826.4094272 1.125925.4094272.313894 0 .661907-.0536155 1.044039-.1657205l-.204713 2.3980739c-.464018.1900913-1.064511.2875739-1.80148.2875739-1.173692 0-2.07102-.3168187-2.691984-.945582-.620965-.6238891-.931447-1.5109815-.931447-2.6612772 0-.2290843.006823-.4094272.020471-.5312806l.327542-4.09427259h-1.965251l.184242-2.31033954h1.965251l.184242-2.43706703 3.173062-1.00407162-.266128 3.44113865h2.640806l-.184243 2.31033954h-2.640805z"/><path d="m110.962586 14.4323109 1.003097-2.1494931c.573198.3948049 1.187339.7018753 1.842423.9114631.655083.2144619 1.310167.3168187 1.965251.3168187.573198 0 .996273-.0828603 1.269224-.2437067.272952-.1657206.409427-.3850566.409427-.6580081 0-.2826998-.160359-.5117841-.481077-.6726305-.320718-.1657206-.842737-.3558118-1.566059-.5751478-.750617-.2047136-1.364757-.4094273-1.842423-.6141409-.477665-.2047136-.890504-.5069099-1.238517-.91146307-.348013-.399679-.52202-.92121134-.52202-1.56459704 0-.66775636.187654-1.25752658.562963-1.75956239.375308-.50690994.907563-.9017148 1.596766-1.18928871s1.47735-.4289238 2.364442-.4289238c.777912 0 1.538765.11697922 2.282557.34606352.743793.23395844 1.36817.54590302 1.87313.94558201l-.982625 2.06663284c-.504961-.37043419-1.037216-.64825983-1.596767-.83835106-.55955-.19496536-1.105453-.28757391-1.637709-.28757391-.55955 0-.982625.08286028-1.269224.2437067-.286599.16572056-.429899.38993073-.429899.67750464 0 .29732218.170595.53615474.511784.7164977.34119.17546883.859798.36068592 1.555824.55077715.750616.21933604 1.361345.4289238 1.832187.63363743.470841.20471359.880268.51178409 1.228282.91146309.348013.4045531.522019.9260855.522019 1.5694711 0 1.0235682-.406015 1.8229262-1.218046 2.4029481-.81203.580022-1.907248.87247-3.285653.87247-1.774185 0-3.357304-.4240496-4.749357-1.272149z"/><path d="m137.432059 14.1252405v1.4134989h-9.375885v-1.2672749l5.09737-5.65399549c.682379-.76036491 1.180515-1.45249195 1.494409-2.06663284.313895-.61414089.470842-1.22828178.470842-1.84242267 0-.80423212-.232009-1.42324715-.696027-1.85217094-.464017-.4289238-1.125925-.6433857-1.985722-.6433857-1.392053 0-2.770458.56052542-4.135215 1.67670212l-.634612-1.28677139c.573198-.54590302 1.296519-.98457508 2.169964-1.31114206.873445-.32656699 1.753713-.49228754 2.640806-.49228754 1.337462 0 2.395149.34606351 3.173061 1.03331642.777912.6872529 1.166868 1.62308664 1.166868 2.79287881 0 .83347692-.187654 1.63770904-.562963 2.40782222-.375308.77011319-.999685 1.63283491-1.873129 2.58816519l-4.155687 4.50369987z"/><path d="m142.058587 13.4282393v1.4963592c0 .5751478-.095533 1.0966801-.286599 1.5743453-.191066.4776651-.511784.945582-.962154 1.3940023l-.777912-.5946443c.532255-.6141409.832502-1.199037.90074-1.7595624h-.982626v-2.1105001z"/><path d="m154.976017 10.9716758v1.3940023h-2.210907v3.1730613h-1.678652v-3.1730613h-6.714607v-1.2672749l7.021677-10.13332466h1.371582v10.00659726zm-8.8641 0h4.974541v-7.1649771z"/><path d="m159.070289 13.4282393v1.4963592c0 .5751478-.095533 1.0966801-.286599 1.5743453-.191066.4776651-.511784.945582-.962154 1.3940023l-.777912-.5946443c.532256-.6141409.832503-1.199037.90074-1.7595624h-.982625v-2.1105001z"/><path d="m169.541392 6.9700117c.689202.38993073 1.218046.93095961 1.58653 1.62796078.368485.69700117.552727 1.50123332.552727 2.41757052 0 .911463-.201302 1.7254434-.603905 2.437067-.402604.7067494-.975802 1.2575266-1.719595 1.6474573-.743792.3899307-1.613825.580022-2.610098.580022-.887093 0-1.760538-.1559723-2.620335-.4776652-.859797-.3216928-1.583119-.7603649-2.169964-1.3208903l.634612-1.2916455c1.35111 1.1210508 2.736339 1.6815762 4.155687 1.6815762 1.023568 0 1.825363-.292448 2.405385-.87247.580022-.5800219.870033-1.3696316.870033-2.363955 0-.9699527-.286599-1.74981412-.859798-2.34445848-.573198-.59464435-1.337462-.89196653-2.292792-.89196653-1.392053 0-2.50433.57027369-3.336832 1.70107279h-1.166868v-8.53460874h8.741272v1.38912821h-7.06262v5.20070104c.805207-.77986145 1.835599-1.16491804 3.091175-1.16491804.914388 0 1.716183.19496536 2.405386.58002195z"/><path d="m176.081992 13.4282393v1.4963592c0 .5751478-.095533 1.0966801-.286599 1.5743453-.191066.4776651-.511784.945582-.962154 1.3940023l-.777912-.5946443c.532256-.6141409.832502-1.199037.90074-1.7595624h-.982625v-2.1105001z"/><path d="m187.965618 9.38758219c.525432.63363741.788148 1.39400231.788148 2.28109471 0 1.2429042-.470842 2.2226052-1.412524 2.9391029-.941683.7164977-2.210907 1.0723095-3.807674 1.0723095-1.596766 0-2.865991-.3558118-3.807673-1.0723095-.941683-.7164977-1.412524-1.6961987-1.412524-2.9391029 0-.8870924.269539-1.6523314.808619-2.29084297.539079-.6433857 1.27946-1.0869319 2.221142-1.3306386-.873444-.25832911-1.542176-.6872529-2.006193-1.28189726-.464018-.59464435-.696026-1.29164552-.696026-2.09587764 0-.77986145.204713-1.45736609.61414-2.03738804.409428-.58002195.986038-1.02844229 1.729831-1.35013513.743792-.32169285 1.593354-.48253927 2.548684-.48253927.955331 0 1.804892.16084642 2.548685.48253927.743793.32169284 1.320403.77011318 1.72983 1.35013513s.614141 1.25752659.614141 2.03738804c0 .80423212-.235421 1.50123329-.706262 2.09587764-.470841.59464436-1.129337 1.02356815-1.975487 1.28189726.955331.2583291 1.695712.70674944 2.221143 1.34038686zm-6.776021-2.7051444c.580022.48741341 1.361346.78473559 2.343971.89196653.982626-.10723094 1.763949-.40455312 2.343971-.89196653.580022-.48253927.870033-1.11130256.870033-1.89116401 0-.80423212-.283187-1.43786955-.849561-1.90578642-.566375-.46304273-1.354522-.69212703-2.364443-.69212703-1.00992 0-1.798068.2290843-2.364442.69212703-.566375.46791687-.849562 1.1015543-.849562 1.90578642 0 .77986145.290011 1.40862474.870033 1.89116401zm4.984777 6.91152211c.614141-.4630428.921211-1.1405474.921211-2.0276398 0-.8042321-.324129-1.4476178-.972389-1.9350312-.64826-.48253927-1.511469-.77986145-2.589628-.8870924-1.078158.10723095-1.941367.40455313-2.589627.8870924-.64826.4874134-.97239 1.1307991-.97239 1.9350312 0 .8870924.307071 1.564597.921211 2.0276398.614141.4630427 1.49441.6970012 2.640806.6970012 1.146397 0 2.026665-.2339585 2.640806-.6970012z"/></g><g fill="#fff" fill-rule="nonzero" transform="translate(1520.629778 141.651852)"><path d="m5.47365255 15.5387394v-13.14066544h-5.07689804v-1.43299542h11.85291919v1.43299542h-5.07689802v13.14066544z"/><path d="m21.1342453 10.3380383h-7.553933c.0136476 1.3111421.3173061 2.3005913.9109757 2.9683477.5936695.6677563 1.4568786 1.0040716 2.5896274 1.0040716 1.2009866 0 2.3064402-.4045531 3.3163608-1.2087853l.5527268 1.2087853c-.45037.4240497-1.02698.7554908-1.7298302 1.0040716-.7028501.2437067-1.4227597.3655601-2.1597288.3655601-1.6104139 0-2.8728146-.472791-3.7872021-1.418373-.9143876-.9504562-1.3715814-2.25185-1.3715814-3.9041814 0-1.04793885.2047137-1.97889846.6141409-2.79287884.4094273-.80910626.9826255-1.44274368 1.7195945-1.89116402.7369691-.45329446 1.576295-.67750463 2.5179777-.67750463 1.3647575 0 2.4360922.44842033 3.214004 1.34038686.7779118.89684067 1.1668677 2.12512245 1.1668677 3.69459363zm-6.4587151-3.27541805c-.5390792.52153234-.8836805 1.24777832-1.0338038 2.19336032h5.9981094c-.0818855-.96995267-.3650727-1.70594692-.8495616-2.21285686s-1.156632-.75549078-2.0164293-.75549078c-.8597972 0-1.5592354.25832911-2.0983147.77498732z"/><path d="m29.3842046 5.11784076-.0409427 1.51585569c-.3138943-.10723095-.675555-.16572056-1.0849823-.16572056-.996273 0-1.736654.31194458-2.2211429.93095961-.4844889.62388916-.7267334 1.37937994-.7267334 2.26647234v5.87333156h-1.6581804v-7.40868379c0-1.06743536-.0545903-2.02763977-.1637709-2.8903615h1.576295l.1637709 1.90578642c.2593039-.69700117.675555-1.22828178 1.2487531-1.59871597.5731982-.36556006 1.2282818-.55077715 1.9652509-.55077715.3411894 0 .6550836.03899307.9416827.12185335z"/><path d="m45.9045945 9.07076348v6.46797592h-1.6581804v-6.38511564c0-.96995268-.1671828-1.67182798-.5015484-2.11050005-.3343655-.43867206-.8768567-.65313396-1.6274733-.65313396-.8734448 0-1.5558236.29244804-2.0471363.87734413-.4913127.58977022-.7369691 1.38425407-.7369691 2.39807396v5.87333156h-1.6581804v-6.38511564c0-.95533028-.1705947-1.65720558-.5117841-2.10075178s-.8870924-.66288223-1.637709-.66288223c-.8734448 0-1.5592355.29244804-2.057372.87734413-.4981365.58977022-.7472047 1.38425407-.7472047 2.39807396v5.87333156h-1.6581805v-7.40868379c0-1.06743536-.0545903-2.02763977-.1637709-2.8903615h1.576295l.1637709 1.8034296c.2865991-.65313396.7130858-1.1600439 1.2794602-1.51585569s1.2248699-.53128061 1.9754865-.53128061c.8188545 0 1.4875857.16572056 2.0061936.49228754s.90074.83347692 1.1463963 1.51585569c.3138943-.61414089.7744999-1.1015543 1.381817-1.46711435.6073171-.36068592 1.2931078-.54102888 2.057372-.54102888 2.2791451 0 3.4187176 1.3598834 3.4187176 4.07477607z"/><path d="m62.9162972 9.31447018c.45037.59951849.675555 1.35988342.675555 2.27134652 0 1.2721489-.4298986 2.2713464-1.2896959 3.0024665-.8597972.726246-2.0266649 1.0918061-3.500603 1.0918061-.9416827 0-1.8458346-.1559723-2.7124556-.4679169-.8666211-.3168187-1.6001782-.7603649-2.2006716-1.3306386l.6550837-1.2916455c1.3511099 1.1210508 2.7568102 1.6815762 4.2171007 1.6815762 1.0372158 0 1.8253632-.2339584 2.3644425-.6970012.5390792-.4630427.8086188-1.1454215.8086188-2.0471363 0-1.78880715-1.1191012-2.68077369-3.3573035-2.68077369h-1.6786518v-1.41349887h1.35111c1.0781584 0 1.9038367-.23883257 2.4770349-.71649771s.8597972-1.1600439.8597972-2.0471363c0-.79448385-.2354206-1.39887648-.706262-1.82292614-.4708413-.42404966-1.1361606-.63363743-1.9959579-.63363743-1.3920527 0-2.7704578.56052542-4.1352153 1.67670212l-.6346123-1.28677139c.5868458-.56052542 1.3067554-.99919749 2.1597288-1.32089033.8529735-.32169285 1.7434778-.48253927 2.6715129-.48253927 1.3101672 0 2.3576186.33631525 3.1423542 1.00407161.7847356.66775637 1.1771034 1.56947117 1.1771034 2.70027027 0 .83347692-.2047136 1.56459703-.6141409 2.19336032-.4094272.62388916-.9758016 1.07718363-1.6991231 1.35013514.8597972.2437067 1.5148808.66775636 1.9652508 1.26727485z"/><path d="m66.396429 5.46877841h2.1085503v2.12512245h-2.1085503zm0 7.95946089h2.1085503v1.4963592c0 .5751478-.095533 1.0966801-.286599 1.5743453-.1910661.4776651-.5117841.945582-.9621541 1.3940023l-.7779118-.5946443c.5322554-.6141409.8325021-1.199037.90074-1.7595624h-.9826254z"/><path d="m76.2226832 15.5387394 1.1463963-14.57366086h3.214004l-.962154 11.97574736h6.5098934l-.2047136 2.5979135z"/><path d="m87.6661752 15.5387394.8188545-10.37703143h3.0911758l-.8188545 10.37703143zm1.0645108-15.25116549h3.3163608l-.225185 2.9049839h-3.3163608z"/><path d="m92.6611877 14.4323109 1.0030968-2.1494931c.5731982.3948049 1.1873391.7018753 1.8424227.9114631.6550836.2144619 1.3101672.3168187 1.9652508.3168187.5731982 0 .996273-.0828603 1.2692246-.2437067.2729515-.1657206.4094272-.3850566.4094272-.6580081 0-.2826998-.160359-.5117841-.481077-.6726305-.320718-.1657206-.8427378-.3558118-1.5660593-.5751478-.7506166-.2047136-1.3647575-.4094273-1.8424227-.6141409-.4776651-.2047136-.8905043-.5069099-1.2385174-.91146307-.3480132-.399679-.5220198-.92121134-.5220198-1.56459704 0-.66775636.1876542-1.25752658.5629625-1.75956239.3753083-.50690994.9075638-.9017148 1.5967663-1.18928871.6892026-.28757391 1.4773501-.4289238 2.3644424-.4289238.7779118 0 1.5387642.11697922 2.2825572.34606352.743793.23395844 1.368169.54590302 1.87313.94558201l-.982626 2.06663284c-.50496-.37043419-1.037216-.64825983-1.5967662-.83835106-.5595506-.19496536-1.1054536-.28757391-1.637709-.28757391-.5595506 0-.9826255.08286028-1.2692245.2437067-.2865991.16572056-.4298987.38993073-.4298987.67750464 0 .29732218.1705947.53615474.5117841.7164977.3411894.17546883.8597973.36068592 1.5558236.55077715.7506166.21933604 1.3613456.4289238 1.8321867.63363743.470842.20471359.880269.51178409 1.228282.91146309.348013.4045531.52202.9260855.52202 1.5694711 0 1.0235682-.406016 1.8229262-1.218046 2.4029481-.812031.580022-1.9072489.87247-3.285654.87247-1.7741848 0-3.3573036-.4240496-4.7493563-1.272149z"/><path d="m107.666697 11.5078305c-.040943.5702737.075062.9943234.348013 1.2672749.272952.2729515.64826.4094272 1.125925.4094272.313894 0 .661907-.0536155 1.044039-.1657205l-.204713 2.3980739c-.464018.1900913-1.064511.2875739-1.80148.2875739-1.173692 0-2.07102-.3168187-2.691984-.945582-.620965-.6238891-.931447-1.5109815-.931447-2.6612772 0-.2290843.006823-.4094272.020471-.5312806l.327542-4.09427259h-1.965251l.184242-2.31033954h1.965251l.184242-2.43706703 3.173062-1.00407162-.266128 3.44113865h2.640806l-.184243 2.31033954h-2.640805z"/><path d="m110.962586 14.4323109 1.003097-2.1494931c.573198.3948049 1.187339.7018753 1.842423.9114631.655083.2144619 1.310167.3168187 1.965251.3168187.573198 0 .996273-.0828603 1.269224-.2437067.272952-.1657206.409427-.3850566.409427-.6580081 0-.2826998-.160359-.5117841-.481077-.6726305-.320718-.1657206-.842737-.3558118-1.566059-.5751478-.750617-.2047136-1.364757-.4094273-1.842423-.6141409-.477665-.2047136-.890504-.5069099-1.238517-.91146307-.348013-.399679-.52202-.92121134-.52202-1.56459704 0-.66775636.187654-1.25752658.562963-1.75956239.375308-.50690994.907563-.9017148 1.596766-1.18928871s1.47735-.4289238 2.364442-.4289238c.777912 0 1.538765.11697922 2.282557.34606352.743793.23395844 1.36817.54590302 1.87313.94558201l-.982625 2.06663284c-.504961-.37043419-1.037216-.64825983-1.596767-.83835106-.55955-.19496536-1.105453-.28757391-1.637709-.28757391-.55955 0-.982625.08286028-1.269224.2437067-.286599.16572056-.429899.38993073-.429899.67750464 0 .29732218.170595.53615474.511784.7164977.34119.17546883.859798.36068592 1.555824.55077715.750616.21933604 1.361345.4289238 1.832187.63363743.470841.20471359.880268.51178409 1.228282.91146309.348013.4045531.522019.9260855.522019 1.5694711 0 1.0235682-.406015 1.8229262-1.218046 2.4029481-.81203.580022-1.907248.87247-3.285653.87247-1.774185 0-3.357304-.4240496-4.749357-1.272149z"/><path d="m137.964314 10.9716758v1.3940023h-2.210907v3.1730613h-1.678652v-3.1730613h-6.714607v-1.2672749l7.021678-10.13332466h1.371581v10.00659726zm-8.8641 0h4.974541v-7.1649771z"/><path d="m142.058587 13.4282393v1.4963592c0 .5751478-.095533 1.0966801-.286599 1.5743453-.191066.4776651-.511784.945582-.962154 1.3940023l-.777912-.5946443c.532255-.6141409.832502-1.199037.90074-1.7595624h-.982626v-2.1105001z"/><path d="m152.488746 6.9700117c.689203.38993073 1.22487.93583374 1.607002 1.63770904.382132.70674944.573198 1.50610746.573198 2.40782226s-.201301 1.7059469-.603905 2.4126963c-.402603.7116236-.958742 1.2672749-1.668416 1.671828-.709674.399679-1.514881.6043926-2.415621.6043926-1.760537 0-3.118471-.6141409-4.073801-1.8424226-.95533-1.2282818-1.432995-2.978096-1.432995-5.24456829 0-1.63770904.221773-3.04145965.665319-4.21612596.443546-1.1746663 1.084982-2.06663284 1.924308-2.68077373s1.845835-.92121133 3.019526-.92121133c.84615 0 1.668416.15597229 2.466799.472791.798383.31194458 1.497822.75549078 2.098315 1.3306386l-.634612 1.28677139c-.682379-.57027369-1.337463-.99432335-1.965251-1.26727486-.627789-.2729515-1.269225-.40942726-1.924308-.40942726-1.255577 0-2.231379.56052542-2.927405 1.67670212-.696026 1.12105083-1.04404 2.690522-1.04404 4.7084135v.30707044c.313895-.77498731.825679-1.3891282 1.535353-1.84242267.709674-.44842033 1.521704-.6726305 2.436092-.6726305.887092 0 1.67524.19496536 2.364442.58002195zm-.337777 6.4289828c.573198-.5946443.859797-1.3793799.859797-2.363955 0-.9699527-.290011-1.74981412-.870033-2.34445848-.580022-.59464435-1.33405-.89196653-2.262086-.89196653-.95533 0-1.733242.30219631-2.333735.9017148s-.90074 1.37937991-.90074 2.33471021c0 .9699527.300247 1.7546883.90074 2.3542068.600493.5995184 1.385229.9017148 2.354207.9017148.928035 0 1.678652-.2973222 2.25185-.8919666z"/><path d="m159.070289 13.4282393v1.4963592c0 .5751478-.095533 1.0966801-.286599 1.5743453-.191066.4776651-.511784.945582-.962154 1.3940023l-.777912-.5946443c.532256-.6141409.832503-1.199037.90074-1.7595624h-.982625v-2.1105001z"/><path d="m161.711095.96507854h9.621541v1.24777832l-6.837435 13.32588254h-1.80148l6.796492-13.16503611h-7.779118z"/><path d="m176.081992 13.4282393v1.4963592c0 .5751478-.095533 1.0966801-.286599 1.5743453-.191066.4776651-.511784.945582-.962154 1.3940023l-.777912-.5946443c.532256-.6141409.832502-1.199037.90074-1.7595624h-.982625v-2.1105001z"/><path d="m187.157 2.64178066c.95533 1.22828178 1.432995 2.97322177 1.432995 5.23969411 0 2.47118593-.494725 4.39159483-1.484174 5.76610063-.989449 1.3696316-2.371266 2.0568845-4.145451 2.0568845-.832502 0-1.647945-.1608464-2.446328-.472791s-1.504645-.7554908-2.118786-1.3306386l.655084-1.2916455c.696026.5897702 1.357934 1.0138199 1.985722 1.2818973.627788.2680773 1.262401.399679 1.903837.399679 1.255577 0 2.227966-.5605255 2.917169-1.6815763.689203-1.1161767 1.033804-2.68564786 1.033804-4.70841349v-.26320324c-.313894.76523904-.825679 1.36963167-1.535352 1.80830373-.709674.44842034-1.521705.6677564-2.436093.6677564-.887092 0-1.671828-.19496539-2.354206-.58489612-.682379-.38505659-1.214635-.93583374-1.596767-1.63770904-.382132-.70187531-.573198-1.50123329-.573198-2.40294809s.201302-1.70594692.603905-2.41757049c.402604-.70674944.958743-1.26727486 1.668416-1.66695385.709674-.40455313 1.514881-.60439262 2.415621-.60439262 1.760538 0 3.118471.61414089 4.073802 1.84242267zm-1.63771 5.15683383c.600494-.59951849.90074-1.3745058.90074-2.32983608 0-.96995268-.300246-1.75468826-.90074-2.35420675-.600493-.60439262-1.385228-.9017148-2.354206-.9017148-.928035 0-1.678652.29732218-2.25185.89196653-.573198.58977023-.859797 1.37937994-.859797 2.36395502 0 .96507855.286599 1.74981413.859797 2.34445848.573198.58977022 1.330638.8870924 2.272321.8870924.95533 0 1.733242-.29732218 2.333735-.9017148z"/></g><g transform="translate(1352.227084 194.213333)"><path d="m.035471.089728h42.916712v49.26713h-42.916712z" fill="#00a88a"/><path d="m42.9521838 49.3568579h-42.91671231v-49.26713035h42.91671231zm-40.37825665-46.72872807v44.19032577h37.83980095v-44.19032577z" fill="#000"/></g><path d="m16.4442443 13.0739279c1.490095.8410144 2.6336139 2.0140013 3.4302957 3.5187.7966819 1.5049595 1.1948925 3.2456638 1.1948925 5.2226344 0 1.9769707-.4352413 3.7325394-1.3057238 5.266967-.8702218 1.5344275-2.1097075 2.7220182-3.717675 3.5630326-1.6082282.8407536-3.4892319 1.2613912-5.643272 1.2613912-1.91777365 0-3.80607922-.3468369-5.66517747-1.0402501-1.85883748-.6934131-3.42273314-1.6449981-4.69142623-2.854755l1.37196183-2.7882562c2.92125384 2.4195138 5.91604755 3.6292706 8.98464187 3.6292706 2.2132371 0 3.9466395-.6269143 5.2007289-1.8810037 1.2538287-1.2540894 1.8810038-2.9580238 1.8810038-5.1120638 0-2.0948431-.6196125-3.7841738-1.8588375-5.0677313-1.2394857-1.2835575-2.8917857-1.9253363-4.9571607-1.9253363-3.00965814 0-5.41456823 1.2246213-7.2144695 3.6736032h-2.52278251v-18.45642023h18.89896331v3.00965815h-15.26969267v11.24221148c1.74096506-1.6820289 3.96880577-2.5230433 6.68326137-2.5230433 1.9769706 0 3.7103731.4206376 5.2004681 1.2613913z" fill="#f2f2f2" fill-rule="nonzero" transform="translate(1362.630417 203.100332)"/><g transform="translate(1412.266122 194.392443)"><path d="m.035471.089728h42.916712v49.26713h-42.916712z" fill="#00a88a"/><path d="m42.9521838 49.3568579h-42.91671231v-49.26713035h42.91671231zm-40.37825665-46.72872807v44.19032577h37.83980095v-44.19032577z" fill="#000"/></g><path d="m21.062913 18.8183824c1.1359562 1.3719618 1.7039343 3.01696 1.7039343 4.9347336 0 2.6852483-1.017823 4.8022576-3.0537299 6.3512889-2.0361676 1.549292-4.7800913 2.3238076-8.2322925 2.3238076-3.45246205 0-6.19638571-.7745156-8.23229258-2.3238076-2.03616764-1.5490313-3.05399069-3.6660406-3.05399069-6.3512889 0-1.9177736.58258178-3.5700736 1.7482669-4.9568999 1.16542433-1.3868263 2.76608993-2.3459739 4.8019968-2.8769213-1.88830558-.5606763-3.33406805-1.4827932-4.33728744-2.7663507-1.00321938-1.2835575-1.50495946-2.795558-1.50495946-4.5365231 0-1.68176807.44280388-3.1499576 1.32789007-4.40378625.88508619-1.25408942 2.13187378-2.2278407 3.73984121-2.92125383 1.60822822-.69341314 3.44489942-1.03998932 5.51053519-1.03998932 2.0653749 0 3.9020461.34657618 5.5102744 1.03998932 1.6079674.69341313 2.854755 1.66716441 3.7398412 2.92125383.8853469 1.25382865 1.32789 2.72201818 1.32789 4.40378625 0 1.7409651-.5090419 3.2529656-1.5271257 4.5365231-1.017823 1.2835575-2.4414192 2.2056744-4.2710494 2.7663507 2.0656358.5606763 3.6663014 1.526865 4.8022576 2.8990876zm-14.64981941-5.8425077c1.25382864 1.0475519 2.94315933 1.6893307 5.06773131 1.9253363 2.1243111-.2360056 3.8136418-.8777844 5.0677313-1.9253363 1.2538286-1.0472911 1.8810037-2.4119511 1.8810037-4.09397999 0-1.74070429-.6123107-3.1129269-1.836932-4.11614628-1.2243605-1.00321938-2.9285556-1.50469868-5.111803-1.50469868-2.18350818 0-3.88770331.5014793-5.11206385 1.50469868-1.22462132 1.00321938-1.83693198 2.37544199-1.83693198 4.11614628 0 1.68202889.6271751 3.04668889 1.88126452 4.09397999zm10.77724131 14.9377202c1.3276293-1.0032194 1.9915743-2.4638463 1.9915743-4.38162 0-1.7409651-.7007149-3.1350932-2.1024056-4.1826451-1.40143-1.0475519-3.2678301-1.6893307-5.5986787-1.9253363-2.33110948.2360056-4.19750956.8777844-5.59893949 1.9253363-1.40169072 1.0475519-2.10240568 2.44168-2.10240568 4.1826451 0 1.9177737.66394503 3.3784006 1.9918351 4.38162 1.32762929 1.0032193 3.2307993 1.5049594 5.70951007 1.5049594 2.4784499 0 4.38162-.5017401 5.70951-1.5049594z" fill="#f2f2f2" fill-rule="nonzero" transform="translate(1421.105194 202.753717)"/><g transform="translate(1503.787344 194.392443)"><path d="m.035471.089728h42.916712v49.26713h-42.916712z" fill="#00a88a"/><path d="m42.9521838 49.3568579h-42.91671231v-49.26713035h42.91671231zm-40.37816863-46.72872807v44.19032577h37.83971293v-44.19032577z" fill="#000"/></g><path d="m23.0372759 21.726858v3.0096582h-4.7800914v6.8603307h-3.6292706v-6.8603307h-14.51708254v-2.7441845l15.18102754-21.90862143h2.9653256v21.64314773zm-19.16443705 0h10.75507505v-15.4908338z" fill="#f2f2f2" fill-rule="nonzero" transform="translate(1512.887196 203.275277)"/><g transform="translate(1565.163879 194.392443)"><path d="m.035471.089728h42.916712v49.26713h-42.916712z" fill="#00a88a"/><path d="m42.9521838 49.3568579h-42.91671231v-49.26713035h42.91671231zm-40.37816863-46.72872807v44.19032577h37.83971293v-44.19032577z" fill="#000"/></g><path d="m17.3989587 13.5954872c1.490095.8410144 2.6482175 2.0213032 3.4743675 3.5408663.82615 1.5195632 1.239225 3.2532264 1.239225 5.2004682 0 1.9475025-.4352413 3.6884676-1.3057238 5.2226344-.8702218 1.5344275-2.0726768 2.7368826-3.6071044 3.6073651-1.5341668.8702218-3.2751319 1.305463-5.2226344 1.305463-3.80634005 0-6.74219755-1.3276293-8.80757252-3.9834094-2.06563575-2.6555193-3.09832323-6.4323913-3.09832323-11.330355 0-3.5408663.47957381-6.5799926 1.43846065-9.11737874.95888684-2.53764695 2.34571311-4.47028507 4.16047882-5.79817514 1.81450493-1.32789007 3.99071125-1.99157432 6.52835818-1.99157432 1.8293694 0 3.6071044.33927435 5.333205 1.01782304 1.7261006.67880948 3.2383619 1.63769632 4.5365231 2.8769213l-1.3719618 2.78851699c-1.4752306-1.23948576-2.891525-2.15404006-4.2488832-2.74418445-1.3573581-.59014439-2.7441844-.88534697-4.1604788-.88534697-2.71445553 0-4.82416305 1.20975688-6.32912251 3.62953142-1.50469868 2.41951375-2.2573088 5.81251797-2.2573088 10.17953437v.663945c.67880947-1.6817681 1.7852976-3.0096582 3.31946439-3.9834094 1.53442756-.9737513 3.28999632-1.460627 5.26696692-1.460627 1.9180345 0 3.6219688.4206377 5.1120639 1.2613913zm-.7301831 13.8977308c1.239225-1.2835575 1.8588375-2.9874918 1.8588375-5.1120638 0-2.0948431-.6271751-3.7841737-1.8810038-5.0677313-1.2540894-1.2835575-2.8842231-1.9253363-4.8906619-1.9253363-2.06563572 0-3.7474038.6490806-5.04582577 1.9475026-1.29816118 1.2981612-1.94724178 2.98019-1.94724178 5.045565 0 2.0948431.6490806 3.7914756 1.94724178 5.0898976 1.29842197 1.2981612 2.99505449 1.9475025 5.08989757 1.9475025 2.0064388 0 3.6292706-.6417787 4.8687564-1.9253363z" fill="#f2f2f2" fill-rule="nonzero" transform="translate(1574.52451 202.753717)"/><g transform="translate(1624.915924 194.392443)"><path d="m.035471.089728h42.916712v49.26713h-42.916712z" fill="#00a88a"/><path d="m42.9521838 49.3568579h-42.91671231v-49.26713035h42.91671231zm-40.37816863-46.72872807v44.19032577h37.83971293v-44.19032577z" fill="#000"/></g><path d="m.03650915.08371027h20.80213335v2.6998519l-14.78281705 28.81328473h-3.89474434l14.69415189-28.45914594h-16.81872385z" fill="#f2f2f2" fill-rule="nonzero" transform="translate(1635.972745 203.629332)"/><g transform="translate(1684.951213 194.392443)"><path d="m.035471.089728h42.916712v49.26713h-42.916712z" fill="#00a88a"/><path d="m42.9521838 49.3568579h-42.91671231v-49.26713035h42.91671231zm-40.37825665-46.72872807v44.19032577h37.83980095v-44.19032577z" fill="#000"/></g><path d="m19.0538664 4.23480103c2.065375 2.65551935 3.0983233 6.43239127 3.0983233 11.33035497 0 5.3407676-1.0697182 9.4936838-3.2088939 12.4590094-2.1391756 2.9655864-5.1266674 4.4481188-8.96273635 4.4481188-1.79990127 0-3.56277183-.3392743-5.28887245-1.017823-1.72610062-.6788095-3.25322635-1.6376963-4.58085564-2.8769213l1.41629437-2.7882562c1.50469869 1.2686931 2.9358575 2.19081 4.29321568 2.7660899 1.35709739.57528 2.72932.8631807 4.11614627.8631807 2.71445552 0 4.81686122-1.2097569 6.30695622-3.6292706 1.4900951-2.4197745 2.2351426-5.8127788 2.2351426-10.1797951v-.5755408c-.6788095 1.6525608-1.7852976 2.9580238-3.3194644 3.9171714-1.5344276.9588869-3.2899963 1.4384607-5.26696696 1.4384607-1.91803446 0-3.61466698-.4206376-5.08989756-1.2613913-1.47523058-.8410144-2.62605125-2.0213032-3.45220124-3.5408663s-1.23922498-3.2532264-1.23922498-5.2004681c0-1.94750259.43524126-3.68846765 1.30546302-5.22263444.87048253-1.53442756 2.07293758-2.73688261 3.60736514-3.60736514 1.53416679-.87022175 3.27513185-1.30546302 5.22263438-1.30546302 3.8063401 0 6.7421976 1.32762929 8.8075725 3.98340943zm-3.5408663 11.15328557c1.298422-1.2981611 1.9475026-2.98019 1.9475026-5.045565 0-2.09484305-.6490806-3.79147556-1.9475026-5.08989753-1.2981612-1.29816119-2.9947937-1.94750256-5.0896368-1.94750256-2.00643874 0-3.62953139.64177876-4.86875638 1.92533629-1.23922498 1.28355752-1.85883747 2.98749187-1.85883747 5.1120638 0 2.0948431.61961249 3.7841738 1.85883747 5.0677313 1.23922499 1.2835575 2.8769213 1.9253363 4.91282818 1.9253363 2.0656357 0 3.7474038-.6490806 5.045565-1.9475026z" fill="#f2f2f2" fill-rule="nonzero" transform="translate(1694.05523 202.753717)"/><path d="m274.413747 0v15.1195638-7.54515948h-274.07401986v7.54515948" stroke="#000" stroke-width="2.539424" transform="translate(1068.761162 109.742102)"/><path d="m0 .24858084h272.688304v7.55978192" stroke="#000" stroke-width="2.539424" transform="translate(1343.17491 117.053303)"/><path d="m90.8465476.12672749v8.60284661h-90.40348881v8.7441965" stroke="#000" stroke-width="2.539424" transform="translate(978.589682 177.005152)"/><path d="m1040.343498 185.807838v8.671084" stroke="#000" stroke-width="2.539424"/><path d="m.18765416.0292448h90.06863584v8.67108449" stroke="#000" stroke-width="2.539424" transform="translate(1069.248576 185.778593)"/><path d="m1100.026783 185.807838v8.671084" stroke="#000" stroke-width="2.539424"/><path d="m1314.628568 185.807838v8.671084" stroke="#000" stroke-width="2.539424"/><path d="m.27782564.0292448h88.64587606v8.67108449" stroke="#000" stroke-width="2.539424" transform="translate(1343.662323 185.778593)"/><path d="m1373.584633 185.807838v8.671084" stroke="#000" stroke-width="2.539424"/><path d="m90.3956902.12672749v8.67595862h-90.07887149v8.67108449" stroke="#000" stroke-width="2.539424" transform="translate(1525.467524 177.005152)"/><path d="m1586.145618 185.807838v8.671084" stroke="#000" stroke-width="2.539424"/><path d="m.22421017.0292448h90.27871103v8.67108449" stroke="#000" stroke-width="2.539424" transform="translate(1615.639004 185.778593)"/><path d="m1645.921998 185.807838v8.671084" stroke="#000" stroke-width="2.539424"/><g fill="#f2f2f2" fill-rule="nonzero" transform="translate(1263.581889 37.572233)"><path d="m7.95815261 22.540308v-20.02691984h-7.73636299v-2.18343345h18.06186388v2.18343345h-7.736363v20.02691984z"/><path d="m32.5082157 6.84954575v15.69076225h-2.495645v-2.8385659c-.4572278.9772392-1.1488702 1.7313239-2.0742447 2.2615717s-2.001566.7953717-3.2285744.7953717c-1.3935212 0-2.6154113-.3326845-3.6653293-.9980533-1.0502591-.6657101-1.8613267-1.6067805-2.4332026-2.8232112-.571876-1.2164307-.857814-2.6358843-.857814-4.2580194s.2910562-3.0518251.8731686-4.2894112c.5824537-1.2372448 1.3986395-2.1991293 2.4488986-2.88531225s2.2615716-1.02944503 3.6342787-1.02944503c1.2270084 0 2.2977405.27024212 3.2128785.81106756.9151381.54082545 1.6118987 1.29968715 2.0899406 2.27726753v-2.71402246zm-3.7431262 12.24381045c.8315404-1.0502592 1.2474812-2.5423915 1.2474812-4.4763969 0-1.9340055-.4159408-3.4210195-1.2474812-4.460701-.8318817-1.04002268-2.0172619-1.55969281-3.5564818-1.55969281-1.5388787 0-2.7396136.53536601-3.602887 1.60643921-.8629322 1.0710733-1.294569 2.5632056-1.294569 4.4763969s.4265185 3.3896277 1.2788731 4.4296504c.8526958 1.0396815 2.0588901 1.5596929 3.6185829 1.5596929 1.5392199 0 2.7246001-.5251296 3.5564818-1.5753887z"/><path d="m44.8301643 14.4610241 6.4571488 8.0792839h-3.0258928l-4.9598983-6.176329-4.8974559 6.176329h-3.0883351l6.5195911-8.0792839-6.1452784-7.61147835h3.0572845l4.5541938 5.77096575 4.5545351-5.77096575h3.0879939z"/><path d="m56.3720959 21.7606322c-1.1229379-.6657101-1.9913295-1.6118987-2.6048337-2.8389071s-.9202563-2.6618166-.9202563-4.3047658.3067521-3.0777574.9202563-4.3047658c.6135042-1.22700843 1.4818958-2.17319705 2.6048337-2.83890711 1.1229379-.66536885 2.422625-.99805327 3.8994026-.99805327 1.4764365 0 2.7761236.33268442 3.8990615.99805327 1.1232791.66571006 1.9913295 1.61189868 2.6048337 2.83890711.6135042 1.2270084.9202563 2.6618166.9202563 4.3047658s-.3067521 3.0777574-.9202563 4.3047658-1.4815546 2.173197-2.6048337 2.8389071c-1.1229379.6653688-2.422625.9980533-3.8990615.9980533-1.4767776 0-2.7764647-.3326845-3.8994026-.9980533zm7.4865938-2.6358843c.8318816-1.029445 1.2478225-2.532155 1.2478225-4.5077886 0-1.9131914-.4261773-3.3950872-1.2788731-4.4453463-.8526957-1.04991795-2.0380759-1.57504751-3.5561406-1.57504751-1.5388787 0-2.7348365.52512956-3.5875323 1.57504751-.8526957 1.0502591-1.278873 2.5321549-1.278873 4.4453463 0 1.9756336.421059 3.4783436 1.2631771 4.5077886.8424594 1.0291038 2.0435354 1.543997 3.6032282 1.543997 1.5596929 0 2.7553095-.5148932 3.5871912-1.543997z"/><path d="m85.1023814 12.6829538v9.8573542h-2.5270367v-9.7324695c0-1.4559636-.2910562-2.5215774-.8731687-3.19752386-.5824536-.67594651-1.4975917-1.01374915-2.7454142-1.01374915-1.4556223 0-2.6201884.44699138-3.4936983 1.34131535-.8735098.89432396-1.3102648 2.10051826-1.3102648 3.61858286v8.9838443h-2.5266955v-11.2925036c0-1.62179388-.0832564-3.08799385-.249428-4.39825865h2.4018109l.2497692 2.80751531c.4783832-1.01886737 1.1956167-1.80400261 2.152383-2.3550645.956425-.55106189 2.0483124-.82676344 3.2753208-.82676344 3.7642815 0 5.6464223 2.0691265 5.6464223 6.20772068z"/><path d="m92.4640906 21.7606322c-1.1229379-.6657101-1.9913295-1.6118987-2.6048337-2.8389071s-.9202563-2.6618166-.9202563-4.3047658.3067521-3.0777574.9202563-4.3047658c.6135042-1.22700843 1.4818958-2.17319705 2.6048337-2.83890711 1.1229379-.66536885 2.4229662-.99805327 3.8994026-.99805327 1.4764365 0 2.7761236.33268442 3.8994028.99805327 1.122938.66571006 1.990988 1.61189868 2.604492 2.83890711.613505 1.2270084.920257 2.6618166.920257 4.3047658s-.306752 3.0777574-.920257 4.3047658c-.613504 1.2270084-1.481554 2.173197-2.604492 2.8389071-1.1232792.6653688-2.4229663.9980533-3.8994028.9980533-1.4764364 0-2.7764647-.3326845-3.8994026-.9980533zm7.4865938-2.6358843c.8318816-1.029445 1.2478226-2.532155 1.2478226-4.5077886 0-1.9131914-.426177-3.3950872-1.2788732-4.4453463-.8526958-1.04991795-2.0380759-1.57504751-3.5561406-1.57504751-1.5388787 0-2.7348365.52512956-3.5875323 1.57504751-.8526958 1.0502591-1.278873 2.5321549-1.278873 4.4453463 0 1.9756336.421059 3.4783436 1.2635183 4.5077886.8421182 1.0291038 2.0431942 1.543997 3.602887 1.543997 1.5596929 0 2.7553095-.5148932 3.5871912-1.543997z"/><path d="m130.334156 12.6829538v9.8573542h-2.526696v-9.7324695c0-1.4767777-.254546-2.5478509-.764321-3.21321974-.509434-.66536885-1.336197-.99805327-2.479949-.99805327-1.330738 0-2.370761.44699138-3.119386 1.34131535-.748625.89432396-1.122938 2.11075466-1.122938 3.64963346v8.9527937h-2.526695v-9.7324695c0-1.4559636-.260006-2.5215774-.780017-3.19752386-.520012-.67594651-1.351552-1.01374915-2.495645-1.01374915-1.330738 0-2.375879.44699138-3.135082 1.34131535-.758861.89432396-1.138292 2.11075466-1.138292 3.64963346v8.9527937h-2.527037v-11.2925036c0-1.62179388-.082915-3.08799385-.249428-4.39825865h2.402152l.249428 2.74507301c.436755-.99805327 1.086428-1.76749263 1.949701-2.30831808.862933-.54082544 1.866445-.81106756 3.010197-.81106756 1.247823 0 2.26669.24942801 3.056944.74862526.790253.49919724 1.372707 1.26863659 1.747019 2.30831807.478383-.93561096 1.180262-1.679118 2.105637-2.23017989.925374-.55106189 1.970515-.82676344 3.135081-.82676344 3.472884 0 5.209327 2.0691265 5.209327 6.20772068z"/><path d="m148.926608 6.84954575-7.330999 17.12591165c-.76944 1.7883067-1.736784 3.0985715-2.90135 3.9304532s-2.599374 1.4037577-4.304766 1.715628l-.530247-1.9653972c1.476436-.3326844 2.594256-.7745576 3.353459-1.3256195.758861-.5510619 1.388061-1.3986394 1.887259-2.5423914l.62374-1.4037577-6.644475-15.53482705h2.65158l5.30316 12.94568925 5.364238-12.94568925z"/></g><g fill="#f2f2f2" fill-rule="nonzero" transform="translate(1242.021555 73.436333)"><path d="m.1061178 18.7869453 1.3955685-17.74521654h3.91271003l-1.17104917 14.58010814h7.92539604l-.2490868 3.1651084z"/><path d="m14.0379178 18.7869453.9970296-12.63586623h3.763258l-.9970297 12.63586623zm1.2959338-18.56754419h4.0375946l-.2739955 3.53907983h-4.0375946z"/><path d="m20.1190478 17.4411941 1.2212078-2.6167762c.6981254.4817953 1.445727.8513309 2.243146 1.1089481.7977602.2576171 1.5951792.3862551 2.3925981.3862551.6977843 0 1.2130186-.0996347 1.5453618-.2989042.3323432-.1996106.4985148-.4654169.4985148-.7977601 0-.3487216-.1951748-.6230583-.5858658-.8223277-.3903497-.1996106-1.0260328-.4319779-1.906367-.6977842-.9141144-.2494281-1.661716-.4985149-2.243146-.7479429-.5817713-.2490868-1.0843807-.6189636-1.5078282-1.108948-.4237888-.4903257-.6356832-1.1256676-.6356832-1.9067083 0-.8141385.2286139-1.52864228.6855005-2.14317012.4568867-.61486905 1.1048535-1.09666434 1.9439007-1.44572707.8390472-.34872152 1.7985432-.5234235 2.878488-.5234235.9472123 0 1.8736104.14126293 2.7791945.42378878.9052428.28252585 1.6654694.66468641 2.2803385 1.1464817l-1.1962991 2.51714153c-.6148691-.44869746-1.262836-.78922982-1.9439007-1.02193831-.6814059-.23236727-1.3460923-.34872152-1.9940592-.34872152-.6810648 0-1.1962991.09963472-1.5450206.29890416-.3490627.19961066-.5234235.47360613-.5234235.82266887 0 .36544108.2074586.65615608.6230582.87214498.4152584.215989 1.046847.4405083 1.8940833.6728756.9137732.2661475 1.6572803.5234235 2.2305211.7728515.5732409.2490868 1.0717557.6189636 1.4955445 1.1089481.4237887.4903256.6353419 1.1256676.6353419 1.9067082 0 1.2461165-.494079 2.222332-1.4829195 2.9283054-.9884992.7063146-2.3219667 1.0594719-4.000061 1.0594719-2.1598896 0-4.087412-.5152343-5.7822259-1.5453618z"/><path d="m38.3876878 13.8772056c-.0498173.6977843.0914456 1.2130186.4237888 1.5453618.3323432.332002.7892298.4981736 1.3706598.4981736.3821606 0 .8059494-.0661957 1.2710251-.1992694l-.2490868 2.9160216c-.5650517.2327085-1.2959338.3490627-2.1933287.3490627-1.4286663 0-2.5212361-.3821605-3.2773681-1.1464817-.7557907-.7643211-1.1338567-1.8442659-1.1338567-3.2401757 0-.2825258.0081891-.4985148.0249087-.6479668l.3988801-4.98446573h-2.3925982l.2241782-2.8163869h2.3925981l.2241781-2.96583898 3.8632339-1.22120774-.3241541 4.18704672h3.215267l-.2245193 2.8163869h-3.2149258z"/><path d="m42.4003738 17.4411941 1.2212077-2.6167762c.6977843.4817953 1.4457271.8513309 2.2431461 1.1089481.7974189.2576171 1.5951791.3862551 2.3925981.3862551.6977842 0 1.2130186-.0996347 1.5453618-.2989042.332002-.1996106.4981736-.4654169.4981736-.7977601 0-.3487216-.1951749-.6230583-.5855246-.8223277-.3903497-.1996106-1.0260329-.4319779-1.9067083-.6977842-.9137732-.2494281-1.6613748-.4985149-2.243146-.7479429-.58143-.2490868-1.0840394-.6189636-1.5078282-1.108948-.4234475-.4903257-.6353419-1.1256676-.6353419-1.9067083 0-.8141385.2282727-1.52864228.6851593-2.14317012.4572278-.61486905 1.1051947-1.09666434 1.9442419-1.44572707.8390472-.34872152 1.7985432-.5234235 2.878488-.5234235.9472122 0 1.8732692.14126293 2.7788532.42378878.9055841.28252585 1.6658107.66468641 2.2806797 1.1464817l-1.196299 2.51714153c-.6148691-.44869746-1.262836-.78922982-1.9442419-1.02193831-.6810648-.23236727-1.3457512-.34872152-1.9937181-.34872152-.6814059 0-1.196299.09963472-1.5453618.29890416-.3487215.19961066-.5234235.47360613-.5234235.82266887 0 .36544108.2077999.65615608.6233995.87214498.4152584.215989 1.0465057.4405083 1.8940833.6728756.9137732.2661475 1.6572802.5234235 2.2305211.7728515.5732408.2490868 1.0717556.6189636 1.4955444 1.1089481.4234476.4903256.635342 1.1256676.635342 1.9067082 0 1.2461165-.4944203 2.222332-1.4829195 2.9283054-.9884993.7063146-2.3219667 1.0594719-4.000061 1.0594719-2.1598897 0-4.087412-.5152343-5.7822259-1.5453618z"/><path d="m67.62263 18.7869453v-16.0005853h-6.1811059v-1.74463124h14.430656v1.74463124h-6.181106v16.0005853z"/><path d="m86.688689 12.4567284h-9.1967623c.0167195 1.594838.3865964 2.7996674 1.1092893 3.6138059s1.7736345 1.2212077 3.1528247 1.2212077c1.4621054 0 2.8078565-.4903256 4.0372534-1.4706357l.6732168 1.4706357c-.5483322.5148932-1.2505522.9219624-2.1059777 1.2212078-.8557667.2989041-1.7323475.4486974-2.6294012.4486974-1.9606202 0-3.4977928-.5776766-4.6108355-1.7323475-1.1133839-1.1546708-1.6699052-2.737225-1.6699052-4.7476626 0-1.2795555.2490868-2.4134122.7476016-3.40225268.4985148-.98849926 1.1962991-1.75691497 2.093694-2.30524714.8970537-.54833217 1.918992-.82232765 3.0654737-.82232765 1.6613748 0 2.965839.54389638 3.9130512 1.63237157.9468711 1.08813397 1.4204772 2.587773 1.4204772 4.4985758zm-7.8632949-3.98777725c-.656156.63124737-1.0758502 1.52011191-1.2584001 2.66659365h7.3023377c-.0996347-1.17957958-.4446028-2.07697448-1.034222-2.69150233-.5899604-.61486905-1.4081934-.92230358-2.4550404-.92230358s-1.8981779.31562368-2.5546752.94721226z"/><path d="m96.7326876 6.10126171-.0498173 1.84426595c-.3821606-.13307377-.8226689-.19926944-1.3208425-.19926944-1.2130186 0-2.114508.37772478-2.7041272 1.13385676-.5899604.75613198-.88477 1.67399982-.88477 2.75394462v7.1528857h-2.0189679v-9.02206036c0-1.29593379-.0665369-2.46732417-.1992694-3.51417115h1.918992l.1992694 2.31787208c.3159649-.84723633.8226689-1.49554443 1.5204531-1.94390067.6977843-.44869745 1.4955445-.67287557 2.3925981-.67287557.4152584 0 .797419.04981736 1.1464817.14945208z"/><path d="m116.845594 10.9113666v7.8755787h-2.018627v-7.7759439c0-1.17957958-.203705-2.03534628-.610775-2.56695893-.407069-.53161264-1.067661-.79776018-1.981434-.79776018-1.063225 0-1.894083.35725189-2.492233 1.07175566-.598149.71450378-.897395 1.68662475-.897395 2.91602165v7.1528857h-2.018626v-7.7759439c0-1.16320127-.2078-2.01453218-.623059-2.55467519-.415258-.53980181-1.079944-.81004392-1.993718-.81004392-1.063566 0-1.898519.35725189-2.504857 1.07175566-.606339.71450378-.909679 1.68662475-.909679 2.91602165v7.1528857h-2.018968v-9.02206036c0-1.29593379-.0661956-2.46732417-.1992694-3.51417115h1.9189924l.19961 2.19332868c.348722-.79776018.868051-1.41228802 1.557646-1.84426595s1.491108-.64796689 2.404882-.64796689c.997029 0 1.811168.19926944 2.442415.59814953.631589.39853888 1.096664 1.01340793 1.39591 1.84426595.38216-.74794282.942776-1.34165656 1.682189-1.78216486.739412-.44016708 1.574365-.66025062 2.504858-.66025062 2.774758 0 4.162138 1.65318567 4.162138 4.95955697z"/><path d="m119.911067 17.3415594.672876-1.4955444c.681406.5316126 1.371001.9137732 2.068785 1.1464817s1.478825.3490627 2.342781.3490627c.946871 0 1.665469-.162077 2.155795-.4862311.489984-.3238128.735318-.7933244.735318-1.4078522 0-.4985148-.166172-.8973949-.498515-1.1962991-.332343-.2992453-.880675-.5319538-1.644996-.6981254l-2.118603-.4981736c-1.046506-.2327085-1.85655-.6483081-2.429791-1.2464577-.573241-.5981495-.859861-1.3123121-.859861-2.14317008 0-1.09666435.440167-1.98962346 1.320843-2.67921855.880675-.6895951 2.043876-1.03422204 3.489262-1.03422204.880675 0 1.711533.14092171 2.492233.42344756.781041.28252584 1.437197.68959509 1.96915 1.22120774l-.673216 1.47063576c-1.17958-.9803101-2.442416-1.47063576-3.788167-1.47063576-.897054 0-1.591085.17026618-2.081069.51113976-.489984.34053236-.735318.81823307-.735318 1.43310213 0 .51489308.153888.92196238.461323 1.22120778.307093.2989041.801513.5316126 1.482919.6977842l2.118261.5234235c1.163202.2658063 2.027158.6769702 2.592209 1.2334915.564711.5568625.847237 1.28365.847237 2.1807037 0 1.0802861-.440168 1.9442419-1.320843 2.5922088s-2.076974.9721209-3.588897.9721209c-2.110414 0-3.779978-.540143-5.009716-1.6200878z"/><path d="m146.77832 17.0672227h3.91271v1.7197226h-9.894546v-1.7197226h3.913051v-13.48310252l-3.638715 2.31753087v-1.96880935l4.53611-2.89111294h1.17139z"/><path d="m156.722343 16.2199864v1.8193573c0 .6977842-.116013 1.3375619-.348722 1.918992-.232708.5817712-.623058 1.1464817-1.17139 1.6948138l-.947212-.7226929c.647967-.7476016 1.013749-1.4621054 1.096664-2.1435113h-1.196299v-2.5669589z"/><path d="m171.801648 17.0672227v1.7197226h-11.415341v-1.5450206l6.204991-6.8788902c.832564-.93049277 1.436515-1.76953995 1.818675-2.51714156.382161-.74794282.573241-1.49554443.573241-2.24314604 0-.9803101-.279796-1.73200629-.846213-2.25542978-.563004-.5234235-1.371683-.78513524-2.4158-.78513524-1.696179 0-3.374274.68106472-5.03599 2.04353539l-.77251-1.56992926c.697784-.66468642 1.57846-1.19629906 2.641685-1.59517916 1.063567-.39888009 2.136346-.59814953 3.214585-.59814953 1.627594 0 2.917386.41935298 3.862551 1.25874137.948577.83904718 1.422866 1.97290393 1.422866 3.40191149 0 1.01340793-.228614 1.98962345-.685842 2.92830535-.457228.93868189-1.218137 1.98962347-2.279315 3.15282467l-5.061239 5.4829805z"/><path d="m177.435104 16.2199864v1.8193573c0 .6977842-.119425 1.3375619-.351451 1.918992-.232026.5817712-.621011 1.1464817-1.170367 1.6948138l-.948577-.7226929c.648308-.7476016 1.01682-1.4621054 1.098712-2.1435113h-1.197664v-2.5669589z"/><path d="m191.339607 11.2102708c.549356.7312233.822328 1.6535269.822328 2.7665695 0 1.5453618-.522059 2.762475-1.569588 3.6513395-1.04753.8888646-2.466983 1.3334674-4.261773 1.3334674-1.146482 0-2.245193-.1910802-3.302959-.5732408-1.054354-.3821606-1.948337-.9223036-2.678536-1.6200878l.798442-1.5702705c1.644656 1.3624706 3.354142 2.0438766 5.131871 2.0438766 1.265907 0 2.22472-.2825259 2.879853-.8475776.658544-.5647104.98611-1.3955685.98611-2.4922328 0-2.1766092-1.364859-3.2650844-4.087753-3.2650844h-2.043876v-1.71938129h1.644655c1.313677 0 2.316848-.29105622 3.016339-.87248623.696078-.58143001 1.047529-1.41228803 1.047529-2.49223284 0-.96359058-.290033-1.70300303-.859861-2.21823737-.573241-.51489312-1.385332-.77251029-2.432862-.77251029-1.692425 0-3.371202.68106472-5.032918 2.04353539l-.771145-1.56992926c.713139-.68140594 1.590061-1.21711317 2.627354-1.6078041 1.037293-.39034973 2.122356-.58552459 3.251777-.58552459 1.596885 0 2.873028.40706925 3.82843 1.22120775.955401.81413849 1.433102 1.91080284 1.433102 3.28999303 0 1.01340793-.252499 1.90227247-.750673 2.6665936-.498174.76432114-1.187427 1.31265331-2.067762 1.64499652 1.04753.29890416 1.845972.81413848 2.391916 1.54502058z"/></g><g transform="translate(1238.737766 301.42884)"><path d="m.162355.124952h196.432387v68.608179h-196.432387z" fill="#0083c0"/><path d="m196.594742 68.7331309h-196.43238687v-68.60817855h196.43238687zm-193.8939261-66.06958614v63.53099374h191.3558681v-63.53099374z" fill="#000"/></g><g fill="#f2f2f2" fill-rule="nonzero" transform="translate(1249.006069 345.842567)"><path d="m.56874621 14.4291604 1.02879531-13.08192845h2.88430112l-.8634532 10.74723665h5.84208763l-.18371345 2.3346918z"/><path d="m10.8383279 14.4291604.7348538-9.31580278h2.7740731l-.7348538 9.31580278zm.95531-13.68665188h2.9761578l-.2020848 2.6102619h-2.9761578z"/><path d="m15.320936 13.4340458.9001959-1.9289912c.5143977.3597722 1.065538.6276877 1.6534211.8190558.587883.1913682 1.175766.2832249 1.7636491.2832249.5143976 0 .8940721-.0688925 1.1390233-.2143323.2449513-.1530946.3674269-.3444627.3674269-.589414 0-.2602607-.1439088-.4592836-.4317266-.6047234-.2878177-.1530946-.756287-.3214986-1.4054078-.5205215-.673616-.1837134-1.2247564-.3674269-1.6534211-.5511403-.4286647-.18371346-.7991535-.4516289-1.1114663-.81140107-.3123129-.36742689-.4684693-.83436524-.4684693-1.40846976 0-.59706871.168404-1.12524487.505212-1.57687376.3368079-.45928362.8144629-.81140106 1.4329648-1.07166178.618502-.25260599 1.3257988-.38273635 2.1218904-.38273635.6981111 0 1.3809127.10716618 2.0484049.31384381s1.2278182.48990253 1.6809781.84201997l-.8818246 1.86009865c-.4531598-.33680798-.9308148-.58175925-1.4329649-.75781797-.5021501-.16840399-.9920526-.25260599-1.4697076-.25260599-.5021501 0-.8818245.06889254-1.1390233.21433236-.2571989.15309454-.3857983.35211744-.3857983.61237816 0 .26791544.1530946.4822478.4592836.64299706.3061891.15309454.7715965.32149853 1.3962222.48990253.673616.1990229 1.2216945.39039107 1.6442354.57410452s.7899678.45162889 1.1022807.81905582c.3123128.3597721.4684693.8267105.4684693 1.400815 0 .9185672-.364365 1.6381116-1.093095 2.158633-.7287301.5205214-1.711597.7807822-2.9486009.7807822-1.5921832 0-3.0129005-.3750817-4.262152-1.1405544z"/><path d="m28.7871317 10.8084745c-.0367426.5128667.0673616.895603.3123129 1.1405543s.5817593.3674269 1.010424.3674269c.2816939 0 .5940068-.0459284.9369385-.1454398l-.1837134 2.1509783c-.4164171.168404-.9553099.252606-1.6166783.252606-1.0532905 0-1.8585677-.2832249-2.4158319-.84202-.5572641-.5664498-.8358962-1.3625414-.8358962-2.3882748 0-.2066776.0061238-.3674269.0183714-.4822478l.2939415-3.67426897h-1.7636491l.1653421-2.07443101h1.7636491l.1653421-2.18159719 2.8475584-.90325778-.2388274 3.08485497h2.3699034l-.1653421 2.07443101h-2.3699034z"/><path d="m31.7449182 13.4340458.9001959-1.9289912c.5143977.3597722 1.065538.6276877 1.6534211.8190558.587883.1913682 1.175766.2832249 1.7636491.2832249.5143976 0 .8940721-.0688925 1.1390233-.2143323.2449513-.1530946.3674269-.3444627.3674269-.589414 0-.2602607-.1439088-.4592836-.4317266-.6047234-.2878177-.1530946-.756287-.3214986-1.4054078-.5205215-.673616-.1837134-1.2247564-.3674269-1.6534211-.5511403-.4286647-.18371346-.7991535-.4516289-1.1114663-.81140107-.3123129-.36742689-.4684693-.83436524-.4684693-1.40846976 0-.59706871.168404-1.12524487.505212-1.57687376.3368079-.45928362.8144629-.81140106 1.4329649-1.07166178.6185019-.25260599 1.3257987-.38273635 2.1218903-.38273635.6981111 0 1.3809127.10716618 2.0484049.31384381s1.2278182.48990253 1.6809781.84201997l-.8818246 1.86009865c-.4531598-.33680798-.9308148-.58175925-1.4329649-.75781797-.5021501-.16840399-.9920526-.25260599-1.4697076-.25260599-.5021501 0-.8818245.06889254-1.1390233.21433236-.2571989.15309454-.3857983.35211744-.3857983.61237816 0 .26791544.1530946.4822478.4592836.64299706.3061891.15309454.7715965.32149853 1.3962222.48990253.673616.1990229 1.2216945.39039107 1.6442354.57410452s.7899678.45162889 1.1022807.81905582c.3123128.3597721.4684693.8267105.4684693 1.400815 0 .9185672-.364365 1.6381116-1.093095 2.158633-.7287301.5205214-1.711597.7807822-2.9486009.7807822-1.5921832 0-3.0129005-.3750817-4.262152-1.1405544z"/><path d="m52.3208244 13.1584757h2.8843011v1.2706847h-7.2934239v-1.2706847h2.8843011v-9.93583564l-2.6822163 1.70700411v-1.4467434l3.3435848-2.13566882h.8634532z"/><path d="m59.6509909 12.5384428v1.3395772c0 .5128667-.0857329.9874598-.2571988 1.4161245s-.4592836.84202-.8634532 1.2477205l-.6981111-.5358309c.4776549-.5511403.7471013-1.0716618.8083392-1.5768737h-.8818246v-1.8907176z"/><path d="m70.7656545 13.1584757v1.2706847h-8.4140759v-1.1405544l4.5744648-5.06742923c.6123782-.68892542 1.0594142-1.30895831 1.3411082-1.86009865.2816939-.55114034.4225409-1.10228069.4225409-1.65342103 0-.71954434-.2082085-1.27068468-.6246257-1.66107575-.4164171-.38273635-1.010424-.57410453-1.7820204-.57410453-1.2492515 0-2.4862554.49755726-3.7110117 1.50032649l-.5695117-1.15586377c.5143977-.48990253 1.1635185-.8802936 1.9473626-1.17117323.783844-.29853435 1.5738118-.44397416 2.3699035-.44397416 1.2002611 0 2.1494473.30618907 2.8475584.92622196.6981111.62003288 1.0471666 1.45439813 1.0471666 2.51075045 0 .74250851-.168404 1.46205285-.5052119 2.15863301-.336808.68892542-.897134 1.46205285-1.6809781 2.31938227l-3.729383 4.04169587z"/><path d="m74.9175784 12.5384428v1.3395772c0 .5128667-.0857329.9874598-.2571988 1.4161245s-.4592837.84202-.8634532 1.2477205l-.6981111-.5358309c.4776549-.5511403.7471013-1.0716618.8083391-1.5768737h-.8818245v-1.8907176z"/><path d="m85.1687888 8.84120966c.4041695.54348561.6062543 1.22475634.6062543 2.04381214 0 1.1405543-.3857982 2.0361573-1.1573947 2.6868091-.7715965.6583065-1.8187631.9874598-3.1414999.9874598-.8450819 0-1.6564829-.1454398-2.4342032-.42101-.7777203-.2832249-1.4360268-.6812707-1.9749196-1.1941374l.5878831-1.1635185c1.2125087 1.010424 2.4740077 1.5079812 3.784497 1.5079812.9308148 0 1.6381116-.2066776 2.1218903-.6200329.4837787-.4210099.7256681-1.0333881.7256681-1.8371344 0-1.60749269-1.0043002-2.41123903-3.0129005-2.41123903h-1.5064503v-1.26302995h1.2125088c.9675574 0 1.708535-.21433235 2.2229327-.64299706.5143976-.42866471.7715965-1.04104287.7715965-1.83713448 0-.71188961-.2112705-1.25537522-.6338114-1.63811157-.422541-.38273635-1.0196097-.5664498-1.7912062-.5664498-1.2492514 0-2.4862553.49755726-3.7110116 1.50032649l-.5695117-1.15586377c.5266452-.49755726 1.1727042-.89560306 1.9381769-1.18648268.7654727-.2832249 1.5646262-.42866471 2.3974605-.42866471 1.175766 0 2.1157665.29853435 2.8200014.90325778.7042349.5970687 1.0563523 1.40846976 1.0563523 2.41889372 0 .75016325-.1837134 1.40846977-.5511403 1.96726484-.3674269.56644979-.8757008.97215032-1.5248216 1.21710159.7715964.21433235 1.3594795.5970687 1.7636491 1.13289959z"/><path d="m90.1841659 12.5384428v1.3395772c0 .5128667-.085733.9874598-.2571988 1.4161245-.1714659.4286647-.4592837.84202-.8634533 1.2477205l-.6981111-.5358309c.477655-.5511403.7471014-1.0716618.8083392-1.5768737h-.8818245v-1.8907176z"/><path d="m101.776484 10.3338814v1.2477205h-1.9841048v2.8475585h-1.5064503v-2.8475585h-6.0258011v-1.1405543l6.3013713-9.09381565h1.2308801v8.98664945zm-7.9547919 0h4.4642368v-6.42997064z"/><path d="m105.450753 12.5384428v1.3395772c0 .5128667-.085733.9874598-.257198 1.4161245-.171466.4286647-.459284.84202-.863454 1.2477205l-.698111-.5358309c.477655-.5511403.747102-1.0716618.808339-1.5768737h-.881824v-1.8907176z"/><path d="m114.847696 6.74381447c.618502.34446271 1.093095.83436524 1.423779 1.45439812.330685.62768761.496027 1.34723195.496027 2.17394251 0 .8190557-.180652 1.5462548-.541955 2.1815971-.361303.6353424-.875701 1.1328996-1.543193 1.4773623-.667492.3521175-1.448274.5281762-2.342346.5281762-.796092 0-1.579936-.1454398-2.351532-.4363194-.771597-.2832249-1.420718-.6812707-1.947363-1.178828l.569512-1.1635185c1.212508 1.010424 2.455636 1.5079812 3.729383 1.5079812.918567 0 1.638111-.2602607 2.158633-.7807821.520521-.5205215.780782-1.2247563.780782-2.1203594 0-.87263887-.257199-1.56921902-.771597-2.10504991-.514397-.52817616-1.200261-.79609161-2.05759-.79609161-1.249252 0-2.247428.50521198-2.994529 1.52329067h-1.047167v-7.6623817h7.844564v1.2477205h-6.338114v4.66938345c.722606-.69658015 1.647297-1.04869759 2.774073-1.04869759.820587 0 1.540131.17605872 2.158633.52817616z"/><path d="m120.717341 12.5384428v1.3395772c0 .5128667-.085733.9874598-.257199 1.4161245s-.459284.84202-.863453 1.2477205l-.698111-.5358309c.477655-.5511403.747101-1.0716618.808339-1.5768737h-.881825v-1.8907176z"/><path d="m130.077541 6.74381447c.618502.34446271 1.099219.83436524 1.442151 1.46970758.342931.62768761.514397 1.34723194.514397 2.15863305 0 .8037463-.180651 1.5309453-.541954 2.1662877-.361304.6353423-.860392 1.1328996-1.497265 1.4926717-.636873.3674269-1.35948.5434857-2.167819.5434857-1.579935 0-2.798568-.5511404-3.655897-1.6534211-.85733-1.1022806-1.285994-2.6714997-1.285994-4.70000233 0-1.46970758.199022-2.73273753.597068-3.78908985.398046-1.0486976.973681-1.85244393 1.726907-2.40358427.753225-.55114034 1.656483-.82671051 2.709773-.82671051.759349 0 1.497265.13778508 2.213747.42100998s1.34417.6812707 1.883063 1.19413741l-.569512 1.15586377c-.612378-.51286671-1.200261-.88794833-1.763649-1.13289959s-1.139023-.3674269-1.726906-.3674269c-1.126776 0-2.002477.49755726-2.627103 1.50032649-.624625 1.01042396-.936938 2.41889373-.936938 4.22540929v.27557017c.281694-.69658015.740977-1.24772049 1.377851-1.65342102.636873-.39804581 1.365603-.60472343 2.18619-.60472343.796091 0 1.503388.17605872 2.12189.52817616zm-.303127 5.76400943c.514397-.5281762.771596-1.2400658.771596-2.1203594 0-.87263887-.26026-1.56921902-.780782-2.10504991-.520521-.52817616-1.197199-.79609161-2.030033-.79609161-.85733 0-1.555441.26791545-2.094334.80374634-.538893.54348561-.808339 1.24006577-.808339 2.09739518 0 .8726389.269446 1.5768738.808339 2.1127047.538893.5358308 1.243128.811401 2.112705.811401.832834 0 1.50645-.2679154 2.020848-.8037463z"/><path d="m135.983928 12.5384428v1.3395772c0 .5128667-.085733.9874598-.257199 1.4161245-.171465.4286647-.459283.84202-.863453 1.2477205l-.698111-.5358309c.477655-.5511403.747102-1.0716618.808339-1.5768737h-.881824v-1.8907176z"/><path d="m138.353832 1.34723195h8.634532v1.12524486l-6.136029 11.95668359h-1.616679l6.099287-11.81124377h-6.981111z"/><path d="m151.250516 12.5384428v1.3395772c0 .5128667-.085733.9874598-.257199 1.4161245s-.459284.84202-.863453 1.2477205l-.698111-.5358309c.477655-.5511403.747101-1.0716618.808339-1.5768737h-.881825v-1.8907176z"/><path d="m161.915081 8.9101022c.471532.5664498.707297 1.2477205.707297 2.0438121 0 1.1175901-.422541 1.9978837-1.267623 2.6408808-.845081.6429971-1.984105.9644956-3.41707.9644956s-2.571988-.3214985-3.41707-.9644956-1.267623-1.5232907-1.267623-2.6408808c0-.7960916.24189-1.4773623.725669-2.05146683.483778-.58175925 1.148209-.97980505 1.99329-1.1941374-.783844-.23729654-1.383974-.62003289-1.800391-1.14820905-.416418-.53583089-.624626-1.1635185-.624626-1.88306284 0-.70423488.183713-1.30895831.55114-1.82947974.367427-.52052144.884887-.92622197 1.552379-1.21710159.667492-.2832249 1.429903-.42866471 2.287232-.42866471.85733 0 1.619741.14543981 2.287233.42866471.667492.29087962 1.184951.69658015 1.552378 1.21710159.367427.52052143.551141 1.12524486.551141 1.82947974 0 .71954434-.211271 1.34723195-.633812 1.88306284-.422541.52817616-1.013486.91091251-1.772834 1.14820905.857329.2296418 1.521759.62768761 1.99329 1.20179213zm-6.080915-2.42654845c.520522.43631944 1.221695.70423488 2.103519.7960916.881825-.09185672 1.582998-.35977216 2.103519-.7960916.520522-.43631944.780782-1.00276923.780782-1.69934939 0-.71954434-.254137-1.29364886-.76241-1.70700412-.508274-.42100998-1.215571-.62768761-2.121891-.62768761-.906319 0-1.613616.20667763-2.12189.62768761-.508274.41335526-.762411.98745978-.762411 1.70700412 0 .69658016.260261 1.26302995.780782 1.69934939zm4.473423 6.20032885c.55114-.4133553.82671-1.0257334.82671-1.821825 0-.7195444-.290879-1.30130361-.872639-1.72996832-.581759-.43631943-1.356417-.70423488-2.323975-.80374633-.967557.09951145-1.742216.3674269-2.323975.80374633-.581759.42866471-.872639 1.01042392-.872639 1.72996832 0 .7960916.27557 1.4084697.826711 1.821825.55114.4133553 1.341108.6276876 2.369903.6276876 1.028796 0 1.818763-.2143323 2.369904-.6276876z"/><path d="m166.517103 12.5384428v1.3395772c0 .5128667-.085733.9874598-.257199 1.4161245-.171465.4286647-.459283.84202-.863453 1.2477205l-.698111-.5358309c.477655-.5511403.747102-1.0716618.808339-1.5768737h-.881824v-1.8907176z"/><path d="m176.456001 2.85521316c.857329 1.10228069 1.285994 2.67149972 1.285994 4.70000237 0 2.21987082-.443974 3.94218437-1.331923 5.17459547-.887948 1.232411-2.128014 1.8447892-3.720197 1.8447892-.747101 0-1.478893-.1377851-2.195376-.42101-.716482-.2832249-1.350293-.6812707-1.901434-1.1941374l.587883-1.1558638c.624626.5281762 1.218633.9109125 1.782021 1.148209.563388.2372966 1.132899.3597722 1.708535.3597722 1.126776 0 1.999414-.505212 2.617916-1.5079812s.927753-2.411239.927753-4.22540929v-.23729654c-.281694.6812707-.740977 1.22475632-1.377851 1.62280212-.636873.3980458-1.365603.5970687-2.18619.5970687-.796091 0-1.500326-.17605872-2.112704-.52052143-.612378-.35211744-1.090033-.84201997-1.432965-1.46970758-.342932-.63534234-.514398-1.35488667-.514398-2.15863301 0-.81140106.180652-1.53094539.541955-2.17394246.361303-.63534234.860391-1.13289959 1.497265-1.49267176.636873-.35977217 1.359479-.54348561 2.167818-.54348561 1.579936 0 2.798568.55114034 3.655898 1.65342102zm-1.469708 4.63110982c.538893-.54348561.808339-1.24006577.808339-2.09739519 0-.86498415-.269446-1.56921903-.808339-2.11270464-.538893-.53583089-1.243127-.80374634-2.112704-.80374634-.832835 0-1.506451.26026072-2.020848.79609161-.514398.53583089-.771597 1.24006577-.771597 2.12035937 0 .87263888.257199 1.56921903.771597 2.10504992.514397.53583089 1.194137.79609161 2.039219.79609161.857329 0 1.55544-.26791545 2.094333-.80374634z"/></g><g fill="#f2f2f2" fill-rule="nonzero" transform="translate(1307.966463 315.478416)"><path d="m15.7309762 20.418335h-2.3788531l-2.4066219-6.4812177c-.2915715-.8025158-.6979203-1.3403033-1.21719525-1.6133623-.51927495-.2739846-1.2532946-.4100513-2.20205898-.4100513h-4.86785547v8.5046313h-2.21501771v-19.47142187h7.74006606c2.09653785 0 3.70527205.46466314 4.82620245 1.39491504 1.121856.92932627 1.6818584 2.26962951 1.6818584 4.01998408 0 1.2764352-.332299 2.34738191-.9978225 3.21284015-.6655235.8663839-1.6272466 1.4819237-2.8851693 1.8466194.5655561.0907112 1.0487317.332299 1.4495268.7247635.4007951.3915388.7386478.9524668 1.0117068 1.6818584zm-7.73914047-10.3651351c2.98976477 0 4.48464727-1.22089777 4.48464727-3.66454456 0-1.20331091-.3646958-2.10116598-1.0940874-2.6935652-.7284659-.59239922-1.85957813-.88859883-3.39055987-.88859883h-5.33344423v7.24670859z"/><path d="m18.2745903 18.1755486.8478714-1.7225859c.9663512.8201027 1.9502893 1.4041713 2.9536655 1.7503546 1.0024506.3461833 2.1696621.5192749 3.5007091.5192749 1.5680067 0 2.7759458-.3054558 3.6228915-.9154419.8478714-.6109117 1.2718071-1.4726674 1.2718071-2.5843416 0-.6571929-.2045629-1.1903522-.6146142-1.6004035-.410977-.4100513-.9487644-.7340197-1.6142879-.9709794-.6655235-.2369596-1.5541223-.4831756-2.6657965-.7377221-1.495808-.3285964-2.725962-.684036-3.6923132-1.0672442-.9663513-.3822826-1.7503546-.93395442-2.3520101-1.65408972-.6016554-.72013531-.9024831-1.66427156-.9024831-2.83055753 0-1.11259978.2915714-2.09190974.8747144-2.93978113.5840686-.84787138 1.4087994-1.50876676 2.475118-1.98268614 1.0672442-.474845 2.3112826-.71180469 3.7330407-.71180469 1.3495595 0 2.6074822.2101166 3.7746938.62942417 1.166286.41930758 2.1511497 1.03021927 2.9536655 1.83180947l-.8756401 1.72351148c-.9117394-.78400334-1.8364376-1.35881571-2.7759457-1.72351148-.9385825-.36377015-1.9641737-.54611803-3.0767735-.54611803-1.5133948 0-2.6981933.3230427-3.5553209.97005372-.856202.64793665-1.2847658 1.53653548-1.2847658 2.66672212 0 .9848637.373952 1.72258585 1.1209304 2.21501771.747904.49243185 1.8966031.92099566 3.4460973 1.28569143 1.6772303.40079512 2.994393.77011902 3.9514879 1.10797162.957095.3369271 1.7549827.8469458 2.3927375 1.5309818.6386804.684036.9580206 1.5911473.9580206 2.7213339 0 1.0940873-.2924971 2.0558104-.8756401 2.8851693-.5831429.8293589-1.41713 1.4726675-2.501961 1.9280744-1.0848311.4554069-2.3566382.6840359-3.8154213.6840359-3.0443766 0-5.4695109-.8210283-7.2744773-2.4621592z"/><path d="m35.3125473 18.1755486.8478714-1.7225859c.9663512.8201027 1.9502893 1.4041713 2.9536654 1.7503546 1.0024506.3461833 2.1696622.5192749 3.5007092.5192749 1.5680067 0 2.7750201-.3054558 3.6228915-.9154419.8478714-.6109117 1.271807-1.4726674 1.271807-2.5843416 0-.6571929-.2045628-1.1903522-.6155398-1.6004035-.4100513-.4100513-.9478387-.7340197-1.6133622-.9709794-.6655235-.2369596-1.5541223-.4831756-2.6657965-.7377221-1.495808-.3285964-2.725962-.684036-3.6923133-1.0672442-.9663512-.3822826-1.7503545-.93395442-2.35201-1.65408972-.6016555-.72013531-.9024832-1.66427156-.9024832-2.83055753 0-1.11259978.2915715-2.09190974.8747145-2.93978113.5840686-.84787138 1.4087994-1.50876676 2.475118-1.98268614 1.0672442-.474845 2.3112826-.71180469 3.7330407-.71180469 1.3495595 0 2.6074822.2101166 3.7746938.62942417 1.1662859.41930758 2.1511496 1.03021927 2.9536655 1.83180947l-.8756401 1.72351148c-.9117395-.78400334-1.8364376-1.35881571-2.7759458-1.72351148-.9385825-.36377015-1.9641736-.54611803-3.0767734-.54611803-1.5133949 0-2.6981933.3230427-3.555321.97005372-.856202.64793665-1.2847658 1.53653548-1.2847658 2.66672212 0 .9848637.373952 1.72258585 1.1209304 2.21501771.747904.49243185 1.8966032.92099566 3.4460974 1.28569143 1.6772303.40079512 2.9943929.77011902 3.9514879 1.10797162.957095.3369271 1.7549827.8469458 2.3927375 1.5309818.6386804.684036.9580206 1.5911473.9580206 2.7213339 0 1.0940873-.2924971 2.0558104-.8756401 2.8851693s-1.41713 1.4726675-2.5019611 1.9280744-2.3566381.6840359-3.8154212.6840359c-3.0443766 0-5.469511-.8210283-7.2744773-2.4621592z"/></g><g transform="translate(1132.952069 387.954528)"><path d="m.039304.099422h47.553665v54.590201h-47.553665z" fill="#00a88a"/><path d="m47.5929694 54.6896229h-47.55366538v-54.59020073h47.55366538zm-45.01519163-52.05176699v49.51333329h42.47652283v-49.51333329z" fill="#000"/></g><path d="m23.6732656 32.2046798v3.383959h-22.46109685v-3.0406798l12.21155275-13.5355472c1.6346218-1.8308227 2.8280084-3.4819151 3.5798709-4.953277.7521514-1.4710729 1.1280827-2.9424349 1.1280827-4.4137968 0-1.92877865-.5559506-3.40823133-1.6675628-4.43806909-1.1116122-1.03012673-2.6971116-1.54504561-4.7570761-1.54504561-3.33483658 0-6.63673225 1.34046504-9.90626489 4.02168407l-1.52048438-3.08980225c1.37340598-1.30781306 3.10598377-2.35383234 5.19860024-3.13863575 2.09232752-.78480342 4.2011255-1.17691617 6.32639393-1.17691617 3.2039397 0 5.7377914.82554616 7.6015551 2.47663847 1.8634746 1.65109231 2.7953564 3.88240747 2.7953564 6.69394548 0 1.99437155-.4496149 3.91534845-1.3488447 5.76264155-.8989409 1.8470042-2.394864 3.9150595-4.4871916 6.2035878l-9.95538731 10.7893133z" fill="#f2f2f2" fill-rule="nonzero" transform="translate(1144.791113 397.615433)"/><g transform="translate(1191.307406 387.954528)"><path d="m.039304.099422h47.553665v54.590201h-47.553665z" fill="#00a88a"/><path d="m47.5929694 54.6896229h-47.55366538v-54.59020073h47.55366538zm-45.0150941-52.05176699v49.51333329h42.4764253v-49.51333329z" fill="#000"/></g><path d="m21.6572224 20.6796856c1.0789602 1.4387099 1.6184403 3.2533511 1.6184403 5.4436346 0 3.0406798-1.0298378 5.4355438-3.0895133 7.184881-2.0599645 1.7490483-4.855321 2.6237169-8.3860695 2.6237169-2.25616532 0-4.42217651-.3762202-6.49803356-1.1280827-2.076146-.7518625-3.83357397-1.8146412-5.27199496-3.1877582l1.56931788-3.0895133c3.2365917 2.6809301 6.60408028 4.0213951 10.10246574 4.0213951 2.4847292 0 4.3730541-.5559506 5.6643967-1.6675628s1.9371583-2.746234 1.9371583-4.9041544c0-4.2829-2.68093-6.4243499-8.0427902-6.4243499h-4.02168406v-3.3839591h3.23688066c2.5829741 0 4.5608752-.5721321 5.9339922-1.7163963 1.3731171-1.1442642 2.0599645-2.779175 2.0599645-4.90415445 0-1.89641562-.5640413-3.35130707-1.692124-4.36467437-1.1277937-1.01365625-2.7216728-1.52048438-4.7816373-1.52048438-3.33483658 0-6.63673225 1.34046504-9.90626489 4.02168407l-1.52048437-3.08980225c1.40605796-1.34046504 3.13054499-2.39486403 5.17403901-3.16319698 2.04349402-.76833294 4.17685323-1.15235494 6.40007765-1.15235494 3.1386357 0 5.6479262.80098493 7.5278713 2.40295479 1.8799452 1.60196986 2.8199177 3.75989029 2.8199177 6.47347235 0 1.99437156-.4906466 3.74341986-1.4713619 5.24743376s-2.3376508 2.5829741-4.0705175 3.2368806c2.0596755.5883136 3.6292823 1.6019699 4.7079536 3.0403909z" fill="#f2f2f2" fill-rule="nonzero" transform="translate(1203.470522 396.880376)"/><g transform="translate(1249.976943 388.127483)"><path d="m.039304.099422h47.553665v54.590201h-47.553665z" fill="#00a88a"/><path d="m47.5929694 54.6896229h-47.55366538v-54.59020073h47.55366538zm-45.01519163-52.05176699v49.51333329h42.47652283v-49.51333329z" fill="#000"/></g><path d="m25.5263379 24.074336v3.3348366h-5.2965562v7.601555h-4.0213951v-7.601555h-16.08558047v-3.0406798l16.82126147-24.27573805h3.2857141v23.98158125zm-21.23505825 0h11.91710695v-17.16454069z" fill="#f2f2f2" fill-rule="nonzero" transform="translate(1260.680298 397.799392)"/><g transform="translate(1072.3219 388.127483)"><path d="m.039304.099422h47.553665v54.590201h-47.553665z" fill="#00a88a"/><path d="m47.5929694 54.6896229h-47.55366538v-54.59020073h47.55366538zm-45.0150941-52.05176699v49.51333329h42.4764253v-49.51333329z" fill="#000"/></g><path d="m12.0107286 31.6267686h7.6995109v3.383959h-19.46953948v-3.383959h7.69951097v-26.53161447l-7.16003086 4.56087523v-3.87431672l8.92554959-5.68895789h2.30499888z" fill="#f2f2f2" fill-rule="nonzero" transform="translate(1086.781678 397.799392)"/><g transform="translate(1310.293872 388.430153)"><path d="m.039304.099422h47.553665v54.590201h-47.553665z" fill="#00a88a"/><path d="m47.5929694 54.6896229h-47.55366538v-54.59020073h47.55366538zm-45.01519163-52.05176699v49.51333329h42.47652283v-49.51333329z" fill="#000"/></g><path d="m18.2209624 14.4865002c1.6510923.9318818 2.9181626 2.2316041 3.8009219 3.8988779.8827594 1.6675628 1.3239946 3.5963414 1.3239946 5.7869138 0 2.1905725-.4822669 4.1358216-1.4468007 5.8360363-.9642448 1.7002148-2.3376508 3.0161186-4.119351 3.9480004-1.7819892.9315929-3.866226 1.3976783-6.2529993 1.3976783-2.12497947 0-4.21730699-.384311-6.27727148-1.1526439-2.05967553-.768333-3.79254227-1.822732-5.19831128-3.163197l1.52019542-3.0895133c3.23688066 2.6809301 6.55524679 4.0213951 9.95538734 4.0213951 2.4523662 0 4.3730541-.6946492 5.7626416-2.0842367 1.3892985-1.3895875 2.0842368-3.2776234 2.0842368-5.6643967 0-2.3211804-.6865586-4.1930347-2.0596756-5.6152742-1.373406-1.4222395-3.2042286-2.1333592-5.492757-2.1333592-3.33483662 0-5.99958518 1.3569355-7.99395675 4.0705175h-2.79535649v-20.45054375h20.94090144v3.3348366h-16.91950633v12.45687605c1.9290676-1.8637637 4.39761531-2.7956455 7.40535413-2.7956455 2.1905725 0 4.1112603.4660854 5.7623527 1.3976783z" fill="#f2f2f2" fill-rule="nonzero" transform="translate(1322.999783 398.270213)"/><g transform="translate(1374.317793 388.430153)"><path d="m.039304.099422h47.553665v54.590201h-47.553665z" fill="#00a88a"/><path d="m47.5929694 54.6896229h-47.55366538v-54.59020073h47.55366538zm-45.01519163-52.05176699v49.51333329h42.47652283v-49.51333329z" fill="#000"/></g><path d="m19.2788288 15.0644114c1.6510923.9318818 2.9343442 2.2396948 3.8497555 3.9234391.9154114 1.6837443 1.373117 3.6047212 1.373117 5.7623526 0 2.1579205-.4822669 4.0869881-1.4468007 5.7869139-.9642448 1.7002148-2.2966191 3.032589-3.9968339 3.9971228-1.6999258.9642449-3.6289934 1.4465118-5.7869138 1.4465118-4.21759597 0-7.47065814-1.471073-9.75918651-4.4137968-2.28881733-2.9424349-3.43308151-7.1273789-3.43308151-12.554543 0-3.9234392.53138935-7.2909278 1.5938791-10.10246581 1.06248975-2.81182696 2.59915564-4.95327693 4.60999768-6.42463886 2.01055308-1.47136192 4.42188754-2.20675393 7.23371454-2.20675393 2.0270235 0 3.9968339.37593124 5.909431 1.12779372 1.9125972.75215143 3.5882507 1.81464118 5.0266717 3.1877582l-1.5201954 3.08980225c-1.6346219-1.37340597-3.2039398-2.38677327-4.7079537-3.0406798s-3.0406798-.98100427-4.6099976-.98100427c-3.0077389 0-5.34538973 1.34046504-7.01295251 4.02168407-1.66727383 2.68093003-2.5011997 6.44053143-2.5011997 11.27938193v.735681c.75215144-1.8634747 1.97819006-3.3348366 3.67811586-4.4137969 1.70021477-1.0789602 3.64546385-1.6184403 5.83603635-1.6184403 2.1252684 0 4.0133043.4660854 5.6643966 1.3976783zm-.8090757 15.3993109c1.3731171-1.4222395 2.0596756-3.3102754 2.0596756-5.6643967 0-2.3211804-.6949383-4.1930347-2.0842368-5.6152742-1.3895875-1.4222395-3.195849-2.1333592-5.4190734-2.1333592-2.2888173 0-4.15229196.7192105-5.5910019 2.1579204-1.43842099 1.438421-2.15763148 3.3021846-2.15763148 5.590713 0 2.3211803.71921049 4.2011255 2.15763148 5.6398354 1.43870994 1.438421 3.3186551 2.1579205 5.6398354 2.1579205 2.2232244 0 4.0213952-.7111198 5.3948011-2.1333592z" fill="#f2f2f2" fill-rule="nonzero" transform="translate(1384.69083 397.697106)"/><g transform="translate(1436.988825 388.430153)"><path d="m.039304.099422h47.553665v54.590201h-47.553665z" fill="#00a88a"/><path d="m47.5929694 54.6896229h-47.55366538v-54.59020073h47.55366538zm-45.01528916-52.05176699v49.51333329h42.47662036v-49.51333329z" fill="#000"/></g><path d="m.04045378.09275475h23.04969942v2.99155735l-16.38002621 31.9264155h-4.31555192l16.28178133-31.5340138h-18.63590262z" fill="#f2f2f2" fill-rule="nonzero" transform="translate(1447.938813 398.275017)"/><g transform="translate(1499.78573 388.430153)"><path d="m.039304.099422h47.553665v54.590201h-47.553665z" fill="#00a88a"/><path d="m47.5929694 54.6896229h-47.55366538v-54.59020073h47.55366538zm-45.01519163-52.05176699v49.51333329h42.47652283v-49.51333329z" fill="#000"/></g><path d="m23.338655 20.8516142c1.2586906 1.5201954 1.8880359 3.3429273 1.8880359 5.4679068 0 2.9753759-1.1277937 5.3211174-3.3836701 7.0375137-2.2561653 1.7166852-5.2965562 2.5748834-9.1217504 2.5748834-3.82548323 0-6.86587408-.8581982-9.12175046-2.5748834-2.25616535-1.7163963-3.38395906-4.0621378-3.38395906-7.0375137 0-2.1249795.64552681-3.9558022 1.93715836-5.4924681 1.29134258-1.5366659 3.06495207-2.5994446 5.32082845-3.1877582-2.09232751-.6212545-3.69429737-1.6430015-4.80590957-3.065241s-1.66756278-3.0976041-1.66756278-5.02667165c0-1.86347468.49064661-3.49029472 1.47136193-4.87959325.98071531-1.38958749 2.36221204-2.46854771 4.14391229-3.23688066 1.78198919-.76833294 3.81710354-1.15235494 6.10592084-1.15235494 2.2885284 0 4.3236427.384022 6.1056319 1.15235494 1.7817002.76833295 3.1631969 1.84729317 4.1439122 3.23688066.9810043 1.38929853 1.471362 3.01611857 1.471362 4.87959325 0 1.92906755-.5640414 3.60443215-1.692124 5.02667165-1.1277937 1.4222395-2.7052024 2.4439865-4.7325149 3.065241 2.2888173.6212546 4.0624268 1.6918351 5.3211174 3.2123195zm-16.23265883-6.4737613c1.38929853 1.1607346 3.26115293 1.8718543 5.61527423 2.1333592 2.3538323-.2615049 4.2256867-.9726246 5.6152742-2.1333592 1.3892985-1.1604457 2.0842368-2.6725504 2.0842368-4.53631405 0-1.92877864-.6784678-3.44926302-2.0354033-4.56087522-1.3566466-1.1116122-3.2449714-1.66727383-5.6641077-1.66727383-2.4194253 0-4.30775013.55566163-5.66439668 1.66727383-1.35693551 1.1116122-2.03540327 2.63209658-2.03540327 4.56087522 0 1.86376365.69493823 3.37586835 2.08452572 4.53631405zm11.94166813 16.5516658c1.471073-1.1116122 2.206754-2.7300525 2.206754-4.855032 0-1.9290676-.7764237-3.4738243-2.3295601-4.6345589-1.5528474-1.1607347-3.6209026-1.8718544-6.2035878-2.1333592-2.5829741.2615048-4.65102939.9726245-6.20387679 2.1333592-1.55313637 1.1607346-2.32956007 2.7054913-2.32956007 4.6345589 0 2.1249795.73568096 3.7434198 2.20704289 4.855032 1.47107297 1.1116122 3.57987096 1.6675628 6.32639397 1.6675628 2.746234 0 4.855032-.5559506 6.3263939-1.6675628z" fill="#f2f2f2" fill-rule="nonzero" transform="translate(1509.579895 397.697106)"/><g transform="translate(1565.056846 388.430153)"><path d="m.039304.099422h47.553665v54.590201h-47.553665z" fill="#00a88a"/><path d="m47.5929694 54.6896229h-47.55366538v-54.59020073h47.55366538zm-45.01519163-52.05176699v49.51333329h42.47652283v-49.51333329z" fill="#000"/></g><path d="m21.1125411 4.69235002c2.2885283 2.9424349 3.4330815 7.12737888 3.4330815 12.55454298 0 5.9178108-1.1852959 10.5194287-3.5555987 13.8051429-2.3703028 3.2860031-5.6805782 4.9287157-9.9311151 4.9287157-1.99437156 0-3.94771143-.3759313-5.86030856-1.1277937-1.91259713-.7521515-3.60472114-1.8146412-5.07579411-3.1877582l1.56931788-3.0895133c1.66727382 1.405769 3.25306216 2.427516 4.75707607 3.064952 1.50372496.6374361 3.02420934.9564431 4.56087522.9564431 3.0077389 0 5.3372989-1.3404651 6.9883912-4.0213951 1.6510924-2.6812191 2.4766385-6.4408204 2.4766385-11.2796709v-.637725c-.7521514 1.8311116-1.97819 3.2776234-3.6781158 4.3404021-1.7002148 1.0624897-3.6454639 1.5938791-5.8360363 1.5938791-2.1252685 0-4.00521365-.4660854-5.63983549-1.3976783-1.63462184-.9318818-2.90978291-2.2396949-3.82519426-3.9234391-.91541134-1.6837443-1.37311702-3.6047212-1.37311702-5.7623527 0-2.1579204.4822669-4.086988 1.44651175-5.78691381.9645338-1.70021476 2.29690808-3.03258905 3.99712284-3.99712285 1.69992581-.96424484 3.62899341-1.44651174 5.78691388-1.44651174 4.2175959 0 7.4706581 1.47107297 9.7591865 4.41379682zm-3.9234392 12.35834218c1.4387099-1.438421 2.1579204-3.3021847 2.1579204-5.590713 0-2.32118037-.7192105-4.20112552-2.1579204-5.63983546-1.438421-1.43842099-3.3183661-2.15792044-5.6395465-2.15792044-2.22322439 0-4.02168405.71111974-5.39480107 2.13335921-1.37311703 1.42223948-2.05967554 3.31027538-2.05967554 5.66439669 0 2.3211803.68655851 4.1930347 2.05967554 5.6152742 1.37311702 1.4222395 3.1877582 2.1333592 5.44363457 2.1333592 2.2888173 0 4.152292-.7192105 5.590713-2.1579204z" fill="#f2f2f2" fill-rule="nonzero" transform="translate(1575.139966 397.697106)"/><g stroke="#000"><path d="m1096.073546 379.827207v8.703347" stroke-width="2.540471"/><path d="m1334.698583 379.827107h-238.625356" stroke-width="2.536666"/><path d="m1157.047962 379.827207v8.703347" stroke-width="2.540471"/><path d="m1214.724654 379.827207v8.703347" stroke-width="2.540471"/><path d="m1273.792589 379.827207v8.703347" stroke-width="2.540471"/><path d="m.25679382.11881745v8.70067791h253.66824618v8.70607874" stroke-width="2.537062" transform="translate(1333.854479 371.007868)"/><path d="m1522.192353 379.827363v8.706079" stroke-width="2.538373"/><path d="m1460.272258 379.827363v8.706079" stroke-width="2.538373"/><path d="m1398.172318 379.827363v8.706079" stroke-width="2.538373"/><path d="m461.035492 332.200017v30.871702" stroke-width="2.538347"/><path d="m555.359389 347.854087v15.218407" stroke-width="2.537588"/><path d="m695.541211 347.854373v14.187222" stroke-width="2.538524"/><path d="m790.885848 362.040642v-30.871702" stroke-width="2.538347"/><path d="m887.942518 362.041595v-14.187222" stroke-width="2.538524"/><path d="m.019213 15.299472.406607-15.172668" stroke-width="2.539569" transform="matrix(-1 0 0 1 367.859321 347.727644)"/></g><g transform="translate(728.528993 23.597628)"><path d="m.027562.06972h33.346975v38.281514h-33.346975z" fill="#00a88a"/><path d="m33.3745364 38.3512337h-33.34697449v-38.28151366h33.34697449zm-30.80847438-35.74309116v33.20466866h28.26976908v-33.20466866z" fill="#000"/></g><g fill="#000" transform="translate(771.880716 31.029736)"><path d="m12.5751769 7.68008917v1.60645421h-12.54602874v-1.60645421zm0 5.15096053v1.6066044h-12.54602874v-1.6066044z"/><path d="m26.1286201 17.4720676c-1.3345049-.7649138-2.3587471-1.8486543-3.0727268-3.2512217-.7141299-1.4025673-1.0711197-3.0473348-1.0711197-4.93430252 0-1.86998963.3569898-3.50634324 1.0711197-4.90876034.7139797-1.40256734 1.7382219-2.48210096 3.0727268-3.23860086 1.3345049-.75649991 2.8942319-1.13467473 4.6793313-1.13467473 1.2239222 0 2.3757252.19126601 3.4552588.57364779 1.0795337.38253202 1.9762152.91380981 2.6901948 1.59383335l-1.0709695 2.39706047c-.8159982-.6630455-1.6277894-1.14338913-2.4352235-1.44088065-.8075843-.29749152-1.6703097-.44623728-2.5883264-.44623728-1.7509931 0-3.1068332.56959109-4.06722 1.70862301-.960537 1.13888168-1.4408806 2.77102834-1.4408806 4.89598924 0 2.14193892.4761367 3.78670642 1.4281095 4.93430252.9519729 1.1474458 2.31202 1.7212439 4.0799911 1.7212439.9180167 0 1.7807421-.1487458 2.5883264-.4462373.8074341-.2974915 1.6192253-.7778352 2.4352235-1.4407304l1.0709695 2.3969102c-.7139796.6800236-1.6106611 1.2113013-2.6901948 1.5938334-1.0795336.382532-2.2313366.573798-3.4552588.573798-1.7850994 0-3.3448264-.382532-4.6793313-1.1475961z"/><path d="m41.938792 17.7781233c-.9944932-.5440489-1.7595572-1.3217338-2.295042-2.333205-.5354847-1.0116214-.8032271-2.1973805-.8032271-3.5574276 0-1.3598968.2677424-2.54565597.8032271-3.55727739.5354848-1.01147117 1.3005488-1.78915607 2.295042-2.33320496.9944931-.54404888 2.1462961-.8159982 3.4552588-.8159982 1.2919846 0 2.4310166.27194932 3.4169455.8159982.9860792.54404889 1.7467861 1.32173379 2.2822708 2.33320496.535635 1.01162142.8033774 2.19738059.8033774 3.55727739 0 1.3600471-.2677424 2.5458062-.8033774 3.5574276-.5354847 1.0114712-1.2961916 1.7891561-2.2822708 2.333205-.9859289.5440489-2.1249609.8159982-3.4169455.8159982-1.3089627 0-2.4607657-.2719493-3.4552588-.8159982zm5.9160245-2.7412792c.5694408-.7055657.8543115-1.7552.8543115-3.1493534 0-1.3768749-.2890776-2.42665936-.8670826-3.14920316s-1.3940032-1.08374057-2.4479946-1.08374057c-1.0709695 0-1.8955318.36119677-2.4735368 1.08374057s-.8670826 1.77232826-.8670826 3.14920316c0 1.3941534.2848706 2.4437877.8543115 3.1493534.5695911.7055658 1.3897962 1.0581984 2.4607657 1.0581984 1.0880978 0 1.9167168-.3526326 2.4863079-1.0581984z"/><path d="m66.6356966 10.4850736v7.9050108h-3.1875165v-7.7520581c0-1.0200353-.1954729-1.7637641-.5864189-2.23118638-.3910962-.46757253-.9946433-.7013588-1.8106415-.7013588-.968951 0-1.7509931.31026262-2.3459761.93078786-.594983.62052525-.8924746 1.44073042-.8924746 2.46076572v7.2930497h-3.1621245v-9.23110178c0-1.35989684-.0679122-2.57540513-.2038868-3.64652485h2.9834793l.2295793 2.116547c.4418801-.78204211 1.0412203-1.38543905 1.7977202-1.81049133s1.6108115-.63750329 2.5627843-.63750329c3.0769338 0 4.6154758 1.76797107 4.6154758 5.30406345z"/><path d="m74.0818492 7.90951823v5.76307187c0 1.5129998.7054155 2.2694997 2.1163968 2.2694997.3910962 0 .8161484-.0680625 1.2751568-.2040371v2.5246212c-.5610269.2038869-1.2410505.3059054-2.0400706.3059054-1.4620657 0-2.5841195-.407924-3.3660114-1.2239222-.7820421-.8159982-1.172988-1.9891365-1.172988-3.5191143v-5.91602457h-2.4735368v-2.39706046h2.4735368v-3.13643206l3.1875164-1.07111972v4.20755178h3.4169456v2.39706046z"/><path d="m90.9629905 12.11707h-8.8741119c.0680624 1.3770252.4122812 2.3927033 1.0328064 3.0473349.6205252.6544813 1.542749.981722 2.7666711.981722 1.4111315 0 2.7200942-.4590084 3.9270384-1.3770251l.9180167 2.1930233c-.6119611.4929645-1.364254.8882676-2.2567286 1.1857591-.8924745.2974915-1.7977202.4462373-2.715737.4462373-2.1081331 0-3.7655214-.594983-4.9726158-1.7849491-1.2069441-1.1901163-1.8104913-2.8221128-1.8104913-4.8961395 0-1.3089627.2635354-2.47353681.790456-3.49357213.5270708-1.01988507 1.2665927-1.81469827 2.2185655-2.38413911.9519729-.56959109 2.0315065-.85431151 3.2386009-.85431151 1.7679711 0 3.1661812.57379804 4.1947807 1.72124387 1.0284492 1.14759607 1.5427489 2.72430113 1.5427489 4.73026538zm-7.7392869-3.88872499c-.535635.50137838-.8798538 1.22812913-1.0328065 2.18025229h5.9925009c-.1020185-.96910121-.3951528-1.70005891-.8797034-2.1930234-.4845506-.49311473-1.151803-.73952185-2.0017574-.73952185-.8501045 0-1.5427489.25076432-2.0782336.75229296z"/><path d="m105.651108 10.4850736v7.9050108h-3.187516v-7.7520581c0-1.0200353-.195473-1.7637641-.586569-2.23118638-.390946-.46757253-.994493-.7013588-1.810491-.7013588-.9689514 0-1.7509935.31026262-2.3459765.93078786-.594983.62052525-.8924746 1.44073042-.8924746 2.46076572v7.2930497h-3.1621245v-9.23110178c0-1.35989684-.0679122-2.57540513-.2040371-3.64652485h2.9836296l.2294291 2.116547c.4420303-.78204211 1.0412203-1.38543905 1.7977202-1.81049133.7566501-.42505228 1.6108118-.63750329 2.5627838-.63750329 3.077084 0 4.615626 1.76797107 4.615626 5.30406345z"/><path d="m113.097111 7.90951823v5.76307187c0 1.5129998.705566 2.2694997 2.116547 2.2694997.391096 0 .815998-.0680625 1.275006-.2040371v2.5246212c-.561026.2038869-1.24105.3059054-2.03992.3059054-1.462066 0-2.584119-.407924-3.366162-1.2239222-.781891-.8159982-1.172988-1.9891365-1.172988-3.5191143v-5.91602457h-2.473536v-2.39706046h2.473536v-3.13643206l3.187517-1.07111972v4.20755178h3.417096v2.39706046z"/><path d="m125.923803.23393651h7.879619c1.95488 0 3.476444.47177949 4.564542 1.41533845 1.087947.94340871 1.631996 2.2311864 1.631996 3.86318281s-.548256 2.9241313-1.644767 3.87610416c-1.096512.95197287-2.613869 1.42795927-4.551771 1.42795927h-4.590084v7.5735632h-3.289535zm7.497087 8.03257155c1.139032 0 2.001758-.23378627 2.588176-.70120855.58657-.46757253.879854-1.14323888.879854-2.02729954 0-.90103871-.289078-1.5852692-.867083-2.05269149-.578004-.46757253-1.444937-.70135879-2.600947-.70135879h-4.207552v5.48255837z"/><path d="m154.509583 5.51245777v12.87762663h-3.136582v-2.0654626c-.390946.7139797-.951973 1.2707996-1.683081 1.6703097-.730958.3995101-1.563934.59919-2.498929.59919-1.122054 0-2.116547-.2719493-2.983479-.8159982-.867083-.5440489-1.538542-1.3175268-2.014528-2.3205841-.476137-1.002907-.71413-2.1674811-.71413-3.4934219 0-1.326091.24235-2.50328596.72675-3.53188543.484551-1.02844922 1.160368-1.82746937 2.0273-2.39691021.867083-.56959109 1.853012-.85431151 2.958087-.85431151.934995 0 1.767971.19967991 2.498929.59918999.731108.39951008 1.292135.95633006 1.683081 1.67030971v-1.93805208zm-4.003514 9.48607303c.578005-.7309577.866932-1.7594069.866932-3.0854979 0-1.3600471-.288927-2.40547436-.866932-3.13643206-.578005-.73110795-1.402568-1.09651167-2.473537-1.09651167-1.053992 0-1.874347.37817482-2.460766 1.13467473-.586569.7564999-.879854 1.8062844-.879854 3.1493534 0 1.3259408.293285 2.3459761.879854 3.0599557.586419.7139797 1.415188 1.0709695 2.486158 1.0709695 1.053991 0 1.87014-.3654037 2.448145-1.0965117z"/><path d="m170.421623 5.51245777v12.46970263c0 2.0059643-.552462 3.5275283-1.657388 4.5645416-1.105076 1.0370134-2.728658 1.5555201-4.870597 1.5555201-1.988987 0-3.73998-.4164881-5.25313-1.2496147l.510093-2.4224524c1.563934.8159982 3.119454 1.2239222 4.66656 1.2239222 2.295042 0 3.442488-1.1388817 3.442488-3.4169455v-2.5500132c-.390946.6970016-.960537 1.2622355-1.708473 1.6957017-.748086.4336164-1.589626.6502744-2.524621.6502744-1.121904 0-2.120754-.2677424-2.99625-.8032271-.875497-.5354848-1.55552-1.2919847-2.039921-2.2694997-.48455-.9775151-.72675-2.095362-.72675-3.3532403 0-1.2580286.2422-2.37587548.72675-3.35339054.484401-.97751507 1.164424-1.73401497 2.039921-2.26949971.875496-.53548473 1.874346-.8032271 2.99625-.8032271.952123 0 1.797871.19967991 2.537392.59918999.739522.39951008 1.304756.95633006 1.695702 1.67030971v-1.93805208zm-4.06722 8.97613053c.603548-.6970016.905246-1.6575386.905246-2.8814608 0-1.2240724-.297491-2.18460946-.892474-2.88161106s-1.42811-1.04542727-2.499079-1.04542727c-1.053992 0-1.882761.34842567-2.486308 1.04542727-.603397.6970016-.905246 1.65753866-.905246 2.88161106 0 1.2239222.301849 2.1844592.905246 2.8814608.603547.6970016 1.432316 1.0455775 2.486308 1.0455775 1.053991 0 1.88276-.3485759 2.486307-1.0455775z"/><path d="m185.135284 12.11707h-8.874112c.068062 1.3770252.412281 2.3927033 1.032806 3.0473349.620525.6544813 1.542749.981722 2.766821.981722 1.410982 0 2.719944-.4590084 3.927039-1.3770251l.918016 2.1930233c-.612111.4929645-1.364254.8882676-2.256878 1.1857591-.892475.2974915-1.797721.4462373-2.715737.4462373-2.107983 0-3.765522-.594983-4.972466-1.7849491-1.207094-1.1901163-1.810491-2.8221128-1.810491-4.8961395 0-1.3089627.263385-2.47353681.790456-3.49357213.52692-1.01988507 1.266442-1.81469827 2.218565-2.38413911.951973-.56959109 2.031507-.85431151 3.238451-.85431151 1.767971 0 3.166331.57379804 4.194781 1.72124387 1.028599 1.14759607 1.542749 2.72430113 1.542749 4.73026538zm-7.739287-3.88872499c-.535485.50137838-.879704 1.22812913-1.032807 2.18025229h5.992651c-.102018-.96910121-.395303-1.70005891-.879853-2.1930234-.484401-.49311473-1.151653-.73952185-2.001758-.73952185-.849954 0-1.542749.25076432-2.078233.75229296z"/></g><path d="m367.838539 347.854154h94.040308" stroke="#000" stroke-width="2.538462"/><path d="m461.878846 347.854154h93.484616" stroke="#000" stroke-width="2.538462"/><path d="m.33230769 1.70030769 96.35538461-1.24846154 96.0461537 1.24846154" stroke="#000" stroke-width="2.538462" transform="translate(695.209615 346.153846)"/><path d="m.05446154.45184615h95.96584616l96.7416923 1.24846154" stroke="#000" stroke-width="2.538462" transform="translate(36.132692 346.153846)"/></g></svg>
\ No newline at end of file diff --git a/docs/content/en/templates/lookup-order.md b/docs/content/en/templates/lookup-order.md new file mode 100644 index 000000000..406a17c38 --- /dev/null +++ b/docs/content/en/templates/lookup-order.md @@ -0,0 +1,136 @@ +--- +title: Template lookup order +description: Hugo uses the rules below to select a template for a given page, starting from the most specific. +categories: [templates,fundamentals] +keywords: [templates] +menu: + docs: + parent: templates + weight: 30 +weight: 30 +toc: true +--- + +## Lookup rules + +Hugo takes the parameters listed below into consideration when choosing a template for a given page. The templates are ordered by specificity. This should feel natural, but look at the table below for concrete examples of the different parameter variations. + +Kind +: The page `Kind` (the home page is one). See the example tables below per kind. This also determines if it is a **single page** (i.e. a regular content page. We then look for a template in `_default/single.html` for HTML) or a **list page** (section listings, home page, taxonomy lists, taxonomy terms. We then look for a template in `_default/list.html` for HTML). + +Layout +: Can be set in front matter. + +Output Format +: See [Custom Output Formats](/templates/output-formats). An output format has both a `name` (e.g. `rss`, `amp`, `html`) and a `suffix` (e.g. `xml`, `html`). We prefer matches with both (e.g. `index.amp.html`), but look for less specific templates. + +Note that if the output format's Media Type has more than one suffix defined, only the first is considered. + +Language +: We will consider a language tag in the template name. If the site language is `fr`, `index.fr.amp.html` will win over `index.amp.html`, but `index.amp.html` will be chosen before `index.fr.html`. + +Type +: Is value of `type` if set in front matter, else it is the name of the root section (e.g. "blog"). It will always have a value, so if not set, the value is "page". + +Section +: Is relevant for `section`, `taxonomy` and `term` types. + +{{% note %}} +Templates can live in either the project's or the themes' layout folders, and the most specific templates will be chosen. Hugo will interleave the lookups listed below, finding the most specific one either in the project or themes. +{{% /note %}} + +## Target a template + +You cannot change the lookup order to target a content page, but you can change a content page to target a template. Specify `type`, `layout`, or both in front matter. + +Consider this content structure: + +```text +content/ +├── about.md +└── contact.md +``` + +Files in the root of the content directory have a [content type] of `page`. To render these pages with a unique template, create a matching subdirectory: + +[content type]: /getting-started/glossary/#content-type + +```text +layouts/ +└── page/ + └── single.html +``` + +But the contact page probably has a form and requires a different template. In the front matter specify `layout`: + +{{< code-toggle file=content/contact.md >}} +title = 'Contact' +layout = 'contact' +{{< /code-toggle >}} + +Then create the template for the contact page: + +```text +layouts/ +└── page/ + └── contact.html <-- renders contact.md + └── single.html <-- renders about.md +``` + +As a content type, the word `page` is vague. Perhaps `miscellaneous` would be better. Add `type` to the front matter of each page: + +{{< code-toggle file=content/about.md >}} +title = 'About' +type = 'miscellaneous' +{{< /code-toggle >}} + +{{< code-toggle file=content/contact.md >}} +title = 'Contact' +type = 'miscellaneous' +layout = 'contact' +{{< /code-toggle >}} + +Now place the layouts in the corresponding directory: + +```text +layouts/ +└── miscellaneous/ + └── contact.html <-- renders contact.md + └── single.html <-- renders about.md +``` + +## Home page + +{{< datatable-filtered "output" "layouts" "Kind == home" "Example" "OutputFormat" "Suffix" "Template Lookup Order" >}} + +## Single pages + +{{< datatable-filtered "output" "layouts" "Kind == page" "Example" "OutputFormat" "Suffix" "Template Lookup Order" >}} + +## Section pages + +A section page is a list of pages within a given section. + +{{< datatable-filtered "output" "layouts" "Kind == section" "Example" "OutputFormat" "Suffix" "Template Lookup Order" >}} + +## Taxonomy pages + +A taxonomy page is a list of terms within a given taxonomy. The examples below assume the following site configuration: + +{{< code-toggle file=hugo >}} +[taxonomies] +category = 'categories' +{{< /code-toggle >}} + +{{< datatable-filtered "output" "layouts" "Kind == taxonomy" "Example" "OutputFormat" "Suffix" "Template Lookup Order" >}} + +## Term pages + +A term page is a list of pages associated with a given term. The examples below assume the following site configuration: + +{{< code-toggle file=hugo >}} +[taxonomies] +category = 'categories' +{{< /code-toggle >}} + +{{< datatable-filtered "output" "layouts" "Kind == term" "Example" "OutputFormat" "Suffix" "Template Lookup Order" >}} diff --git a/docs/content/en/templates/menu-templates.md b/docs/content/en/templates/menu-templates.md new file mode 100644 index 000000000..8dab65abf --- /dev/null +++ b/docs/content/en/templates/menu-templates.md @@ -0,0 +1,132 @@ +--- +title: Menu templates +description: Use menu variables and methods in your templates to render a menu. +categories: [templates] +keywords: [lists,sections,menus] +menu: + docs: + parent: templates + weight: 140 +weight: 140 +toc: true +aliases: [/templates/menus/] +--- + +## Overview + +After [defining menu entries], use [menu variables and methods] to render a menu. + +Three factors determine how to render a menu: + +1. The method used to define the menu entries: [automatic], [in front matter], or [in site configuration] +1. The menu structure: flat or nested +1. The method used to [localize the menu entries]: site configuration or translation tables + +The example below handles every combination. + +## Example + +This partial template recursively "walks" a menu structure, rendering a localized, accessible nested list. + +{{< code file=layouts/partials/menu.html copy=true >}} +{{- $page := .page }} +{{- $menuID := .menuID }} + +{{- with index site.Menus $menuID }} + <nav> + <ul> + {{- partial "inline/menu/walk.html" (dict "page" $page "menuEntries" .) }} + </ul> + </nav> +{{- end }} + +{{- define "partials/inline/menu/walk.html" }} + {{- $page := .page }} + {{- range .menuEntries }} + {{- $attrs := dict "href" .URL }} + {{- if $page.IsMenuCurrent .Menu . }} + {{- $attrs = merge $attrs (dict "class" "active" "aria-current" "page") }} + {{- else if $page.HasMenuCurrent .Menu .}} + {{- $attrs = merge $attrs (dict "class" "ancestor" "aria-current" "true") }} + {{- end }} + {{- $name := .Name }} + {{- with .Identifier }} + {{- with T . }} + {{- $name = . }} + {{- end }} + {{- end }} + <li> + <a + {{- range $k, $v := $attrs }} + {{- with $v }} + {{- printf " %s=%q" $k $v | safeHTMLAttr }} + {{- end }} + {{- end -}} + >{{ $name }}</a> + {{- with .Children }} + <ul> + {{- partial "inline/menu/walk.html" (dict "page" $page "menuEntries" .) }} + </ul> + {{- end }} + </li> + {{- end }} +{{- end }} +{{< /code >}} + +Call the partial above, passing a menu ID and the current page in context. + +{{< code file=layouts/_default/single.html >}} +{{ partial "menu.html" (dict "menuID" "main" "page" .) }} +{{ partial "menu.html" (dict "menuID" "footer" "page" .) }} +{{< /code >}} + +## Page references + +Regardless of how you [define menu entries], an entry associated with a page has access to page variables and methods. + +This simplistic example renders a page parameter named `version` next to each entry's `name`. Code defensively using `with` or `if` to handle entries where (a) the entry points to an external resource, or (b) the `version` parameter is not defined. + +{{< code file=layouts/_default/single.html >}} +{{- range site.Menus.main }} + <a href="{{ .URL }}"> + {{ .Name }} + {{- with .Page }} + {{- with .Params.version -}} + ({{ . }}) + {{- end }} + {{- end }} + </a> +{{- end }} +{{< /code >}} + +## Menu entry parameters + +When you define menu entries [in site configuration] or [in front matter], you can include a `params` key as shown in these examples: + +- [Menu entry defined in site configuration] +- [Menu entry defined in front matter] + +This simplistic example renders a `class` attribute for each anchor element. Code defensively using `with` or `if` to handle entries where `params.class` is not defined. + +{{< code file=layouts/partials/menu.html >}} +{{- range site.Menus.main }} + <a {{ with .Params.class -}} class="{{ . }}" {{ end -}} href="{{ .URL }}"> + {{ .Name }} + </a> +{{- end }} +{{< /code >}} + +## Localize + +Hugo provides two methods to localize your menu entries. See [multilingual]. + +[automatic]: /content-management/menus/#define-automatically +[define menu entries]: /content-management/menus/ +[defining menu entries]: /content-management/menus/ +[in front matter]: /content-management/menus/#define-in-front-matter +[in site configuration]: /content-management/menus/#define-in-site-configuration +[localize the menu entries]: /content-management/multilingual/#menus +[menu entry defined in front matter]: /content-management/menus/#example-front-matter +[menu entry defined in site configuration]: /content-management/menus/#example-site-configuration +[menu variables and methods]: /variables/menu-entry/ +[multilingual]: /content-management/multilingual/#menus diff --git a/docs/content/en/templates/output-formats.md b/docs/content/en/templates/output-formats.md new file mode 100644 index 000000000..23a420882 --- /dev/null +++ b/docs/content/en/templates/output-formats.md @@ -0,0 +1,231 @@ +--- +title: 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. +categories: [templates,fundamentals] +keywords: ["amp", "outputs", "rss"] +menu: + docs: + parent: templates + weight: 210 +weight: 210 +toc: true +aliases: [/templates/outputs/,/extras/output-formats/,/content-management/custom-outputs/] +--- + +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 + +A [media type] (formerly known as a MIME 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 "config" "mediaTypes" "_key" "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 file names 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], either for all sites or for a given language. + +{{< code-toggle file=hugo >}} +[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`: + +{{< code-toggle file=hugo >}} +[mediaTypes] + [mediaTypes."text/html"] + suffixes = ["htm"] + +[outputFormats] + [outputFormats.html] + mediaType = "text/html" +{{</ code-toggle >}} + +{{% note %}} +For the above to work, you also need to add an `outputs` definition in your site configuration. +{{% /note %}} + +## 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 "config" "outputFormats" "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 a 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=hugo >}} +[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 file name for the list file names (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. + +{{< code-toggle config=outputs />}} + +### 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 configuration file: + +{{< code-toggle file=hugo >}} +[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']`. + +* The `outputs` definition is per page [`Kind`][page_kinds]. +* The names (e.g. `html`, `amp`) must match the `name` of a defined output format, and can be overridden per page in front matter. + +The following is an example of front matter in a content file that defines output formats for the rendered `Page`: + +{{< code-toggle file=content/example.md fm=true >}} +title: Example +outputs: +- html +- amp +- json +{{< /code-toggle >}} + +## 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 + +Each output format requires a corresponding template conforming to the [template lookup order](/templates/lookup-order/). Hugo considers both output format and suffix when selecting a template. + +For example, to generate a JSON file for the home page, the template with highest specificity is `layouts/index.json.json`. + +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 . The 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 `name`): + +```go-html-template +{{ partial "mytextpartial.csv" . }} +``` + +[base]: /templates/base/ +[site configuration]: /getting-started/configuration/ +[lookup order]: /templates/lookup-order/ +[media type]: https://en.wikipedia.org/wiki/Media_type +[partials]: /templates/partials/ +[page_kinds]: /templates/section-templates/#page-kinds diff --git a/docs/content/en/templates/pagination.md b/docs/content/en/templates/pagination.md new file mode 100644 index 000000000..0854a6844 --- /dev/null +++ b/docs/content/en/templates/pagination.md @@ -0,0 +1,154 @@ +--- +title: Pagination +description: Hugo supports pagination for your homepage, section pages, and taxonomies. +categories: [templates] +keywords: [lists,sections,pagination] +menu: + docs: + parent: templates + weight: 100 +weight: 100 +toc: true +aliases: [/extras/pagination,/doc/pagination/] +--- + +The real power of Hugo pagination shines when combined with the [`where`] function 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 + +{{% note %}} +`.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). +{{% /note %}} + +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 %}} +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/collections/first/ +[`last`]: /functions/collections/last/ +[`after`]: /functions/collections/after/ +[configuration]: /getting-started/configuration/ +[lists]: /templates/lists/ +[`where`]: /functions/collections/where diff --git a/docs/content/en/templates/partials.md b/docs/content/en/templates/partials.md new file mode 100644 index 000000000..35ba2ee9e --- /dev/null +++ b/docs/content/en/templates/partials.md @@ -0,0 +1,182 @@ +--- +title: 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. +categories: [templates] +keywords: [lists,sections,partials] +menu: + docs: + parent: templates + weight: 120 +weight: 120 +toc: true +aliases: [/templates/partial/,/layout/chrome/,/extras/analytics/] +--- + +{{< 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 provides significant performance gains for complex templates that don't need to be re-rendered on every invocation. See [details][partialcached]. + +## Examples + +### `header.html` + +The following `header.html` partial template is used for [spf13.com](https://spf13.com/): + +{{< code file=layouts/partials/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 %}} + +### `footer.html` + +The following `footer.html` partial template is used for [spf13.com](https://spf13.com/): + +{{< code file=layouts/partials/footer.html >}} +<footer> + <div> + <p> + © 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/ +[customize]: /hugo-modules/theme-components/ +[listtemps]: /templates/lists/ +[lookup order]: /templates/lookup-order/ +[partialcached]: /functions/partials/includecached +[singletemps]: /templates/single-page-templates/ +[themes]: /themes/ diff --git a/docs/content/en/templates/render-hooks.md b/docs/content/en/templates/render-hooks.md new file mode 100644 index 000000000..8e174bdee --- /dev/null +++ b/docs/content/en/templates/render-hooks.md @@ -0,0 +1,183 @@ +--- +title: Markdown render hooks +linkTitle: Render hooks +description: Render Hooks allow custom templates to override markdown rendering functionality. +categories: [templates] +keywords: [markdown] +toc: true +menu: + docs: + parent: templates + weight: 200 +weight: 200 +--- + +Note that this is only supported with the [Goldmark](/getting-started/configuration-markup#goldmark) renderer. + +You can override certain parts of the default Markdown rendering to HTML by creating templates with base names `render-{kind}` in `layouts/_default/_markup`. + +You can also create type/section specific hooks in `layouts/[type/section]/_markup`, e.g.: `layouts/blog/_markup`. + +The hook kinds currently supported are: + +* `image` +* `link` +* `heading` +* `codeblock`{{< new-in 0.93.0 >}} + +You can define [Output-Format-](/templates/output-formats) and [language-](/content-management/multilingual/)specific templates if needed. Your `layouts` folder may look like this: + +```text +layouts/ +└── _default/ + └── _markup/ + ├── render-codeblock-bash.html + ├── render-codeblock.html + ├── render-heading.html + ├── render-image.html + ├── render-image.rss.xml + └── render-link.html +``` + +Some use cases for the above: + +* Resolve link references using `.GetPage`. This would make links portable as you could translate `./my-post.md` (and similar constructs that would work on GitHub) into `/blog/2019/01/01/my-post/` etc. +* Add `target=_blank` to external links. +* Resolve and [process](/content-management/image-processing/) images. +* Add [header links](https://remysharp.com/2014/08/08/automatic-permalinks-for-blog-posts). + +## Render hooks for headings, links and images + +### Context passed to `render-link` and `render-image` + +The `render-link` and `render-image` templates will receive this context: + +Page +: The [Page](/variables/page/) being rendered. + +Destination +: The URL. + +Title +: The title attribute. + +Text +: The rendered (HTML) link text. + +PlainText +: The plain variant of the above. + +### Context passed to `render-heading` + +The `render-heading` template will receive this context: + +Page +: The [Page](/variables/page/) being rendered. + +Level +: The header level (1--6) + +Anchor +: An auto-generated html id unique to the header within the page + +Text +: The rendered (HTML) text. + +PlainText +: The plain variant of the above. + +Attributes (map) +: A map of attributes (e.g. `id`, `class`). Note that this will currently always be empty for links. + +The `render-image` templates will also receive: + +IsBlock {{< new-in 0.108.0 >}} +: Returns true if this is a standalone image and the configuration option [markup.goldmark.parser.wrapStandAloneImageWithinParagraph](/getting-started/configuration-markup/#goldmark) is disabled. + +Ordinal {{< new-in 0.108.0 >}} +: Zero-based ordinal for all the images in the current document. + +### Link with title markdown example + +```md +[Text](https://www.gohugo.io "Title") +``` + +Here is a code example for how the render-link.html template could look: + +{{< code file=layouts/_default/_markup/render-link.html >}} +<a href="{{ .Destination | safeURL }}"{{ with .Title }} title="{{ . }}"{{ end }}{{ if strings.HasPrefix .Destination "http" }} target="_blank" rel="noopener"{{ end }}>{{ .Text | safeHTML }}</a> +{{< /code >}} + +### Image markdown example + +```md +![Text](https://gohugo.io/images/hugo-logo-wide.svg "Title") +``` + +Here is a code example for how the render-image.html template could look: + +{{< code file=layouts/_default/_markup/render-image.html >}} +<p class="md__image"> + <img src="{{ .Destination | safeURL }}" alt="{{ .Text }}" {{ with .Title }} title="{{ . }}"{{ end }} /> +</p> +{{< /code >}} + +### Heading link example + +Given this template file + +{{< code file=layouts/_default/_markup/render-heading.html >}} +<h{{ .Level }} id="{{ .Anchor | safeURL }}">{{ .Text | safeHTML }} <a href="#{{ .Anchor | safeURL }}">¶</a></h{{ .Level }}> +{{< /code >}} + +And this markdown + +```md +### Section A +``` + +The rendered html will be + +```html +<h3 id="section-a">Section A <a href="#section-a">¶</a></h3> +``` + +## Render hooks for code blocks + +{{< new-in 0.93.0 >}} + +You can add a hook template for either all code blocks or for a specific type/language (`bash` in the example below): + +```goat { class="black f7" } +layouts +└── _default + └── _markup + └── render-codeblock.html + └── render-codeblock-bash.html +``` + +The default behavior for these code blocks is to do [Code Highlighting](/content-management/syntax-highlighting/#highlighting-in-code-fences), but since you can pass attributes to these code blocks, they can be used for almost anything. One example would be the built-in [GoAT Diagrams](/content-management/diagrams/#goat-diagrams-ascii) or this [Mermaid Diagram Code Block Hook](/content-management/diagrams/#mermaid-diagrams) example. + +The context (the ".") you receive in a code block template contains: + +Type (string) +: The type of code block. This will be the programming language, e.g. `bash`, when doing code highlighting. + +Attributes (map) +: Attributes passed in from Markdown (e.g. `{ attrName1=attrValue1 attrName2="attr Value 2" }`). + +Options (map) +: Chroma highlighting processing options. This will only be filled if `Type` is a known [Chroma Lexer](/content-management/syntax-highlighting/#list-of-chroma-highlighting-languages). + +Inner (string) +: The text between the code fences. + +Ordinal (integer) +: Zero-based ordinal for all code blocks in the current document. + +Page +: The owning `Page`. + +Position +: Useful in error logging as it prints the file name and position (linenumber, column), e.g. `{{ errorf "error in code block: %s" .Position }}`. diff --git a/docs/content/en/templates/robots.md b/docs/content/en/templates/robots.md new file mode 100644 index 000000000..0efd85ba2 --- /dev/null +++ b/docs/content/en/templates/robots.md @@ -0,0 +1,59 @@ +--- +title: Robots.txt file +linkTitle: Robots.txt +description: Hugo can generate a customized robots.txt in the same way as any other template. +categories: [templates] +keywords: [robots,search engines] +menu: + docs: + parent: templates + weight: 230 +weight: 230 +aliases: [/extras/robots-txt/] +--- + +To generate a robots.txt file from a template, change the [site configuration]: + +{{< code-toggle file=hugo >}} +enableRobotsTXT = true +{{< /code-toggle >}} + +By default, Hugo generates robots.txt using an [internal template][internal]. + +```text +User-agent: * +``` + +Search engines that honor the Robots Exclusion Protocol will interpret this as permission to crawl everything on the site. + +## robots.txt template lookup order + +You may overwrite the internal template with a custom template. Hugo selects the template using this lookup order: + +1. `/layouts/robots.txt` +2. `/themes/<THEME>/layouts/robots.txt` + +## robots.txt template example + +{{< code file=layouts/robots.txt >}} +User-agent: * +{{ range .Pages }} +Disallow: {{ .RelPermalink }} +{{ end }} +{{< /code >}} + +This template creates a robots.txt file with a `Disallow` directive for each page on the site. Search engines that honor the Robots Exclusion Protocol will not crawl any page on the site. + +{{% note %}} +To create a robots.txt file without using a template: + +1. Set `enableRobotsTXT` to `false` in the site configuration. +2. Create a robots.txt file in the `static` directory. + +Remember that Hugo copies everything in the [static directory][static] to the root of `publishDir` (typically `public`) when you build your site. + +[static]: /getting-started/directory-structure/ +{{% /note %}} + +[site configuration]: /getting-started/configuration/ +[internal]: https://github.com/gohugoio/hugo/blob/master/tpl/tplimpl/embedded/templates/_default/robots.txt diff --git a/docs/content/en/templates/rss.md b/docs/content/en/templates/rss.md new file mode 100644 index 000000000..9a2ce9b3c --- /dev/null +++ b/docs/content/en/templates/rss.md @@ -0,0 +1,91 @@ +--- +title: RSS templates +description: Use the built-in RSS template, or create your own. +categories: [templates] +keywords: [rss,xml,templates] +menu: + docs: + parent: templates + weight: 160 +weight: 160 +toc: true +--- + +## Configuration + +By default, when you build your site, Hugo generates RSS feeds for home, section, taxonomy, and term pages. Control feed generation in your site configuration. For example, to generate feeds for home and section pages, but not for taxonomy and term pages: + +{{< code-toggle file=hugo >}} +[outputs] +home = ['html', 'rss'] +section = ['html', 'rss'] +taxonomy = ['html'] +term = ['html'] +{{< /code-toggle >}} + +To disable feed generation for all [page kinds]: + +{{< code-toggle file=hugo >}} +disableKinds = ['rss'] +{{< /code-toggle >}} + +By default, the number of items in each feed is unlimited. Change this as needed in your site configuration: + +{{< code-toggle file=hugo >}} +[services.rss] +limit = 42 +{{< /code-toggle >}} + +Set `limit` to `-1` to generate an unlimited number of items per feed. + +The built-in RSS template will render the following values, if present, from your site configuration: + +{{< code-toggle file=hugo >}} +copyright = '© 2023 ABC Widgets, Inc.' +[params.author] +name = 'John Doe' +email = '[email protected]' +{{< /code-toggle >}} + +## Include feed reference + +To include a feed reference in the `head` element of your rendered pages, place this within the `head` element of your templates: + +```go-html-template +{{ with .OutputFormats.Get "rss" -}} + {{ printf `<link rel=%q type=%q href=%q title=%q>` .Rel .MediaType.Type .Permalink site.Title | safeHTML }} +{{ end }} +``` + +Hugo will render this to: + +```html +<link rel="alternate" type="application/rss+xml" href="https://example.org/index.xml" title="ABC Widgets"> +``` + +## Custom templates + +Override Hugo's [built-in RSS template] by creating one or more of your own, following the naming conventions as shown in the [template lookup order table]. + +For example, to use different templates for home, section, taxonomy, and term pages: + +```text +layouts/ +└── _default/ + ├── home.rss.xml + ├── section.rss.xml + ├── taxonomy.rss.xml + └── term.rss.xml +``` + +RSS templates receive the `.Page` and `.Site` objects in context. + +[built-in RSS template]: https://github.com/gohugoio/hugo/blob/master/tpl/tplimpl/embedded/templates/_default/rss.xml +[page kinds]: /getting-started/glossary/#page-kind +[template lookup order table]: #template-lookup-order + +## Template lookup order + +The table below shows the RSS template lookup order for the different page kinds. The first listing shows the lookup order when running with a theme (`demoTheme`). + +{{< datatable-filtered "output" "layouts" "OutputFormat == rss" "Example" "OutputFormat" "Suffix" "Template Lookup Order" >}} diff --git a/docs/content/en/templates/section-templates.md b/docs/content/en/templates/section-templates.md new file mode 100644 index 000000000..42eb12bec --- /dev/null +++ b/docs/content/en/templates/section-templates.md @@ -0,0 +1,110 @@ +--- +title: Section page templates +linkTitle: Section templates +description: Templates used for section pages are **lists** and therefore have all the variables and methods available to list pages. +categories: [templates] +keywords: [lists,sections,templates] +menu: + docs: + parent: templates + weight: 80 +weight: 80 +toc: true +aliases: [/templates/sections/] +--- + +## Add content and front matter to section templates + +To effectively leverage section page templates, you should first understand Hugo's [content organization](/content-management/organization/) and, specifically, the purpose of `_index.md` for adding content and front matter to section and other list pages. + +## Section template lookup order + +See [Template Lookup](/templates/lookup-order/). + +## Page kinds + +Every `Page` in Hugo has a `.Kind` attribute. + +{{% include "content-management/_common/page-kinds.md" %}} + +## `.Site.GetPage` with sections + +`Kind` can easily be combined with the [`where`] function in your templates to create kind-specific lists of content. This method is ideal for creating lists, but there are times where you may want to fetch just the index page of a single section via the section's path. + +The [`.GetPage` function][getpage] looks up an index page of a given `Kind` and `path`. + +You can call `.Site.GetPage` with two arguments: `kind` (one of the valid values +of `Kind` from above) and `kind value`. + +Examples: + +- `{{ .Site.GetPage "section" "posts" }}` +- `{{ .Site.GetPage "page" "search" }}` + +## Example: creating a default section template + +{{< code file=layouts/_default/section.html >}} +{{ define "main" }} + <main> + {{ .Content }} + <ul class="contents"> + {{ range .Paginator.Pages }} + <li>{{ .Title }} + <div> + {{ partial "summary.html" . }} + </div> + </li> + {{ end }} + </ul> + {{ partial "pagination.html" . }} + </main> +{{ end }} +{{< /code >}} + +### Example: using `.Site.GetPage` + +The `.Site.GetPage` example that follows assumes the following project directory structure: + +```txt +. +└── content + ├── blog + │ ├── _index.md # "title: My Hugo Blog" in the front matter + │ ├── post-1.md + │ ├── post-2.md + │ └── post-3.md + └── events #Note there is no _index.md file in "events" + ├── event-1.md + └── event-2.md +``` + +`.Site.GetPage` will return `nil` if no `_index.md` page is found. Therefore, if `content/blog/_index.md` does not exist, the template will output the section name: + +```go-html-template +<h1>{{ with .Site.GetPage "section" "blog" }}{{ .Title }}{{ end }}</h1> +``` + +Since `blog` has a section index page with front matter at `content/blog/_index.md`, the above code will return the following result: + +```html +<h1>My Hugo Blog</h1> +``` + +If we try the same code with the `events` section, however, Hugo will default to the section title because there is no `content/events/_index.md` from which to pull content and front matter: + +```go-html-template +<h1>{{ with .Site.GetPage "section" "events" }}{{ .Title }}{{ end }}</h1> +``` + +Which then returns the following: + +```html +<h1>Events</h1> +``` + +[contentorg]: /content-management/organization/ +[getpage]: /methods/page/getpage +[lists]: /templates/lists/ +[lookup]: /templates/lookup-order/ +[`where`]: /functions/collections/where +[sections]: /content-management/sections/ diff --git a/docs/content/en/templates/shortcode-templates.md b/docs/content/en/templates/shortcode-templates.md new file mode 100644 index 000000000..6e3d968cf --- /dev/null +++ b/docs/content/en/templates/shortcode-templates.md @@ -0,0 +1,413 @@ +--- +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. +categories: [templates] +keywords: [shortcodes,templates] +menu: + docs: + parent: templates + weight: 130 +weight: 130 +aliases: [/functions/get] +toc: true +--- + +Shortcodes are a means to consolidate templating into small, reusable snippets that you can embed directly inside your content. + +{{% 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 + +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 /*/%}}`. + +You can organize your shortcodes in subdirectories, 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 + +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. To check if `.Inner` contains anything other than white space: + +```go-html-template +{{ if strings.ContainsNonSpace .Inner }} + Inner is not empty +{{ end }} +``` + +A shortcode with content declared via the `.Inner` variable can also be declared without the content and without the closing tag by using the self-closing syntax: + +```go-html-template +{{</* innershortcode /*/>}} +``` + +{{% note %}} +Any shortcode that refers to `.Inner` must be closed or self-closed. + +{{% /note %}} + +#### `.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 parameters; 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. + +{{% note %}} +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. +{{% /note %}} + +You can also use the variable `.Page` to access all the normal [page variables][pagevars]. + +Shortcodes can also be nested. In a nested shortcode, you can access the parent shortcode context with the [`.Parent`] shortcode method. 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 >}} +<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 >}} +<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 >}} +<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 >}} +<div class="highlight" style="background: #272822"><pre style="line-height: 125%"><span style="color: #f92672"><html></span> + <span style="color: #f92672"><body></span> This HTML <span style="color: #f92672"></body></span> +<span style="color: #f92672"></html></span> +</pre></div> +{{< /code >}} + +### Nested shortcode: image gallery + +Hugo's [`.Parent`] shortcode method 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/fmt/errorf) template function and [`.Position`] shortcode method to get useful error messages in shortcodes: + +```sh +{{ with .Get "name" }} +{{ else }} +{{ errorf "missing value for parameter 'name': %s" .Position }} +{{ end }} +``` + +When the above fails, you will see an `ERROR` log similar to the below: + +```sh +ERROR 2018/11/07 10:05:55 missing value for parameter name: "/Users/bep/dev/go/gohugoio/hugo/docs/content/en/variables/shortcodes.md:32:1" +``` + +## 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 configuration: + +{{< code-toggle file=hugo >}} +[security] +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-html-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 parameters if needed, using the self-closing syntax: + + ```go-html-template +{{</* time.inline /*/>}} +``` + +[basic content files]: /content-management/formats/ +[built-in shortcode]: /content-management/shortcodes/ +[config]: /getting-started/configuration/ +[Content Management: Shortcodes]: /content-management/shortcodes/#using-hugo-s-built-in-shortcodes +[source organization]: /getting-started/directory-structure/ +[docsshortcodes]: https://github.com/gohugoio/hugo/tree/master/docs/layouts/shortcodes +[figure]: /content-management/shortcodes/#figure +[hugosc]: /content-management/shortcodes/#using-hugo-s-built-in-shortcodes +[lookup order]: /templates/lookup-order/ +[pagevars]: /variables/page/ +[`.Parent`]: /methods/shortcode/parent/ +[`.Position`]: /methods/shortcode/position/ +[spfscs]: https://github.com/spf13/spf13.com/tree/master/layouts/shortcodes +[vimeoexample]: #single-flexible-example-vimeo +[youtubeshortcode]: /content-management/shortcodes/#youtube diff --git a/docs/content/en/templates/single-page-templates.md b/docs/content/en/templates/single-page-templates.md new file mode 100644 index 000000000..cd8a2715c --- /dev/null +++ b/docs/content/en/templates/single-page-templates.md @@ -0,0 +1,85 @@ +--- +title: Single page templates +description: The primary view of content in Hugo is the single view. Hugo will render every Markdown file provided with a corresponding single template. +categories: [templates] +keywords: [page, templates] +menu: + docs: + parent: templates + weight: 50 +weight: 50 +toc: true +aliases: [/layout/content/] +--- + +## Single page template lookup order + +See [Template Lookup](/templates/lookup-order/). + +## Example single page templates + +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 >}} +{{ 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 .GetTerms "topics" }} + <ul id="topics"> + {{ range . }} + <li><a href="{{ .RelPermalink }}">{{ .LinkTitle }}</a></li> + {{ end }} + </ul> + {{ end }} + {{ with .GetTerms "tags" }} + <ul id="tags"> + {{ range . }} + <li><a href="{{ .RelPermalink }}">{{ .LinkTitle }}</a></li> + {{ end }} + </ul> + {{ end }} + </div> + <div> + {{ with .PrevInSection }} + <a class="previous" href="{{ .RelPermalink }}"> {{ .LinkTitle }}</a> + {{ end }} + {{ with .NextInSection }} + <a class="next" href="{{ .RelPermalink }}"> {{ .LinkTitle }}</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/ +[content type]: /content-management/types/ +[directory structure]: /getting-started/directory-structure/ +[dry]: https://en.wikipedia.org/wiki/Don%27t_repeat_yourself +[`.format` function]: /methods/time/format/ +[front matter]: /content-management/front-matter/ +[pagetaxonomy]: /templates/taxonomy-templates/#list-terms-assigned-to-a-page +[pagevars]: /variables/page/ +[partials]: /templates/partials/ +[section]: /content-management/sections/ +[site variables]: /variables/site/ +[spf13]: https://spf13.com/ +[`with`]: /functions/go-template/with/ diff --git a/docs/content/en/templates/sitemap-template.md b/docs/content/en/templates/sitemap-template.md new file mode 100644 index 000000000..07acfdb63 --- /dev/null +++ b/docs/content/en/templates/sitemap-template.md @@ -0,0 +1,79 @@ +--- +title: Sitemap templates +description: Hugo provides built-in sitemap templates. +categories: [templates] +keywords: [sitemap,xml,templates] +menu: + docs: + parent: templates + weight: 170 +weight: 170 +toc: true +aliases: [/layout/sitemap/,/templates/sitemap/] +--- + +## Overview + +Hugo's built-in sitemap templates conform to v0.9 of the [sitemap protocol]. + +With a monolingual project, Hugo generates a sitemap.xml file in the root of the [`publishDir`] using the built-in [sitemap.xml] template. + +With a multilingual project, Hugo generates: + +- A sitemap.xml file in the root of each site (language) using the built-in [sitemap.xml] template +- A sitemap.xml file in the root of the [`publishDir`] using the built-in [sitemapindex.xml] template + +## Configuration + +Set the default values for [change frequency] and [priority], and the name of the generated file, in your site configuration. + +{{< code-toggle config=sitemap />}} + +changefreq +: How frequently a page is likely to change. Valid values are `always`, `hourly`, `daily`, `weekly`, `monthly`, `yearly`, and `never`. Default is `""` (change frequency omitted from rendered sitemap). + +filename +: The name of the generated file. Default is `sitemap.xml`. + +priority +: The priority of a page relative to any other page on the site. Valid values range from 0.0 to 1.0. Default is `-1` (priority omitted from rendered sitemap). + +## Override default values + +Override the default values for a given page in front matter. + +{{< code-toggle file=news.md fm=true >}} +title = 'News' +[sitemap] + changefreq = 'weekly' + priority = 0.8 +{{</ code-toggle >}} + +## Override built-in templates + +To override the built-in sitemap.xml template, create a new file in either of these locations: + +- layouts/sitemap.xml +- layouts/_default/sitemap.xml + +When ranging through the page collection, access the _change frequency_ and _priority_ with `.Sitemap.ChangeFreq` and `.Sitemap.Priority` respectively. + +To override the built-in sitemapindex.xml template, create a new file in either of these locations: + +- layouts/sitemapindex.xml +- layouts/_default/sitemapindex.xml + +## Disable sitemap generation + +You may disable sitemap generation in your site configuration: + +{{< code-toggle file=hugo >}} +disableKinds = ['sitemap'] +{{</ code-toggle >}} + +[`publishDir`]: /getting-started/configuration#publishdir +[change frequency]: <https://www.sitemaps.org/protocol.html#changefreqdef> +[priority]: <https://www.sitemaps.org/protocol.html#priority> +[sitemap protocol]: <https://www.sitemaps.org/protocol.html> +[sitemap.xml]: <https://github.com/gohugoio/hugo/blob/master/tpl/tplimpl/embedded/templates/_default/sitemap.xml> +[sitemapindex.xml]: <https://github.com/gohugoio/hugo/blob/master/tpl/tplimpl/embedded/templates/_default/sitemapindex.xml> diff --git a/docs/content/en/templates/taxonomy-templates.md b/docs/content/en/templates/taxonomy-templates.md new file mode 100644 index 000000000..ff149e940 --- /dev/null +++ b/docs/content/en/templates/taxonomy-templates.md @@ -0,0 +1,318 @@ +--- +title: Taxonomy templates +description: Taxonomy templating includes taxonomy list pages, taxonomy terms pages, and using taxonomies in your single page templates. +categories: [templates] +keywords: [taxonomies,metadata,front matter,terms,templates] +menu: + docs: + parent: templates + weight: 90 +weight: 90 +toc: true +aliases: [/taxonomies/displaying/,/templates/terms/,/indexes/displaying/,/taxonomies/templates/,/indexes/ordering/, /templates/taxonomies/, /templates/taxonomy/] +--- + +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 given term. For example: ; +`site.Taxonomies.tags.Get "tag-a"`. + +.Count TERM +: The number of pieces of content assigned to the given term. For example: \ +`site.Taxonomies.tags.Count "tag-a"`. + +.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. + +.Page +: Returns a page reference for 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 +: The number of pieces of content assigned to this term. + +.Page +: Returns a page reference for 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="{{ .RelPermalink }}">{{ .LinkTitle }}</a> + {{ .Params.wikipedia }} + </li> + {{ end }} +</ul> +``` + +## 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> +``` + +## 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. + +{{< code-toggle file=content/example.md fm=true >}} +tags = [ "a", "b", "c" ] +tags_weight = 22 +categories = ["d"] +title = "Example" +categories_weight = 44 +{{< /code-toggle >}} + +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. + +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/lists/) 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 template](/templates/taxonomy-templates/) is a template used to +generate the list of terms for a given template. + +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/lists/): + +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) + +## List terms assigned to a page + +List the terms assigned to a page using the `.Page.GetTerms` method. + +To render an unordered list: + +```go-html-template +{{ $taxonomy := "tags" }} +{{ with .GetTerms $taxonomy }} + <p>{{ (site.GetPage $taxonomy).LinkTitle }}:</p> + <ul> + {{ range . }} + <li><a href="{{ .RelPermalink }}">{{ .LinkTitle }}</a></li> + {{ end }} + </ul> +{{ end }} +``` + +To render a comma-delimited list: + +```go-html-template +{{ $taxonomy := "tags" }} +{{ with .GetTerms $taxonomy }} + <p> + {{ (site.GetPage $taxonomy).LinkTitle }}: + {{ range $k, $_ := . -}} + {{ if $k }}, {{ end }} + <a href="{{ .RelPermalink }}">{{ .LinkTitle }}</a> + {{- end }} + </p> +{{ end }} +``` + +## 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><a href="{{ .RelPermalink }}">{{ .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 + +```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 >}} +<ul> + {{ range $taxonomy, $terms := site.Taxonomies }} + <li> + {{ with site.GetPage $taxonomy }} + <a href="{{ .RelPermalink }}">{{ .LinkTitle }}</a> + {{ end }} + <ul> + {{ range $term, $weightedPages := $terms }} + <li> + <a href="{{ .Page.RelPermalink }}">{{ .Page.LinkTitle }}</a> + <ul> + {{ range $weightedPages }} + <li><a href="{{ .RelPermalink }}">{{ .LinkTitle }}</a></li> + {{ end }} + </ul> + </li> + {{ end }} + </ul> + </li> + {{ end }} +</ul> +{{< /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](#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="{{ .RelPermalink }}">{{ .LinkTitle }}</a></li> + {{ end }} + {{ end }} +</ul> +{{< /code >}} + +[getpage]: /methods/page/getpage +[lists]: /templates/lists/ +[renderlists]: /templates/lists/ +[single page template]: /templates/single-page-templates/ +[sitevars]: /variables/site/ diff --git a/docs/content/en/templates/views.md b/docs/content/en/templates/views.md new file mode 100644 index 000000000..e49f1debb --- /dev/null +++ b/docs/content/en/templates/views.md @@ -0,0 +1,113 @@ +--- +title: Content view templates +description: Hugo can render alternative views of your content, useful in list and summary views. +categories: [templates] +keywords: [views] +menu: + docs: + parent: templates + weight: 110 +weight: 110 +toc: true +--- + +These alternative **content views** are especially useful in [list templates][lists]. + +The following are common use cases for content views: + +* You want content of every type to be shown on the homepage but only with limited [summary views][summaries]. +* You only want a bulleted list of your content on a [taxonomy list page][taxonomylists]. Views make this very straightforward by delegating the rendering of each different type of content to the content itself. + +## Create a content view + +To create a new view, create a template in each of your different content type directories with the view name. The following example contains an "li" view and a "summary" view for the `posts` and `project` content types. As you can see, these sit next to the [single content view][single] template, `single.html`. You can even provide a specific view for a given type and continue to use the `_default/single.html` for the primary view. + +```txt + ▾ layouts/ + ▾ posts/ + li.html + single.html + summary.html + ▾ project/ + li.html + single.html + summary.html +``` + +Hugo also has support for a default content template to be used in the event that a specific content view template has not been provided for that type. Content views can also be defined in the `_default` directory and will work the same as list and single templates who eventually trickle down to the `_default` directory as a matter of the lookup order. + +```txt +▾ layouts/ + ▾ _default/ + li.html + single.html + summary.html +``` + +## Which template will be rendered? + +The following is the [lookup order][lookup] for content views: + +1. `/layouts/<TYPE>/<VIEW>.html` +2. `/layouts/_default/<VIEW>.html` +3. `/themes/<THEME>/layouts/<TYPE>/<VIEW>.html` +4. `/themes/<THEME>/layouts/_default/<VIEW>.html` + +## Example: content view inside a list + +The following example demonstrates how to use content views inside your [list templates][lists]. + +### `list.html` + +In this example, `.Render` is passed into the template to call the [render function][render]. `.Render` is a special function that instructs content to render itself with the view template provided as the first argument. In this case, the template is going to render the `summary.html` view that follows: + +{{< code file=layouts/_default/list.html >}} +<main id="main"> + <div> + <h1 id="title">{{ .Title }}</h1> + {{ range .Pages }} + {{ .Render "summary" }} + {{ end }} + </div> +</main> +{{< /code >}} + +### `summary.html` + +Hugo will pass the entire page object to the following `summary.html` view template. (See [Page Variables][pagevars] for a complete list.) + +{{< code file=layouts/_default/summary.html >}} +<article class="post"> + <header> + <h2><a href="{{ .RelPermalink }}">{{ .Title }}</a></h2> + <div class="post-meta">{{ .Date.Format "Mon, Jan 2, 2006" }} - {{ .FuzzyWordCount }} Words </div> + </header> + {{ .Summary }} + <footer> + <a href='{{ .RelPermalink }}'>Read more »</a> + </footer> +</article> +{{< /code >}} + +### `li.html` + +Continuing on the previous example, we can change our render function to use a smaller `li.html` view by changing the argument in the call to the `.Render` function (i.e., `{{ .Render "li" }}`). + +{{< code file=layouts/_default/li.html >}} +<li> + <a href="{{ .RelPermalink }}">{{ .LinkTitle }}</a> + <div class="meta">{{ .Date.Format "Mon, Jan 2, 2006" }}</div> +</li> +{{< /code >}} + +[lists]: /templates/lists/ +[lookup]: /templates/lookup-order/ +[pagevars]: /variables/page/ +[render]: /methods/page/render/ +[single]: /templates/single-page-templates/ +[spf]: https://spf13.com +[spfsourceli]: https://github.com/spf13/spf13.com/blob/master/layouts/_default/li.html +[spfsourcesection]: https://github.com/spf13/spf13.com/blob/master/layouts/_default/section.html +[spfsourcesummary]: https://github.com/spf13/spf13.com/blob/master/layouts/_default/summary.html +[summaries]: /content-management/summaries/ +[taxonomylists]: /templates/taxonomy-templates/ diff --git a/docs/content/en/tools/_index.md b/docs/content/en/tools/_index.md new file mode 100644 index 000000000..006bed053 --- /dev/null +++ b/docs/content/en/tools/_index.md @@ -0,0 +1,20 @@ +--- +title: Developer tools +linkTitle: Overview +description: In addition to Hugo's powerful CLI, there is a large number of community-developed tool chains for Hugo developers. +categories: [] +keywords: [] +menu: + docs: + identifier: developer-tools-overview + parent: developer-tools + weight: 10 +weight: 10 +--- + +One of Hugo's greatest strengths is its passionate---and always evolving---developer community. With the exception of the `highlight` shortcode mentioned in [Syntax Highlighting][syntax], the tools and other projects featured in this section are offerings from both commercial services and open-source projects, many of which are developed by Hugo developers just like you. + +[See the popularity of Hugo compared with other static site generators.][staticgen] + +[staticgen]: https://staticgen.com +[syntax]: /content-management/syntax-highlighting/ diff --git a/docs/content/en/tools/editors.md b/docs/content/en/tools/editors.md new file mode 100644 index 000000000..d94b7af0f --- /dev/null +++ b/docs/content/en/tools/editors.md @@ -0,0 +1,66 @@ +--- +title: Editor plugins +linkTitle: Editor plugins +description: The Hugo community uses a wide range of tools and has developed plugins for some of the most popular text editors to help automate parts of your workflow. +categories: [developer tools] +keywords: [editor,plugin] +menu: + docs: + parent: developer-tools + weight: 20 +weight: 20 +toc: true +--- + +## Visual Studio Code + +[Front Matter](https://marketplace.visualstudio.com/items?itemName=eliostruyf.vscode-front-matter) +: Once you go for a static site, you need to think about how you are going to manage your articles. Front matter is a tool that helps you maintain the metadata/front matter of your articles like: creation date, modified date, slug, tile, SEO check, and more. + +[Hugo Helper](https://marketplace.visualstudio.com/items?itemName=rusnasonov.vscode-hugo) +: Hugo Helper is a plugin for Visual Studio Code that has some useful commands for Hugo. The source code can be found [here](https://github.com/rusnasonov/vscode-hugo). + +[Hugo Language and Syntax Support](https://marketplace.visualstudio.com/items?itemName=budparr.language-hugo-vscode) +: Hugo Language and Syntax Support is a Visual Studio Code plugin for Hugo syntax highlighting and snippets. The source code can be found [here](https://github.com/budparr/language-hugo-vscode). + +[Hugo Themer](https://marketplace.visualstudio.com/items?itemName=eliostruyf.vscode-hugo-themer) +: Hugo Themer is an extension to help you while developing themes. It allows you to easily navigate through your theme files. + +[Hugofy](https://marketplace.visualstudio.com/items?itemName=akmittal.hugofy) +: Hugofy is a plugin for Visual Studio Code to "make life easier" when developing with Hugo. The source code can be found [here](https://github.com/akmittal/hugofy-vscode). + +[Prettier Plugin for Go Templates](https://github.com/NiklasPor/prettier-plugin-go-template) +: Format Hugo templates using this [Prettier](https://prettier.io/) plugin. See [installation instructions](https://discourse.gohugo.io/t/38403). + +[Syntax Highlighting for Hugo Shortcodes](https://marketplace.visualstudio.com/items?itemName=kaellarkin.hugo-shortcode-syntax) +: This extension adds some syntax highlighting for Shortcodes, making visual identification of individual pieces easier. + +## Emacs + +[emacs-easy-hugo](https://github.com/masasam/emacs-easy-hugo) +: Emacs major mode for managing hugo blogs. Note that Hugo also supports [Org-mode][formats]. + +[ox-hugo.el](https://ox-hugo.scripter.co) +: Native Org-mode exporter that exports to Blackfriday Markdown with Hugo front-matter. `ox-hugo` supports two common Org blogging flows --- exporting multiple Org subtrees in a single file to multiple Hugo posts, and exporting a single Org file to a single Hugo post. It also leverages the Org tag and property inheritance features. See [*Why ox-hugo?*](https://ox-hugo.scripter.co/doc/why-ox-hugo/) for more. + +## Sublime Text + +[Hugofy](https://github.com/akmittal/Hugofy) +: Hugofy is a plugin for Sublime Text 3 to make life easier to use Hugo static site generator. + +[Hugo Snippets](https://packagecontrol.io/packages/Hugo%20Snippets) +: Hugo Snippets is a useful plugin for adding automatic snippets to Sublime Text 3. + +## Vim + +[Vim Hugo Helper]: https://github.com/robertbasic/vim-hugo-helper + +[Vim Hugo Helper] +: A small Vim plugin that facilitates authoring pages and blog posts with Hugo. + +[xxx]: xxx + +[vim-hugo](https://github.com/phelipetls/vim-hugo) +: A Vim plugin with syntax highlighting for templates and a few other features. + +[formats]: /content-management/formats/ diff --git a/docs/content/en/tools/front-ends.md b/docs/content/en/tools/front-ends.md new file mode 100644 index 000000000..acce84d8d --- /dev/null +++ b/docs/content/en/tools/front-ends.md @@ -0,0 +1,30 @@ +--- +title: Front-end interfaces +linkTitle: Front-ends +description: Do you prefer a graphical user interface over a text editor? Give these front-ends a try. +categories: [developer tools] +keywords: [frontend, gui] +menu: + docs: + parent: developer-tools + weight: 30 +weight: 30 +toc: true +aliases: [/tools/frontends/] +--- + +## Commercial + +[CloudCannon](https://cloudcannon.com/hugo-cms/) +: The intuitive Git-based CMS for your Hugo website. CloudCannon syncs changes from your Git repository and pushes content changes back, so your development and content teams are always in sync. Edit all of your content on the page with visual editing, build entire pages with reusable custom components and then publish confidently. + +[DatoCMS](https://www.datocms.com) +: DatoCMS is a fully customizable administrative area for your static websites. Use your favorite website generator, let your clients publish new content independently, and the host the site anywhere you like. + +## Open source + +[Decap CMS](https://decapcms.org/) +: Decap CMS is an open-source, serverless solution for managing Git based content in static sites, and it works on any platform that can host static sites. A [Hugo/Decap CMS starter](https://github.com/decaporg/one-click-hugo-cms) is available to get new projects running quickly. + +[Sveltia CMS](https://github.com/sveltia/sveltia-cms/) +: Sveltia CMS is a drop-in replacement for Decap CMS which is built from the ground up with powerful and performant modern UI library Svelte. Sveltia CMS incorporates i18n into every corner of the product, while striving to radically improve UX, performance and productivity. diff --git a/docs/content/en/tools/migrations.md b/docs/content/en/tools/migrations.md new file mode 100644 index 000000000..0e61274c4 --- /dev/null +++ b/docs/content/en/tools/migrations.md @@ -0,0 +1,102 @@ +--- +title: Migrate to Hugo +linkTitle: Migrations +description: A list of community-developed tools for migrating from your existing static site generator or content management system to Hugo. +categories: [developer tools] +keywords: [migrations,jekyll,wordpress,drupal,ghost,contentful] +menu: + docs: + parent: developer-tools + weight: 50 +weight: 50 +toc: true +aliases: [/developer-tools/migrations/, /developer-tools/migrated/] +--- + +This section highlights some projects around Hugo that are independently developed. These tools try to extend the functionality of our static site generator or help you to get started. + +Take a look at this list of migration tools if you currently use other blogging tools like Jekyll or WordPress but intend to switch to Hugo instead. They'll take care to export your content into Hugo-friendly formats. + +## Jekyll + +Alternatively, you can use the [Jekyll import command](/commands/hugo_import_jekyll/). + +[JekyllToHugo](https://github.com/fredrikloch/JekyllToHugo) +: A Small script for converting Jekyll blog posts to a Hugo site. + +[ConvertToHugo](https://github.com/coderzh/ConvertToHugo) +: Convert your blog from Jekyll to Hugo. + +## Octopress + +[octohug](https://github.com/codebrane/octohug) +: Octopress to Hugo migrator. + +## DokuWiki + +[dokuwiki-to-hugo](https://github.com/wgroeneveld/dokuwiki-to-hugo) +: Migrates your DokuWiki source pages from [DokuWiki syntax](https://www.dokuwiki.org/wiki:syntax) to Hugo Markdown syntax. Includes extra's like the TODO plugin. Written with extensibility in mind using python 3. Also generates a TOML header for each page. Designed to copypaste the wiki directory into your /content directory. + +## WordPress + +[wordpress-to-hugo-exporter](https://github.com/SchumacherFM/wordpress-to-hugo-exporter) +: A one-click WordPress plugin that converts all posts, pages, taxonomies, metadata, and settings to Markdown and YAML which can be dropped into Hugo. (Note: If you have trouble using this plugin, you - \s-\scan [export your site for Jekyll](https://wordpress.org/plugins/jekyll-exporter/) and use Hugo's built in Jekyll converter listed above.) + +[blog2md](https://github.com/palaniraja/blog2md) +: Works with [exported xml](https://en.support.wordpress.com/export/) file of your free YOUR-TLD.wordpress.com website. It also saves approved comments to `YOUR-POST-NAME-comments.md` file along with posts. + +[wordhugopress](https://github.com/nantipov/wordhugopress) +: A small utility written in Java, exports the entire WordPress site from the database and resource (e.g. images) files stored locally or remotely. Therefore, migration from the backup files is possible. Supports merging of the multiple WordPress sites into a single Hugo one. + +## Medium + +[medium2md](https://github.com/gautamdhameja/medium-2-md) +: A simple Medium to Hugo exporter able to import stories in one command, including front matter. + +[medium-to-hugo](https://github.com/bgadrian/medium-to-hugo) +: CLI tool written in Go to export medium posts into a Hugo compatible Markdown format. Tags and images are included. All images will be downloaded locally and linked appropriately. + +## Tumblr + +[tumblr-importr](https://github.com/carlmjohnson/tumblr-importr) +: An importer that uses the Tumblr API to create a Hugo static site. + +[tumblr2hugomarkdown](https://github.com/Wysie/tumblr2hugomarkdown) +: Export all your Tumblr content to Hugo Markdown files with preserved original formatting. + +[Tumblr to Hugo](https://github.com/jipiboily/tumblr-to-hugo) +: A migration tool that converts each of your Tumblr posts to a content file with a proper title and path. Furthermore, "Tumblr to Hugo" creates a CSV file with the original URL and the new path on Hugo, to help you setup the redirections. + +## Drupal + +[drupal2hugo](https://github.com/danapsimer/drupal2hugo) +: Convert a Drupal site to Hugo. + +## Joomla + +[hugojoomla](https://github.com/davetcc/hugojoomla) +: This utility written in Java takes a Joomla database and converts all the content into Markdown files. It changes any URLs that are in Joomla's internal format and converts them to a suitable form. + +## Blogger + +[blogimport](https://github.com/natefinch/blogimport) +: A tool to import from Blogger posts to Hugo. + +[blogger-to-hugo](https://pypi.org/project/blogger-to-hugo/) +: Another tool to import Blogger posts to Hugo. It also downloads embedded images so they will be stored locally. + +[blog2md](https://github.com/palaniraja/blog2md) +: Works with [exported xml](https://support.google.com/blogger/answer/41387?hl=en) file of your YOUR-TLD.blogspot.com website. It also saves comments to `YOUR-POST-NAME-comments.md` file along with posts. + +[BloggerToHugo](https://github.com/huanlin/blogger-to-hugo) +: Yet another tool to import Blogger posts to Hugo. For Windows platform only, and .NET Framework 4.5 is required. See README.md before using this tool. + +## Contentful + +[contentful-hugo](https://github.com/ModiiMedia/contentful-hugo) +: A tool to create content-files for Hugo from content on [Contentful](https://www.contentful.com/). + +## BlogML + +[BlogML2Hugo](https://github.com/jijiechen/BlogML2Hugo) +: A tool that helps you convert BlogML xml file to Hugo Markdown files. Users need to take care of links to attachments and images by themselves. This helps the blogs that export BlogML files (e.g. BlogEngine.NET) transform to hugo sites easily. diff --git a/docs/content/en/tools/other.md b/docs/content/en/tools/other.md new file mode 100644 index 000000000..f5243632c --- /dev/null +++ b/docs/content/en/tools/other.md @@ -0,0 +1,23 @@ +--- +title: Other community projects +linkTitle: Other projects +description: Some interesting projects developed by the Hugo community that don't quite fit into our other developer tool categories. +categories: [developer tools] +keywords: [frontend,gui] +menu: + docs: + parent: developer-tools + weight: 60 +weight: 60 +--- + +And for all the other small things around Hugo: + +- [hugo-gallery](https://github.com/icecreammatt/hugo-gallery) lets you create an image gallery for Hugo sites. +- [flickr-hugo-embed](https://github.com/nikhilm/flickr-hugo-embed) prints shortcodes to embed a set of images from an album on Flickr into Hugo. +- [hugo-openapispec-shortcode](https://github.com/tenfourty/hugo-openapispec-shortcode) A shortcode that allows you to include [Open API Spec](https://openapis.org) (formerly known as Swagger Spec) in a page. +- [HugoPhotoSwipe](https://github.com/GjjvdBurg/HugoPhotoSwipe) makes it easy to create image galleries using PhotoSwipe. +- [Hugo SFTP Upload](https://github.com/thomasmey/HugoSftpUpload) Syncs the local build of your Hugo website with your remote web server via SFTP. +- [Emacs Easy Hugo](https://github.com/masasam/emacs-easy-hugo) Emacs package for writing blog posts in markdown or org-mode and building your site with Hugo. +- [JAMStack Themes](https://jamstackthemes.dev/ssg/hugo/). JAMStack themes is a collection of site themes filterable by static site generator and supported CMS to help build CMS-connected sites using Hugo (linking to Hugo-specific themes). +- [plausible-hugo](https://github.com/divinerites/plausible-hugo). Easy Hugo integration for Plausible Analytics, a simple, open-source, lightweight and privacy-friendly web analytics alternative to Google Analytics. diff --git a/docs/content/en/tools/search.md b/docs/content/en/tools/search.md new file mode 100644 index 000000000..c3db0dc98 --- /dev/null +++ b/docs/content/en/tools/search.md @@ -0,0 +1,55 @@ +--- +title: Search tools +linkTitle: Search +description: See some of the open-source and commercial search options for your newly created Hugo website. +categories: [developer tools] +keywords: [search] +menu: + docs: + parent: developer-tools + weight: 40 +weight: 40 +toc: true +--- + +A static website with a dynamic search function? Yes, Hugo provides an alternative to embeddable scripts from Google or other search engines for static websites. Hugo allows you to provide your visitors with a custom search function by indexing your content files directly. + +## Open source + +[Pagefind](https://github.com/cloudcannon/pagefind) +: A fully static search library that aims to perform well on large sites, while using as little of your users' bandwidth as possible. + +[GitHub Gist for Hugo Workflow](https://gist.github.com/sebz/efddfc8fdcb6b480f567) +: This gist contains a simple workflow to create a search index for your static website. It uses a simple Grunt script to index all your content files and [lunr.js](https://lunrjs.com/) to serve the search results. + +[hugo-lunr](https://www.npmjs.com/package/hugo-lunr) +: A simple way to add site search to your static Hugo site using [lunr.js](https://lunrjs.com/). Hugo-lunr will create an index file of any HTML and Markdown documents in your Hugo project. + +[hugo-lunr-zh](https://www.npmjs.com/package/hugo-lunr-zh) +: A bit like Hugo-lunr, but Hugo-lunr-zh can help you separate the Chinese keywords. + +[GitHub Gist for Fuse.js integration](https://gist.github.com/eddiewebb/735feb48f50f0ddd65ae5606a1cb41ae) +: This gist demonstrates how to leverage Hugo's existing build time processing to generate a searchable JSON index used by [Fuse.js](https://fusejs.io/) on the client-side. Although this gist uses Fuse.js for fuzzy matching, any client-side search tool capable of reading JSON indexes will work. Does not require npm, grunt, or other build-time tools except Hugo! + +[hugo-search-index](https://www.npmjs.com/package/hugo-search-index) +: A library containing Gulp tasks and a prebuilt browser script that implements search. Gulp generates a search index from project markdown files. + +[hugofastsearch](https://gist.github.com/cmod/5410eae147e4318164258742dd053993) +: A usability and speed update to "GitHub Gist for Fuse.js integration" — global, keyboard-optimized search. + +[JS & Fuse.js tutorial](https://makewithhugo.com/add-search-to-a-hugo-site/) +: A simple client-side search solution, using FuseJS (does not require jQuery). + +[Hugo Lyra](https://github.com/paolomainardi/hugo-lyra) +: Hugo-Lyra is a JavaScript module to integrate [Lyra](https://github.com/LyraSearch/lyra) into a Hugo website. It contains the server-side part to generate the index and the client-side library (optional) to bootstrap the search engine easily. + +## Commercial + +[Algolia](https://www.algolia.com/) +: Algolia's Search API makes it easy to deliver a great search experience in your apps and websites. Algolia Search provides hosted full-text, numerical, faceted, and geolocalized search. + +[Bonsai](https://www.bonsai.io) +: Bonsai is a fully-managed hosted Elasticsearch service that is fast, reliable, and simple to set up. Easily ingest your docs from Hugo into Elasticsearch following [this guide from the docs](https://bonsai.io/docs/hugo). + +[ExpertRec](https://www.expertrec.com/) +: ExpertRec is a hosted search-as-a-service solution that is fast and scalable. Set-up and integration is extremely easy and takes only a few minutes. The search settings can be modified without coding using a dashboard. diff --git a/docs/content/en/troubleshooting/_index.md b/docs/content/en/troubleshooting/_index.md new file mode 100644 index 000000000..65263ab32 --- /dev/null +++ b/docs/content/en/troubleshooting/_index.md @@ -0,0 +1,16 @@ +--- +title: Troubleshooting +linkTitle: Overview +description: Use these techniques when troubleshooting your site. +categories: [] +keywords: [] +menu: + docs: + identifier: troubleshooting-overview + parent: troubleshooting + weight: 10 +weight: 10 +aliases: [/templates/template-debugging/] +--- + +Use these techniques when troubleshooting your site. diff --git a/docs/content/en/troubleshooting/audit/index.md b/docs/content/en/troubleshooting/audit/index.md new file mode 100644 index 000000000..f00ed8f8d --- /dev/null +++ b/docs/content/en/troubleshooting/audit/index.md @@ -0,0 +1,73 @@ +--- +title: Site audit +linkTitle: Audit +description: Run this audit before deploying your production site. +categories: [troubleshooting] +keywords: [] +menu: + docs: + parent: troubleshooting + weight: 20 +weight: 20 +--- + +There are several conditions that can produce errors in your published site which are not detected during the build. Run this audit before your final build. + +{{< code copy=true >}} +HUGO_MINIFY_TDEWOLFF_HTML_KEEPCOMMENTS=true HUGO_ENABLEMISSINGTRANSLATIONPLACEHOLDERS=true hugo && grep -inorE "<\!-- raw HTML omitted -->|ZgotmplZ|\[i18n\]|\(<nil>\)|(<nil>)|hahahugo" public/ +{{< /code >}} + +_Tested with GNU Bash 5.1 and GNU grep 3.7._ + +## Example output + +![site audit terminal output](screen-capture.png) + +## Explanation + +### Environment variables + +`HUGO_MINIFY_TDEWOLFF_HTML_KEEPCOMMENTS=true` +: Retain HTML comments even if minification is enabled. This takes precedence over `minify.tdewolff.html.keepComments` in the site configuration. If you minify without keeping HTML comments when performing this audit, you will not be able to detect when raw HTML has been omitted. + +`HUGO_ENABLEMISSINGTRANSLATIONPLACEHOLDERS=true` +: Show a placeholder instead of the default value or an empty string if a translation is missing. This takes precedence over `enableMissingTranslationPlaceholders` in the site configuration. + +### Grep options + +`-i, --ignore-case` +: Ignore case distinctions in patterns and input data, so that characters that differ only in case match each other. + +`-n, --line-number` +: Prefix each line of output with the 1-based line number within its input file. + +`-o, --only-matching` +: Print only the matched (non-empty) parts of a matching line, with each such part on a separate output line. + +`-r, --recursive` +: Read all files under each directory, recursively, following symbolic links only if they are on the command line. + +`-E, --extended-regexp` +: Interpret PATTERNS as extended regular expressions. + +### Patterns + +`<!-- raw HTML omitted -->` +: By default, Hugo strips raw HTML from your markdown prior to rendering, and leaves this HTML comment in its place. + +`ZgotmplZ` +: ZgotmplZ is a special value that indicates that unsafe content reached a CSS or URL context at runtime. See [details]. + +[details]: https://pkg.go.dev/html/template + +`[i18n]` +: This is the placeholder produced instead of the default value or an empty string if a translation is missing. + +`(<nil>)` +: This string will appear in the rendered HTML when passing a nil value to the `printf` function. + +`(<nil>)` +: Same as above when the value returned from the `printf` function has not been passed through `safeHTML`. + +`HAHAHUGO` +: Under certain conditions a rendered shortcode may include all or a portion of the string HAHAHUGOSHORTCODE in either uppercase or lowercase. This is difficult to detect in all circumstances, but a case-insensitive search of the output for `HAHAHUGO` is likely to catch the majority of cases without producing false positives. diff --git a/docs/content/en/troubleshooting/audit/screen-capture.png b/docs/content/en/troubleshooting/audit/screen-capture.png Binary files differnew file mode 100644 index 000000000..221abfff0 --- /dev/null +++ b/docs/content/en/troubleshooting/audit/screen-capture.png diff --git a/docs/content/en/troubleshooting/deprecation.md b/docs/content/en/troubleshooting/deprecation.md new file mode 100644 index 000000000..aa4bb71a2 --- /dev/null +++ b/docs/content/en/troubleshooting/deprecation.md @@ -0,0 +1,50 @@ +--- +title: Deprecation +description: The Hugo project follows a formal and consistent process to deprecate functions, methods, and configuration settings. +categories: [troubleshooting] +keywords: [] +menu: + docs: + parent: troubleshooting + weight: 50 +weight: 50 +--- + +When a project _deprecates_ something, they are telling its users: + +1. Don't use Thing One anymore. +2. Use Thing Two instead. +3. We're going to remove Thing One at some point in the future. + +[reasons for deprecation]: https://en.wikipedia.org/wiki/Deprecation + +Common [reasons for deprecation]: + +- A feature has been replaced by a more powerful alternative. +- A feature contains a design flaw. +- A feature is considered extraneous, and will be removed in the future in order to simplify the system as a whole. +- A future version of the software will make major structural changes, making it impossible or impractical to support older features. +- Standardization or increased consistency in naming. +- A feature that once was available only independently is now combined with its co-feature. + +After the project team deprecates something in code, Hugo will: + +1. Log an INFO message for 6 minor releases[^1] +2. Log a WARN message for another 6 minor releases +3. Log an ERROR message and fail the build thereafter + +To see the INFO messages, you must use the `--logLevel` command line flag: + +```text +hugo --logLevel info +``` + +To limit the output to deprecation notices: + +```text +hugo --logLevel info | grep deprecate +``` + +Run the above command every time you upgrade Hugo. + +[^1]: For example, v0.1.1 => v0.2.0 is a minor release. diff --git a/docs/content/en/troubleshooting/faq.md b/docs/content/en/troubleshooting/faq.md new file mode 100644 index 000000000..0425ca277 --- /dev/null +++ b/docs/content/en/troubleshooting/faq.md @@ -0,0 +1,124 @@ +--- +title: Frequently asked questions +linkTitle: FAQs +description: These questions are frequently asked by new users. +categories: [troubleshooting] +keywords: [faq] +menu: + docs: + parent: troubleshooting + weight: 70 +weight: 70 +# Use level 6 headings for each question. +--- + +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. + +These are just a few of the questions most frequently asked by new users. + +###### An error message indicates that a feature is not available. Why? + +Hugo is available in two editions: standard and extended. With the extended edition you can (a) encode to the WebP format when processing images, and (b) transpile Sass to CSS using the embedded LibSass transpiler. The extended edition is not required to use the Dart Sass transpiler. + +When you attempt to perform either of the operations above with the standard edition, Hugo throws this error: + +```go-html-template +Error: this feature is not available in your current Hugo version +``` + +To resolve, uninstall the standard edition, then install the extended edition. See the [installation] section for details. + +###### Why do I see "Page Not Found" when visiting the home page? + +In the content/_index.md file: + + - Is `draft` set to `true`? + - Is the `date` in the future? + - Is the `publishDate` in the future? + - Is the `expiryDate` in the past? + +If the answer to any of these questions is yes, either change the field values, or use one of these command line flags: `--buildDrafts`, `--buildFuture`, or `--buildExpired`. + +###### Why is a given section not published? + +In the content/section/_index.md file: + + - Is `draft` set to `true`? + - Is the `date` in the future? + - Is the `publishDate` in the future? + - Is the `expiryDate` in the past? + +If the answer to any of these questions is yes, either change the field values, or use one of these command line flags: `--buildDrafts`, `--buildFuture`, or `--buildExpired`. + +###### Why is a given page not published? + +In the content/section/page.md file, or in the content/section/page/index.md file: + + - Is `draft` set to `true`? + - Is the `date` in the future? + - Is the `publishDate` in the future? + - Is the `expiryDate` in the past? + +If the answer to any of these questions is yes, either change the field values, or use one of these command line flags: `--buildDrafts`, `--buildFuture`, or `--buildExpired`. + +###### Why can't I see any of a page's descendants? + +You may have an index.md file instead of an _index.md file. See [details](/content-management/page-bundles/). + +###### What is the difference between an index.md file and an _index.md file? + +A directory with an index.md file is a [leaf bundle]. A directory with an _index.md file is a [branch bundle]. See [details](/content-management/page-bundles/). + +[branch bundle]: /getting-started/glossary/#branch-bundle +[leaf bundle]: /getting-started/glossary/#leaf-bundle + +###### Why is my partial template not rendered as expected? {#foo} + +You may have neglected to pass the required [context] when calling the partial. For example: + +```go-html-template +{{/* incorrect */}} +{{ partial "_internal/pagination.html" }} + +{{/* correct */}} +{{ partial "_internal/pagination.html" . }} +``` + +###### In a template, what's the difference between `:=` and `=` when assigning values to variables? + +Use `:=` to initialize a variable, and use `=` to assign a value to a variable that has been previously initialized. See [details](https://pkg.go.dev/text/template#hdr-Variables). + +###### When I paginate a list page, why is the page collection not filtered as specified? + +You are probably invoking the [`Paginate`] or [`Paginator`] method more than once on the same page. See [details](/templates/pagination/#list-paginator-pages). + +###### Why are there two ways to call a shortcode? + +Use the `{{%/* shortcode */%}}` notation if the shortcode template, or the content between the opening and closing shortcode tags, contains markdown. Otherwise use the\ +`{{</* shortcode */>}}` notation. See [details](/content-management/shortcodes/). + +###### Can I use environment variables to control configuration? + +Yes. See [details](/getting-started/configuration/#configure-with-environment-variables). + +###### Why am I seeing inconsistent output from one build to the next? + +The most common causes are page collisions (publishing two pages to the same path) and the effects of concurrency. Use the `--printPathWarnings` command line flag to check for page collisions, and create a topic on the [forum] if you suspect concurrency problems. + +###### Which page methods trigger content rendering? + +The following methods on a `Page` object trigger content rendering: `Content`, `FuzzyWordCount`, `Len`, `Plain`, `PlainWords`, `ReadingTime`, `Summary`, `Truncated`, and `WordCount`. + +{{% note %}} +For other questions please visit the [forum]. 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. + +[forum]: https://discourse.gohugo.io +[requesting help]: https://discourse.gohugo.io/t/requesting-help/9132 +{{% /note %}} + +[`Paginate`]: /methods/page/paginate +[`Paginator`]: /methods/page/paginator +[context]: /getting-started/glossary/#context +[forum]: https://discourse.gohugo.io +[installation]: /installation +[requesting help]: https://discourse.gohugo.io/t/requesting-help/9132 diff --git a/docs/content/en/troubleshooting/inspection.md b/docs/content/en/troubleshooting/inspection.md new file mode 100644 index 000000000..826229153 --- /dev/null +++ b/docs/content/en/troubleshooting/inspection.md @@ -0,0 +1,72 @@ +--- +title: Data inspection +linkTitle: Inspection +description: Use template functions to inspect values and data structures. +categories: [troubleshooting] +keywords: [] +menu: + docs: + parent: troubleshooting + weight: 40 +weight: 40 +--- + +Use the [`jsonify`] function to inspect a data structure: + +```go-html-template +<pre>{{ jsonify (dict "indent" " ") .Params }}</pre> +``` + +```text +{ + "date": "2023-11-10T15:10:42-08:00", + "draft": false, + "iscjklanguage": false, + "lastmod": "2023-11-10T15:10:42-08:00", + "publishdate": "2023-11-10T15:10:42-08:00", + "tags": [ + "foo", + "bar" + ], + "title": "My first post" +} +``` + +{{% note %}} +Hugo will throw an error if you attempt to use the construct above to display context that includes a page collection. For example, in a home page template, this will fail: + +`{{ jsonify (dict "indent" " ") . }}` +{{% /note %}} + +Use the [`debug.Dump`] function to inspect data types: + +```go-html-template +<pre>{{ debug.Dump .Params }}</pre> +``` + +```text +maps.Params{ + "date": time.Time{}, + "draft": false, + "iscjklanguage": false, + "lastmod": time.Time{}, + "publishdate": time.Time{}, + "tags": []string{ + "foo", + "bar", + }, + "title": "My first post", +} +``` + +Use the [`printf`] function (render) or [`warnf`] function (log to console) to inspect simple data structures. The layout string below displays both value and data type. + +```go-html-template +{{ $value := 42 }} +{{ printf "%[1]v (%[1]T)" $value }} → 42 (int) +``` + +[`jsonify`]: /functions/encoding/jsonify +[`debug.Dump`]: /functions/debug/dump +[`printf`]: /functions/fmt/printf +[`warnf`]: /functions/fmt/warnf diff --git a/docs/content/en/troubleshooting/logging.md b/docs/content/en/troubleshooting/logging.md new file mode 100644 index 000000000..8879c1846 --- /dev/null +++ b/docs/content/en/troubleshooting/logging.md @@ -0,0 +1,56 @@ +--- +title: Logging +description: Enable logging to inspect events while building your site. +categories: [troubleshooting] +keywords: [] +menu: + docs: + parent: troubleshooting + weight: 30 +weight: 30 +toc: true +--- + +## Command line + +Enable console logging with the `--logLevel` command line flag. + +Hugo has four logging levels: + +error +: Display error messages only. + +```sh +hugo --logLevel error +``` + +warn +: Display warning and error messages. + +```sh +hugo --logLevel warn +``` + +info +: Display information, warning, and error messages. + +```sh +hugo --logLevel info +``` + +debug +: Display debug, information, warning, and error messages. + +```sh +hugo --logLevel debug +``` + +{{% note %}} +If you do not specify a logging level with the `--logLevel` flag, warnings and errors are always displayed. +{{% /note %}} + +## Template functions + +You can also use template functions to print warnings or errors to the console. These functions are typically used to report data validation errors, missing files, etc. + +{{< list-pages-in-section path=/functions/fmt filter=functions_fmt_logging filterType=include >}} diff --git a/docs/content/en/troubleshooting/performance.md b/docs/content/en/troubleshooting/performance.md new file mode 100644 index 000000000..174d6cfd9 --- /dev/null +++ b/docs/content/en/troubleshooting/performance.md @@ -0,0 +1,94 @@ +--- +title: Performance +description: Use template metrics and timers to identify opportunities to improve performance. +categories: [troubleshooting] +keywords: [] +menu: + docs: + parent: troubleshooting + weight: 60 +weight: 60 +toc: true +aliases: [/troubleshooting/build-performance/] +--- + +## Template metrics + +Hugo is fast, but inefficient templates impede performance. Enable template metrics to determine which templates take the most time, and to identify caching opportunities: + +```sh +hugo --templateMetrics --templateMetricsHints +``` + +The result will look something like this: + +```text +Template Metrics: + + cumulative average maximum cache percent cached total + duration duration duration potential cached count count template + ---------- -------- -------- --------- ------- ------ ----- -------- + 36.037476822s 135.990478ms 225.765245ms 11 0 0 265 partials/head.html + 35.920040902s 164.018451ms 233.475072ms 0 0 0 219 articles/single.html + 34.163268129s 128.917992ms 224.816751ms 23 0 0 265 partials/head/meta/opengraph.html + 1.041227437s 3.92916ms 186.303376ms 47 0 0 265 partials/head/meta/schema.html + 805.628827ms 27.780304ms 114.678523ms 0 0 0 29 _default/list.html + 624.08354ms 15.221549ms 108.420729ms 8 0 0 41 partials/utilities/render-page-collection.html + 545.968801ms 775.523µs 105.045775ms 0 0 0 704 _default/summary.html + 334.680981ms 1.262947ms 127.412027ms 100 0 0 265 partials/head/js.html + 272.763205ms 2.050851ms 24.371757ms 0 0 0 133 _default/_markup/render-codeblock.html + 230.490038ms 8.865001ms 177.4615ms 0 0 0 26 shortcodes/template.html + 176.921913ms 176.921913ms 176.921913ms 0 0 0 1 examples.tmpl + 163.951469ms 14.904679ms 70.267953ms 0 0 0 11 articles/list.html + 153.07021ms 577.623µs 73.593597ms 100 0 0 265 partials/head/init.html + 150.910984ms 150.910984ms 150.910984ms 0 0 0 1 _default/single.html + 146.785804ms 146.785804ms 146.785804ms 0 0 0 1 _default/contact.html + 115.364617ms 115.364617ms 115.364617ms 0 0 0 1 authors/term.html + 87.392071ms 329.781µs 10.687132ms 100 0 0 265 partials/head/css.html + 86.803122ms 86.803122ms 86.803122ms 0 0 0 1 _default/home.html +``` + +From left to right, the columns represent: + +cumulative duration +: The cumulative time spent executing the template. + +average duration +: The average time spent executing the template. + +maximum duration +: The maximum time spent executing the template. + +cache potential +: Displayed as a percentage, any partial template with a 100% cache potential should be called with the [`partialCached`] function instead of the [`partial`] function. See the [caching](#caching) section below. + +percent cached +: The number of times the rendered templated was cached divided by the number of times the template was executed. + +cached count +: The number of times the rendered templated was cached. + +total count +: The number of times the template was executed. + +template +: The path to the template, relative to the layouts directory. + +[`partial`]: /functions/partials/include +[`partialCached`]: /functions/partials/includecached + +{{% note %}} +Hugo builds pages in parallel where multiple pages are generated simultaneously. Because of this parallelism, the sum of "cumulative duration" values is usually greater than the actual time it takes to build a site. +{{% /note %}} + +## Caching + +Some partial templates such as sidebars or menus are executed many times during a site build. Depending on the content within the partial template and the desired output, the template may benefit from caching to reduce the number of executions. The [`partialCached`] template function provides caching capabilities for partial templates. + +{{% note %}} +Note that you can create cached variants of each partial by passing additional parameters to `partialCached` beyond the initial context. See the `partialCached` documentation for more details. +{{% /note %}} + +## Timers + +Use the `debug.Timer` function to determine execution time for a block of code, useful for finding performance bottle necks in templates. See [details](/functions/debug/timer/). diff --git a/docs/content/en/variables/_common/_index.md b/docs/content/en/variables/_common/_index.md new file mode 100644 index 000000000..47d5812fb --- /dev/null +++ b/docs/content/en/variables/_common/_index.md @@ -0,0 +1,13 @@ +--- +cascade: + _build: + list: never + publishResources: false + render: never +--- + +<!-- +Files within this headless branch bundle are markdown snippets. Each file must contain front matter delimiters, though front matter fields are not required. + +Include the rendered content using the "include" shortcode. +--> diff --git a/docs/content/en/variables/_common/consistent-terminology.md b/docs/content/en/variables/_common/consistent-terminology.md new file mode 100644 index 000000000..8774c817b --- /dev/null +++ b/docs/content/en/variables/_common/consistent-terminology.md @@ -0,0 +1,20 @@ +--- +# Do not remove front matter. +--- + +{{% note %}} +We are making an effort to unify our [terminology], and to use these terms consistently throughout the documentation. + +Historically, we have inconsistently referred to the items on this page as [functions], [parameters], [variables], or [methods]. They are not functions, parameters, or variables; they are methods. + +This page will remain in place as readers become familiar with the unified terminology. See the [methods section] for a list of methods by [object], or the [methods quick reference guide]. + +[functions]: /getting-started/glossary/#function +[methods quick reference guide]: /quick-reference/methods +[methods section]: /methods +[methods]: /getting-started/glossary/#method +[object]: /getting-started/glossary/#object +[parameters]: /getting-started/glossary/#parameter +[terminology]: /getting-started/glossary/ +[variables]: /getting-started/glossary/#variable +{{% /note %}} diff --git a/docs/content/en/variables/_index.md b/docs/content/en/variables/_index.md new file mode 100644 index 000000000..d8dbf9d67 --- /dev/null +++ b/docs/content/en/variables/_index.md @@ -0,0 +1,16 @@ +--- +title: Variables +linkTitle: Overview +description: Use these variables in your templates. +categories: [] +keywords: [] +menu: + docs: + identifier: variables-overview + parent: variables + weight: 10 +weight: 10 +aliases: [/templates/variables/] +--- + +{{% include "variables/_common/consistent-terminology.md" %}} diff --git a/docs/content/en/variables/file.md b/docs/content/en/variables/file.md new file mode 100644 index 000000000..248d84991 --- /dev/null +++ b/docs/content/en/variables/file.md @@ -0,0 +1,18 @@ +--- +title: File variables +description: Retrieve file information about any page that is backed by a file. +categories: [variables] +keywords: [] +menu: + docs: + parent: variables + weight: 20 +weight: 20 +aliases: [/variables/file-variables/,/variables/files/] +--- + +{{% include "variables/_common/consistent-terminology.md" %}} + +To retrieve file information about any page that is backed by a file, see the documentation for the [`File`] method on a `Page` object. + +[`File`]: /methods/page/file diff --git a/docs/content/en/variables/git.md b/docs/content/en/variables/git.md new file mode 100644 index 000000000..3dc473265 --- /dev/null +++ b/docs/content/en/variables/git.md @@ -0,0 +1,18 @@ +--- +title: Git variables +description: Retrieve Git information related to the last commit of any page. +categories: [variables] +keywords: [] +menu: + docs: + parent: variables + weight: 30 +weight: 30 +aliases: [/extras/gitinfo/] +--- + +{{% include "variables/_common/consistent-terminology.md" %}} + +To retrieve Git information related to the last commit of any page, see the documentation for the [`GitInfo`] method on a `Page` object. + +[`GitInfo`]: /methods/page/gitinfo diff --git a/docs/content/en/variables/menu-entry.md b/docs/content/en/variables/menu-entry.md new file mode 100644 index 000000000..5b90dab6f --- /dev/null +++ b/docs/content/en/variables/menu-entry.md @@ -0,0 +1,16 @@ +--- +title: Menu entry variables +description: Use these methods in your menu templates. +categories: [variables] +keywords: [] +menu: + docs: + parent: variables + weight: 40 +weight: 40 +aliases: [/variables/menus/] +--- + +{{% include "variables/_common/consistent-terminology.md" %}} + +{{< list-pages-in-section path=/methods/menu-entry titlePrefix=. >}} diff --git a/docs/content/en/variables/page.md b/docs/content/en/variables/page.md new file mode 100644 index 000000000..732cf5499 --- /dev/null +++ b/docs/content/en/variables/page.md @@ -0,0 +1,63 @@ +--- +title: Page variables +description: Use these methods with a Page object. +categories: [variables] +keywords: [] +menu: + docs: + parent: variables + weight: 50 +weight: 50 +toc: true +--- + +{{% include "variables/_common/consistent-terminology.md" %}} + +## All methods + +Use any of these methods in your templates. + +{{< list-pages-in-section path=/methods/page titlePrefix=. >}} + +## Dates + +Use these methods to access content dates. + +{{< list-pages-in-section path=/methods/page filter=methods_page_dates filterType=include titlePrefix=. omitElementIDs=true >}} + +## Multilingual + +Use these methods with your multilingual projects. + +{{< list-pages-in-section path=/methods/page filter=methods_page_multilingual filterType=include titlePrefix=. omitElementIDs=true >}} + +## Navigation + +Use these methods to create navigation links between pages. + +{{< list-pages-in-section path=/methods/page filter=methods_page_navigation filterType=include titlePrefix=. omitElementIDs=true >}} + +## Page collections + +Range through these collections when rendering lists on [section] pages, [taxonomy] pages, [term] pages, and the home page. + +[section]: /getting-started/glossary/#section +[taxonomy]: /getting-started/glossary/#taxonomy +[term]: /getting-started/glossary/#term +[context]: /getting-started/glossary/#context + +{{< list-pages-in-section path=/methods/page filter=methods_page_page_collections filterType=include titlePrefix=. omitElementIDs=true >}} + +## Parameters + +Use these methods to access page parameters. + +{{< list-pages-in-section path=/methods/page filter=methods_page_parameters filterType=include titlePrefix=. omitElementIDs=true >}} + +## Sections + +Use these methods to access section pages, and their ancestors and descendants. See [details]. + +[details]: /content-management/sections/ + +{{< list-pages-in-section path=/methods/page filter=methods_page_sections filterType=include titlePrefix=. omitElementIDs=true >}} diff --git a/docs/content/en/variables/pages.md b/docs/content/en/variables/pages.md new file mode 100644 index 000000000..24b8fbbf4 --- /dev/null +++ b/docs/content/en/variables/pages.md @@ -0,0 +1,39 @@ +--- +title: Pages variables +description: Use these methods with a collection of Page objects. +categories: [variables] +keywords: [] +menu: + docs: + parent: variables + weight: 60 +weight: 60 +toc: true +aliases: [/variables/site-variables/] +--- + +{{% include "variables/_common/consistent-terminology.md" %}} + +## All methods + +Use any of these methods with page collections in your templates. + +{{< list-pages-in-section path=/methods/pages titlePrefix=. >}} + +## Sort by + +Use these methods to sort page collections. + +{{< list-pages-in-section path=/methods/pages filter=methods_pages_sort filterType=include titlePrefix=. omitElementIDs=true >}} + +## Group by + +Use these methods to group page collections. + +{{< list-pages-in-section path=/methods/pages filter=methods_pages_group filterType=include titlePrefix=. omitElementIDs=true >}} + +## Navigation + +Use these methods to create navigation links between pages. + +{{< list-pages-in-section path=/methods/pages filter=methods_pages_navigation filterType=include titlePrefix=. omitElementIDs=true >}} diff --git a/docs/content/en/variables/shortcode.md b/docs/content/en/variables/shortcode.md new file mode 100644 index 000000000..57279b5de --- /dev/null +++ b/docs/content/en/variables/shortcode.md @@ -0,0 +1,16 @@ +--- +title: Shortcode variables +description: Use these methods in your shortcode templates. +categories: [variables] +keywords: [] +menu: + docs: + parent: variables + weight: 70 +weight: 70 +aliases: [/variables/shortcodes] +--- + +{{% include "variables/_common/consistent-terminology.md" %}} + +{{< list-pages-in-section path=/methods/shortcode titlePrefix=. >}} diff --git a/docs/content/en/variables/site.md b/docs/content/en/variables/site.md new file mode 100644 index 000000000..532357785 --- /dev/null +++ b/docs/content/en/variables/site.md @@ -0,0 +1,55 @@ +--- +title: Site variables +description: Use these methods with Site objects. A multilingual project will have two or more sites, one for each language. +categories: [variables] +keywords: [] +menu: + docs: + parent: variables + weight: 80 +weight: 80 +toc: true +aliases: [/variables/site-variables/] +--- + +{{% include "variables/_common/consistent-terminology.md" %}} + +## All methods + +Use any of these methods in your templates. + +{{< list-pages-in-section path=/methods/site titlePrefix=.Site. >}} + +## Multilingual + +Use these methods with your multilingual projects. + +{{< list-pages-in-section path=/methods/site filter=methods_site_multilingual filterType=include titlePrefix=.Site. omitElementIDs=true >}} + +[`site`]: /functions/global/site +[context]: /getting-started/glossary/#context +[configuration file]: /getting-started/configuration + +## Page collections + +Range through these collections when rendering lists on any page. + +{{< list-pages-in-section path=/methods/site filter=methods_site_page_collections filterType=include titlePrefix=.Site. omitElementIDs=true >}} + +## Global site function + +Within a partial template, if you did not pass a `Page` or `Site` object in [context], you cannot use this syntax: + +```go-html-template +{{ .Site.SomeMethod }} +``` + +Instead, use the global [`site`] function: + +```go-html-template +{{ site.SomeMethod }} +``` + +{{% note %}} +You can use the global site function in all templates to avoid context problems. Its usage is not limited to partial templates. +{{% /note %}} diff --git a/docs/content/en/variables/taxonomy.md b/docs/content/en/variables/taxonomy.md new file mode 100644 index 000000000..ee6d73b2e --- /dev/null +++ b/docs/content/en/variables/taxonomy.md @@ -0,0 +1,21 @@ +--- +title: Taxonomy variables +description: Use these methods with Taxonomy objects. +categories: [variables] +keywords: [] +menu: + docs: + parent: variables + weight: 90 +weight: 90 +--- + +{{% include "variables/_common/consistent-terminology.md" %}} + +{{< list-pages-in-section path=/methods/taxonomy titlePrefix=. >}} + +{{% note %}} +Within a taxonomy or term template use the [`Data`] method to retrieve information specific to the taxonomy or term. + +[`Data`]: /methods/page/data +{{% /note %}} diff --git a/docs/data/articles.toml b/docs/data/articles.toml new file mode 100644 index 000000000..37b66928f --- /dev/null +++ b/docs/data/articles.toml @@ -0,0 +1,731 @@ +[[article]] + title = "A visit to the Workshop: Hugo/Unix/Vim integration" + url = "https://blog.afoolishmanifesto.com/posts/hugo-unix-vim-integration/" + author = "fREW Schmidt" + date = "2017-07-22" + +[[article]] + title = "Hugo Easy Gallery - Automagical PhotoSwipe image gallery with a one-line shortcode" + url = "https://www.liwen.id.au/heg/" + author = "Li-Wen Yip" + date = "2017-03-25" + +[[article]] + title = "Automagical Image Gallery in Hugo with PhotoSwipe and jQuery" + url = "https://www.liwen.id.au/photoswipe/" + author = "Li-Wen Yip" + date = "2017-03-04" + +[[article]] + title = "Adding Isso Comments to Hugo" + url = "https://stiobhart.net/2017-02-24-isso-comments/" + author = "Stíobhart Matulevicz" + date = "2017-02-24" + +[[article]] + title = "Hugo Tutorial: How to Build & Host a (Very Fast) Static E-Commerce Site" + url = "https://snipcart.com/blog/hugo-tutorial-static-site-ecommerce" + author = "Snipcart" + date = "2017-02-23" + +[[article]] + title = "How to Password Protect a Hugo Site" + url = "https://www.aerobatic.com/blog/password-protect-a-hugo-site/" + author = "Aerobatic" + date = "2017-02-19" + +[[article]] + title = "Switching from WordPress to Hugo" + url = "http://schnuddelhuddel.de/switching-from-wordpress-to-hugo/" + author = "Mario Martelli" + date = "2017-02-19" + +[[article]] + title = "Zero to HTTP/2 with AWS and Hugo" + url = "https://habd.as/zero-to-http-2-aws-hugo/" + author = "Josh Habdas" + date = "2017-02-16" + +[[article]] + title = "Deploy a Hugo site to Aerobatic with CircleCI" + url = "https://www.aerobatic.com/blog/hugo-github-circleci/" + author = "Aerobatic" + date = "2017-02-14" + +[[article]] + title = "NPM scripts for building and deploying Hugo site" + url = "https://www.aerobatic.com/blog/hugo-npm-buildtool-setup/" + author = "Aerobatic" + date = "2017-02-12" + +[[article]] + title = "Getting started with Hugo and the plain-blog theme, on NearlyFreeSpeech.Net" + url = "https://www.penwatch.net/cms/get_started_plain_blog/" + author = "Li-aung “Lewis” Yip" + date = "2017-02-12" + +[[article]] + title = "Choose Hugo over Jekyll" + url = "https://habd.as/choose-hugo-over-jekyll/" + author = "Josh Habdas" + date = "2017-02-10" + +[[article]] + title = "Build a Hugo site using Cloud9 IDE and host on App Engine" + url = "https://loyall.ch/lab/2017/01/build-a-static-website-with-cloud9-hugo-and-app-engine/" + author = "Pascal Aubort" + date = "2017-02-05" + +[[article]] + title = "Hugo Continuous Deployment with Bitbucket Pipelines and Aerobatic" + url = "https://www.aerobatic.com/blog/hugo-bitbucket-pipelines/" + author = "Aerobatic" + date = "2017-02-04" + +[[article]] + title = "How to use Firebase to host a Hugo site" + url = "https://code.selfmadefighter.com/post/static-site-firebase/" + author = "Andrew Cuga" + date= "2017-02-04" + +[[article]] + title = "A publishing workflow for teams using static site generators" + url = "https://www.keybits.net/post/publishing-workflow-for-teams-using-static-site-generators/" + author = "Tom Atkins" + date = "2017-01-02" + +[[article]] + title = "How To Dynamically Use Google Fonts In A Hugo Website" + url = "https://stoned.io/web-development/hugo/How-To-Dynamically-Use-Google-Fonts-In-A-Hugo-Website/" + author = "Hash Borgir" + date = "2016-10-27" + +[[article]] + title = "Embedding Facebook In A Hugo Template" + url = "https://stoned.io/web-development/hugo/Embedding-Facebook-In-A-Hugo-Template/" + author = "Hash Borgir" + date = "2016-10-22" + +[[article]] + title = "通过 Gitlab-cl 将 Hugo blog 自动部署至 GitHub <small>(Chinese, Continuous integration)</small>" + url = "https://zetaoyang.github.io/post/2016/10/17/gitlab-cl.html" + author = "Zetao Yang" + date = "2016-10-17" + +[[article]] + title = "A Step-by-Step Guide: Hugo on Netlify" + url = "https://www.netlify.com/blog/2016/09/21/a-step-by-step-guide-hugo-on-netlify/" + author = "Eli Williamson" + date = "2016-09-21" + +[[article]] + title = "Building our site: From Django & WordPress to a static generator (Part I)" + url = "https://tryolabs.com/blog/2016/09/20/building-our-site-django-wordpress-to-static-part-i/" + author = "Alan Descoins" + date = "2016-09-20" + +[[article]] + title = "Webseitenmaschine - Statische Websites mit Hugo erzeugen <small>(German, $)</small>" + url = "http://www.heise.de/ct/ausgabe/2016-12-Statische-Websites-mit-Hugo-erzeugen-3211704.html" + author = "Christian Helmbold" + date = "2016-05-27" + +[[article]] + title = "Cómo hacer sitios web estáticos con Hugo y Go - Platzi <small>(Video tutorial)</small>" + url = "https://www.youtube.com/watch?v=qaXXpdiCHXE" + author = "Verónica López" + date = "2016-04-06" + +[[article]] + title = "CDNOverview: A CDN comparison site made with Hugo" + url = "https://www.cloakfusion.com/cdnoverview-cdn-comparison-site-made-hugo/" + author = "Thijs de Zoete" + date = "2016-02-23" + +[[article]] + title = "Hugo: A Modern Website Engine That Just Works" + url = "https://github.com/shekhargulati/52-technologies-in-2016/blob/master/07-hugo/README.md" + author = "Shekhar Gulati" + date = "2016-02-14" + +[[article]] + title = "Minify Hugo Generated HTML" + url = "http://ratson.name/blog/minify-hugo-generated-html/" + author = "Ratson" + date = "2016-02-02" + +[[article]] + title = "<span lang='ja'>HugoのデプロイをWerckerからCircle CIに変更した</span> - log" + url = "http://log.deprode.net/logs/2016-01-17/" + author = "Deprode" + date = "2016-01-17" + +[[article]] + title = "Static site generators: el futuro de las webs estáticas<br>(Hugo, Jekyll, Flask y otros)" + url = "http://sitelabs.es/static-site-generators-futuro-las-webs-estaticas/" + author = "Eneko Sarasola" + date = "2016-01-09" + +[[article]] + title = "Writing a Lambda Function for Hugo" + url = "https://blog.jolexa.net/post/writing-a-lambda-function-for-hugo/" + author = "Jeremy Olexa" + date = "2016-01-01" + +[[article]] + title = "Ein Blog mit Hugo erstellen - Tutorial <small>(Deutsch/German)</small>" + url = "http://privat.albicker.org/tags/hugo.html" + author = "Bernhard Albicker" + date = "2015-12-30" + +[[article]] + title = "How to host Hugo static website generator on AWS Lambda" + url = "http://bezdelev.com/post/hugo-aws-lambda-static-website/" + author = "Ilya Bezdelev" + date = "2015-12-15" + +[[article]] + title = "Migrating from Pelican to Hugo" + url = "http://www.softinio.com/post/migrating-from-pelican-to-hugo/" + author = "Salar Rahmanian" + date = "2015-11-29" + +[[article]] + title = "Static Website Generators Reviewed: Jekyll, Middleman, Roots, Hugo" + url = "http://www.smashingmagazine.com/2015/11/static-website-generators-jekyll-middleman-roots-hugo-review/" + author = "Mathias Biilmann Christensen" + date = "2015-11-16" + +[[article]] + title = "How To Deploy a Hugo Site to Production with Git Hooks on Ubuntu 14.04" + url = "https://www.digitalocean.com/community/tutorials/how-to-deploy-a-hugo-site-to-production-with-git-hooks-on-ubuntu-14-04" + author = "Justin Ellingwood" + date = "2015-11-12" + +[[article]] + title = "How To Install and Use Hugo, a Static Site Generator, on Ubuntu 14.04" + url = "https://www.digitalocean.com/community/tutorials/how-to-install-and-use-hugo-a-static-site-generator-on-ubuntu-14-04" + author = "Justin Ellingwood" + date = "2015-11-09" + +[[article]] + title = "Switching from Wordpress to Hugo" + url = "http://justinfx.com/2015/11/08/switching-from-wordpress-to-hugo/" + author = "Justin Israel" + date = "2015-11-08" + +[[article]] + title = "Hands-on Experience with Hugo as a Static Site Generator" + url = "http://usersnap.com/blog/hands-on-experience-with-hugo-static-site-generator/" + author = "Thomas Peham" + date = "2015-10-15" + +[[article]] + title = "Statische Webseites mit Hugo erstellen/Vortrag mit Foliensatz (deutsch)" + url = "http://sfd.koelnerlinuxtreffen.de/2015/HaraldWeidner/" + author = "Harald Weidner" + date = "2015-09-19" + +[[article]] + title = "Moving from WordPress to Hugo" + url = "http://abhipandey.com/2015/09/moving-to-hugo/" + author = "Abhishek Pandey" + date = "2015-09-15" + +[[article]] + title = "<span lang='zh-CN'>通过webhook将Hugo自动部署至GitHub Pages和GitCafe Pages</span> <small>(Automated deployment)</small>" + url = "http://blog.coderzh.com/2015/09/13/use-webhook-automated-deploy-hugo/" + author = "CoderZh" + date = "2015-09-13" + +[[article]] + title = "<span lang='zh-CN'>使用hugo搭建个人博客站点</span> <small>(Using Hugo to build a personal blog site)</small>" + url = "http://blog.coderzh.com/2015/08/29/hugo/" + author = "CoderZh" + date = "2015-08-29" + +[[article]] + title = "Good-Bye Wordpress, Hello Hugo! <small>(German)</small>" + url = "http://blog.arminhanisch.de/2015/08/blog-migration-zu-hugo/" + author = "Armin Hanisch" + date = "2015-08-18" + +[[article]] + title = "Générer votre site web statique avec Hugo <small>(Generate your static site with Hugo)<small>" + url = "http://www.linux-pratique.com/?p=191" + author = "Benoît Benedetti" + date = "2015-06-26" + +[[article]] + title = "<span lang='ja'>Hugo向けの新しいテーマを作った</span> <small>(I created a new theme for Hugo)<small>" + url = "https://yet.unresolved.xyz/blog/2016/10/03/how-to-make-of-hugo-theme/" + author = "Daisuke Tsuji" + date = "2015-06-20" + +[[article]] + title = "Hugo - Gerando um site com conteúdo estático. (Portuguese Brazil)" + url = "http://blog.ffrizzo.com/posts/hugo/" + author = "Fabiano Frizzo" + date = "2015-06-02" + +[[article]] + title = "An Introduction to Static Site Generators" + url = "http://davidwalsh.name/introduction-static-site-generators" + author = "Eduardo Bouças" + date = "2015-05-20" + +[[article]] + title = "Hugo Still Rules" + url = "http://cheekycoder.com/2015/05/hugo-still-rules/" + author = "Cheeky Coder" + date = "2015-05-18" + +[[article]] + title = "hugo - Static Site Generator" + url = "http://gscacco.github.io/post/hugo/" + author = "G Scaccoio" + date = "2015-05-04" + +[[article]] + title = "<span lang='ja'>WindowsでHugoを使う</span>" + url = "http://ureta.net/2015/05/hugo-on-windows/" + author = "<span lang='ja'>うれ太郎</span>" + date = "2015-05-01" + +[[article]] + title = "<span lang='ja'>Hugoのshortcodesを用いてサイトにスライドなどを埋め込む</span>" + url = "http://blog.yucchiy.com/2015/04/29/hugo-shortcode/" + author = "Yucchiy" + date = "2015-04-29" + +[[article]] + title = "<span lang='ja'>HugoとCircleCIでGitHub PagesにBlogを公開してみたら超簡単だった</span>" + url = "http://hori-ryota.github.io/blog/create-blog-with-hugo-and-circleci/" + author = "Hori Ryota" + date = "2015-04-17" + +[[article]] + title = "10 Best Static Site Generators" + url = "http://beebom.com/2015/04/best-static-site-generators" + author = "Aniruddha Mysore" + date = "2015-04-06" + +[[article]] + title = "Goodbye WordPress; Hello Hugo" + url = "http://willwarren.com/2015/04/05/goodbye-wordpress-hello-hugo/" + author = "Will Warren" + date = "2015-04-05" + +[[article]] + title = "Static Websites with Hugo on Google Cloud Storage" + url = "http://www.moxie.io/post/static-websites-with-hugo-on-google-cloud-storage/" + author = "Moxie Input/Output" + date = "2015-04-02" + +[[article]] + title = "De nuevo iniciando un blog" + url = "https://alvarolizama.net/" + author = "Alvaro Lizama" + date = "2015-03-29" + +[[article]] + title = "We moved our blog from Posthaven to Hugo after only three posts. Why?" + url = "http://blog.hypriot.com/post/moved-from-posthaven-to-hugo/" + author = "Hypriot" + date = "2015-03-27" + +[[article]] + title = "Top Static Site Generators in 2015" + url = "http://superdevresources.com/static-site-generators-2015/" + author = "Kanishk Kunal" + date = "2015-03-12" + +[[article]] + title = "Moving to Hugo" + url = "http://abiosoft.com/moving-to-hugo/" + author = "Abiola Ibrahim" + date = "2015-03-08" + +[[article]] + title = "Migrating a blog (yes, this one!) from Wordpress to Hugo" + url = "http://justindunham.net/migrating-from-wordpress-to-hugo/" + author = "Justin Dunham" + date = "2015-02-13" + +[[article]] + title = "<span lang='ja'>blogをoctopressからHugoに乗り換えたメモ</span>" + url = "http://blog.jigyakkuma.org/2015/02/11/hugo/" + author = "jigyakkuma" + date = "2015-02-11" + +[[article]] + title = "<span lang='ja'>Hugoでブログをつくった</span>" + url = "http://porgy13.github.io/post/new-hugo-blog/" + author = "porgy13" + date = "2015-02-07" + +[[article]] + title = "<span lang='ja'>Hugoにブログを移行した</span>" + url = "http://keichi.net/post/first/" + author = "Keichi Takahashi" + date = "2015-02-04" + +[[article]] + title = "<span lang='zh-CN'>Hugo静态网站生成器中文教程</span>" + url = "http://nanshu.wang/post/2015-01-31/" + author = "Nanshu Wang" + date = "2015-01-31" + +[[article]] + title = "<span lang='ja'>Hugo + Github Pages + Wercker CI = ¥0(無料)<br>でコマンド 1 発(自動化)でサイト<br>・ブログを公開・運営・分析・収益化</span>" + url = "http://qiita.com/yoheimuta/items/8a619cac356bed89a4c9" + author = "Yohei Yoshimuta" + date = "2015-01-31" + +[[article]] + title = "Running Hugo websites on anynines" + url = "http://blog.anynines.com/running-hugo-websites-on-anynines/" + author = "Julian Weber" + date = "2015-01-30" + +[[article]] + title = "MiddlemanからHugoへ移行した" + url = "http://re-dzine.net/2015/01/hugo/" + author = "Haruki Konishi" + date = "2015-01-21" + +[[article]] + title = "WordPress から Hugo に乗り換えました" + url = "http://rakuishi.com/archives/wordpress-to-hugo/" + author = "rakuishi" + date = "2015-01-20" + +[[article]] + title = "HUGOを使ってサイトを立ち上げる方法" + url = "http://qiita.com/syui/items/869538099551f24acbbf" + author = "Syui" + date = "2015-01-17" + +[[article]] + title = "<span lang='ja'>Jekyllが許されるのは小学生までだよね</span>" + url = "http://t32k.me/mol/log/hugo/" + author = "Ishimoto Koji" + date = "2015-01-16" + +[[article]] + title = "Getting started with Hugo" + url = "http://anthonyfok.org/post/getting-started-with-hugo/" + author = "Anthony Fok" + date = "2015-01-12" + +[[article]] + title = "<span lang='zh-CN'>把这个博客静态化了</span> <small>(Migrate to Hugo)</small>" + url = "http://lich-eng.com/2015/01/03/migrate-to-hugo/" + author = "Li Cheng" + date = "2015-01-03" + +[[article]] + title = "Porting my blog with Hugo" + url = "http://blog.srackham.com/posts/porting-my-blog-with-hugo/" + author = "Stuart Rackham" + date = "2014-12-30" + +[[article]] + title = "Hugoを使ってみたときのメモ" + url = "http://machortz.github.io/posts/usinghugo/" + author = "Machortz" + date = "2014-12-29" + +[[article]] + title = "OctopressからHugoへ移行した" + url = "http://deeeet.com/writing/2014/12/25/hugo/" + author = "Taichi Nakashima" + date = "2014-12-25" + +[[article]] + title = "Migrating to Hugo From Octopress" + url = "http://nathanleclaire.com/blog/2014/12/22/migrating-to-hugo-from-octopress/" + author = "Nathan LeClaire" + date = "2014-12-22" + +[[article]] + title = "Dynamic Pages with GoHugo.io" + url = "http://cyrillschumacher.com/2014/12/21/dynamic-pages-with-gohugo.io/" + author = "Cyrill Schumacher" + date = "2014-12-21" + +[[article]] + title = "6 Static Blog Generators That Aren’t Jekyll" + url = "http://www.sitepoint.com/6-static-blog-generators-arent-jekyll/" + author = "David Turnbull" + date = "2014-12-08" + +[[article]] + title = "Travel Blogging Setup" + url = "http://www.stou.dk/2014/11/travel-blogging-setup/" + author = "Rasmus Stougaard" + date = "2014-11-23" + +[[article]] + title = "Hosting A Hugo Website Behind Nginx" + url = "http://www.bigbeeconsultants.co.uk/blog/hosting-hugo-website-behind-nginx" + author = "Rick Beton" + date = "2014-11-20" + +[[article]] + title = "<span lang='zh-CN'>使用Hugo搭建免费个人Blog</span> <small>(How to use Hugo)</small>" + url = "http://ulricqin.com/post/how-to-use-hugo/" + author = "Ulric Qin <span lang='zh-CN'>秦晓辉</span>" + date = "2014-11-11" + +[[article]] + title = "Built in Speed and Built for Speed by Hugo" + url = "http://cheekycoder.com/2014/10/built-for-speed-by-hugo/" + author = "Cheeky Coder" + date = "2014-10-30" + +[[article]] + title = "Hugo para crear sitios web estáticos" + url = "http://www.webbizarro.com/noticias/1076/hugo-para-crear-sitios-web-estaticos/" + author = "Web Bizarro" + date = "2014-08-19" + +[[article]] + title = "Going with Hugo" + url = "http://www.markuseliasson.se/article/going-with-hugo/" + author = "Markus Eliasson" + date = "2014-08-18" + +[[article]] + title = "Benchmarking Jekyll, Hugo and Wintersmith" + url = "http://fredrikloch.me/post/2014-08-12-Jekyll-and-its-alternatives-from-a-site-generation-point-of-view/" + author = "Fredrik Loch" + date = "2014-08-12" + +[[article]] + title = "Goodbye Octopress, Hello Hugo!" + url = "http://andreimihu.com/blog/2014/08/11/goodbye-octopress-hello-hugo/" + author = "Andrei Mihu" + date = "2014-08-11" + +[[article]] + title = "Beautiful sites for Open Source Projects" + url = "http://beautifulopen.com/2014/08/09/hugo/" + author = "Beautiful Open" + date = "2014-08-09" + +[[article]] + title = "Hugo: Beyond the Defaults" + url = "http://npf.io/2014/08/hugo-beyond-the-defaults/" + author = "Nate Finch" + date = "2014-08-08" + +[[article]] + title = "First Impressions of Hugo" + url = "https://peteraba.com/blog/first-impressions-of-hugo/" + author = "Peter Aba" + date = "2014-06-06" + +[[article]] + title = "New Site Workflow" + url = "http://vurt.co.uk/post/new_website/" + author = "Giles Paterson" + date = "2014-08-05" + +[[article]] + title = "How I Learned to Stop Worrying and Love the (Static) Web" + url = "http://cognition.ca/post/about-hugo/" + author = "Joshua McKenty" + date = "2014-08-04" + +[[article]] + title = "Hugo - Static Site Generator" + url = "http://kenwoo.io/blog/hugo---static-site-generator/" + author = "Kenny Woo" + date = "2014-08-03" + +[[article]] + title = "Hugo Is Freakin' Awesome" + url = "http://npf.io/2014/08/hugo-is-awesome/" + author = "Nate Finch" + date = "2014-08-01" + +[[article]] + title = "<span lang='zh-CN'>再次搬家</span> <small>(Move from WordPress to Hugo)</small>" + url = "http://www.chingli.com/misc/move-from-wordpress-to-hugo/" + author = "<span lang='zh-CN'>青砾</span> (chingli)" + date = "2014-07-12" + +[[article]] + title = "Embedding Gists in Hugo" + url = "http://danmux.com/posts/embedded_gists/" + author = "Dan Mull" + date = "2014-07-05" + +[[article]] + title = "An Introduction To Hugo" + url = "http://www.cirrushosting.com/web-hosting-blog/an-introduction-to-hugo/" + author = "Dan Silber" + date = "2014-07-01" + +[[article]] + title = "Moving to Hugo" + url = "http://danmux.com/posts/hugo_based_blog/" + author = "Dan Mull" + date = "2014-05-29" + +[[article]] + title = "<span lang='zh-CN'>开源之静态站点生成器排行榜</span><br><small>(Leaderboard of open-source static website generators)</small>" + url = "http://code.csdn.net/news/2819909" + author = "CSDN.net" + date = "2014-05-23" + +[[article]] + title = "Finally, a satisfying and effective blog setup" + url = "http://michaelwhatcott.com/now-powered-by-hugo/" + author = "Michael Whatcott" + date = "2014-05-20" + +[[article]] + title = "Hugo from scratch" + url = "http://zackofalltrades.com/notes/2014/05/hugo-from-scratch/" + author = "Zack Williams" + date = "2014-05-18" + +[[article]] + title = "Why I switched away from Jekyll" + url = "http://www.jakejanuzelli.com/why-I-switched-away-from-jekyll/" + author = "Jake Januzelli" + date = "2014-05-10" + +[[article]] + title = "Welcome our new blog" + url = "http://blog.ninya.io/posts/welcome-our-new-blog/" + author = "Ninya.io" + date = "2014-04-11" + +[[article]] + title = "Mission Not Accomplished" + url = "http://johnsto.co.uk/blog/mission-not-accomplished/" + author = "Dave Johnston" + date = "2014-04-03" + +[[article]] + title = "Hugo - A Static Site Builder in Go" + url = "http://deepfriedcode.com/post/hugo/" + author = "Deep Fried Code" + date = "2014-03-30" + +[[article]] + title = "Adventures in Angular Podcast" + url = "http://devchat.tv/adventures-in-angular/003-aia-gdes" + author = "Matias Niemela" + date = "2014-03-28" + +[[article]] + title = "Hugo" + url = "http://bra.am/post/hugo/" + author = "bra.am" + date = "2014-03-23" + +[[article]] + title = "Converting Blogger To Markdown" + url = "http://trishagee.github.io/project/atom-to-hugo/" + author = "Trisha Gee" + date = "2014-03-20" + +[[article]] + title = "Moving to Hugo Static Web Pages" + url = "http://tepid.org/tech/hugo-web/" + author = "Tobias Weingartner" + date = "2014-03-16" + +[[article]] + title = "New Blog Engine: Hugo" + url = "https://blog.afoolishmanifesto.com/posts/hugo/" + author = "fREW Schmidt" + date = "2014-03-15" + +[[article]] + title = "Hugo + gulp.js = Huggle" + url = "http://ktmud.github.io/huggle/en/intro/)" + author = "Jesse Yang <span lang='zh-CN'>杨建超</span>" + date = "2014-03-08" + +[[article]] + title = "Powered by Hugo" + url = "http://kieranhealy.org/blog/archives/2014/02/24/powered-by-hugo/" + author = "Kieran Healy" + date = "2014-02-24" + +[[article]] + title = "<span lang='ja'>静的サイトを素早く構築するために<br>GoLangで作られたジェネレータHugo</span>" + url = "http://hamasyou.com/blog/2014/02/21/hugo/" + author = "<div lang='ja' style='line-height: 1.1;'>Shogo Hamada<br>濱田章吾</div>" + date = "2014-02-21" + +[[article]] + title = "Latest Roundup of Useful Tools For Developers" + url = "http://codegeekz.com/latest-roundup-of-useful-tools-for-developers/" + author = "CodeGeekz" + date = "2014-02-13" + +[[article]] + title = "Hugo: Static Site Generator written in Go" + url = "http://www.braveterry.com/2014/02/06/hugo-static-site-generator-written-in-go/" + author = "Brave Terry" + date = "2014-02-06" + +[[article]] + title = "10 Useful HTML5 Tools for Web Designers and Developers" + url = "http://designdizzy.com/10-useful-html5-tools-for-web-designers-and-developers/" + author = "Design Dizzy" + date = "2014-02-04" + +[[article]] + title = "Hugo – Fast, Flexible Static Site Generator" + url = "http://cube3x.com/hugo-fast-flexible-static-site-generator/" + author = "Joby Joseph" + date = "2014-01-18" + +[[article]] + title = "Hugo: A new way to build static website" + url = "http://www.w3update.com/opensource/hugo-a-new-way-to-build-static-website.html" + author = "w3update" + date = "2014-01-17" + +[[article]] + title = "Xaprb now uses Hugo" + url = "http://xaprb.com/blog/2014/01/15/using-hugo/" + author = "Baron Schwartz" + date = "2014-01-15" + +[[article]] + title = "New jQuery Plugins And Resources That Web Designers Need" + url = "http://www.designyourway.net/blog/resources/new-jquery-plugins-and-resources-that-web-designers-need/" + author = "Design Your Way" + date = "2014-01-01" + +[[article]] + title = "On Blog Construction" + url = "http://alexla.sh/post/on-blog-construction/" + author = "Alexander Lash" + date = "2013-12-27" + +[[article]] + title = "Hugo" + url = "http://onethingwell.org/post/69070926608/hugo" + author = "One Thing Well" + date = "2013-12-05" + +[[article]] + title = "In Praise Of Hugo" + url = "http://sound-guru.com/blog/post/hello-world/" + author = "sound-guru.com" + date = "2013-10-19" + +[[article]] + title = "Hosting a blog on S3 and Cloudfront" + url = "http://www.danesparza.net/2013/07/hosting-a-blog-on-s3-and-cloudfront/" + author = "Dan Esparza" + date = "2013-07-24" diff --git a/docs/data/docs.yaml b/docs/data/docs.yaml new file mode 100644 index 000000000..04ef2cb26 --- /dev/null +++ b/docs/data/docs.yaml @@ -0,0 +1,4518 @@ +chroma: + lexers: + - Aliases: + - abap + Name: ABAP + - Aliases: + - abnf + Name: ABNF + - Aliases: + - as + - actionscript + Name: ActionScript + - Aliases: + - as3 + - actionscript3 + Name: ActionScript 3 + - Aliases: + - ada + - ada95 + - ada2005 + Name: Ada + - Aliases: + - agda + Name: Agda + - Aliases: + - al + Name: AL + - Aliases: + - alloy + Name: Alloy + - Aliases: + - ng2 + Name: Angular2 + - Aliases: + - antlr + Name: ANTLR + - Aliases: + - apacheconf + - aconf + - apache + Name: ApacheConf + - Aliases: + - apl + Name: APL + - Aliases: + - applescript + Name: AppleScript + - Aliases: + - aql + Name: ArangoDB AQL + - Aliases: + - arduino + Name: Arduino + - Aliases: + - armasm + Name: ArmAsm + - Aliases: + - autohotkey + - ahk + Name: AutoHotkey + - Aliases: + - autoit + Name: AutoIt + - Aliases: + - awk + - gawk + - mawk + - nawk + Name: Awk + - Aliases: + - ballerina + Name: Ballerina + - Aliases: + - bash + - sh + - ksh + - zsh + - shell + Name: Bash + - Aliases: + - bash-session + - console + - shell-session + Name: Bash Session + - Aliases: + - bat + - batch + - dosbatch + - winbatch + Name: Batchfile + - Aliases: + - bib + - bibtex + Name: BibTeX + - Aliases: + - bicep + Name: Bicep + - Aliases: + - blitzbasic + - b3d + - bplus + Name: BlitzBasic + - Aliases: + - bnf + Name: BNF + - Aliases: + - bqn + Name: BQN + - Aliases: + - brainfuck + - bf + Name: Brainfuck + - Aliases: + - c + Name: C + - Aliases: + - csharp + - c# + Name: C# + - Aliases: + - cpp + - c++ + Name: C++ + - Aliases: + - caddyfile + - caddy + Name: Caddyfile + - Aliases: + - caddyfile-directives + - caddyfile-d + - caddy-d + Name: Caddyfile Directives + - Aliases: + - capnp + Name: Cap'n Proto + - Aliases: + - cassandra + - cql + Name: Cassandra CQL + - Aliases: + - ceylon + Name: Ceylon + - Aliases: + - cfengine3 + - cf3 + Name: CFEngine3 + - Aliases: + - cfs + Name: cfstatement + - Aliases: + - chai + - chaiscript + Name: ChaiScript + - Aliases: + - chapel + - chpl + Name: Chapel + - Aliases: + - cheetah + - spitfire + Name: Cheetah + - Aliases: + - clojure + - clj + - edn + Name: Clojure + - Aliases: + - cmake + Name: CMake + - Aliases: + - cobol + Name: COBOL + - Aliases: + - coffee-script + - coffeescript + - coffee + Name: CoffeeScript + - Aliases: + - common-lisp + - cl + - lisp + Name: Common Lisp + - Aliases: + - coq + Name: Coq + - Aliases: + - cr + - crystal + Name: Crystal + - Aliases: + - css + Name: CSS + - Aliases: + - cue + Name: CUE + - Aliases: + - cython + - pyx + - pyrex + Name: Cython + - Aliases: + - d + Name: D + - Aliases: + - dart + Name: Dart + - Aliases: + - dax + Name: Dax + - Aliases: + - diff + - udiff + Name: Diff + - Aliases: + - django + - jinja + Name: Django/Jinja + - Aliases: + - zone + - bind + Name: dns + - Aliases: + - docker + - dockerfile + Name: Docker + - Aliases: + - dtd + Name: DTD + - Aliases: + - dylan + Name: Dylan + - Aliases: + - ebnf + Name: EBNF + - Aliases: + - elixir + - ex + - exs + Name: Elixir + - Aliases: + - elm + Name: Elm + - Aliases: + - emacs + - elisp + - emacs-lisp + Name: EmacsLisp + - Aliases: + - erlang + Name: Erlang + - Aliases: + - factor + Name: Factor + - Aliases: + - fennel + - fnl + Name: Fennel + - Aliases: + - fish + - fishshell + Name: Fish + - Aliases: + - forth + Name: Forth + - Aliases: + - fortran + - f90 + Name: Fortran + - Aliases: + - fortranfixed + Name: FortranFixed + - Aliases: + - fsharp + Name: FSharp + - Aliases: + - gas + - asm + Name: GAS + - Aliases: + - gdscript + - gd + Name: GDScript + - Aliases: + - gdscript3 + - gd3 + Name: GDScript3 + - Aliases: + - genshi + - kid + - xml+genshi + - xml+kid + Name: Genshi + - Aliases: + - html+genshi + - html+kid + Name: Genshi HTML + - Aliases: + - genshitext + Name: Genshi Text + - Aliases: + - cucumber + - Cucumber + - gherkin + - Gherkin + Name: Gherkin + - Aliases: + - glsl + Name: GLSL + - Aliases: + - gnuplot + Name: Gnuplot + - Aliases: + - go + - golang + Name: Go + - Aliases: + - go-html-template + Name: Go HTML Template + - Aliases: + - go-template + Name: Go Template + - Aliases: + - go-text-template + Name: Go Text Template + - Aliases: + - graphql + - graphqls + - gql + Name: GraphQL + - Aliases: + - groff + - nroff + - man + Name: Groff + - Aliases: + - groovy + Name: Groovy + - Aliases: + - handlebars + - hbs + Name: Handlebars + - Aliases: + - hare + Name: Hare + - Aliases: + - haskell + - hs + Name: Haskell + - Aliases: + - hx + - haxe + - hxsl + Name: Haxe + - Aliases: + - hcl + Name: HCL + - Aliases: + - hexdump + Name: Hexdump + - Aliases: + - hlb + Name: HLB + - Aliases: + - hlsl + Name: HLSL + - Aliases: + - holyc + Name: HolyC + - Aliases: + - html + Name: HTML + - Aliases: + - http + Name: HTTP + - Aliases: + - hylang + Name: Hy + - Aliases: + - idris + - idr + Name: Idris + - Aliases: + - igor + - igorpro + Name: Igor + - Aliases: + - ini + - cfg + - dosini + Name: INI + - Aliases: + - io + Name: Io + - Aliases: + - iscdhcpd + Name: ISCdhcpd + - Aliases: + - j + Name: J + - Aliases: + - java + Name: Java + - Aliases: + - js + - javascript + Name: JavaScript + - Aliases: + - json + Name: JSON + - Aliases: + - julia + - jl + Name: Julia + - Aliases: + - jungle + Name: Jungle + - Aliases: + - kotlin + Name: Kotlin + - Aliases: + - lighty + - lighttpd + Name: Lighttpd configuration file + - Aliases: + - llvm + Name: LLVM + - Aliases: + - lua + Name: Lua + - Aliases: + - make + - makefile + - mf + - bsdmake + Name: Makefile + - Aliases: + - mako + Name: Mako + - Aliases: + - md + - mkd + Name: markdown + - Aliases: + - mason + Name: Mason + - Aliases: + - mathematica + - mma + - nb + Name: Mathematica + - Aliases: + - matlab + Name: Matlab + - Aliases: + - mcfunction + Name: mcfunction + - Aliases: + - meson + - meson.build + Name: Meson + - Aliases: + - metal + Name: Metal + - Aliases: + - minizinc + - MZN + - mzn + Name: MiniZinc + - Aliases: + - mlir + Name: MLIR + - Aliases: + - modula2 + - m2 + Name: Modula-2 + - Aliases: + - monkeyc + Name: MonkeyC + - Aliases: + - morrowind + - mwscript + Name: MorrowindScript + - Aliases: + - myghty + Name: Myghty + - Aliases: + - mysql + - mariadb + Name: MySQL + - Aliases: + - nasm + Name: NASM + - Aliases: + - natural + Name: Natural + - Aliases: + - newspeak + Name: Newspeak + - Aliases: + - nginx + Name: Nginx configuration file + - Aliases: + - nim + - nimrod + Name: Nim + - Aliases: + - nixos + - nix + Name: Nix + - Aliases: + - objective-c + - objectivec + - obj-c + - objc + Name: Objective-C + - Aliases: + - objectpascal + Name: ObjectPascal + - Aliases: + - ocaml + Name: OCaml + - Aliases: + - octave + Name: Octave + - Aliases: + - odin + Name: Odin + - Aliases: + - ones + - onesenterprise + - 1S + - 1S:Enterprise + Name: OnesEnterprise + - Aliases: + - openedge + - abl + - progress + - openedgeabl + Name: OpenEdge ABL + - Aliases: + - openscad + Name: OpenSCAD + - Aliases: + - org + - orgmode + Name: Org Mode + - Aliases: + - pacmanconf + Name: PacmanConf + - Aliases: + - perl + - pl + Name: Perl + - Aliases: + - php + - php3 + - php4 + - php5 + Name: PHP + - Aliases: + - phtml + Name: PHTML + - Aliases: + - pig + Name: Pig + - Aliases: + - pkgconfig + Name: PkgConfig + - Aliases: + - plpgsql + Name: PL/pgSQL + - Aliases: + - text + - plain + - no-highlight + Name: plaintext + - Aliases: + - plutus-core + - plc + Name: Plutus Core + - Aliases: + - pony + Name: Pony + - Aliases: + - postgresql + - postgres + Name: PostgreSQL SQL dialect + - Aliases: + - postscript + - postscr + Name: PostScript + - Aliases: + - pov + Name: POVRay + - Aliases: + - powerquery + - pq + Name: PowerQuery + - Aliases: + - powershell + - posh + - ps1 + - psm1 + - psd1 + - pwsh + Name: PowerShell + - Aliases: + - prolog + Name: Prolog + - Aliases: + - promql + Name: PromQL + - Aliases: + - java-properties + Name: properties + - Aliases: + - protobuf + - proto + Name: Protocol Buffer + - Aliases: + - prql + Name: PRQL + - Aliases: + - psl + Name: PSL + - Aliases: + - puppet + Name: Puppet + - Aliases: + - python + - py + - sage + - python3 + - py3 + Name: Python + - Aliases: + - python2 + - py2 + Name: Python 2 + - Aliases: + - qbasic + - basic + Name: QBasic + - Aliases: + - qml + - qbs + Name: QML + - Aliases: + - splus + - s + - r + Name: R + - Aliases: + - racket + - rkt + Name: Racket + - Aliases: + - ragel + Name: Ragel + - Aliases: + - perl6 + - pl6 + - raku + Name: Raku + - Aliases: + - jsx + - react + Name: react + - Aliases: + - reason + - reasonml + Name: ReasonML + - Aliases: + - registry + Name: reg + - Aliases: + - rst + - rest + - restructuredtext + Name: reStructuredText + - Aliases: + - rexx + - arexx + Name: Rexx + - Aliases: + - rb + - ruby + - duby + Name: Ruby + - Aliases: + - rust + - rs + Name: Rust + - Aliases: + - sas + Name: SAS + - Aliases: + - sass + Name: Sass + - Aliases: + - scala + Name: Scala + - Aliases: + - scheme + - scm + Name: Scheme + - Aliases: + - scilab + Name: Scilab + - Aliases: + - scss + Name: SCSS + - Aliases: + - sed + - gsed + - ssed + Name: Sed + - Aliases: + - sieve + Name: Sieve + - Aliases: + - smali + Name: Smali + - Aliases: + - smalltalk + - squeak + - st + Name: Smalltalk + - Aliases: + - smarty + Name: Smarty + - Aliases: + - snobol + Name: Snobol + - Aliases: + - sol + - solidity + Name: Solidity + - Aliases: + - sp + Name: SourcePawn + - Aliases: + - sparql + Name: SPARQL + - Aliases: + - sql + Name: SQL + - Aliases: + - squidconf + - squid.conf + - squid + Name: SquidConf + - Aliases: + - sml + Name: Standard ML + - Aliases: null + Name: stas + - Aliases: + - stylus + Name: Stylus + - Aliases: + - svelte + Name: Svelte + - Aliases: + - swift + Name: Swift + - Aliases: + - systemd + Name: SYSTEMD + - Aliases: + - systemverilog + - sv + Name: systemverilog + - Aliases: + - tablegen + Name: TableGen + - Aliases: + - tal + - uxntal + Name: Tal + - Aliases: + - tasm + Name: TASM + - Aliases: + - tcl + Name: Tcl + - Aliases: + - tcsh + - csh + Name: Tcsh + - Aliases: + - termcap + Name: Termcap + - Aliases: + - terminfo + Name: Terminfo + - Aliases: + - terraform + - tf + Name: Terraform + - Aliases: + - tex + - latex + Name: TeX + - Aliases: + - thrift + Name: Thrift + - Aliases: + - toml + Name: TOML + - Aliases: + - tradingview + - tv + Name: TradingView + - Aliases: + - tsql + - t-sql + Name: Transact-SQL + - Aliases: + - turing + Name: Turing + - Aliases: + - turtle + Name: Turtle + - Aliases: + - twig + Name: Twig + - Aliases: + - ts + - tsx + - typescript + Name: TypeScript + - Aliases: + - typoscript + Name: TypoScript + - Aliases: + - typoscriptcssdata + Name: TypoScriptCssData + - Aliases: + - typoscripthtmldata + Name: TypoScriptHtmlData + - Aliases: null + Name: ucode + - Aliases: + - v + - vlang + Name: V + - Aliases: + - vsh + - vshell + Name: V shell + - Aliases: + - vala + - vapi + Name: Vala + - Aliases: + - vb.net + - vbnet + Name: VB.net + - Aliases: + - verilog + - v + Name: verilog + - Aliases: + - vhdl + Name: VHDL + - Aliases: + - vhs + - tape + - cassette + Name: VHS + - Aliases: + - vim + Name: VimL + - Aliases: + - vue + - vuejs + Name: vue + - Aliases: null + Name: WDTE + - Aliases: + - wgsl + Name: WebGPU Shading Language + - Aliases: + - whiley + Name: Whiley + - Aliases: + - xml + Name: XML + - Aliases: + - xorg.conf + Name: Xorg + - Aliases: + - yaml + Name: YAML + - Aliases: + - yang + Name: YANG + - Aliases: + - z80 + Name: Z80 Assembly + - Aliases: + - zed + Name: Zed + - Aliases: + - zig + Name: Zig +config: + archeTypeDir: archetypes + assetDir: assets + author: {} + baseURL: "" + build: + buildStats: + disableClasses: false + disableIDs: false + disableTags: false + enable: false + cacheBusters: + - source: assets/.*\.(js|ts|jsx|tsx) + target: (js|scripts|javascript) + - source: assets/.*\.(css|sass|scss)$ + target: (css|styles|scss|sass) + - source: (postcss|tailwind)\.config\.js + target: (css|styles|scss|sass) + - source: assets/.*\.(.*)$ + target: $1 + noJSConfigInAssets: false + useResourceCacheWhen: fallback + buildDrafts: false + buildExpired: false + buildFuture: false + cacheDir: "" + caches: + assets: + dir: :resourceDir/_gen + maxAge: -1 + getcsv: + dir: :cacheDir/:project + maxAge: -1 + getjson: + dir: :cacheDir/:project + maxAge: -1 + getresource: + dir: :cacheDir/:project + maxAge: -1 + images: + dir: :resourceDir/_gen + maxAge: -1 + modules: + dir: :cacheDir/modules + maxAge: -1 + canonifyURLs: false + cascade: [] + cleanDestinationDir: false + contentDir: content + copyright: "" + dataDir: data + defaultContentLanguage: en + defaultContentLanguageInSubdir: false + deployment: + confirm: false + dryRun: false + force: false + invalidateCDN: true + matchers: null + maxDeletes: 256 + order: null + target: "" + targets: null + workers: 10 + disableAliases: false + disableHugoGeneratorInject: false + disableKinds: null + disableLanguages: null + disableLiveReload: false + disablePathToLower: false + enableEmoji: false + enableGitInfo: false + enableMissingTranslationPlaceholders: false + enableRobotsTXT: false + environment: production + frontmatter: + date: + - date + - publishdate + - pubdate + - published + - lastmod + - modified + expiryDate: + - expirydate + - unpublishdate + lastmod: + - :git + - lastmod + - modified + - date + - publishdate + - pubdate + - published + publishDate: + - publishdate + - pubdate + - published + - date + hasCJKLanguage: false + i18nDir: i18n + ignoreCache: false + ignoreErrors: null + ignoreFiles: [] + ignoreVendorPaths: "" + imaging: + bgColor: '#ffffff' + hint: photo + quality: 75 + resampleFilter: box + languageCode: "" + languages: + en: + disabled: false + languageCode: "" + languageDirection: "" + languageName: "" + title: "" + weight: 0 + layoutDir: layouts + mainSections: null + markup: + asciidocExt: + attributes: {} + backend: html5 + extensions: [] + failureLevel: fatal + noHeaderOrFooter: true + preserveTOC: false + safeMode: unsafe + sectionNumbers: false + trace: false + verbose: false + workingFolderCurrent: false + defaultMarkdownHandler: goldmark + goldmark: + extensions: + cjk: + eastAsianLineBreaks: false + eastAsianLineBreaksStyle: simple + enable: false + escapedSpace: false + definitionList: true + footnote: true + linkify: true + linkifyProtocol: https + passthrough: + delimiters: + block: [] + inline: [] + enable: false + strikethrough: true + table: true + taskList: true + typographer: + apostrophe: '’' + disable: false + ellipsis: '…' + emDash: '—' + enDash: '–' + leftAngleQuote: '«' + leftDoubleQuote: '“' + leftSingleQuote: '‘' + rightAngleQuote: '»' + rightDoubleQuote: '”' + rightSingleQuote: '’' + parser: + attribute: + block: false + title: true + autoHeadingID: true + autoHeadingIDType: github + wrapStandAloneImageWithinParagraph: true + renderer: + hardWraps: false + unsafe: false + xhtml: false + highlight: + anchorLineNos: false + codeFences: true + guessSyntax: false + hl_Lines: "" + hl_inline: false + lineAnchors: "" + lineNoStart: 1 + lineNos: false + lineNumbersInTable: true + noClasses: true + noHl: false + style: monokai + tabWidth: 4 + tableOfContents: + endLevel: 3 + ordered: false + startLevel: 2 + mediaTypes: + application/json: + delimiter: . + suffixes: + - json + application/manifest+json: + delimiter: . + suffixes: + - webmanifest + application/octet-stream: + delimiter: . + application/pdf: + delimiter: . + suffixes: + - pdf + application/rss+xml: + delimiter: . + suffixes: + - xml + - rss + application/toml: + delimiter: . + suffixes: + - toml + application/wasm: + delimiter: . + suffixes: + - wasm + application/xml: + delimiter: . + suffixes: + - xml + application/yaml: + delimiter: . + suffixes: + - yaml + - yml + font/otf: + delimiter: . + suffixes: + - otf + font/ttf: + delimiter: . + suffixes: + - ttf + image/bmp: + delimiter: . + suffixes: + - bmp + image/gif: + delimiter: . + suffixes: + - gif + image/jpeg: + delimiter: . + suffixes: + - jpg + - jpeg + - jpe + - jif + - jfif + image/png: + delimiter: . + suffixes: + - png + image/svg+xml: + delimiter: . + suffixes: + - svg + image/tiff: + delimiter: . + suffixes: + - tif + - tiff + image/webp: + delimiter: . + suffixes: + - webp + text/calendar: + delimiter: . + suffixes: + - ics + text/css: + delimiter: . + suffixes: + - css + text/csv: + delimiter: . + suffixes: + - csv + text/html: + delimiter: . + suffixes: + - html + text/javascript: + delimiter: . + suffixes: + - js + - jsm + - mjs + text/jsx: + delimiter: . + suffixes: + - jsx + text/markdown: + delimiter: . + suffixes: + - md + - markdown + text/plain: + delimiter: . + suffixes: + - txt + text/tsx: + delimiter: . + suffixes: + - tsx + text/typescript: + delimiter: . + suffixes: + - ts + text/x-sass: + delimiter: . + suffixes: + - sass + text/x-scss: + delimiter: . + suffixes: + - scss + video/3gpp: + delimiter: . + suffixes: + - 3gpp + - 3gp + video/mp4: + delimiter: . + suffixes: + - mp4 + video/mpeg: + delimiter: . + suffixes: + - mpg + - mpeg + video/ogg: + delimiter: . + suffixes: + - ogv + video/webm: + delimiter: . + suffixes: + - webm + video/x-msvideo: + delimiter: . + suffixes: + - avi + menus: {} + minify: + disableCSS: false + disableHTML: false + disableJS: false + disableJSON: false + disableSVG: false + disableXML: false + minifyOutput: false + tdewolff: + css: + keepCSS2: true + precision: 0 + html: + keepComments: false + keepConditionalComments: false + keepDefaultAttrVals: true + keepDocumentTags: true + keepEndTags: true + keepQuotes: false + keepSpecialComments: true + keepWhitespace: false + templateDelims: + - "" + - "" + js: + keepVarNames: false + precision: 0 + version: 2022 + json: + keepNumbers: false + precision: 0 + svg: + keepComments: false + precision: 0 + xml: + keepWhitespace: false + module: + hugoVersion: + extended: false + max: "" + min: "" + imports: null + mounts: + - excludeFiles: null + includeFiles: null + lang: "" + source: content + target: content + - excludeFiles: null + includeFiles: null + lang: "" + source: data + target: data + - excludeFiles: null + includeFiles: null + lang: "" + source: layouts + target: layouts + - excludeFiles: null + includeFiles: null + lang: "" + source: i18n + target: i18n + - excludeFiles: null + includeFiles: null + lang: "" + source: archetypes + target: archetypes + - excludeFiles: null + includeFiles: null + lang: "" + source: assets + target: assets + - excludeFiles: null + includeFiles: null + lang: "" + source: static + target: static + noProxy: none + noVendor: "" + params: null + private: '*.*' + proxy: direct + replacements: null + vendorClosest: false + workspace: "off" + newContentEditor: "" + noBuildLock: false + noChmod: false + noTimes: false + outputFormats: + amp: + baseName: index + isHTML: true + isPlainText: false + mediaType: text/html + name: amp + noUgly: false + notAlternative: false + path: amp + permalinkable: true + protocol: "" + rel: amphtml + weight: 0 + calendar: + baseName: index + isHTML: false + isPlainText: true + mediaType: text/calendar + name: calendar + noUgly: false + notAlternative: false + path: "" + permalinkable: false + protocol: webcal:// + rel: alternate + weight: 0 + css: + baseName: styles + isHTML: false + isPlainText: true + mediaType: text/css + name: css + noUgly: false + notAlternative: true + path: "" + permalinkable: false + protocol: "" + rel: stylesheet + weight: 0 + csv: + baseName: index + isHTML: false + isPlainText: true + mediaType: text/csv + name: csv + noUgly: false + notAlternative: false + path: "" + permalinkable: false + protocol: "" + rel: alternate + weight: 0 + html: + baseName: index + isHTML: true + isPlainText: false + mediaType: text/html + name: html + noUgly: false + notAlternative: false + path: "" + permalinkable: true + protocol: "" + rel: canonical + weight: 10 + json: + baseName: index + isHTML: false + isPlainText: true + mediaType: application/json + name: json + noUgly: false + notAlternative: false + path: "" + permalinkable: false + protocol: "" + rel: alternate + weight: 0 + markdown: + baseName: index + isHTML: false + isPlainText: true + mediaType: text/markdown + name: markdown + noUgly: false + notAlternative: false + path: "" + permalinkable: false + protocol: "" + rel: alternate + weight: 0 + robots: + baseName: robots + isHTML: false + isPlainText: true + mediaType: text/plain + name: robots + noUgly: false + notAlternative: false + path: "" + permalinkable: false + protocol: "" + rel: alternate + weight: 0 + rss: + baseName: index + isHTML: false + isPlainText: false + mediaType: application/rss+xml + name: rss + noUgly: true + notAlternative: false + path: "" + permalinkable: false + protocol: "" + rel: alternate + weight: 0 + sitemap: + baseName: sitemap + isHTML: false + isPlainText: false + mediaType: application/xml + name: sitemap + noUgly: true + notAlternative: false + path: "" + permalinkable: false + protocol: "" + rel: sitemap + weight: 0 + webappmanifest: + baseName: manifest + isHTML: false + isPlainText: true + mediaType: application/manifest+json + name: webappmanifest + noUgly: false + notAlternative: true + path: "" + permalinkable: false + protocol: "" + rel: manifest + weight: 0 + outputs: + home: + - html + - rss + page: + - html + rss: + - rss + section: + - html + - rss + taxonomy: + - html + - rss + term: + - html + - rss + paginate: 10 + paginatePath: page + panicOnWarning: false + params: {} + permalinks: + page: {} + section: {} + taxonomy: {} + term: {} + pluralizeListTitles: true + printI18nWarnings: false + printPathWarnings: false + printUnusedTemplates: false + privacy: + disqus: + disable: false + googleAnalytics: + anonymizeIP: false + disable: false + respectDoNotTrack: false + useSessionStorage: false + instagram: + disable: false + simple: false + twitter: + disable: false + enableDNT: false + simple: false + vimeo: + disable: false + enableDNT: false + simple: false + youTube: + disable: false + privacyEnhanced: false + publishDir: public + refLinksErrorLevel: "" + refLinksNotFoundURL: "" + related: + includeNewer: false + indices: + - applyFilter: false + cardinalityThreshold: 0 + name: keywords + pattern: "" + toLower: false + type: basic + weight: 100 + - applyFilter: false + cardinalityThreshold: 0 + name: date + pattern: "" + toLower: false + type: basic + weight: 10 + - applyFilter: false + cardinalityThreshold: 0 + name: tags + pattern: "" + toLower: false + type: basic + weight: 80 + threshold: 80 + toLower: false + relativeURLs: false + removePathAccents: false + resourceDir: resources + sectionPagesMenu: "" + security: + enableInlineShortcodes: false + exec: + allow: + - ^(dart-)?sass(-embedded)?$ + - ^go$ + - ^npx$ + - ^postcss$ + osEnv: + - (?i)^((HTTPS?|NO)_PROXY|PATH(EXT)?|APPDATA|TE?MP|TERM|GO\w+|(XDG_CONFIG_)?HOME|USERPROFILE|SSH_AUTH_SOCK|DISPLAY|LANG)$ + funcs: + getenv: + - ^HUGO_ + - ^CI$ + http: + mediaTypes: null + methods: + - (?i)GET|POST + urls: + - .* + server: + headers: null + redirects: + - force: false + from: '**' + status: 404 + to: /404.html + services: + disqus: + shortname: "" + googleAnalytics: + id: "" + instagram: + accessToken: "" + disableInlineCSS: false + rss: + limit: -1 + twitter: + disableInlineCSS: false + sitemap: + changeFreq: "" + filename: sitemap.xml + priority: -1 + social: null + staticDir: + - static + staticDir0: null + staticDir1: null + staticDir2: null + staticDir3: null + staticDir4: null + staticDir5: null + staticDir6: null + staticDir7: null + staticDir8: null + staticDir9: null + staticDir10: null + summaryLength: 70 + taxonomies: + category: categories + tag: tags + templateMetrics: false + templateMetricsHints: false + theme: null + themesDir: themes + timeZone: "" + timeout: 30s + title: "" + titleCaseStyle: AP + uglyURLs: false + workingDir: "" +config_helpers: + mergeStrategy: + build: + _merge: none + caches: + _merge: none + cascade: + _merge: none + deployment: + _merge: none + frontmatter: + _merge: none + imaging: + _merge: none + languages: + _merge: none + en: + _merge: none + menus: + _merge: shallow + params: + _merge: deep + markup: + _merge: none + mediatypes: + _merge: shallow + menus: + _merge: shallow + minify: + _merge: none + module: + _merge: none + outputformats: + _merge: shallow + outputs: + _merge: none + params: + _merge: deep + permalinks: + _merge: none + privacy: + _merge: none + related: + _merge: none + security: + _merge: none + server: + _merge: none + services: + _merge: none + sitemap: + _merge: none + taxonomies: + _merge: none +output: + layouts: + - Example: Single page in "posts" section + Kind: page + OutputFormat: html + Suffix: html + Template Lookup Order: + - layouts/posts/single.html.html + - layouts/posts/single.html + - layouts/_default/single.html.html + - layouts/_default/single.html + - Example: Base template for single page in "posts" section + Kind: page + OutputFormat: html + Suffix: html + Template Lookup Order: + - layouts/posts/single-baseof.html.html + - layouts/posts/baseof.html.html + - layouts/posts/single-baseof.html + - layouts/posts/baseof.html + - layouts/_default/single-baseof.html.html + - layouts/_default/baseof.html.html + - layouts/_default/single-baseof.html + - layouts/_default/baseof.html + - Example: Single page in "posts" section with layout set to "demolayout" + Kind: page + OutputFormat: html + Suffix: html + Template Lookup Order: + - layouts/posts/demolayout.html.html + - layouts/posts/single.html.html + - layouts/posts/demolayout.html + - layouts/posts/single.html + - layouts/_default/demolayout.html.html + - layouts/_default/single.html.html + - layouts/_default/demolayout.html + - layouts/_default/single.html + - Example: Base template for single page in "posts" section with layout set to "demolayout" + Kind: page + OutputFormat: html + Suffix: html + Template Lookup Order: + - layouts/posts/demolayout-baseof.html.html + - layouts/posts/single-baseof.html.html + - layouts/posts/baseof.html.html + - layouts/posts/demolayout-baseof.html + - layouts/posts/single-baseof.html + - layouts/posts/baseof.html + - layouts/_default/demolayout-baseof.html.html + - layouts/_default/single-baseof.html.html + - layouts/_default/baseof.html.html + - layouts/_default/demolayout-baseof.html + - layouts/_default/single-baseof.html + - layouts/_default/baseof.html + - Example: AMP single page + Kind: page + OutputFormat: amp + Suffix: html + Template Lookup Order: + - layouts/posts/single.amp.html + - layouts/posts/single.html + - layouts/_default/single.amp.html + - layouts/_default/single.html + - Example: AMP single page, French language + Kind: page + OutputFormat: html + Suffix: html + Template Lookup Order: + - layouts/posts/single.fr.html.html + - layouts/posts/single.html.html + - layouts/posts/single.fr.html + - layouts/posts/single.html + - layouts/_default/single.fr.html.html + - layouts/_default/single.html.html + - layouts/_default/single.fr.html + - layouts/_default/single.html + - Example: Home page + Kind: home + OutputFormat: html + Suffix: html + Template Lookup Order: + - layouts/index.html.html + - layouts/home.html.html + - layouts/list.html.html + - layouts/index.html + - layouts/home.html + - layouts/list.html + - layouts/_default/index.html.html + - layouts/_default/home.html.html + - layouts/_default/list.html.html + - layouts/_default/index.html + - layouts/_default/home.html + - layouts/_default/list.html + - Example: Base template for home page + Kind: home + OutputFormat: html + Suffix: html + Template Lookup Order: + - layouts/index-baseof.html.html + - layouts/home-baseof.html.html + - layouts/list-baseof.html.html + - layouts/baseof.html.html + - layouts/index-baseof.html + - layouts/home-baseof.html + - layouts/list-baseof.html + - layouts/baseof.html + - layouts/_default/index-baseof.html.html + - layouts/_default/home-baseof.html.html + - layouts/_default/list-baseof.html.html + - layouts/_default/baseof.html.html + - layouts/_default/index-baseof.html + - layouts/_default/home-baseof.html + - layouts/_default/list-baseof.html + - layouts/_default/baseof.html + - Example: Home page with type set to "demotype" + Kind: home + OutputFormat: html + Suffix: html + Template Lookup Order: + - layouts/demotype/index.html.html + - layouts/demotype/home.html.html + - layouts/demotype/list.html.html + - layouts/demotype/index.html + - layouts/demotype/home.html + - layouts/demotype/list.html + - layouts/index.html.html + - layouts/home.html.html + - layouts/list.html.html + - layouts/index.html + - layouts/home.html + - layouts/list.html + - layouts/_default/index.html.html + - layouts/_default/home.html.html + - layouts/_default/list.html.html + - layouts/_default/index.html + - layouts/_default/home.html + - layouts/_default/list.html + - Example: Base template for home page with type set to "demotype" + Kind: home + OutputFormat: html + Suffix: html + Template Lookup Order: + - layouts/demotype/index-baseof.html.html + - layouts/demotype/home-baseof.html.html + - layouts/demotype/list-baseof.html.html + - layouts/demotype/baseof.html.html + - layouts/demotype/index-baseof.html + - layouts/demotype/home-baseof.html + - layouts/demotype/list-baseof.html + - layouts/demotype/baseof.html + - layouts/index-baseof.html.html + - layouts/home-baseof.html.html + - layouts/list-baseof.html.html + - layouts/baseof.html.html + - layouts/index-baseof.html + - layouts/home-baseof.html + - layouts/list-baseof.html + - layouts/baseof.html + - layouts/_default/index-baseof.html.html + - layouts/_default/home-baseof.html.html + - layouts/_default/list-baseof.html.html + - layouts/_default/baseof.html.html + - layouts/_default/index-baseof.html + - layouts/_default/home-baseof.html + - layouts/_default/list-baseof.html + - layouts/_default/baseof.html + - Example: Home page with layout set to "demolayout" + Kind: home + OutputFormat: html + Suffix: html + Template Lookup Order: + - layouts/demolayout.html.html + - layouts/index.html.html + - layouts/home.html.html + - layouts/list.html.html + - layouts/demolayout.html + - layouts/index.html + - layouts/home.html + - layouts/list.html + - layouts/_default/demolayout.html.html + - layouts/_default/index.html.html + - layouts/_default/home.html.html + - layouts/_default/list.html.html + - layouts/_default/demolayout.html + - layouts/_default/index.html + - layouts/_default/home.html + - layouts/_default/list.html + - Example: AMP home, French language + Kind: home + OutputFormat: amp + Suffix: html + Template Lookup Order: + - layouts/index.fr.amp.html + - layouts/home.fr.amp.html + - layouts/list.fr.amp.html + - layouts/index.amp.html + - layouts/home.amp.html + - layouts/list.amp.html + - layouts/index.fr.html + - layouts/home.fr.html + - layouts/list.fr.html + - layouts/index.html + - layouts/home.html + - layouts/list.html + - layouts/_default/index.fr.amp.html + - layouts/_default/home.fr.amp.html + - layouts/_default/list.fr.amp.html + - layouts/_default/index.amp.html + - layouts/_default/home.amp.html + - layouts/_default/list.amp.html + - layouts/_default/index.fr.html + - layouts/_default/home.fr.html + - layouts/_default/list.fr.html + - layouts/_default/index.html + - layouts/_default/home.html + - layouts/_default/list.html + - Example: JSON home + Kind: home + OutputFormat: json + Suffix: json + Template Lookup Order: + - layouts/index.json.json + - layouts/home.json.json + - layouts/list.json.json + - layouts/index.json + - layouts/home.json + - layouts/list.json + - layouts/_default/index.json.json + - layouts/_default/home.json.json + - layouts/_default/list.json.json + - layouts/_default/index.json + - layouts/_default/home.json + - layouts/_default/list.json + - Example: RSS home + Kind: home + OutputFormat: rss + Suffix: xml + Template Lookup Order: + - layouts/index.rss.xml + - layouts/home.rss.xml + - layouts/rss.xml + - layouts/list.rss.xml + - layouts/index.xml + - layouts/home.xml + - layouts/list.xml + - layouts/_default/index.rss.xml + - layouts/_default/home.rss.xml + - layouts/_default/rss.xml + - layouts/_default/list.rss.xml + - layouts/_default/index.xml + - layouts/_default/home.xml + - layouts/_default/list.xml + - layouts/_internal/_default/rss.xml + - Example: Section list for "posts" + Kind: section + OutputFormat: html + Suffix: html + Template Lookup Order: + - layouts/posts/posts.html.html + - layouts/posts/section.html.html + - layouts/posts/list.html.html + - layouts/posts/posts.html + - layouts/posts/section.html + - layouts/posts/list.html + - layouts/section/posts.html.html + - layouts/section/section.html.html + - layouts/section/list.html.html + - layouts/section/posts.html + - layouts/section/section.html + - layouts/section/list.html + - layouts/_default/posts.html.html + - layouts/_default/section.html.html + - layouts/_default/list.html.html + - layouts/_default/posts.html + - layouts/_default/section.html + - layouts/_default/list.html + - Example: Section list for "posts" with type set to "blog" + Kind: section + OutputFormat: html + Suffix: html + Template Lookup Order: + - layouts/blog/posts.html.html + - layouts/blog/section.html.html + - layouts/blog/list.html.html + - layouts/blog/posts.html + - layouts/blog/section.html + - layouts/blog/list.html + - layouts/posts/posts.html.html + - layouts/posts/section.html.html + - layouts/posts/list.html.html + - layouts/posts/posts.html + - layouts/posts/section.html + - layouts/posts/list.html + - layouts/section/posts.html.html + - layouts/section/section.html.html + - layouts/section/list.html.html + - layouts/section/posts.html + - layouts/section/section.html + - layouts/section/list.html + - layouts/_default/posts.html.html + - layouts/_default/section.html.html + - layouts/_default/list.html.html + - layouts/_default/posts.html + - layouts/_default/section.html + - layouts/_default/list.html + - Example: Section list for "posts" with layout set to "demolayout" + Kind: section + OutputFormat: html + Suffix: html + Template Lookup Order: + - layouts/posts/demolayout.html.html + - layouts/posts/posts.html.html + - layouts/posts/section.html.html + - layouts/posts/list.html.html + - layouts/posts/demolayout.html + - layouts/posts/posts.html + - layouts/posts/section.html + - layouts/posts/list.html + - layouts/section/demolayout.html.html + - layouts/section/posts.html.html + - layouts/section/section.html.html + - layouts/section/list.html.html + - layouts/section/demolayout.html + - layouts/section/posts.html + - layouts/section/section.html + - layouts/section/list.html + - layouts/_default/demolayout.html.html + - layouts/_default/posts.html.html + - layouts/_default/section.html.html + - layouts/_default/list.html.html + - layouts/_default/demolayout.html + - layouts/_default/posts.html + - layouts/_default/section.html + - layouts/_default/list.html + - Example: Section list for "posts" + Kind: section + OutputFormat: rss + Suffix: xml + Template Lookup Order: + - layouts/posts/section.rss.xml + - layouts/posts/rss.xml + - layouts/posts/list.rss.xml + - layouts/posts/section.xml + - layouts/posts/list.xml + - layouts/section/section.rss.xml + - layouts/section/rss.xml + - layouts/section/list.rss.xml + - layouts/section/section.xml + - layouts/section/list.xml + - layouts/_default/section.rss.xml + - layouts/_default/rss.xml + - layouts/_default/list.rss.xml + - layouts/_default/section.xml + - layouts/_default/list.xml + - layouts/_internal/_default/rss.xml + - Example: Taxonomy list for "categories" + Kind: taxonomy + OutputFormat: html + Suffix: html + Template Lookup Order: + - layouts/categories/category.terms.html.html + - layouts/categories/terms.html.html + - layouts/categories/taxonomy.html.html + - layouts/categories/list.html.html + - layouts/categories/category.terms.html + - layouts/categories/terms.html + - layouts/categories/taxonomy.html + - layouts/categories/list.html + - layouts/category/category.terms.html.html + - layouts/category/terms.html.html + - layouts/category/taxonomy.html.html + - layouts/category/list.html.html + - layouts/category/category.terms.html + - layouts/category/terms.html + - layouts/category/taxonomy.html + - layouts/category/list.html + - layouts/taxonomy/category.terms.html.html + - layouts/taxonomy/terms.html.html + - layouts/taxonomy/taxonomy.html.html + - layouts/taxonomy/list.html.html + - layouts/taxonomy/category.terms.html + - layouts/taxonomy/terms.html + - layouts/taxonomy/taxonomy.html + - layouts/taxonomy/list.html + - layouts/_default/category.terms.html.html + - layouts/_default/terms.html.html + - layouts/_default/taxonomy.html.html + - layouts/_default/list.html.html + - layouts/_default/category.terms.html + - layouts/_default/terms.html + - layouts/_default/taxonomy.html + - layouts/_default/list.html + - Example: Taxonomy list for "categories" + Kind: taxonomy + OutputFormat: rss + Suffix: xml + Template Lookup Order: + - layouts/categories/category.terms.rss.xml + - layouts/categories/terms.rss.xml + - layouts/categories/taxonomy.rss.xml + - layouts/categories/rss.xml + - layouts/categories/list.rss.xml + - layouts/categories/category.terms.xml + - layouts/categories/terms.xml + - layouts/categories/taxonomy.xml + - layouts/categories/list.xml + - layouts/category/category.terms.rss.xml + - layouts/category/terms.rss.xml + - layouts/category/taxonomy.rss.xml + - layouts/category/rss.xml + - layouts/category/list.rss.xml + - layouts/category/category.terms.xml + - layouts/category/terms.xml + - layouts/category/taxonomy.xml + - layouts/category/list.xml + - layouts/taxonomy/category.terms.rss.xml + - layouts/taxonomy/terms.rss.xml + - layouts/taxonomy/taxonomy.rss.xml + - layouts/taxonomy/rss.xml + - layouts/taxonomy/list.rss.xml + - layouts/taxonomy/category.terms.xml + - layouts/taxonomy/terms.xml + - layouts/taxonomy/taxonomy.xml + - layouts/taxonomy/list.xml + - layouts/_default/category.terms.rss.xml + - layouts/_default/terms.rss.xml + - layouts/_default/taxonomy.rss.xml + - layouts/_default/rss.xml + - layouts/_default/list.rss.xml + - layouts/_default/category.terms.xml + - layouts/_default/terms.xml + - layouts/_default/taxonomy.xml + - layouts/_default/list.xml + - layouts/_internal/_default/rss.xml + - Example: Term list for "categories" + Kind: term + OutputFormat: html + Suffix: html + Template Lookup Order: + - layouts/categories/term.html.html + - layouts/categories/category.html.html + - layouts/categories/taxonomy.html.html + - layouts/categories/list.html.html + - layouts/categories/term.html + - layouts/categories/category.html + - layouts/categories/taxonomy.html + - layouts/categories/list.html + - layouts/term/term.html.html + - layouts/term/category.html.html + - layouts/term/taxonomy.html.html + - layouts/term/list.html.html + - layouts/term/term.html + - layouts/term/category.html + - layouts/term/taxonomy.html + - layouts/term/list.html + - layouts/taxonomy/term.html.html + - layouts/taxonomy/category.html.html + - layouts/taxonomy/taxonomy.html.html + - layouts/taxonomy/list.html.html + - layouts/taxonomy/term.html + - layouts/taxonomy/category.html + - layouts/taxonomy/taxonomy.html + - layouts/taxonomy/list.html + - layouts/category/term.html.html + - layouts/category/category.html.html + - layouts/category/taxonomy.html.html + - layouts/category/list.html.html + - layouts/category/term.html + - layouts/category/category.html + - layouts/category/taxonomy.html + - layouts/category/list.html + - layouts/_default/term.html.html + - layouts/_default/category.html.html + - layouts/_default/taxonomy.html.html + - layouts/_default/list.html.html + - layouts/_default/term.html + - layouts/_default/category.html + - layouts/_default/taxonomy.html + - layouts/_default/list.html + - Example: Term list for "categories" + Kind: term + OutputFormat: rss + Suffix: xml + Template Lookup Order: + - layouts/categories/term.rss.xml + - layouts/categories/category.rss.xml + - layouts/categories/taxonomy.rss.xml + - layouts/categories/rss.xml + - layouts/categories/list.rss.xml + - layouts/categories/term.xml + - layouts/categories/category.xml + - layouts/categories/taxonomy.xml + - layouts/categories/list.xml + - layouts/term/term.rss.xml + - layouts/term/category.rss.xml + - layouts/term/taxonomy.rss.xml + - layouts/term/rss.xml + - layouts/term/list.rss.xml + - layouts/term/term.xml + - layouts/term/category.xml + - layouts/term/taxonomy.xml + - layouts/term/list.xml + - layouts/taxonomy/term.rss.xml + - layouts/taxonomy/category.rss.xml + - layouts/taxonomy/taxonomy.rss.xml + - layouts/taxonomy/rss.xml + - layouts/taxonomy/list.rss.xml + - layouts/taxonomy/term.xml + - layouts/taxonomy/category.xml + - layouts/taxonomy/taxonomy.xml + - layouts/taxonomy/list.xml + - layouts/category/term.rss.xml + - layouts/category/category.rss.xml + - layouts/category/taxonomy.rss.xml + - layouts/category/rss.xml + - layouts/category/list.rss.xml + - layouts/category/term.xml + - layouts/category/category.xml + - layouts/category/taxonomy.xml + - layouts/category/list.xml + - layouts/_default/term.rss.xml + - layouts/_default/category.rss.xml + - layouts/_default/taxonomy.rss.xml + - layouts/_default/rss.xml + - layouts/_default/list.rss.xml + - layouts/_default/term.xml + - layouts/_default/category.xml + - layouts/_default/taxonomy.xml + - layouts/_default/list.xml + - layouts/_internal/_default/rss.xml +tpl: + funcs: + cast: + ToFloat: + Aliases: + - float + Args: + - v + Description: ToFloat converts v to a float. + Examples: + - - '{{ "1234" | float | printf "%T" }}' + - float64 + ToInt: + Aliases: + - int + Args: + - v + Description: ToInt converts v to an int. + Examples: + - - '{{ "1234" | int | printf "%T" }}' + - int + ToString: + Aliases: + - string + Args: + - v + Description: ToString converts v to a string. + Examples: + - - '{{ 1234 | string | printf "%T" }}' + - string + collections: + After: + Aliases: + - after + Args: + - "n" + - l + Description: After returns all the items after the first n items in list l. + Examples: [] + Append: + Aliases: + - append + Args: + - args + Description: "Append appends args up to the last one to the slice in the last + argument.\nThis construct allows template constructs like this:\n\n\t{{ + $pages = $pages | append $p2 $p1 }}\n\nNote that with 2 arguments where + both are slices of the same type,\nthe first slice will be appended to the + second:\n\n\t{{ $pages = $pages | append .Site.RegularPages }}" + Examples: [] + Apply: + Aliases: + - apply + Args: + - ctx + - c + - fname + - args + Description: Apply takes an array or slice c and returns a new slice with + the function fname applied over it. + Examples: [] + Complement: + Aliases: + - complement + Args: + - ls + Description: "Complement gives the elements in the last element of ls that + are not in\nany of the others.\n\nAll elements of ls must be slices or arrays + of comparable types.\n\nThe reasoning behind this rather clumsy API is so + we can do this in the templates:\n\n\t{{ $c := .Pages | complement $last4 + }}" + Examples: + - - '{{ slice "a" "b" "c" "d" "e" "f" | complement (slice "b" "c") (slice + "d" "e") }}' + - '[a f]' + Delimit: + Aliases: + - delimit + Args: + - ctx + - l + - sep + - last + Description: |- + Delimit takes a given list l and returns a string delimited by sep. + If last is passed to the function, it will be used as the final delimiter. + Examples: + - - '{{ delimit (slice "A" "B" "C") ", " " and " }}' + - A, B and C + Dictionary: + Aliases: + - dict + Args: + - values + Description: |- + Dictionary creates a new map from the given parameters by + treating values as key-value pairs. The number of values must be even. + The keys can be string slices, which will create the needed nested structure. + Examples: [] + EchoParam: + Aliases: + - echoParam + Args: + - c + - k + Description: |- + EchoParam returns the value in the collection c with key k if is set; otherwise, it returns an + empty string. + Deprecated: Use the index function instead. + Examples: + - - '{{ echoParam .Params "langCode" }}' + - en + First: + Aliases: + - first + Args: + - limit + - l + Description: First returns the first limit items in list l. + Examples: [] + Group: + Aliases: + - group + Args: + - key + - items + Description: |- + Group groups a set of items by the given key. + This is currently only supported for Pages. + Examples: [] + In: + Aliases: + - in + Args: + - l + - v + Description: In returns whether v is in the list l. l may be an array or + slice. + Examples: + - - '{{ if in "this string contains a substring" "substring" }}Substring found!{{ + end }}' + - Substring found! + Index: + Aliases: + - index + Args: + - item + - args + Description: |- + Index returns the result of indexing its first argument by the following + arguments. Thus "index x 1 2 3" is, in Go syntax, x[1][2][3]. Each + indexed item must be a map, slice, or array. + + Adapted from Go stdlib src/text/template/funcs.go. + + We deviate from the stdlib mostly because of https://github.com/golang/go/issues/14751. + Examples: [] + Intersect: + Aliases: + - intersect + Args: + - l1 + - l2 + Description: |- + Intersect returns the common elements in the given sets, l1 and l2. l1 and + l2 must be of the same type and may be either arrays or slices. + Examples: [] + IsSet: + Aliases: + - isSet + - isset + Args: + - c + - key + Description: |- + IsSet returns whether a given array, channel, slice, or map in c has the given key + defined. + Examples: [] + KeyVals: + Aliases: + - keyVals + Args: + - key + - values + Description: KeyVals creates a key and values wrapper. + Examples: + - - '{{ keyVals "key" "a" "b" }}' + - 'key: [a b]' + Last: + Aliases: + - last + Args: + - limit + - l + Description: Last returns the last limit items in the list l. + Examples: [] + Merge: + Aliases: + - merge + Args: + - params + Description: |- + Merge creates a copy of the final parameter in params and merges the preceding + parameters into it in reverse order. + + Currently only maps are supported. Key handling is case insensitive. + Examples: + - - '{{ dict "title" "Hugo Rocks!" | collections.Merge (dict "title" "Default + Title" "description" "Yes, Hugo Rocks!") | sort }}' + - '[Yes, Hugo Rocks! Hugo Rocks!]' + - - '{{ merge (dict "title" "Default Title" "description" "Yes, Hugo Rocks!") + (dict "title" "Hugo Rocks!") | sort }}' + - '[Yes, Hugo Rocks! Hugo Rocks!]' + - - '{{ merge (dict "title" "Default Title" "description" "Yes, Hugo Rocks!") + (dict "title" "Hugo Rocks!") (dict "extra" "For reals!") | sort }}' + - '[Yes, Hugo Rocks! For reals! Hugo Rocks!]' + NewScratch: + Aliases: + - newScratch + Args: null + Description: |- + NewScratch creates a new Scratch which can be used to store values in a + thread safe way. + Examples: + - - '{{ $scratch := newScratch }}{{ $scratch.Add "b" 2 }}{{ $scratch.Add "b" + 2 }}{{ $scratch.Get "b" }}' + - "4" + Querify: + Aliases: + - querify + Args: + - params + Description: Querify encodes the given params in URL-encoded form ("bar=baz&foo=quux") + sorted by key. + Examples: + - - '{{ (querify "foo" 1 "bar" 2 "baz" "with spaces" "qux" "this&that=those") + | safeHTML }}' + - bar=2&baz=with+spaces&foo=1&qux=this%26that%3Dthose + - - <a href="https://www.google.com?{{ (querify "q" "test" "page" 3) | safeURL + }}">Search</a> + - <a href="https://www.google.com?page=3&q=test">Search</a> + - - '{{ slice "foo" 1 "bar" 2 | querify | safeHTML }}' + - bar=2&foo=1 + Reverse: + Aliases: null + Args: null + Description: "" + Examples: null + Seq: + Aliases: + - seq + Args: + - args + Description: "Seq creates a sequence of integers from args. It's named and + used as GNU's seq.\n\nExamples:\n\n\t3 => 1, 2, 3\n\t1 2 4 => 1, 3\n\t-3 + => -1, -2, -3\n\t1 4 => 1, 2, 3, 4\n\t1 -2 => 1, 0, -1, -2" + Examples: + - - '{{ seq 3 }}' + - '[1 2 3]' + Shuffle: + Aliases: + - shuffle + Args: + - l + Description: Shuffle returns list l in a randomised order. + Examples: [] + Slice: + Aliases: + - slice + Args: + - args + Description: Slice returns a slice of all passed arguments. + Examples: + - - '{{ slice "B" "C" "A" | sort }}' + - '[A B C]' + Sort: + Aliases: + - sort + Args: + - ctx + - l + - args + Description: Sort returns a sorted copy of the list l. + Examples: [] + SymDiff: + Aliases: + - symdiff + Args: + - s2 + - s1 + Description: |- + SymDiff returns the symmetric difference of s1 and s2. + Arguments must be either a slice or an array of comparable types. + Examples: + - - '{{ slice 1 2 3 | symdiff (slice 3 4) }}' + - '[1 2 4]' + Union: + Aliases: + - union + Args: + - l1 + - l2 + Description: |- + Union returns the union of the given sets, l1 and l2. l1 and + l2 must be of the same type and may be either arrays or slices. + If l1 and l2 aren't of the same type then l1 will be returned. + If either l1 or l2 is nil then the non-nil list will be returned. + Examples: + - - '{{ union (slice 1 2 3) (slice 3 4 5) }}' + - '[1 2 3 4 5]' + Uniq: + Aliases: + - uniq + Args: + - l + Description: Uniq returns a new list with duplicate elements in the list l + removed. + Examples: + - - '{{ slice 1 2 3 2 | uniq }}' + - '[1 2 3]' + Where: + Aliases: + - where + Args: + - ctx + - c + - key + - args + Description: Where returns a filtered subset of collection c. + Examples: [] + compare: + Conditional: + Aliases: + - cond + Args: + - cond + - v1 + - v2 + Description: |- + Conditional can be used as a ternary operator. + + It returns v1 if cond is true, else v2. + Examples: + - - '{{ cond (eq (add 2 2) 4) "2+2 is 4" "what?" | safeHTML }}' + - 2+2 is 4 + Default: + Aliases: + - default + Args: + - defaultv + - givenv + Description: |- + Default checks whether a givenv is set and returns the default value defaultv if it + is not. "Set" in this context means non-zero for numeric types and times; + non-zero length for strings, arrays, slices, and maps; + any boolean or struct value; or non-nil for any other types. + Examples: + - - '{{ "Hugo Rocks!" | default "Hugo Rules!" }}' + - Hugo Rocks! + - - '{{ "" | default "Hugo Rules!" }}' + - Hugo Rules! + Eq: + Aliases: + - eq + Args: + - first + - others + Description: Eq returns the boolean truth of arg1 == arg2 || arg1 == arg3 + || arg1 == arg4. + Examples: + - - '{{ if eq .Section "blog" }}current-section{{ end }}' + - current-section + Ge: + Aliases: + - ge + Args: + - first + - others + Description: Ge returns the boolean truth of arg1 >= arg2 && arg1 >= arg3 + && arg1 >= arg4. + Examples: + - - '{{ if ge hugo.Version "0.80" }}Reasonable new Hugo version!{{ end }}' + - Reasonable new Hugo version! + Gt: + Aliases: + - gt + Args: + - first + - others + Description: Gt returns the boolean truth of arg1 > arg2 && arg1 > arg3 && + arg1 > arg4. + Examples: [] + Le: + Aliases: + - le + Args: + - first + - others + Description: Le returns the boolean truth of arg1 <= arg2 && arg1 <= arg3 + && arg1 <= arg4. + Examples: [] + Lt: + Aliases: + - lt + Args: + - first + - others + Description: Lt returns the boolean truth of arg1 < arg2 && arg1 < arg3 && + arg1 < arg4. + Examples: [] + LtCollate: + Aliases: null + Args: null + Description: "" + Examples: null + Ne: + Aliases: + - ne + Args: + - first + - others + Description: Ne returns the boolean truth of arg1 != arg2 && arg1 != arg3 + && arg1 != arg4. + Examples: [] + crypto: + FNV32a: + Aliases: null + Args: + - v + Description: |- + FNV32a hashes v using fnv32a algorithm. + <docsmeta>{"newIn": "0.98.0" }</docsmeta> + Examples: + - - '{{ crypto.FNV32a "Hugo Rocks!!" }}' + - "1515779328" + HMAC: + Aliases: + - hmac + Args: + - h + - k + - m + - e + Description: HMAC returns a cryptographic hash that uses a key to sign a message. + Examples: + - - '{{ hmac "sha256" "Secret key" "Hello world, gophers!" }}' + - b6d11b6c53830b9d87036272ca9fe9d19306b8f9d8aa07b15da27d89e6e34f40 + MD5: + Aliases: + - md5 + Args: + - v + Description: MD5 hashes the v and returns its MD5 checksum. + Examples: + - - '{{ md5 "Hello world, gophers!" }}' + - b3029f756f98f79e7f1b7f1d1f0dd53b + - - '{{ crypto.MD5 "Hello world, gophers!" }}' + - b3029f756f98f79e7f1b7f1d1f0dd53b + SHA1: + Aliases: + - sha1 + Args: + - v + Description: SHA1 hashes v and returns its SHA1 checksum. + Examples: + - - '{{ sha1 "Hello world, gophers!" }}' + - c8b5b0e33d408246e30f53e32b8f7627a7a649d4 + SHA256: + Aliases: + - sha256 + Args: + - v + Description: SHA256 hashes v and returns its SHA256 checksum. + Examples: + - - '{{ sha256 "Hello world, gophers!" }}' + - 6ec43b78da9669f50e4e422575c54bf87536954ccd58280219c393f2ce352b46 + css: + Quoted: + Aliases: null + Args: null + Description: "" + Examples: null + Unquoted: + Aliases: null + Args: null + Description: "" + Examples: null + data: + GetCSV: + Aliases: + - getCSV + Args: + - sep + - args + Description: |- + GetCSV expects the separator sep and one or n-parts of a URL to a resource which + can either be a local or a remote one. + The data separator can be a comma, semi-colon, pipe, etc, but only one character. + If you provide multiple parts for the URL they will be joined together to the final URL. + GetCSV returns nil or a slice slice to use in a short code. + Examples: [] + GetJSON: + Aliases: + - getJSON + Args: + - args + Description: |- + GetJSON expects one or n-parts of a URL in args to a resource which can either be a local or a remote one. + If you provide multiple parts they will be joined together to the final URL. + GetJSON returns nil or parsed JSON to use in a short code. + Examples: [] + debug: + Dump: + Aliases: null + Args: + - val + Description: |- + Dump returns a object dump of val as a string. + Note that not every value passed to Dump will print so nicely, but + we'll improve on that. + + We recommend using the "go" Chroma lexer to format the output + nicely. + + Also note that the output from Dump may change from Hugo version to the next, + so don't depend on a specific output. + Examples: + - - |- + {{ $m := newScratch }} + {{ $m.Set "Hugo" "Rocks!" }} + {{ $m.Values | debug.Dump | safeHTML }} + - |- + map[string]interface {}{ + "Hugo": "Rocks!", + } + TestDeprecationErr: + Aliases: null + Args: null + Description: "" + Examples: null + TestDeprecationInfo: + Aliases: null + Args: null + Description: "" + Examples: null + TestDeprecationWarn: + Aliases: null + Args: null + Description: "" + Examples: null + Timer: + Aliases: null + Args: null + Description: "" + Examples: null + VisualizeSpaces: + Aliases: null + Args: null + Description: "" + Examples: null + diagrams: + Goat: + Aliases: null + Args: null + Description: "" + Examples: null + encoding: + Base64Decode: + Aliases: + - base64Decode + Args: + - content + Description: Base64Decode returns the base64 decoding of the given content. + Examples: + - - '{{ "SGVsbG8gd29ybGQ=" | base64Decode }}' + - Hello world + - - '{{ 42 | base64Encode | base64Decode }}' + - "42" + Base64Encode: + Aliases: + - base64Encode + Args: + - content + Description: Base64Encode returns the base64 encoding of the given content. + Examples: + - - '{{ "Hello world" | base64Encode }}' + - SGVsbG8gd29ybGQ= + Jsonify: + Aliases: + - jsonify + Args: + - args + Description: |- + Jsonify encodes a given object to JSON. To pretty print the JSON, pass a map + or dictionary of options as the first value in args. Supported options are + "prefix" and "indent". Each JSON element in the output will begin on a new + line beginning with prefix followed by one or more copies of indent according + to the indentation nesting. + Examples: + - - '{{ (slice "A" "B" "C") | jsonify }}' + - '["A","B","C"]' + - - '{{ (slice "A" "B" "C") | jsonify (dict "indent" " ") }}' + - |- + [ + "A", + "B", + "C" + ] + fmt: + Errorf: + Aliases: + - errorf + Args: + - format + - args + Description: |- + Errorf formats args according to a format specifier and logs an ERROR. + It returns an empty string. + Examples: + - - '{{ errorf "%s." "failed" }}' + - "" + Erroridf: + Aliases: + - erroridf + Args: + - id + - format + - args + Description: |- + Erroridf formats args according to a format specifier and logs an ERROR and + an information text that the error with the given id can be suppressed in config. + It returns an empty string. + Examples: + - - '{{ erroridf "my-err-id" "%s." "failed" }}' + - "" + Errormf: + Aliases: null + Args: null + Description: "" + Examples: null + Print: + Aliases: + - print + Args: + - args + Description: Print returns a string representation of args. + Examples: + - - '{{ print "works!" }}' + - works! + Printf: + Aliases: + - printf + Args: + - format + - args + Description: Printf returns string representation of args formatted with the + layouut in format. + Examples: + - - '{{ printf "%s!" "works" }}' + - works! + Println: + Aliases: + - println + Args: + - args + Description: Println returns string representation of args ending with a + newline. + Examples: + - - '{{ println "works!" }}' + - | + works! + Warnf: + Aliases: + - warnf + Args: + - format + - args + Description: |- + Warnf formats args according to a format specifier and logs a WARNING. + It returns an empty string. + Examples: + - - '{{ warnf "%s." "warning" }}' + - "" + Warnmf: + Aliases: null + Args: null + Description: "" + Examples: null + hugo: + Deps: + Aliases: null + Args: null + Description: "" + Examples: null + Generator: + Aliases: null + Args: null + Description: "" + Examples: null + IsDevelopment: + Aliases: null + Args: null + Description: "" + Examples: null + IsExtended: + Aliases: null + Args: null + Description: "" + Examples: null + IsProduction: + Aliases: null + Args: null + Description: "" + Examples: null + IsServer: + Aliases: null + Args: null + Description: "" + Examples: null + Version: + Aliases: null + Args: null + Description: "" + Examples: null + WorkingDir: + Aliases: null + Args: null + Description: "" + Examples: null + images: + AutoOrient: + Aliases: null + Args: null + Description: "" + Examples: null + Brightness: + Aliases: null + Args: null + Description: "" + Examples: null + ColorBalance: + Aliases: null + Args: null + Description: "" + Examples: null + Colorize: + Aliases: null + Args: null + Description: "" + Examples: null + Config: + Aliases: + - imageConfig + Args: + - path + Description: |- + Config returns the image.Config for the specified path relative to the + working directory. + Examples: [] + Contrast: + Aliases: null + Args: null + Description: "" + Examples: null + Filter: + Aliases: null + Args: null + Description: "" + Examples: null + Gamma: + Aliases: null + Args: null + Description: "" + Examples: null + GaussianBlur: + Aliases: null + Args: null + Description: "" + Examples: null + Grayscale: + Aliases: null + Args: null + Description: "" + Examples: null + Hue: + Aliases: null + Args: null + Description: "" + Examples: null + Invert: + Aliases: null + Args: null + Description: "" + Examples: null + Opacity: + Aliases: null + Args: null + Description: "" + Examples: null + Overlay: + Aliases: null + Args: null + Description: "" + Examples: null + Padding: + Aliases: null + Args: null + Description: "" + Examples: null + Pixelate: + Aliases: null + Args: null + Description: "" + Examples: null + Process: + Aliases: null + Args: null + Description: "" + Examples: null + Saturation: + Aliases: null + Args: null + Description: "" + Examples: null + Sepia: + Aliases: null + Args: null + Description: "" + Examples: null + Sigmoid: + Aliases: null + Args: null + Description: "" + Examples: null + Text: + Aliases: null + Args: null + Description: "" + Examples: null + UnsharpMask: + Aliases: null + Args: null + Description: "" + Examples: null + inflect: + Humanize: + Aliases: + - humanize + Args: + - v + Description: |- + Humanize returns the humanized form of v. + + If v is either an integer or a string containing an integer + value, the behavior is to add the appropriate ordinal. + Examples: + - - '{{ humanize "my-first-post" }}' + - My first post + - - '{{ humanize "myCamelPost" }}' + - My camel post + - - '{{ humanize "52" }}' + - 52nd + - - '{{ humanize 103 }}' + - 103rd + Pluralize: + Aliases: + - pluralize + Args: + - v + Description: Pluralize returns the plural form of the single word in v. + Examples: + - - '{{ "cat" | pluralize }}' + - cats + Singularize: + Aliases: + - singularize + Args: + - v + Description: Singularize returns the singular form of a single word in v. + Examples: + - - '{{ "cats" | singularize }}' + - cat + js: + Build: + Aliases: null + Args: null + Description: "" + Examples: null + lang: + FormatAccounting: + Aliases: null + Args: + - precision + - currency + - number + Description: |- + FormatAccounting returns the currency representation of number for the given currency and precision + for the current language in accounting notation. + + The return value is formatted with at least two decimal places. + Examples: + - - '{{ 512.5032 | lang.FormatAccounting 2 "NOK" }}' + - NOK512.50 + FormatCurrency: + Aliases: null + Args: + - precision + - currency + - number + Description: |- + FormatCurrency returns the currency representation of number for the given currency and precision + for the current language. + + The return value is formatted with at least two decimal places. + Examples: + - - '{{ 512.5032 | lang.FormatCurrency 2 "USD" }}' + - $512.50 + FormatNumber: + Aliases: null + Args: + - precision + - number + Description: FormatNumber formats number with the given precision for the + current language. + Examples: + - - '{{ 512.5032 | lang.FormatNumber 2 }}' + - "512.50" + FormatNumberCustom: + Aliases: null + Args: + - precision + - number + - options + Description: |- + FormatNumberCustom formats a number with the given precision. The first + options parameter is a space-delimited string of characters to represent + negativity, the decimal point, and grouping. The default value is `- . ,`. + The second options parameter defines an alternate delimiting character. + + Note that numbers are rounded up at 5 or greater. + So, with precision set to 0, 1.5 becomes `2`, and 1.4 becomes `1`. + + For a simpler function that adapts to the current language, see FormatNumber. + Examples: + - - '{{ lang.FormatNumberCustom 2 12345.6789 }}' + - 12,345.68 + - - '{{ lang.FormatNumberCustom 2 12345.6789 "- , ." }}' + - 12.345,68 + - - '{{ lang.FormatNumberCustom 6 -12345.6789 "- ." }}' + - "-12345.678900" + - - '{{ lang.FormatNumberCustom 0 -12345.6789 "- . ," }}' + - -12,346 + - - '{{ lang.FormatNumberCustom 0 -12345.6789 "-|.| " "|" }}' + - -12 346 + - - '{{ -98765.4321 | lang.FormatNumberCustom 2 }}' + - -98,765.43 + FormatPercent: + Aliases: null + Args: + - precision + - number + Description: |- + FormatPercent formats number with the given precision for the current language. + Note that the number is assumed to be a percentage. + Examples: + - - '{{ 512.5032 | lang.FormatPercent 2 }}' + - 512.50% + Merge: + Aliases: null + Args: null + Description: "" + Examples: null + NumFmt: + Aliases: null + Args: null + Description: "" + Examples: null + Translate: + Aliases: + - i18n + - T + Args: + - ctx + - id + - args + Description: Translate returns a translated string for id. + Examples: [] + math: + Abs: + Aliases: null + Args: + - "n" + Description: Abs returns the absolute value of n. + Examples: + - - '{{ math.Abs -2.1 }}' + - "2.1" + Add: + Aliases: + - add + Args: + - inputs + Description: Add adds the multivalued addends n1 and n2 or more values. + Examples: + - - '{{ add 1 2 }}' + - "3" + Ceil: + Aliases: null + Args: + - "n" + Description: Ceil returns the least integer value greater than or equal to + n. + Examples: + - - '{{ math.Ceil 2.1 }}' + - "3" + Counter: + Aliases: null + Args: null + Description: "" + Examples: null + Div: + Aliases: + - div + Args: + - inputs + Description: Div divides n1 by n2. + Examples: + - - '{{ div 6 3 }}' + - "2" + Floor: + Aliases: null + Args: + - "n" + Description: Floor returns the greatest integer value less than or equal to + n. + Examples: + - - '{{ math.Floor 1.9 }}' + - "1" + Log: + Aliases: null + Args: + - "n" + Description: Log returns the natural logarithm of the number n. + Examples: + - - '{{ math.Log 1 }}' + - "0" + Max: + Aliases: null + Args: + - inputs + Description: Max returns the greater of all numbers in inputs. Any slices + in inputs are flattened. + Examples: + - - '{{ math.Max 1 2 }}' + - "2" + Min: + Aliases: null + Args: + - inputs + Description: Min returns the smaller of all numbers in inputs. Any slices + in inputs are flattened. + Examples: + - - '{{ math.Min 1 2 }}' + - "1" + Mod: + Aliases: + - mod + Args: + - n1 + - n2 + Description: Mod returns n1 % n2. + Examples: + - - '{{ mod 15 3 }}' + - "0" + ModBool: + Aliases: + - modBool + Args: + - n1 + - n2 + Description: ModBool returns the boolean of n1 % n2. If n1 % n2 == 0, return + true. + Examples: + - - '{{ modBool 15 3 }}' + - "true" + Mul: + Aliases: + - mul + Args: + - inputs + Description: Mul multiplies the multivalued numbers n1 and n2 or more values. + Examples: + - - '{{ mul 2 3 }}' + - "6" + Pow: + Aliases: + - pow + Args: + - n1 + - n2 + Description: Pow returns n1 raised to the power of n2. + Examples: + - - '{{ math.Pow 2 3 }}' + - "8" + Product: + Aliases: null + Args: null + Description: "" + Examples: null + Rand: + Aliases: null + Args: null + Description: Rand returns, as a float64, a pseudo-random number in the half-open + interval [0.0,1.0). + Examples: + - - '{{ math.Rand }}' + - "0.6312770459590062" + Round: + Aliases: null + Args: + - "n" + Description: Round returns the integer nearest to n, rounding half away from + zero. + Examples: + - - '{{ math.Round 1.5 }}' + - "2" + Sqrt: + Aliases: null + Args: + - "n" + Description: Sqrt returns the square root of the number n. + Examples: + - - '{{ math.Sqrt 81 }}' + - "9" + Sub: + Aliases: + - sub + Args: + - inputs + Description: Sub subtracts multivalued. + Examples: + - - '{{ sub 3 2 }}' + - "1" + Sum: + Aliases: null + Args: null + Description: "" + Examples: null + openapi3: + Unmarshal: + Aliases: null + Args: null + Description: "" + Examples: [] + os: + FileExists: + Aliases: + - fileExists + Args: + - i + Description: FileExists checks whether a file exists under the given path. + Examples: + - - '{{ fileExists "foo.txt" }}' + - "false" + Getenv: + Aliases: + - getenv + Args: + - key + Description: |- + Getenv retrieves the value of the environment variable named by the key. + It returns the value, which will be empty if the variable is not present. + Examples: [] + ReadDir: + Aliases: + - readDir + Args: + - i + Description: ReadDir lists the directory contents relative to the configured + WorkingDir. + Examples: + - - '{{ range (readDir "files") }}{{ .Name }}{{ end }}' + - README.txt + ReadFile: + Aliases: + - readFile + Args: + - i + Description: |- + ReadFile reads the file named by filename relative to the configured WorkingDir. + It returns the contents as a string. + There is an upper size limit set at 1 megabytes. + Examples: + - - '{{ readFile "files/README.txt" }}' + - Hugo Rocks! + Stat: + Aliases: null + Args: null + Description: "" + Examples: null + partials: + Include: + Aliases: + - partial + Args: + - ctx + - name + - contextList + Description: |- + Include executes the named partial. + If the partial contains a return statement, that value will be returned. + Else, the rendered output will be returned: + A string if the partial is a text/template, or template.HTML when html/template. + Note that ctx is provided by Hugo, not the end user. + Examples: + - - '{{ partial "header.html" . }}' + - <title>Hugo Rocks!</title> + IncludeCached: + Aliases: + - partialCached + Args: + - ctx + - name + - context + - variants + Description: |- + IncludeCached executes and caches partial templates. The cache is created with name+variants as the key. + Note that ctx is provided by Hugo, not the end user. + Examples: [] + path: + Base: + Aliases: null + Args: null + Description: "" + Examples: null + BaseName: + Aliases: null + Args: null + Description: "" + Examples: null + Clean: + Aliases: null + Args: null + Description: "" + Examples: null + Dir: + Aliases: null + Args: null + Description: "" + Examples: null + Ext: + Aliases: null + Args: null + Description: "" + Examples: null + Join: + Aliases: null + Args: + - elements + Description: |- + Join joins any number of path elements into a single path, adding a + separating slash if necessary. All the input + path elements are passed into filepath.ToSlash converting any Windows slashes + to forward slashes. + The result is Cleaned; in particular, + all empty strings are ignored. + Examples: + - - '{{ slice "my/path" "filename.txt" | path.Join }}' + - my/path/filename.txt + - - '{{ path.Join "my" "path" "filename.txt" }}' + - my/path/filename.txt + - - '{{ "my/path/filename.txt" | path.Ext }}' + - .txt + - - '{{ "my/path/filename.txt" | path.Base }}' + - filename.txt + - - '{{ "my/path/filename.txt" | path.Dir }}' + - my/path + Split: + Aliases: null + Args: + - path + Description: |- + Split splits path immediately following the final slash, + separating it into a directory and file name component. + If there is no slash in path, Split returns an empty dir and + file set to path. + The input path is passed into filepath.ToSlash converting any Windows slashes + to forward slashes. + The returned values have the property that path = dir+file. + Examples: + - - '{{ "/my/path/filename.txt" | path.Split }}' + - /my/path/|filename.txt + - - '{{ "/my/path/filename.txt" | path.Split }}' + - /my/path/|filename.txt + reflect: + IsMap: + Aliases: null + Args: + - v + Description: IsMap reports whether v is a map. + Examples: + - - '{{ if reflect.IsMap (dict "a" 1) }}Map{{ end }}' + - Map + IsSlice: + Aliases: null + Args: + - v + Description: IsSlice reports whether v is a slice. + Examples: + - - '{{ if reflect.IsSlice (slice 1 2 3) }}Slice{{ end }}' + - Slice + resources: + Babel: + Aliases: + - babel + Args: + - args + Description: Babel processes the given Resource with Babel. + Examples: [] + ByType: + Aliases: null + Args: null + Description: "" + Examples: null + Concat: + Aliases: null + Args: null + Description: "" + Examples: null + Copy: + Aliases: null + Args: null + Description: "" + Examples: null + ExecuteAsTemplate: + Aliases: null + Args: null + Description: "" + Examples: null + Fingerprint: + Aliases: + - fingerprint + Args: + - args + Description: |- + Fingerprint transforms the given Resource with a MD5 hash of the content in + the RelPermalink and Permalink. + Examples: [] + FromString: + Aliases: null + Args: null + Description: "" + Examples: null + Get: + Aliases: null + Args: + - filename + Description: |- + Get locates the filename given in Hugo's assets filesystem + and creates a Resource object that can be used for further transformations. + Examples: [] + GetMatch: + Aliases: null + Args: null + Description: "" + Examples: null + GetRemote: + Aliases: null + Args: + - args + Description: |- + GetRemote gets the URL (via HTTP(s)) in the first argument in args and creates Resource object that can be used for + further transformations. + + A second argument may be provided with an option map. + + Note: This method does not return any error as a second return value, + for any error situations the error can be checked in .Err. + Examples: [] + Match: + Aliases: null + Args: null + Description: "" + Examples: null + Minify: + Aliases: + - minify + Args: + - r + Description: |- + Minify minifies the given Resource using the MediaType to pick the correct + minifier. + Examples: [] + PostCSS: + Aliases: + - postCSS + Args: + - args + Description: PostCSS processes the given Resource with PostCSS + Examples: [] + PostProcess: + Aliases: null + Args: null + Description: "" + Examples: null + ToCSS: + Aliases: + - toCSS + Args: + - args + Description: |- + ToCSS converts the given Resource to CSS. You can optional provide an Options object + as second argument. As an option, you can e.g. specify e.g. the target path (string) + for the converted CSS resource. + Examples: [] + safe: + CSS: + Aliases: + - safeCSS + Args: + - s + Description: CSS returns the string s as html/template CSS content. + Examples: + - - '{{ "Bat&Man" | safeCSS | safeCSS }}' + - Bat&Man + HTML: + Aliases: + - safeHTML + Args: + - s + Description: HTML returns the string s as html/template HTML content. + Examples: + - - '{{ "Bat&Man" | safeHTML | safeHTML }}' + - Bat&Man + - - '{{ "Bat&Man" | safeHTML }}' + - Bat&Man + HTMLAttr: + Aliases: + - safeHTMLAttr + Args: + - s + Description: HTMLAttr returns the string s as html/template HTMLAttr content. + Examples: [] + JS: + Aliases: + - safeJS + Args: + - s + Description: JS returns the given string as a html/template JS content. + Examples: + - - '{{ "(1*2)" | safeJS | safeJS }}' + - (1*2) + JSStr: + Aliases: + - safeJSStr + Args: + - s + Description: JSStr returns the given string as a html/template JSStr content. + Examples: [] + SanitizeURL: + Aliases: + - sanitizeURL + - sanitizeurl + Args: + - s + Description: SanitizeURL returns the string s as html/template URL content. + Examples: [] + URL: + Aliases: + - safeURL + Args: + - s + Description: URL returns the string s as html/template URL content. + Examples: + - - '{{ "http://gohugo.io" | safeURL | safeURL }}' + - http://gohugo.io + site: + AllPages: + Aliases: null + Args: null + Description: "" + Examples: null + Author: + Aliases: null + Args: null + Description: "" + Examples: null + Authors: + Aliases: null + Args: null + Description: "" + Examples: null + BaseURL: + Aliases: null + Args: null + Description: "" + Examples: null + BuildDrafts: + Aliases: null + Args: null + Description: "" + Examples: null + Config: + Aliases: null + Args: null + Description: "" + Examples: null + Copyright: + Aliases: null + Args: null + Description: "" + Examples: null + Current: + Aliases: null + Args: null + Description: "" + Examples: null + Data: + Aliases: null + Args: null + Description: "" + Examples: null + DisqusShortname: + Aliases: null + Args: null + Description: "" + Examples: null + GetIdentity: + Aliases: null + Args: null + Description: "" + Examples: null + GetPage: + Aliases: null + Args: null + Description: "" + Examples: null + GetPageWithTemplateInfo: + Aliases: null + Args: null + Description: "" + Examples: null + GoogleAnalytics: + Aliases: null + Args: null + Description: "" + Examples: null + Home: + Aliases: null + Args: null + Description: "" + Examples: null + Hugo: + Aliases: null + Args: null + Description: "" + Examples: null + IsMultiLingual: + Aliases: null + Args: null + Description: "" + Examples: null + IsServer: + Aliases: null + Args: null + Description: "" + Examples: null + Language: + Aliases: null + Args: null + Description: "" + Examples: null + LanguageCode: + Aliases: null + Args: null + Description: "" + Examples: null + LanguagePrefix: + Aliases: null + Args: null + Description: "" + Examples: null + Languages: + Aliases: null + Args: null + Description: "" + Examples: null + LastChange: + Aliases: null + Args: null + Description: "" + Examples: null + MainSections: + Aliases: null + Args: null + Description: "" + Examples: null + Menus: + Aliases: null + Args: null + Description: "" + Examples: null + Pages: + Aliases: null + Args: null + Description: "" + Examples: null + Param: + Aliases: null + Args: null + Description: "" + Examples: null + Params: + Aliases: null + Args: null + Description: "" + Examples: null + RSSLink: + Aliases: null + Args: null + Description: "" + Examples: null + RegularPages: + Aliases: null + Args: null + Description: "" + Examples: null + Sections: + Aliases: null + Args: null + Description: "" + Examples: null + ServerPort: + Aliases: null + Args: null + Description: "" + Examples: null + Sites: + Aliases: null + Args: null + Description: "" + Examples: null + Social: + Aliases: null + Args: null + Description: "" + Examples: null + Taxonomies: + Aliases: null + Args: null + Description: "" + Examples: null + Title: + Aliases: null + Args: null + Description: "" + Examples: null + strings: + Chomp: + Aliases: + - chomp + Args: + - s + Description: Chomp returns a copy of s with all trailing newline characters + removed. + Examples: + - - '{{ chomp "<p>Blockhead</p>\n" | safeHTML }}' + - <p>Blockhead</p> + Contains: + Aliases: null + Args: + - s + - substr + Description: Contains reports whether substr is in s. + Examples: + - - '{{ strings.Contains "abc" "b" }}' + - "true" + - - '{{ strings.Contains "abc" "d" }}' + - "false" + ContainsAny: + Aliases: null + Args: + - s + - chars + Description: ContainsAny reports whether any Unicode code points in chars + are within s. + Examples: + - - '{{ strings.ContainsAny "abc" "bcd" }}' + - "true" + - - '{{ strings.ContainsAny "abc" "def" }}' + - "false" + ContainsNonSpace: + Aliases: null + Args: null + Description: "" + Examples: null + Count: + Aliases: null + Args: + - substr + - s + Description: |- + Count counts the number of non-overlapping instances of substr in s. + If substr is an empty string, Count returns 1 + the number of Unicode code points in s. + Examples: + - - '{{ "aabab" | strings.Count "a" }}' + - "3" + CountRunes: + Aliases: + - countrunes + Args: + - s + Description: CountRunes returns the number of runes in s, excluding whitespace. + Examples: [] + CountWords: + Aliases: + - countwords + Args: + - s + Description: CountWords returns the approximate word count in s. + Examples: [] + FindRE: + Aliases: + - findRE + Args: + - expr + - content + - limit + Description: |- + FindRE returns a list of strings that match the regular expression. By default all matches + will be included. The number of matches can be limited with an optional third parameter. + Examples: + - - '{{ findRE "[G|g]o" "Hugo is a static side generator written in Go." 1 + }}' + - '[go]' + FindRESubmatch: + Aliases: + - findRESubmatch + Args: + - expr + - content + - limit + Description: |- + FindRESubmatch returns a slice of all successive matches of the regular + expression in content. Each element is a slice of strings holding the text + of the leftmost match of the regular expression and the matches, if any, of + its subexpressions. + + By default all matches will be included. The number of matches can be + limited with the optional limit parameter. A return value of nil indicates + no match. + Examples: + - - '{{ findRESubmatch `<a\s*href="(.+?)">(.+?)</a>` `<li><a href="#foo">Foo</a></li> + <li><a href="#bar">Bar</a></li>` | print | safeHTML }}' + - '[[<a href="#foo">Foo</a> #foo Foo] [<a href="#bar">Bar</a> #bar Bar]]' + FirstUpper: + Aliases: null + Args: + - s + Description: FirstUpper converts s making the first character upper case. + Examples: + - - '{{ "hugo rocks!" | strings.FirstUpper }}' + - Hugo rocks! + HasPrefix: + Aliases: + - hasPrefix + Args: + - s + - prefix + Description: HasPrefix tests whether the input s begins with prefix. + Examples: + - - '{{ hasPrefix "Hugo" "Hu" }}' + - "true" + - - '{{ hasPrefix "Hugo" "Fu" }}' + - "false" + HasSuffix: + Aliases: + - hasSuffix + Args: + - s + - suffix + Description: HasSuffix tests whether the input s begins with suffix. + Examples: + - - '{{ hasSuffix "Hugo" "go" }}' + - "true" + - - '{{ hasSuffix "Hugo" "du" }}' + - "false" + Repeat: + Aliases: null + Args: + - "n" + - s + Description: Repeat returns a new string consisting of n copies of the string + s. + Examples: + - - '{{ "yo" | strings.Repeat 4 }}' + - yoyoyoyo + Replace: + Aliases: + - replace + Args: + - s + - old + - new + - limit + Description: |- + Replace returns a copy of the string s with all occurrences of old replaced + with new. The number of replacements can be limited with an optional fourth + parameter. + Examples: + - - '{{ replace "Batman and Robin" "Robin" "Catwoman" }}' + - Batman and Catwoman + - - '{{ replace "aabbaabb" "a" "z" 2 }}' + - zzbbaabb + ReplaceRE: + Aliases: + - replaceRE + Args: + - pattern + - repl + - s + - "n" + Description: |- + ReplaceRE returns a copy of s, replacing all matches of the regular + expression pattern with the replacement text repl. The number of replacements + can be limited with an optional fourth parameter. + Examples: + - - '{{ replaceRE "a+b" "X" "aabbaabbab" }}' + - XbXbX + - - '{{ replaceRE "a+b" "X" "aabbaabbab" 1 }}' + - Xbaabbab + RuneCount: + Aliases: null + Args: + - s + Description: RuneCount returns the number of runes in s. + Examples: [] + SliceString: + Aliases: + - slicestr + Args: + - a + - startEnd + Description: |- + SliceString slices a string by specifying a half-open range with + two indices, start and end. 1 and 4 creates a slice including elements 1 through 3. + The end index can be omitted, it defaults to the string's length. + Examples: + - - '{{ slicestr "BatMan" 0 3 }}' + - Bat + - - '{{ slicestr "BatMan" 3 }}' + - Man + Split: + Aliases: + - split + Args: + - a + - delimiter + Description: Split slices an input string into all substrings separated by + delimiter. + Examples: [] + Substr: + Aliases: + - substr + Args: + - a + - nums + Description: |- + Substr extracts parts of a string, beginning at the character at the specified + position, and returns the specified number of characters. + + It normally takes two parameters: start and length. + It can also take one parameter: start, i.e. length is omitted, in which case + the substring starting from start until the end of the string will be returned. + + To extract characters from the end of the string, use a negative start number. + + In addition, borrowing from the extended behavior described at http://php.net/substr, + if length is given and is negative, then that many characters will be omitted from + the end of string. + Examples: + - - '{{ substr "BatMan" 0 -3 }}' + - Bat + - - '{{ substr "BatMan" 3 3 }}' + - Man + Title: + Aliases: + - title + Args: + - s + Description: |- + Title returns a copy of the input s with all Unicode letters that begin words + mapped to their title case. + Examples: + - - '{{ title "Bat man" }}' + - Bat Man + - - '{{ title "somewhere over the rainbow" }}' + - Somewhere Over the Rainbow + ToLower: + Aliases: + - lower + Args: + - s + Description: |- + ToLower returns a copy of the input s with all Unicode letters mapped to their + lower case. + Examples: + - - '{{ lower "BatMan" }}' + - batman + ToUpper: + Aliases: + - upper + Args: + - s + Description: |- + ToUpper returns a copy of the input s with all Unicode letters mapped to their + upper case. + Examples: + - - '{{ upper "BatMan" }}' + - BATMAN + Trim: + Aliases: + - trim + Args: + - s + - cutset + Description: |- + Trim returns converts the strings s removing all leading and trailing characters defined + contained. + Examples: + - - '{{ trim "++Batman--" "+-" }}' + - Batman + TrimLeft: + Aliases: null + Args: + - cutset + - s + Description: |- + TrimLeft returns a slice of the string s with all leading characters + contained in cutset removed. + Examples: + - - '{{ "aabbaa" | strings.TrimLeft "a" }}' + - bbaa + TrimPrefix: + Aliases: null + Args: + - prefix + - s + Description: |- + TrimPrefix returns s without the provided leading prefix string. If s doesn't + start with prefix, s is returned unchanged. + Examples: + - - '{{ "aabbaa" | strings.TrimPrefix "a" }}' + - abbaa + - - '{{ "aabbaa" | strings.TrimPrefix "aa" }}' + - bbaa + TrimRight: + Aliases: null + Args: + - cutset + - s + Description: |- + TrimRight returns a slice of the string s with all trailing characters + contained in cutset removed. + Examples: + - - '{{ "aabbaa" | strings.TrimRight "a" }}' + - aabb + TrimSuffix: + Aliases: null + Args: + - suffix + - s + Description: |- + TrimSuffix returns s without the provided trailing suffix string. If s + doesn't end with suffix, s is returned unchanged. + Examples: + - - '{{ "aabbaa" | strings.TrimSuffix "a" }}' + - aabba + - - '{{ "aabbaa" | strings.TrimSuffix "aa" }}' + - aabb + Truncate: + Aliases: + - truncate + Args: + - s + - options + Description: Truncate truncates the string in s to the specified length. + Examples: + - - '{{ "this is a very long text" | truncate 10 " ..." }}' + - this is a ... + - - '{{ "With [Markdown](/markdown) inside." | markdownify | truncate 14 }}' + - With <a href="/markdown">Markdown …</a> + templates: + Exists: + Aliases: null + Args: + - name + Description: |- + Exists returns whether the template with the given name exists. + Note that this is the Unix-styled relative path including filename suffix, + e.g. partials/header.html + Examples: + - - '{{ if (templates.Exists "partials/header.html") }}Yes!{{ end }}' + - Yes! + - - '{{ if not (templates.Exists "partials/doesnotexist.html") }}No!{{ end + }}' + - No! + time: + AsTime: + Aliases: null + Args: + - v + - args + Description: |- + AsTime converts the textual representation of the datetime string into + a time.Time interface. + Examples: + - - '{{ (time "2015-01-21").Year }}' + - "2015" + Duration: + Aliases: + - duration + Args: + - unit + - number + Description: |- + Duration converts the given number to a time.Duration. + Unit is one of nanosecond/ns, microsecond/us/µs, millisecond/ms, second/s, minute/m or hour/h. + Examples: + - - '{{ mul 60 60 | duration "second" }}' + - 1h0m0s + Format: + Aliases: + - dateFormat + Args: + - layout + - v + Description: |- + Format converts the textual representation of the datetime string in v into + time.Time if needed and formats it with the given layout. + Examples: + - - 'dateFormat: {{ dateFormat "Monday, Jan 2, 2006" "2015-01-21" }}' + - 'dateFormat: Wednesday, Jan 21, 2015' + Now: + Aliases: + - now + Args: null + Description: Now returns the current local time or `clock` time + Examples: [] + ParseDuration: + Aliases: null + Args: + - s + Description: |- + ParseDuration parses the duration string s. + A duration string is a possibly signed sequence of + decimal numbers, each with optional fraction and a unit suffix, + such as "300ms", "-1.5h" or "2h45m". + Valid time units are "ns", "us" (or "µs"), "ms", "s", "m", "h". + See https://golang.org/pkg/time/#ParseDuration + Examples: + - - '{{ "1h12m10s" | time.ParseDuration }}' + - 1h12m10s + transform: + CanHighlight: + Aliases: null + Args: null + Description: "" + Examples: null + Emojify: + Aliases: + - emojify + Args: + - s + Description: |- + Emojify returns a copy of s with all emoji codes replaced with actual emojis. + + See http://www.emoji-cheat-sheet.com/ + Examples: + - - '{{ "I :heart: Hugo" | emojify }}' + - I ❤️ Hugo + HTMLEscape: + Aliases: + - htmlEscape + Args: + - s + Description: HTMLEscape returns a copy of s with reserved HTML characters + escaped. + Examples: + - - '{{ htmlEscape "Cathal Garvey & The Sunshine Band <[email protected]>" | + safeHTML }}' + - Cathal Garvey & The Sunshine Band <[email protected]> + - - '{{ htmlEscape "Cathal Garvey & The Sunshine Band <[email protected]>" }}' + - Cathal Garvey &amp; The Sunshine Band &lt;[email protected]&gt; + - - '{{ htmlEscape "Cathal Garvey & The Sunshine Band <[email protected]>" | + htmlUnescape | safeHTML }}' + - Cathal Garvey & The Sunshine Band <[email protected]> + HTMLUnescape: + Aliases: + - htmlUnescape + Args: + - s + Description: |- + HTMLUnescape returns a copy of s with HTML escape requences converted to plain + text. + Examples: + - - '{{ htmlUnescape "Cathal Garvey & The Sunshine Band <[email protected]>" + | safeHTML }}' + - Cathal Garvey & The Sunshine Band <[email protected]> + - - '{{ "Cathal Garvey &amp; The Sunshine Band &lt;[email protected]&gt;" + | htmlUnescape | htmlUnescape | safeHTML }}' + - Cathal Garvey & The Sunshine Band <[email protected]> + - - '{{ "Cathal Garvey &amp; The Sunshine Band &lt;[email protected]&gt;" + | htmlUnescape | htmlUnescape }}' + - Cathal Garvey & The Sunshine Band <[email protected]> + - - '{{ htmlUnescape "Cathal Garvey & The Sunshine Band <[email protected]>" + | htmlEscape | safeHTML }}' + - Cathal Garvey & The Sunshine Band <[email protected]> + Highlight: + Aliases: + - highlight + Args: + - s + - lang + - opts + Description: |- + Highlight returns a copy of s as an HTML string with syntax + highlighting applied. + Examples: [] + HighlightCodeBlock: + Aliases: null + Args: null + Description: "" + Examples: null + Markdownify: + Aliases: + - markdownify + Args: + - ctx + - s + Description: Markdownify renders s from Markdown to HTML. + Examples: + - - '{{ .Title | markdownify }}' + - <strong>BatMan</strong> + Plainify: + Aliases: + - plainify + Args: + - s + Description: Plainify returns a copy of s with all HTML tags removed. + Examples: + - - '{{ plainify "Hello <strong>world</strong>, gophers!" }}' + - Hello world, gophers! + Remarshal: + Aliases: null + Args: + - format + - data + Description: |- + Remarshal is used in the Hugo documentation to convert configuration + examples from YAML to JSON, TOML (and possibly the other way around). + The is primarily a helper for the Hugo docs site. + It is not a general purpose YAML to TOML converter etc., and may + change without notice if it serves a purpose in the docs. + Format is one of json, yaml or toml. + Examples: + - - '{{ "title = \"Hello World\"" | transform.Remarshal "json" | safeHTML + }}' + - | + { + "title": "Hello World" + } + Unmarshal: + Aliases: + - unmarshal + Args: + - args + Description: |- + Unmarshal unmarshals the data given, which can be either a string, json.RawMessage + or a Resource. Supported formats are JSON, TOML, YAML, and CSV. + You can optionally provide an options map as the first argument. + Examples: + - - '{{ "hello = \"Hello World\"" | transform.Unmarshal }}' + - map[hello:Hello World] + - - '{{ "hello = \"Hello World\"" | resources.FromString "data/greetings.toml" + | transform.Unmarshal }}' + - map[hello:Hello World] + XMLEscape: + Aliases: null + Args: + - s + Description: |- + XMLEscape returns the given string, removing disallowed characters then + escaping the result to its XML equivalent. + Examples: + - - '{{ transform.XMLEscape "<p>abc</p>" }}' + - '<p>abc</p>' + urls: + AbsLangURL: + Aliases: + - absLangURL + Args: + - s + Description: |- + AbsLangURL the string s and converts it to an absolute URL according + to a page's position in the project directory structure and the current + language. + Examples: [] + AbsURL: + Aliases: + - absURL + Args: + - s + Description: AbsURL takes the string s and converts it to an absolute URL. + Examples: [] + Anchorize: + Aliases: + - anchorize + Args: + - s + Description: |- + Anchorize creates sanitized anchor name version of the string s that is compatible + with how your configured markdown renderer does it. + Examples: + - - '{{ "This is a title" | anchorize }}' + - this-is-a-title + JoinPath: + Aliases: null + Args: + - elements + Description: |- + JoinPath joins the provided elements into a URL string and cleans the result + of any ./ or ../ elements. If the argument list is empty, JoinPath returns + an empty string. + Examples: + - - '{{ urls.JoinPath "https://example.org" "foo" }}' + - https://example.org/foo + - - '{{ urls.JoinPath (slice "a" "b") }}' + - a/b + Parse: + Aliases: null + Args: null + Description: "" + Examples: null + Ref: + Aliases: + - ref + Args: + - p + - args + Description: Ref returns the absolute URL path to a given content item from + Page p. + Examples: [] + RelLangURL: + Aliases: + - relLangURL + Args: + - s + Description: |- + RelLangURL takes the string s and prepends the relative path according to a + page's position in the project directory structure and the current language. + Examples: [] + RelRef: + Aliases: + - relref + Args: + - p + - args + Description: RelRef returns the relative URL path to a given content item + from Page p. + Examples: [] + RelURL: + Aliases: + - relURL + Args: + - s + Description: |- + RelURL takes the string s and prepends the relative path according to a + page's position in the project directory structure. + Examples: [] + URLize: + Aliases: + - urlize + Args: + - s + Description: URLize returns the the strings s formatted as an URL. + Examples: [] diff --git a/docs/data/homepagetweets.toml b/docs/data/homepagetweets.toml new file mode 100644 index 000000000..cde241f01 --- /dev/null +++ b/docs/data/homepagetweets.toml @@ -0,0 +1,265 @@ +[[tweet]] +name = "Heinrich Hartmann" +twitter_handle = "@heinrichhartman" +quote = "Working with @GoHugoIO is such a joy. Having worked with #Jekyll in the past, the near instant preview is a big win! Did not expect this to make such a huge difference." +link = "https://twitter.com/heinrichhartman/status/1199736512264462341" +date = 2019-11-12T00:00:00Z + +[[tweet]] +name = "Joshua Steven" +twitter_handle = "@jscarto" +quote = "Can't overstate how much I enjoy <a href='https://twitter.com/gohugoio' target='_blank'>@GoHugoIO</a>. My site is relatively small, but *18 ms* to build the whole thing made template development and proofing a breeze." +link = "https://twitter.com/jscarto/status/1039648827815485440" +date = 2018-09-12T00:00:00Z + +[[tweet]] +name = "Christophe Diericx" +twitter_handle = "@spcrngr_" +quote = "The more I use <a href='https://gohugo.io' target='_blank'>gohugo.io</a>, the more I really like it. Super intuitive/powerful static site generator...great job <a href='https://twitter.com/gohugoio' target='_blank'>@GoHugoIO</a>" +link = "https://twitter.com/spcrngr_/status/870863020905435136" +date = 2017-06-03T00:00:00Z + +[[tweet]] +name = "marcoscan" +twitter_handle = "@marcoscan" +quote = "Blog migrated from <a href='https://twitter.com/WordPress' target='_blank'>@WordPress</a> to <a href='https://twitter.com/GoHugoIO' target='_blank'>@GoHugoIO</a>, with a little refresh of my theme, Vim shortcuts and a full featured deploy script <a href='https://twitter.com/hashtag/gohugo?src=hash' target='_blank'>#gohugo</a>" +link = "https://twitter.com/marcoscan/status/869661175960752129" +date = 2017-05-30T00:00:00Z + +[[tweet]] +name = "Sandra Kuipers" +twitter_handle = "@SKuipersDesign" +quote = "Who knew static site building could be fun 🤔 Learning <a href='https://twitter.com/hashtag/gohugo?src=hash'>#gohugo</a> today" +link = "https://twitter.com/SKuipersDesign/status/868796256902029312" +date = 2017-05-28T00:00:00Z + +[[tweet]] +name = "Netlify" +twitter_handle = "@Netlify" +quote = "Top Ten Static Site Generators of 2017. Congrats to the top 3: 1. <a href='https://twitter.com/jekyllrb'>@Jekyllrb</a> 2. <a href='https://twitter.com/GoHugoIO'>@GoHugoIO</a> 3. <a href='https://twitter.com/hexojs'>@hexojs</a>" +link = "https://twitter.com/Netlify/status/868122279221362688" +date = 2017-05-26T00:00:00Z + +[[tweet]] +name = "Phil Hawksworth" +twitter_handle = "@philhawksworth" +quote = "I've been keen on <a href='https://twitter.com/hashtag/JAMStack?src=hash' target='_blank'>#JAMStack</a> for some time, but <a href='https://twitter.com/gohugoio' target='_blank'>@GoHugoIO</a> is wooing me all over again. Great fun to build with. And speeeeedy." +link = "https://twitter.com/philhawksworth/status/866684170512326657" +date = 2017-05-22T00:00:00Z + +[[tweet]] +name = "Aras Pranckevicius" +twitter_handle = "@aras_p" +quote = "I've probably said it before...but having Hugo rebuild the whole website in 300ms is amazing. <a href='https://gohugo.io' target='_blank'>gohugo.io</a>, <a href='https://twitter.com/hashtag/gohugo' target='_blank'>#gohugo</a>" +link = "https://twitter.com/aras_p/status/861157286823288832" +date = 2017-05-07T00:00:00Z + +[[tweet]] +name = "Hans Beck" +twitter_handle = "@EnrichedGamesHB" +quote = "Diving deeper into <a href='https://twitter.com/GoHugoIO' target='_blank' rel='noopener noreferrer'>@GoHugoIO</a>. A lot of docs there, top work! But I've the impressed that <a href='https://twitter.com/hashtag/gohugo' target='_blank' rel='noopener noreferrer'>#gohugo</a> is far easier than its feels from the docs!" +link = "https://twitter.com/EnrichedGamesHB/status/836854762440130560" +date = 2017-03-01T00:00:00Z + +[[tweet]] +name = "Alan Richardson" +twitter_handle = "@eviltester" +quote = "I migrated the <a href='https://twitter.com/BlackOpsTesting' target='_blank' rel='noopener noreferrer'> @BlackOpsTesting </a>.com website from docpad to Hugo last weekend. http://gohugo.io/ Super Fast HTML Generation <a href='https://twitter.com/spf13' target='_blank' rel='noopener noreferrer'> @spf13 </a>" +link = "https://twitter.com/eviltester/status/553520335115808768" +date = 2015-01-09T00:00:00Z + +[[tweet]] +name = "Janez Čadež" +twitter_handle = "@jamziSLO" +quote = "Building <a href='https://twitter.com/garazaFRI' target='_blank' rel='noopener noreferrer'>@garazaFRI</a> website in <a href='https://twitter.com/hashtag/hugo' target='_blank' rel='noopener noreferrer'>#hugo</a>. This static site generator is soooo damn fast! <a href='https://twitter.com/hashtag/gohugo' target='_blank' rel='noopener noreferrer'>#gohugo</a> <a href='https://twitter.com/hashtag/golang' target='_blank' rel='noopener noreferrer'>#golang</a>" +link = "https://twitter.com/jamziSLO/status/817720283977183234" +date = 2017-01-07T00:00:00Z + +[[tweet]] +name = "Execute" +twitter_handle = "@executerun" +quote = "Hah, <a href='https://twitter.com/hashtag/gohugo' target='_blank' rel='noopener noreferrer'>#gohugo</a>. I was working with <a href='https://twitter.com/hashtag/gohugo' target='_blank' rel='noopener noreferrer'>#gohugo</a> on <a href='https://twitter.com/hashtag/linux' target='_blank' rel='noopener noreferrer'>#linux</a> but now I realised how easy is to set-up it on <a href='https://twitter.com/hashtag/windows' target='_blank' rel='noopener noreferrer'>#windows</a>. Just need to add binary to <a href='https://twitter.com/hashtag/path' target='_blank' rel='noopener noreferrer'>#path</a>!" +link = "https://twitter.com/executerun/status/809753145270272005" +date = 2016-12-16T00:00:00Z + +[[tweet]] +name = "Baron Schwartz" +twitter_handle = "@xaprb" +quote = "Hugo is impressively capable. It's a static site generator by <a href='https://twitter.com/spf13'> @spf13 </a> written in <a href='https://twitter.com/hashtag/golang?src=hash'> #golang </a> . Just upgraded to latest release; very powerful. " +link = "https://twitter.com/xaprb/status/556894866488455169" +date = 2015-01-18T00:00:00Z + +[[tweet]] +name = "Dave Cottlehuber" +twitter_handle = "@dch__" +quote = "I just fell in love with #hugo, a static site/blog engine written by @spf13 in #golang + stellar docs" +link = "https://twitter.com/dch__/status/460158115498176512" +date = 2014-04-26T00:00:00Z + +[[tweet]] +name = "David Caunt" +twitter_handle = "@dcaunt" +quote = "I had a play with Hugo and it was good, uses Markdown files for content" +link = "https://twitter.com/dcaunt/statuses/406466996277374976" +date = 2013-11-29T00:00:00Z + +[[tweet]] +name = "David Gay" +twitter_handle = "@oddshocks" +quote = "Hugo is super-rad." +link = "https://twitter.com/oddshocks/statuses/405083217893421056" +date = 2013-11-25T00:00:00Z + +[[tweet]] +name = "Diti" +twitter_handle = "@DitiPengi" +quote = "The dev version of Hugo is AWESOME! <3 I promise, I will try to learn go ASAP and help contribute to the project! Just too great!" +link = "https://twitter.com/DitiPengi/status/472470974051676160" +date = 2014-05-30T00:00:00Z + +[[tweet]] +name = "Douglas Stephen " +twitter_handle = "@DougStephenJr" +quote = "Even as a long-time Octopress fan, I’ve gotta admit that this project Hugo looks very very cool" +link = "https://twitter.com/DougStephenJr/statuses/364512471660249088" +date = 2013-08-05T00:00:00Z + +[[tweet]] +name = "Hugo Rodger-Brown" +twitter_handle = "@hugorodgerbrown" +quote = "Finally someone builds me my own static site generator" +link = "https://twitter.com/hugorodgerbrown/statuses/364417910153818112" +date = 2013-05-08T00:00:00Z + +[[tweet]] +name = "Hugo Roy" +twitter_handle = "@hugoroyd" +quote = "Finally the answer to the question my parents have been asking: What does Hugo do?" +link = "https://twitter.com/hugoroyd/status/501704796727173120" +date = 2014-08-19T00:00:00Z + +[[tweet]] +name = "Daniel Miessler" +twitter_handle = "@DanielMiessler" +quote = "Websites for named vulnerabilities should run on static site generator platforms like Hugo. Read-only + burst traffic = static." +link = "https://twitter.com/DanielMiessler/status/704703841673957376" +date = 2016-03-01T00:00:00Z + +[[tweet]] +name = "Javier Segura" +twitter_handle = "@jsegura" +quote = "Another site generated with Hugo here! I'm getting in love with it." +link = "https://twitter.com/jsegura/status/465978434154659841" +date = 2014-05-12T00:00:00Z + +[[tweet]] +name = "Jim Biancolo" +twitter_handle = "@jimbiancolo" +quote = "I’m loving the static site generator renaissance we are currently enjoying. Hugo is new, looks great, written in Go" +link = "https://twitter.com/jimbiancolo/statuses/408678420348813314" +date = 2013-05-12T00:00:00Z + +[[tweet]] +name = "Jip J. Dekker" +twitter_handle = "@jipjdekker" +quote = "Building a personal website in Hugo. Works like a charm. And written in @golang!" +link = "https://twitter.com/jipjdekker/status/413783548735152131" +date = 2013-12-19T00:00:00Z + +[[tweet]] +name = "Jose Gonzalvo" +twitter_handle = "@jgonzalvo" +quote = "Checking out Hugo; Loving it so far. Like Jekyll but not so blog-oriented and written in go" +link = "https://twitter.com/jgonzalvo/statuses/408177855819173888" +date = 2013-12-04T00:00:00Z + +[[tweet]] +name = "Josh Matz" +twitter_handle = "@joshmatz" +quote = "A static site generator without the long build times? Yes, please!" +link = "https://twitter.com/joshmatz/statuses/364437436870696960" +date = 2013-08-05T00:00:00Z + +[[tweet]] +name = "Kieran Healy" +twitter_handle = "@kjhealy" +quote = "OK, so in today's speed battle of static site generators, @spf13's hugo is kicking everyone's ass, by miles." +link = "https://twitter.com/kjhealy/status/437349384809115648" +date = 2014-02-22T00:00:00Z + +[[tweet]] +name = "Ludovic Chabant" +twitter_handle = "@ludovicchabant" +quote = "Good work on Hugo, I’m impressed with the speed!" +link = "https://twitter.com/ludovicchabant/statuses/408806199602053120" +date = 2013-12-06T00:00:00Z + +[[tweet]] +name = "Luke Holder" +twitter_handle = "@lukeholder" +quote = "this is AWESOME. a single little executable and so fast." +link = "https://twitter.com/lukeholder/status/430352287936946176" +date = 2014-02-03T00:00:00Z + +[[tweet]] +name = "Markus Eliasson" +twitter_handle = "@markuseliasson" +quote = "Hugo is fast, dead simple to setup and well documented" +link = "https://twitter.com/markuseliasson/status/501594865877008384" +date = 2014-08-19T00:00:00Z + +[[tweet]] +name = "mercime" +twitter_handle = "@mercime_one" +quote = "Hugo: Makes the Web Fun Again" +link = "https://twitter.com/mercime_one/status/500547145087205377" +date = 2014-08-16T00:00:00Z + +[[tweet]] +name = "Michael Whatcott" +twitter_handle = "@mdwhatcott" +quote = "One more satisfied #Hugo blogger. Thanks @spf13 and friends!" +link = "https://twitter.com/mdwhatcott/status/469980686531571712" +date = 2014-05-23T00:00:00Z + +[[tweet]] +name = "Nathan Toups" +twitter_handle = "@rojoroboto" +quote = "I love Hugo! My site is generated with it now http://rjrbt.io" +link = "https://twitter.com/rojoroboto/status/423439915620106242" +date = 2014-01-15T00:00:00Z + +[[tweet]] +name = "Ruben Solvang" +twitter_handle = "@messo85" +quote = "#Hugo is the new @jekyllrb / @middlemanapp! Faster, easier and runs everywhere." +link = "https://twitter.com/messo85/status/472825062027182081" +date = 2014-05-31T00:00:00Z + +[[tweet]] +name = "Ryan Martinsen" +twitter_handle = "@popthestack" +quote = "Also, I re-launched my blog (it looks the same as before) using Hugo, a *fast* static engine. Very happy with it. <a href='http://gohugo.io/'>gohugo.io</a>" +link = "https://twitter.com/popthestack/status/549972754125307904" +date = 2014-12-30T00:00:00Z + +[[tweet]] +name = "The Lone Cuber" +twitter_handle = "@TheLoneCuber" +quote = "Jekyll is dead to me these days though... long live Hugo! Hugo is *by far* the best in its field. Thanks for making it happen." +link = "https://twitter.com/TheLoneCuber/status/495716684456398848" +date = 2014-08-02T00:00:00Z + +[[tweet]] +name = "The Lone Cuber" +twitter_handle = "@TheLoneCuber" +quote = "Finally, a publishing platform that's a joy to use. #NoMoreBarriers" +link = "https://twitter.com/TheLoneCuber/status/495731334711488512" +date = 2014-08-02T00:00:00Z + +[[tweet]] +name = "WorkHTML" +twitter_handle = "@workhtml" +quote = "<a href='https://twitter.com/hashtag/Hugo?src=hash'> #Hugo </a> A very good alternative for <a href='https://twitter.com/hashtag/wordpress?src=hash'> #wordpress </a> !!! A fast and modern static website engine <a href='http://gohugo.io/'> gohugo.io </a>" +link = "https://twitter.com/workhtml/status/563064361301053440" +date = 2015-02-04T00:00:00Z diff --git a/docs/data/page_filters.yaml b/docs/data/page_filters.yaml new file mode 100644 index 000000000..2a3a8625d --- /dev/null +++ b/docs/data/page_filters.yaml @@ -0,0 +1,93 @@ +# Do not delete. Required for layouts/shortcodes/list-pages-in-section.html. +# +# When calling the list-pages-in-section shortcode, you can specify a page +# filter, and whether the pages in the filter should be included or excluded +# from the list. +# +# For example: +# +# {{< list-pages-in-section path=/functions/images filter=functions_images_no_filters filterType=exclude >}} + +functions_fmt_logging: + - /functions/fmt/errorf + - /functions/fmt/erroridf + - /functions/fmt/warnf +functions_images_no_filters: + - /functions/images/filter + - /functions/images/config +methods_site_multilingual: + - /methods/site/ismultilingual + - /methods/site/language + - /methods/site/languageprefix + - /methods/site/languages +methods_site_page_collections: + - /methods/site/pages + - /methods/site/regularpages + - /methods/site/sections +methods_page_dates: + - /methods/page/date + - /methods/page/expirydate + - /methods/page/lastmod + - /methods/page/publishdate +methods_page_menu: + - /methods/page/hasmenucurrent + - /methods/page/ismenucurrent +methods_page_multilingual: + - /methods/page/alltranslations + - /methods/page/istranslated + - /methods/page/language + - /methods/page/translationkey + - /methods/page/translations +methods_page_page_collections: + - /methods/page/pages + - /methods/page/regularpages + - /methods/page/regularpagesrecursive + - /methods/page/sections +methods_page_parameters: + - /methods/page/param + - /methods/page/params +methods_page_sections: + - /methods/page/ancestors + - /methods/page/currentsection + - /methods/page/firstsection + - /methods/page/insection + - /methods/page/isancestor + - /methods/page/isdescendant + - /methods/page/parent + - /methods/page/sections + - /methods/page/section +methods_pages_sort: + - /methods/pages/bydate + - /methods/pages/byexpirydate + - /methods/pages/bylanguage + - /methods/pages/bylastmod + - /methods/pages/bylength + - /methods/pages/bylinktitle + - /methods/pages/byparam + - /methods/pages/bypublishdate + - /methods/pages/bytitle + - /methods/pages/byweight + - /methods/pages/reverse +methods_pages_group: + - /methods/pages/groupby + - /methods/pages/groupbydate + - /methods/pages/groupbyexpirydate + - /methods/pages/groupbylastmod + - /methods/pages/groupbyparam + - /methods/pages/groupbyparamdate + - /methods/pages/groupbypublishdate + - /methods/pages/groupbydate + - /methods/pages/groupbydate + - /methods/pages/groupbydate + - /methods/pages/groupbydate + - /methods/pages/groupbydate + - /methods/pages/groupbydate + - /methods/pages/reverse +methods_pages_navigation: + - /methods/pages/next + - /methods/pages/prev +methods_page_navigation: + - /methods/page/next + - /methods/page/nextinsection + - /methods/page/prev + - /methods/page/previnsection diff --git a/docs/go.mod b/docs/go.mod new file mode 100644 index 000000000..4866a61d6 --- /dev/null +++ b/docs/go.mod @@ -0,0 +1,5 @@ +module github.com/gohugoio/hugoDocs + +go 1.16 + +require github.com/gohugoio/gohugoioTheme v0.0.0-20240126181647-31e47d550511 // indirect diff --git a/docs/go.sum b/docs/go.sum new file mode 100644 index 000000000..9f3ed23f1 --- /dev/null +++ b/docs/go.sum @@ -0,0 +1,2 @@ +github.com/gohugoio/gohugoioTheme v0.0.0-20240126181647-31e47d550511 h1:dJLsByAuk9RnZmjL6QxQzHTJ63dr7Cwx6Dj8KAm7uEI= +github.com/gohugoio/gohugoioTheme v0.0.0-20240126181647-31e47d550511/go.mod h1:GOYeAPQJ/ok8z7oz1cjfcSlsFpXrmx6VkzQ5RpnyhZM= diff --git a/docs/hugo.toml b/docs/hugo.toml new file mode 100644 index 000000000..209231663 --- /dev/null +++ b/docs/hugo.toml @@ -0,0 +1,100 @@ +# This his the main configuration file. There are also environment specific configuration stored in the /config directory. + +baseURL = "https://gohugo.io/" +defaultContentLanguage = "en" +enableEmoji = true +ignoreErrors = ["error-remote-getjson", "error-missing-instagram-accesstoken"] +languageCode = "en-us" +paginate = 100 +pluralizeListTitles = false +timeZone = "Europe/Oslo" +title = "Hugo" + +# We do redirects via Netlify's _redirects file, generated by Hugo (see "outputs" below). +disableAliases = true + +[services.googleAnalytics] +ID = 'G-MBZGKNMDWC' + +[minify] + [minify.tdewolff] + [minify.tdewolff.html] + keepWhitespace = true + +[module] + [module.hugoVersion] + min = "0.56.0" + [[module.imports]] + path = "github.com/gohugoio/gohugoioTheme" + +[outputs] + home = ["HTML", "RSS", "REDIR", "HEADERS"] + section = ["HTML", "RSS"] + +[mediaTypes] + [mediaTypes."text/netlify"] + delimiter = "" + +[outputFormats] + [outputFormats.REDIR] + mediatype = "text/netlify" + baseName = "_redirects" + isPlainText = true + notAlternative = true + [outputFormats.HEADERS] + mediatype = "text/netlify" + baseName = "_headers" + isPlainText = true + notAlternative = true + +[caches] + [caches.getjson] + dir = ":cacheDir/:project" + maxAge = -1 + [caches.getcsv] + dir = ":cacheDir/:project" + maxAge = -1 + [caches.images] + dir = ":cacheDir/images" + maxAge = "1440h" + [caches.assets] + dir = ":resourceDir/_gen" + maxAge = -1 + [caches.getresource] + dir = ":cacheDir/:project" + maxage = '1h' + +[related] + threshold = 80 + includeNewer = true + toLower = false + [[related.indices]] + name = "keywords" + weight = 60 + [[related.indices]] + # Can be used as a front matter slice to link to other page fragments (headings) using their ID. + # This isn't particular useful in the current docs, but we're planning on getting a auto generated + # reference section with a better ID setup. + # For now, we just use it to give pages with same headings some similarity score. + name = "fragmentrefs" + type = "fragments" + applyFilter = false + weight = 60 + cardinalityThreshold = 50 + +[imaging] + # See https://github.com/disintegration/imaging + # CatmullRom is a sharp bicubic filter which should fit the docs site well with its many screenshots. + # Note that you can also set this per image processing. + resampleFilter = "CatmullRom" + # Default JPEG quality setting. Default is 75. + quality = 75 + anchor = "smart" + +[taxonomies] + category = "categories" + +[[cascade]] +categories = ['commands'] +[cascade._target] +path = '/commands/**' diff --git a/docs/hugo.work b/docs/hugo.work new file mode 100644 index 000000000..a3c91ef28 --- /dev/null +++ b/docs/hugo.work @@ -0,0 +1,4 @@ +go 1.19 + +use . +use ../gohugoioTheme diff --git a/docs/hugo_stats.json b/docs/hugo_stats.json new file mode 100644 index 000000000..ca27d8991 --- /dev/null +++ b/docs/hugo_stats.json @@ -0,0 +1,820 @@ +{ + "htmlElements": { + "tags": [ + "", + "a", + "article", + "aside", + "blockquote", + "body", + "br", + "button", + "circle", + "code", + "date", + "dd", + "div", + "dl", + "dt", + "em", + "figcaption", + "figure", + "footer", + "form", + "g", + "h1", + "h2", + "h3", + "h4", + "h5", + "h6", + "head", + "header", + "hr", + "html", + "i", + "iframe", + "img", + "li", + "link", + "main", + "meta", + "nav", + "noscript", + "ol", + "p", + "path", + "pre", + "script", + "section", + "small", + "span", + "strong", + "style", + "sup", + "svg", + "table", + "tbody", + "td", + "thead", + "time", + "title", + "tr", + "ul" + ], + "classes": [ + "!('about'", + "!('content-management'", + "!('contribute'", + "!('functions'", + "!('getting-started'", + "!('hosting-and-deployment'", + "!('modules'", + "!('pipes'", + "!('templates'", + "!('tools'", + "!('troubleshooting'", + "!('variables'", + "\u0026\u0026", + "(false", + "(true", + "-ml-px", + "-mr-12", + "-mr-3", + "-translate-x-3", + "-translate-y-2", + "absolute", + "absolute-l", + "active", + "admonition", + "admonition-content", + "admonition-icon", + "anchor", + "b--moon-gray", + "benchstat", + "better", + "bg-accent-color-dark", + "bg-animate", + "bg-black", + "bg-carrot-500", + "bg-cover", + "bg-gradient-to-b", + "bg-gray-100", + "bg-gray-200", + "bg-gray-300", + "bg-gray-50", + "bg-gray-600", + "bg-gray-900", + "bg-green-100", + "bg-mango-300", + "bg-mango-50", + "bg-near-white", + "bg-opacity-20", + "bg-opacity-75", + "bg-orange-500", + "bg-steel-200", + "bg-steel-500", + "bg-steel-600", + "bg-steel-800", + "bg-steel-900", + "bg-white", + "blTK", + "black", + "block", + "bmt1", + "border", + "border-0", + "border-2", + "border-b", + "border-gray-100", + "border-gray-200", + "border-gray-300", + "border-l", + "border-none", + "border-r", + "border-solid", + "border-t", + "border-transparent", + "bottom-0", + "break-inside-avoid-l", + "btn-primary", + "c", + "c1", + "chroma", + "clearfix", + "cm", + "code-copy-content", + "code-toggle", + "column-count-3-l", + "column-gap-1-l", + "configs", + "copy", + "cp", + "cursor-pointer", + "dark:bg-red-800", + "dark:border-gray-800", + "delta", + "details", + "dim", + "disabled", + "divide-gray-200", + "divide-x", + "err", + "f2-fluid", + "f6", + "filename", + "fill-current", + "fixed", + "fixed-lTK", + "flex", + "flex-1", + "flex-auto", + "flex-auto-ns", + "flex-col", + "flex-column", + "flex-none", + "flex-shrink-0", + "flex-wrap", + "fn", + "focus:border-steel-500", + "focus:outline-none", + "focus:ring-1", + "focus:ring-2", + "focus:ring-inset", + "focus:ring-offset-2", + "focus:ring-steel-500", + "focus:ring-white", + "focus:z-10", + "font-black", + "font-bold", + "font-extrabold", + "font-extralight", + "font-medium", + "font-mono", + "font-normal", + "font-sans", + "font-semibold", + "footnote-backref", + "footnote-ref", + "footnotes", + "from-primarydark", + "gap-4", + "ge", + "grid", + "grid-cols-1", + "group", + "grow", + "gs", + "gu", + "h-0", + "h-0.5", + "h-10", + "h-12", + "h-16", + "h-2", + "h-32", + "h-5", + "h-6", + "h-64", + "h-8", + "h-full", + "h-screen", + "h6", + "hidden", + "highlight", + "hl", + "hover", + "hover-bg-green", + "hover-bg-near-white", + "hover-bg-primary-color", + "hover-bg-primary-color-dark", + "hover-blue", + "hover:bg-gray-300", + "hover:bg-gray-50", + "hover:bg-steel-500", + "hover:bg-steel-700", + "hover:border", + "hover:text-gray-200", + "hover:text-gray-900", + "hover:text-hotpink-400", + "hover:text-hotpink-600", + "hover:text-limegreen-900", + "hover:text-royalblue-700", + "hover:text-steel-500", + "hover:text-white", + "img", + "in", + "inline-block", + "inline-flex", + "inset-0", + "inset-x-0", + "instagram-media", + "items-center", + "items-start", + "justify-between", + "justify-center", + "justify-end", + "k", + "kc", + "kd", + "kr", + "kt", + "l", + "language-asciidoc", + "language-bash", + "language-go", + "language-go-html-template", + "language-go-text-template", + "language-html", + "language-js", + "language-json", + "language-markdown", + "language-md", + "language-ps1", + "language-sh", + "language-svg", + "language-text", + "language-toml", + "language-txt", + "language-xml", + "language-yaml", + "language-yml", + "lazyload", + "ld", + "lead", + "leading-none", + "leading-normal", + "leading-relaxed", + "leading-snug", + "leading-tight", + "left-0", + "lg:bg-steel-700", + "lg:block", + "lg:flex", + "lg:flex-grow", + "lg:flex-shrink-0", + "lg:hidden", + "lg:inline-block", + "lg:items-center", + "lg:max-w-lg", + "lg:mb-0", + "lg:mr-auto", + "lg:mt-0", + "lg:p-4", + "lg:pb-5", + "lg:prose-lg", + "lg:pt-0", + "lg:px-4", + "lg:px-5", + "lg:px-8", + "lg:py-5", + "lg:py-8", + "lg:rounded-md", + "lg:shadow-lg", + "lg:space-x-4", + "lg:text-5xl", + "lg:w-1/2", + "lg:w-1/4", + "lg:w-1/5", + "lg:w-11/12", + "lg:w-3/5", + "lg:w-4/5", + "lg:w-auto", + "light-gray", + "link", + "list-reset", + "lnt", + "lntable", + "lntd", + "m", + "m-0", + "m-1", + "max-w-6xl", + "max-w-lg", + "max-w-xs", + "mb-0", + "mb-1", + "mb-2", + "mb-3", + "mb-4", + "mb-8", + "mb5", + "mb7", + "md:flex", + "md:flex-col", + "md:flex-grow", + "md:grid-cols-2", + "md:mt-8", + "md:pb-12", + "menu))", + "menu['about']", + "menu['content-management']", + "menu['contribute']", + "menu['functions']", + "menu['getting-started']", + "menu['hosting-and-deployment']", + "menu['modules']", + "menu['pipes']", + "menu['templates']", + "menu['tools']", + "menu['troubleshooting']", + "menu['variables']", + "mf", + "mi", + "min-h-screen", + "min-w-0", + "minor", + "ml-1", + "ml-10", + "ml-4", + "ml-6", + "ml1", + "mr-1.5", + "mr-10", + "mr-3", + "mr-4", + "mt-0", + "mt-1", + "mt-2", + "mt-4", + "mt-5", + "mt-6", + "mt-8", + "mt3", + "mt4", + "mv2", + "mv3", + "mv4", + "mv6", + "mw-100", + "mw5-l", + "mx-auto", + "my-0", + "n", + "na", + "navbar-menu", + "nb", + "needs-js", + "nested-blockquote", + "nested-copy-seperator", + "nested-img", + "nested-links", + "nested-linksTK", + "nested-list-reset", + "nf", + "ni", + "nightwind", + "nightwind-prevent", + "nightwind-prevent-block", + "nn", + "no-js", + "no-underline", + "nodelta", + "note", + "note-icon", + "nt", + "nt3", + "nv", + "nx", + "o", + "o-0", + "o-80", + "oldnew", + "opacity-60", + "open", + "order-0", + "order-0-l", + "order-1", + "order-1-l", + "order-2", + "output-content", + "overflow-hidden", + "overflow-x-scroll", + "overflow-y-auto", + "p", + "p-0", + "p-2", + "p-3", + "p-4", + "p-5", + "p-8", + "pa4-m", + "page-item", + "page-link", + "pagination", + "pb-1", + "pb-2", + "pb-3", + "pb-4", + "pb-5", + "pb-7", + "pb-8", + "pb2", + "ph1", + "ph2", + "ph4", + "pl-0", + "pl-1", + "pl-2", + "pl-3", + "pl-6", + "pl5-l", + "pr-2", + "pr1", + "primary-color", + "prose", + "pt-0", + "pt-1", + "pt-2", + "pt-3", + "pt-4", + "pt-5", + "pv1", + "px-0", + "px-2", + "px-3", + "px-4", + "py-0", + "py-0.5", + "py-1.5", + "py-2", + "py-3", + "py-4", + "py-6", + "relative", + "right-0", + "rounded", + "rounded-full", + "rounded-l-lg", + "rounded-l-md", + "rounded-lg", + "rounded-md", + "rounded-r-md", + "row", + "s", + "s1", + "s2", + "san-serif", + "se", + "shadow", + "shadow-lg", + "shadow-md", + "shadow-sm", + "show", + "sm:flex", + "sm:grid-cols-2", + "sm:mb-0", + "sm:mt-0", + "sm:mt-8", + "sm:p-4", + "sm:pb-0", + "sm:pb-6", + "sm:pt-3", + "sm:pt-5", + "sm:px-4", + "sm:px-5", + "sm:px-6", + "sm:py-0", + "sm:py-4", + "sm:py-5", + "sm:py-6", + "sm:text-2xl", + "sm:text-4xl", + "sm:text-base", + "sm:text-center", + "sm:text-left", + "sm:w-1/2", + "sm:w-1/5", + "sm:w-11/12", + "sm:w-4/5", + "space-x-4", + "space-x-8", + "space-y-1", + "sr-only", + "table", + "table-bordered", + "tc", + "text-2xl", + "text-3xl", + "text-4xl", + "text-5xl", + "text-base", + "text-black", + "text-center", + "text-gray-200", + "text-gray-300", + "text-gray-400", + "text-gray-500", + "text-gray-600", + "text-gray-900", + "text-lg", + "text-limegreen-600", + "text-limegreen-700", + "text-mango-100", + "text-mango-300", + "text-md", + "text-royalblue-500", + "text-royalblue-600", + "text-sm", + "text-steel-100", + "text-steel-500", + "text-steel-900", + "text-white", + "text-xl", + "text-xs", + "tile", + "tip", + "tip-icon", + "to-steel-800", + "top-0", + "top-2", + "tracked", + "tracking-normal", + "tracking-tight", + "transform", + "twitter-tweet", + "unchanged", + "uppercase", + "v-base", + "v-mid", + "v-top", + "w", + "w-1/5", + "w-10", + "w-11/12", + "w-12", + "w-14", + "w-2", + "w-2/3", + "w-30-l", + "w-32", + "w-5", + "w-50-m", + "w-6", + "w-64", + "w-8", + "w-80-nsTK", + "w-96", + "w-auto", + "w-full", + "w-two-third-l", + "warning", + "whitespace-no-wrap", + "worse", + "x", + "xl:flex", + "xl:flex-col", + "z-0", + "z-40", + "z-999", + "||" + ], + "ids": [ + ".gitlab-ci.yml", + "/blog/greatest-city/index.html", + "/content/actors/bruce-willis/_index.md", + "/layouts/shortcodes/img.html", + "/layouts/shortcodes/vimeo.html", + "/layouts/shortcodes/year.html", + "/layouts/shortcodes/youtube.html", + "/themes/yourtheme/layouts/review/single.html", + "404.html", + "TableOfContents", + "addrobotstxt.sh", + "all-taxonomies-keys-and-pages.html", + "all-taxonomies.html", + "archetype-example.sh", + "archetypes/functions.md", + "archetypes/newsletter.md", + "articles.html", + "asciicast-3mf1JGaN0AX0Z7j5kLGl3hSh8", + "asciicast-7naKerRYUGVPj8kiDmdh5k5h9", + "asciicast-BvJBsF6egk9c163bMsObhuNXj", + "asciicast-ItACREbFgvJ0HjnSNeTknxWy9", + "asciicast-Lc5iwTVny2kuUC8lqvNnL6oDU", + "asciicast-eUojYCfRTZvkEiqc52fUsJRBR", + "bad-url-sidebar-menu-output.html", + "base-64-output.html", + "base64-input.html", + "baseof.html", + "bf-config.toml", + "bf-config.yml", + "boxfile.yml", + "breadcrumb.html", + "check-title-length.html", + "clone-herring-cove-theme.sh", + "config.toml", + "content-header.html", + "content-image.md", + "content/blog/greatest-city.md", + "content/posts/_index.md", + "content/posts/default-function-example.md", + "content/posts/my-awesome-post.md", + "content/posts/my-post.md", + "content/posts/old-post.md", + "content/posts/old-url.md", + "content/tutorials/learn-html.md", + "correct-url-sidebar-menu-output.html", + "delimit-example-front-matter.toml", + "delimit-page-tags-final-and-input.html", + "delimit-page-tags-final-and-output.html", + "delimit-page-tags-input.html", + "delimit-page-tags-output.html", + "disqus.html", + "dot-notation-default-return-value.html", + "dot-notation-default-value.html", + "example-tweet-input.md", + "example-tweet-output.html", + "example-vimeo-input.md", + "example-vimeo-output.html", + "example-youtube-input-with-autoplay.md", + "example-youtube-input-with-title.md", + "example-youtube-input.md", + "example-youtube-output.html", + "example.com/posts/index.html", + "example.com/quote/index.html", + "external-links.svg", + "figure-input-example.md", + "figure-output-example.html", + "first-and-where-together.html", + "fn:1", + "fn:2", + "fnref:1", + "fnref:2", + "footer.html", + "from-gh.sh", + "gist-input.md", + "gist-output.html", + "gitignore.sh", + "gohugoio", + "grab-top-two-tags.html", + "header.html", + "highlight-example.md", + "how-many-posts.html", + "hugo-new-site.sh", + "if-instead-of-default.html", + "img-output.html", + "index.html", + "instagram-hide-caption-output.html", + "instagram-input-hide-caption.md", + "instagram-input.md", + "install-brew.sh", + "install-extended-with-chocolatey.ps1", + "install-go.sh", + "install-openssh.sh", + "install-with-chocolatey.ps1", + "install-with-homebrew.sh", + "install-with-linuxbrew.sh", + "install-with-macports.sh", + "install.sh", + "layout/_default/section.html", + "layout/_default/single.html", + "layouts/404.html", + "layouts/_default/_markup/render-heading.html", + "layouts/_default/_markup/render-image.html", + "layouts/_default/_markup/render-link.html", + "layouts/_default/baseof.html", + "layouts/_default/li.html", + "layouts/_default/list.html", + "layouts/_default/section.html", + "layouts/_default/single.html", + "layouts/_default/summary.html", + "layouts/_default/taxonomy.html", + "layouts/index.html", + "layouts/partials/all-taxonomies.html", + "layouts/partials/alllanguages.html", + "layouts/partials/bad-url-sidebar-menu.html", + "layouts/partials/breadcrumb.html", + "layouts/partials/by-date-reverse.html", + "layouts/partials/by-date.html", + "layouts/partials/by-expiry-date.html", + "layouts/partials/by-group-by-page.html", + "layouts/partials/by-last-mod.html", + "layouts/partials/by-length.html", + "layouts/partials/by-link-title.html", + "layouts/partials/by-nested-param.html", + "layouts/partials/by-page-date.html", + "layouts/partials/by-page-expiry-date.html", + "layouts/partials/by-page-field.html", + "layouts/partials/by-page-lastmod.html", + "layouts/partials/by-page-param-as-date.html", + "layouts/partials/by-page-param.html", + "layouts/partials/by-page-publish-date.html", + "layouts/partials/by-publish-date.html", + "layouts/partials/by-rating.html", + "layouts/partials/by-title.html", + "layouts/partials/by-weight.html", + "layouts/partials/content-header.html", + "layouts/partials/correct-url-sidebar-menu.html", + "layouts/partials/default-order.html", + "layouts/partials/disqus.html", + "layouts/partials/footer.html", + "layouts/partials/get-csv.html", + "layouts/partials/groups.html", + "layouts/partials/head.html", + "layouts/partials/header.html", + "layouts/partials/i18nlist.html", + "layouts/partials/post-tag-link.html", + "layouts/partials/post-tag-list.html", + "layouts/partials/related.html", + "layouts/partials/schemaorg-metadata.html", + "layouts/partials/sidebar.html", + "layouts/partials/svgs/external-links.svg", + "layouts/partials/toc.html", + "layouts/partials/twitter.html", + "layouts/partials/upcoming-events.html", + "layouts/posts/single.html", + "layouts/robots.txt", + "layouts/section/articles.html", + "layouts/section/posts.html", + "layouts/shortcodes/gallery.html", + "layouts/shortcodes/img.html", + "layouts/shortcodes/imgproc.html", + "li.html", + "links-to-all-tags.html", + "list.html", + "netlify.toml", + "note-with-heading.html", + "note-with-heading.md", + "page-list-with-summaries.html", + "partial-cached-example.html", + "partials/templates/random-tweets.html", + "post-tag-list.html", + "prose", + "push-wecker-to-gh.sh", + "range-through-tags-w-global.html", + "remove-herring-cove-git.sh", + "robots.txt", + "schemaorg-metadata.html", + "section.html", + "setup-gh-repo.sh", + "shuffle-input.html", + "shuffle-output.html", + "sidebar.html", + "single.html", + "slice.html", + "summary.html", + "syntax-highlighted.html", + "tags-range-with-page-variable.html", + "taxonomy.html", + "time-passed.html", + "tip-output.html", + "toc.html", + "tutorials/learn-html/index.html", + "tweets.html", + "unix-to-month-integer.html", + "upcoming-events.html", + "using-tip.md", + "variable-as-default-value.html", + "vimeo-iframes.html", + "warning-admonition-input.md", + "warning-admonition-output.html", + "wercker-build-step.yml", + "wercker.yml", + "where-intersect-variables.html", + "with-instead-of-default.html", + "yourbaseurl/review/book01/index.html", + "youtube-embed.html" + ] + } +}
\ No newline at end of file diff --git a/docs/hugoreleaser.toml b/docs/hugoreleaser.toml new file mode 100644 index 000000000..3ee1aad13 --- /dev/null +++ b/docs/hugoreleaser.toml @@ -0,0 +1,29 @@ +project = "hugoDocs" + +[release_settings] + name = "${HUGORELEASER_TAG}" + type = "github" + repository = "hugoDocs" + repository_owner = "gohugoio" + + draft = true + prerelease = false + + [release_settings.release_notes_settings] + generate = true + generate_on_host = false + short_threshold = 10 + short_title = "What's Changed" + + groups = [ + { regexp = "snapcraft:|Merge commit|Merge branch|netlify:|release:|Squashed", ignore = true }, + { title = "Typo fixes", regexp = "typo", ordinal = 20 }, + { title = "Dependency Updates", regexp = "deps", ordinal = 30 }, + { title = "Improvements", regexp = ".*", ordinal = 10 }, + ] + +[[releases]] + paths = ["archives/**"] + # In this file we have only one release, but path can be used to partition the release step, e.g.: + # hugoreleaser release -paths "releases/myrelease" + path = "myrelease" diff --git a/docs/netlify.toml b/docs/netlify.toml new file mode 100644 index 000000000..c65cd903e --- /dev/null +++ b/docs/netlify.toml @@ -0,0 +1,30 @@ +[build] + publish = "public" + command = "hugo --gc --minify" + + [build.environment] + HUGO_VERSION = "0.122.0" + +[context.production.environment] + HUGO_ENV = "production" + HUGO_ENABLEGITINFO = "true" + +[context.split1] + command = "hugo --gc --minify --enableGitInfo" + + [context.split1.environment] + HUGO_ENV = "production" + +[context.deploy-preview] + command = "hugo --gc --minify --buildFuture -b $DEPLOY_PRIME_URL" + +[context.branch-deploy] + command = "hugo --gc --minify -b $DEPLOY_PRIME_URL" + +[context.next.environment] + HUGO_ENABLEGITINFO = "true" + +[[redirects]] + from = "/npmjs/*" + to = "/npmjs/" + status = 200 diff --git a/docs/pull-theme.sh b/docs/pull-theme.sh new file mode 100755 index 000000000..828b6cfb4 --- /dev/null +++ b/docs/pull-theme.sh @@ -0,0 +1,4 @@ +#!/bin/bash + +git subtree pull --prefix=themes/gohugoioTheme/ [email protected]:gohugoio/gohugoioTheme.git master --squash + diff --git a/docs/src/css/_chroma.css b/docs/src/css/_chroma.css new file mode 100644 index 000000000..1ad06604b --- /dev/null +++ b/docs/src/css/_chroma.css @@ -0,0 +1,43 @@ +/* Background */ .chroma { background-color: #f0f0f0 } +/* Error */ .chroma .ss4 { } +/* LineHighlight */ .chroma .hl { background-color: #ffffcc; display: block; width: 100% } +/* LineNumbers */ .chroma .ln { ; margin-right: 0.4em; padding: 0 0.4em 0 0.4em; } +/* Keyword */ .chroma .s3e8 { color: #007020; font-weight: bold } +/* KeywordPseudo */ .chroma .s3ec { color: #007020 } +/* KeywordType */ .chroma .s3ee { color: #902000 } +/* NameAttribute */ .chroma .s7d1 { color: #4070a0 } +/* NameBuiltin */ .chroma .s7d2 { color: #007020 } +/* NameClass */ .chroma .s7d4 { color: #0e84b5; font-weight: bold } +/* NameConstant */ .chroma .s7d5 { color: #60add5 } +/* NameDecorator */ .chroma .s7d6 { color: #555555; font-weight: bold } +/* NameEntity */ .chroma .s7d7 { color: #d55537; font-weight: bold } +/* NameException */ .chroma .s7d8 { color: #007020 } +/* NameFunction */ .chroma .s7d9 { color: #06287e } +/* NameLabel */ .chroma .s7dc { color: #002070; font-weight: bold } +/* NameNamespace */ .chroma .s7dd { color: #0e84b5; font-weight: bold } +/* NameTag */ .chroma .s7e2 { color: #062873; font-weight: bold } +/* NameVariable */ .chroma .s7e3 { color: #bb60d5 } +/* LiteralString */ .chroma .sc1c { color: #4070a0 } +/* LiteralStringDoc */ .chroma .sc23 { color: #4070a0; font-style: italic } +/* LiteralStringEscape */ .chroma .sc25 { color: #4070a0; font-weight: bold } +/* LiteralStringInterpol */ .chroma .sc27 { color: #70a0d0; font-style: italic } +/* LiteralStringOther */ .chroma .sc29 { color: #c65d09 } +/* LiteralStringRegex */ .chroma .sc2a { color: #235388 } +/* LiteralStringSymbol */ .chroma .sc2c { color: #517918 } +/* LiteralNumber */ .chroma .sc80 { color: #40a070 } +/* Operator */ .chroma .sfa0 { color: #666666 } +/* OperatorWord */ .chroma .sfa1 { color: #007020; font-weight: bold } +/* Comment */ .chroma .s1770 { color: #60a0b0; font-style: italic } +/* CommentSpecial */ .chroma .s1774 { color: #60a0b0; background-color: #fff0f0 } +/* CommentPreproc */ .chroma .s17d4 { color: #007020 } +/* GenericDeleted */ .chroma .s1b59 { color: #a00000 } +/* GenericEmph */ .chroma .s1b5a { font-style: italic } +/* GenericError */ .chroma .s1b5b { color: #ff0000 } +/* GenericHeading */ .chroma .s1b5c { color: #000080; font-weight: bold } +/* GenericInserted */ .chroma .s1b5d { color: #00a000 } +/* GenericOutput */ .chroma .s1b5e { color: #888888 } +/* GenericPrompt */ .chroma .s1b5f { color: #c65d09; font-weight: bold } +/* GenericStrong */ .chroma .s1b60 { font-weight: bold } +/* GenericSubheading */ .chroma .s1b61 { color: #800080; font-weight: bold } +/* GenericTraceback */ .chroma .s1b62 { color: #0044dd } +/* TextWhitespace */ .chroma .s1f41 { color: #bbbbbb } diff --git a/docs/src/package-lock.json b/docs/src/package-lock.json new file mode 100644 index 000000000..48e341a09 --- /dev/null +++ b/docs/src/package-lock.json @@ -0,0 +1,3 @@ +{ + "lockfileVersion": 1 +} diff --git a/docs/static/apple-touch-icon.png b/docs/static/apple-touch-icon.png Binary files differnew file mode 100644 index 000000000..50e23ce1d --- /dev/null +++ b/docs/static/apple-touch-icon.png diff --git a/docs/static/css/hugofont.css b/docs/static/css/hugofont.css new file mode 100644 index 000000000..09d6ce070 --- /dev/null +++ b/docs/static/css/hugofont.css @@ -0,0 +1,184 @@ +@font-face { + font-family: 'hugo'; + src:url('../fonts/hugo.eot'); + src:url('../fonts/hugo.eot?#iefix') format('embedded-opentype'), + url('../fonts/hugo.woff') format('woff'), + url('../fonts/hugo.ttf') format('truetype'), + url('../fonts/hugo.svg#hugo') format('svg'); + font-weight: normal; + font-style: normal; +} + +[class^="icon-"], [class*=" icon-"] { + font-family: 'hugo'; + speak: none; + font-style: normal; + font-weight: normal; + font-variant: normal; + text-transform: none; + line-height: 1; + + /* Better Font Rendering =========== */ + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.icon-home:before { + content: "\21"; +} +.icon-html5:before { + content: "\23"; +} +.icon-css3:before { + content: "\24"; +} +.icon-console:before { + content: "\25"; +} +.icon-link:before { + content: "\26"; +} +.icon-fire:before { + content: "\28"; +} +.icon-check-alt:before { + content: "\29"; +} +.icon-hugo_serif:before { + content: "\e600"; +} +.icon-x-altx-alt:before { + content: "\2a"; +} +.icon-circlestar:before { + content: "\2b"; +} +.icon-file-css:before { + content: "\2c"; +} +.icon-radio-checked:before { + content: "\2e"; +} +.icon-quote:before { + content: "\44"; +} +.icon-airplane2:before { + content: "\45"; +} +.icon-heart:before { + content: "\46"; +} +.icon-rocket:before { + content: "\47"; +} +.icon-house:before { + content: "\48"; +} +.icon-arrow-right:before { + content: "\e001"; +} +.icon-arrow-left:before { + content: "\e002"; +} +.icon-flow-branch:before { + content: "\e004"; +} +.icon-pen:before { + content: "\e005"; +} +.icon-idea:before { + content: "\3b"; +} +.icon-gears:before { + content: "\3c"; +} +.icon-talking:before { + content: "\3d"; +} +.icon-tag:before { + content: "\3e"; +} +.icon-rocket2:before { + content: "\3f"; +} +.icon-octocat:before { + content: "\41"; +} +.icon-announce:before { + content: "\42"; +} +.icon-edit:before { + content: "\43"; +} +.icon-power-cord:before { + content: "\50"; +} +.icon-apple:before { + content: "\51"; +} +.icon-windows8:before { + content: "\52"; +} +.icon-tux:before { + content: "\53"; +} +.icon-file-xml:before { + content: "\54"; +} +.icon-fork:before { + content: "\55"; +} +.icon-arrow-down:before { + content: "\56"; +} +.icon-pacman:before { + content: "\e000"; +} +.icon-embed:before { + content: "\2f"; +} +.icon-code:before { + content: "\30"; +} +.icon-cc:before { + content: "\31"; +} +.icon-cc-by:before { + content: "\32"; +} +.icon-cc-nc:before { + content: "\33"; +} +.icon-beaker-alt:before { + content: "\39"; +} +.icon-w3c:before { + content: "\3a"; +} +.icon-bolt:before { + content: "\49"; +} +.icon-flow-tree:before { + content: "\4a"; +} +.icon-twitter:before { + content: "\4b"; +} +.icon-beaker:before { + content: "\4c"; +} +.icon-images:before { + content: "\4d"; +} +.icon-bubbles:before { + content: "\4e"; +} +.icon-meter2:before { + content: "\4f"; +} +.icon-hugo_sans:before { + content: "\68"; +} +.icon-spf13:before { + content: "\27"; +} diff --git a/docs/static/css/style.css b/docs/static/css/style.css new file mode 100644 index 000000000..312c247c9 --- /dev/null +++ b/docs/static/css/style.css @@ -0,0 +1,684 @@ +/* Import fonts */ +@import url(//fonts.googleapis.com/css?family=Lato:300,400,700,900,300italic,400italic,700italic,900italic); + +/* ****************************** + For the github btn +****************************** */ + +.github-btn { + font-size: 11px; +} +.github-btn, +.github-btn .btn { + font-weight: bold; +} +.github-btn .btn-default { + text-shadow: 0 1px 0 #fff; + background-image: -webkit-gradient(linear, left 0%, left 100%, from(#ffffff), to(#e0e0e0)); + background-image: -webkit-linear-gradient(top, #ffffff, 0%, #e0e0e0, 100%); + background-image: -moz-linear-gradient(top, #ffffff 0%, #e0e0e0 100%); + background-image: linear-gradient(to bottom, #ffffff 0%, #e0e0e0 100%); + background-repeat: repeat-x; + border-color: #dbdbdb; + border-color: #ccc; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0); +} + +.github-btn .btn-default:hover, .github-btn .btn-default:focus { + background-color: #e0e0e0; + background-position: 0 -15px; + color: #333; + border-color: #adadad; +} + +.nav-github { + width: 325px; +} + .nav-github > span { + padding-right: 0.5em; + } + + .icon-github { + display: inline-block; + font-family: FontAwesome; + font-style: normal; + font-weight: normal; + line-height: 1; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + } + + .github-watchers .icon-github:before{ + content: "\f005"; + } + + .github-forks .icon-github:before{ + content: "\f126"; + } + +.gh-count{ + padding: 2px 5px 3px 4px; + color: #555; + text-decoration: none; + text-shadow:0 1px 0 #fff; + white-space:nowrap; + cursor:pointer; + border-radius:3px; + position:relative; + display:none; + margin-left:4px; + background-color:#fafafa; + border:1px solid #d4d4d4; +} + +.gh-count:hover,.gh-count:focus{color:#4183c4;text-decoration: none;} +.gh-count:before,.gh-count:after{content:' ';position:absolute;display:inline-block;width:0;height:0;border-color:transparent;border-style:solid} +.gh-count:before{top:50%;left:-3px;margin-top:-4px;border-width:4px 4px 4px 0;border-right-color:#fafafa} +.gh-count:after{top:50%;left:-4px;z-index:-1;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#d4d4d4} + +thead { + font-weight: bold; +} + +table { + width: 100%; +} + + +h1, h2, h3 { + margin-top: .8em; + margin-bottom: .7em; +} + +pre code { + font-size: 15px !important; + font-family: Menlo, Consolas, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', Monaco, 'Droid Sans Mono', monospace; +} + +body { + color: #353b44; + background: #edece4; + font-family: 'Lato', sans-serif; + padding: 0px !important; + margin: 0px !important; + font-size: 16px !important; + font-weight: 400; +} + +h2,h3,h4,h5{ + font-weight: 700; +} + + +h1[id]:before, h2[id]:before, h3[id]:before, h4[id]:before, h5[id]:before { + display: block; + content: " "; + margin-top: -75px; + height: 75px; + visibility: hidden; +} + +label{ + font-weight: 400; +} + +.sidebar-menu .fa { + width: 30px; + text-align: center; +} + +a, a:hover, a:focus { + text-decoration: none; + outline: none; + outline: 0; +} + +img { + max-width: 100%; + height: auto; +} + +.panel-body a { + line-height: 1.1; + display: inline-block; +} +.panel-body a:after { + display: block; + content: ""; + height: 1px; + width: 0%; + background-color: #ff4088; + -webkit-transition: width 0.5s ease; + -moz-transition: width 0.5s ease; + -ms-transition: width 0.5s ease; + transition: width 0.5s ease; +} + +.panel-body a:hover:after, .panel-body a:focus:after { + width: 100%; +} + +input:focus, textarea:focus { outline: none; } +*:focus {outline: none;} +::selection { + background: #ff4088; + color: #fff; +} +::-moz-selection { + background: #ff4088; + color: #fff; +} + +#container { + width: 100%; + height: 100%; +} + +/*sidebar navigation*/ + +#sidebar { + width: 214px; + height: 100%; + position: fixed; + background: #ffffff; + overflow-y: auto; +} + + +ul.sidebar-menu , ul.sidebar-menu li ul.sub{ + margin: -2px 0 0; + padding: 0; +} + +ul.sidebar-menu { + margin-top: 60px; +} + +#sidebar > ul > li > ul.sub { + display: none; +} + +#sidebar > ul > li.active > ul.sub, #sidebar > ul > li > ul.sub > li > a { + display: block; +} + +ul.sidebar-menu li ul.sub li{ + background: #eeeeee; + margin-bottom: 0; + margin-left: 0; + margin-right: 0; +} + +ul.sidebar-menu li ul.sub li:last-child{ + border-radius: 0 0 4px 4px; + -webkit-border-radius: 0 0 4px 4px; +} + +ul.sidebar-menu li ul.sub li a { + font-size: 12px; + padding: 0 0 0 32px; + line-height: 35px; + height: 35px; + -webkit-transition: all 0.3s ease; + -moz-transition: all 0.3s ease; + -o-transition: all 0.3s ease; + -ms-transition: all 0.3s ease; + transition: all 0.3s ease; + color: #656C73; + font-size: 14px; +} + +ul.sidebar-menu li ul.sub li a:hover, ul.sidebar-menu li ul.sub li.active a { + color: #ff4088; + -webkit-transition: all 0.3s ease; + -moz-transition: all 0.3s ease; + -o-transition: all 0.3s ease; + -ms-transition: all 0.3s ease; + transition: all 0.3s ease; + display: block; +} + +ul.sidebar-menu li{ + line-height: 20px !important; +} + +ul.sidebar-menu li.sub-menu{ + line-height: 15px; + font-size: 16px; +} + +ul.sidebar-menu li a span{ + display: inline-block; +} + +ul.sidebar-menu li a{ + color: #72767D; + text-decoration: none; + display: block; + padding: 10px 0 10px 10px; + font-size: 16px; + font-weight: 400; + outline: none; + -webkit-transition: all 0.3s ease; + -moz-transition: all 0.3s ease; + -o-transition: all 0.3s ease; + -ms-transition: all 0.3s ease; + transition: all 0.3s ease; + border-right: 1px solid #D7D7D7; + border-bottom: 1px solid #D7D7D7; + white-space: nowrap; +} + +ul.sidebar-menu li.active a, ul.sidebar-menu li a:hover, ul.sidebar-menu li a:focus { + background: #eeeeee; + color: #ff4088; + display: block; + /*border-radius: 4px; + -webkit-border-radius: 4px;*/ + -webkit-transition: all 0.3s ease; + -moz-transition: all 0.3s ease; + -o-transition: all 0.3s ease; + -ms-transition: all 0.3s ease; + transition: all 0.3s ease; +} +ul.sidebar-menu li a:hover, ul.sidebar-menu li a:focus { + border-bottom: 1px solid #ff4088; +} +/*ul.sidebar-menu li.active a,*/ ul.sidebar-menu .sub-menu li.active a{ + border-bottom: 1px solid #ff4088; +} + +ul.sidebar-menu li a i { + font-size: 18px; + padding-right: 6px; + /*color: #ff4088;*/ +} + +ul.sidebar-menu li a:hover i, ul.sidebar-menu li a:focus i { + color: #ff4088; +} + +ul.sidebar-menu li.active a i { + color: #ff4088; +} + + +#sidebar ul > li > a .menu-arrow { + float: right; + margin-right: 8px; + margin-top: 6px; +} + +@-moz-document url-prefix() { + #sidebar ul > li > a .menu-arrow { + float: right; + margin-right: 8px; + margin-top: -16px; + } +} + +#main-content { + margin-left: 200px; + line-height: 1.8; + font-size: 18px; +} + +.header { + min-height: 60px; + padding: 0 10px; +} +.header { + position: fixed; + left: 0; + right: 0; + z-index: 1002; + text-align:center; +} + + +.black-bg { + background: rgba(20,20,20,0.9); + border-bottom: 1px solid #f1f2f7; +} + +.wrapper { + display: inline-block; + margin-top: 60px; + padding: 0px 15px 15px 0px; + width: 100%; +} + +a.logo { + font-size: 22px; + font-weight: 400; + color: #8E8E93; + float: left; + margin-top: 10px; + text-transform: uppercase; +} + +a.logo:hover, a.logo:focus { + text-decoration: none; + outline: none; +} + +h1.top-menu { + margin-top: -5px; +} +.title-row { + margin-top: 15px; + margin-left: 16px; + color: #EEE; +} +.notification-row { + float: right; + margin-top: 15px; + margin-left: 65px; +} + + +.top-nav { + margin-top: 15px; +} + +/*--sidebar toggle---*/ + +.toggle-nav { + float: left; + padding-right: 5px; + margin-top: 20px; + cursor: pointer; + color: gray; +} + +.toggle-nav .icon-reorder { + cursor: pointer; + display: inline-block; + font-size: 20px; +} + + +@-webkit-keyframes square { + 0% { background-position: 0 0; } + 25% { background-position: 100% 0; } + 50% { background-position: 100% 100%; } + 75% { background-position: 0 100%; } + 100% { background-position: 0 0; } +} + +@-ms-keyframes square { + 0% { background-position: 0 0; } + 25% { background-position: 100% 0; } + 50% { background-position: 100% 100%; } + 75% { background-position: 0 100%; } + 100% { background-position: 0 0; } +} + +@keyframes square { + 0% { background-position: 0 0; } + 25% { background-position: 100% 0; } + 50% { background-position: 100% 100%; } + 75% { background-position: 0 100%; } + 100% { background-position: 0 0; } +} + +.navigation { + position: absolute; + top: 0; + bottom: 0; + margin: 0; + max-width: 150px; + min-width: 90px; + width:100%; + min-height:1200px; + cursor:pointer; + display: flex; + justify-content: center; + align-content: center; + flex-direction: column; + font-size: 6em; + color: rgba(0,0,0,0.5); + text-align: center; + -webkit-transition: all 350ms ease; + transition: all 350ms ease; +} + +.navigation.next { + right:0; +} + + +.navigation:hover { + background-color: rgba(0,0,0,0.1); +} + +/* Google Custom Search box */ + +input.gsc-input, +.gsc-input-box, +.gsc-input-box-hover, +.gsc-input-box-focus, +.gsc-search-button, +.gsc-inline-block { + box-sizing: content-box; + line-height: normal; +} + +.gsc-control-cse { + padding: 0.1em 0 0.5em 1em !important; + width: 16em !important; + float: right; +} + +input.gsc-search-button-v2 { + padding: 6px 12px !important; +} + +.gsc-search-box-tools .gsc-search-box .gsc-input { + padding-right: 1px !important; +} + +/* Styled keypress from Wikipedia */ + +kbd { + border: 1px solid #aaa; + -moz-border-radius: 0.2em; + -webkit-border-radius: 0.2em; + border-radius: 0.2em; + -moz-box-shadow: 0.1em 0.2em 0.2em #ddd; + -webkit-box-shadow: 0.1em 0.2em 0.2em #ddd; + box-shadow: 0.1em 0.2em 0.2em #ddd; + background-color: #f9f9f9; + background-image: -moz-linear-gradient(top, #eee, #f9f9f9, #eee); + background-image: -o-linear-gradient(top, #eee, #f9f9f9, #eee); + background-image: -webkit-linear-gradient(top, #eee, #f9f9f9, #eee); + background-image: linear-gradient(to bottom, #eee, #f9f9f9, #eee); + padding: 0.1em 0.3em; + font-family: inherit; + font-size: 0.85em; +} + +/* For definitions of variables */ + +dl { + margin: 1em; + border-bottom: 1px solid #ccc; +} + +dt { + float: left; + clear: left; + width: 9.5em; + margin: 0.125em; + padding: 2px 4px; +} + +dd { + padding: 0.2em 0 0.2em 10em; + border-top: 1px solid #ccc; +} + +/* Prevent linebreak right after an icon */ +#main-content .fa { + display: inline; +} + +/* Logo for FreeBSD until Font Awesome adds it, see https://github.com/FortAwesome/Font-Awesome/issues/1116 */ +i.freebsd-19px:before { + content: url(/img/freebsd-19px.svg); + vertical-align: -7%; +} + +/* Responsive videos */ +.video-container { + position: relative; + padding-bottom: 56.25%; /* 16:9 */ + padding-top: 30px; + height: 0; + overflow: hidden; + margin: 20px 0; +} + +.video-container iframe, +.video-container object, +.video-container embed { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; +} + +/* Google custom search */ +.cse { + margin-top: 20px; + padding-right: 20px; +} + + +/* Table of contents */ + +.toc ul { list-style: none; margin: 0; padding: 0 5px; } +.toc ul li { display: inline; } +#TableOfContents > ul > li > ul > li > ul li { margin-right: 8px; } +#TableOfContents > ul > li > ul > li > a, #TableOfContents > ul > li > a { font-weight: bold; background-color: #eeeeee; padding: 0 10px; margin: 0 2px; } +#TableOfContents > ul > li > ul > li > a { font-style: italic; } +.toc.compact ul > li > ul > li > ul { display: none; } + +#toc { + position:fixed; + background-color: rgba(0, 0, 0, 0.1); + padding: 10px 50px 10px 20px; +} + +.showcase-container { + display: inline-block; + position: relative; + width: 100%; +} + +.showcase-container img { + border: 1px solid #555; +} + +.showcase-container h4 { + margin-top: 0; + margin-bottom: 0; +} +.dummy { + padding-top: 90%; /* Making rows line up even if img proportions off */ +} + +.thumbnail { + position: absolute; + top: 0; + bottom: 0; + left: 0; + right: 0; +} + +@media(max-width:1200px) { + .toc { + display: none; + } +} + + +/* Footer panel */ +.footer-panel { + width: 100%; + border-top:1px #efefef solid; + line-height: 30px; + padding: 25px 0px 15px; + margin-top: 15px; + background: #f9f9f9; + display: inline-block; + float: left; +} + +.footer-panel p { + padding-left: 20px; + padding-right: 20px; + font-size: medium; + font-style: italic; +} + + +/* Search form */ +#search-input { + width: 100%; + border: 1px solid #B3B3B3; + border-radius: 3px; + padding: 5px; +} + +#search-input:focus { + border-color: #F04A9C; +} + +/* Search result wrapper */ +.algolia-autocomplete { + width: 100%; +} + +/* List of search results */ +.aa-dropdown-menu { + box-sizing: border-box; + width: 100%; + background-color: #FFFFFF; + border: 1px solid #B3B3B3; + padding: 0; + font-size: 16px; + margin: 4 0 4 0; +} + +/* Highlight terms in search result headers */ +.algolia-docsearch-suggestion--category-header .algolia-docsearch-suggestion--highlight { + background-color: #F04A9C; +} + +/* Highlight terms in search result body */ +.algolia-docsearch-suggestion--highlight { + color: #F04A9C; + font-weight: 900; +} + +/* Currently selected search result */ +.aa-cursor .algolia-docsearch-suggestion--content { + color: inherit; +} + +.aa-cursor .algolia-docsearch-suggestion { + background: #EFEFEF; + color: #353B44; +} + +.algolia-docsearch-suggestion { + font-size: 16px; + color: #9AA2AB; +} + +.algolia-docsearch-suggestion--category-header, +.algolia-docsearch-suggestion--subcategory-column { + display: none !important; +} diff --git a/docs/static/favicon.ico b/docs/static/favicon.ico Binary files differnew file mode 100644 index 000000000..36693330b --- /dev/null +++ b/docs/static/favicon.ico diff --git a/docs/static/fonts/hugo.eot b/docs/static/fonts/hugo.eot Binary files differnew file mode 100644 index 000000000..b92f00f93 --- /dev/null +++ b/docs/static/fonts/hugo.eot diff --git a/docs/static/fonts/hugo.svg b/docs/static/fonts/hugo.svg new file mode 100644 index 000000000..7913f7c1f --- /dev/null +++ b/docs/static/fonts/hugo.svg @@ -0,0 +1,63 @@ +<?xml version="1.0" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" > +<svg xmlns="http://www.w3.org/2000/svg"> +<metadata>Generated by IcoMoon</metadata> +<defs> +<font id="hugo" horiz-adv-x="1024"> +<font-face units-per-em="1024" ascent="960" descent="-64" /> +<missing-glyph horiz-adv-x="1024" /> +<glyph unicode=" " d="" horiz-adv-x="512" /> +<glyph unicode="!" d="M1024 352l-192 192v288h-128v-160l-192 192-512-512v-32h128v-320h320v192h128v-192h320v320h128z" /> +<glyph unicode="#" d="M60.538 960l82.144-921.63 368.757-102.37 369.723 102.525 82.301 921.475h-902.925zM784.63 658.573h-432.541l10.302-115.75h411.968l-31.042-347.010-231.843-64.254-231.573 64.254-15.83 177.512h113.494l8.048-90.232 125.862-33.915 0.278 0.078 125.934 33.992 13.070 146.55-391.742-0.002-30.494 341.8h566.214l-10.107-113.024z" /> +<glyph unicode="$" d="M152.389 911.478l-34.362-171.926h699.749l-21.883-111.054h-700.189l-33.891-171.898h699.683l-39.018-196.064-282.013-93.422-244.4 93.422 16.728 85.042h-171.898l-40.896-206.352 404.226-154.704 466.006 154.704 153.768 772.253z" /> +<glyph unicode="%" d="M0 896v-896h1024v896h-1024zM960 64h-896v768h896v-768zM896 768h-768v-640h768v640zM448 448h-64v-64h-64v-64h-64v64h64v64h64v64h-64v64h-64v64h64v-64h64v-64h64v-64zM704 320h-192v64h192v-64z" /> +<glyph unicode="&" d="M953.395 885.358l-4.027 4.042c-94.149 94.134-248.194 94.134-342.326 0l-218.106-218.136c-94.134-94.133-94.134-248.176 0-342.31l4.026-4.026c7.832-7.848 16.146-14.925 24.736-21.458l79.848 79.85c-9.302 5.494-18.126 12.072-26.115 20.059l-4.042 4.042c-51.114 51.098-51.114 134.272 0 185.39l218.126 218.114c51.115 51.118 134.274 51.118 185.386 0l4.042-4.024c51.101-51.115 51.101-134.293 0-185.39l-98.686-98.686c17.133-42.307 25.248-87.4 24.538-132.386l152.605 152.605c94.136 94.134 94.136 248.178-0.003 342.315zM631.042 571.066c-7.832 7.832-16.146 14.922-24.736 21.44l-79.848-79.832c9.304-5.496 18.126-12.074 26.115-20.062l4.042-4.040c51.115-51.115 51.115-134.272 0-185.389l-218.128-218.133c-51.118-51.102-134.277-51.102-185.389 0l-4.042 4.042c-51.098 51.12-51.098 134.277 0 185.389l98.688 98.686c-17.134 42.306-25.246 87.402-24.538 132.386l-152.602-152.598c-94.136-94.133-94.136-248.178 0-342.325l4.026-4.032c94.152-94.128 248.192-94.128 342.328 0l218.11 218.118c94.134 94.133 94.134 248.194 0 342.326l-4.027 4.024z" /> +<glyph unicode="'" d="M512.604-54.759c-278.645 0-504.532 225.887-504.532 504.534 0 278.645 225.887 504.532 504.532 504.532 278.647 0 504.532-225.887 504.532-504.532 0-278.647-225.886-504.534-504.532-504.534zM512.604-22.58c260.876 0 472.355 211.479 472.355 472.355 0 260.874-211.479 472.355-472.355 472.355-260.874 0-472.355-211.481-472.355-472.355 0-260.876 211.481-472.355 472.355-472.355zM512.604 11.963c-241.796 0-437.81 196.016-437.81 437.812 0 241.795 196.014 437.81 437.81 437.81 241.796 0 437.81-196.016 437.81-437.81 0-241.796-196.014-437.812-437.81-437.812zM818.725 314.428c27.149 0 49.425 8.063 66.824 24.191 17.401 16.128 26.1 37.61 26.1 64.448 0 14.281-3.023 27.884-9.070 40.811-6.047 12.927-14.994 21.976-26.84 27.146 8.885 5.91 15.549 14.159 19.991 24.745 4.442 10.588 6.664 21.668 6.664 33.24 0 23.885-7.344 42.966-22.029 57.247-14.684 14.281-34.122 21.422-58.309 21.422-24.681 0-44.489-7.263-59.42-21.79-14.933-14.528-23.632-33.979-26.1-58.356h51.831c0.494 9.357 3.393 17.544 8.701 24.561 5.306 7.017 12.526 10.526 21.658 10.526 9.872 0 17.647-3.447 23.323-10.34 5.677-6.895 8.515-15.266 8.515-25.115 0-11.82-3.084-21.176-9.254-28.070-6.171-6.894-14.933-10.342-26.286-10.342h-5.923v-38.78l9.996 0.74c11.6 0.984 21.041-3.139 28.322-12.373 7.28-9.233 10.921-19.883 10.921-31.946 0-11.82-3.331-22.222-9.996-31.209-6.664-8.988-15.797-13.481-27.397-13.481-11.6 0-21.041 3.877-28.322 11.634-7.28 7.755-11.167 17.42-11.661 28.993h-54.794c1.481-25.115 10.923-46.045 28.322-62.787 17.401-16.744 38.812-25.115 64.234-25.115zM484.272 321.814h51.832v137.761h41.464v43.582h-41.464v57.431c0 1.355 0.062 3.509 0.184 6.464 0.124 2.955 0.371 5.232 0.741 6.833 0.37 1.6 0.863 3.569 1.481 5.908 0.617 2.339 1.419 4.186 2.406 5.54 0.987 1.355 2.222 2.771 3.703 4.248 1.481 1.477 3.208 2.523 5.184 3.139 1.974 0.616 4.195 0.924 6.663 0.924 5.677 0 12.711-2.093 21.102-6.28v46.167c-7.65 3.94-15.919 5.91-24.804 5.91-23.448 0-40.726-7.755-51.832-23.268-11.107-15.512-16.66-35.457-16.66-59.832v-53.184h-17.4v-43.582h17.4zM641.293 321.814h54.423v278.478h-91.074v-47.275h36.652zM181.097 315.906c19.745 0 36.466 5.848 50.164 17.544 13.699 11.694 20.549 27.268 20.549 46.719 0 14.282-3.395 25.3-10.181 33.056-6.788 7.757-15.859 14.097-27.211 19.021-2.716 1.231-6.356 2.709-10.923 4.432-4.566 1.723-8.083 3.139-10.551 4.247-2.468 1.109-5.122 2.463-7.959 4.063-2.838 1.601-4.874 3.448-6.109 5.54-1.233 2.093-1.851 4.37-1.851 6.833 0 4.186 1.727 7.817 5.184 10.896 3.455 3.077 7.404 4.616 11.846 4.616 9.378 0 18.511-4.186 27.397-12.557l22.213 29.915c-14.316 12.557-33.814 18.837-58.495 18.837-17.032 0-30.914-5.54-41.651-16.62-10.735-11.080-16.105-25.115-16.105-42.104 0-13.049 3.209-23.022 9.626-29.915 6.417-6.895 15.303-12.805 26.656-17.729 1.974-0.738 5.43-2.093 10.367-4.063 4.936-1.969 8.453-3.447 10.551-4.432 2.098-0.984 4.628-2.461 7.59-4.431 2.962-1.971 4.998-4.124 6.109-6.464 1.109-2.339 1.665-4.986 1.665-7.941 0-5.91-1.974-10.65-5.923-14.219-3.949-3.571-8.885-5.356-14.81-5.356-13.081 0-25.915 7.017-38.502 21.052l-23.694-30.655c16.782-20.191 38.132-30.285 64.049-30.285zM273.246 225.049h51.831v113.754h0.741c4.936-7.14 11.846-12.741 20.733-16.804 8.885-4.063 18.141-6.094 27.765-6.094 25.67 0 46.093 9.664 61.273 28.992 15.179 19.329 22.769 42.166 22.769 68.513 0 25.115-7.652 47.335-22.955 66.664-15.301 19.329-35.295 28.993-59.976 28.993-20.979 0-37.763-7.509-50.35-22.53v16.62h-51.831zM362.839 361.703c-12.588 0-22.891 5.232-30.912 15.696-8.023 10.464-12.034 22.222-12.034 35.271 0 13.049 4.011 24.745 12.034 35.087 8.021 10.34 18.325 15.512 30.912 15.512 12.588 0 22.893-5.172 30.914-15.512 8.021-10.342 12.032-22.038 12.032-35.087 0-13.049-4.011-24.807-12.032-35.271-8.021-10.464-18.327-15.696-30.914-15.696z" /> +<glyph unicode="(" d="M321.008-64c-68.246 142.008-31.902 223.378 20.55 300.043 57.44 83.957 72.243 167.067 72.243 167.067 0 0 45.155-58.701 27.093-150.509 79.771 88.8 94.824 230.28 82.782 284.464 180.314-126.011 257.376-398.856 153.522-601.066 552.371 312.533 137.398 780.171 65.154 832.85 24.082-52.675 28.648-141.85-20-185.126-82.352 312.277-285.971 376.277-285.971 376.277 24.082-161.045-87.296-337.144-194.696-468.73-3.774 64.216-7.782 108.528-41.55 169.979-7.581-116.656-96.733-211.747-120.874-328.627-32.702-158.286 24.494-274.181 241.747-396.622z" /> +<glyph unicode=")" d="M512 960c-282.752 0-512-229.248-512-512s229.248-512 512-512 512 229.248 512 512-229.248 512-512 512zM432.64 211.744l-235.584 235.616 90.496 90.496 145.056-145.12 307.744 307.744 90.496-90.496-398.208-398.24z" /> +<glyph unicode="*" d="M512 960c-282.752 0-512-229.248-512-512s229.248-512 512-512 512 229.248 512 512-229.248 512-512 512zM765.248 285.248l-90.496-90.496-162.752 162.752-162.752-162.752-90.496 90.496 162.752 162.752-162.752 162.752 90.496 90.496 162.752-162.752 162.752 162.752 90.496-90.496-162.752-162.752 162.752-162.752z" /> +<glyph unicode="+" d="M512 960c-282.77 0-512-229.23-512-512s229.23-512 512-512c282.77 0 512 229.23 512 512 0 282.77-229.23 512-512 512zM515.376 780.874l80.686-251.936 264.438-5.938-214.69-154.501 76.066-253.376-213.315 156.438-217.435-150.688 82.874 251.25-210.499 160.251 264.562-1.186 87.314 249.685z" /> +<glyph unicode="," d="M384 348.554v114.226c0 15.128 6.696 29.437 18.854 40.286 12.16 10.848 28.192 16.826 45.146 16.826v57.11c-70.4 0-128-51.4-128-114.222v-85.666c0-15.771-14.328-28.558-32-28.558h-32v-57.11h32c17.674 0 32-12.79 32-28.558v-85.675c0-62.814 57.6-114.214 128-114.214v57.112c-16.954 0-32.987 5.976-45.146 16.826-12.158 10.853-18.854 25.154-18.854 40.278v114.234c0 15.77-14.328 28.554-32 28.554 17.674 0 32 12.79 32 28.554zM640 291.446v-114.234c0-15.125-6.696-29.426-18.854-40.278-12.158-10.85-28.19-16.826-45.146-16.826v-57.112c70.402 0 128 51.4 128 114.214v85.675c0 15.771 14.328 28.558 32 28.558h32v57.11h-32c-17.672 0-32 12.79-32 28.558v85.666c0 62.824-57.598 114.222-128 114.222v-57.11c16.958 0 32.987-5.978 45.146-16.83 12.16-10.848 18.854-25.157 18.854-40.283v-114.227c0-15.766 14.328-28.552 32-28.552-17.672 0.002-32-12.789-32-28.552zM903.432 760.57l-142.864 142.862c-31.112 31.112-92.568 56.568-136.568 56.568h-480c-44 0-80-36-80-80v-864c0-44 36-80 80-80h736c44 0 80 36 80 80v608c0 44-25.456 105.458-56.568 136.57zM858.178 715.314c3.13-3.13 6.25-6.974 9.28-11.314h-163.458v163.456c4.339-3.030 8.184-6.15 11.314-9.28l142.864-142.862zM896 16c0-8.672-7.328-16-16-16h-736c-8.672 0-16 7.328-16 16v864c0 8.672 7.328 16 16 16h480c4.832 0 10.254-0.61 16-1.704v-254.296h254.296c1.094-5.746 1.704-11.166 1.704-16v-608z" /> +<glyph unicode="." d="M512 960c-282.77 0-512-229.23-512-512s229.23-512 512-512 512 229.23 512 512-229.23 512-512 512zM512 64c-212.078 0-384 171.922-384 384s171.922 384 384 384c212.078 0 384-171.922 384-384 0-212.078-171.922-384-384-384zM320 448c0-106.039 85.961-192 192-192s192 85.961 192 192c0 106.039-85.961 192-192 192-106.039 0-192-85.961-192-192z" /> +<glyph unicode="/" d="M288 704l-256-256 256-256h128l-256 256 256 256h-128zM736 704h-128l256-256-256-256h128l256 256-256 256z" /> +<glyph unicode="0" d="M128 448l256 256h-128l-256-256 256-256h128zM768 704h-128l256-256-256-256h128l256 256zM544 832l-160-768h96l160 768z" /> +<glyph unicode="1" d="M505.446 939.469c-271.462-3.635-488.55-226.611-484.915-498.022 3.635-271.411 226.611-488.55 498.074-484.915 271.411 3.584 488.55 226.611 484.915 498.074-3.635 271.411-226.714 488.499-498.074 484.864zM517.171 60.006c-214.323-2.918-390.349 168.499-393.216 382.822-2.867 214.323 168.55 390.349 382.874 393.216 214.272 2.867 390.298-168.55 393.165-382.822s-168.499-390.298-382.822-393.216zM391.731 364.698c-20.736 0-36.454 7.578-47.104 22.733-10.701 15.155-15.974 35.328-15.974 60.57 0 55.501 21.043 83.251 63.078 83.251 8.397 0 17.51-2.816 27.341-8.397 9.779-5.632 18.074-15.462 24.832-29.44l63.027 32.819c-25.19 45.414-67.021 68.147-125.338 68.147-39.834 0-72.704-13.158-98.816-39.526-26.061-26.368-39.117-62.003-39.117-106.854 0-45.978 12.902-81.92 38.707-107.725 25.754-25.805 59.75-38.707 101.786-38.707 26.317 0 50.432 6.605 72.294 19.814s39.014 31.283 51.354 54.323l-58.061 29.44c-11.213-26.931-30.566-40.448-58.010-40.448zM663.398 364.698c-20.787 0-36.506 7.578-47.104 22.733-10.701 15.104-15.974 35.328-15.974 60.57 0 55.501 20.992 83.251 63.078 83.251 9.011 0 18.381-2.816 28.211-8.397 9.779-5.632 18.125-15.462 24.781-29.44l62.208 32.819c-24.678 45.414-66.099 68.147-124.518 68.147-39.782 0-72.704-13.158-98.765-39.526-26.112-26.368-39.117-61.952-39.117-106.803 0-45.978 12.749-81.92 38.246-107.725 25.549-25.805 59.648-38.707 102.246-38.707 25.805 0 49.613 6.605 71.475 19.814 21.811 13.21 39.219 31.283 52.122 54.323l-58.88 29.44c-11.213-26.982-30.515-40.499-58.010-40.499z" /> +<glyph unicode="2" d="M512 627.968c45.67 0 68.506 22.784 68.506 68.403 0 46.234-22.835 69.325-68.506 69.325s-68.454-23.091-68.454-69.325c0-45.619 22.784-68.403 68.454-68.403zM612.966 601.549h-201.882c-8.806 0-16.23-3.072-22.426-9.216s-9.216-13.619-9.216-22.374v-201.011h56.166v-238.746h152.678v238.746h56.218v201.062c0 8.755-3.226 16.179-9.626 22.374-6.451 6.093-13.722 9.165-21.914 9.165zM512 939.52c-271.462 0-491.52-220.058-491.52-491.52s220.058-491.52 491.52-491.52 491.52 220.058 491.52 491.52-220.058 491.52-491.52 491.52zM512 46.592c-221.696 0-401.408 179.712-401.408 401.408s179.712 401.408 401.408 401.408 401.408-179.712 401.408-401.408-179.712-401.408-401.408-401.408z" /> +<glyph unicode="3" d="M512 939.52c-271.462 0-491.52-220.058-491.52-491.52s220.058-491.52 491.52-491.52 491.52 220.058 491.52 491.52-220.058 491.52-491.52 491.52zM132.864 579.789l249.344-111.667 78.080-34.202 57.958-26.368 47.411-20.224c8.806-7.578 13.21-17.51 13.21-29.798 0-17.613-6.042-30.157-18.022-37.734-11.981-7.578-26.522-11.418-43.469-11.418-41.011 0-77.568 14.899-109.773 44.749l-67.533-68.454c45.056-38.605 94.822-58.266 149.197-58.778v-75.52h57.037v75.52c33.894 2.918 63.334 14.131 88.218 33.792 24.832 19.61 40.55 44.851 46.95 75.878l182.221-81.152c-68.301-123.853-200.192-207.821-351.693-207.821-221.696 0-401.408 179.712-401.408 401.408 0 46.182 7.885 90.522 22.272 131.789zM650.803 455.014l-79.002 35.123-105.37 47.36c-2.918 4.096-4.352 8.192-4.352 12.288 0 14.029 5.99 24.013 18.022 29.85 11.93 5.837 25.549 8.806 40.806 8.806 28.672 0 56.73-9.677 84.275-28.979l64.102 65.843c-36.915 28.109-77.875 43.315-122.88 45.67v75.418h-57.088v-75.469c-30.464-1.741-57.088-10.445-79.923-25.856-22.784-15.565-38.298-36.147-46.49-61.901l-187.136 83.968c71.629 109.67 195.43 182.272 336.23 182.272 221.696 0 401.408-179.712 401.408-401.408 0-35.994-4.813-70.861-13.722-103.987l-248.883 111.002z" /> +<glyph unicode="9" d="M256 672c0-17.673 14.327-32 32-32s32 14.327 32 32c0 17.673-14.327 32-32 32-17.673 0-32-14.327-32-32zM448 960h-384c-35.36 0-64-28.64-64-64v-704c0-141.376 114.624-256 256-256s256 114.624 256 256v704c0 35.36-28.64 64-64 64zM160 320c-17.664 0-32 14.304-32 32s14.336 32 32 32c17.696 0 32-14.304 32-32s-14.304-32-32-32zM320 192c-35.36 0-64 28.64-64 64s28.64 64 64 64 64-28.64 64-64-28.64-64-64-64zM384 448h-64c0 35.328-28.672 64-64 64s-64-28.672-64-64h-64v384h256v-384z" horiz-adv-x="512" /> +<glyph unicode=":" d="M916.334 422.837c2.474 9.934-0.074 20.15-9.362 23.406l-38.619 17.554c-9.544 3.984-21.693-1.398-23.406-10.531-7.454-15.958-18.022-29.022-35.107-29.258-14.824 0-26.917 7.997-36.278 23.99-9.362 15.994-14.043 36.864-14.043 62.61 0 25.746 4.682 46.813 14.043 63.197 9.362 16.384 21.454 24.576 36.278 24.576 18.701-1.358 27.574-13.168 35.107-28.086 3.994-9.8 14.859-12.102 23.406-9.362l38.619 17.554c8.944 4.707 12.928 16.362 8.192 24.576-22.626 48.373-57.734 72.558-105.326 72.558-39.79 0-71.971-15.214-96.549-45.642-24.576-30.429-36.864-70.218-36.864-119.37 0-49.152 12.288-88.746 36.864-118.784 24.576-30.038 56.758-45.056 96.549-45.056 47.592 0 83.090 25.357 106.496 76.067zM544.182 346.77c62.034 0.96 109.272 43.584 110.006 99.474-1.096 29.514-12.965 52.472-33.938 70.218 18.47 17.44 29.074 41.194 29.258 64.366-1.536 63.242-54.136 93.118-105.326 93.622-44.47 0-78.798-17.554-102.986-52.662-5.462-7.805-4.682-15.606 2.339-23.406l28.086-25.746c9.003-8.026 19.018-6.542 26.917 1.17 11.702 16.384 25.746 24.576 42.13 24.576 13.262 0 21.066-3.315 23.406-9.949 4.512-9.84 3.216-18.816 0-26.917-12.070-12.498-29.712-8.778-46.813-8.778-11.122-0.374-19.725-6.896-19.894-17.554v-42.13c0.97-12.086 9.208-20.070 19.894-17.554 12.901 0.011 45.614 1.472 50.909-9.362 2.73-6.242 4.096-11.314 4.096-15.214 0-17.944-9.752-26.917-29.258-26.917-18.725 0-34.328 8.582-46.813 25.746-7.635 9.24-19.701 9.374-26.917 2.339l-29.258-29.258c-7.022-7.022-7.802-14.434-2.339-22.237 26.522-37.31 65.134-53.506 106.496-53.834zM428.325 648.704c2.138 11.218-6.122 22.038-16.384 22.237h-51.491c-9.362 0-14.824-4.682-16.384-14.043l-24.578-125.221-25.746 125.219c-2.339 9.362-8.192 14.043-17.554 14.043h-37.45c-10.144 0-15.997-4.682-17.554-14.043l-25.747-125.219-24.576 125.219c-1.56 9.362-7.413 14.043-17.554 14.043h-50.322c-12.826-1.010-18.992-11.152-17.554-22.237l64.366-283.21c2.339-9.362 8.192-14.043 17.554-14.043h49.152c9.362 0 15.214 4.682 17.554 14.043l23.406 117.027 23.406-117.027c1.56-9.362 7.413-14.043 17.554-14.043h49.152c9.362 0 15.214 4.682 17.554 14.043zM1024 960v-784l-512-240-512 240v784z" /> +<glyph unicode=";" d="M619.733 7.493c4.4 0 8.25-1.65 11.549-4.95 3.301-3.301 4.95-7.15 4.95-11.549v-37.397c0-5.134-1.65-9.35-4.95-12.648-3.301-3.301-7.15-4.95-11.549-4.95h-214.48c-11.731 0-17.598 5.866-17.598 17.598v37.397c0 4.4 1.65 8.25 4.95 11.549 3.301 3.301 7.515 4.95 12.648 4.95zM619.733 114.182c4.4 0 8.25-1.65 11.549-4.95 3.301-3.301 4.95-7.515 4.95-12.648v-37.397c0-4.4-1.65-8.25-4.95-11.549-3.301-3.301-7.15-4.95-11.549-4.95h-214.48c-5.134 0-9.35 1.65-12.648 4.95-3.301 3.301-4.95 7.15-4.95 11.549v37.397c0 11.731 5.866 17.598 17.598 17.598zM840.811 455.149v0l91.293-14.298c9.531-1.466 17.232-5.685 23.098-12.648 5.866-6.966 8.066-14.482 6.6-22.547-1.466-8.8-5.866-15.582-13.198-20.347-7.331-4.766-16.133-6.416-26.398-4.95l-91.293 14.298c-10.266 1.466-18.147 5.866-23.648 13.198-5.501 7.331-7.515 15.032-6.050 23.098 1.466 8.066 5.866 14.482 13.198 19.248 7.331 4.766 16.133 6.416 26.398 4.95zM830.91 663.029v0l84.691 37.397c8.8 4.4 17.414 5.315 25.848 2.75 8.432-2.576 14.482-7.893 18.147-15.949 3.666-8.070 3.666-16.136 0-24.198-3.666-8.066-10.266-13.931-19.798-17.598l-84.691-38.496c-8.8-3.666-17.414-4.216-25.848-1.65-8.432 2.57-14.482 7.886-18.147 15.949-3.666 8.070-3.485 16.136 0.55 24.198 4.034 8.070 10.448 13.936 19.248 17.598zM687.925 803.814v0l50.595 78.091c5.866 8.066 13.016 13.382 21.448 15.949 8.445 2.566 16.328 1.65 23.648-2.75 7.331-5.134 11.549-12.098 12.648-20.898 1.101-8.8-0.917-17.232-6.050-25.298l-50.595-78.091c-5.866-8.077-13.016-13.392-21.448-15.949-8.432-2.566-16.314-1.65-23.648 2.75-7.334 4.4-11.731 11.182-13.198 20.347-1.466 9.166 0.734 17.782 6.6 25.848zM184.174 455.149c9.531 1.466 18.147-0.184 25.848-4.95s12.282-11.182 13.747-19.248c1.466-8.066-0.734-15.763-6.6-23.098-5.866-7.331-13.931-11.731-24.198-13.198l-91.293-14.298c-9.531-1.466-18.147 0.184-25.848 4.95-7.701 4.766-12.282 11.549-13.747 20.347-1.466 8.067 0.734 15.584 6.6 22.547 5.866 6.968 13.931 11.184 24.198 12.648zM194.075 663.029c8.8-3.666 15.214-9.531 19.248-17.598 4.040-8.066 4.224-16.133 0.55-24.198-3.666-8.066-9.901-13.382-18.698-15.949-8.8-2.566-17.598-2.016-26.398 1.65l-84.691 38.496c-8.8 3.67-15.214 9.536-19.248 17.598-4.034 8.066-4.218 16.133-0.55 24.198 3.666 8.066 9.715 13.382 18.147 15.949 8.432 2.566 17.414 1.65 26.949-2.75zM335.962 803.814c5.866-8.072 8.066-16.686 6.6-25.848-1.466-9.166-5.866-15.949-13.198-20.347-6.6-4.4-14.298-5.315-23.098-2.75-8.8 2.566-15.763 7.882-20.898 15.949l-50.595 78.091c-5.866 8.066-8.066 16.498-6.6 25.298 1.466 8.8 5.866 15.763 13.198 20.898 6.6 4.4 14.298 5.315 23.098 2.75 8.8-2.578 15.763-7.896 20.898-15.949zM543.842 832.413c0-10.266-2.934-18.698-8.8-25.298s-13.198-9.901-21.998-9.901c-8.066 0-15.032 3.301-20.898 9.901-5.866 6.6-8.8 15.032-8.8 25.298v92.39c0 10.266 2.934 18.698 8.8 25.298s12.832 9.901 20.898 9.901c8.8 0 16.133-3.301 21.998-9.901 5.866-6.6 8.8-15.032 8.8-25.298zM721.474 396.306c-14.298-29.698-29.88-61.41-46.746-95.139-26.606-43.034-25.262-93.942-41.795-138.037-2.934-7.701-8.432-12.282-16.498-13.747h-208.979c-8.066 1.466-13.563 6.050-16.498 13.747-12.744 48.162-20.482 95.064-41.795 138.037-16.864 33.73-32.446 65.445-46.746 95.139-32.968 72.878-50.19 157.211-16.498 232.627 12.098 26.398 28.963 48.762 50.595 67.094 21.632 18.331 47.296 32.080 76.992 41.246 29.698 9.166 62.144 13.747 97.341 13.747h2.202c35.195 0 67.645-4.584 97.341-13.747 29.698-9.166 55.36-22.914 76.992-41.246 21.632-18.331 38.68-40.696 51.146-67.094 31.584-79.118 18.672-157.61-17.048-232.627z" /> +<glyph unicode="<" d="M776.653 882.243l-14.434-69.166c-14.795-2.323-29.048-6.606-42.406-12.582l-49.686 50.198-56.584-45.79 38.702-59.138c-8.622-11.83-15.664-24.834-21.013-38.83l-70.698 0.32-7.6-72.422 69.166-14.434c2.323-14.787 6.61-28.926 12.582-42.278l-50.198-49.814 45.79-56.584 59.138 38.766c11.821-8.616 24.848-15.73 38.83-21.075l-0.32-70.634 72.422-7.6 14.37 69.166c14.8 2.322 29.043 6.542 42.406 12.518l49.75-50.198 56.584 45.854-38.766 59.074c8.622 11.826 15.726 24.84 21.075 38.83l70.634-0.256 7.6 72.422-69.166 14.306c-2.323 14.808-6.536 29.101-12.518 42.47l50.198 49.686-45.854 56.584-59.074-38.702c-11.834 8.629-24.89 15.726-38.894 21.075l0.32 70.634-72.358 7.6zM788.659 714.026c2.275-0.008 4.584-0.077 6.898-0.32 36.998-3.886 63.792-37.022 59.904-74.018-3.886-36.998-37.022-63.856-74.018-59.968-36.998 3.886-63.856 37.022-59.968 74.018 3.643 34.686 33.046 60.406 67.186 60.288zM268.995 708.085l-9.707-96.181c-19.802-5.278-38.558-13.078-55.882-23.118l-74.848 61.182-70.442-70.442 61.182-74.912c-10.042-17.33-17.843-36.074-23.118-55.882l-96.181-9.643v-99.627l96.181-9.707c5.275-19.79 13.086-38.502 23.118-55.818l-61.182-74.912 70.442-70.442 74.912 61.182c17.315-10.034 36.026-17.843 55.818-23.118l9.707-96.181h99.627l9.643 96.181c19.808 5.275 38.552 13.078 55.882 23.118l74.912-61.182 70.442 70.442-61.182 74.848c10.042 17.325 17.84 36.080 23.118 55.882l96.181 9.707v99.627l-96.181 9.643c-5.278 19.818-13.070 38.608-23.118 55.946l61.182 74.848-70.442 70.442-74.848-61.182c-17.338 10.050-36.126 17.84-55.946 23.118l-9.643 96.181h-99.627zM318.81 481.43c50.901 0 92.157-41.256 92.157-92.157s-41.256-92.157-92.157-92.157c-50.901 0-92.157 41.256-92.157 92.157 0 50.901 41.256 92.157 92.157 92.157zM741.784 358.365l-10.154-50.579c-10.4-1.701-20.371-4.824-29.76-9.195l-34.998 36.722-39.723-33.528 27.206-43.235c-6.059-8.654-11.058-18.182-14.816-28.421l-49.622 0.256-5.365-53.008 48.6-10.538c1.632-10.818 4.616-21.206 8.814-30.974l-35.254-36.402 32.187-41.384 41.576 28.357c8.307-6.302 17.442-11.48 27.27-15.392l-0.192-51.73 50.901-5.557 10.090 50.643c10.402 1.698 20.37 4.76 29.76 9.131l34.998-36.722 39.787 33.528-27.27 43.235c6.059 8.651 11.058 18.184 14.816 28.421l49.686-0.192 5.301 52.944-48.6 10.538c-1.634 10.834-4.61 21.258-8.814 31.038l35.254 36.338-32.187 41.448-41.512-28.357c-8.318 6.312-17.493 11.478-27.334 15.392l0.256 51.666-50.901 5.557zM750.214 235.363c1.6-0.006 3.229-0.078 4.854-0.256 26.002-2.843 44.818-27.090 42.086-54.155-2.733-27.066-25.982-46.718-51.986-43.874-26.002 2.843-44.882 27.090-42.15 54.155 2.56 25.376 23.202 44.216 47.195 44.13z" /> +<glyph unicode="=" d="M0 908.365v-622.304h180.107v-180.048l280.686 180.048h413.074v622.304h-873.869zM914.979 771.571v-78.309h30.712v-443.786h-151.048v-118.624l-184.88 118.624h-132.085l-122.050-78.309h231.070l286.251-183.534v183.533h151.048v600.402h-109.019z" /> +<glyph unicode=">" d="M927.813 960h-288.563c-52.906 0-126.797-30.606-164.203-68.014l-446.99-446.989c-37.408-37.408-37.408-98.624 0-136.032l344.91-344.906c37.408-37.41 98.622-37.41 136.030 0l446.99 446.989c37.406 37.408 68.013 111.301 68.013 164.202v288.563c0 52.904-43.286 96.187-96.187 96.187zM800 640c-53.021 0-96 42.979-96 96s42.979 96 96 96 96-42.979 96-96-42.979-96-96-96z" /> +<glyph unicode="?" d="M704 896l-320-320h-192l-192-256c0 0 203.416 56.651 322.066 30.083l-322.066-414.083 421.902 328.144c58.837-134.654-37.902-328.144-37.902-328.144l256 192v192l320 320 64 320-320-64z" /> +<glyph unicode="A" d="M512 960c-282.77 0-512-229.23-512-512s229.23-512 512-512c282.77 0 512 229.23 512 512 0 282.77-229.23 512-512 512zM512 904.25c251.981 0 456.25-204.269 456.25-456.25s-204.269-456.25-456.25-456.25c-251.981 0-456.25 204.269-456.25 456.25 0 251.981 204.269 456.25 456.25 456.25zM285.562 770.624c-12.994-37.768-17.498-78.76-5.874-114.562-14.043-15.584-24.947-33.486-32.75-53.75-20.798-65.73-15.718-149.696 29.813-200.501 15.994-17.533 37.694-31.949 65-43.25 27.306-11.298 62.402-18.506 105.312-21.624-28.8-13.458-49.102-21.682-56.187-51.438-32.125-21.466-71.19-16.344-99.499 7-22.374 16.334-32.509 45.366-57.314 56.125-1.56 1.56-6.432 2.722-14.624 3.499-8.192 0.781-14.632-1.542-19.312-7-2.342-2.334-2.168-4.834 0.562-7.562 18.778-15.272 36.853-31.459 47.438-50.874 10.141-21.042 20.64-36.448 31.562-46.189 30.298-20.474 70.934-31.125 106.501-18.125-4.149-25.027 7.042-64.11-1.189-86.501-3.122-6.234-7.586-11.698-13.438-16.374-5.213-5.086-21.384-11.451-18.123-19.25 1.56-3.506 7.011-5.658 16.373-6.437 20.611 0.525 41.126 8.858 53.251 25.125 4.291 5.845 6.438 13.461 6.438 22.813v95.811c0 10.91 2.317 18.701 7 23.376 4.682 4.677 9.787 7.816 15.25 9.374v-126.25c0-10.91-0.986-20.269-2.939-28.062-1.949-7.792-3.69-13.258-5.25-16.376-3.581-6.006-10.427-11.547-10.562-18.686 0-2.338 1.394-3.674 4.126-4.064 20.496 0.89 44.275 12.915 52.624 29.814 6.632 14.026 9.938 28.789 9.938 44.374v123.938h25.75v-123.938c0-15.586 3.539-30.349 10.562-44.374 7.022-14.027 18.742-23.042 35.126-26.938 8.579-2.338 14.378-3.264 17.499-2.877 3.12 0.39 4.514 1.726 4.125 4.064-1.88 7.080-5.794 13.141-9.939 18.686-5.461 7.014-8.186 21.838-8.186 44.438v126.25c5.461-1.558 10.741-4.698 15.813-9.374 5.069-4.675 7.562-12.466 7.562-23.376v-95.811c0-9.352 2.146-16.968 6.438-22.813 13.042-16.586 32.696-25 53.25-25.125 9.362 0.779 14.814 2.931 16.374 6.437 1.56 3.506 0.402 6.413-3.501 8.75-3.899 2.338-8.773 5.824-14.624 10.499-5.851 4.677-10.315 10.141-13.437 16.374-3.502 40.2-0.091 83.294-2.939 123.938-5.621 44.357-22.693 58.949-56.75 75.939 40.571 3.118 73.928 10.56 100.066 22.25 78.126 37.962 99.731 96.646 100.061 175.312-1.232 50.629-15.848 94.794-49.187 128.626 4.682 17.925 6.075 36.581 4.126 56.062-1.954 19.482-6.074 37.040-12.315 52.624-28.864-1.558-53.054-7.368-72.562-17.501-19.506-10.13-33.544-18.734-42.123-25.749-69.134 15.696-143.142 15.789-209.438-2.312-33.925 27.746-75.968 43.203-115.877 45.562z" /> +<glyph unicode="B" d="M875.126 875.438c-131.84-130.56-325.63-210.44-512.315-221.688h-277.25c-43.643-0.597-83.099-37.725-85.562-86.688v-125c0.595-43.643 36.598-84.224 85.562-86.688h111.126c-29.704-100.736 2.23-202.723 36.688-302.811 51.118-48.266 168.011-42.256 206.126 20.562-81.158 63.798-120.654 235.477-22.813 277.811 166.766-18.922 331.976-103.642 458.438-217.25 43.474 0.595 83.018 36.302 85.562 85v205c34.824 8.968 61.678 40.907 63.31 80.563-0.419 35.798-25.118 69.982-63.312 81.125v204.501c-0.595 43.645-36.598 83.099-85.562 85.563zM877.315 764.877v-521.189c-122.211 95.242-273.17 159.133-428.939 187.811v145.562c152.851 22.998 302.33 93.491 428.936 187.813z" /> +<glyph unicode="C" d="M997.688 797.224l-134.418 134.418c-37.064 37.064-99.781 34.64-139.974-5.654-40.194-40.195-42.819-103.011-5.656-140.075l134.418-134.418c37.064-37.064 99.778-34.64 140.074 5.656 40.194 40.296 42.72 102.91 5.554 140.074zM140.779 343.574l268.838-268.838 436.886 436.784-268.835 268.838-436.89-436.784zM0-61.906l354.578 70.998-283.582 283.581-70.995-354.579z" /> +<glyph unicode="D" d="M445.312 870.374c-181.354-12.744-442.045-41.699-442.186-396.875v-446.875h404.685v478.126h-134.373c-8.515 127.667 96.616 160.632 210.938 185.938l-39.064 179.686zM987.501 870.374c-181.357-12.744-442.045-41.699-442.189-396.875v-446.875h404.688v478.126h-134.374c-8.514 127.667 96.614 160.632 210.936 185.938l-39.061 179.686z" /> +<glyph unicode="E" d="M273.92-57.856h102.4l229.786 409.651h264.294c0 0 153.6 0 153.6 71.629 0 71.68-153.6 71.68-153.6 71.68h-264.294l-229.786 409.6h-102.4l127.386-409.6h-183.654l-115.251 102.451h-102.4l81.971-174.080-81.971-174.131h102.4l115.251 102.451h183.654l-127.386-409.651z" /> +<glyph unicode="F" d="M880.077 747.469c-85.606 78.592-224.41 78.592-310.016 0l-58.061-53.35-58.112 53.35c-85.606 78.592-224.358 78.592-309.965 0-96.307-88.371-96.307-231.629 0-320.051l368.077-337.818 368.077 337.818c96.307 88.422 96.307 231.68 0 320.051z" /> +<glyph unicode="G" d="M627.866 316.518c0 0 361.421 260.762 321.331 559.258-0.922 6.554-3.072 10.854-5.734 13.773-2.816 2.714-7.014 4.966-13.466 5.888-291.686 40.909-546.509-328.909-546.509-328.909-221.082 26.522-205.005-17.613-305.869-259.84-19.302-46.182 11.981-62.106 46.285-49.101 34.304 12.902 110.029 41.523 110.029 41.523l132.557-135.629c0 0-27.955-77.466-40.602-112.538-12.646-35.174 2.867-67.174 48.026-47.462 236.749 103.27 279.859 86.835 253.952 313.037zM679.475 619.418c-30.618 31.334-30.618 82.125 0 113.459 30.618 31.283 80.23 31.283 110.848 0 30.669-31.283 30.669-82.125 0-113.459-30.566-31.386-80.23-31.386-110.848 0z" /> +<glyph unicode="H" d="M961.024 432.64l-410.829 411.187c-20.992 21.811-55.347 21.811-76.339 0l-410.88-411.187c-21.043-21.76-13.21-39.629 17.408-39.629h85.658v-315.802c0-22.784 0.973-41.421 42.189-41.421h199.424v316.826h208.64v-316.826h209.357c31.437 0 32.307 18.586 32.307 41.421v315.802h85.606c30.566 0 38.451 17.818 17.459 39.629z" /> +<glyph unicode="I" d="M348.314-12.749c-9.882 6.502 161.485 366.592 155.546 382.413-5.888 15.821-187.597 73.574-196.506 101.376-8.858 27.802 358.81 445.747 368.435 437.658 9.626-8.038-160.205-370.586-155.546-382.362s190.925-71.987 196.506-101.325c5.581-29.44-358.554-444.211-368.435-437.76z" /> +<glyph unicode="J" d="M918.989 202.445v117.555c0 71.014-47.002 176.64-176.589 176.64h-102.4c-72.294 0-79.002 35.43-79.36 53.76v143.155c43.674 18.893 74.24 62.31 74.24 112.845 0 67.84-54.989 122.88-122.88 122.88-67.891 0-122.88-55.040-122.88-122.88 0-50.534 30.566-93.952 74.24-112.845v-143.155c0-13.261-3.84-53.76-79.36-53.76h-102.4c-129.587 0-176.64-105.626-176.64-176.64v-117.555c-43.674-18.842-74.24-62.31-74.24-112.845 0-67.84 54.989-122.88 122.88-122.88 67.84 0 122.88 55.040 122.88 122.88 0 50.534-30.566 94.003-74.24 112.845v117.555c0 13.261 3.84 79.36 79.36 79.36h102.4c31.078 0 57.293 4.71 79.36 12.698v-209.613c-43.674-18.842-74.24-62.31-74.24-112.845 0-67.84 54.989-122.88 122.88-122.88 67.891 0 122.88 55.040 122.88 122.88 0 50.534-30.618 94.003-74.291 112.845v209.613c22.067-7.987 48.282-12.698 79.36-12.698h102.4c72.294 0 79.002-61.030 79.411-79.36v-117.555c-43.674-18.842-74.24-62.31-74.24-112.845 0-67.84 54.989-122.88 122.88-122.88s122.88 55.040 122.88 122.88c0 50.534-30.566 94.003-74.291 112.845zM224.512 89.6c0-39.168-31.744-70.912-70.912-70.912s-70.912 31.744-70.912 70.912 31.744 70.912 70.912 70.912 70.912-31.744 70.912-70.912zM441.088 806.4c0 39.168 31.795 70.912 70.912 70.912s70.861-31.744 70.861-70.912-31.744-70.912-70.861-70.912c-39.117 0-70.912 31.744-70.912 70.912zM582.912 89.6c0-39.168-31.795-70.912-70.861-70.912-39.168 0-70.912 31.744-70.912 70.912s31.744 70.912 70.861 70.912c39.117 0 70.912-31.744 70.912-70.912zM870.4 18.688c-39.117 0-70.912 31.744-70.912 70.912s31.795 70.912 70.912 70.912 70.912-31.744 70.912-70.912-31.795-70.912-70.912-70.912z" /> +<glyph unicode="K" d="M983.040 740.198c-34.714-15.411-71.936-25.754-111.053-30.464 39.936 23.91 70.605 61.798 84.992 106.906-37.325-22.118-78.694-38.246-122.675-46.899-35.277 37.581-85.504 61.030-141.107 61.030-106.752 0-193.28-86.528-193.28-193.229 0-15.155 1.69-29.901 5.018-44.032-160.614 8.038-303.053 84.992-398.336 201.933-16.691-28.518-26.266-61.747-26.266-97.178 0-67.072 34.15-126.208 86.016-160.87-31.693 1.024-61.491 9.677-87.552 24.166 0-0.819 0-1.587 0-2.406 0-93.645 66.662-171.725 155.034-189.542-16.179-4.403-33.28-6.758-50.944-6.758-12.442 0-24.525 1.178-36.352 3.43 24.576-76.8 96-132.659 180.531-134.195-66.15-51.866-149.453-82.739-240.026-82.739-15.616 0-30.976 0.922-46.080 2.714 85.504-54.835 187.085-86.835 296.294-86.835 355.482 0 549.888 294.502 549.888 549.939 0 8.346-0.154 16.691-0.563 24.986 37.786 27.238 70.502 61.286 96.461 100.045z" /> +<glyph unicode="L" d="M872.571 132.571q32-50.858 12.286-87.142t-80.286-36.286h-658.286q-60.571 0-80.286 36.286t12.286 87.142l287.429 453.142v228h-36.571q-14.858 0-25.714 10.858t-10.858 25.714 10.858 25.714 25.714 10.858h292.571q14.858 0 25.714-10.858t10.858-25.714-10.858-25.714-25.714-10.858h-36.571v-228zM427.429 546.858l-155.429-245.142h406.858l-155.429 245.142-11.429 17.714v249.142h-73.142v-249.142z" horiz-adv-x="950" /> +<glyph unicode="M" d="M128 704v-640h896v640h-896zM960 170.666l-128 213.334-145.066-120.888-110.934 184.888-384-320v512h768v-469.334zM256 480c0-53.019 42.981-96 96-96s96 42.981 96 96c0 53.019-42.981 96-96 96-53.019 0-96-42.981-96-96zM896 832h-896v-640h64v576h832z" /> +<glyph unicode="N" d="M480 960v0c265.096 0 480-173.914 480-388.448s-214.904-388.448-480-388.448c-25.458 0-50.446 1.621-74.834 4.71-103.107-102.694-222.173-121.109-341.166-123.814v25.134c64.251 31.354 116 88.466 116 153.734 0 9.106-0.712 18.048-2.030 26.794-108.557 71.214-177.97 179.987-177.97 301.89 0 214.534 214.904 388.448 480 388.448zM996 89.314c0-55.942 36.314-104.898 92-131.771v-21.542c-103.126 2.318-197.786 18.102-287.142 106.126-21.139-2.65-42.794-4.040-64.858-4.040-95.47 0-183.408 25.758-253.614 69.040 144.674 0.506 281.261 46.854 384.835 130.672 52.208 42.251 93.394 91.826 122.413 147.347 30.766 58.866 46.366 121.582 46.366 186.406 0 10.448-0.45 20.835-1.258 31.168 72.57-59.934 117.258-141.622 117.258-231.677 0-104.486-60.158-197.722-154.24-258.763-1.142-7.496-1.76-15.16-1.76-22.966z" horiz-adv-x="1152" /> +<glyph unicode="O" d="M512 960c-282.77 0-512-229.23-512-512s229.23-512 512-512 512 229.23 512 512-229.23 512-512 512zM302.837 125.848c11.106 30.632 17.163 63.688 17.163 98.152 0 124.35-78.81 230.293-189.208 270.606 10.21 84.925 48.254 163.498 109.678 224.925 72.53 72.525 168.96 112.469 271.53 112.469s199-39.944 271.53-112.47c61.427-61.426 99.469-140 109.682-224.925-110.402-40.312-189.211-146.254-189.211-270.605 0-34.469 6.059-67.52 17.166-98.15-61.706-40.242-133.771-61.85-209.166-61.85-75.394 0-147.458 21.608-209.163 61.848zM551.754 319.003c13.878-3.493 24.246-16.080 24.246-31.003v-64c0-17.6-14.4-32-32-32h-64c-17.6 0-32 14.4-32 32v64c0 14.923 10.368 27.51 24.246 31.003l23.754 448.997h32l23.754-448.997z" /> +<glyph unicode="P" d="M1024 677.499l-90.506 90.501-178.746-178.752-101.501 101.502 178.75 178.749-90.501 90.501-178.749-178.75-114.749 114.75-86.626-86.624 512.002-512.002 86.624 86.624-114.752 114.752zM274.749 210.746c165.768-165.762 385.194-36.362 519.293 75.464l-443.826 443.824c-111.824-134.096-241.227-353.522-75.467-519.288zM191.998 255.997l127.994-127.997-191.992-191.992-127.995 127.994z" /> +<glyph unicode="Q" d="M791.498 415.907c-1.294 129.682 105.758 191.875 110.542 194.966-60.152 88.019-153.85 100.078-187.242 101.472-79.742 8.074-155.597-46.949-196.066-46.949-40.368 0-102.818 45.754-168.952 44.552-86.915-1.291-167.058-50.538-211.811-128.379-90.304-156.698-23.126-388.84 64.89-515.926 43.008-62.203 94.293-132.075 161.626-129.581 64.842 2.589 89.362 41.958 167.755 41.958 78.394 0 100.427-41.958 169.050-40.67 69.774 1.296 113.982 63.398 156.693 125.797 49.39 72.168 69.726 142.038 70.925 145.626-1.549 0.707-136.061 52.237-137.41 207.134zM662.562 796.478c35.739 43.357 59.861 103.512 53.28 163.522-51.478-2.096-113.878-34.29-150.81-77.55-33.142-38.376-62.149-99.626-54.374-158.437 57.466-4.483 116.128 29.205 151.904 72.466z" /> +<glyph unicode="R" d="M0.35 448l-0.35 312.074 384 52.144v-364.218zM448 821.518l511.872 74.482v-448h-511.872zM959.998 384l-0.126-448-511.872 72.016v375.984zM384 16.163l-383.688 52.595-0.021 315.242h383.709z" /> +<glyph unicode="S" d="M567.656 223.083c-81.944-38.118-158.158-37.717-209.341-34.021-61.051 4.41-110.158 21.123-131.742 35.731-13.301 9.006-31.384 5.522-40.39-7.782-9.003-13.302-5.52-31.386 7.782-40.39 34.698-23.486 96.067-40.954 160.162-45.579 10.866-0.784 22.798-1.278 35.646-1.278 55.782 0 126.626 5.315 202.419 40.57 14.563 6.778 20.878 24.074 14.104 38.64-6.774 14.57-24.074 20.875-38.64 14.11zM890.947 266.184c2.786 252.688 28.762 730.206-454.97 691.611-477.6-38.442-350.963-542.968-358.082-711.949-6.309-89.386-35.978-198.648-77.896-309.846h129.101c13.266 47.122 23.024 93.72 27.232 138.15 7.782-5.429 16.109-10.674 24.994-15.701 14.458-8.518 26.885-19.843 40.040-31.834 30.744-28.018 65.59-59.774 133.712-63.752 4.571-0.262 9.174-0.394 13.675-0.394 68.896 0 116.014 30.154 153.878 54.382 18.141 11.613 33.818 21.64 48.563 26.453 41.91 13.12 78.531 34.296 105.904 61.251 4.275 4.208 8.242 8.538 11.962 12.949 15.246-55.878 36.118-118.758 59.288-181.504l275.651-0.002c-66.174 102.224-134.437 202.374-133.053 330.184zM124.11 403.648c0 0.016 0 0.030-0.002 0.046-4.746 82.462 34.71 151.832 88.126 154.936 53.413 3.106 100.56-61.227 105.304-143.693 0-0.014 0.005-0.030 0.005-0.043 0.256-4.446 0.368-8.846 0.37-13.206-16.925-4.256-32.192-10.435-45.872-17.63-0.053 0.613-0.091 1.216-0.152 1.83 0 0.008 0 0.018 0 0.026-4.57 46.81-29.571 82.16-55.851 78.958-26.28-3.203-43.88-43.75-39.312-90.558 0-0.010 0.005-0.018 0.005-0.026 1.992-20.408 7.869-38.637 16.042-52.445-2.034-1.603-7.784-5.813-14.406-10.656-4.97-3.634-11.019-8.058-18.314-13.43-19.885 26.094-33.509 63.581-35.942 105.891zM665.261 199.822c-1.901-43.586-58.909-84.592-111.582-101.043l-0.296-0.096c-21.901-7.102-41.427-19.6-62.104-32.83-34.731-22.224-70.646-45.208-122.522-45.208-3.403 0-6.894 0.104-10.326 0.296-47.515 2.778-69.742 23.032-97.88 48.675-14.842 13.526-30.19 27.514-49.976 39.125l-0.424 0.243c-42.706 24.104-69.213 54.082-70.909 80.194-0.842 12.981 4.938 24.218 17.182 33.4 26.637 19.973 44.478 33.022 56.285 41.658 13.11 9.587 17.069 12.48 20 15.264 2.096 1.986 4.365 4.187 6.805 6.562 24.446 23.774 65.36 63.562 128.15 63.562 38.405 0 80.898-14.8 126.17-43.902 21.325-13.878 39.882-20.286 63.381-28.4 16.157-5.578 34.469-11.902 58.992-22.403l0.395-0.165c22.878-9.402 49.894-26.562 48.659-54.93zM652.646 302.194c-4.4 2.214-8.974 4.32-13.744 6.286-22.106 9.456-39.832 15.874-54.534 20.998 8.115 15.894 13.16 35.72 13.624 57.242 0 0.010 0 0.022 0 0.030 1.126 52.374-25.288 94.896-58.997 94.976-33.71 0.078-61.95-42.314-63.075-94.686 0-0.010 0-0.018 0-0.029-0.038-1.714-0.042-3.416-0.021-5.11-20.762 9.552-41.181 16.49-61.166 20.76-0.091 1.968-0.205 3.933-0.243 5.92 0 0.016 0 0.035 0 0.050-1.938 95.413 56.602 174.39 130.754 176.402 74.15 2.014 135.827-73.701 137.771-169.11 0-0.018 0-0.038 0-0.053 0.875-43.142-10.659-82.862-30.368-113.675z" /> +<glyph unicode="T" d="M448 384l-64 64-192-192 192-192 64 64-128 128zM576 128l64-64 192 192-192 192-64-64 128-128zM903.432 760.57l-142.864 142.862c-31.112 31.112-92.568 56.568-136.568 56.568h-480c-44 0-80-36-80-80v-864c0-44 36-80 80-80h736c44 0 80 36 80 80v608c0 44-25.456 105.458-56.568 136.57zM858.178 715.314c3.13-3.13 6.25-6.974 9.28-11.314h-163.458v163.456c4.339-3.030 8.184-6.15 11.314-9.28l142.864-142.862zM896 16c0-8.672-7.328-16-16-16h-736c-8.672 0-16 7.328-16 16v864c0 8.672 7.328 16 16 16h480c4.832 0 10.254-0.61 16-1.704v-254.296h254.296c1.094-5.746 1.704-11.166 1.704-16v-608z" /> +<glyph unicode="U" d="M640 960v-124c0-51.264-20-99.488-56.128-135.616l-362.112-360.128c-57.248-57.12-88.768-132.128-92.256-212.256h-129.504l192-192 192 192h-126.624c3.36 46.016 21.888 88.736 54.752 121.76l362.112 360c60.512 60.48 93.76 140.736 93.76 226.24v124h-128zM766.496 128c-3.488 80.128-35.136 155.136-92.384 212.512l-71.36 70.88-90.752-90.272 71.744-71.36c32.992-32.864 51.488-75.744 54.88-121.76h-126.624l192-192 192 192h-129.504z" horiz-adv-x="896" /> +<glyph unicode="V" d="M1024 448c0 282.77-229.23 512-512 512s-512-229.23-512-512 229.23-512 512-512 512 229.23 512 512zM96 448c0 229.75 186.25 416 416 416s416-186.25 416-416-186.25-416-416-416-416 186.25-416 416zM557.254 146.744l256 256.002c24.994 24.992 24.994 65.514 0 90.507-24.994 24.994-65.517 24.994-90.51 0l-146.744-146.742v357.49c0 35.346-28.654 64-64 64s-64-28.654-64-64v-357.49l-146.744 146.746c-24.994 24.994-65.518 24.994-90.512 0-12.496-12.498-18.744-28.878-18.744-45.256s6.248-32.758 18.744-45.254l256-256.002c24.994-24.992 65.518-24.992 90.51 0z" /> +<glyph unicode="h" d="M1024.837 959.163v-1024h-1024v1024zM401.115 875.925h-153.891v-868.578h161.011v251.921c0 25.921 0.365 43.446 1.096 52.574 0.365 14.239 1.461 25.741 3.286 34.503h0.547c1.096 8.761 2.921 15.88 5.476 21.358 2.19 6.206 4.929 11.5 8.215 15.88l0.547 0.549c4.016 6.572 9.674 12.961 16.976 19.168 6.572 5.476 14.239 10.404 23.002 14.786 10.223 4.016 19.717 7.119 28.478 9.31 10.223 2.19 21.542 3.286 33.956 3.286 17.89 0 32.676-2.19 44.36-6.572 9.857-4.016 17.708-9.674 23.549-16.976 5.476-8.033 10.041-21.176 13.692-39.431 4.016-21.907 6.024-48.195 6.024-78.863v-281.493h161.011v328.045c0 17.159-0.366 37.056-1.096 59.693-1.096 17.16-2.739 31.033-4.929 41.621-2.19 10.223-5.112 20.082-8.763 29.574-4.38 9.859-8.945 18.621-13.69 26.288-9.494 14.604-19.715 26.47-30.67 35.597-10.953 9.127-24.461 17.708-40.525 25.739h-0.549c-15.333 6.572-31.582 11.502-48.74 14.788-17.525 3.286-36.329 4.929-56.409 4.929-20.447 0-42.534-2.192-66.266-6.572-20.811-4.382-39.98-10.953-57.505-19.715-16.794-8.398-32.858-19.715-48.193-33.954z" /> +<glyph unicode="" d="M873.984 85.952c-199.872-199.936-524.096-199.936-724.032 0-200 199.936-200 524.16 0 724.096 199.936 199.936 524.16 199.936 724.032 0 200-199.936 200-524.16 0-724.096zM512 768c-176.704 0-320-143.232-320-320s143.296-320 320-320c102.528 0 192.768 49.152 251.392 124.096l-235.392 135.872 285.056 164.544c-43.52 125.184-161.152 215.488-301.056 215.488zM832 448c-35.392 0-64-28.608-64-64s28.608-64 64-64 64 28.608 64 64-28.608 64-64 64zM576 640c35.392 0 64-28.608 64-64 0-35.328-28.608-64-64-64s-64 28.672-64 64c0 35.392 28.608 64 64 64z" /> +<glyph unicode="" d="M848.512 445.013c0.128 0.299 0.171 0.64 0.299 0.939 2.858 7.296 4.522 15.104 4.522 23.381s-1.664 16.085-4.523 23.381c-0.128 0.299-0.171 0.64-0.299 0.939-3.243 7.936-8.021 15.061-13.995 21.035l-213.248 213.248c-25.003 25.003-65.493 25.003-90.496 0-25.003-24.96-25.003-65.536 0-90.496l104.066-104.107h-400.17c-35.328 0-64-28.629-64-64s28.672-64 64-64h400.171l-104.064-104.064c-25.003-24.96-25.003-65.536 0-90.496 12.458-12.544 28.842-18.773 45.226-18.773s32.768 6.229 45.269 18.731l213.248 213.248c5.974 5.973 10.752 13.141 13.995 21.034z" /> +<glyph unicode="" d="M175.488 493.653c-0.128-0.299-0.171-0.64-0.299-0.939-2.858-7.294-4.522-15.102-4.522-23.381s1.664-16.085 4.523-23.381c0.128-0.299 0.171-0.64 0.299-0.939 3.243-7.936 8.021-15.061 13.995-21.035l213.248-213.248c25.003-25.003 65.493-25.003 90.496 0 25.003 24.96 25.003 65.536 0 90.496l-104.066 104.107h400.17c35.328 0 64 28.629 64 64s-28.672 64-64 64h-400.17l104.064 104.064c25.003 24.96 25.003 65.536 0 90.496-12.459 12.544-28.843 18.774-45.227 18.774s-32.768-6.23-45.269-18.731l-213.248-213.248c-5.974-5.973-10.752-13.141-13.995-21.035z" /> +<glyph unicode="" d="M839.68 755.2c0 67.84-54.989 122.88-122.88 122.88s-122.88-55.040-122.88-122.88c0-49.818 29.696-92.621 72.294-111.923-11.622-99.738-75.878-119.859-168.704-148.838-45.056-14.080-97.434-30.464-141.67-62.31v210.227c43.674 18.893 74.24 62.31 74.24 112.845 0 67.84-55.040 122.88-122.88 122.88-67.891 0-122.88-55.040-122.88-122.88 0-50.534 30.566-93.952 74.24-112.845v-388.762c-43.674-18.79-74.24-62.208-74.24-112.794 0-67.84 54.989-122.88 122.88-122.88 67.84 0 122.88 55.040 122.88 122.88 0 49.818-29.696 92.621-72.346 111.923 11.674 99.738 75.981 119.91 168.755 148.838 94.362 29.491 221.491 69.274 237.261 240.077 44.544 18.534 75.93 62.362 75.93 113.562zM236.288 755.2c0 39.168 31.744 70.912 70.912 70.912s70.912-31.744 70.912-70.912-31.744-70.912-70.912-70.912-70.912 31.744-70.912 70.912zM307.2 69.888c-39.168 0-70.912 31.744-70.912 70.912s31.744 70.912 70.912 70.912 70.912-31.744 70.912-70.912-31.744-70.912-70.912-70.912zM716.8 684.288c-39.117 0-70.912 31.744-70.912 70.912s31.795 70.912 70.912 70.912 70.912-31.744 70.912-70.912-31.795-70.912-70.912-70.912z" /> +<glyph unicode="" d="M960.005 671.994l-223.998 223.998 64 64 223.997-223.998zM896 608l-32-352c-288 0-704-320-704-320l-53.13 53.13 273.664 273.664c10.973-4.368 22.934-6.794 35.466-6.794 53.019 0 96 42.981 96 96 0 53.019-42.981 96-96 96-53.019 0-96-42.981-96-96 0-12.533 2.426-24.49 6.794-35.466l-273.664-273.664-53.13 53.13c0 0 320 416 320 704l352 32 224-224z" /> +<glyph unicode="" d="M1024.648 963.326v-1023.809h-1023.811v1023.809zM410.696 865.988h-38.127c-14.952-1.494-32.147-3.551-51.583-6.167-19.438-2.617-38.875-5.607-58.313-8.972-19.438-3.363-37.94-7.288-55.508-11.774-17.569-4.486-31.96-8.97-43.174-13.456v-43.734l85.225-8.972v-679.56c-26.166-5.982-50.835-14.952-74.011-26.913v-43.734h297.167v43.734c-10.466 7.476-20.371 13.083-29.716 16.821s-19.998 7.103-31.96 10.093v311.744c8.97 26.913 23.923 50.65 44.855 71.208 20.932 20.559 46.351 30.839 76.255 30.839 35.884 0 59.994-15.139 72.329-45.416 12.335-30.278 18.502-77.563 18.502-141.856v-226.52c-12.708-3.738-23.922-7.851-33.641-12.335-9.718-4.486-19.063-9.345-28.035-14.579v-43.734h297.167v43.734c-11.214 7.476-23.176 13.083-35.884 16.821-12.71 3.738-25.419 7.103-38.127 10.093v268.010c0 46.351-4.113 84.666-12.337 114.942-8.222 30.278-20.184 54.387-35.884 72.329-15.7 17.943-35.323 30.466-58.873 37.567-23.549 7.103-50.275 10.653-80.178 10.653-20.933 0-40.744-3.363-59.434-10.093-18.69-6.728-36.071-15.885-52.145-27.474-16.073-11.587-30.464-25.043-43.172-40.369-12.71-15.325-22.802-31.585-30.278-48.781h-1.121z" /> +</font></defs></svg>
\ No newline at end of file diff --git a/docs/static/fonts/hugo.ttf b/docs/static/fonts/hugo.ttf Binary files differnew file mode 100644 index 000000000..962914d33 --- /dev/null +++ b/docs/static/fonts/hugo.ttf diff --git a/docs/static/fonts/hugo.woff b/docs/static/fonts/hugo.woff Binary files differnew file mode 100644 index 000000000..4693fbe7f --- /dev/null +++ b/docs/static/fonts/hugo.woff diff --git a/docs/static/images/blog/hugo-26-poster.png b/docs/static/images/blog/hugo-26-poster.png Binary files differnew file mode 100644 index 000000000..827f1f7bb --- /dev/null +++ b/docs/static/images/blog/hugo-26-poster.png diff --git a/docs/static/images/blog/hugo-27-poster.png b/docs/static/images/blog/hugo-27-poster.png Binary files differnew file mode 100644 index 000000000..69efa36bc --- /dev/null +++ b/docs/static/images/blog/hugo-27-poster.png diff --git a/docs/static/images/blog/hugo-28-poster.png b/docs/static/images/blog/hugo-28-poster.png Binary files differnew file mode 100644 index 000000000..ae3d6ac16 --- /dev/null +++ b/docs/static/images/blog/hugo-28-poster.png diff --git a/docs/static/images/blog/hugo-29-poster.png b/docs/static/images/blog/hugo-29-poster.png Binary files differnew file mode 100644 index 000000000..dbe2d434f --- /dev/null +++ b/docs/static/images/blog/hugo-29-poster.png diff --git a/docs/static/images/blog/hugo-30-poster.png b/docs/static/images/blog/hugo-30-poster.png Binary files differnew file mode 100644 index 000000000..214369e89 --- /dev/null +++ b/docs/static/images/blog/hugo-30-poster.png diff --git a/docs/static/images/blog/hugo-31-poster.png b/docs/static/images/blog/hugo-31-poster.png Binary files differnew file mode 100644 index 000000000..e11e53aa7 --- /dev/null +++ b/docs/static/images/blog/hugo-31-poster.png diff --git a/docs/static/images/blog/hugo-32-poster.png b/docs/static/images/blog/hugo-32-poster.png Binary files differnew file mode 100644 index 000000000..f915247ad --- /dev/null +++ b/docs/static/images/blog/hugo-32-poster.png diff --git a/docs/static/images/blog/hugo-bug-poster.png b/docs/static/images/blog/hugo-bug-poster.png Binary files differnew file mode 100644 index 000000000..cd236682d --- /dev/null +++ b/docs/static/images/blog/hugo-bug-poster.png diff --git a/docs/static/images/blog/hugo-http2-push.png b/docs/static/images/blog/hugo-http2-push.png Binary files differnew file mode 100644 index 000000000..1ddfd4653 --- /dev/null +++ b/docs/static/images/blog/hugo-http2-push.png diff --git a/docs/static/images/blog/sunset.jpg b/docs/static/images/blog/sunset.jpg Binary files differnew file mode 100644 index 000000000..4dbcc0836 --- /dev/null +++ b/docs/static/images/blog/sunset.jpg diff --git a/docs/static/images/contribute/development/accept-cla.png b/docs/static/images/contribute/development/accept-cla.png Binary files differnew file mode 100644 index 000000000..272de935e --- /dev/null +++ b/docs/static/images/contribute/development/accept-cla.png diff --git a/docs/static/images/contribute/development/copy-remote-url.png b/docs/static/images/contribute/development/copy-remote-url.png Binary files differnew file mode 100644 index 000000000..a97a8f48f --- /dev/null +++ b/docs/static/images/contribute/development/copy-remote-url.png diff --git a/docs/static/images/contribute/development/forking-a-repository.png b/docs/static/images/contribute/development/forking-a-repository.png Binary files differnew file mode 100644 index 000000000..b2566b841 --- /dev/null +++ b/docs/static/images/contribute/development/forking-a-repository.png diff --git a/docs/static/images/contribute/development/open-pull-request.png b/docs/static/images/contribute/development/open-pull-request.png Binary files differnew file mode 100644 index 000000000..3f8328964 --- /dev/null +++ b/docs/static/images/contribute/development/open-pull-request.png diff --git a/docs/static/images/gohugoio-card-1.png b/docs/static/images/gohugoio-card-1.png Binary files differnew file mode 100644 index 000000000..09953aed9 --- /dev/null +++ b/docs/static/images/gohugoio-card-1.png diff --git a/docs/static/images/hosting-and-deployment/hosting-on-aws-amplify/amplify-build-settings.png b/docs/static/images/hosting-and-deployment/hosting-on-aws-amplify/amplify-build-settings.png Binary files differnew file mode 100644 index 000000000..1ec752428 --- /dev/null +++ b/docs/static/images/hosting-and-deployment/hosting-on-aws-amplify/amplify-build-settings.png diff --git a/docs/static/images/hosting-and-deployment/hosting-on-aws-amplify/amplify-connect-repo.gif b/docs/static/images/hosting-and-deployment/hosting-on-aws-amplify/amplify-connect-repo.gif Binary files differnew file mode 100644 index 000000000..6c57cf3b2 --- /dev/null +++ b/docs/static/images/hosting-and-deployment/hosting-on-aws-amplify/amplify-connect-repo.gif diff --git a/docs/static/images/hosting-and-deployment/hosting-on-aws-amplify/amplify-gettingstarted.png b/docs/static/images/hosting-and-deployment/hosting-on-aws-amplify/amplify-gettingstarted.png Binary files differnew file mode 100644 index 000000000..3b17e2b01 --- /dev/null +++ b/docs/static/images/hosting-and-deployment/hosting-on-aws-amplify/amplify-gettingstarted.png diff --git a/docs/static/images/hosting-and-deployment/hosting-on-azure/basic-app-details.png b/docs/static/images/hosting-and-deployment/hosting-on-azure/basic-app-details.png Binary files differnew file mode 100644 index 000000000..6cd39424e --- /dev/null +++ b/docs/static/images/hosting-and-deployment/hosting-on-azure/basic-app-details.png diff --git a/docs/static/images/hosting-and-deployment/hosting-on-azure/create-in-portal.png b/docs/static/images/hosting-and-deployment/hosting-on-azure/create-in-portal.png Binary files differnew file mode 100644 index 000000000..07dffbae6 --- /dev/null +++ b/docs/static/images/hosting-and-deployment/hosting-on-azure/create-in-portal.png diff --git a/docs/static/images/hosting-and-deployment/hosting-on-bitbucket/bitbucket-blog-post.png b/docs/static/images/hosting-and-deployment/hosting-on-bitbucket/bitbucket-blog-post.png Binary files differnew file mode 100644 index 000000000..b78f6fd15 --- /dev/null +++ b/docs/static/images/hosting-and-deployment/hosting-on-bitbucket/bitbucket-blog-post.png diff --git a/docs/static/images/hosting-and-deployment/hosting-on-bitbucket/bitbucket-create-repo.png b/docs/static/images/hosting-and-deployment/hosting-on-bitbucket/bitbucket-create-repo.png Binary files differnew file mode 100644 index 000000000..e97f13465 --- /dev/null +++ b/docs/static/images/hosting-and-deployment/hosting-on-bitbucket/bitbucket-create-repo.png diff --git a/docs/static/images/hosting-and-deployment/hosting-on-keycdn/keycdn-pull-zone.png b/docs/static/images/hosting-and-deployment/hosting-on-keycdn/keycdn-pull-zone.png Binary files differnew file mode 100644 index 000000000..7cde4a6a2 --- /dev/null +++ b/docs/static/images/hosting-and-deployment/hosting-on-keycdn/keycdn-pull-zone.png diff --git a/docs/static/images/hosting-and-deployment/hosting-on-keycdn/secret-api-key.png b/docs/static/images/hosting-and-deployment/hosting-on-keycdn/secret-api-key.png Binary files differnew file mode 100644 index 000000000..ad99341d5 --- /dev/null +++ b/docs/static/images/hosting-and-deployment/hosting-on-keycdn/secret-api-key.png diff --git a/docs/static/images/hosting-and-deployment/hosting-on-keycdn/secret-zone-id.png b/docs/static/images/hosting-and-deployment/hosting-on-keycdn/secret-zone-id.png Binary files differnew file mode 100644 index 000000000..2e5cf5f41 --- /dev/null +++ b/docs/static/images/hosting-and-deployment/hosting-on-keycdn/secret-zone-id.png diff --git a/docs/static/images/hosting-and-deployment/hosting-on-netlify/netlify-add-new-site.jpg b/docs/static/images/hosting-and-deployment/hosting-on-netlify/netlify-add-new-site.jpg Binary files differnew file mode 100644 index 000000000..17698d34a --- /dev/null +++ b/docs/static/images/hosting-and-deployment/hosting-on-netlify/netlify-add-new-site.jpg diff --git a/docs/static/images/hosting-and-deployment/hosting-on-netlify/netlify-authorize-added-permissions.jpg b/docs/static/images/hosting-and-deployment/hosting-on-netlify/netlify-authorize-added-permissions.jpg Binary files differnew file mode 100644 index 000000000..eaae924e4 --- /dev/null +++ b/docs/static/images/hosting-and-deployment/hosting-on-netlify/netlify-authorize-added-permissions.jpg diff --git a/docs/static/images/hosting-and-deployment/hosting-on-netlify/netlify-create-new-site-step-1.jpg b/docs/static/images/hosting-and-deployment/hosting-on-netlify/netlify-create-new-site-step-1.jpg Binary files differnew file mode 100644 index 000000000..347477dd2 --- /dev/null +++ b/docs/static/images/hosting-and-deployment/hosting-on-netlify/netlify-create-new-site-step-1.jpg diff --git a/docs/static/images/hosting-and-deployment/hosting-on-netlify/netlify-create-new-site-step-2.jpg b/docs/static/images/hosting-and-deployment/hosting-on-netlify/netlify-create-new-site-step-2.jpg Binary files differnew file mode 100644 index 000000000..18bfd6fed --- /dev/null +++ b/docs/static/images/hosting-and-deployment/hosting-on-netlify/netlify-create-new-site-step-2.jpg diff --git a/docs/static/images/hosting-and-deployment/hosting-on-netlify/netlify-create-new-site-step-3.jpg b/docs/static/images/hosting-and-deployment/hosting-on-netlify/netlify-create-new-site-step-3.jpg Binary files differnew file mode 100644 index 000000000..6f9b6477c --- /dev/null +++ b/docs/static/images/hosting-and-deployment/hosting-on-netlify/netlify-create-new-site-step-3.jpg diff --git a/docs/static/images/hosting-and-deployment/hosting-on-netlify/netlify-deploy-published.jpg b/docs/static/images/hosting-and-deployment/hosting-on-netlify/netlify-deploy-published.jpg Binary files differnew file mode 100644 index 000000000..ed5eaf3c8 --- /dev/null +++ b/docs/static/images/hosting-and-deployment/hosting-on-netlify/netlify-deploy-published.jpg diff --git a/docs/static/images/hosting-and-deployment/hosting-on-netlify/netlify-deploying-site.gif b/docs/static/images/hosting-and-deployment/hosting-on-netlify/netlify-deploying-site.gif Binary files differnew file mode 100644 index 000000000..c1f27c236 --- /dev/null +++ b/docs/static/images/hosting-and-deployment/hosting-on-netlify/netlify-deploying-site.gif diff --git a/docs/static/images/hosting-and-deployment/hosting-on-netlify/netlify-first-authorize.jpg b/docs/static/images/hosting-and-deployment/hosting-on-netlify/netlify-first-authorize.jpg Binary files differnew file mode 100644 index 000000000..748122e89 --- /dev/null +++ b/docs/static/images/hosting-and-deployment/hosting-on-netlify/netlify-first-authorize.jpg diff --git a/docs/static/images/hosting-and-deployment/hosting-on-netlify/netlify-live-site.jpg b/docs/static/images/hosting-and-deployment/hosting-on-netlify/netlify-live-site.jpg Binary files differnew file mode 100644 index 000000000..3edc49c43 --- /dev/null +++ b/docs/static/images/hosting-and-deployment/hosting-on-netlify/netlify-live-site.jpg diff --git a/docs/static/images/hosting-and-deployment/hosting-on-netlify/netlify-push-to-deploy.jpg b/docs/static/images/hosting-and-deployment/hosting-on-netlify/netlify-push-to-deploy.jpg Binary files differnew file mode 100644 index 000000000..f23626218 --- /dev/null +++ b/docs/static/images/hosting-and-deployment/hosting-on-netlify/netlify-push-to-deploy.jpg diff --git a/docs/static/images/hosting-and-deployment/hosting-on-netlify/netlify-signup.jpg b/docs/static/images/hosting-and-deployment/hosting-on-netlify/netlify-signup.jpg Binary files differnew file mode 100644 index 000000000..cd9a218b4 --- /dev/null +++ b/docs/static/images/hosting-and-deployment/hosting-on-netlify/netlify-signup.jpg diff --git a/docs/static/images/hugo-content-bundles.png b/docs/static/images/hugo-content-bundles.png Binary files differnew file mode 100644 index 000000000..501e671e2 --- /dev/null +++ b/docs/static/images/hugo-content-bundles.png diff --git a/docs/static/images/icon-custom-outputs.svg b/docs/static/images/icon-custom-outputs.svg new file mode 100644 index 000000000..ccf581f31 --- /dev/null +++ b/docs/static/images/icon-custom-outputs.svg @@ -0,0 +1,36 @@ +<svg fill="#777" stroke="#fff" width="100pt" height="100pt" version="1.1" viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg"> + <g> + <path d="m28.332 63.332h3.332v3.332h-3.332z"/> + <path d="m28.332 76.668h3.332v3.332h-3.332z"/> + <path d="m28.332 90h3.332v3.332h-3.332z"/> + <path d="m25 56.668c-1.8438 0-3.332 1.4922-3.332 3.332v36.668c0 1.8398 1.4883 3.332 3.332 3.332h30c1.8438 0 3.332-1.4922 3.332-3.332v-36.668c0-1.8398-1.4883-3.332-3.332-3.332zm30 40h-30v-10h30zm0-13.336h-30v-10h30zm0-23.332v10h-30v-10z"/> + <path d="m5 43.332h30c1.8438 0 3.332-1.4922 3.332-3.332v-36.668c0-1.8398-1.4883-3.332-3.332-3.332h-30c-1.8438 0-3.332 1.4922-3.332 3.332v36.668c0 1.8398 1.4883 3.332 3.332 3.332zm0-40h30v10h-30zm0 13.336h30v10h-30zm0 13.332h30v10h-30z"/> + <path d="m8.332 6.668h3.332v3.332h-3.332z"/> + <path d="m8.332 20h3.332v3.332h-3.332z"/> + <path d="m8.332 33.332h3.332v3.332h-3.332z"/> + <path d="m65 60h30c1.8438 0 3.332-1.4922 3.332-3.332v-36.668c0-1.8398-1.4883-3.332-3.332-3.332h-30c-1.8438 0-3.332 1.4922-3.332 3.332v36.668c0 1.8398 1.4883 3.332 3.332 3.332zm0-40h30v10h-30zm0 13.332h30v10h-30zm0 13.336h30v10h-30z"/> + <path d="m68.332 23.332h3.332v3.332h-3.332z"/> + <path d="m68.332 36.668h3.332v3.332h-3.332z"/> + <path d="m68.332 50h3.332v3.332h-3.332z"/> + <path d="m41.668 3.332h3.332v3.332h-3.332z"/> + <path d="m48.332 3.332h3.332v3.332h-3.332z"/> + <path d="m55 3.332h3.332v3.332h-3.332z"/> + <path d="m61.668 3.332h3.332v3.332h-3.332z"/> + <path d="m68.332 3.332h3.332v3.332h-3.332z"/> + <path d="m75 3.332h3.332v3.332h-3.332z"/> + <path d="m75 10h3.332v3.332h-3.332z"/> + <path d="m81.668 70h3.332v3.332h-3.332z"/> + <path d="m88.332 70h3.332v3.332h-3.332z"/> + <path d="m88.332 63.332h3.332v3.332h-3.332z"/> + <path d="m75 70h3.332v3.332h-3.332z"/> + <path d="m68.332 70h3.332v3.332h-3.332z"/> + <path d="m61.668 70h3.332v3.332h-3.332z"/> + <path d="m8.332 46.668h3.332v3.332h-3.332z"/> + <path d="m8.332 53.332h3.332v3.332h-3.332z"/> + <path d="m8.332 60h3.332v3.332h-3.332z"/> + <path d="m8.332 66.668h3.332v3.332h-3.332z"/> + <path d="m8.332 73.332h3.332v3.332h-3.332z"/> + <path d="m8.332 80h3.332v3.332h-3.332z"/> + <path d="m15 80h3.332v3.332h-3.332z"/> + </g> +</svg> diff --git a/docs/static/img/examples/trees.svg b/docs/static/img/examples/trees.svg new file mode 100644 index 000000000..0aaccfcff --- /dev/null +++ b/docs/static/img/examples/trees.svg @@ -0,0 +1,104 @@ +<svg class='diagram' xmlns='http://www.w3.org/2000/svg' version='1.1' height='153' width='712'> + <defs> + <style> + svg { + color: black; + } + @media (prefers-color-scheme:dark) { + svg { + color: white; + } + } + </style> + </defs> +<g transform='translate(8,16)'> +<path d='M 472,16 L 496,16' fill='none' stroke='currentColor'></path> +<path d='M 608,16 L 616,16' fill='none' stroke='currentColor'></path> +<path d='M 440,32 L 472,32' fill='none' stroke='currentColor'></path> +<path d='M 584,32 L 592,32' fill='none' stroke='currentColor'></path> +<path d='M 176,48 L 208,48' fill='none' stroke='currentColor'></path> +<path d='M 208,48 L 240,48' fill='none' stroke='currentColor'></path> +<path d='M 328,48 L 344,48' fill='none' stroke='currentColor'></path> +<path d='M 344,48 L 360,48' fill='none' stroke='currentColor'></path> +<path d='M 472,48 L 496,48' fill='none' stroke='currentColor'></path> +<path d='M 608,48 L 616,48' fill='none' stroke='currentColor'></path> +<path d='M 416,64 L 440,64' fill='none' stroke='currentColor'></path> +<path d='M 544,64 L 568,64' fill='none' stroke='currentColor'></path> +<path d='M 160,80 L 176,80' fill='none' stroke='currentColor'></path> +<path d='M 176,80 L 192,80' fill='none' stroke='currentColor'></path> +<path d='M 224,80 L 240,80' fill='none' stroke='currentColor'></path> +<path d='M 240,80 L 256,80' fill='none' stroke='currentColor'></path> +<path d='M 472,80 L 496,80' fill='none' stroke='currentColor'></path> +<path d='M 608,80 L 616,80' fill='none' stroke='currentColor'></path> +<path d='M 440,96 L 472,96' fill='none' stroke='currentColor'></path> +<path d='M 584,96 L 592,96' fill='none' stroke='currentColor'></path> +<path d='M 472,112 L 496,112' fill='none' stroke='currentColor'></path> +<path d='M 608,112 L 616,112' fill='none' stroke='currentColor'></path> +<path d='M 160,80 L 160,96' fill='none' stroke='currentColor'></path> +<path d='M 176,48 L 176,80' fill='none' stroke='currentColor'></path> +<path d='M 192,80 L 192,96' fill='none' stroke='currentColor'></path> +<path d='M 208,16 L 208,48' fill='none' stroke='currentColor'></path> +<path d='M 224,80 L 224,96' fill='none' stroke='currentColor'></path> +<path d='M 240,48 L 240,80' fill='none' stroke='currentColor'></path> +<path d='M 256,80 L 256,96' fill='none' stroke='currentColor'></path> +<path d='M 312,64 L 312,80' fill='none' stroke='currentColor'></path> +<path d='M 344,16 L 344,48' fill='none' stroke='currentColor'></path> +<path d='M 376,64 L 376,80' fill='none' stroke='currentColor'></path> +<path d='M 440,32 L 440,64' fill='none' stroke='currentColor'></path> +<path d='M 440,64 L 440,96' fill='none' stroke='currentColor'></path> +<path d='M 472,16 L 472,32' fill='none' stroke='currentColor'></path> +<path d='M 472,32 L 472,48' fill='none' stroke='currentColor'></path> +<path d='M 472,80 L 472,96' fill='none' stroke='currentColor'></path> +<path d='M 472,96 L 472,112' fill='none' stroke='currentColor'></path> +<path d='M 568,48 L 568,64' fill='none' stroke='currentColor'></path> +<path d='M 568,64 L 568,80' fill='none' stroke='currentColor'></path> +<path d='M 40,96 L 56,64' fill='none' stroke='currentColor'></path> +<path d='M 56,64 L 80,16' fill='none' stroke='currentColor'></path> +<path d='M 88,96 L 104,64' fill='none' stroke='currentColor'></path> +<path d='M 656,64 L 672,32' fill='none' stroke='currentColor'></path> +<path d='M 672,32 L 680,16' fill='none' stroke='currentColor'></path> +<path d='M 672,96 L 680,80' fill='none' stroke='currentColor'></path> +<path d='M 56,64 L 72,96' fill='none' stroke='currentColor'></path> +<path d='M 80,16 L 104,64' fill='none' stroke='currentColor'></path> +<path d='M 104,64 L 120,96' fill='none' stroke='currentColor'></path> +<path d='M 656,64 L 672,96' fill='none' stroke='currentColor'></path> +<path d='M 672,96 L 680,112' fill='none' stroke='currentColor'></path> +<path d='M 672,32 L 680,48' fill='none' stroke='currentColor'></path> +<path d='M 608,16 A 16,16 0 0,0 592,32' fill='none' stroke='currentColor'></path> +<path d='M 584,32 A 16,16 0 0,0 568,48' fill='none' stroke='currentColor'></path> +<path d='M 328,48 A 16,16 0 0,0 312,64' fill='none' stroke='currentColor'></path> +<path d='M 360,48 A 16,16 0 0,1 376,64' fill='none' stroke='currentColor'></path> +<path d='M 592,32 A 16,16 0 0,0 608,48' fill='none' stroke='currentColor'></path> +<path d='M 312,80 A 16,16 0 0,0 296,96' fill='none' stroke='currentColor'></path> +<path d='M 312,80 A 16,16 0 0,1 328,96' fill='none' stroke='currentColor'></path> +<path d='M 376,80 A 16,16 0 0,0 360,96' fill='none' stroke='currentColor'></path> +<path d='M 376,80 A 16,16 0 0,1 392,96' fill='none' stroke='currentColor'></path> +<path d='M 608,80 A 16,16 0 0,0 592,96' fill='none' stroke='currentColor'></path> +<path d='M 568,80 A 16,16 0 0,0 584,96' fill='none' stroke='currentColor'></path> +<path d='M 592,96 A 16,16 0 0,0 608,112' fill='none' stroke='currentColor'></path> +<text text-anchor='middle' x='40' y='116' fill='currentColor' style='font-size:1em'>1</text> +<text text-anchor='middle' x='72' y='116' fill='currentColor' style='font-size:1em'>2</text> +<text text-anchor='middle' x='88' y='116' fill='currentColor' style='font-size:1em'>3</text> +<text text-anchor='middle' x='120' y='116' fill='currentColor' style='font-size:1em'>4</text> +<text text-anchor='middle' x='160' y='116' fill='currentColor' style='font-size:1em'>1</text> +<text text-anchor='middle' x='192' y='116' fill='currentColor' style='font-size:1em'>2</text> +<text text-anchor='middle' x='224' y='116' fill='currentColor' style='font-size:1em'>3</text> +<text text-anchor='middle' x='256' y='116' fill='currentColor' style='font-size:1em'>4</text> +<text text-anchor='middle' x='296' y='116' fill='currentColor' style='font-size:1em'>1</text> +<text text-anchor='middle' x='328' y='116' fill='currentColor' style='font-size:1em'>2</text> +<text text-anchor='middle' x='360' y='116' fill='currentColor' style='font-size:1em'>3</text> +<text text-anchor='middle' x='392' y='116' fill='currentColor' style='font-size:1em'>4</text> +<text text-anchor='middle' x='512' y='20' fill='currentColor' style='font-size:1em'>1</text> +<text text-anchor='middle' x='512' y='52' fill='currentColor' style='font-size:1em'>2</text> +<text text-anchor='middle' x='512' y='84' fill='currentColor' style='font-size:1em'>3</text> +<text text-anchor='middle' x='512' y='116' fill='currentColor' style='font-size:1em'>4</text> +<text text-anchor='middle' x='632' y='20' fill='currentColor' style='font-size:1em'>1</text> +<text text-anchor='middle' x='632' y='52' fill='currentColor' style='font-size:1em'>2</text> +<text text-anchor='middle' x='632' y='84' fill='currentColor' style='font-size:1em'>3</text> +<text text-anchor='middle' x='632' y='116' fill='currentColor' style='font-size:1em'>4</text> +<text text-anchor='middle' x='696' y='20' fill='currentColor' style='font-size:1em'>1</text> +<text text-anchor='middle' x='696' y='52' fill='currentColor' style='font-size:1em'>2</text> +<text text-anchor='middle' x='696' y='84' fill='currentColor' style='font-size:1em'>3</text> +<text text-anchor='middle' x='696' y='116' fill='currentColor' style='font-size:1em'>4</text> +</g> +</svg> diff --git a/docs/static/img/hugo-logo-med.png b/docs/static/img/hugo-logo-med.png Binary files differnew file mode 100644 index 000000000..11d91b320 --- /dev/null +++ b/docs/static/img/hugo-logo-med.png diff --git a/docs/static/img/hugo-logo.png b/docs/static/img/hugo-logo.png Binary files differnew file mode 100644 index 000000000..0a78f8eaa --- /dev/null +++ b/docs/static/img/hugo-logo.png diff --git a/docs/static/img/hugo.png b/docs/static/img/hugo.png Binary files differnew file mode 100644 index 000000000..48acf346c --- /dev/null +++ b/docs/static/img/hugo.png diff --git a/docs/static/img/hugoSM.png b/docs/static/img/hugoSM.png Binary files differnew file mode 100644 index 000000000..f64f43088 --- /dev/null +++ b/docs/static/img/hugoSM.png diff --git a/docs/static/npmjs/index.html b/docs/static/npmjs/index.html new file mode 100644 index 000000000..88dd510af --- /dev/null +++ b/docs/static/npmjs/index.html @@ -0,0 +1,6 @@ +<html> + <head> + <meta name="go-import" content="gohugo.io/npmjs mod http://localhost:8072"> + </head> + <body></body> +</html> diff --git a/docs/static/share/hugo-tall.png b/docs/static/share/hugo-tall.png Binary files differnew file mode 100644 index 000000000..001ce5eb3 --- /dev/null +++ b/docs/static/share/hugo-tall.png diff --git a/docs/static/share/made-with-hugo-dark.png b/docs/static/share/made-with-hugo-dark.png Binary files differnew file mode 100644 index 000000000..c6cadf283 --- /dev/null +++ b/docs/static/share/made-with-hugo-dark.png diff --git a/docs/static/share/made-with-hugo-long-dark.png b/docs/static/share/made-with-hugo-long-dark.png Binary files differnew file mode 100644 index 000000000..1e49995fb --- /dev/null +++ b/docs/static/share/made-with-hugo-long-dark.png diff --git a/docs/static/share/made-with-hugo-long.png b/docs/static/share/made-with-hugo-long.png Binary files differnew file mode 100644 index 000000000..c5df534cf --- /dev/null +++ b/docs/static/share/made-with-hugo-long.png diff --git a/docs/static/share/made-with-hugo.png b/docs/static/share/made-with-hugo.png Binary files differnew file mode 100644 index 000000000..52dfd19e5 --- /dev/null +++ b/docs/static/share/made-with-hugo.png diff --git a/docs/static/share/powered-by-hugo-dark.png b/docs/static/share/powered-by-hugo-dark.png Binary files differnew file mode 100644 index 000000000..a8e2ebc80 --- /dev/null +++ b/docs/static/share/powered-by-hugo-dark.png diff --git a/docs/static/share/powered-by-hugo-long-dark.png b/docs/static/share/powered-by-hugo-long-dark.png Binary files differnew file mode 100644 index 000000000..1b760b1bf --- /dev/null +++ b/docs/static/share/powered-by-hugo-long-dark.png diff --git a/docs/static/share/powered-by-hugo-long.png b/docs/static/share/powered-by-hugo-long.png Binary files differnew file mode 100644 index 000000000..37131359d --- /dev/null +++ b/docs/static/share/powered-by-hugo-long.png diff --git a/docs/static/share/powered-by-hugo.png b/docs/static/share/powered-by-hugo.png Binary files differnew file mode 100644 index 000000000..27ff099d5 --- /dev/null +++ b/docs/static/share/powered-by-hugo.png |