[
  {
    "path": ".cspell.json",
    "content": "{\n  \"version\": \"0.2\",\n  \"language\": \"en\",\n  \"dictionaries\": [\"en_us\", \"softwareTerms\", \"companies\", \"bash\", \"html\", \"css\", \"typescript\"],\n  \"words\": [\n    \"geekdoc\",\n    \"katex\",\n    \"flexsearch\",\n    \"pygments\",\n    \"Geekdocs\",\n    \"goldmark\",\n    \"THEMEDIR\",\n    \"gohugo\",\n    \"canonify\",\n    \"codecopy\",\n    \"lstore\",\n    \"lntable\",\n    \"lastmod\",\n    \"Preproc\",\n    \"lntd\",\n    \"Emph\",\n    \"anchorwrap\",\n    \"languagecode\",\n    \"relref\",\n    \"linenos\",\n    \"admonitionblock\",\n    \"uuidv4\",\n    \"cfworker\",\n    \"readmore\",\n    \"editpage\",\n    \"codecontainer\",\n    \"necolas\",\n    \"Shpak\",\n    \"Kaussow\"\n  ],\n  \"ignorePaths\": [\n    \".woodpecker\",\n    \".cspell.json\",\n    \".git\",\n    \".gitignore\",\n    \".vscode\",\n    \"*.svg\",\n    \"renovate.json\",\n    \"package.json\",\n    \".lighthouserc.yaml\",\n    \"config.yaml\",\n    \"hugo.yaml\",\n    \"webpack.config.js\",\n    \"theme.toml\",\n    \"svgsprite.config.json\",\n    \"i18n/*\"\n  ],\n\n  \"ignoreRegExpList\": [\"&\\\\S+;\", \"{{.+}}\"]\n}\n"
  },
  {
    "path": ".github/settings.yaml",
    "content": "repository:\n  name: hugo-geekdoc\n  description: Hugo theme made for documentation\n  homepage: https://geekdocs.de\n  topics: hugo, theme, hugo-theme, documentation\n\n  private: false\n  has_issues: true\n  has_projects: false\n  has_wiki: false\n  has_downloads: true\n\n  default_branch: main\n\n  allow_squash_merge: true\n  allow_merge_commit: true\n  allow_rebase_merge: true\n\nlabels:\n  - name: bug\n    color: d73a4a\n    description: Something isn't working\n  - name: documentation\n    color: 0075ca\n    description: Improvements or additions to documentation\n  - name: duplicate\n    color: cfd3d7\n    description: This issue or pull request already exists\n  - name: enhancement\n    color: a2eeef\n    description: New feature or request\n  - name: good first issue\n    color: 7057ff\n    description: Good for newcomers\n  - name: help wanted\n    color: 008672\n    description: Extra attention is needed\n  - name: invalid\n    color: e4e669\n    description: This doesn't seem right\n  - name: question\n    color: d876e3\n    description: Further information is requested\n  - name: wontfix\n    color: ffffff\n    description: This will not be worked on\n\nbranches:\n  - name: main\n    protection:\n      required_pull_request_reviews: null\n      required_status_checks:\n        strict: false\n        contexts:\n          - ci/woodpecker/pr/static\n          - ci/woodpecker/pr/build-package\n          - ci/woodpecker/pr/docs\n      enforce_admins: false\n      required_linear_history: true\n      restrictions: null\n"
  },
  {
    "path": ".gitignore",
    "content": "# local environments\n.swp\n.env*\n/dist/\n/build/\n/node_modules/\n/lhci_reports/\n/exampleSite/themes/\n/exampleSite/public/\n/exampleSite/config/development/\nCHANGELOG.md\nVERSION\n\n# translation envs\nexampleSite/content/de\n\n# auto-generated files\n/data/\n/static/\n/assets/sprites/\n/resources/\n/exampleSite/resources/\n/exampleSite/data/sprites/\nVERSION\n\n# hugo\n.hugo_build.lock\n\n# testing\n.lighthouseci/\n"
  },
  {
    "path": ".gitsv/config.yaml",
    "content": "---\nversion: \"1.1\"\n\nversioning:\n  update-major: []\n  update-minor: [feat]\n  update-patch: [fix, perf, refactor, chore, test, ci, docs]\n\ntag:\n  pattern: \"v%d.%d.%d\"\n\nrelease-notes:\n  sections:\n    - name: Features\n      commit-types: [feat]\n      section-type: commits\n    - name: Bug Fixes\n      commit-types: [fix]\n      section-type: commits\n    - name: Performance Improvements\n      commit-types: [perf]\n      section-type: commits\n    - name: Code Refactoring\n      commit-types: [refactor]\n      section-type: commits\n    - name: Others\n      commit-types: [chore]\n      section-type: commits\n    - name: Testing\n      commit-types: [test]\n      section-type: commits\n    - name: CI Pipeline\n      commit-types: [ci]\n      section-type: commits\n    - name: Documentation\n      commit-types: [docs]\n      section-type: commits\n    - name: BREAKING CHANGES\n      section-type: breaking-changes\n\ncommit-message:\n  footer:\n    issue:\n      key: issue\n      add-value-prefix: \"#\"\n  issue:\n    regex: \"#?[0-9]+\"\n"
  },
  {
    "path": ".htmlvalidate.json",
    "content": "{\n  \"extends\": [\"html-validate:standard\"],\n  \"rules\": {\n    \"element-required-content\": \"off\",\n    \"element-permitted-content\": \"off\",\n    \"no-raw-characters\": \"off\",\n    \"attribute-misuse\": \"warn\"\n  }\n}\n"
  },
  {
    "path": ".jsbeautifyrc",
    "content": "{\n    \"indent_size\": 4,\n    \"indent_char\": \" \",\n    \"preserve_newlines\": false,\n    \"unformatted\": [\"svg\"],\n    \"content_unformatted\": [\"pre\"],\n    \"extra_liners\": [\"head\", \"body\", \"html\", \"main\", \"header\", \"footer\", \"section\"]\n}\n"
  },
  {
    "path": ".lighthouserc.yaml",
    "content": "---\nci:\n  collect:\n    numberOfRuns: 3\n    staticDistDir: exampleSite/public\n    url:\n      - http://localhost/\n      - http://localhost/404.html\n      - http://localhost/usage/getting-started/\n    settings:\n      chromeFlags: \"--no-sandbox --headless --disable-dev-shm-usage\"\n      onlyCategories: [\"performance\", \"accessibility\", \"best-practices\", \"seo\"]\n      skipAudits:\n        [\n          \"color-contrast\",\n          \"uses-long-cache-ttl\",\n          \"csp-xss\",\n          \"bf-cache\",\n          \"is-crawlable\",\n          \"image-size-responsive\",\n          \"render-blocking-resources\",\n          \"largest-contentful-paint\",\n          \"unused-css-rules\",\n          \"network-dependency-tree-insight\",\n          \"legacy-javascript\",\n          \"errors-in-console\",\n          \"max-potential-fid\",\n          \"interactive\",\n          \"dom-size\",\n          \"forced-reflow-insight\",\n          \"unused-javascript\",\n          \"cls-culprits-insight\",\n          \"cache-insight\",\n          \"render-blocking-insight\"\n        ]\n  assert:\n    preset: \"lighthouse:no-pwa\"\n    assertions:\n      color-contrast: off\n      uses-long-cache-ttl: off\n      csp-xss: off\n      # FIXME: https://github.com/GoogleChrome/lighthouse/issues/14957\n      bf-cache: off\n      is-crawlable: off\n      image-size-responsive: off\n      render-blocking-resources: off\n      largest-contentful-paint: off\n      unused-css-rules: off\n      network-dependency-tree-insight: off\n      cls-culprits-insight: off\n      cache-insight: off\n      render-blocking-insight: off\n      legacy-javascript: off\n      errors-in-console: off\n      max-potential-fid: off\n      interactive: off\n      dom-size: off\n      forced-reflow-insight: off\n      unused-javascript: off\n      total-byte-weight: warn\n      identical-links-same-purpose: warn\n      tap-targets: off\n      unsized-images: warn\n      # FIXME: https://github.com/GoogleChrome/lighthouse/issues/11460\n      categories:performance:\n        - warn\n        - minScore: 0.95\n      categories:accessibility:\n        - error\n        - minScore: 1\n      categories:seo:\n        - error\n        - minScore: 0.95\n  upload:\n    target: filesystem\n    outputDir: lhci_reports\n"
  },
  {
    "path": ".lycheeignore",
    "content": "https://github.com/thegeeklab/.+/edit/main/.*\nhttps://unsplash.com.*\nhttps://www.color-hex.com.*\nhttps://geekdocs.de/\n"
  },
  {
    "path": ".markdownlint.yaml",
    "content": "---\ndefault: True\nMD013: False\nMD041: False\nMD042: False\nMD004:\n  style: dash\nMD010:\n  code_blocks: False\n"
  },
  {
    "path": ".npmrc",
    "content": "loglevel=error\nfund=false\nengine-strict=true\n"
  },
  {
    "path": ".nvmrc",
    "content": "lts/*\n"
  },
  {
    "path": ".prettierignore",
    "content": "_normalize.css\nlist.json.json\n/.lighthouseci/\n/themes/\n/static/js/\n/src/favicon/\nLICENSE\n**/*.html\n"
  },
  {
    "path": ".prettierrc",
    "content": "{\n  \"printWidth\": 99,\n  \"singleQuote\": false,\n  \"semi\": false,\n  \"trailingComma\": \"none\"\n}\n"
  },
  {
    "path": ".tarignore",
    "content": ".envrc\n.nvmrc\n.npmrc\n.tarignore\n.git*\n.woodpecker*\n.lighthouse*\n.markdownlint*\n.jsbeautify*\n.prettier*\n.htmlvalidate*\n.lycheeignore*\n.cspell*\neslint*\nexample*\nwebpack*\nsvgsprite*\npackage*\nnode*\nlocal*\ndist\nsrc\nbuild\nrenovate*\nresources\nCONTRIBUTING.md\n"
  },
  {
    "path": ".woodpecker/build-package.yaml",
    "content": "---\nwhen:\n  - event: [pull_request, tag]\n  - event: [push, manual]\n    branch:\n      - ${CI_REPO_DEFAULT_BRANCH}\n\nsteps:\n  - name: assets\n    image: docker.io/library/node:lts\n    commands:\n      - npm install --quiet --no-progress\n      - npm run build\n      - cat VERSION\n    environment:\n      FORCE_COLOR: \"true\"\n\n  - name: package\n    image: docker.io/library/node:lts\n    commands:\n      - npm run pack\n    environment:\n      FORCE_COLOR: \"true\"\n\n  - name: checksum\n    image: quay.io/thegeeklab/alpine-tools\n    commands:\n      - cd dist/ && sha256sum * > ../sha256sum.txt\n\n  - name: changelog\n    image: quay.io/thegeeklab/git-sv\n    commands:\n      - git sv current-version\n      - git sv release-notes -t ${CI_COMMIT_TAG:-next} -o CHANGELOG.md\n      - cat CHANGELOG.md\n\n  - name: publish-github\n    image: docker.io/plugins/github-release\n    settings:\n      api_key:\n        from_secret: github_token\n      files:\n        - dist/*\n        - sha256sum.txt\n      note: CHANGELOG.md\n      overwrite: true\n      title: ${CI_COMMIT_TAG}\n    when:\n      - event: [tag]\n\ndepends_on:\n  - static\n"
  },
  {
    "path": ".woodpecker/docs.yaml",
    "content": "---\nwhen:\n  - event: [pull_request, tag]\n  - event: [push, manual]\n    branch:\n      - ${CI_REPO_DEFAULT_BRANCH}\n\nsteps:\n  - name: assets\n    image: docker.io/library/node:lts\n    commands:\n      - npm install --quiet --no-progress\n      - npm run svg-sprite-list\n      - mkdir -p exampleSite/themes/${CI_REPO_NAME}\n      - curl -sSL https://github.com/${CI_REPO}/releases/latest/download/${CI_REPO_NAME}.tar.gz | tar -xz -C exampleSite/themes/${CI_REPO_NAME}/ --strip-components=1\n    when:\n      - event: [tag]\n      - event: [push, manual]\n        branch:\n          - ${CI_REPO_DEFAULT_BRANCH}\n\n  - name: assets-main\n    image: docker.io/library/node:lts\n    commands:\n      - npm install --quiet --no-progress\n      - npm run build\n      - npm run svg-sprite-list\n      - mkdir -p exampleSite/themes/ && ln -s $(pwd)/ exampleSite/themes/${CI_REPO_NAME}\n    environment:\n      FORCE_COLOR: \"true\"\n    when:\n      - event: [pull_request]\n\n  - name: build\n    image: quay.io/thegeeklab/hugo:0.160\n    commands:\n      - hugo --panicOnWarning -s exampleSite/\n\n  - name: beautify\n    image: quay.io/thegeeklab/alpine-tools\n    commands:\n      - html-beautify -r -f 'exampleSite/public/**/*.html'\n    environment:\n      FORCE_COLOR: \"true\"\n\n  - name: publish\n    image: quay.io/thegeeklab/wp-s3-action\n    settings:\n      access_key:\n        from_secret: s3_access_key\n      bucket: geekdocs-root\n      delete: true\n      endpoint:\n        from_secret: s3_endpoint\n      path_style: true\n      secret_key:\n        from_secret: s3_secret_access_key\n      source: exampleSite/public/\n      strip_prefix: exampleSite/public/\n    when:\n      - event: [tag]\n      - event: [push, manual]\n        branch:\n          - ${CI_REPO_DEFAULT_BRANCH}\n        status: [success, failure]\n\ndepends_on:\n  - build-package\n"
  },
  {
    "path": ".woodpecker/static.yaml",
    "content": "---\nwhen:\n  - event: [pull_request, tag]\n  - event: [push, manual]\n    branch:\n      - ${CI_REPO_DEFAULT_BRANCH}\n\nsteps:\n  - name: eslint\n    image: docker.io/library/node:lts\n    depends_on: []\n    commands:\n      - npm install --quiet --no-progress\n      - npm run lint:js\n    environment:\n      FORCE_COLOR: \"true\"\n\n  - name: markdownlint\n    image: quay.io/thegeeklab/markdownlint-cli\n    depends_on: []\n    commands:\n      - markdownlint 'exampleSite/content/**/*.md' 'README.md' 'CONTRIBUTING.md'\n\n  - name: spellcheck\n    image: ghcr.io/streetsidesoftware/cspell\n    depends_on: []\n    commands:\n      - cspell-cli lint . --gitignore --color\n\n  - name: assets\n    image: docker.io/library/node:lts\n    depends_on: []\n    commands:\n      - npm install --quiet --no-progress\n      - npm run build\n    environment:\n      FORCE_COLOR: \"true\"\n\n  - name: testbuild\n    image: quay.io/thegeeklab/hugo:0.160\n    depends_on: [assets]\n    commands:\n      - mkdir -p exampleSite/themes/ && ln -s $(pwd)/ exampleSite/themes/${CI_REPO_NAME}\n      - hugo --panicOnWarning -s exampleSite/\n\n  - name: link-validation\n    image: docker.io/lycheeverse/lychee:0.23\n    depends_on: [testbuild]\n    commands:\n      - lychee --no-progress --format detailed README.md\n      - lychee --no-progress --format detailed --root-dir \"$(pwd)/exampleSite/public\" \"exampleSite/public/**/*.html\"\n    environment:\n      GITHUB_TOKEN:\n        from_secret: github_token_ro\n\n  - name: html-validation\n    image: docker.io/library/node:lts\n    depends_on: [testbuild]\n    commands:\n      - npm install --quiet --no-progress\n      - npm run lint:html\n    environment:\n      FORCE_COLOR: \"true\"\n\n  - name: page-validation\n    image: quay.io/thegeeklab/lhci:0.15\n    depends_on: [testbuild]\n    commands:\n      - lhci autorun\n    environment:\n      LHCI_SERVER_URL: https://ci-artifact.rknet.org/${CI_REPO_NAME}/\n"
  },
  {
    "path": "CONTRIBUTING.md",
    "content": "# Contributing\n\n## Security\n\nIf you think you have found a **security issue**, please do not mention it in this repository.\nInstead, send an email to `security@thegeeklab.de` with as many details as possible so it can be handled confidential.\n\n## Bug Reports and Feature Requests\n\nIf you have found a **bug** or have a **feature request** please use the search first to see if a similar issue already exists.\nIf not, please create an issue in this repository\n\n## Code\n\nIf you would like to fix a bug or implement a feature, please fork the repository and create a Pull Request.\n\nBefore you start any Pull Request, it is recommended that you create an issue to discuss first if you have any\ndoubts about requirement or implementation. That way you can be sure that the maintainer(s) agree on what to change and how,\nand you can hopefully get a quick merge afterwards.\n\nPull Requests can only be merged once all status checks are green.\n\n## Do not force push to your Pull Request branch\n\nPlease do not force push to your Pull Requests branch after you have created your Pull Request, as doing so makes it harder for us to review your work.\nPull Requests will always be squashed by us when we merge your work. Commit as many times as you need in your Pull Request branch.\n\n## Re-requesting a review\n\nPlease do not ping your reviewer(s) by mentioning them in a new comment. Instead, use the re-request review functionality.\nRead more about this in the [GitHub docs, Re-requesting a review](https://docs.github.com/en/free-pro-team@latest/github/collaborating-with-issues-and-pull-requests/incorporating-feedback-in-your-pull-request#re-requesting-a-review).\n"
  },
  {
    "path": "LICENSE",
    "content": "MIT License\n\nCopyright (c) 2022 Robert Kaussow <mail@thegeeklab.de>\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is furnished\nto do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice (including the next\nparagraph) shall be included in all copies or substantial portions of the\nSoftware.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\nFOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS\nOR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,\nWHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF\nOR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n"
  },
  {
    "path": "README.md",
    "content": "# Geekdoc\n\n[![Build Status](https://ci.thegeeklab.de/api/badges/thegeeklab/hugo-geekdoc/status.svg)](https://ci.thegeeklab.de/repos/thegeeklab/hugo-geekdoc)\n[![Hugo Version](https://img.shields.io/badge/hugo-0.156-blue.svg)](https://gohugo.io)\n[![GitHub release](https://img.shields.io/github/v/release/thegeeklab/hugo-geekdoc)](https://github.com/thegeeklab/hugo-geekdoc/releases/latest)\n[![GitHub contributors](https://img.shields.io/github/contributors/thegeeklab/hugo-geekdoc)](https://github.com/thegeeklab/hugo-geekdoc/graphs/contributors)\n[![License: MIT](https://img.shields.io/github/license/thegeeklab/hugo-geekdoc)](https://github.com/thegeeklab/hugo-geekdoc/blob/main/LICENSE)\n\nGeekdoc is a simple Hugo theme for documentations. It is intentionally designed as a fast and lean theme and may not fit the requirements of complex projects. If a more feature-complete theme is required there are a lot of great alternatives out there. You can find a demo and the full documentation at [https://geekdocs.de](https://geekdocs.de).\n\n![Desktop and mobile preview](https://raw.githubusercontent.com/thegeeklab/hugo-geekdoc/main/images/readme.png)\n\n## Build and release process\n\nThis theme is subject to a CI driven build and release process common for software development. During the release build, all necessary assets are automatically built by [webpack](https://webpack.js.org/) and bundled in a release tarball. You can download the latest release from the GitHub [release page](https://github.com/thegeeklab/hugo-geekdoc/releases).\n\nDue to the fact that `webpack` and `npm scripts` are used as pre-processors, the theme cannot be used from the main branch by default. If you want to use the theme from a cloned branch instead of a release tarball you'll need to install `webpack` locally and run the build script once to create all required assets.\n\n```shell\n# install required packages from package.json\nnpm install\n\n# run the build script to build required assets\nnpm run build\n\n# build release tarball\nnpm run pack\n```\n\nSee the [Getting Started Guide](https://geekdocs.de/usage/getting-started/) for details about the different setup options.\n\n## Contributors\n\nSpecial thanks to all [contributors](https://github.com/thegeeklab/hugo-geekdoc/graphs/contributors). If you would like to contribute, please see the [instructions](https://github.com/thegeeklab/hugo-geekdoc/blob/main/CONTRIBUTING.md).\n\nGeekdoc is inspired and partially based on the [hugo-book](https://github.com/alex-shpak/hugo-book) theme, thanks [Alex Shpak](https://github.com/alex-shpak/) for your work.\n\n## License\n\nThis project is licensed under the MIT License - see the [LICENSE](https://github.com/thegeeklab/hugo-geekdoc/blob/main/LICENSE) file for details.\n\nThe used SVG icons and generated icon fonts are licensed under the license of the respective icon pack:\n\n- Font Awesome: [CC BY 4.0 License](https://github.com/FortAwesome/Font-Awesome#license)\n- IcoMoon Free Pack: [GPL/CC BY 4.0](https://icomoon.io/#icons-icomoon)\n- Material Icons: [Apache License 2.0](https://github.com/google/material-design-icons/blob/main/LICENSE)\n"
  },
  {
    "path": "archetypes/docs.md",
    "content": "---\ntitle: \"{{ .Name | humanize | title }}\"\nweight: 1\n# geekdocFlatSection: false\n# geekdocToc: 6\n# geekdocHidden: false\n---\n"
  },
  {
    "path": "archetypes/posts.md",
    "content": "---\ntitle: \"{{ replace .Name \"-\" \" \" | title }}\"\ndate: {{ .Date }}\n---\n"
  },
  {
    "path": "assets/search/config.json",
    "content": "{{- $searchDataFile := printf \"search/%s.data.json\" .Language.Lang -}}\n{{- $searchData := resources.Get \"search/data.json\" | resources.ExecuteAsTemplate $searchDataFile . | resources.Minify -}}\n{\n  \"dataFile\": {{ $searchData.RelPermalink | jsonify }},\n  \"indexConfig\": {{ .Site.Params.geekdocSearchConfig | jsonify }},\n  \"showParent\": {{ if .Site.Params.geekdocSearchShowParent }}true{{ else }}false{{ end }},\n  \"showDescription\": {{ if .Site.Params.geekdocSearchShowDescription }}true{{ else }}false{{ end }}\n}\n"
  },
  {
    "path": "assets/search/data.json",
    "content": "[\n  {{ range $index, $page := (where .Site.Pages \"Params.geekdocProtected\" \"ne\" true) }}\n    {{ if ne $index 0 }},{{ end }}\n    {\n      \"id\": {{ $index }},\n      \"href\": \"{{ $page.RelPermalink }}\",\n      \"title\": {{ (partial \"utils/title\" $page) | jsonify }},\n      \"parent\": {{ with $page.Parent }}{{ (partial \"utils/title\" .) | jsonify }}{{ else }}\"\"{{ end }},\n      \"content\": {{ $page.Plain | jsonify }},\n      \"description\": {{ $page.Summary | plainify | jsonify }}\n    }\n  {{ end }}\n]\n"
  },
  {
    "path": "eslint.config.js",
    "content": "import eslint from \"@eslint/js\"\nimport globals from \"globals\"\nimport eslintPluginPrettierRecommended from \"eslint-plugin-prettier/recommended\"\n\nexport default [\n  eslint.configs.recommended,\n  {\n    languageOptions: {\n      globals: {\n        ...globals.browser\n      },\n      ecmaVersion: \"latest\",\n      sourceType: \"module\"\n    },\n    rules: {\n      \"no-var\": \"error\",\n      \"prefer-const\": \"error\",\n      \"prefer-arrow-callback\": \"error\",\n      \"prefer-template\": \"error\",\n      \"object-shorthand\": \"error\",\n      \"no-loop-func\": \"error\",\n      \"no-new-object\": \"error\",\n      \"no-array-constructor\": \"error\",\n      \"no-prototype-builtins\": \"error\",\n      \"prefer-spread\": \"error\",\n      \"prefer-rest-params\": \"error\",\n      \"default-param-last\": \"error\",\n      \"no-useless-constructor\": \"error\",\n      \"no-duplicate-imports\": \"error\",\n      \"prefer-destructuring\": [\"error\", {\n        \"VariableDeclarator\": {\n          \"array\": true,\n          \"object\": true\n        },\n        \"AssignmentExpression\": {\n          \"array\": false,\n          \"object\": false\n        }\n      }]\n    }\n  },\n  eslintPluginPrettierRecommended\n]\n"
  },
  {
    "path": "exampleSite/config/_default/hugo.yaml",
    "content": "---\nbaseURL: https://geekdocs.de/\ntitle: Geekdocs\ntheme: hugo-geekdoc\n\npygmentsUseClasses: true\npygmentsCodeFences: true\ntimeout: \"180000s\"\npluralizeListTitles: false\n\ndefaultContentLanguage: en\n\ndisablePathToLower: true\nenableGitInfo: true\n\nenableRobotsTXT: true\n\nmarkup:\n  goldmark:\n    renderer:\n      unsafe: true\n  tableOfContents:\n    startLevel: 1\n    endLevel: 9\n\ntaxonomies:\n  tag: tags\n\noutputs:\n  home:\n    - HTML\n  page:\n    - HTML\n  section:\n    - HTML\n  taxonomy:\n    - HTML\n  term:\n    - HTML\n\nsecurity:\n  exec:\n    allow:\n      - \"^git$\"\n      - \"^asciidoctor$\"\n"
  },
  {
    "path": "exampleSite/config/_default/languages.yaml",
    "content": "---\nen:\n  languageName: \"English\"\n  contentDir: \"content/en\"\n  weight: 10\n"
  },
  {
    "path": "exampleSite/config/_default/params.yaml",
    "content": "---\n# cspell:ignore socialmedia2\n\ndescription: >\n  Geekdoc is a simple Hugo theme for documentations. It is intentionally designed as a fast and lean theme\n  and may not fit the requirements of complex projects. If a more feature-complete theme is required\n  there are a lot of good alternatives out there.\nimages:\n  - \"socialmedia2.png\"\n\ngeekdocToC: 3\ngeekdocTagsToMenu: true\n\ngeekdocRepo: https://github.com/thegeeklab/hugo-geekdoc\ngeekdocEditPath: edit/main/exampleSite\ngeekdocPageLastmod: false\n\ngeekdocSearch: true\ngeekdocSearchShowParent: true\ngeekdocSearchShowDescription: true\n\ngeekdocLegalNotice: https://thegeeklab.de/legal-notice/#contact-information\ngeekdocPrivacyPolicy: https://thegeeklab.de/legal-notice/#privacy-policy\n\ngeekdocImageLazyLoading: true\ngeekdocDarkModeDim: true\n"
  },
  {
    "path": "exampleSite/content/en/_includes/_index.md",
    "content": "---\ngeekdocHidden: true\n---\n"
  },
  {
    "path": "exampleSite/content/en/_includes/include-page.md",
    "content": "_**Example page include**_\n\n{{< hint type=note >}}\n**Example Shortcode**\\\nShortcode used in an include page.\n{{< /hint >}}\n\n| Head 1 | Head 2 | Head 3 |\n| ------ | ------ | ------ |\n| 1      | 2      | 3      |\n"
  },
  {
    "path": "exampleSite/content/en/_index.md",
    "content": "---\ntitle: Welcome to the documentation\ngeekdocNav: false\ngeekdocAlign: center\ngeekdocAnchor: false\n---\n\n<!-- markdownlint-capture -->\n<!-- markdownlint-disable MD033 -->\n\n<span class=\"badge-placeholder\">[![Build Status](https://ci.thegeeklab.de/api/badges/thegeeklab/hugo-geekdoc/status.svg)](https://ci.thegeeklab.de/repos/thegeeklab/hugo-geekdoc)</span>\n<span class=\"badge-placeholder\">[![Hugo Version](https://img.shields.io/badge/hugo-0.156-blue.svg)](https://gohugo.io)</span>\n<span class=\"badge-placeholder\">[![GitHub release](https://img.shields.io/github/v/release/thegeeklab/hugo-geekdoc)](https://github.com/thegeeklab/hugo-geekdoc/releases/latest)</span>\n<span class=\"badge-placeholder\">[![GitHub contributors](https://img.shields.io/github/contributors/thegeeklab/hugo-geekdoc)](https://github.com/thegeeklab/hugo-geekdoc/graphs/contributors)</span>\n<span class=\"badge-placeholder\">[![License: MIT](https://img.shields.io/github/license/thegeeklab/hugo-geekdoc)](https://github.com/thegeeklab/hugo-geekdoc/blob/main/LICENSE)</span>\n\n<!-- markdownlint-restore -->\n\nGeekdoc is a simple Hugo theme for documentations. It is intentionally designed as a fast and lean theme and may not fit the requirements of complex projects. If a more feature-complete theme is required there are a lot of great alternatives out there.\n\n{{< button size=\"large\" relref=\"usage/getting-started/\" >}}Getting Started{{< /button >}}\n\n## Feature overview\n\n{{< columns >}}\n\n### Clean and simple design\n\nStay focused on exploring the content and don't get overwhelmed by a complex design.\n\n<--->\n\n### Light and mobile-friendly\n\nThe theme is powered by less than 1 MB and looks impressive on mobile devices as well as on a regular Desktop.\n\n<--->\n\n### Easy customization\n\nThe look and feel can be easily customized by CSS custom properties (variables), features can be adjusted by Hugo parameters.\n\n{{< /columns >}}\n\n{{< columns >}}\n\n### Zero initial configuration\n\nGetting started in minutes. The theme is shipped with a default configuration and works out of the box.\n\n<--->\n\n### Handy shortcodes\n\nWe included some (hopefully) useful custom shortcodes so you don't have to and can focus on writing amazing docs.\n\n<--->\n\n### Dark mode\n\nPowerful dark mode that detects your system preferences or can be controlled by a toggle switch.\n\n{{< /columns >}}\n"
  },
  {
    "path": "exampleSite/content/en/asciidoc/admonition-icons.adoc",
    "content": "+++\ntitle = \"Admonition Icons\"\n+++\n\n:icons: font\n\nBy default, the admonition is rendered with a plain text label. To enable font icons the document attribute `:icons: font` need to be set.\n\n== Example\n\n[NOTE]\nDolor sit, sumo unique argument um no. Gracie nominal id xiv. Romanesque acclimates investiture.\nOrnateness bland it ex enc, est yeti am bongo detract re.\n\n[TIP]\nDolor sit, sumo unique argument um no. Gracie nominal id xiv. Romanesque acclimates investiture.\nOrnateness bland it ex enc, est yeti am bongo detract re.\n\n[IMPORTANT]\nDolor sit, sumo unique argument um no. Gracie nominal id xiv. Romanesque acclimates investiture.\nOrnateness bland it ex enc, est yeti am bongo detract re.\n\n[CAUTION]\nDolor sit, sumo unique argument um no. Gracie nominal id xiv. Romanesque acclimates investiture.\nOrnateness bland it ex enc, est yeti am bongo detract re.\n\n[WARNING]\nDolor sit, sumo unique argument um no. Gracie nominal id xiv. Romanesque acclimates investiture.\nOrnateness bland it ex enc, est yeti am bongo detract re.\n"
  },
  {
    "path": "exampleSite/content/en/asciidoc/admonitions.adoc",
    "content": "+++\ntitle = \"Admonitions\"\n+++\n\n// cspell:ignore toclevels\n\n:toc:\n:toclevels: 2\n\n{{< toc >}}\n\n== Admonition types\n\nThere are certain statements you may want to draw attention to by taking them out of the content's flow and labeling them with a priority. These are called admonitions.\n\n```tpl\n[NOTE|TIP|IMPORTANT|CAUTION|WARNING]\nDolor sit, sumo unique argument um no. Gracie nominal id xiv. Romanesque acclimates investiture.\nOrnateness bland it ex enc, est yeti am bongo detract re.\n```\n\n=== Example\n\n[NOTE]\nDolor sit, sumo unique argument um no. Gracie nominal id xiv. Romanesque acclimates investiture.\nOrnateness bland it ex enc, est yeti am bongo detract re.\n\n[TIP]\nDolor sit, sumo unique argument um no. Gracie nominal id xiv. Romanesque acclimates investiture.\nOrnateness bland it ex enc, est yeti am bongo detract re.\n\n[IMPORTANT]\nDolor sit, sumo unique argument um no. Gracie nominal id xiv. Romanesque acclimates investiture.\nOrnateness bland it ex enc, est yeti am bongo detract re.\n\n[CAUTION]\nDolor sit, sumo unique argument um no. Gracie nominal id xiv. Romanesque acclimates investiture.\nOrnateness bland it ex enc, est yeti am bongo detract re.\n\n[WARNING]\n====\nDolor sit, sumo unique argument um no. Gracie nominal id xiv. Romanesque acclimates investiture.\nOrnateness bland it ex enc, est yeti am bongo detract re.\n\nRomanesque acclimates investiture.\n====\n\n== Admonition icons\n\nIcons can be added by setting a unicode glyph or a character reference to the `tip-caption` attribute:\n\n```text\n:tip-caption: 💡\n\n[TIP]\nIt's possible to use Unicode glyphs as admonition icons.\n```\n\n```text\n:tip-caption: pass:[&#128293;]\n\n[TIP]\nIt's possible to use Unicode glyphs as admonition icons.\n```\n\n=== Example\n\n:tip-caption: 💡\n\n[TIP]\nIt's possible to use Unicode glyphs as admonition icons.\n\n\n:tip-caption: pass:[&#128293;]\n\n[TIP]\nIt's possible to use Unicode glyphs as admonition icons.\n"
  },
  {
    "path": "exampleSite/content/en/collapse/_index.md",
    "content": "---\ntitle: Collapse\ngeekdocCollapseSection: true\n---\n\nDemo collapsible menu entries.\n"
  },
  {
    "path": "exampleSite/content/en/collapse/level-1/_index.md",
    "content": "Level 1\n\n<!-- cspell:disable -->\n\n{{< toc-tree >}}\n\n<!-- cspell:enable -->\n"
  },
  {
    "path": "exampleSite/content/en/collapse/level-1/level-1-1.md",
    "content": "---\ntitle: Level 1.1\n---\n\nLevel 1.1\n"
  },
  {
    "path": "exampleSite/content/en/collapse/level-1/level-1-2.md",
    "content": "---\ntitle: Level 1.2\n---\n\nLevel 1.2\n"
  },
  {
    "path": "exampleSite/content/en/collapse/level-2/_index.md",
    "content": "---\ngeekdocCollapseSection: true\n---\n\nLevel-2\n"
  },
  {
    "path": "exampleSite/content/en/collapse/level-2/level-2-1.md",
    "content": "---\ntitle: Level 2.1\n---\n\nLevel 2.1\n"
  },
  {
    "path": "exampleSite/content/en/collapse/level-2/level-2-2.md",
    "content": "---\ntitle: Level 2.2\n---\n\nLevel 2.2\n"
  },
  {
    "path": "exampleSite/content/en/features/_index.md",
    "content": "---\ntitle: Features\nweight: -15\n---\n"
  },
  {
    "path": "exampleSite/content/en/features/code-blocks.md",
    "content": "---\ntitle: Code Blocks\n---\n\nThere are several ways to add code blocks. Most of them work out of the box, only the Hugo shortcode `<highlight>` needs to be configured to work properly. The theme also provides some additional features like a copy button and an option to set the maximum length of code blocks. Both of these functions and the dependent formatting rely on the `.highlight` CSS class. You must ensure that you always assign a language to your code blocks if you want to use these functions. If you do not want to apply syntax highlighting, you can also specify `plain` or `text` as the language.\n\n{{< toc >}}\n\n## Inline code\n\nTo display an inline shortcode use single quotes:\n\n```plain\n`some code`\n```\n\n**Example:** `some code` with a [`link`](#)\n\n## Code blocks\n\nCode blocks can be uses without language specification:\n\n````markdown\n```plain\nsome code\n```\n````\n\n**Example:**\n\n```plain\nsome code\n```\n\n... or if you need language specific syntax highlighting:\n\n````markdown\n```shell\n# some code\necho \"Hello world\"\n```\n````\n\n**Example:**\n\n```shell\n# some code\necho \"Hello World\"\n```\n\n## Highlight shortcode\n\nHugo has a build-in shortcode for syntax highlighting. To work properly with this theme, you have to set following options in your site configuration:\n\n{{< tabs \"uniqueid\" >}}\n{{< tab \"TOML\" >}}\n\n```toml\npygmentsUseClasses=true\npygmentsCodeFences=true\n```\n\n{{< /tab >}}\n{{< tab \"YAML\" >}}\n\n```yaml\npygmentsUseClasses: true\npygmentsCodeFences: true\n```\n\n{{< /tab >}}\n{{< /tabs >}}\n\nYou can use it like every other shortcode:\n\n<!-- prettier-ignore -->\n```markdown\n{{</* highlight Shell \"linenos=table\" */>}}\n# some code\necho \"Hello World\"\n{{</* /highlight */>}}\n```\n\n**Example:**\n\n<!-- prettier-ignore-start -->\n<!-- markdownlint-capture -->\n<!-- markdownlint-disable -->\n{{< highlight Shell \"linenos=table\" >}}\n# some code\necho \"Hello World\"\n{{< /highlight >}}\n<!-- markdownlint-restore -->\n<!-- prettier-ignore-end-->\n\n## Gist Shortcode\n\nThe Gist shortcode is a built-in Hugo shortcode to load GitHub gists. For details usage information please check the Hugo [documentation](https://gohugo.io/content-management/shortcodes/#gist).\n\n<!-- prettier-ignore -->\n```markdown\n{{</* gist spf13 7896402 */>}}\n```\n\n**Example:**\n\n{{< gist spf13 7896402 >}}\n"
  },
  {
    "path": "exampleSite/content/en/features/dark-mode/_index.md",
    "content": "---\ntitle: Dark Mode\n---\n\nSay hello to the dark mode of the Geekdoc theme!\n\n[![Geekdoc in dark mode](images/geekdoc-dark.png)](images/geekdoc-dark.png)\n\nThe dark mode can be used in two different ways. If you have JavaScript disabled in your browser, the dark mode automatically detects the preferred system settings via the `prefers-color-scheme` parameter. Depending on the value, the theme will automatically switch between dark and light mode if this feature is supported by your operating system and browser.\n\nThe second mode requires JavaScript and is controlled by a dark mode switch in the upper right corner. You can switch between three modes: Auto, Dark and Light. Auto mode works the same as the first method mentioned above and automatically detects the system setting. Dark and Light modes allow you to force one of them for your Geekdoc page only, regardless of the system setting. This works even if your browser or operating system does not support the system setting. The current selection is stored locally via the Web Storage API.\n\nTo avoid very bright spots often caused by images while using the dark mode we have added an optional auto-dim feature that can be enabled with the site parameter `geekdocDarkModeDim` (see [Configuration](/usage/configuration/)). As this may have an impact on the quality of the images it is disabled by default.\n"
  },
  {
    "path": "exampleSite/content/en/features/icon-sets.md",
    "content": "---\ntitle: Icon Sets\n# cSpell:ignore svgsprit.es\n---\n\n{{< toc >}}\n\n## Custom icon sets\n\nThe only supported source for custom icons are SVG sprites. Some icon frameworks provides ready to use sprites e.g. FontAwesome. If the framework don't provide sprites, you can create your own from raw SVG icons. There are a lot of tools available to create sprites, please choose one that fits your need. One solution could be [svgsprit.es](https://svgsprit.es/).\n\nRegardless of which tool (or existing sprite) you choose, there are a few requirements that must be met:\n\n1. The sprite must be a valid **SVG** file.\n2. You have to ensure to **hide the sprite**. Apply the predefined class `svg-sprite` or `hidden` to the root element of your sprite or add a small piece of inline CSS e.g. `style=\"display: none;\"`.\n3. Save the sprite to the folder `assets/sprites` right beside your `content` folder.\n\nThe result of a valid minimal SVG sprite file could look like this:\n\n```xml\n<svg class=\"svg-sprite\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n    <symbol viewBox=\"-2.29 -2.29 28.57 28.57\" id=\"arrow_back\" xmlns=\"http://www.w3.org/2000/svg\">\n        <path d=\"M24 10.526v2.947H5.755l8.351 8.421-2.105 2.105-12-12 12-12 2.105 2.105-8.351 8.421H24z\"/>\n    </symbol>\n</svg>\n```\n\n**Example:**\n\nFontAwesome provides three pre-build sprites included in the regular Web download pack, `sprites/brands.svg`, `sprites/regular.svg` and `sprites/solid.svg`. Choose your sprite to use and copy it to your project's root directory into `assets/sprites`, right beside your `content` folder:\n\n```bash\nmy_project/\n├── assets\n│   └── sprites\n│       └── regular.svg\n├── hugo.toml\n├── content\n│   ├── _index.md\n│   ├── ...\n```\n\nThat's it! The theme will auto-load all available SVG sprites provided in the assets folder. To use the icons e.g. in the [bundle menu](/usage/menus/#bundle-menu), you need to lookup the id of the icon. An example would be `thumbs-up` {{< icon \"thumbs-up\" >}}. There is also a [shortcode](/shortcodes/icons/) available.\n\n## Build-in icons\n\nThe theme bundles just a small set of hand crafted icons.\n\n{{< sprites >}}\n"
  },
  {
    "path": "exampleSite/content/en/features/multilingual/_index.md",
    "content": "---\ntitle: Multilingual\n# cSpell:ignore Veröffentlichung\n---\n\n{{< toc >}}\n\nHugo supports the creation of websites with multiple languages. In this post we will explain how to get configure Multilingual Mode with this theme.\n\n## Configuration\n\n### Languages\n\nYou need to set a default language and configure at least two different languages used by your site to your configuration file at `hugo.toml`:\n\n```toml\ndefaultContentLanguage = \"en\"\n\n[languages.en]\nlanguageName = \"English\"\ncontentDir = \"content/en\"\nweight = 10\n\n[languages.de]\nlanguageName = \"German\"\ncontentDir = \"content/de\"\nweight = 20\n```\n\n### Translation Strings\n\nTo customize translation strings used by the theme you can create a file `i18n/<languagecode>.toml` for every language you want to use e.g. `i18n/en.toml`. You can lookup all used strings in the [default](https://github.com/thegeeklab/hugo-geekdoc/blob/main/i18n/en.yaml) translation file.\n\n### Menus\n\nFor the [Bundle Menu](/usage/menus/#bundle-menu) as well as for the [Extra Header Menu](/usage/menus/#extra-header-menu) you can translate the name within the data file of the menu:\n\n```yaml\n---\nmore:\n  # If `name` is a text, this text will be used as name for each language.\n  - name: News\n    ref: \"/#\"\n    icon: \"gdoc_notification\"\n  # To translate the name you can add a sub-item per language. Important: If you miss a language key\n  # that is configured in the languages list of your `hugo.toml` the name will be empty for this language!\n  - name:\n      en: Releases\n      de: Veröffentlichung\n    ref: \"https://github.com/thegeeklab/hugo-geekdoc/releases\"\n    external: true\n    icon: \"gdoc_download\"\n```\n\n## Add Content\n\nTo translate your content you need to create a directory `content/<languagecode>/` for each language you want to use e.g. `content/en/`. This language directories will hold the translated pages for the particular language.\n\n## Switch Content\n\nIf you have configured at least two different languages, the language switcher will be enabled in the UI automatically. The switcher is as part of the header menu and displayed on all pages.\n\n{{< columns >}}\n\n[![Beach Color Palette](images/translation-available.png)](images/translation-available.png)\n\nOn pages for which a translation is available it will be displayed in the selection list and links to the translated page.\n\n<--->\n\n[![Beach Color Palette](images/translation-not-available.png)](images/translation-not-available.png)\n\nPages without a translation will be displayed in the selection list as well but are marked with an asterisk and link to the start page of the respective language.\n\n{{< /columns >}}\n"
  },
  {
    "path": "exampleSite/content/en/features/theming/_index.md",
    "content": "---\ntitle: Theming\n# cspell:ignore msapplication\n---\n\n{{< toc >}}\n\n## Color Scheme\n\nIf you want to customize the theme's color scheme to give it your individual touch, you are only a few lines of CSS away. Generally, you need to override the default settings. The easiest way to do this is to create a file named `static/custom.css` right at the root of your site.\n\nAll the necessary CSS customization properties are listed below. If you want to customize elements that don't use these properties, you can always look up the class name and override it directly. For inspiration, you can also take a look at [https://www.color-hex.com](https://www.color-hex.com/color-palettes/). In this simple example, we'll use the [_Beach_](https://www.color-hex.com/color-palette/895) color palette.\n\n[![Beach Color Palette](images/theme-example.png)](images/theme-example.png)\n\n**Custom CSS:**\n\n<!-- prettier-ignore-start -->\n<!-- cspell:disable -->\n{{< include file=\"/static/custom.css.example\" language=\"CSS\" options=\"linenos=table\" >}}\n<!-- cspell:enable -->\n<!-- prettier-ignore-end -->\n\n## Favicons\n\nThe Theme is shipped with a set of default Favicons in various formats generated by the [Favicon Generator](https://realfavicongenerator.net/). All files can be found in the `static/favicon` folder of the release tarball. To make the replacement of the default Favicons as simple as possible, the theme loads only a very small subset of the Favicon formats.\n\n<!-- prettier-ignore -->\n```tpl\n<link rel=\"icon\" type=\"image/svg+xml\" href=\"{{ \"favicon/favicon.svg\" | relURL }}\">\n<link rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"{{ \"favicon/favicon-32x32.png\" | relURL }}\">\n<link rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"{{ \"favicon/favicon-16x16.png\" | relURL }}\">\n```\n\n### Simple replacement\n\nThe minimal steps to load a custom Favicon is to overwrite the three default Favicon files. Therefore place these files into your projects root folder:\n\n- `static/favicon/favicon.svg`\n- `static/favicon/favicon-32x32.png`\n- `static/favicon/favicon-16x16.png`\n\n### Full replacement\n\nIf you want to add more Favicon formats you have to [overwrite](https://gohugo.io/templates/lookup-order/) the default partial that is used to load the files. In the next step you have to place the required files in the `static` folder of your project as well.\n\n**Example:**\n\n<!-- prettier-ignore -->\n```tpl\n<!-- layouts/partials/head/favicons.html -->\n<link rel=\"icon\" type=\"image/svg+xml\" href=\"{{ \"favicon/favicon.svg\" | relURL }}\">\n<link rel=\"apple-touch-icon\" sizes=\"180x180\" href=\"{{ \"favicon/apple-touch-icon.png\" | relURL }}\">\n<link rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"{{ \"favicon/favicon-32x32.png\" | relURL }}\">\n<link rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"{{ \"favicon/favicon-16x16.png\" | relURL }}\">\n<link rel=\"manifest\" href=\"{{ \"favicon/site.webmanifest\" | relURL }}\">\n<link rel=\"mask-icon\" href=\"{{ \"favicon/safari-pinned-tab.svg\" | relURL }}\" color=\"#efefef\">\n<meta name=\"msapplication-TileColor\" content=\"#efefef\">\n<meta name=\"theme-color\" content=\"#efefef\">\n```\n\n## Fonts\n\nTo use a custom font, it needs to be specified first. While there are many ways to do this, we recommend to use `@font-face` as it supports local as well as remote fonts. If you want to serve the fonts from your own server, you have to place them in the `static/fonts` folder of your project.\n\nThe font registration is done in the `custom.css` file. There are also a few custom CSS properties available to simplify the usage of custom fonts.\n\n**Example:**\n\n<!-- prettier-ignore -->\n```css\n@font-face {\n  font-family: \"DancingScript\";\n  src:\n    url(\"fonts/DancingScript.woff2\") format(\"woff2\"),\n    url(\"fonts/DancingScript.woff\") format(\"woff\");\n  font-weight: normal;\n  font-style: normal;\n  font-display: swap;\n}\n\n:root {\n  --code-max-height: 60rem;\n\n  --header-font-family: \"DancingScript\";\n  --body-font-family: \"DancingScript\";\n  --code-font-family: \"DancingScript\";\n}\n```\n\nHappy customizing!\n"
  },
  {
    "path": "exampleSite/content/en/posts/_index.md",
    "content": "---\ntitle: News\ntype: posts\nweight: 10\ngeekdocHidden: true\n---\n"
  },
  {
    "path": "exampleSite/content/en/posts/hello_geekdoc.md",
    "content": "---\ntitle: Hello Geekdoc\ntype: posts\ndate: 2020-01-06\ntags:\n  - Documentation\n  - Updates\n---\n\nThis is the first release of the Geekdoc theme.\n\nDolor sit, sumo unique argument um no. Gracie nominal id xiv. Romanesque acclimates investiture. Ornateness bland it ex enc, est yeti am bongo detract re. Pro ad prompts feud gait, quid exercise emeritus bis e. In pro quints consequent, denim fastidious copious quo ad. Stet probates in duo.\n\nAmalia id per in minimum facility, quid facet modifier ea ma. Ill um select ma ad, en ferric patine sentient vim. Per expendable foreordained interpretations cu, maxim sole pertinacity in ram. Que no rota alters, ad sea sues exercise main rum, cu diam mas facility sea.\n"
  },
  {
    "path": "exampleSite/content/en/posts/initial-release.md",
    "content": "---\ntitle: Initial release\ntype: posts\ndate: 2020-01-08\n---\n\nThis is the first release of the Geekdoc theme.\n\nDolor sit, sumo unique argument um no. Gracie nominal id xiv. Romanesque acclimates investiture. Ornateness bland it ex enc, est yeti am bongo detract re. Pro ad prompts feud gait, quid exercise emeritus bis e. In pro quints consequent, denim fastidious copious quo ad. Stet probates in duo.\n"
  },
  {
    "path": "exampleSite/content/en/shortcodes/_index.md",
    "content": "---\ntitle: Shortcodes\nweight: -10\n---\n"
  },
  {
    "path": "exampleSite/content/en/shortcodes/audio/_index.md",
    "content": "---\ntitle: Audio\nresources:\n  - name: diamonds-trap\n    src: \"diamonds-trap.mp3\"\n    title: Diamonds Trap\n    params:\n      credits: \"[Jakob Eglmeier on openmusic.academy CC0-1.0](https://openmusic.academy/media-library/b9do2E2ZwVCfppyBf2yuej)\"\n# cspell:ignore Jakob Eglmeier openmusic\n---\n\nThe audio shortcode allows you to embed audio files.\n\n## Usage\n\nDefine your resources in the page front matter, custom parameter `params.credits` is optional.\n\n<!-- cspell:disable -->\n\n```md\n---\nresources:\n  - name: diamonds-trap\n    src: \"diamonds-trap.mp3\"\n    title: Diamonds Trap\n    params:\n      credits: \"[Jakob Eglmeier on openmusic.academy CC0-1.0](https://openmusic.academy/media-library/b9do2E2ZwVCfppyBf2yuej)\"\n---\n\n{{</* audio name=\"diamonds-trap\" */>}}\n```\n\n### Attributes\n\n<!-- prettier-ignore-start -->\n<!-- cspell:disable -->\n{{< propertylist name=shortcode-audio sort=name order=asc >}}\n<!-- cspell:enable -->\n<!-- prettier-ignore-end -->\n\n<!-- cspell:enable -->\n\n## Example\n\n<!-- cspell:disable -->\n\n{{< audio name=\"diamonds-trap\" >}}\n\n<!-- cspell:enable -->\n"
  },
  {
    "path": "exampleSite/content/en/shortcodes/avatar/_index.md",
    "content": "---\ntitle: Avatar\nresources:\n  - name: avatar\n    src: \"avatar.jpg\"\n    title: \"Avatar\"\n---\n\nThe avatar shortcode is another custom image shortcode.\n\n<!--more-->\n\n## Usage\n\nDefine a resource in the page front matter.\n\n<!-- cspell:disable -->\n\n```md\n---\nresources:\n  - name: avatar\n    src: \"images/avatar.jpg\"\n    title: \"Avatar\"\n---\n\n{{</* avatar name=\"avatar\" */>}}\n```\n\n<!-- cspell:enable -->\n\n## Attributes\n\n<!-- prettier-ignore-start -->\n<!-- cspell:disable -->\n{{< propertylist name=shortcode-avatar sort=name order=asc >}}\n<!-- cspell:enable -->\n<!-- prettier-ignore-end -->\n\n## Example\n\n<!-- cspell:disable -->\n\n{{< avatar name=avatar size=\"small\" >}}\n\n<!-- cspell:enable -->\n"
  },
  {
    "path": "exampleSite/content/en/shortcodes/buttons.md",
    "content": "---\ntitle: Buttons\n---\n\nButtons are styled links that can lead to local page or external link.\n\n## Usage\n\n<!-- prettier-ignore -->\n```tpl\n{{</* button relref=\"/\" [class=\"...\", size=\"large|regular\"] */>}}Get Home{{</* /button */>}}\n{{</* button href=\"https://github.com/thegeeklab/hugo-geekdoc\" */>}}Contribute{{</* /button */>}}\n```\n\n### Attributes\n\n<!-- prettier-ignore-start -->\n<!-- cspell:disable -->\n{{< propertylist name=shortcode-buttons sort=name order=asc >}}\n<!-- cspell:enable -->\n<!-- prettier-ignore-end -->\n\n## Example\n\n<!-- prettier-ignore-start -->\n<!-- markdownlint-capture -->\n<!-- markdownlint-disable -->\n{{< button relref=\"/\" >}}Get Home{{< /button >}}\n{{< button href=\"https://github.com/thegeeklab/hugo-geekdoc\" >}}Contribute{{< /button >}}\n<!-- markdownlint-restore -->\n<!-- prettier-ignore-end -->\n"
  },
  {
    "path": "exampleSite/content/en/shortcodes/columns.md",
    "content": "---\ntitle: Columns\n---\n\nThe Columns shortcode can be used to organize content side-by-side (horizontally) for better readability.\n\n## Usage\n\n```html\n{{</* columns */>}} <!-- begin columns block -->\n## Left Content\nDolor sit, sumo unique argument um no ...\n\n<---> <!-- magic separator, between columns -->\n\n## Mid Content\nDolor sit, sumo unique argument um no ...\n\n<---> <!-- magic separator, between columns -->\n\n## Right Content\nDolor sit, sumo unique argument um no ...\n{{</* /columns */>}}\n```\n\n### Attributes\n\n<!-- prettier-ignore-start -->\n<!-- cspell:disable -->\n{{< propertylist name=shortcode-columns sort=name order=asc >}}\n<!-- cspell:enable -->\n<!-- prettier-ignore-end -->\n\n## Example\n\n{{< columns >}}\n\n### Left\n\nDolor sit, sumo unique argument um no. Gracie nominal id xiv. Romanesque acclimates\ninvestiture. Ornateness bland it ex enc, est yeti am bongo detract re. Pro ad prompts\nfeud gait, quid exercise emeritus bis e. In pro quints consequent, denim fastidious\ncopious quo ad. Stet probates in duo.\n\n<--->\n\n### Mid Content\n\nDolor sit, sumo unique argument um no. Gracie nominal id xiv. Romanesque acclimates\ninvestiture. Ornateness bland it ex enc, est yeti am bongo detract re.\n\n<--->\n\n### Right Content\n\nDolor sit, sumo unique argument um no. Gracie nominal id xiv. Romanesque acclimates\ninvestiture. Ornateness bland it ex enc, est yeti am bongo detract re. Pro ad prompts\nfeud gait, quid exercise emeritus bis e. In pro quints consequent, denim fastidious\ncopious quo ad. Stet probates in duo.\n{{< /columns >}}\n"
  },
  {
    "path": "exampleSite/content/en/shortcodes/expand.md",
    "content": "---\ntitle: Expand\n---\n\nExpand shortcode can help to decrease clutter on screen by hiding part of text. Expand content by clicking on it.\n\n## Usage\n\n```tpl\n{{</* expand */>}}\n### Markdown content\nDolor sit, sumo unique ...\n{{</* /expand */>}}\n```\n\nIt is also possible to use a custom label and symbol.\n\n<!-- prettier-ignore-start -->\n\n```tpl\n{{</* expand \"Custom Label\" \"...\" */>}}\n### More markdown\nDolor sit, sumo unique ...\n{{</* /expand */>}}\n```\n\n## Example\n\n{{< expand >}}\n\n### Markdown content\n\nDolor sit, sumo unique argument um no. Gracie nominal id xiv. Romanesque acclimates investiture. Ornateness bland it ex enc, est yeti am bongo detract re.\n{{< /expand >}}\n\n{{< expand \"Custom Label\" \"...\" >}}\n\n### More markdown\n\nDolor sit, sumo unique argument um no. Gracie nominal id xiv. Romanesque acclimates\ninvestiture. Ornateness bland it ex enc, est yeti am bongo detract re. Pro ad prompts\nfeud gait, quid exercise emeritus bis e. In pro quints consequent, denim fastidious\ncopious quo ad. Stet probates in duo.\n{{< /expand >}}\n"
  },
  {
    "path": "exampleSite/content/en/shortcodes/hints.md",
    "content": "---\ntitle: Hints\n---\n\nHint shortcode can be used as hint/alerts/notification block.\n\n## Usage\n\n<!-- prettier-ignore-start -->\n```tpl\n{{</* hint type=[note|tip|important|caution|warning] (icon=gdoc_github) (title=GitHub) */>}}\n**Markdown content**\\\nDolor sit, sumo unique argument um no. Gracie nominal id xiv. Romanesque acclimates investiture.\n Ornateness bland it ex enc, est yeti am bongo detract re.\n{{</* /hint */>}}\n```\n<!-- prettier-ignore-end -->\n\n### Attributes\n\n<!-- prettier-ignore-start -->\n<!-- cspell:disable -->\n{{< propertylist name=shortcode-hints sort=name order=asc >}}\n<!-- cspell:enable -->\n<!-- prettier-ignore-end -->\n\n## Example\n\n{{< hint type=note >}}\n**Markdown content**\\\nDolor sit, sumo unique `argument um no`. Gracie nominal id xiv. Romanesque acclimates investiture.\nOrnateness bland it ex enc, est yeti am bongo detract re.\n{{< /hint >}}\n\n{{< hint type=tip >}}\n**Markdown content**\\\nDolor sit, sumo unique `argument um no`. Gracie nominal id xiv. Romanesque acclimates investiture.\nOrnateness bland it ex enc, est yeti am bongo detract re.\n{{< /hint >}}\n\n{{< hint type=important >}}\n**Markdown content**\\\nDolor sit, sumo unique `argument um no`. Gracie nominal id xiv. Romanesque acclimates investiture.\nOrnateness bland it ex enc, est yeti am bongo detract re.\n{{< /hint >}}\n\n{{< hint type=caution >}}\n**Markdown content**\\\nDolor sit, sumo unique `argument um no`. Gracie nominal id xiv. Romanesque acclimates investiture.\nOrnateness bland it ex enc, est yeti am bongo detract re.\n{{< /hint >}}\n\n{{< hint type=warning >}}\n**Markdown content**\\\nDolor sit, sumo unique `argument um no`. Gracie nominal id xiv. Romanesque acclimates investiture.\nOrnateness bland it ex enc, est yeti am bongo detract re.\n\nRomanesque acclimates investiture.\n{{< /hint >}}\n\nExample with a custom icon and title:\n\n<!-- prettier-ignore-start -->\n<!-- cspell:disable -->\n{{< hint type=note icon=gdoc_github title=GitHub >}}\n**Markdown content**\\\nDolor sit, sumo unique argument um no. Gracie nominal id xiv. Romanesque acclimates investiture.\nOrnateness bland it ex enc, est yeti am bongo detract re.\n{{< /hint >}}\n<!-- cspell:enable -->\n<!-- prettier-ignore-end -->\n"
  },
  {
    "path": "exampleSite/content/en/shortcodes/icons.md",
    "content": "---\ntitle: Icons\n---\n\nSimple shortcode to include icons from SVG sprites outside of menus.\n\n## Usage\n\n<!-- prettier-ignore-start -->\n```tpl\n{{</* icon \"thumbs-up\" */>}}\n```\n<!-- prettier-ignore-end -->\n\n## Example\n\n| Output                     | Code                             |\n| -------------------------- | -------------------------------- |\n| {{< icon \"thumbs-up\" >}}   | `{{</* icon \"thumbs-up\" */>}}`   |\n| {{< icon \"thumbs-down\" >}} | `{{</* icon \"thumbs-down\" */>}}` |\n| {{< icon \"laugh\" >}}       | `{{</* icon \"laugh\" */>}}`       |\n| {{< icon \"lemon\" >}}       | `{{</* icon \"lemon\" */>}}`       |\n| {{< icon \"moon\" >}}        | `{{</* icon \"moon\" */>}}`        |\n"
  },
  {
    "path": "exampleSite/content/en/shortcodes/images/_index.md",
    "content": "---\ntitle: Images\nresources:\n  - name: forest-1\n    src: \"forest-1.jpg\"\n    title: Forest (1)\n    params:\n      credits: \"[Jay Mantri](https://unsplash.com/@jaymantri) on [Unsplash](https://unsplash.com/s/photos/forest)\"\n  - name: forest-2\n    src: \"forest-2.jpg\"\n    title: Forest (2)\n    params:\n      credits: \"[Jay Mantri](https://unsplash.com/@jaymantri) on [Unsplash](https://unsplash.com/s/photos/forest)\"\n  - name: forest-3\n    src: \"forest-3.jpg\"\n    title: Forest (3)\n    params:\n      credits: \"[Jay Mantri](https://unsplash.com/@jaymantri) on [Unsplash](https://unsplash.com/s/photos/forest)\"\n  - name: forest-4\n    src: \"forest-4.jpg\"\n    title: Forest (4)\n    params:\n      credits: \"[Jay Mantri](https://unsplash.com/@jaymantri) on [Unsplash](https://unsplash.com/s/photos/forest)\"\n  - name: forest-5\n    src: \"forest-5.jpg\"\n    title: Forest (5)\n    params:\n      credits: \"[Jay Mantri](https://unsplash.com/@jaymantri) on [Unsplash](https://unsplash.com/s/photos/forest)\"\n  - name: forest-6\n    src: \"forest-6.jpg\"\n    title: Forest (6)\n    params:\n      credits: \"[Asher Ward](https://unsplash.com/@the_asher_ward) on [Unsplash](https://unsplash.com/s/photos/forest)\"\n  - name: forest-7\n    src: \"forest-7.jpg\"\n    title: Forest (7)\n    params:\n      credits: \"[Asher Ward](https://unsplash.com/@the_asher_ward) on [Unsplash](https://unsplash.com/s/photos/forest)\"\n  - name: forest-8\n    src: \"forest-8.svg\"\n    title: Forest (8)\n    params:\n      credits: \"SVG Repo\"\n# cspell:ignore Mantri\n---\n\nIf you need more flexibility for your embedded images, you could use the `img` shortcode. It is using Hugo's\n[page resources](https://gohugo.io/content-management/page-resources/) and supports lazy loading of your images.\n\n## Usage\n\nDefine your resources in the page front matter, custom parameter `params.credits` is optional.\n\n<!-- cspell:disable -->\n\n```md\n---\nresources:\n  - name: forest-1\n    src: \"forest-1.jpg\"\n    title: Forest (1)\n    params:\n      credits: \"[Jay Mantri](https://unsplash.com/@jaymantri) on [Unsplash](https://unsplash.com/s/photos/forest)\"\n---\n\n{{</* img name=\"forest-1\" size=\"large\" lazy=false */>}}\n```\n\n### Attributes\n\n<!-- prettier-ignore-start -->\n<!-- cspell:disable -->\n{{< propertylist name=shortcode-images sort=name order=asc >}}\n<!-- cspell:enable -->\n<!-- prettier-ignore-end -->\n\n<!-- cspell:enable -->\n\n## Example\n\n<!-- cspell:disable -->\n\n{{< img name=\"forest-1\" lazy=false >}}\n\n<!-- cspell:enable -->\n\nDolor sit, sumo unique argument um no. Gracie nominal id xiv. Romanesque acclimates\ninvestiture. Ornateness bland it ex enc, est yeti am bongo detract re. Pro ad prompts\nfeud gait, quid exercise emeritus bis e. In pro quints consequent, denim fastidious\ncopious quo ad. Stet probates in duo.\n\n<!-- cspell:disable -->\n\n{{< img name=\"forest-2\" lazy=true >}}\n\n<!-- cspell:enable -->\n\nDolor sit, sumo unique argument um no. Gracie nominal id xiv. Romanesque acclimates\ninvestiture. Ornateness bland it ex enc, est yeti am bongo detract re. Pro ad prompts\nfeud gait, quid exercise emeritus bis e. In pro quints consequent, denim fastidious\ncopious quo ad. Stet probates in duo.\n\n<!-- cspell:disable -->\n\n{{< img name=\"forest-3\" lazy=true >}}\n\n<!-- cspell:enable -->\n\nDolor sit, sumo unique argument um no. Gracie nominal id xiv. Romanesque acclimates\ninvestiture. Ornateness bland it ex enc, est yeti am bongo detract re. Pro ad prompts\nfeud gait, quid exercise emeritus bis e. In pro quints consequent, denim fastidious\ncopious quo ad. Stet probates in duo.\n\n<!-- cspell:disable -->\n\n{{< img name=\"forest-4\" lazy=true >}}\n\n<!-- cspell:enable -->\n\nDolor sit, sumo unique argument um no. Gracie nominal id xiv. Romanesque acclimates\ninvestiture. Ornateness bland it ex enc, est yeti am bongo detract re. Pro ad prompts\nfeud gait, quid exercise emeritus bis e. In pro quints consequent, denim fastidious\ncopious quo ad. Stet probates in duo.\n\n<!-- cspell:disable -->\n\n{{< img name=\"forest-5\" lazy=true >}}\n\n<!-- cspell:enable -->\n\nDolor sit, sumo unique argument um no. Gracie nominal id xiv. Romanesque acclimates\ninvestiture. Ornateness bland it ex enc, est yeti am bongo detract re. Pro ad prompts\nfeud gait, quid exercise emeritus bis e. In pro quints consequent, denim fastidious\ncopious quo ad. Stet probates in duo.\n\n<!-- cspell:disable -->\n\n{{< img name=\"forest-6\" lazy=true >}}\n\n<!-- cspell:enable -->\n\nDolor sit, sumo unique argument um no. Gracie nominal id xiv. Romanesque acclimates\ninvestiture. Ornateness bland it ex enc, est yeti am bongo detract re. Pro ad prompts\nfeud gait, quid exercise emeritus bis e. In pro quints consequent, denim fastidious\ncopious quo ad. Stet probates in duo.\n\n<!-- cspell:disable -->\n\n{{< img name=\"forest-7\" lazy=true >}}\n\n<!-- cspell:enable -->\n\nDolor sit, sumo unique argument um no. Gracie nominal id xiv. Romanesque acclimates\ninvestiture. Ornateness bland it ex enc, est yeti am bongo detract re. Pro ad prompts\nfeud gait, quid exercise emeritus bis e. In pro quints consequent, denim fastidious\ncopious quo ad. Stet probates in duo.\n\n<!-- cspell:disable -->\n\n{{< img name=\"forest-8\" size=small lazy=true >}}\n\n<!-- cspell:enable -->\n"
  },
  {
    "path": "exampleSite/content/en/shortcodes/includes.md",
    "content": "---\ntitle: Includes\n---\n\nInclude shortcode can include files of different types. By specifying a language, the included file will have syntax highlighting.\n\n## Usage\n\n<!-- prettier-ignore-start -->\n```tpl\n{{</* include file=\"relative/path/from/hugo/root\" language=\"go\" */>}}\n```\n<!-- prettier-ignore-end -->\n\n### Attributes\n\n<!-- prettier-ignore-start -->\n<!-- cspell:disable -->\n{{< propertylist name=shortcode-includes sort=name order=asc >}}\n<!-- cspell:enable -->\n<!-- prettier-ignore-end -->\n\n## Example\n\n### Example 1: Markdown file (default)\n\nIf no other options are specified, files will be rendered as Markdown using the `RenderString` [function](https://gohugo.io/functions/renderstring/).\n\n{{< hint type=important >}}\n**Location of markdown files**\\\nIf you include markdown files that should not get a menu entry, place them outside the content folder or exclude them otherwise.\n{{< /hint >}}\n\n<!-- prettier-ignore -->\n```tpl\n{{</* include file=\"/static/_includes/example.md.part\" */>}}\n```\n\n<!-- prettier-ignore-start -->\n<!-- cspell:disable -->\n{{< include file=\"/static/_includes/example.md.part\" >}}\n<!-- cspell:enable -->\n<!-- prettier-ignore-end -->\n\n### Example 2: Language files\n\nThis method can be used to include source code files and keep them automatically up to date.\n\n<!-- prettier-ignore -->\n```tpl\n{{</* include file=\"config/_default/hugo.yaml\" language=\"yaml\" options=\"linenos=table,hl_lines=5-6,linenostart=100\" */>}}\n```\n\nResult:\n\n<!-- prettier-ignore-start -->\n<!-- cspell:disable -->\n{{< include file=\"config/_default/hugo.yaml\" language=\"yaml\" options=\"linenos=table,hl_lines=5-6,linenostart=100\" >}}\n<!-- cspell:enable -->\n<!-- prettier-ignore-end -->\n\n### Example 3: HTML\n\nHTML content will be filtered by the `safeHTML` filter and added to the rendered page output.\n\n<!-- prettier-ignore -->\n```tpl\n{{</* include file=\"/static/_includes/example.html.part\" type=\"html\" */>}}\n```\n\n{{< include file=\"/static/_includes/example.html.part\" type=\"html\" >}}\n\n### Example 4: Hugo Pages\n\nIn some situations, it can be helpful to include Markdown files that also contain shortcodes. While the [default method](#example-1-markdown-file-default) works fine to render plain Markdown, shortcodes are not parsed. The only way to get this to work is to use Hugo pages. There are several ways to structure these include pages, so whatever you do, keep in mind that Hugo needs to be able to render and serve these files as regular pages! How it works:\n\n1. First you need to create a directory **within** your content directory. For this example site `_includes` is used.\n2. To prevent the theme from embedding the page in the navigation, create a file `_includes/_index.md` and add `geekdocHidden: true` to the front matter.\n3. Place your Markdown files within the `_includes` folder e.g. `/_includes/include-page.md`. Make sure to name it `*.md`.\n4. Include the page using `{{</* include file=\"/_includes/include-page.md\" type=\"page\" */>}}`.\n\nResulting structure should look like this:\n\n```shell\n_includes/\n ├── include-page.md\n └── _index.md\n```\n\n{{< include file=\"/_includes/include-page.md\" type=\"page\" >}}\n"
  },
  {
    "path": "exampleSite/content/en/shortcodes/katex.md",
    "content": "---\ntitle: KaTeX\n# cspell:ignore infty\n---\n\n[KaTeX](https://katex.org/) shortcode let you render math typesetting in markdown document.\n\n## Usage\n\n```latex\n{{</* katex [display] [class=\"text-center\"] */>}}\nf(x) = \\int_{-\\infty}^\\infty\\hat f(\\xi)\\,e^{2 \\pi i \\xi x}\\,d\\xi\n{{</* /katex */>}}\n```\n\n### Attributes\n\n<!-- prettier-ignore-start -->\n<!-- cspell:disable -->\n{{< propertylist name=shortcode-katex sort=name order=asc >}}\n<!-- cspell:enable -->\n<!-- prettier-ignore-end -->\n\n## Example\n\n<!-- cspell:disable -->\n<!-- prettier-ignore -->\n{{< katex display >}}\nf(x) = \\int_{-\\infty}^\\infty\\hat f(\\xi)\\,e^{2 \\pi i \\xi x}\\,d\\xi\n{{< /katex >}}\n\n<!-- cspell:enable -->\n\nKaTeX can be used inline, for example {{< katex >}}\\pi(x){{< /katex >}} or used with the `display` parameter as above.\n"
  },
  {
    "path": "exampleSite/content/en/shortcodes/mermaid.md",
    "content": "---\ntitle: Mermaid\n---\n\n[Mermaid](https://mermaidjs.github.io/) is library for generating SVG charts and diagrams from text.\n\n## Usage\n\n<!-- prettier-ignore -->\n```tpl\n{{</* mermaid class=\"text-center\" */>}}\nsequenceDiagram\n    Alice->>Bob: Hello Bob, how are you?\n    alt is sick\n        Bob->>Alice: Not so good :(\n    else is well\n        Bob->>Alice: Feeling fresh like a daisy\n    end\n    opt Extra response\n        Bob->>Alice: Thanks for asking\n    end\n{{</* /mermaid */>}}\n```\n\n### Attributes\n\n<!-- prettier-ignore-start -->\n<!-- cspell:disable -->\n{{< propertylist name=shortcode-mermaid sort=name order=asc >}}\n<!-- cspell:enable -->\n<!-- prettier-ignore-end -->\n\n## Example\n\n<!-- cspell:disable -->\n<!-- prettier-ignore -->\n{{< mermaid class=\"text-center\" >}}\nsequenceDiagram\n    Alice->>Bob: Hello Bob, how are you?\n    alt is sick\n        Bob->>Alice: Not so good :(\n    else is well\n        Bob->>Alice: Feeling fresh like a daisy\n    end\n    opt Extra response\n        Bob->>Alice: Thanks for asking\n    end\n{{< /mermaid >}}\n\n<!-- cspell:enable -->\n\nAs an alternative to shortcodes, code blocks can be used for markdown as well.\n\n{{< columns >}}\n\n<!-- prettier-ignore -->\n````tpl\n```mermaid\nflowchart LR\nA[Hard] -->|Text| B(Round)\nB --> C{Decision}\nC -->|One| D[Result 1]\nC -->|Two| E[Result 2]\n```\n````\n\n<--->\n\n<!-- cspell:disable -->\n<!-- prettier-ignore -->\n```mermaid\nflowchart LR\nA[Hard] -->|Text| B(Round)\nB --> C{Decision}\nC -->|One| D[Result 1]\nC -->|Two| E[Result 2]\n```\n\n<!-- cspell:enable -->\n\n{{< /columns >}}\n"
  },
  {
    "path": "exampleSite/content/en/shortcodes/progress.md",
    "content": "---\ntitle: Progress\n---\n\nA progress bar shows how far a process has progressed.\n\n## Usage\n\n<!-- prettier-ignore -->\n```tpl\n{{</* progress title=Eating value=65 icon=gdoc_heart */>}}\n```\n\n### Attributes\n\n<!-- prettier-ignore-start -->\n<!-- cspell:disable -->\n{{< propertylist name=shortcode-progress sort=name order=asc >}}\n<!-- cspell:enable -->\n<!-- prettier-ignore-end -->\n\n## Example\n\n<!-- prettier-ignore-start -->\n<!-- cspell:disable -->\n{{< progress title=Eating value=65 icon=gdoc_heart >}}\n\n{{< progress title=\"Type: note\" value=10 icon=gdoc_heart type=note >}}\n\n{{< progress title=\"Type: tip\" value=70 icon=gdoc_heart type=tip >}}\n\n{{< progress title=\"Type: important\" value=30 icon=gdoc_heart type=important >}}\n\n{{< progress title=\"Type: caution\" value=90 icon=gdoc_heart type=caution >}}\n\n{{< progress title=\"Type: warning\" value=80 icon=gdoc_heart type=warning >}}\n<!-- cspell:enable -->\n<!-- prettier-ignore-end -->\n"
  },
  {
    "path": "exampleSite/content/en/shortcodes/propertylist.md",
    "content": "---\ntitle: Properties\n---\n\nThe property list shortcode creates a custom HTML description list that can be used to display properties or variables and general dependent information. The shortcode requires a data file in `data/properties/`, e.g. `data/properties/demo.yaml`.\n\n## Usage\n\n<!-- prettier-ignore-start -->\n```tpl\n{{</* propertylist name=demo (sort=name) (order=[asc|desc]) */>}}\n```\n<!-- prettier-ignore-end -->\n\nThe supported attributes can be taken from the following example:\n\n<!-- prettier-ignore-start -->\n<!-- cspell:disable -->\n{{< include file=\"/data/properties/demo.yaml\" language=\"Yaml\" options=\"linenos=table\" >}}\n<!-- cspell:enable -->\n<!-- prettier-ignore-end -->\n\n### Attributes\n\n<!-- prettier-ignore-start -->\n<!-- cspell:disable -->\n{{< propertylist name=shortcode-buttons sort=name order=asc >}}\n<!-- cspell:enable -->\n<!-- prettier-ignore-end -->\n\n## Example\n\n<!-- prettier-ignore-start -->\n<!-- cspell:disable -->\n{{< propertylist name=demo sort=name order=asc >}}\n<!-- cspell:enable -->\n<!-- prettier-ignore-end -->\n"
  },
  {
    "path": "exampleSite/content/en/shortcodes/tabs.md",
    "content": "---\ntitle: Tabs\n---\n\nTabs let you organize content by context, for example installation instructions for each supported platform.\n\n## Usage\n\n<!-- prettier-ignore-start -->\n```tpl\n{{</* tabs \"uniqueid\" */>}}\n{{</* tab \"macOS\" */>}} # macOS Content {{</* /tab */>}}\n{{</* tab \"Linux\" */>}} # Linux Content {{</* /tab */>}}\n{{</* tab \"Windows\" */>}} # Windows Content {{</* /tab */>}}\n{{</* /tabs */>}}\n```\n<!-- prettier-ignore-end -->\n\n## Example\n\n{{< tabs \"uniqueid\" >}}\n{{< tab \"macOS\" >}}\n\n## macOS\n\nThis is tab **macOS** content.\n\nDolor sit, sumo unique argument um no. Gracie nominal id xiv. Romanesque acclimates\ninvestiture. Ornateness bland it ex enc, est yeti am bongo detract re. Pro ad\nprompts feud gait, quid exercise emeritus bis e. In pro quints consequent, denim\nfastidious copious quo ad. Stet probates in duo.\n{{< /tab >}}\n\n{{< tab \"Linux\" >}}\n\n## Linux\n\nThis is tab **Linux** content.\n\nDolor sit, sumo unique argument um no. Gracie nominal id xiv. Romanesque acclimates\ninvestiture. Ornateness bland it ex enc, est yeti am bongo detract re. Pro ad\nprompts feud gait, quid exercise emeritus bis e. In pro quints consequent, denim\nfastidious copious quo ad. Stet probates in duo.\n{{< /tab >}}\n\n{{< tab \"Windows\" >}}\n\n## Windows\n\nThis is tab **Windows** content.\n\nDolor sit, sumo unique argument um no. Gracie nominal id xiv. Romanesque acclimates\ninvestiture. Ornateness bland it ex enc, est yeti am bongo detract re. Pro ad\nprompts feud gait, quid exercise emeritus bis e. In pro quints consequent.\n{{< /tab >}}\n{{< /tabs >}}\n"
  },
  {
    "path": "exampleSite/content/en/shortcodes/toc-tree.md",
    "content": "---\ntitle: ToC-Tree\n---\n\nThe `toc-tree` shortcode will generate a Table of Content from a section file tree of your content directory. The root of the resulting ToC will be the page on which you define the shortcode.\n\n## Usage\n\n<!-- prettier-ignore-start -->\n```tpl\n{{</* toc-tree [sortBy=\"title\"] */>}}\n```\n<!-- prettier-ignore-end -->\n\n### Attributes\n\n<!-- prettier-ignore-start -->\n<!-- cspell:disable -->\n{{< propertylist name=shortcode-toc-tree sort=name order=asc >}}\n<!-- cspell:enable -->\n<!-- prettier-ignore-end -->\n\n## Example\n\nAs said, the root will be the site on which the shortcode was used, you can see a demo including nesting in the [ToC Tree](/toc-tree/) section.\n"
  },
  {
    "path": "exampleSite/content/en/shortcodes/toc.md",
    "content": "---\ntitle: ToC\n---\n\nSimple wrapper to generate a page Table of Content from a shortcode.\n\n## Usage\n\n<!-- prettier-ignore -->\n```tpl\n{{</* toc (format=[html|raw]) */>}}\n```\n\n### Attributes\n\n<!-- prettier-ignore-start -->\n<!-- cspell:disable -->\n{{< propertylist name=shortcode-toc sort=name order=asc >}}\n<!-- cspell:enable -->\n<!-- prettier-ignore-end -->\n\n## Example\n\n{{< toc >}}\n\n## Level 1\n\nDolor sit, sumo unique argument um no. Gracie nominal id xiv. Romanesque acclimates investiture. Ornateness bland it ex enc, est yeti am bongo detract re. Pro ad prompts feud gait, quid exercise emeritus bis e. In pro quints consequent, denim fastidious copious quo ad. Stet probates in duo.\n\n## Level 2\n\nAmalia id per in minimum facility, quid facet modifier ea ma. Ill um select ma ad, en ferric patine sentient vim. Per expendable foreordained interpretations cu, maxim sole pertinacity in ram.\n\n### Level 2.1\n\nAmalia id per in minimum facility, quid facet modifier ea ma. Ill um select ma ad, en ferric patine sentient vim. Per expendable foreordained interpretations cu, maxim sole pertinacity in ram.\n\n#### Level 2.1.1\n\nAmalia id per in minimum facility, quid facet modifier ea ma. Ill um select ma ad, en ferric patine sentient vim.\n\n##### Level 2.1.1.1\n\nIn pro quints consequent, denim fastidious copious quo ad.\n\n###### Level 2.1.1.1.1\n\nIn pro quints consequent, denim fastidious copious quo ad.\n\n### Level 2.2\n\nDolor sit, sumo unique argument um no. Gracie nominal id xiv. Romanesque acclimates investiture. Ornateness bland it ex enc, est yeti am bongo detract re. Pro ad prompts feud gait, quid exercise emeritus bis e.\n\nAmalia id per in minimum facility, quid facet modifier ea ma. Ill um select ma ad, en ferric patine sentient vim. Per expendable foreordained interpretations cu, maxim sole pertinacity in ram.\n"
  },
  {
    "path": "exampleSite/content/en/toc-tree/_index.md",
    "content": "---\ntitle: ToC-Tree\ngeekdocFlatSection: true\n---\n\nThis is just a demo section for the <!-- cspell:disable -->[toc-tree](/shortcodes/toc-tree/)<!-- cspell:enable --> shortcode.\n\n<!-- cspell:disable -->\n\n{{< toc-tree >}}\n\n<!-- cspell:enable -->\n"
  },
  {
    "path": "exampleSite/content/en/toc-tree/level-1/_index.md",
    "content": "---\ngeekdocCollapseSection: true\n---\n\nLevel 1\n\n<!-- cspell:disable -->\n\n{{< toc-tree >}}\n\n<!-- cspell:enable -->\n"
  },
  {
    "path": "exampleSite/content/en/toc-tree/level-1/level-1-1.md",
    "content": "---\ntitle: Level 1.1\n---\n\nLevel 1.1\n"
  },
  {
    "path": "exampleSite/content/en/toc-tree/level-1/level-1-2.md",
    "content": "---\ntitle: Level 1.2\n---\n\nLevel 1.2\n"
  },
  {
    "path": "exampleSite/content/en/toc-tree/level-1/level-1-3/_index.md",
    "content": "---\ntitle: Level 1.3\n---\n\nLevel 1.3\n\n<!-- cspell:disable -->\n\n{{< toc-tree >}}\n\n<!-- cspell:enable -->\n"
  },
  {
    "path": "exampleSite/content/en/toc-tree/level-1/level-1-3/level-1-3-1.md",
    "content": "---\ntitle: Level 1.3.1\n---\n\nLevel 1.3.1\n"
  },
  {
    "path": "exampleSite/content/en/toc-tree/level-2/_index.md",
    "content": "Level-2\n"
  },
  {
    "path": "exampleSite/content/en/toc-tree/level-2/level-2-1.md",
    "content": "---\ntitle: Level 2.1\n---\n\nLevel 2.1\n"
  },
  {
    "path": "exampleSite/content/en/toc-tree/level-2/level-2-2.md",
    "content": "---\ntitle: Level 2.2\n---\n\nLevel 2.2\n"
  },
  {
    "path": "exampleSite/content/en/usage/_index.md",
    "content": "---\ntitle: Usage\nweight: -20\n---\n"
  },
  {
    "path": "exampleSite/content/en/usage/configuration.md",
    "content": "---\ntitle: Configuration\nweight: -10\n# cspell:ignore expirydate linktitle publishdate\n---\n\n{{< toc >}}\n\n## Site configuration\n\n{{< tabs \"site-config\" >}}\n{{< tab \"TOML\" >}}\n\n```toml\nbaseURL = \"http://localhost\"\ntitle = \"Geekdocs\"\ntheme = \"hugo-geekdoc\"\n\n# Required to get well formatted code blocks\npygmentsUseClasses = true\npygmentsCodeFences = true\ndisablePathToLower = true\nenableGitInfo = true\n\n# Required if you want to render robots.txt template\nenableRobotsTXT = true\n\n[markup]\n  [markup.goldmark.renderer]\n    # Needed for mermaid shortcode or when nesting shortcodes (e.g. img within\n    # columns or tabs)\n    unsafe = true\n  [markup.tableOfContents]\n    startLevel = 1\n    endLevel = 9\n\n[taxonomies]\n  tag = \"tags\"\n\n[params]\n  # (Optional, default none) Set a subtitle used in the page header.\n  geekdocSubtitle = \"A Hugo theme for documentation\"\n\n  # (Optional, default 6) Set how many table of contents levels to be showed on page.\n  # Use false to hide ToC, note that 0 will default to 6 (https://gohugo.io/functions/default/)\n  # You can also specify this parameter per page in front matter.\n  geekdocToC = 3\n\n  # (Optional, default static/brand.svg) Set the path to a logo for the Geekdoc\n  # relative to your 'static/' folder.\n  geekdocLogo = \"logo.png\"\n\n  # (Optional, default false) Render menu from data file in 'data/menu/main.yaml'.\n  # See also https://geekdocs.de/usage/menus/#bundle-menu.\n  geekdocMenuBundle = true\n\n  # (Optional, default false) Collapse all menu entries, cannot be overwritten\n  # per page if enabled. Can be enabled per page via 'geekdocCollapseSection'.\n  geekdocCollapseAllSections = true\n\n  # (Optional, default true) Show page navigation links at the bottom of each docs page.\n  geekdocNextPrev = false\n\n  # (Optional, default true) Show a breadcrumb navigation bar at the top of each docs page.\n  # You can also specify this parameter per page in front matter.\n  geekdocBreadcrumb = false\n\n  # (Optional, default none) Set source repository location. Used for 'Edit page' links.\n  # You can also specify this parameter per page in front matter.\n  geekdocRepo = \"https://github.com/thegeeklab/hugo\"\n\n  # (Optional, default none) Enable 'Edit page' links. Requires 'geekdocRepo' param\n  # and the path must point to the parent directory of the 'content' folder.\n  # You can also specify this parameter per page in front matter.\n  geekdocEditPath = \"edit/main/exampleSite\"\n\n  # (Optional, default false) Show last modification date of the page in the header.\n  # Keep in mind that last modification date works best if `enableGitInfo` is set to true.\n  geekdocPageLastmod = true\n\n  # (Optional, default true) Enables search function with flexsearch.\n  # Index is built on the fly and might slow down your website.\n  geekdocSearch = false\n\n  # (Optional, default false) Display search results with the parent folder as prefix. This\n  # option allows you to distinguish between files with the same name in different folders.\n  # NOTE: This parameter only applies when 'geekdocSearch = true'.\n  geekdocSearchShowParent = true\n\n  # (Optional, default none) Add a link to your Legal Notice page to the site footer.\n  # It can be either a remote url or a local file path relative to your content directory.\n  geekdocLegalNotice = \"https://blog.example.com/legal\"\n\n  # (Optional, default none) Add a link to your Privacy Policy page to the site footer.\n  # It can be either a remote url or a local file path relative to your content directory.\n  geekdocPrivacyPolicy = \"/privacy\"\n\n  # (Optional, default true) Add an anchor link to headlines.\n  geekdocAnchor = true\n\n  # (Optional, default true) Copy anchor url to clipboard on click.\n  geekdocAnchorCopy = true\n\n  # (Optional, default true) Enable or disable image lazy loading for images rendered\n  # by the 'img' shortcode.\n  geekdocImageLazyLoading = true\n\n  # (Optional, default false) Set HTMl <base> to .Site.Home.Permalink if enabled. It might be required\n  # if a subdirectory is used within Hugo's BaseURL.\n  # See https://developer.mozilla.org/de/docs/Web/HTML/Element/base.\n  geekdocOverwriteHTMLBase = false\n\n  # (Optional, default true) Enable or disable the JavaScript based color theme toggle switch. The CSS based\n  # user preference mode still works.\n  geekdocDarkModeToggle = false\n\n  # (Optional, default false) Auto-decrease brightness of images and add a slightly grayscale to avoid\n  # bright spots while using the dark mode.\n  geekdocDarkModeDim = false\n\n  # (Optional, default false) Enforce code blocks to always use the dark color theme.\n  geekdocDarkModeCode = false\n\n  # (Optional, default true) Display a \"Back to top\" link in the site footer.\n  geekdocBackToTop = true\n\n  # (Optional, default false) Enable or disable adding tags for post pages automatically to the navigation sidebar.\n  geekdocTagsToMenu = true\n\n  # (Optional, default 'title') Configure how to sort file-tree menu entries. Possible options are 'title', 'linktitle',\n  # 'date', 'publishdate', 'expirydate' or 'lastmod'. Every option can be used with a reverse modifier as well\n  # e.g. 'title_reverse'.\n  geekdocFileTreeSortBy = \"title\"\n\n  # (Optional, default none) Adds a \"Content licensed under <license>\" line to the footer.\n  # Could be used if you want to define a default license for your content.\n  [params.geekdocContentLicense]\n    name = \"CC BY-SA 4.0\"\n    link = \"https://creativecommons.org/licenses/by-sa/4.0/\"\n```\n\n{{< /tab >}}\n{{< tab \"YAML\" >}}\n\n```yaml\n---\nbaseURL: \"http://localhost\"\ntitle: \"Geekdocs\"\ntheme: \"hugo-geekdoc\"\n\n# Required to get well formatted code blocks\npygmentsUseClasses: true\npygmentsCodeFences: true\ndisablePathToLower: true\nenableGitInfo: true\n\n# Required if you want to render robots.txt template\nenableRobotsTXT: true\n\nmarkup:\n  goldmark:\n    # Needed for mermaid shortcode or when nesting shortcodes (e.g. img within\n    # columns or tabs)\n    renderer:\n      unsafe: true\n  tableOfContents:\n    startLevel: 1\n    endLevel: 9\n\ntaxonomies:\n  tag: tags\n\nparams:\n  # (Optional, default none) Set a subtitle used in the page header.\n  geekdocSubtitle: \"A Hugo theme for documentation\"\n\n  # (Optional, default 6) Set how many table of contents levels to be showed on page.\n  # Use false to hide ToC, note that 0 will default to 6 (https://gohugo.io/functions/default/)\n  # You can also specify this parameter per page in front matter.\n  geekdocToC: 3\n\n  # (Optional, default static/brand.svg) Set the path to a logo for the Geekdoc\n  # relative to your 'static/' folder.\n  geekdocLogo: logo.png\n\n  # (Optional, default false) Render menu from data file in 'data/menu/main.yaml'.\n  # See also https://geekdocs.de/usage/menus/#bundle-menu.\n  geekdocMenuBundle: true\n\n  # (Optional, default false) Collapse all menu entries, cannot be overwritten\n  # per page if enabled. Can be enabled per page via 'geekdocCollapseSection'.\n  geekdocCollapseAllSections: true\n\n  # (Optional, default true) Show page navigation links at the bottom of each docs page.\n  geekdocNextPrev: false\n\n  # (Optional, default true) Show a breadcrumb navigation bar at the top of each docs page.\n  # You can also specify this parameter per page in front matter.\n  geekdocBreadcrumb: false\n\n  # (Optional, default none) Set source repository location. Used for 'Edit page' links.\n  # You can also specify this parameter per page in front matter.\n  geekdocRepo: \"https://github.com/thegeeklab/hugo-geekdoc\"\n\n  # (Optional, default none) Enable 'Edit page' links. Requires 'geekdocRepo' param\n  # and the path must point to the parent directory of the 'content' folder.\n  # You can also specify this parameter per page in front matter.\n  geekdocEditPath: edit/main/exampleSite\n\n  # (Optional, default false) Show last modification date of the page in the header.\n  # Keep in mind that last modification date works best if `enableGitInfo` is set to true.\n  geekdocPageLastmod: true\n\n  # (Optional, default true) Enables search function with flexsearch.\n  # Index is built on the fly and might slow down your website.\n  geekdocSearch: false\n\n  # (Optional, default false) Display search results with the parent folder as prefix. This\n  # option allows you to distinguish between files with the same name in different folders.\n  # NOTE: This parameter only applies when 'geekdocSearch: true'.\n  geekdocSearchShowParent: true\n\n  # (Optional, default none) Add a link to your Legal Notice page to the site footer.\n  # It can be either a remote url or a local file path relative to your content directory.\n  geekdocLegalNotice: \"https://blog.example.com/legal\"\n\n  # (Optional, default none) Add a link to your Privacy Policy page to the site footer.\n  # It can be either a remote url or a local file path relative to your content directory.\n  geekdocPrivacyPolicy: \"/privacy\"\n\n  # (Optional, default true) Add an anchor link to headlines.\n  geekdocAnchor: true\n\n  # (Optional, default true) Copy anchor url to clipboard on click.\n  geekdocAnchorCopy: true\n\n  # (Optional, default true) Enable or disable image lazy loading for images rendered\n  # by the 'img' shortcode.\n  geekdocImageLazyLoading: true\n\n  # (Optional, default false) Set HTMl <base> to .Site.Home.Permalink if enabled. It might be required\n  # if a subdirectory is used within Hugo's BaseURL.\n  # See https://developer.mozilla.org/de/docs/Web/HTML/Element/base.\n  geekdocOverwriteHTMLBase: false\n\n  # (Optional, default true) Enable or disable the JavaScript based color theme toggle switch. The CSS based\n  # user preference mode still works.\n  geekdocDarkModeToggle: false\n\n  # (Optional, default false) Auto-decrease brightness of images and add a slightly grayscale to avoid\n  # bright spots while using the dark mode.\n  geekdocDarkModeDim: false\n\n  # (Optional, default false) Enforce code blocks to always use the dark color theme.\n  geekdocDarkModeCode: false\n\n  # (Optional, default true) Display a \"Back to top\" link in the site footer.\n  geekdocBackToTop: true\n\n  # (Optional, default false) Enable or disable adding tags for post pages automatically to the navigation sidebar.\n  geekdocTagsToMenu: true\n\n  # (Optional, default 'title') Configure how to sort file-tree menu entries. Possible options are 'title', 'linktitle',\n  # 'date', 'publishdate', 'expirydate' or 'lastmod'. Every option can be used with a reverse modifier as well\n  # e.g. 'title_reverse'.\n  geekdocFileTreeSortBy: \"title\"\n\n  # (Optional, default none) Adds a \"Content licensed under <license>\" line to the footer.\n  # Could be used if you want to define a default license for your content.\n  geekdocContentLicense:\n    name: CC BY-SA 4.0\n    link: https://creativecommons.org/licenses/by-sa/4.0/\n```\n\n{{< /tab >}}\n{{< /tabs >}}\n\n## Page configuration\n\n{{< tabs \"page-config\" >}}\n{{< tab \"TOML\" >}}\n\n```toml\n# Set type to 'posts' if you want to render page as blogpost\ntype = \"posts\"\n\n# Hugo predefined front matter variable, to re-arrange items in file-tree menu\n# See weights section of\n# https://gohugo.io/content-management/front-matter/#predefined\nweight = 10\n\n# Set how many table of contents levels to be showed on page.\ngeekdocToC = 3\n\n# Set a description for the current page. This will be shown in toc-trees objects.\ngeekdocDescription =\n\n# Set false to hide the whole left navigation sidebar. Beware that it will make\n# navigation pretty hard without adding some kind of on-page navigation.\ngeekdocNav = true\n\n# Show a breadcrumb navigation bar at the top of each docs page.\ngeekdocBreadcrumb = false\n\n# Set source repository location.\ngeekdocRepo = \"https://github.com/thegeeklab/hugo-geekdoc\"\n\n# Enable 'Edit page' links. Requires 'geekdocRepo' param and the path must point to\n# the parent directory of the 'content' folder.\ngeekdocEditPath = \"edit/main/exampleSite\"\n\n# Show last modification date of the page in the header.\ngeekdocPageLastmod = true\n\n# Used for 'Edit page' link, set to '.File.Path' by default.\n# Can be overwritten by a path relative to 'geekdocEditPath'\ngeekdocFilePath =\n\n# Set to mark page as flat section (file-tree menu only).\ngeekdocFlatSection = true\n\n# Set true to hide page or section from side menu (file-tree menu only).\ngeekdocHidden = true\n\n# Set false to show this page as a file-tree menu entry when you want it to be hidden in the sidebar.\n# NOTE: Only applies when 'geekdocHidden = true'.\ngeekdocHiddenTocTree = true\n\n# Set to true to make a section foldable in side menu.\ngeekdocCollapseSection = true\n\n# Add an anchor link to headlines.\ngeekdocAnchor = true\n\n# If you have protected some pages with e.g. basic authentication you may want to exclude these pages\n# from data file, otherwise, information may be leaked. Setting this parameter to 'true' will exclude the\n# page from search data, feeds, etc.\n# WARNING: Consider hosting a standalone, fully auth-protected static page for secret information instead!\ngeekdocProtected = false\n\n# Set 'left' (default), 'center' or 'right' to configure the text align of a page.\ngeekdocAlign = \"left\"\n```\n\n{{< /tab >}}\n{{< tab \"YAML\" >}}\n\n```yaml\n# Set type to 'posts' if you want to render page as blogpost.\ntype: \"posts\"\n\n# Set page weight to re-arrange items in file-tree menu.\nweight: 10\n\n# Set how many table of contents levels to be showed on page.\ngeekdocToC: 3\n\n# Set a description for the current page. This will be shown in toc-trees objects.\ngeekdocDescription:\n\n# Set false to hide the whole left navigation sidebar. Beware that it will make\n# navigation pretty hard without adding some kind of on-page navigation.\ngeekdocNav: true\n\n# Show a breadcrumb navigation bar at the top of each docs page.\ngeekdocBreadcrumb: false\n\n# Set source repository location.\ngeekdocRepo: \"https://github.com/thegeeklab/hugo-geekdoc\"\n\n# Enable 'Edit page' links. Requires 'geekdocRepo' param and the path must point to\n# the parent directory of the 'content' folder.\ngeekdocEditPath: \"edit/main/exampleSite\"\n\n# Show last modification date of the page in the header.\ngeekdocPageLastmod: true\n\n# Used for 'Edit page' link, set to '.File.Path' by default.\n# Can be overwritten by a path relative to 'geekdocEditPath'\ngeekdocFilePath:\n\n# Set to mark page as flat section (file-tree menu only).\ngeekdocFlatSection: true\n\n# Set true to hide page or section from side menu (file-tree menu only).\ngeekdocHidden: true\n\n# Set false to show this page as a file-tree menu entry when you want it to be hidden in the sidebar.\n# NOTE: Only applies when 'geekdocHidden: true'.\ngeekdocHiddenTocTree: true\n\n# Set to true to make a section foldable in side menu.\ngeekdocCollapseSection: true\n\n# Add an anchor link to headlines.\ngeekdocAnchor: true\n\n# If you have protected some pages with e.g. basic authentication you may want to exclude these pages\n# from data file, otherwise, information may be leaked. Setting this parameter to 'true' will exclude the\n# page from search data, feeds, etc.\n# WARNING: Consider hosting a standalone, fully auth-protected static page for secret information instead!\ngeekdocProtected: false\n\n# Set 'left' (default), 'center' or 'right' to configure the text align of a page.\ngeekdocAlign: \"left\"\n```\n\n{{< /tab >}}\n{{< /tabs >}}\n"
  },
  {
    "path": "exampleSite/content/en/usage/customization.md",
    "content": "---\ntitle: Customization\n---\n\n{{< toc >}}\n\n## Custom resources\n\nTo add custom resources to your site e.g. CSS or JavaScript files, create the `layouts/partials/head/custom.html` in the root directory of your project. Add the source files you want to include in the `static/` folder of your project, for example `static/css/custom.css` and `static/js/custom.js`. To include the files in your site, add the following code to `layouts/partials/head/custom.html`:\n\n```html\n<link rel=\"stylesheet\" type=\"text/css\" href=\"/css/custom.css\" />\n<script type=\"text/javascript\" src=\"/js/custom.js\"></script>\n```\n\nEnsure to use the absolute path to the files.\n"
  },
  {
    "path": "exampleSite/content/en/usage/getting-started.md",
    "content": "---\ntitle: Getting Started\nweight: -20\n# cspell:ignore demosite testlink gohugoio\n---\n\nThis page tells you how to get started with the Geekdoc theme, including installation and basic configuration.\n\n<!--more-->\n\n{{< toc >}}\n\n## Install requirements\n\nYou need a recent version of Hugo for local builds and previews of sites that use Geekdoc. As we are using [webpack](https://webpack.js.org/) as pre-processor, the normal version of Hugo is sufficient. If you prefer the extended version of Hugo anyway this will work as well. For comprehensive Hugo documentation, see [gohugo.io](https://gohugo.io/documentation/).\n\nIf you want to use the theme from a cloned branch instead of a release tarball you'll need to install `webpack` locally and run the build script once to create all required assets.\n\n```shell\n# install required packages from package.json\nnpm install\n\n# run the build script to build required assets\nnpm run build\n\n# build release tarball\nnpm run pack\n```\n\n## Using the theme\n\nTo prepare your new site environment just a few steps are required:\n\n1. Create a new empty Hugo site.\n\n   ```shell\n   hugo new site demosite\n   ```\n\n2. Switch to the root of the new site.\n\n   ```shell\n   cd demosite\n   ```\n\n3. Install the Geekdoc theme from a [release bundle](#option-1-download-pre-build-release-bundle) (recommended) or from [Git branch](#option-2-clone-the-github-repository).\n\n4. Create the minimal required Hugo configuration `hugo.toml`. For all configuration options take a look at the [configuration page](/usage/configuration/).\n\n   ```toml\n   baseURL = \"http://localhost\"\n   title = \"Geekdocs\"\n   theme = \"hugo-geekdoc\"\n\n   pluralizeListTitles = false\n\n   # Geekdoc required configuration\n   pygmentsUseClasses = true\n   pygmentsCodeFences = true\n   disablePathToLower = true\n\n   # Required if you want to render robots.txt template\n   enableRobotsTXT = true\n\n   # Needed for mermaid shortcodes\n   [markup]\n     [markup.goldmark.renderer]\n       # Needed for mermaid shortcode or when nesting shortcodes (e.g. img within\n       # columns or tabs)\n       unsafe = true\n     [markup.tableOfContents]\n       startLevel = 1\n       endLevel = 9\n\n   [taxonomies]\n      tag = \"tags\"\n   ```\n\n5. Test your site.\n\n   ```shell\n   hugo server -D\n   ```\n\n   The `-D` or `--buildDrafts` option is used to include content marked as draft during the build. It is used because content pages created with the `hugo new content` command have the `draft` flag set by default and this can lead to build errors in newly created projects. For projects with a production-ready content structure, this flag is not required in most cases and can be omitted.\n\n### Option 1: Download pre-build release bundle\n\nDownload and extract the latest release bundle into the theme directory.\n\n```shell\nmkdir -p themes/hugo-geekdoc/\ncurl -L https://github.com/thegeeklab/hugo-geekdoc/releases/latest/download/hugo-geekdoc.tar.gz | tar -xz -C themes/hugo-geekdoc/ --strip-components=1\n```\n\n### Option 2: Clone the GitHub repository\n\n{{< hint type=note >}}\nKeep in mind this method is not recommended and needs some extra steps to get it working.\nIf you want to use the Theme as submodule keep in mind that your build process need to\nrun the described steps as well.\n{{< /hint >}}\n\nClone the Geekdoc git repository.\n\n```shell\ngit clone https://github.com/thegeeklab/hugo-geekdoc.git themes/hugo-geekdoc\n```\n\nBuild required theme assets e.g. CSS files and SVG sprites.\n\n```shell\nnpm install\nnpm run build\n```\n\n## Deployments\n\n### Netlify\n\nThere are several ways to deploy your site with this theme on Netlify. Regardless of which solution you choose, the main goal is to ensure that the prebuilt theme release tarball is used or to run the [required commands](#option-2-clone-the-github-repository) to prepare the theme assets before running the Hugo build command.\n\nHere are some possible solutions:\n\n#### Use a Makefile\n\nAdd a Makefile to your repository to bundle the required steps.\n\n{{< hint type=important >}}\nThe `Makefile` is only an example. Depending on your project structure, `BASEDIR` or `THEMEDIR` may need to be adapted.\n{{< /hint >}}\n\n```makefile\n# Please change the theme version to the latest release version.\nTHEME_VERSION := v0.44.1\nTHEME := hugo-geekdoc\nBASEDIR := docs\nTHEMEDIR := $(BASEDIR)/themes\n\n.PHONY: doc\ndoc: doc-assets doc-build\n\n.PHONY: doc-assets\ndoc-assets:\n\tmkdir -p $(THEMEDIR)/$(THEME)/ ; \\\n\tcurl -sSL \"https://github.com/thegeeklab/$(THEME)/releases/download/${THEME_VERSION}/$(THEME).tar.gz\" | tar -xz -C $(THEMEDIR)/$(THEME)/ --strip-components=1\n\n.PHONY: doc-build\ndoc-build:\n\tcd $(BASEDIR); hugo\n\n.PHONY: clean\nclean:\n\trm -rf $(THEMEDIR) && \\\n\trm -rf $(BASEDIR)/public\n```\n\nThis Makefile can be used in your `netlify.toml`, take a look at the [Netlify example](https://docs.netlify.com/configure-builds/file-based-configuration/#sample-netlify-toml-file) for more information:\n\n```toml\n[build]\npublish = \"docs/public\"\ncommand = \"make doc\"\n```\n\n#### Chain required commands\n\nChain all required commands to prepare the theme and build your site on the `command` option in your `netlify.toml` like this:\n\n```toml\n[build]\npublish = \"docs/public\"\ncommand = \"command1 && command 2 && command3 && hugo\"\n```\n\n### Subdirectories\n\n{{< hint type=important >}}\nAs deploying Hugo sites on subdirectories is not as robust as on subdomains, we do not recommend this.\nIf you have a choice, using a domain/subdomain should always be the preferred solution!\n{{< /hint >}}\n\nIf you want to deploy your site to a subdirectory of your domain, some extra steps are required:\n\n- Configure your Hugo base URL e.g. `baseURL = http://localhost/demo/`.\n- Don't use `relativeURLs: false` nor `canonifyURLs: true` as is can cause unwanted side effects!\n\nThere are two ways to get Markdown links or images working:\n\n- Use the absolute path including your subdirectory e.g. `[testlink](/demo/example-site)`\n- Overwrite the HTML base in your site configuration with `geekdocOverwriteHTMLBase = true` and use the relative path e.g. `[testlink](example-site)`\n\nBut there is another special case if you use `geekdocOverwriteHTMLBase = true`. If you use anchors in your Markdown links you have to ensure to always include the page path. As an example `[testlink](#some-anchor)` will resolve to `http://localhost/demo/#some-anchor` and not automatically include the current page!\n\n## Known Limitations\n\n### Minify HTML results in spacing issues\n\nUsing `hugo --minify` without further configuration or using other minify tools that also minify HTML files might result in spacing issues in the theme and is **not** supported.\n\nAfter some testing we decided to not spend effort to fix this issue for now as the benefit is very low. There are some parts of the theme where spaces between HTML elements matters but were stripped by minify tools. Some of these issues are related to <!-- cspell:disable -->[gohugoio/hugo#6892](https://github.com/gohugoio/hugo/issues/6892).<!-- cspell:enable --> While recommendation like \"don't depend on whitespace in your layout\" sounds reasonable, it seems to be not that straight forward especially for something like embedded icons into the text flow.\n\nIf you still want to use Hugo's minify flag you should at least exclude HTML files in your site configuration as described in the [Hugo documentation](https://gohugo.io/getting-started/configuration/#configure-minify):\n\n```toml\n[minify]\n  disableHTML = true\n```\n"
  },
  {
    "path": "exampleSite/content/en/usage/menus.md",
    "content": "---\ntitle: Menus\n---\n\nThe theme supports two different kinds of menus. File-tree menu is the default one and does not require further configuration to work. If you want full control about your menu the bundle menu is a powerful option to accomplish it.\n\n{{< toc >}}\n\n## File-tree menu\n\nAs the name already suggests, the file tree menu builds a menu from the file system structure of the content folder. By default, areas and subareas are sorted alphabetically by the title of the pages. To manipulate the order the `weight` parameter in a page [front matter](https://gohugo.io/content-management/front-matter/) can be used. To structure your content folder you have to use [page bundles](https://gohugo.io/content-management/organization/#page-bundles), single files are **not** supported. Hugo will render build single files in the content folder just fine but it will not be added to the menu.\n\n**Example:**\n\nFile system structure:\n\n```plain\ncontent/\n├── level-1\n│   ├── _index.md\n│   ├── level-1-1.md\n│   ├── level-1-2.md\n│   └── level-1-3\n│       ├── _index.md\n│       └── level-1-3-1.md\n└── level-2\n    ├── _index.md\n    ├── level-2-1.md\n    └── level-2-2.md\n```\n\n## Bundle menu\n\nThis type of navigation needs to be enabled first by setting `geekdocMenuBundle` to `true` in your [site configuration](/usage/configuration/#site-configuration). After you have activated the bundle menu, you start with an empty navigation. This is intentional because bundle menus have to be defined manually in a data file. While this increases the effort it also offers maximum flexibility in the design. The data file needs to be written in YAML and placed at `data/menu/main.yaml`.\n\n**Example:**\n\n```yaml\n---\nmain:\n  - name: Level 1\n    ref: \"/level-1\"\n    icon: \"gdoc_notification\"\n    sub:\n      - name: Level 1.1\n        ref: \"/level-1/level-1-1\"\n      - name: Level 1.2\n        ref: \"/level-1/level-1-2\"\n      - name: Level 1.3\n        ref: \"/level-1/level-1-3\"\n        sub:\n          - name: Level 1.3.1\n            ref: \"/level-1/level-1-3/level-1-3-1\"\n  - name: Level 2\n    ref: \"/level-2\"\n    sub:\n      - name: Level 2.1\n        ref: \"/level-2/level-2-1\"\n      - name: Level 2.2\n        ref: \"/level-2/level-2-2\"\n      - name: Level 2.2 Anchor\n        ref: /level-2/level-2-2\n        # Anchor to add to the entry. This example will result in `/level-2/level-2-2/#anchor`\n        anchor: anchor\n```\n\nAs an advantage you can add [icons](/features/icon-sets/) to your menu entries e.g. `icon: \"gdoc_notification\"`.\n\n### More menu\n\n{{< hint type=tip >}}\n**Tip**\\\nThe more menu is special type of the bundle menu and can be combined with the default file-tree menu.\n{{< /hint >}}\n\nAs this is a special type of the bundle menu it is basically working in the same way. To enable it just add a data file to `data/menu/more.yaml`. The more menu will also work with the file-tree menu and therefore **don't need to be enabled** by the `geekdocMenuBundle` parameter.\n\n**Example:**\n\n```yaml\n---\nmore:\n  - name: News\n    ref: \"/#\"\n    icon: \"gdoc_notification\"\n  - name: Releases\n    ref: \"https://github.com/thegeeklab/hugo-geekdoc/releases\"\n    external: true\n    icon: \"gdoc_download\"\n  - name: \"View Source\"\n    ref: \"https://github.com/thegeeklab/hugo-geekdoc\"\n    external: true\n    icon: \"gdoc_github\"\n```\n\n## Extra Header Menu\n\nIf you want to customize the header menu, this can be achieved by using a data file written in YAML and placed at `data/menu/extra.yaml`.\n\n**Example:**\n\n```yaml\n---\nheader:\n  - name: GitHub\n    ref: https://github.com/thegeeklab/hugo-geekdoc\n    icon: gdoc_github\n    external: true\n```\n"
  },
  {
    "path": "exampleSite/data/menu/extra.yaml",
    "content": "---\nheader:\n  - name: GitHub\n    ref: https://github.com/thegeeklab/hugo-geekdoc\n    icon: gdoc_github\n    external: true\n"
  },
  {
    "path": "exampleSite/data/menu/main.yaml",
    "content": "---\nmain:\n  - name:\n      en: Level 1 (EN)\n      de: Level 1 (DE)\n    sub:\n      - name:\n          en: Level 1.1 (EN)\n          de: Level 1.1 (DE)\n        ref: \"/toc-tree/level-1/level-1-1\"\n        rel: me\n      - name: Level 1.2\n        ref: \"/toc-tree/level-1/level-1-2\"\n      - name: Level 1.3\n        ref: \"/toc-tree/level-1/level-1-3\"\n        sub:\n          - name: Level 1.3.1\n            ref: \"/toc-tree/level-1/level-1-3/level-1-3-1\"\n  - name: Level 2\n    ref: \"/toc-tree/level-2\"\n    sub:\n      - name: Level 2.1\n        ref: \"/toc-tree/level-2/level-2-1\"\n      - name: Level 2.2\n        ref: \"/toc-tree/level-2/level-2-2\"\n"
  },
  {
    "path": "exampleSite/data/menu/more.yaml",
    "content": "---\nmore:\n  - name: News\n    ref: \"/posts\"\n    icon: \"gdoc_notification\"\n  - name: Releases\n    ref: \"https://github.com/thegeeklab/hugo-geekdoc/releases\"\n    external: true\n    icon: \"gdoc_download\"\n  - name: View Source\n    ref: \"https://github.com/thegeeklab/hugo-geekdoc\"\n    external: true\n    icon: \"gdoc_github\"\n"
  },
  {
    "path": "exampleSite/data/properties/demo.yaml",
    "content": "---\nproperties:\n  - name: prop1\n    type: string\n    description: Dummy description of the prop1 string property.\n    required: true\n\n  - name: prop2\n    type: int\n    defaultValue: 10\n    description:\n      en: Another description for the integer property called prop2.\n    required: false\n    tags:\n      en:\n        - tag1\n        - tag2\n\n  - name: prop3\n    type: bool\n    defaultValue: false\n    description: |\n      A `bool` property with a complex multiline description and embedded Markdown:\n\n      - List item 1\n      - List item 2\n\n      More description how to use this property.\n    required: false\n\n  - name: a-prop\n    type: string\n    description: Property to demonstrate sorting.\n    required: true\n"
  },
  {
    "path": "exampleSite/data/properties/shortcode-audio.yaml",
    "content": "---\nproperties:\n  - name: name\n    type: string\n    description: Name of the audio resource defined in page front matter.\n    required: true\n"
  },
  {
    "path": "exampleSite/data/properties/shortcode-avatar.yaml",
    "content": "---\nproperties:\n  - name: name\n    type: string\n    description: Name of the image resource defined in page front matter.\n    required: true\n  - name: alt\n    type: string\n    description: Description text for the image.\n    required: false\n  - name: size\n    type: string\n    description: Thumbnail size. Supported values are `origin|tiny|small|medium|large`.\n    required: false\n  - name: anchor\n    type: string\n    description: \"[Anchor](https://gohugo.io/content-management/image-processing/#anchor) to determine the placement of the crop box.\"\n    required: false\n"
  },
  {
    "path": "exampleSite/data/properties/shortcode-buttons.yaml",
    "content": "---\nproperties:\n  - name: href\n    type: string\n    description: The URL to use as target of the button.\n    required: false\n  - name: relref\n    type: string\n    description: Executes the [relref](https://gohugo.io/functions/urls/relref/) Hugo function to resolve the relative permalink of the specified page. The result is set as the target of the button.\n    required: false\n  - name: class\n    type: list\n    description: List of space-separated CSS class names to apply.\n    required: false\n  - name: size\n    type: string\n    description: Preset of different button sizes. Supported values are `regular|large`.\n    required: false\n    defaultValue: regular\n"
  },
  {
    "path": "exampleSite/data/properties/shortcode-columns.yaml",
    "content": "---\nproperties:\n  - name: size\n    type: string\n    description: Preset of different sizes for the _first_ column. Supported values are `small|regular|large`.\n    required: false\n    defaultValue: regular\n"
  },
  {
    "path": "exampleSite/data/properties/shortcode-hints.yaml",
    "content": "---\nproperties:\n  - name: type\n    type: string\n    description: Type of the hint. Supported values are `note|tip|important|caution|warning`.\n    required: false\n    defaultValue: note\n  - name: icon\n    type: string\n    description: Icon to use. The value need to be an icon from an [SVG sprite](/features/icon-sets/).\n    required: false\n  - name: title\n    type: string\n    description: Title text of the hint.\n    required: false\n"
  },
  {
    "path": "exampleSite/data/properties/shortcode-images.yaml",
    "content": "---\nproperties:\n  - name: name\n    type: string\n    description: Name of the image resource defined in page front matter.\n    required: true\n  - name: alt\n    type: string\n    description: Description text for the image.\n    required: false\n  - name: size\n    type: string\n    description: Thumbnail size. Supported values are `origin|tiny|small|medium|large`.\n    required: false\n  - name: lazy\n    type: bool\n    description: Enable/disable lazy loading for the image.\n    required: false\n    defaultValue: true\n"
  },
  {
    "path": "exampleSite/data/properties/shortcode-includes.yaml",
    "content": "---\nproperties:\n  - name: file\n    type: string\n    description: Path of the file (relative to the Hugo root) to include.\n    required: true\n  - name: language\n    type: string\n    description: Language for [syntax highlighting](https://gohugo.io/content-management/syntax-highlighting/#list-of-chroma-highlighting-languages).\n    required: false\n  - name: type\n    type: string\n    description: Special include type. Supported values are `html|page`. If not set the included file is rendered as markdown.\n    required: false\n  - name: options\n    type: bool\n    description: highlighting [options](https://gohugo.io/content-management/syntax-highlighting/#highlight-shortcode).\n    required: false\n    defaultValue: linenos=table\n"
  },
  {
    "path": "exampleSite/data/properties/shortcode-katex.yaml",
    "content": "---\nproperties:\n  - name: class\n    type: list\n    description: List of space-separated CSS class names to apply.\n    required: false\n"
  },
  {
    "path": "exampleSite/data/properties/shortcode-mermaid.yaml",
    "content": "---\nproperties:\n  - name: class\n    type: list\n    description: List of space-separated CSS class names to apply.\n    required: false\n"
  },
  {
    "path": "exampleSite/data/properties/shortcode-progress.yaml",
    "content": "---\nproperties:\n  - name: type\n    type: string\n    description: Color type of the progress bar. Supported values are `main|note|tip|important|caution|warning`.\n    required: false\n    defaultValue: main\n  - name: value\n    type: integer\n    description: Progress value.\n    required: false\n    defaultValue: 0\n  - name: label\n    type: string\n    description: Value to display.\n    required: false\n    defaultValue: \"`value`\"\n  - name: icon\n    type: string\n    description: Icon to use. The value need to be an icon from an [SVG sprite](/features/icon-sets/).\n    required: false\n  - name: title\n    type: string\n    description: Title text of the progress bar.\n    required: false\n"
  },
  {
    "path": "exampleSite/data/properties/shortcode-propertylist.yaml",
    "content": "---\nproperties:\n  - name: name\n    type: string\n    description: Name of the file from the `data/properties/` directory.\n    required: true\n  - name: sort\n    type: string\n    description: Field name to use for sorting.\n    required: false\n  - name: order\n    type: string\n    description: Sort order, only applied if `sort` is set. Supported values are `asc|desc`.\n    required: false\n    defaultValue: asc\n"
  },
  {
    "path": "exampleSite/data/properties/shortcode-toc-tree.yaml",
    "content": "---\nproperties:\n  - name: sortBy\n    type: string\n    description: |\n      Override the default sort parameter set by [`geekdocFileTreeSortBy`](/usage/configuration/#site-configuration).\n    required: false\n    defaultValue: .Site.Params.geekdocFileTreeSortBy\n"
  },
  {
    "path": "exampleSite/data/properties/shortcode-toc.yaml",
    "content": "---\nproperties:\n  - name: format\n    type: string\n    description: |\n      Format of the returned ToC. The `html` format creates an HTML wrapper to enable the `geekdocToC` parameter that limits\n      the maximum ToC level to be displayed. This variant also automatically inserts a horizontal line after the ToC. The `raw` format\n      returns the unformatted ToC, the parameter `geekdocToC` does not work in this mode. Supported values are `html|raw`.\n    required: false\n    defaultValue: html\n"
  },
  {
    "path": "exampleSite/layouts/shortcodes/sprites.html",
    "content": "<div class=\"flex flex-wrap justify-center\">\n  {{ range $key, $value := hugo.Data.sprites.geekdoc }}\n    <div class=\"flex flex-grid icon-grid\">\n      <div class=\"flex align-center justify-center icon-grid__line\">\n        <svg class=\"gdoc-icon {{ $key }}\"><use xlink:href=\"#{{ $key }}\"></use></svg>\n      </div>\n      <div class=\"flex align-center justify-center icon-grid__line icon-grid__line--text\">\n        <span>#{{ (replace $key \"_\" \"_<wbr>\") | safeHTML }}</span>\n      </div>\n    </div>\n  {{ end }}\n</div>\n"
  },
  {
    "path": "exampleSite/static/.htaccess",
    "content": "ErrorDocument 404 /404.html\n\nExpiresActive On\nExpiresDefault \"access plus 600 seconds\"\nExpiresByType text/css \"access plus 1 week\"\nExpiresByType text/javascript \"access plus 1 month\"\nExpiresByType text/html \"access plus 1 seconds\"\nExpiresByType application/javascript \"access plus 1 month\"\nExpiresByType application/x-javascript \"access plus 1 month\"\nExpiresByType image/gif \"access plus 1 week\"\nExpiresByType image/jpeg \"access plus 1 week\"\nExpiresByType image/png \"access plus 1 week\"\nExpiresByType image/x-icon \"access plus 1 month\"\nExpiresByType image/svg+xml \"access plus 1 week\"\nExpiresByType application/x-font-woff \"access plus 1 week\"\nExpiresByType application/font-woff2 \"access plus 1 week\"\n"
  },
  {
    "path": "exampleSite/static/_includes/example.html.part",
    "content": "<p>\n<i><b>Example HTML include</b></i>\n</p>\n\n<h4>This is heading 4</h4>\n<h5>This is heading 5</h5>\n<h6>This is heading 6</h6>\n"
  },
  {
    "path": "exampleSite/static/_includes/example.md.part",
    "content": "_**Example Markdown include**_\n\nFile including a simple Markdown table.\n\n| Head 1 | Head 2 | Head 3 |\n| ------ | ------ | ------ |\n| 1      | 2      | 3      |\n"
  },
  {
    "path": "exampleSite/static/custom.css",
    "content": ":root {\n  --code-max-height: 60rem;\n}\n\n.icon-grid {\n  width: 8rem;\n  height: 8rem;\n  margin: 0.2em;\n  text-align: center;\n  padding: 0.3em;\n}\n\n.icon-grid__line {\n  height: 4rem;\n}\n\n.icon-grid__line .gdoc-icon {\n  width: 3em;\n  height: 3em;\n}\n\n.icon-grid__line--text {\n  font-size: 0.8em;\n}\n"
  },
  {
    "path": "exampleSite/static/custom.css.example",
    "content": "/* Global customization */\n\n:root {\n  --code-max-height: 60rem;\n\n  --header-font-family: \"DancingScript\";\n  --body-font-family: \"DancingScript\";\n  --code-font-family: \"DancingScript\";\n}\n\n/* Light mode theming */\n:root,\n:root[color-theme=\"light\"] {\n  --header-background: #4ec58a;\n  --header-font-color: #ffffff;\n\n  --body-background: #ffffff;\n  --body-font-color: #343a40;\n\n  --mark-color: #ffab00;\n\n  --button-background: #62cb97;\n  --button-border-color: #4ec58a;\n\n  --link-color: #518169;\n  --link-color-visited: #c54e8a;\n\n  --code-background: #f5f6f8;\n  --code-accent-color: #e3e7eb;\n  --code-accent-color-lite: #eff1f3;\n  --code-font-color: #5f5f5f;\n\n  --code-copy-background: #f5f6f8;\n  --code-copy-font-color: #6b7784;\n  --code-copy-border-color: #adb4bc;\n  --code-copy-success-color: #00c853;\n\n  --accent-color: #e9ecef;\n  --accent-color-lite: #f8f9fa;\n\n  --control-icons: #b2bac1;\n\n  --footer-background: #112b3c;\n  --footer-font-color: #ffffff;\n  --footer-link-color: #ffcc5c;\n  --footer-link-color-visited: #ffcc5c;\n}\n@media (prefers-color-scheme: light) {\n  :root {\n    --header-background: #4ec58a;\n    --header-font-color: #ffffff;\n\n    --body-background: #ffffff;\n    --body-font-color: #343a40;\n\n    --mark-color: #ffab00;\n\n    --button-background: #62cb97;\n    --button-border-color: #4ec58a;\n\n    --link-color: #518169;\n    --link-color-visited: #c54e8a;\n\n    --code-background: #f5f6f8;\n    --code-accent-color: #e3e7eb;\n    --code-accent-color-lite: #eff1f3;\n    --code-font-color: #5f5f5f;\n\n    --code-copy-background: #f5f6f8;\n    --code-copy-font-color: #6b7784;\n    --code-copy-border-color: #adb4bc;\n    --code-copy-success-color: #00c853;\n\n    --accent-color: #e9ecef;\n    --accent-color-lite: #f8f9fa;\n\n    --control-icons: #b2bac1;\n\n    --footer-background: #112b3c;\n    --footer-font-color: #ffffff;\n    --footer-link-color: #ffcc5c;\n    --footer-link-color-visited: #ffcc5c;\n  }\n}\n\n/* Dark mode theming */\n:root[color-theme=\"dark\"] {\n  --header-background: #4ec58a;\n  --header-font-color: #ffffff;\n\n  --body-background: #343a40;\n  --body-font-color: #ced3d8;\n\n  --mark-color: #ffab00;\n\n  --button-background: #62cb97;\n  --button-border-color: #4ec58a;\n\n  --link-color: #7ac29e;\n  --link-color-visited: #c27a9e;\n\n  --code-background: #2f353a;\n  --code-accent-color: #262b2f;\n  --code-accent-color-lite: #2b3035;\n  --code-font-color: #b9b9b9;\n\n  --code-copy-background: #343a40;\n  --code-copy-font-color: #6b7784;\n  --code-copy-border-color: #6b7784;\n  --code-copy-success-color: #37905c;\n\n  --accent-color: #2b3035;\n  --accent-color-lite: #2f353a;\n\n  --control-icons: #b2bac1;\n\n  --footer-background: #112b3c;\n  --footer-font-color: #ffffff;\n  --footer-link-color: #ffcc5c;\n  --footer-link-color-visited: #ffcc5c;\n}\n@media (prefers-color-scheme: dark) {\n  :root {\n    --header-background: #4ec58a;\n    --header-font-color: #ffffff;\n\n    --body-background: #343a40;\n    --body-font-color: #ced3d8;\n\n    --mark-color: #ffab00;\n\n    --button-background: #62cb97;\n    --button-border-color: #4ec58a;\n\n    --link-color: #7ac29e;\n    --link-color-visited: #c27a9e;\n\n    --code-background: #2f353a;\n    --code-accent-color: #262b2f;\n    --code-accent-color-lite: #2b3035;\n    --code-font-color: #b9b9b9;\n\n    --code-copy-background: #343a40;\n    --code-copy-font-color: #6b7784;\n    --code-copy-border-color: #6b7784;\n    --code-copy-success-color: #37905c;\n\n    --accent-color: #2b3035;\n    --accent-color-lite: #2f353a;\n\n    --control-icons: #b2bac1;\n\n    --footer-background: #112b3c;\n    --footer-font-color: #ffffff;\n    --footer-link-color: #ffcc5c;\n    --footer-link-color-visited: #ffcc5c;\n  }\n}\n\n@font-face {\n  font-family: \"DancingScript\";\n  src:\n    url(\"fonts/DancingScript.woff2\") format(\"woff2\"),\n    url(\"fonts/DancingScript.woff\") format(\"woff\");\n  font-weight: normal;\n  font-style: normal;\n  font-display: swap;\n}\n"
  },
  {
    "path": "i18n/am.yaml",
    "content": "---\r\nedit_page: ገጹን ማስተካከያ\r\n\r\nnav_navigation: መሄጃ\r\nnav_tags: መለያዎች\r\nnav_more: ተጨማሪ\r\nnav_top: ወደ ላይ ተመለስ\r\n\r\nform_placeholder_search: ፈልግ\r\n\r\nerror_page_title: ጠፋብዎት? አይጨነቁ።\r\nerror_message_title: ጠፋብዎት?\r\nerror_message_code: አልተገኘም\r\nerror_message_text: >\r\n  ገጹን ማግኘት አልተቻለም፤ ነገር ግን አይጨነቁ፤ በዚህ <a class=\"gdoc-error__link\" href=\"{{ . }}\">ገጽ</a> መመለስ ይችላሉ።\r\n\r\nbutton_toggle_dark: ብሩህ/ጨለማ መቀያየሪያ\r\nbutton_nav_open: መሄጃውን ክፈት\r\nbutton_nav_close: መሄጃውን ዝጋ\r\nbutton_menu_open: ምርጫዎችን ክፈት\r\nbutton_menu_close: ምርጫዎችን ዝጋ\r\nbutton_homepage: ወደ መጀመሪያ ገጽ ተመለስ\r\n\r\ntitle_anchor_prefix: \"ማያያዣ ወደ:\"\r\n\r\nposts_read_more: ሙሉውን ያንብቡ\r\nposts_read_time:\r\n  one: \"ለማንበብ አንድ ደቂቃ\"\r\n  other: \"{{ . }} ደቂቃዎች ለማንበብ\"\r\nposts_update_prefix: መጨረሻ የዘመነው\r\nposts_count:\r\n  one: \"አንድ ጽሑፍ\"\r\n  other: \"{{ . }} ጽሑፎች\"\r\nposts_tagged_with: ከ '{{ . }}' ጋር የተዛመዱ ጽሑፎች በሙሉ\r\n\r\nfooter_build_with: >\r\n  በ <a href=\"https://gohugo.io/\" class=\"gdoc-footer__link\">Hugo</a> የተገነባ ከ\r\n  <svg class=\"gdoc-icon gdoc_heart\"><use xlink:href=\"#gdoc_heart\"></use></svg> ጋር\r\nfooter_legal_notice: ሕጋዊ መረጃዎች\r\nfooter_privacy_policy: ስለ መረጃዎ አያያዝ ያለን አቋም\r\nfooter_content_license_prefix: >\r\n  ስለ ይዘቱ ባለመብትነት መረጃ\r\n\r\nlanguage_switch_no_translation_prefix: \"ያልተተረጐመ ገጽ:\"\r\n\r\npropertylist_required: ግድ የሚያስፈልግ\r\npropertylist_optional: ግድ ያልሆነ\r\npropertylist_default: በባዶ ፈንታ\r\n\r\npagination_page_prev: ያለፈው\r\npagination_page_next: ቀጣይ\r\npagination_page_state: \"{{ .PageNumber }}/{{ .TotalPages }}\"\r\n"
  },
  {
    "path": "i18n/cs.yaml",
    "content": "---\nedit_page: Upravit stránku\n\nnav_navigation: Navigace\nnav_tags: Tagy\nnav_more: Více\nnav_top: Zpět nahoru\n\nform_placeholder_search: Vyhledat\n\nerror_page_title: Ztracen? Nic se neděje\nerror_message_title: Ztracen?\nerror_message_code: Error 404\nerror_message_text: >\n  Vypadá to že stránka, kterou hledáte, neexistuje. Nemějte obavy, můžete\n  se vrátit zpět na <a class=\"gdoc-error__link\" href=\"{{ . }}\">domovskou stránku</a>.\n\nbutton_toggle_dark: Přepnout tmavý/světlý/automatický režim\nbutton_nav_open: Otevřít navigaci\nbutton_nav_close: Zavřít navigaci\nbutton_menu_open: Otevřít lištu nabídky\nbutton_menu_close: Zavřít lištu nabídky\nbutton_homepage: Zpět na domovskou stránku\n\ntitle_anchor_prefix: \"Odkaz na:\"\n\nposts_read_more: Přečíst celý příspěvek\nposts_read_time:\n  one: \"Doba čtení: 1 minuta\"\n  other: \"Doba čtení: {{ . }} minut(y)\"\nposts_update_prefix: Naposledy upraveno\nposts_count:\n  one: \"Jeden příspěvek\"\n  other: \"Příspěvků: {{ . }}\"\nposts_tagged_with: Všechny příspěvky označeny '{{ . }}'\n\nfooter_build_with: >\n  Vytvořeno za pomocí <a href=\"https://gohugo.io/\" class=\"gdoc-footer__link\">Hugo</a> a\n  <svg class=\"gdoc-icon gdoc_heart\"><use xlink:href=\"#gdoc_heart\"></use></svg>\nfooter_legal_notice: Právní upozornění\nfooter_privacy_policy: Zásady ochrany soukromí\nfooter_content_license_prefix: >\n  Obsah licencovaný pod\n\nlanguage_switch_no_translation_prefix: \"Stránka není přeložena:\"\n\npropertylist_required: povinné\npropertylist_optional: volitené\npropertylist_default: výchozí\n\npagination_page_prev: předchozí\npagination_page_next: další\npagination_page_state: \"{{ .PageNumber }}/{{ .TotalPages }}\"\n"
  },
  {
    "path": "i18n/da.yaml",
    "content": "---\nedit_page: Rediger side\n\nnav_navigation: Navigation\nnav_tags: Tags\nnav_more: Mere\nnav_top: Til toppen\n\nform_placeholder_search: Søg\n\nerror_page_title: Faret vild? Bare rolig\nerror_message_title: Lost?\nerror_message_code: Fejl 404\nerror_message_text: >\n  Det du leder efter kan ikke findes. Bare rolig, du kan komme tilbage til\n  <a class=\"gdoc-error__link\" href=\"{{ . }}\">forsiden</a>.\n\nbutton_toggle_dark: Skift Dark/Light/Auto mode\nbutton_nav_open: Åben navigation\nbutton_nav_close: Luk navigation\nbutton_menu_open: Åben menubar\nbutton_menu_close: Luk menubar\nbutton_homepage: Tilbage til forsiden\n\ntitle_anchor_prefix: \"Link til:\"\n\nposts_read_more: Læs fulde indlæg\nposts_read_time:\n  one: \"Et minut at gennemlæse\"\n  other: \"{{ . }} minutter at gennemlæse\"\nposts_update_prefix: Opdateret den\nposts_count:\n  one: \"Et indlæg\"\n  other: \"{{ . }} indlæg\"\nposts_tagged_with: Alle indslag tagget med '{{ . }}'\n\nfooter_build_with: >\n  Bygget med <a href=\"https://gohugo.io/\" class=\"gdoc-footer__link\">Hugo</a> og\n  <svg class=\"gdoc-icon gdoc_heart\"><use xlink:href=\"#gdoc_heart\"></use></svg>\nfooter_legal_notice: Forretningsbetingelser\nfooter_privacy_policy: Privatlivspolitik\nfooter_content_license_prefix: >\n  Indhold licenseret under\n\nlanguage_switch_no_translation_prefix: \"Indlæg ikke oversat:\"\n\npropertylist_required: påkrævet\npropertylist_optional: valgfri\npropertylist_default: udgangspunkt\n\npagination_page_prev: forrige\npagination_page_next: næste\npagination_page_state: \"{{ .PageNumber }}/{{ .TotalPages }}\"\n"
  },
  {
    "path": "i18n/de.yaml",
    "content": "---\nedit_page: Seite bearbeiten\n\nnav_navigation: Navigation\nnav_tags: Tags\nnav_more: Weitere\nnav_top: Nach oben\n\nform_placeholder_search: Suchen\n\nerror_page_title: Verlaufen? Keine Sorge\nerror_message_title: Verlaufen?\nerror_message_code: Fehler 404\nerror_message_text: >\n  Wir können die Seite nach der Du gesucht hast leider nicht finden. Keine Sorge,\n  wir bringen Dich zurück zur <a class=\"gdoc-error__link\" href=\"{{ . }}\">Startseite</a>.\n\nbutton_toggle_dark: Wechsel zwischen Dunkel/Hell/Auto Modus\nbutton_nav_open: Navigation öffnen\nbutton_nav_close: Navigation schließen\nbutton_menu_open: Menüband öffnen\nbutton_menu_close: Menüband schließen\nbutton_homepage: Zurück zur Startseite\n\ntitle_anchor_prefix: \"Link zu:\"\n\nposts_read_more: Ganzen Artikel lesen\nposts_read_time:\n  one: \"Eine Minute Lesedauer\"\n  other: \"{{ . }} Minuten Lesedauer\"\nposts_update_prefix: Aktualisiert am\nposts_count:\n  one: \"Ein Artikel\"\n  other: \"{{ . }} Artikel\"\nposts_tagged_with: Alle Artikel mit dem Tag '{{ . }}'\n\nfooter_build_with: >\n  Entwickelt mit <a href=\"https://gohugo.io/\" class=\"gdoc-footer__link\">Hugo</a> und\n  <svg class=\"gdoc-icon gdoc_heart\"><use xlink:href=\"#gdoc_heart\"></use></svg>\nfooter_legal_notice: Impressum\nfooter_privacy_policy: Datenschutzerklärung\nfooter_content_license_prefix: >\n  Inhalt lizensiert unter\n\nlanguage_switch_no_translation_prefix: \"Seite nicht übersetzt:\"\n\npropertylist_required: erforderlich\npropertylist_optional: optional\npropertylist_default: Standardwert\n\npagination_page_prev: vorher\npagination_page_next: weiter\npagination_page_state: \"{{ .PageNumber }}/{{ .TotalPages }}\"\n"
  },
  {
    "path": "i18n/en.yaml",
    "content": "---\nedit_page: Edit page\n\nnav_navigation: Navigation\nnav_tags: Tags\nnav_more: More\nnav_top: Back to top\n\nform_placeholder_search: Search\n\nerror_page_title: Lost? Don't worry\nerror_message_title: Lost?\nerror_message_code: Error 404\nerror_message_text: >\n  Seems like what you are looking for can't be found. Don't worry, we can\n  bring you back to the <a class=\"gdoc-error__link\" href=\"{{ . }}\">homepage</a>.\n\nbutton_toggle_dark: Toggle Dark/Light/Auto mode\nbutton_nav_open: Open Navigation\nbutton_nav_close: Close Navigation\nbutton_menu_open: Open Menu Bar\nbutton_menu_close: Close Menu Bar\nbutton_homepage: Back to homepage\n\ntitle_anchor_prefix: \"Anchor to:\"\n\nposts_read_more: Read full post\nposts_read_time:\n  one: \"One minute to read\"\n  other: \"{{ . }} minutes to read\"\nposts_update_prefix: Updated on\nposts_count:\n  one: \"One post\"\n  other: \"{{ . }} posts\"\nposts_tagged_with: All posts tagged with '{{ . }}'\n\nfooter_build_with: >\n  Built with <a href=\"https://gohugo.io/\" class=\"gdoc-footer__link\">Hugo</a> and\n  <svg class=\"gdoc-icon gdoc_heart\"><use xlink:href=\"#gdoc_heart\"></use></svg>\nfooter_legal_notice: Legal Notice\nfooter_privacy_policy: Privacy Policy\nfooter_content_license_prefix: >\n  Content licensed under\n\nlanguage_switch_no_translation_prefix: \"Page not translated:\"\n\npropertylist_required: required\npropertylist_optional: optional\npropertylist_default: default\n\npagination_page_prev: prev\npagination_page_next: next\npagination_page_state: \"{{ .PageNumber }}/{{ .TotalPages }}\"\n"
  },
  {
    "path": "i18n/es.yaml",
    "content": "---\nedit_page: Editar página\n\nnav_navigation: Navegación\nnav_tags: Etiquetas\nnav_more: Más\nnav_top: Inicio de la página\n\nform_placeholder_search: Buscar\n\nerror_page_title: Perdido? No te preocupes\nerror_message_title: Perdido?\nerror_message_code: Error 404\nerror_message_text: >\n  Al parecer, lo que estás buscando no pudo ser encontrado. No te preocupes, podemos\n  llevarte de vuelta al <a class=\"gdoc-error__link\" href=\"{{ . }}\">inicio</a>.\n\nbutton_toggle_dark: Cambiar el modo Oscuro/Claro/Auto\nbutton_nav_open: Abrir la Navegación\nbutton_nav_close: Cerrar la Navegación\nbutton_menu_open: Abrir el Menú Bar\nbutton_menu_close: Cerrar el Menú Bar\nbutton_homepage: Volver al Inicio\n\ntitle_anchor_prefix: \"Anclado a:\"\n\nposts_read_more: Lee la publicación completa\nposts_read_time:\n  one: \"Un minuto para leer\"\n  other: \"{{ . }} minutos para leer\"\nposts_update_prefix: Actualizado en\nposts_count:\n  one: \"Una publicación\"\n  other: \"{{ . }} publicaciones\"\nposts_tagged_with: Todas las publicaciones etiquetadas con '{{ . }}'\n\nfooter_build_with: >\n  Creado con <a href=\"https://gohugo.io/\" class=\"gdoc-footer__link\">Hugo</a> y\n  <svg class=\"gdoc-icon gdoc_heart\"><use xlink:href=\"#gdoc_heart\"></use></svg>\nfooter_legal_notice: Aviso Legal\nfooter_privacy_policy: Política de Privacidad\nfooter_content_license_prefix: >\n  Contenido licenciado con\n\nlanguage_switch_no_translation_prefix: \"Página no traducida:\"\n\npropertylist_required: requerido\npropertylist_optional: opcional\npropertylist_default: estándar\n\npagination_page_prev: previo\npagination_page_next: siguiente\npagination_page_state: \"{{ .PageNumber }}/{{ .TotalPages }}\"\n"
  },
  {
    "path": "i18n/fr.yaml",
    "content": "---\nedit_page: Editer la page\n\nnav_navigation: Navigation\nnav_tags: Tags\nnav_more: Plus\nnav_top: Retour au haut de page\n\nform_placeholder_search: Chercher\n\nerror_page_title: Perdu? Ne t'inquiète pas\nerror_message_title: Perdu?\nerror_message_code: Error 404\nerror_message_text: >\n  On dirait que ce que vous cherchez est introuvable. Ne vous inquiétez pas, nous pouvons\n  vous ramèner à la <a class=\"gdoc-error__link\" href=\"{{ . }}\">page d'accueil</a>.\n\nbutton_toggle_dark: Basculer le mode Sombre/Clair/Auto\nbutton_nav_open: Ouvrir la navigation\nbutton_nav_close: Fermer la navigation\nbutton_menu_open: Ouvrir la barre de menus\nbutton_menu_close: Fermer la barre de menus\nbutton_homepage: retour à la page d'accueil\n\ntitle_anchor_prefix: \"Ancrer à :\"\n\nposts_read_more: Lire l'article complet\nposts_read_time:\n  one: \"Une minute pour lire\"\n  other: \"{{ . }} minutes à lire\"\nposts_update_prefix: Mis à jour le\nposts_count:\n  one: \"Un billet\"\n  other: \"{{ . }} billets\"\nposts_tagged_with: Tous les articles marqués avec '{{ . }}'\n\nfooter_build_with: >\n  Construit avec <a href=\"https://gohugo.io/\" class=\"gdoc-footer__link\">Hugo</a> et\n  <svg class=\"gdoc-icon gdoc_heart\"><use xlink:href=\"#gdoc_heart\"></use></svg>\nfooter_legal_notice: Mentions légales\nfooter_privacy_policy: Politique de confidentialité\nfooter_content_license_prefix: >\n  Contenu sous licence\n\nlanguage_switch_no_translation_prefix: \"Page non traduite:\"\n\npropertylist_required: requis\npropertylist_optional: facultatif\npropertylist_default: défaut\n\npagination_page_prev: précédent\npagination_page_next: suivant\npagination_page_state: \"{{ .PageNumber }}/{{ .TotalPages }}\"\n"
  },
  {
    "path": "i18n/it.yaml",
    "content": "---\nedit_page: Modifica la pagina\n\nnav_navigation: Navigazione\nnav_tags: Etichette\nnav_more: Altro\nnav_top: Torna su\n\nform_placeholder_search: Cerca\n\nerror_page_title: Perso? Non ti preoccupare\nerror_message_title: Perso?\nerror_message_code: Errore 404\nerror_message_text: >\n  Sembra che non sia possibile trovare quello che stavi cercando. Non ti preoccupare,\n  possiamo riportarti alla <a class=\"gdoc-error__link\" href=\"{{ . }}\">pagina iniziale</a>.\n\nbutton_toggle_dark: Seleziona il tema Chiaro/Scuro/Automatico\nbutton_nav_open: Apri la Navigazione\nbutton_nav_close: Chiudi la Navigazione\nbutton_menu_open: Apri la Barra del Menu\nbutton_menu_close: Chiudi la Barra del Menu\nbutton_homepage: Torna alla pagina iniziale\n\ntitle_anchor_prefix: \"Ancora a:\"\n\nposts_read_more: Leggi tutto il post\nposts_read_time:\n  one: \"Tempo di lettura: un minuto\"\n  other: \"Tempo di lettura: {{ . }} minuti\"\nposts_update_prefix: Aggiornato il\nposts_count:\n  one: \"Un post\"\n  other: \"{{ . }} post\"\nposts_tagged_with: Tutti i post etichettati con '{{ . }}'\n\nfooter_build_with: >\n  Realizzato con <a href=\"https://gohugo.io/\" class=\"gdoc-footer__link\">Hugo</a> e\n  <svg class=\"gdoc-icon gdoc_heart\"><use xlink:href=\"#gdoc_heart\"></use></svg>\nfooter_legal_notice: Avviso Legale\nfooter_privacy_policy: Politica sulla Privacy\nfooter_content_license_prefix: >\n  Contenuto sotto licenza\n\nlanguage_switch_no_translation_prefix: \"Pagina non tradotta:\"\n\npropertylist_required: richiesto\npropertylist_optional: opzionale\npropertylist_default: valore predefinito\n\npagination_page_prev: precedente\npagination_page_next: prossimo\npagination_page_state: \"{{ .PageNumber }}/{{ .TotalPages }}\"\n"
  },
  {
    "path": "i18n/ja.yaml",
    "content": "---\nedit_page: ページの編集\n\nnav_navigation: ナビゲーション\nnav_tags: タグ\nnav_more: さらに\nnav_top: トップへ戻る\n\nform_placeholder_search: 検索\n\nerror_page_title: お困りですか？ご心配なく\nerror_message_title: お困りですか？\nerror_message_code: 404 エラー\nerror_message_text: >\n  お探しのものが見つからないようです。<a class=\"gdoc-error__link\" href=\"{{ . }}\">トップページ</a>\n  へ戻ることができるので、ご安心ください。\n\nbutton_toggle_dark: モードの切替 ダーク/ライト/自動\nbutton_nav_open: ナビゲーションを開く\nbutton_nav_close: ナビゲーションを閉じる\nbutton_menu_open: メニューバーを開く\nbutton_menu_close: メニューバーを閉じる\nbutton_homepage: トップページへ戻る\n\ntitle_anchor_prefix: \"アンカー先:\"\n\nposts_read_more: 全投稿を閲覧\nposts_read_time:\n  one: \"読むのに 1 分かかります\"\n  other: \"読むのに要する時間 {{ . }} (分)\"\nposts_update_prefix: 更新時刻\nposts_count:\n  one: \"一件の投稿\"\n  other: \"{{ . }} 件の投稿\"\nposts_tagged_with: \"'{{ . }}'のタグが付いた記事全部\"\n\nfooter_build_with: >\n  <a href=\"https://gohugo.io/\" class=\"gdoc-footer__link\">Hugo</a> でビルドしています。\n  <svg class=\"gdoc-icon gdoc_heart\"><use xlink:href=\"#gdoc_heart\"></use></svg>\nfooter_legal_notice: 法的な告知事項\nfooter_privacy_policy: プライバシーポリシー\nfooter_content_license_prefix: >\n  提供するコンテンツのライセンス\n\nlanguage_switch_no_translation_prefix: \"未翻訳のページ:\"\n\npropertylist_required: 必須\npropertylist_optional: 任意\npropertylist_default: 既定値\n\npagination_page_prev: 前\npagination_page_next: 次\npagination_page_state: \"{{ .PageNumber }}/{{ .TotalPages }}\"\n"
  },
  {
    "path": "i18n/nl.yaml",
    "content": "---\nedit_page: Wijzig pagina\n\nnav_navigation: Navigatie\nnav_tags: Markering\nnav_more: Meer\nnav_top: Terug naar boven\n\nform_placeholder_search: Zoek\n\nerror_page_title: Verdwaald? Geen probleem\nerror_message_title: Verdwaald?\nerror_message_code: Error 404\nerror_message_text: >\n  Het lijkt er op dat wat je zoekt niet gevonden kan worden. Geen probleem,\n  we kunnen je terug naar de <a class=\"gdoc-error__link\" href=\"{{ . }}\">startpagina</a> brengen.\n\nbutton_toggle_dark: Wijzig Donker/Licht/Auto weergave\nbutton_nav_open: Open navigatie\nbutton_nav_close: Sluit navigatie\nbutton_menu_open: Open menubalk\nbutton_menu_close: Sluit menubalk\nbutton_homepage: Terug naar startpagina\n\ntitle_anchor_prefix: \"Link naar:\"\n\nposts_read_more: Lees volledige bericht\nposts_read_time:\n  one: \"Een minuut leestijd\"\n  other: \"{{ . }} minuten leestijd\"\nposts_update_prefix: Bijgewerkt op\nposts_count:\n  one: \"Een bericht\"\n  other: \"{{ . }} berichten\"\nposts_tagged_with: Alle berichten gemarkeerd met '{{ . }}'\n\nfooter_build_with: >\n  Gebouwd met <a href=\"https://gohugo.io/\" class=\"gdoc-footer__link\">Hugo</a> en\n  <svg class=\"gdoc-icon gdoc_heart\"><use xlink:href=\"#gdoc_heart\"></use></svg> \nfooter_legal_notice: Juridische mededeling\nfooter_privacy_policy: Privacybeleid\nfooter_content_license_prefix: >\n  Inhoud gelicenseerd onder\n\nlanguage_switch_no_translation_prefix: \"Pagina niet vertaald:\"\n\npropertylist_required: verplicht\npropertylist_optional: optioneel\npropertylist_default: standaard\n\npagination_page_prev: vorige\npagination_page_next: volgende\npagination_page_state: \"{{ .PageNumber }}/{{ .TotalPages }}\"\n"
  },
  {
    "path": "i18n/oc.yaml",
    "content": "---\nedit_page: Modificar la pagina\n\nnav_navigation: Navegacion\nnav_tags: Etiquetas\nnav_more: Mai\nnav_top: Tornar ennaut\n\nform_placeholder_search: Cercar\n\nerror_page_title: Perdut ? Cap de problèma\nerror_message_title: Perdut ?\nerror_message_code: Error 404\nerror_message_text: >\n  Sembla que cercatz quicòm que se pòt pas trobat. Vos’n fagatz pas vos podèm\n  tornar a la <a class=\"gdoc-error__link\" href=\"{{ . }}\">pagina d’acuèlh</a>.\n\nbutton_toggle_dark: Alternar lo mòde escur/clar/auto\nbutton_nav_open: Dobrir la navegacion\nbutton_nav_close: Tampar la navegacion\nbutton_menu_open: Dobrir la barra de menú\nbutton_menu_close: Tampar la barra de menú\nbutton_homepage: Tornar a la pagina d’acuèlh\n\ntitle_anchor_prefix: \"Ancorar a:\"\n\nposts_read_more: Legir la publicacion complèta\nposts_read_time:\n  one: \"Una minuta de lectura\"\n  other: \"{{ . }} minutas de lectura\"\nposts_update_prefix: Actualizada lo\nposts_count:\n  one: \"Una publicacion\"\n  other: \"{{ . }} publicacions\"\nposts_tagged_with: Totas las publicacions amb '{{ . }}'\n\nfooter_build_with: >\n  Construch amb <a href=\"https://gohugo.io/\" class=\"gdoc-footer__link\">Hugo</a> e\n  <svg class=\"gdoc-icon gdoc_heart\"><use xlink:href=\"#gdoc_heart\"></use></svg>\nfooter_legal_notice: Mencions legalas\nfooter_privacy_policy: politica de confidencialitat\nfooter_content_license_prefix: >\n  Contengut sota licéncia\n\nlanguage_switch_no_translation_prefix: \"Pagina non traducha :\"\n\npropertylist_required: requerit\npropertylist_optional: opcional\npropertylist_default: per defaut\n\npagination_page_prev: prec.\npagination_page_next: seg.\npagination_page_state: \"{{ .PageNumber }}/{{ .TotalPages }}\"\n"
  },
  {
    "path": "i18n/zh-cn.yaml",
    "content": "---\nedit_page: 编辑页面\n\nnav_navigation: 导航\nnav_tags: 标签\nnav_more: 更多\nnav_top: 回到顶部\n\nform_placeholder_search: 搜索\n\nerror_page_title: 迷路了？ 不用担心\nerror_message_title: 迷路了？\nerror_message_code: 错误 404\nerror_message_text: >\n  好像找不到你要找的东西。 别担心，我们可以\n  带您回到<a class=\"gdoc-error__link\" href=\"{{ . }}\">主页</a>。\n\nbutton_toggle_dark: 切换暗/亮/自动模式\nbutton_nav_open: 打开导航\nbutton_nav_close: 关闭导航\nbutton_menu_open: 打开菜单栏\nbutton_menu_close: 关闭菜单栏\nbutton_homepage: 返回首页\n\ntitle_anchor_prefix: \"锚定到：\"\n\nposts_read_more: 阅读全文\nposts_read_time:\n  one: \"一分钟阅读时间\"\n  other: \"{{ . }} 分钟阅读时间\"\nposts_update_prefix: 更新时间\nposts_count:\n  one: 一篇文章\n  other: \"{{ . }} 个帖子\"\nposts_tagged_with: 所有带有“{{ . }}”标签的帖子。\n\nfooter_build_with: >\n  基于 <a href=\"https://gohugo.io/\" class=\"gdoc-footer__link\">Hugo</a>\n  <svg class=\"gdoc-icon gdoc_heart\"><use xlink:href=\"#gdoc_heart\"></use></svg> 制作\nfooter_legal_notice: \"法律声明\"\nfooter_privacy_policy: \"隐私政策\"\nfooter_content_license_prefix: >\n  内容许可证\n\nlanguage_switch_no_translation_prefix: \"页面未翻译：\"\n\npropertylist_required: 需要\npropertylist_optional: 可选\npropertylist_default: 默认值\n\npagination_page_prev: 以前\npagination_page_next: 下一个\npagination_page_state: \"{{ .PageNumber }}/{{ .TotalPages }}\"\n"
  },
  {
    "path": "layouts/404.html",
    "content": "<!DOCTYPE html>\n<html lang=\"{{ .Site.Language.Lang }}\">\n  <head>\n    {{ partial \"head/meta\" . }}\n    <title>{{ i18n \"error_page_title\" }}</title>\n\n    {{ partial \"head/favicons\" . }}\n    {{ partial \"head/others\" . }}\n  </head>\n\n  <body>\n    {{ partial \"svg-icon-symbols\" . }}\n\n\n    <div class=\"wrapper\">\n      {{ partial \"site-header\" (dict \"Root\" . \"MenuEnabled\" false) }}\n\n\n      <main class=\"gdoc-error flex-even\">\n        <div class=\"flex align-center justify-center\">\n          <div class=\"gdoc-error__icon\">\n            <svg class=\"gdoc-icon gdoc_cloud_off\"><use xlink:href=\"#gdoc_cloud_off\"></use></svg>\n          </div>\n          <div class=\"gdoc-error__message\">\n            <div class=\"gdoc-error__line gdoc-error__title\">{{ i18n \"error_message_title\" }}</div>\n            <div class=\"gdoc-error__line gdoc-error__code\">{{ i18n \"error_message_code\" }}</div>\n            <div class=\"gdoc-error__line gdoc-error__help\">\n              {{ i18n \"error_message_text\" .Site.Home.Permalink | safeHTML }}\n            </div>\n          </div>\n        </div>\n      </main>\n\n      {{ partial \"site-footer\" . }}\n\n    </div>\n  </body>\n</html>\n"
  },
  {
    "path": "layouts/_default/_markup/render-codeblock-mermaid.html",
    "content": "<!-- prettier-ignore-start -->\n{{ if not (.Page.Scratch.Get \"mermaid\") }}\n  <!-- Include mermaid only first time -->\n  <script defer src=\"{{ index (index hugo.Data.assets \"mermaid.js\") \"src\" | relURL }}\"></script>\n  {{ .Page.Scratch.Set \"mermaid\" true }}\n{{ end }}\n<!-- prettier-ignore-end -->\n\n<pre class=\"gdoc-mermaid mermaid text-center\">\n  {{- .Inner -}}\n</pre>\n"
  },
  {
    "path": "layouts/_default/_markup/render-heading.html",
    "content": "{{- $showAnchor := (and (default true .Page.Params.geekdocAnchor) (default true .Page.Site.Params.geekdocAnchor)) -}}\n\n\n<!-- prettier-ignore-start -->\n{{- if $showAnchor -}}\n<div class=\"flex align-center gdoc-page__anchorwrap\">\n    <h{{ .Level }} id=\"{{ .Anchor | safeURL }}\" {{- with .Attributes.class }}\n        class=\"{{ . }}\"\n    {{- end }}\n    >\n        {{ .Text | safeHTML }}\n    </h{{ .Level }}>\n    <a data-clipboard-text=\"{{ .Page.Permalink }}#{{ .Anchor | safeURL }}\" class=\"gdoc-page__anchor clip flex align-center\" title=\"{{ i18n \"title_anchor_prefix\" }} {{ .Text | safeHTML }}\" aria-label=\"{{ i18n \"title_anchor_prefix\" }} {{ .Text | safeHTML }}\" href=\"#{{ .Anchor | safeURL }}\">\n        <svg class=\"gdoc-icon gdoc_link\"><use xlink:href=\"#gdoc_link\"></use></svg>\n    </a>\n</div>\n{{- else -}}\n<div class=\"gdoc-page__anchorwrap\">\n    <h{{ .Level }} id=\"{{ .Anchor | safeURL }}\" {{- with .Attributes.class }}\n        class=\"{{ . }}\"\n    {{- end }}\n    >\n        {{ .Text | safeHTML }}\n    </h{{ .Level }}>\n</div>\n{{- end -}}\n<!-- prettier-ignore-end -->\n"
  },
  {
    "path": "layouts/_default/_markup/render-image.html",
    "content": "<img\n  src=\"{{ .Destination | safeURL }}\"\n  alt=\"{{ .Text }}\"\n  {{ with .Title }}title=\"{{ . }}\"{{ end }}\n/>\n{{- /* Drop trailing newlines */ -}}\n"
  },
  {
    "path": "layouts/_default/_markup/render-link.html",
    "content": "{{- $raw := or (hasPrefix .Text \"<img\") (hasPrefix .Text \"<figure\") -}}\n{{- $code := hasPrefix .Text \"<code\" -}}\n<a\n  class=\"gdoc-markdown__link{{ if $raw -}}\n    --raw\n  {{- else if $code -}}\n    --code\n  {{- end }}\"\n  href=\"{{ .Destination | safeURL }}\"\n  {{- with .Title }}{{ printf \"title=\\\"%s\\\"\" . | safeHTMLAttr }}{{- end }}\n>\n  {{- .Text | safeHTML -}}\n</a>\n{{- /* Drop trailing newlines */ -}}\n"
  },
  {
    "path": "layouts/_default/baseof.html",
    "content": "<!DOCTYPE html>\n<html\n  lang=\"{{ .Site.Language.Lang }}\"\n  class=\"color-toggle-hidden\"\n  {{ if default false .Site.Params.geekdocDarkModeCode }}code-theme=\"dark\"{{ end }}\n>\n  <head>\n    {{ partial \"head/meta\" . }}\n    <title>\n      {{- if eq .Kind \"home\" -}}\n        {{ .Site.Title }}\n      {{- else -}}\n        {{ printf \"%s | %s\" (partial \"utils/title\" .) .Site.Title }}\n      {{- end -}}\n    </title>\n\n    {{ partial \"head/favicons\" . }}\n    {{ partial \"head/rel-me\" . }}\n    {{ partial \"head/microformats\" . }}\n    {{ partial \"head/others\" . }}\n    {{ partial \"head/custom\" . }}\n  </head>\n\n  <body itemscope itemtype=\"https://schema.org/WebPage\">\n    <div class=\"w-full flex justify-center\">\n      <a href=\"#main-content\" id=\"gdoc-to-main\" class=\"gdoc-markdown__link\">Skip to main content</a>\n    </div>\n\n    {{ partial \"svg-icon-symbols\" . }}\n\n\n    <div\n      class=\"wrapper {{ if default false .Site.Params.geekdocDarkModeDim }}dark-mode-dim{{ end }}\"\n    >\n      {{ $navEnabled := default true .Page.Params.geekdocNav }}\n      {{ partial \"site-header\" (dict \"Root\" . \"MenuEnabled\" $navEnabled) }}\n\n\n      <main class=\"container flex flex-even\">\n        {{ if $navEnabled }}\n          <aside class=\"gdoc-nav\">\n            {{ partial \"menu\" . }}\n          </aside>\n        {{ end }}\n\n\n        <div class=\"gdoc-page\">\n          {{ template \"main\" . }}\n\n\n          {{ $showPrevNext := (default true .Site.Params.geekdocNextPrev) }}\n          {{ if $showPrevNext }}\n          <div class=\"gdoc-page__footer flex flex-wrap justify-between\">\n            {{ if .Site.Params.geekdocMenuBundle }}\n              {{ partial \"menu-bundle-np\" . }}\n            {{ else }}\n              {{ partial \"menu-filetree-np\" . }}\n            {{ end }}\n          </div>\n          {{ end }}\n        </div>\n      </main>\n\n      {{ partial \"site-footer\" . }}\n    </div>\n\n    {{ partial \"foot\" . }}\n  </body>\n</html>\n"
  },
  {
    "path": "layouts/_default/list.html",
    "content": "{{ define \"main\" }}\n  {{ partial \"page-header\" . }}\n\n\n  <article\n    class=\"gdoc-markdown gdoc-markdown__align--{{ default \"left\" (.Page.Params.geekdocAlign | lower) }}\"\n    id=\"main-content\" tabindex=\"-1\"\n  >\n    <h1>{{ partial \"utils/title\" . }}</h1>\n    {{ partial \"utils/content\" . }}\n  </article>\n{{ end }}\n"
  },
  {
    "path": "layouts/_default/single.html",
    "content": "{{ define \"main\" }}\n  {{ partial \"page-header\" . }}\n\n\n  <article\n    class=\"gdoc-markdown gdoc-markdown__align--{{ default \"left\" (.Page.Params.geekdocAlign | lower) }}\"\n    id=\"main-content\" tabindex=\"-1\"\n  >\n    <h1>{{ partial \"utils/title\" . }}</h1>\n    {{ partial \"page-metadata\" . }}\n    {{ partial \"utils/content\" . }}\n  </article>\n{{ end }}\n"
  },
  {
    "path": "layouts/_default/taxonomy.html",
    "content": "{{ define \"main\" }}\n  <div id=\"main-content\" tabindex=\"-1\">\n  {{ range .Paginator.Pages }}\n    <article class=\"gdoc-post\">\n      <header class=\"gdoc-post__header\">\n        <h1 class=\"gdoc-post__title\">\n          <a href=\"{{ .RelPermalink }}\">{{ partial \"utils/title\" . }}</a>\n        </h1>\n      </header>\n\n      <section class=\"gdoc-markdown\">\n        {{ .Summary }}\n      </section>\n\n      <div class=\"gdoc-post__readmore\">\n        {{ if .Truncated }}\n          <a\n            class=\"flex-inline align-center fake-link\"\n            title=\"{{ i18n \"posts_read_more\" }}\"\n            href=\"{{ .RelPermalink }}\"\n          >\n            {{ i18n \"posts_read_more\" }}\n            <i class=\"gdoc-icon\">gdoc_arrow_right_alt</i>\n          </a>\n        {{ end }}\n      </div>\n\n      <footer class=\"gdoc-post__footer\">\n        <div class=\"flex flex-wrap align-center gdoc-post__meta\">\n          {{ partial \"posts/metadata.html\" . }}\n        </div>\n      </footer>\n    </article>\n  {{ end }}\n  </div>\n  {{ partial \"pagination.html\" . }}\n{{ end }}\n\n{{ define \"post-tag\" }}\n  <span class=\"gdoc-post__tag\">\n    <span class=\"gdoc-button\">\n      <a\n        class=\"gdoc-button__link\"\n        href=\"{{ .page.RelPermalink }}\"\n        title=\"{{ i18n \"posts_tagged_with\" .name }}\"\n      >\n        {{ .name }}\n      </a>\n    </span>\n  </span>\n{{ end }}\n"
  },
  {
    "path": "layouts/_default/terms.html",
    "content": "{{ define \"main\" }}\n  <div id=\"main-content\" tabindex=\"-1\">\n  {{ range .Paginator.Pages.ByTitle }}\n    <article class=\"gdoc-post\">\n      <header class=\"gdoc-post__header\">\n        <h1 class=\"gdoc-post__title\">\n          <a href=\"{{ .RelPermalink }}\">{{ partial \"utils/title\" . }}</a>\n        </h1>\n      </header>\n\n      <footer class=\"gdoc-post__meta flex align-center\">\n        <span class=\"flex align-center no-wrap\">\n          {{ $pageCount := len .Pages }}\n          <svg class=\"gdoc-icon gdoc_tag\"><use xlink:href=\"#gdoc_tag\"></use></svg>\n          <span class=\"gdoc-post__tag\">\n            {{ i18n \"posts_count\" $pageCount }}\n          </span>\n        </span>\n\n        <span class=\"flex align-center no-wrap\">\n          <svg class=\"gdoc-icon gdoc_star\"><use xlink:href=\"#gdoc_star\"></use></svg>\n          <span>\n            {{ $latest := index .Pages.ByDate 0 }}\n            {{ with $latest }}\n              <a href=\"{{ .RelPermalink }}\">{{ partial \"utils/title\" . }}</a>\n            {{ end }}\n          </span>\n        </span>\n      </footer>\n    </article>\n  {{ end }}\n  </div>\n  {{ partial \"pagination.html\" . }}\n{{ end }}\n"
  },
  {
    "path": "layouts/partials/foot.html",
    "content": ""
  },
  {
    "path": "layouts/partials/head/custom.html",
    "content": "<!--\nYou can add custom elements to the page header here.\n\nExample:\nEnsure to use the absolute path to custom files and place the source files in the `static` folder.\n\n<link rel=\"stylesheet\" type=\"text/css\" href=\"/custom.css\">\n<script type=\"text/javascript\" src=\"/custom.js\"></script>\n-->\n"
  },
  {
    "path": "layouts/partials/head/favicons.html",
    "content": "<link rel=\"icon\" type=\"image/svg+xml\" href=\"{{ \"favicon/favicon.svg\" | relURL }}\" />\n<link\n  rel=\"icon\"\n  type=\"image/png\"\n  sizes=\"32x32\"\n  href=\"{{ \"favicon/favicon-32x32.png\" | relURL }}\"\n/>\n<link\n  rel=\"icon\"\n  type=\"image/png\"\n  sizes=\"16x16\"\n  href=\"{{ \"favicon/favicon-16x16.png\" | relURL }}\"\n/>\n"
  },
  {
    "path": "layouts/partials/head/meta.html",
    "content": "<meta charset=\"UTF-8\" />\n<meta name=\"referrer\" content=\"no-referrer\" />\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n<meta name=\"color-scheme\" content=\"light dark\" />\n{{ hugo.Generator }}\n\n{{ $keywords := default .Site.Params.Keywords .Keywords }}\n\n{{- with partial \"utils/description\" . }}\n  <meta name=\"description\" content=\"{{ trim (. | plainify) \"\\n\" | safeHTML }}\" />\n{{- end }}\n{{- with $keywords }}\n  <meta name=\"keywords\" content=\"{{ delimit . \",\" }}\" />\n{{- end }}\n"
  },
  {
    "path": "layouts/partials/head/microformats.html",
    "content": "{{ partial \"microformats/opengraph.html\" . }}\n{{ partial \"microformats/twitter_cards.html\" . }}\n{{ partial \"microformats/schema\" . }}\n"
  },
  {
    "path": "layouts/partials/head/others.html",
    "content": "{{- if default true .Site.Params.geekdocDarkModeToggle }}\n  <script src=\"{{ index (index hugo.Data.assets \"colortheme.js\") \"src\" | relURL }}\"></script>\n{{- end }}\n<script src=\"{{ index (index hugo.Data.assets \"main.js\") \"src\" | relURL }}\"></script>\n\n<link\n  rel=\"preload\"\n  as=\"font\"\n  href=\"{{ \"fonts/Metropolis.woff2\" | relURL }}\"\n  type=\"font/woff2\"\n  crossorigin=\"anonymous\"\n/>\n<link\n  rel=\"preload\"\n  as=\"font\"\n  href=\"{{ \"fonts/LiberationSans.woff2\" | relURL }}\"\n  type=\"font/woff2\"\n  crossorigin=\"anonymous\"\n/>\n\n<link\n  rel=\"preload\"\n  href=\"{{ index (index hugo.Data.assets \"main.scss\") \"src\" | relURL }}\"\n  as=\"style\"\n/>\n<link\n  rel=\"stylesheet\"\n  href=\"{{ index (index hugo.Data.assets \"main.scss\") \"src\" | relURL }}\"\n  media=\"all\"\n/>\n\n<link\n  rel=\"preload\"\n  href=\"{{ index (index hugo.Data.assets \"mobile.scss\") \"src\" | relURL }}\"\n  as=\"style\"\n/>\n<link\n  rel=\"stylesheet\"\n  href=\"{{ index (index hugo.Data.assets \"mobile.scss\") \"src\" | relURL }}\"\n  media=\"screen and (max-width: 45rem)\"\n/>\n\n<link\n  rel=\"preload\"\n  href=\"{{ index (index hugo.Data.assets \"print.scss\") \"src\" | relURL }}\"\n  as=\"style\"\n/>\n<link\n  rel=\"stylesheet\"\n  href=\"{{ index (index hugo.Data.assets \"print.scss\") \"src\" | relURL }}\"\n  media=\"print\"\n/>\n\n<link\n  rel=\"preload\"\n  href=\"{{ index (index hugo.Data.assets \"custom.css\") \"src\" | relURL }}\"\n  as=\"style\"\n/>\n<link\n  rel=\"stylesheet\"\n  href=\"{{ index (index hugo.Data.assets \"custom.css\") \"src\" | relURL }}\"\n  media=\"all\"\n/>\n\n{{- with .OutputFormats.Get \"html\" }}\n  {{ printf `<link href=%q rel=%q type=%q />` .Permalink .Rel .MediaType.Type | safeHTML }}\n{{- end }}\n\n{{- if (default false $.Site.Params.geekdocOverwriteHTMLBase) }}\n  <base href=\"{{ .Site.Home.Permalink }}\" />\n{{- end }}\n\n{{ printf \"<!-- %s -->\" \"Made with Geekdoc theme https://github.com/thegeeklab/hugo-geekdoc\" | safeHTML }}\n"
  },
  {
    "path": "layouts/partials/head/rel-me.html",
    "content": "<!-- place to set your rel-me links https://microformats.org/wiki/rel-me -->\n"
  },
  {
    "path": "layouts/partials/language.html",
    "content": "{{ if hugo.IsMultilingual }}\n  <span class=\"gdoc-language\">\n    <ul class=\"gdoc-language__selector\" tabindex=\"0\" role=\"button\" aria-pressed=\"false\">\n      <li>\n        {{ range .Site.Languages }}\n          {{ if eq . $.Site.Language }}\n            <span class=\"flex align-center\">\n              <svg class=\"gdoc-icon gdoc_language\"><use xlink:href=\"#gdoc_language\"></use></svg>\n              <span>{{ .Lang | upper }}</span>\n            </span>\n          {{ end }}\n        {{ end }}\n\n\n        <ul class=\"gdoc-language__list\">\n          {{ if $.Translations }}\n            {{ range $.Translations }}\n              <li>\n                <a\n                  class=\"flex gdoc-language__entry\"\n                  title=\"{{ .Language.LanguageName }}\"\n                  href=\"{{ .RelPermalink }}\"\n                  hreflang=\"{{ .Lang }}\"\n                  lang=\"{{ .Lang }}\"\n                >\n                  {{ .Language.LanguageName }}\n                </a>\n              </li>\n            {{ end }}\n          {{ else }}\n            {{ range .Site.Languages -}}\n              {{ if ne $.Site.Language.Lang .Lang }}\n                <li>\n                  <a\n                    class=\"flex gdoc-language__entry\"\n                    title=\"{{ i18n \"language_switch_no_translation_prefix\" }} {{ .LanguageName }}\"\n                    href=\"{{ .Lang | relLangURL }}\"\n                    hreflang=\"{{ .Lang }}\"\n                    lang=\"{{ .Lang }}\"\n                  >\n                    {{ .LanguageName }}*\n                  </a>\n                </li>\n              {{ end -}}\n            {{ end -}}\n          {{ end }}\n        </ul>\n      </li>\n    </ul>\n  </span>\n{{ end }}\n"
  },
  {
    "path": "layouts/partials/menu-bundle-np.html",
    "content": "{{ $current := . }}\n{{ $site := .Site }}\n{{ $current.Scratch.Set \"prev\" false }}\n{{ $current.Scratch.Set \"getNext\" false }}\n\n{{ $current.Scratch.Set \"nextPage\" false }}\n{{ $current.Scratch.Set \"prevPage\" false }}\n\n{{ template \"menu-bundle-np\" dict \"sect\" hugo.Data.menu.main.main \"current\" $current \"site\" $site }}\n\n{{ define \"menu-bundle-np\" }}\n  {{ $current := .current }}\n  {{ $site := .site }}\n\n  {{ range sort (default (seq 0) .sect) \"weight\" }}\n    {{ $current.Scratch.Set \"current\" $current }}\n    {{ $current.Scratch.Set \"site\" $site }}\n\n    {{ $ref := default false .ref }}\n    {{ if $ref }}\n      {{ $site := $current.Scratch.Get \"site\" }}\n      {{ $this := $site.GetPage .ref }}\n      {{ $current := $current.Scratch.Get \"current\" }}\n\n      {{ if reflect.IsMap .name }}\n        {{ $current.Scratch.Set \"refName\" (index .name $site.Language.Lang) }}\n      {{ else }}\n        {{ $current.Scratch.Set \"refName\" .name }}\n      {{ end }}\n      {{ $name := $current.Scratch.Get \"refName\" }}\n\n      {{ if $current.Scratch.Get \"getNext\" }}\n        {{ $current.Scratch.Set \"nextPage\" (dict \"name\" $name \"this\" $this) }}\n        {{ $current.Scratch.Set \"getNext\" false }}\n      {{ end }}\n\n      {{ if eq $current $this }}\n        {{ $current.Scratch.Set \"prevPage\" ($current.Scratch.Get \"prev\") }}\n        {{ $current.Scratch.Set \"getNext\" true }}\n      {{ end }}\n\n      {{ $current.Scratch.Set \"prev\" (dict \"name\" $name \"this\" $this) }}\n    {{ end }}\n\n    {{ $sub := default false .sub }}\n    {{ if $sub }}\n      {{ template \"menu-bundle-np\" dict \"sect\" $sub \"current\" ($current.Scratch.Get \"current\") \"site\" ($current.Scratch.Get \"site\") }}\n    {{ end }}\n  {{ end }}\n{{ end }}\n\n<span class=\"gdoc-page__nav\">\n  {{ with ($current.Scratch.Get \"prevPage\") }}\n    <a\n      class=\"gdoc-page__nav--prev flex align-center\"\n      href=\"{{ .this.RelPermalink }}\"\n      title=\"{{ .name }}\"\n    >\n      <i class=\"gdoc-icon\">gdoc_arrow_left_alt</i>\n      {{ .name }}\n    </a>\n  {{ end }}\n</span>\n<span class=\"gdoc-page__nav\">\n  {{ with ($current.Scratch.Get \"nextPage\") }}\n    <a\n      class=\"gdoc-page__nav--next flex align-center\"\n      href=\"{{ .this.RelPermalink }}\"\n      title=\"{{ .name }}\"\n    >\n      {{ .name }}\n      <i class=\"gdoc-icon\">gdoc_arrow_right_alt</i>\n    </a>\n  {{ end }}\n</span>\n"
  },
  {
    "path": "layouts/partials/menu-bundle.html",
    "content": "{{ $current := .current }}\n{{ template \"menu-file\" dict \"sect\" .source \"current\" $current \"site\" $current.Site }}\n\n\n<!-- template -->\n{{ define \"menu-file\" }}\n  {{ $current := .current }}\n  {{ $site := .site }}\n\n\n  <ul class=\"gdoc-nav__list\">\n    {{ range sort (default (seq 0) .sect) \"weight\" }}\n      {{ $name := .name }}\n      {{ if reflect.IsMap .name }}\n        {{ $name = (index .name $site.Language.Lang) }}\n      {{ end }}\n\n\n      <li>\n        {{ $ref := default false .ref }}\n        {{ if $ref }}\n          {{ $this := $site.GetPage .ref }}\n          {{ $icon := default false .icon }}\n          {{ $numberOfPages := (add (len $this.Pages) (len $this.Sections)) }}\n          {{ $isCurrent := eq $current $this }}\n          {{ $isAncestor := $this.IsAncestor $current }}\n          {{ $id := substr (sha1 $this.Permalink) 0 8 }}\n          {{ $doCollapse := and (isset . \"sub\") (or $this.Params.geekdocCollapseSection (default false .Site.Params.geekdocCollapseAllSections)) }}\n\n          {{ $anchor := default \"\" .anchor }}\n          {{ if $anchor }}\n            {{ $anchor = printf \"#%s\" $anchor }}\n          {{ end }}\n\n          {{ if or .external ($this.RelPermalink) }}\n            <input\n              type=\"checkbox\"\n              {{ if $doCollapse }}\n                class=\"gdoc-nav__toggle\" id=\"{{ printf \"navtree-%s\" $id }}\"\n                {{ if or $isCurrent $isAncestor }}checked{{ end }}\n              {{ else }}\n                class=\"hidden\"\n              {{ end }}\n            />\n            <label\n              {{ if $doCollapse }}\n                for=\"{{ printf \"navtree-%s\" $id }}\" class=\"flex justify-between align-center\"\n              {{ end }}\n            >\n              <span class=\"flex\">\n                {{ if $icon }}\n                  <svg class=\"gdoc-icon {{ .icon }}\"><use xlink:href=\"#{{ .icon }}\"></use></svg>\n                {{ end }}\n                <a\n                  href=\"{{ if .external -}}\n                    {{ .ref }}\n                  {{- else -}}\n                    {{ path.Join $this.RelPermalink $anchor }}\n                  {{- end }}\"\n                  class=\"gdoc-nav__entry{{- if not .external }}\n                    {{- if $isCurrent }}{{ printf \" is-active\" }}{{ end }}\n                  {{- end }}\"\n                  {{ if .rel -}}\n                    rel=\"{{ .rel }}\"\n                  {{- end }}\n                >\n                  {{ $name }}\n                </a>\n              </span>\n              {{ if $doCollapse }}\n                <svg class=\"gdoc-icon toggle gdoc_keyboard_arrow_left\">\n                  <use xlink:href=\"#gdoc_keyboard_arrow_left\"></use>\n                </svg>\n                <svg class=\"gdoc-icon toggle gdoc_keyboard_arrow_down\">\n                  <use xlink:href=\"#gdoc_keyboard_arrow_down\"></use>\n                </svg>\n              {{ end }}\n            </label>\n          {{ end }}\n        {{ else }}\n          <span class=\"flex\">{{ $name }}</span>\n        {{ end }}\n\n        {{ with .sub }}\n          {{ template \"menu-file\" dict \"sect\" . \"current\" $current \"site\" $site }}\n        {{ end }}\n      </li>\n    {{ end }}\n  </ul>\n{{ end }}\n"
  },
  {
    "path": "layouts/partials/menu-extra.html",
    "content": "{{ $current := .current }}\n{{ template \"menu-extra\" dict \"sect\" .source \"current\" $current \"site\" $current.Site \"target\" .target }}\n\n\n<!-- template -->\n{{ define \"menu-extra\" }}\n  {{ $current := .current }}\n  {{ $site := .site }}\n  {{ $target := .target }}\n  {{ $sect := .sect }}\n\n  {{ range sort (default (seq 0) $sect) \"weight\" }}\n    {{ if isset . \"ref\" }}\n      {{ $this := $site.GetPage .ref }}\n      {{ $isCurrent := eq $current $this }}\n      {{ $icon := default false .icon }}\n\n      {{ $name := .name }}\n      {{ if reflect.IsMap .name }}\n        {{ $name = (index .name $site.Language.Lang) }}\n      {{ end }}\n\n      {{ if not .icon }}\n        {{ errorf \"Missing 'icon' attribute in data file for '%s' menu item '%s'\" $target $name }}\n      {{ end }}\n\n      {{ if eq $target \"header\" }}\n        <span>\n          <a\n            href=\"{{ if .external -}}\n              {{ .ref }}\n            {{- else -}}\n              {{ relref $current .ref }}\n            {{- end }}\"\n            class=\"gdoc-header__link\"\n            {{ if .rel -}}\n              rel=\"{{ .rel }}\"\n            {{- end }}\n          >\n            <svg class=\"gdoc-icon {{ .icon }}\">\n              <title>{{ $name }}</title>\n              <use xlink:href=\"#{{ .icon }}\"></use>\n            </svg>\n          </a>\n        </span>\n      {{ end }}\n    {{ end }}\n  {{ end }}\n{{ end }}\n"
  },
  {
    "path": "layouts/partials/menu-filetree-np.html",
    "content": "{{ $current := . }}\n{{ $site := .Site }}\n{{ $current.Scratch.Set \"prev\" false }}\n{{ $current.Scratch.Set \"getNext\" false }}\n\n{{ $current.Scratch.Set \"nextPage\" false }}\n{{ $current.Scratch.Set \"prevPage\" false }}\n\n{{ template \"menu-filetree-np\" dict \"sect\" .Site.Home.Sections \"current\" $current \"site\" $site }}\n\n{{ define \"menu-filetree-np\" }}\n  {{ $current := .current }}\n  {{ $site := .site }}\n\n  {{ $sortBy := (default \"title\" .current.Site.Params.geekdocFileTreeSortBy | lower) }}\n  {{ range .sect.GroupBy \"Weight\" }}\n    {{ $rangeBy := .ByTitle }}\n\n    {{ if eq $sortBy \"title\" }}\n      {{ $rangeBy = .ByTitle }}\n    {{ else if eq $sortBy \"linktitle\" }}\n      {{ $rangeBy = .ByLinkTitle }}\n    {{ else if eq $sortBy \"date\" }}\n      {{ $rangeBy = .ByDate }}\n    {{ else if eq $sortBy \"publishdate\" }}\n      {{ $rangeBy = .ByPublishDate }}\n    {{ else if eq $sortBy \"expirydate\" }}\n      {{ $rangeBy = .ByExpiryDate }}\n    {{ else if eq $sortBy \"lastmod\" }}\n      {{ $rangeBy = .ByLastmod }}\n    {{ else if eq $sortBy \"title_reverse\" }}\n      {{ $rangeBy = .ByTitle.Reverse }}\n    {{ else if eq $sortBy \"linktitle_reverse\" }}\n      {{ $rangeBy = .ByLinkTitle.Reverse }}\n    {{ else if eq $sortBy \"date_reverse\" }}\n      {{ $rangeBy = .ByDate.Reverse }}\n    {{ else if eq $sortBy \"publishdate_reverse\" }}\n      {{ $rangeBy = .ByPublishDate.Reverse }}\n    {{ else if eq $sortBy \"expirydate_reverse\" }}\n      {{ $rangeBy = .ByExpiryDate.Reverse }}\n    {{ else if eq $sortBy \"lastmod_reverse\" }}\n      {{ $rangeBy = .ByLastmod.Reverse }}\n    {{ end }}\n\n    {{ range $rangeBy }}\n      {{ $current.Scratch.Set \"current\" $current }}\n      {{ $current.Scratch.Set \"site\" $site }}\n\n      {{ if not .Params.geekdocHidden }}\n        {{ $numberOfPages := (add (len .Pages) (len .Sections)) }}\n        {{ $site := $current.Scratch.Get \"site\" }}\n        {{ $this := . }}\n        {{ $current := $current.Scratch.Get \"current\" }}\n\n        {{ $current.Scratch.Set \"refName\" (partial \"utils/title\" .) }}\n        {{ $name := $current.Scratch.Get \"refName\" }}\n\n        {{ if $current.Scratch.Get \"getNext\" }}\n          {{ if or $this.Content $this.Params.geekdocFlatSection }}\n            {{ $current.Scratch.Set \"nextPage\" (dict \"name\" $name \"this\" $this) }}\n            {{ $current.Scratch.Set \"getNext\" false }}\n          {{ end }}\n        {{ end }}\n\n        {{ if eq $current.RelPermalink $this.RelPermalink }}\n          {{ $current.Scratch.Set \"prevPage\" ($current.Scratch.Get \"prev\") }}\n          {{ $current.Scratch.Set \"getNext\" true }}\n        {{ end }}\n\n        {{ if or $this.Content $this.Params.geekdocFlatSection }}\n          {{ $current.Scratch.Set \"prev\" (dict \"name\" $name \"this\" $this) }}\n        {{ end }}\n\n        {{ $sub := and (ne $numberOfPages 0) (not .Params.geekdocFlatSection) }}\n        {{ if $sub }}\n          {{ template \"menu-filetree-np\" dict \"sect\" .Pages \"current\" $current }}\n        {{ end }}\n      {{ end }}\n    {{ end }}\n\n  {{ end }}\n{{ end }}\n\n<span class=\"gdoc-page__nav\">\n  {{ with ($current.Scratch.Get \"prevPage\") }}\n    <a\n      class=\"gdoc-page__nav--prev flex align-center\"\n      href=\"{{ .this.RelPermalink }}\"\n      title=\"{{ .name }}\"\n    >\n      <i class=\"gdoc-icon\">gdoc_arrow_left_alt</i>\n      {{ .name }}\n    </a>\n  {{ end }}\n</span>\n<span class=\"gdoc-page__nav\">\n  {{ with ($current.Scratch.Get \"nextPage\") }}\n    <a\n      class=\"gdoc-page__nav--next flex align-center\"\n      href=\"{{ .this.RelPermalink }}\"\n      title=\"{{ .name }}\"\n    >\n      {{ .name }}\n      <i class=\"gdoc-icon\">gdoc_arrow_right_alt</i>\n    </a>\n  {{ end }}\n</span>\n"
  },
  {
    "path": "layouts/partials/menu-filetree.html",
    "content": "{{ $current := . }}\n{{ template \"tree-nav\" dict \"sect\" .Site.Home.Sections \"current\" $current }}\n\n\n<!-- templates -->\n{{ define \"tree-nav\" }}\n  {{ $current := .current }}\n\n\n  <ul class=\"gdoc-nav__list\">\n    {{ $sortBy := (default \"title\" .current.Site.Params.geekdocFileTreeSortBy | lower) }}\n    {{ range .sect.GroupBy \"Weight\" }}\n      {{ $rangeBy := .ByTitle }}\n\n      {{ if eq $sortBy \"title\" }}\n        {{ $rangeBy = .ByTitle }}\n      {{ else if eq $sortBy \"linktitle\" }}\n        {{ $rangeBy = .ByLinkTitle }}\n      {{ else if eq $sortBy \"date\" }}\n        {{ $rangeBy = .ByDate }}\n      {{ else if eq $sortBy \"publishdate\" }}\n        {{ $rangeBy = .ByPublishDate }}\n      {{ else if eq $sortBy \"expirydate\" }}\n        {{ $rangeBy = .ByExpiryDate }}\n      {{ else if eq $sortBy \"lastmod\" }}\n        {{ $rangeBy = .ByLastmod }}\n      {{ else if eq $sortBy \"title_reverse\" }}\n        {{ $rangeBy = .ByTitle.Reverse }}\n      {{ else if eq $sortBy \"linktitle_reverse\" }}\n        {{ $rangeBy = .ByLinkTitle.Reverse }}\n      {{ else if eq $sortBy \"date_reverse\" }}\n        {{ $rangeBy = .ByDate.Reverse }}\n      {{ else if eq $sortBy \"publishdate_reverse\" }}\n        {{ $rangeBy = .ByPublishDate.Reverse }}\n      {{ else if eq $sortBy \"expirydate_reverse\" }}\n        {{ $rangeBy = .ByExpiryDate.Reverse }}\n      {{ else if eq $sortBy \"lastmod_reverse\" }}\n        {{ $rangeBy = .ByLastmod.Reverse }}\n      {{ end }}\n\n      {{ range $rangeBy }}\n        {{ if not .Params.geekdocHidden }}\n          {{ $numberOfPages := (add (len .Pages) (len .Sections)) }}\n          {{ $isParent := and (ne $numberOfPages 0) (not .Params.geekdocFlatSection) }}\n          {{ $isCurrent := eq $current . }}\n          {{ $isAncestor := .IsAncestor $current }}\n          {{ $id := substr (sha1 .Permalink) 0 8 }}\n          {{ $doCollapse := and $isParent (or .Params.geekdocCollapseSection (default false .Site.Params.geekdocCollapseAllSections)) }}\n\n\n          <li>\n            <input\n              type=\"checkbox\"\n              {{ if $doCollapse }}\n                class=\"gdoc-nav__toggle\" id=\"{{ printf \"navtree-%s\" $id }}\"\n                {{ if or $isCurrent $isAncestor }}checked{{ end }}\n              {{ else }}\n                class=\"hidden\"\n              {{ end }}\n            />\n            <label\n              {{ if $doCollapse }}\n                for=\"{{ printf \"navtree-%s\" $id }}\" class=\"flex justify-between align-center\"\n              {{ end }}\n            >\n              {{ if or .Content .Params.geekdocFlatSection }}\n                <span class=\"flex\">\n                  <a\n                    href=\"{{ .RelPermalink }}\"\n                    class=\"gdoc-nav__entry{{- if eq $current . }}\n                      {{- printf \" is-active\" }}\n                    {{- end }}\"\n                  >\n                    {{ partial \"utils/title\" . }}\n                  </a>\n                </span>\n              {{ else }}\n                <span class=\"flex\">{{ partial \"utils/title\" . }}</span>\n              {{ end }}\n              {{ if $doCollapse }}\n                <svg class=\"gdoc-icon toggle gdoc_keyboard_arrow_left\">\n                  <use xlink:href=\"#gdoc_keyboard_arrow_left\"></use>\n                </svg>\n                <svg class=\"gdoc-icon toggle gdoc_keyboard_arrow_down\">\n                  <use xlink:href=\"#gdoc_keyboard_arrow_down\"></use>\n                </svg>\n              {{ end }}\n            </label>\n\n            {{ if $isParent }}\n              {{ template \"tree-nav\" dict \"sect\" .Pages \"current\" $current }}\n            {{ end }}\n          </li>\n        {{ end }}\n      {{ end }}\n    {{ end }}\n  </ul>\n{{ end }}\n"
  },
  {
    "path": "layouts/partials/menu.html",
    "content": "<nav>\n  {{ partial \"search\" . }}\n\n\n  <section class=\"gdoc-nav--main\">\n    <h2>{{ i18n \"nav_navigation\" }}</h2>\n    {{ if .Site.Params.geekdocMenuBundle }}\n      {{ partial \"menu-bundle\" (dict \"current\" . \"source\" hugo.Data.menu.main.main) }}\n    {{ else }}\n      {{ partial \"menu-filetree\" . }}\n    {{ end }}\n  </section>\n\n  {{ if and (in (slice \"posts\" \"tags\") .Section) (default false .Site.Params.geekdocTagsToMenu) }}\n    <section class=\"gdoc-nav--tags\">\n      <h2>{{ i18n \"nav_tags\" }}</h2>\n      <ul class=\"gdoc-nav__list\">\n        {{ $currentPage := .RelPermalink }}\n        {{ range $name, $taxonomy := .Site.Taxonomies.tags }}\n          {{ with $.Site.GetPage (printf \"/tags/%s\" $name) }}\n            <li>\n              <a\n                class=\"gdoc-nav__entry{{- if eq $currentPage .RelPermalink }}\n                  {{- printf \" is-active\" }}\n                {{- end }}\"\n                href=\"{{ .RelPermalink }}\"\n              >\n                {{ partial \"utils/title\" . }}\n              </a>\n            </li>\n          {{ end }}\n        {{ end }}\n      </ul>\n    </section>\n  {{ end }}\n\n\n  <section class=\"gdoc-nav--more\">\n    {{ if hugo.Data.menu.more.more }}\n      <h2>{{ i18n \"nav_more\" }}</h2>\n      {{ partial \"menu-bundle\" (dict \"current\" . \"source\" hugo.Data.menu.more.more) }}\n    {{ end }}\n  </section>\n</nav>\n"
  },
  {
    "path": "layouts/partials/microformats/opengraph.html",
    "content": "{{ $isPage := or (and (ne .Type \"posts\") (in \"section page\" .Kind )) (and (eq .Type \"posts\") (eq .Kind \"page\")) }}\n\n{{- if ne .Kind \"home\" }}\n  <meta\n    property=\"og:title\"\n    {{ partial \"utils/title\" . | printf \"content=%q\" | safeHTMLAttr }}\n  />\n{{- end }}\n{{- with .Site.Title }}\n  <meta property=\"og:site_name\" {{ . | printf \"content=%q\" | safeHTMLAttr }} />\n{{- end }}\n{{- with partial \"utils/featured\" . }}\n  <meta property=\"og:image\" content=\"{{ . }}\" />\n{{- end }}\n{{- with partial \"utils/description\" . }}\n  <meta property=\"og:description\" content=\"{{ . | plainify | htmlUnescape | chomp }}\" />\n{{- end }}\n<meta property=\"og:type\" content=\"{{ if $isPage }}article{{ else }}website{{ end }}\" />\n<meta property=\"og:url\" content=\"{{ .Permalink }}\" />\n{{- with .Params.audio }}\n  <meta property=\"og:audio\" content=\"{{ . }}\" />\n{{- end }}\n{{- with .Params.locale }}\n  <meta property=\"og:locale\" content=\"{{ . }}\" />\n{{- end }}\n{{- with .Params.videos }}\n  {{- range . }}\n    <meta property=\"og:video\" content=\"{{ . | absURL }}\" />\n  {{- end }}\n{{- end }}\n\n{{- /* If it is part of a series, link to related articles */}}\n{{- if .Site.Taxonomies.series }}\n  {{- $permalink := .Permalink -}}\n  {{- $siteSeries := .Site.Taxonomies.series -}}\n  {{- with .Params.series }}\n    {{- range $name := . }}\n      {{- $series := index $siteSeries ($name | urlize) }}\n      {{- range $page := first 6 $series.Pages }}\n        {{- if ne $page.Permalink $permalink }}\n          <meta property=\"og:see_also\" content=\"{{ $page.Permalink }}\" />\n        {{- end }}\n      {{- end }}\n    {{- end }}\n  {{- end }}\n{{- end }}\n\n{{ if $isPage -}}\n  {{- $iso8601 := \"2006-01-02T15:04:05-07:00\" -}}\n  <meta property=\"article:section\" content=\"{{ .Section | humanize | title }}\" />\n  {{- with .PublishDate }}\n    <meta\n      property=\"article:published_time\"\n      {{ .Format $iso8601 | printf \"content=%q\" | safeHTMLAttr }}\n    />\n  {{- end }}\n  {{- with .Lastmod }}\n    <meta\n      property=\"article:modified_time\"\n      {{ .Format $iso8601 | printf \"content=%q\" | safeHTMLAttr }}\n    />\n  {{- end }}\n{{- end }}\n\n{{- /* Facebook Page Admin ID for Domain Insights */}}\n{{- with .Site.Params.facebook_admin }}\n  <meta property=\"fb:admins\" content=\"{{ . }}\" />\n{{- end }}\n"
  },
  {
    "path": "layouts/partials/microformats/schema.html",
    "content": "{{ $isPage := or (and (ne .Type \"posts\") (in \"section page\" .Kind )) (and (eq .Type \"posts\") (eq .Kind \"page\")) }}\n{{- if eq .Kind \"home\" }}\n  <script type=\"application/ld+json\">\n  {\n      \"@context\": \"http://schema.org\",\n      \"@type\": \"WebSite\",\n      \"name\": {{ .Site.Title }},\n      \"url\": {{ .Site.Home.Permalink }},\n      {{- with partial \"utils/description\" . }}\n      \"description\": \"{{ . | plainify | htmlUnescape | chomp }}\",\n      {{- end }}\n      {{- with partial \"utils/featured\" . }}\n      \"thumbnailUrl\": {{ . }},\n      {{- end }}\n      {{- with .Site.Params.geekdocContentLicense }}\n      \"license\": \"{{ .name }}\",\n      {{- end }}\n      \"inLanguage\": {{ .Lang }}\n  }\n  </script>\n{{- else if $isPage }}\n  <script type=\"application/ld+json\">\n  {\n      \"@context\": \"http://schema.org\",\n      \"@type\": \"TechArticle\",\n      \"articleSection\": \"{{ .Section | humanize | title }}\",\n      \"name\": {{ partial \"utils/title\" . }},\n      \"url\": {{ .Permalink }},\n      \"headline\": {{ partial \"utils/title\" . }},\n      {{- with .Params.lead }}\n      \"alternativeHeadline\": {{ . }},\n      {{- end }}\n      {{- with partial \"utils/description\" . }}\n      \"description\": \"{{ . | plainify | htmlUnescape | chomp }}\",\n      {{- end }}\n      {{- with partial \"utils/featured\" . }}\n      \"thumbnailUrl\": {{ . }},\n      {{- end }}\n      \"wordCount\": \"{{ .WordCount }}\",\n      {{- with .Site.Params.geekdocContentLicense }}\n      \"license\": \"{{ .name }}\",\n      {{- end }}\n      \"inLanguage\": {{ .Lang }},\n      \"isFamilyFriendly\": \"true\",\n      \"mainEntityOfPage\": {\n          \"@type\": \"WebPage\",\n          \"@id\": {{ .Permalink }}\n      },\n      {{- with $tags := .Params.tags }}\n      \"keywords\": [{{ range $i, $tag := $tags }}{{ if $i }}, {{ end }}\"{{ $tag }}\"{{ end }}],\n      {{- end }}\n      \"copyrightHolder\": \"{{ .Site.Title }}\",\n      \"copyrightYear\": \"{{ .Date.Format \"2006\" }}\",\n      \"dateCreated\": \"{{ .Date.Format \"2006-01-02T15:04:05.00Z\" | safeJS }}\",\n      \"datePublished\": \"{{ .PublishDate.Format \"2006-01-02T15:04:05.00Z\" | safeJS }}\",\n      \"dateModified\": \"{{ .Lastmod.Format \"2006-01-02T15:04:05.00Z\" | safeJS }}\",\n      \"publisher\":{\n          \"@type\":\"Organization\",\n          \"name\": {{ .Site.Title }},\n          \"url\": {{ .Site.Home.Permalink }},\n          \"logo\": {\n              \"@type\": \"ImageObject\",\n              \"url\": {{ (default \"brand.svg\" .Site.Params.geekdocLogo) | absURL }},\n              \"width\":\"32\",\n              \"height\":\"32\"\n          }\n      }\n  }\n  </script>\n{{- end }}\n"
  },
  {
    "path": "layouts/partials/microformats/twitter_cards.html",
    "content": "{{- with partial \"utils/featured\" . }}\n  <meta name=\"twitter:card\" content=\"summary_large_image\" />\n{{- else }}\n  <meta name=\"twitter:card\" content=\"summary\" />\n{{- end }}\n<meta name=\"twitter:title\" {{ partial \"utils/title\" . | printf \"content=%q\" | safeHTMLAttr }} />\n{{- with partial \"utils/featured\" . }}\n  <meta property=\"twitter:image\" content=\"{{ . }}\" />\n{{- end }}\n{{- with partial \"utils/description\" . }}\n  <meta name=\"twitter:description\" content=\"{{ . | plainify | htmlUnescape | chomp }}\" />\n{{- end }}\n{{- with .Site.Params.twitter -}}\n  <meta name=\"twitter:site\" content=\"@{{ . }}\" />\n{{- end }}\n"
  },
  {
    "path": "layouts/partials/page-header.html",
    "content": "{{ $geekdocRepo := default (default false .Site.Params.geekdocRepo) .Page.Params.geekdocRepo }}\n{{ $geekdocEditPath := default (default false .Site.Params.geekdocEditPath) .Page.Params.geekdocEditPath }}\n{{ if .File }}\n  {{ $.Scratch.Set \"geekdocFilePath\" (default (strings.TrimPrefix hugo.WorkingDir .File.Filename) .Page.Params.geekdocFilePath) }}\n{{ else }}\n  {{ $.Scratch.Set \"geekdocFilePath\" false }}\n{{ end }}\n\n{{ define \"breadcrumb\" }}\n  {{ $parent := .page.Parent }}\n  {{ if $parent }}\n    {{ $name := (partial \"utils/title\" $parent) }}\n    {{ $position := (sub .position 1) }}\n    {{ $value := (printf \"<li itemprop='itemListElement' itemscope itemtype='https://schema.org/ListItem'><a itemscope itemtype='https://schema.org/WebPage' itemprop='item' itemid='%s' href='%s'><span itemprop='name'>%s</span></a><meta itemprop='position' content='%d' /></li><li> / </li>%s\" $parent.RelPermalink $parent.RelPermalink $name $position .value) }}\n    {{ template \"breadcrumb\" dict \"page\" $parent \"value\" $value \"position\" $position }}\n  {{ else }}\n    {{ .value | safeHTML }}\n  {{ end }}\n{{ end }}\n\n{{ $showBreadcrumb := (and (default true .Page.Params.geekdocBreadcrumb) (default true .Site.Params.geekdocBreadcrumb)) }}\n{{ $showEdit := (and ($.Scratch.Get \"geekdocFilePath\") $geekdocRepo $geekdocEditPath) }}\n<div\n  class=\"gdoc-page__header flex flex-wrap\n  {{ if $showBreadcrumb }}\n    justify-between\n  {{ else }}\n    justify-end\n  {{ end }}\n  {{ if not $showEdit }}hidden-mobile{{ end }}\n  {{ if (and (not $showBreadcrumb) (not $showEdit)) }}hidden{{ end }}\"\n  itemprop=\"breadcrumb\"\n>\n  {{ if $showBreadcrumb }}\n    <div>\n      <svg class=\"gdoc-icon gdoc_path hidden-mobile\"><use xlink:href=\"#gdoc_path\"></use></svg>\n      <ol class=\"breadcrumb\" itemscope itemtype=\"https://schema.org/BreadcrumbList\">\n        {{ $position := sub (len (split .RelPermalink \"/\")) 1 }}\n        {{ $name := (partial \"utils/title\" .) }}\n        {{ $value := (printf \"<li itemprop='itemListElement' itemscope itemtype='https://schema.org/ListItem'><span itemprop='name'>%s</span><meta itemprop='position' content='%d' /></li>\" $name $position ) }}\n        {{ template \"breadcrumb\" dict \"page\" . \"value\" $value \"position\" $position }}\n      </ol>\n    </div>\n  {{ end }}\n  {{ if $showEdit }}\n    <div>\n      <span class=\"editpage\">\n        <svg class=\"gdoc-icon gdoc_code\"><use xlink:href=\"#gdoc_code\"></use></svg>\n        <a\n          href=\"{{ $geekdocRepo }}/{{ path.Join $geekdocEditPath ($.Scratch.Get \"geekdocFilePath\") }}\"\n          rel=\"edit\"\n        >\n          {{ i18n \"edit_page\" }}\n        </a>\n      </span>\n    </div>\n  {{ end }}\n</div>\n"
  },
  {
    "path": "layouts/partials/page-metadata.html",
    "content": "{{- $showPageLastmod := (or (default false .Page.Params.geekdocPageLastmod) (default false .Site.Params.geekdocPageLastmod)) -}}\n\n{{- if $showPageLastmod -}}\n<span class=\"flex align-center no-wrap\">\n    <svg class=\"gdoc-icon gdoc_date\"><use xlink:href=\"#gdoc_date\"></use></svg>\n    <time datetime=\"{{ .Lastmod.Format \"2006-01-02T15:04:05Z07:00\" | safeHTML }}\">\n        {{ if .Lastmod.After (.Date.AddDate 0 0 1) }}\n        {{ i18n \"posts_update_prefix\" }}\n        {{ end }}\n        {{ .Lastmod.Format \"Jan 2, 2006\" }}\n    </time>\n</span>\n{{- end -}}\n"
  },
  {
    "path": "layouts/partials/pagination.html",
    "content": "{{ $page := $.Paginator }}\n\n\n<nav class=\"gdoc-paging flex flex-even align-center\" role=\"navigation\">\n  <div class=\"gdoc-paging__item gdoc-paging__item--prev\">\n    {{ if $page.HasPrev }}\n      <a class=\"flex-inline align-center fake-link no-wrap\" href=\"{{ $page.Prev.URL }}\">\n        <i class=\"gdoc-icon\">gdoc_keyboard_arrow_left</i>\n        {{ i18n \"pagination_page_prev\" | upper }}\n      </a>\n    {{ end }}\n  </div>\n  <div class=\"gdoc-paging__state\">{{ i18n \"pagination_page_state\" $page }}</div>\n  <div class=\"gdoc-paging__item gdoc-paging__item--next\">\n    {{ if $page.HasNext }}\n      <a class=\"flex-inline align-center fake-link no-wrap\" href=\"{{ $page.Next.URL }}\">\n        {{ i18n \"pagination_page_next\" | upper }}\n        <i class=\"gdoc-icon\">gdoc_keyboard_arrow_right</i>\n      </a>\n    {{ end }}\n  </div>\n</nav>\n"
  },
  {
    "path": "layouts/partials/posts/metadata.html",
    "content": "<span class=\"flex align-center no-wrap\">\n  <svg class=\"gdoc-icon gdoc_date\"><use xlink:href=\"#gdoc_date\"></use></svg>\n  <span class=\"gdoc-post__tag\">\n    <time datetime=\"{{ .Lastmod.Format \"2006-01-02T15:04:05Z07:00\" | safeHTML }}\">\n      {{ if .Lastmod.After (.Date.AddDate 0 0 1) }}\n        {{ i18n \"posts_update_prefix\" }}\n      {{ end }}\n      {{ .Lastmod.Format \"Jan 2, 2006\" }}\n    </time>\n  </span>\n</span>\n\n<span class=\"flex align-center no-wrap\">\n  <svg class=\"gdoc-icon gdoc_timer\"><use xlink:href=\"#gdoc_timer\"></use></svg>\n  <span class=\"gdoc-post__tag\">{{ i18n \"posts_read_time\" .ReadingTime }}</span>\n</span>\n\n{{ $tc := 0 }}\n{{ with .Params.tags }}\n  {{ range sort . }}\n    {{ $name := . }}\n    {{ with $.Site.GetPage (printf \"/tags/%s\" $name | urlize) }}\n      {{ if eq $tc 0 }}\n        <span class=\"flex align-center no-wrap\">\n          <svg class=\"gdoc-icon gdoc_bookmark\"><use xlink:href=\"#gdoc_bookmark\"></use></svg>\n          {{ template \"post-tag\" dict \"name\" $name \"page\" . }}\n        </span>\n      {{ else }}\n        <span class=\"flex align-center\">\n          {{ template \"post-tag\" dict \"name\" $name \"page\" . }}\n        </span>\n      {{ end }}\n    {{ end }}\n    {{ $tc = (add $tc 1) }}\n  {{ end }}\n{{ end }}\n\n{{ define \"post-tag\" }}\n  <span class=\"gdoc-post__tag gdoc-button gdoc-button--regular\">\n    <a\n      class=\"gdoc-button__link\"\n      href=\"{{ .page.RelPermalink }}\"\n      title=\"{{ i18n \"posts_tagged_with\" .name }}\"\n    >\n      {{ .name }}\n    </a>\n  </span>\n{{ end }}\n"
  },
  {
    "path": "layouts/partials/search.html",
    "content": "{{ if default true .Site.Params.geekdocSearch }}\n  <script defer src=\"{{ index (index hugo.Data.assets \"search.js\") \"src\" | relURL }}\"></script>\n  {{- $searchConfigFile := printf \"search/%s.config.json\" .Language.Lang -}}\n  {{- $searchConfig := resources.Get \"search/config.json\" | resources.ExecuteAsTemplate $searchConfigFile . | resources.Minify -}}\n  {{- $searchConfig.Publish -}}\n\n  <div class=\"gdoc-search flex align-center\">\n    <svg class=\"gdoc-icon gdoc_search\"><use xlink:href=\"#gdoc_search\"></use></svg>\n    <input\n      type=\"text\"\n      id=\"gdoc-search-input\"\n      class=\"gdoc-search__input\"\n      placeholder=\"{{ i18n \"form_placeholder_search\" }}...\"\n      aria-label=\"{{ i18n \"form_placeholder_search\" }}\"\n      maxlength=\"64\"\n      data-site-base-url=\"{{ \"\" | absURL }}\"\n      data-site-lang=\"{{ .Site.Language.Lang }}\"\n    />\n    <ul id=\"gdoc-search-results\" class=\"gdoc-search__list\"></ul>\n  </div>\n{{ end }}\n"
  },
  {
    "path": "layouts/partials/site-footer.html",
    "content": "<footer class=\"gdoc-footer\">\n  <nav class=\"container flex\">\n    <div>\n      <section class=\"flex flex-wrap align-center\">\n        <span class=\"gdoc-footer__item gdoc-footer__item--row\">\n          {{ i18n \"footer_build_with\" | safeHTML }}\n        </span>\n        {{ with .Site.Params.geekdocLegalNotice }}\n          <span class=\"gdoc-footer__item gdoc-footer__item--row\">\n            <a href=\"{{ . | relURL }}\" class=\"gdoc-footer__link\">\n              {{ i18n \"footer_legal_notice\" }}\n            </a>\n          </span>\n        {{ end }}\n        {{ with .Site.Params.geekdocPrivacyPolicy }}\n          <span class=\"gdoc-footer__item gdoc-footer__item--row\">\n            <a href=\"{{ . | relURL }}\" class=\"gdoc-footer__link\">\n              {{ i18n \"footer_privacy_policy\" }}\n            </a>\n          </span>\n        {{ end }}\n      </section>\n      {{ with .Site.Params.geekdocContentLicense }}\n        <section class=\"flex flex-wrap align-center\">\n          <span class=\"gdoc-footer__item\">\n            {{ i18n \"footer_content_license_prefix\" }}\n            <a href=\"{{ .link }}\" class=\"gdoc-footer__link no-wrap\">{{ .name }}</a>\n          </span>\n        </section>\n      {{ end }}\n    </div>\n    {{ if (default true .Site.Params.geekdocBackToTop) }}\n      <div class=\"flex flex-25 justify-end\">\n        <span class=\"gdoc-footer__item text-right\">\n          <a class=\"gdoc-footer__link fake-link\" href=\"#\" aria-label=\"{{ i18n \"nav_top\" }}\">\n            <svg class=\"gdoc-icon gdoc_keyboard_arrow_up\">\n              <use xlink:href=\"#gdoc_keyboard_arrow_up\"></use>\n            </svg>\n            <span class=\"hidden-mobile\">{{ i18n \"nav_top\" }}</span>\n          </a>\n        </span>\n      </div>\n    {{ end }}\n  </nav>\n</footer>\n"
  },
  {
    "path": "layouts/partials/site-header.html",
    "content": "<header class=\"gdoc-header\">\n  <div class=\"container flex align-center justify-between\">\n    {{ if .MenuEnabled }}\n      <label for=\"menu-control\" class=\"gdoc-nav__control\">\n        <div tabindex=\"0\" role=\"button\" aria-pressed=\"false\">\n          <input type=\"checkbox\" class=\"hidden\" id=\"menu-control\" />\n\n          <svg class=\"gdoc-icon gdoc_menu\">\n            <title>{{ i18n \"button_nav_open\" }}</title>\n            <use xlink:href=\"#gdoc_menu\"></use>\n          </svg>\n          <svg class=\"gdoc-icon gdoc_arrow_back\">\n            <title>{{ i18n \"button_nav_close\" }}</title>\n            <use xlink:href=\"#gdoc_arrow_back\"></use>\n          </svg>\n        </div>\n      </label>\n    {{ end }}\n    <div>\n      <a class=\"gdoc-brand gdoc-header__link flex gap-16 align-center\" href=\"{{ .Root.Site.Home.Permalink }}\">\n        <img\n          class=\"gdoc-brand__img\"\n          src=\"{{ (default \"brand.svg\" .Root.Site.Params.geekdocLogo) | relURL }}\"\n          alt=\"\"\n        />\n        <div>\n          <div class=\"gdoc-brand__title\">{{ .Root.Site.Title }}</div>\n          {{ with .Root.Site.Params.geekdocSubtitle }}\n          <div class=\"gdoc-brand__subtitle\">{{ . }}</div>\n          {{ end }}\n        </div>\n      </a>\n    </div>\n    <div class=\"gdoc-menu-header flex gap-16\">\n      <span class=\"gdoc-menu-header__items\">\n        {{ if .Roothugo.Data.menu.extra.header }}\n          {{ partial \"menu-extra\" (dict \"current\" .Root \"source\" .Roothugo.Data.menu.extra.header \"target\" \"header\") }}\n        {{ end }}\n\n\n        <span id=\"gdoc-color-theme\" tabindex=\"0\" role=\"button\" aria-pressed=\"false\">\n          <svg class=\"gdoc-icon gdoc_brightness_dark\">\n            <title>{{ i18n \"button_toggle_dark\" }}</title>\n            <use xlink:href=\"#gdoc_brightness_dark\"></use>\n          </svg>\n          <svg class=\"gdoc-icon gdoc_brightness_light\">\n            <title>{{ i18n \"button_toggle_dark\" }}</title>\n            <use xlink:href=\"#gdoc_brightness_light\"></use>\n          </svg>\n          <svg class=\"gdoc-icon gdoc_brightness_auto\">\n            <title>{{ i18n \"button_toggle_dark\" }}</title>\n            <use xlink:href=\"#gdoc_brightness_auto\"></use>\n          </svg>\n        </span>\n\n        <span class=\"gdoc-menu-header__home\">\n          <a href=\"{{ .Root.Site.Home.Permalink }}\" class=\"gdoc-header__link\">\n            <svg class=\"gdoc-icon gdoc_home\">\n              <title>{{ i18n \"button_homepage\" }}</title>\n              <use xlink:href=\"#gdoc_home\"></use>\n            </svg>\n          </a>\n        </span>\n\n        {{ partial \"language\" .Root }}\n      </span>\n      <span class=\"gdoc-menu-header__control\">\n        <label for=\"menu-header-control\">\n          <div tabindex=\"0\" role=\"button\" aria-pressed=\"false\">\n            <input type=\"checkbox\" class=\"hidden\" id=\"menu-header-control\" />\n\n            <svg class=\"gdoc-icon gdoc_keyboard_arrow_right\">\n              <use xlink:href=\"#gdoc_keyboard_arrow_right\"></use>\n              <title>{{ i18n \"button_menu_close\" }}</title>\n            </svg>\n\n            <svg class=\"gdoc-icon gdoc_keyboard_arrow_left\">\n              <use xlink:href=\"#gdoc_keyboard_arrow_left\"></use>\n              <title>{{ i18n \"button_menu_open\" }}</title>\n            </svg>\n          </div>\n        </label>\n      </span>\n    </div>\n  </div>\n</header>\n"
  },
  {
    "path": "layouts/partials/svg-icon-symbols.html",
    "content": "{{ range resources.Match \"sprites/*.svg\" }}\n  {{ printf \"<!-- geekdoc include: %s -->\" . | safeHTML }}\n  {{ .Content | safeHTML }}\n{{ end }}\n"
  },
  {
    "path": "layouts/partials/utils/content.html",
    "content": "{{ $content := .Content }}\n\n{{ $content = $content | replaceRE `<nav id=\"TableOfContents\">\\s*<ul>\\s*<li>\\s*<ul>` `<nav id=\"TableOfContents\"><ul>` | replaceRE `</ul>\\s*</li>\\s*</ul>\\s*</nav>` `</ul></nav>` | safeHTML }}\n{{ $content = $content | replaceRE `(<table>(?:.|\\n)+?</table>)` `<div class=\"table-wrap\"> ${1} </div>` | safeHTML }}\n\n{{ return $content }}\n"
  },
  {
    "path": "layouts/partials/utils/description.html",
    "content": "{{ $isPage := or (and (ne .Type \"posts\") (in \"section page\" .Kind )) (and (eq .Type \"posts\") (eq .Kind \"page\")) }}\n{{ $description := \"\" }}\n\n{{ if .Description }}\n  {{ $description = .Description }}\n{{ else }}\n  {{ if $isPage }}\n    {{ $description = .Summary }}\n  {{ else if .Site.Params.description }}\n    {{ $description = .Site.Params.description }}\n  {{ end }}\n{{ end }}\n\n{{ return $description }}\n"
  },
  {
    "path": "layouts/partials/utils/featured.html",
    "content": "{{ $img := \"\" }}\n\n{{ with $source := ($.Resources.ByType \"image\").GetMatch \"{*feature*,*cover*,*thumbnail*}\" }}\n  {{ $featured := .Fill (printf \"1200x630 %s\" (default \"Smart\" .Params.anchor)) }}\n  {{ $img = $featured.Permalink }}\n{{ else }}\n  {{ with default $.Site.Params.images $.Params.images }}\n    {{ $img = index . 0 | absURL }}\n  {{ end }}\n{{ end }}\n\n{{ return $img }}\n"
  },
  {
    "path": "layouts/partials/utils/title.html",
    "content": "{{ $title := \"\" }}\n\n{{ if .Title }}\n  {{ $title = .Title }}\n{{ else if and .IsSection .File }}\n  {{ $title = path.Base .File.Dir | humanize | title }}\n{{ else if and .IsPage .File }}\n  {{ $title = .File.BaseFileName | humanize | title }}\n{{ end }}\n\n{{ return $title }}\n"
  },
  {
    "path": "layouts/posts/list.html",
    "content": "{{ define \"main\" }}\n  <div id=\"main-content\" tabindex=\"-1\">\n  {{ range .Paginator.Pages }}\n    <article class=\"gdoc-markdown gdoc-post\">\n      <header class=\"gdoc-post__header\">\n        <h1 class=\"gdoc-post__title\">\n          <a href=\"{{ .RelPermalink }}\">{{ partial \"utils/title\" . }}</a>\n        </h1>\n      </header>\n      <section>\n        {{ .Summary }}\n      </section>\n      <div class=\"gdoc-post__readmore\">\n        {{ if .Truncated }}\n          <a\n            class=\"flex-inline align-center fake-link\"\n            title=\"{{ i18n \"posts_read_more\" }}\"\n            href=\"{{ .RelPermalink }}\"\n          >\n            {{ i18n \"posts_read_more\" }}\n            <i class=\"gdoc-icon\">gdoc_arrow_right_alt</i>\n          </a>\n        {{ end }}\n      </div>\n\n      <footer class=\"gdoc-post__footer\">\n        <div class=\"flex flex-wrap align-center gdoc-post__meta\">\n          {{ partial \"posts/metadata.html\" . }}\n        </div>\n      </footer>\n    </article>\n  {{ end }}\n  </div>\n  {{ partial \"pagination.html\" . }}\n{{ end }}\n\n{{ define \"post-tag\" }}\n  <span class=\"gdoc-post__tag\">\n    <span class=\"gdoc-button\">\n      <a\n        class=\"gdoc-button__link\"\n        href=\"{{ .page.RelPermalink }}\"\n        title=\"{{ i18n \"posts_tagged_with\" .name }}\"\n      >\n        {{ .name }}\n      </a>\n    </span>\n  </span>\n{{ end }}\n"
  },
  {
    "path": "layouts/posts/single.html",
    "content": "{{ define \"main\" }}\n  <article class=\"gdoc-post\" id=\"main-content\" tabindex=\"-1\">\n    <header class=\"gdoc-post__header\">\n      <h1 class=\"gdoc-post__title\">{{ partial \"utils/title\" . }}</h1>\n      <div class=\"flex flex-wrap align-center gdoc-post__meta gdoc-post__meta--head\">\n        {{ partial \"posts/metadata.html\" . }}\n      </div>\n    </header>\n    <section class=\"gdoc-markdown\">\n      {{ partial \"utils/content\" . }}\n    </section>\n  </article>\n{{ end }}\n"
  },
  {
    "path": "layouts/robots.txt",
    "content": "User-agent: *\nDisallow: /tags/*\n\nSitemap: {{ \"sitemap.xml\" | absURL }}\n"
  },
  {
    "path": "layouts/shortcodes/audio.html",
    "content": "{{- $source := ($.Page.Resources.ByType \"audio\").GetMatch (printf \"%s\" (.Get \"name\")) }}\n{{- $customAlt := .Get \"alt\" }}\n\n{{- with $source }}\n  {{- $caption := default .Title $customAlt }}\n\n  <div class=\"flex justify-center\">\n    <figure class=\"gdoc-markdown__figure\">\n      <audio controls class=\"player\" preload=\"auto\">\n        <source src=\"{{ .Permalink }}\" type=\"audio/mpeg\">\n      </audio>\n      {{- with $caption }}\n        <figcaption>\n          {{ . }}\n          {{- with $source.Params.credits }}\n            {{ printf \" (%s)\" . | $.Page.RenderString }}\n          {{- end }}\n        </figcaption>\n      {{- end }}\n    </figure>\n  </div>\n{{- end }}\n"
  },
  {
    "path": "layouts/shortcodes/avatar.html",
    "content": "{{- $source := ($.Page.Resources.ByType \"image\").GetMatch (printf \"%s\" (.Get \"name\")) }}\n{{- $customAlt := .Get \"alt\" }}\n{{- $customSize := .Get \"size\" | lower }}\n{{- $customAnchor := default \"smart\" (.Get \"anchor\") | title }}\n{{- $data := newScratch }}\n\n{{- with $source }}\n  {{- $caption := default .Title $customAlt }}\n  {{- $isSVG := (eq .MediaType.SubType \"svg\") }}\n  {{- $origin := . -}}\n\n  {{- if $isSVG }}\n    {{- $data.SetInMap \"size\" \"tiny\" \"160\" }}\n    {{- $data.SetInMap \"size\" \"small\" \"300\" }}\n    {{- $data.SetInMap \"size\" \"medium\" \"600\" }}\n    {{- $data.SetInMap \"size\" \"large\" \"900\" }}\n  {{- else }}\n    {{- $data.SetInMap \"size\" \"tiny\" (printf \"160x160 %s\" $customAnchor) }}\n    {{- $data.SetInMap \"size\" \"small\" (printf \"300x300 %s\" $customAnchor) }}\n    {{- $data.SetInMap \"size\" \"medium\" (printf \"600x600 %s\" $customAnchor) }}\n    {{- $data.SetInMap \"size\" \"large\" (printf \"900x900 %s\" $customAnchor) }}\n  {{- end -}}\n\n  <div class=\"flex justify-center\">\n    <figure\n      class=\"gdoc-markdown__figure gdoc-markdown__figure--round\">\n      <a class=\"gdoc-markdown__link--raw\" href=\"{{ .Permalink }}\">\n        <picture>\n          {{- $size := $data.Get \"size\" }}\n          {{- if not $isSVG }}\n            {{- if ne $customSize \"origin\" }}\n            <source\n              {{- if $customSize }}\n                srcset=\"{{ ($origin.Fill (index $size $customSize)).Permalink }}\"\n              {{- else }}\n                srcset=\"{{ ($origin.Fill (index $size \"small\")).Permalink }} 600w, {{ ($origin.Fill (index $size \"medium\")).Permalink }} 1200w\" sizes=\"100vw\"\n              {{- end }}\n            />\n            {{- end }}\n          {{- end }}\n          <img\n          {{- if $isSVG }}\n            src=\"{{ $origin.Permalink }}\" width=\"{{ index $size (default \"medium\" $customSize) }}\"\n          {{- else }}\n            {{- if eq $customSize \"origin\" }}\n              src=\"{{ $origin.Permalink }}\"\n            {{- else }}\n              src=\"{{ ($origin.Fill (index $size \"large\")).Permalink }}\"\n            {{- end }}\n            alt=\"{{ $caption }}\"\n          {{- end }}\n          />\n        </picture>\n      </a>\n    </figure>\n  </div>\n{{- end }}\n"
  },
  {
    "path": "layouts/shortcodes/button.html",
    "content": "{{- $ref := \"\" }}\n{{- $class := \"\" }}\n{{- $size := default \"regular\" (.Get \"size\" | lower) }}\n\n{{- if not (in (slice \"regular\" \"large\") $size) }}\n  {{- $size = \"regular\" }}\n{{- end }}\n\n{{- with .Get \"href\" }}\n  {{- $ref = . }}\n{{- end }}\n\n{{- with .Get \"relref\" }}\n  {{- $ref = relref $ . }}\n{{- end }}\n\n{{- with .Get \"class\" }}\n  {{- $class = . }}\n{{- end }}\n\n\n<span class=\"gdoc-button gdoc-button--{{ $size }}{{ with $class }}{{ printf \" %s\" . }}{{ end }}\">\n  <a\n    class=\"gdoc-button__link\"\n    {{- with $ref }}{{ printf \" href=\\\"%s\\\"\" . | safeHTMLAttr }}{{ end }}\n  >\n    {{ $.Inner }}\n  </a>\n</span>\n"
  },
  {
    "path": "layouts/shortcodes/columns.html",
    "content": "{{- $size := default \"regular\" (.Get \"size\" | lower) }}\n\n{{- if not (in (slice \"regular\" \"large\" \"small\") $size) }}\n  {{- $size = \"regular\" }}\n{{- end }}\n\n\n<div class=\"gdoc-columns gdoc-columns--{{ $size }} flex gap-16 flex-mobile-column\">\n  {{- range split .Inner \"<--->\" }}\n    <div class=\"gdoc-columns__content gdoc-markdown--nested flex-even\">\n      {{ . | $.Page.RenderString -}}\n    </div>\n  {{- end }}\n</div>\n"
  },
  {
    "path": "layouts/shortcodes/expand.html",
    "content": "{{ $id := substr (sha1 .Inner) 0 8 }}\n<div class=\"gdoc-expand\">\n  <label class=\"gdoc-expand__head flex justify-between\" for=\"{{ $id }}-{{ .Ordinal }}\">\n    <span>{{ default \"Expand\" (.Get 0) }}</span>\n    <span>{{ default \"↕\" (.Get 1) }}</span>\n  </label>\n  <input id=\"{{ $id }}-{{ .Ordinal }}\" type=\"checkbox\" class=\"gdoc-expand__control hidden\" />\n  <div class=\"gdoc-markdown--nested gdoc-expand__content\">\n    {{ .Inner | $.Page.RenderString }}\n  </div>\n</div>\n"
  },
  {
    "path": "layouts/shortcodes/gist.html",
    "content": "<script src=\"https://gist.github.com/{{ index .Params 0 }}/{{ index .Params 1 }}.js{{if len .Params | eq 3 }}?file={{ index .Params 2 }}{{end}}\"></script>\n"
  },
  {
    "path": "layouts/shortcodes/hint.html",
    "content": "{{- $type := default \"note\" (.Get \"type\") }}\n{{- $icon := .Get \"icon\" }}\n{{- $title := default ($type | title) (.Get \"title\") }}\n\n\n<blockquote class=\"gdoc-hint {{ $type | lower }}\">\n  <div class=\"gdoc-hint__title flex gap-8 align-center\">\n    {{- with $icon -}}\n      <svg class=\"gdoc-icon {{ . }}\"><use xlink:href=\"#{{ . }}\"></use></svg>\n      <span>{{ $title }}</span>\n    {{- else -}}\n      <i class=\"fa {{ $type | lower }}\"></i>\n      <span>{{ $title }}</span>\n    {{- end -}}\n  </div>\n  <div class=\"gdoc-hint__text\">{{ .Inner | $.Page.RenderString }}</div>\n</blockquote>\n"
  },
  {
    "path": "layouts/shortcodes/icon.html",
    "content": "{{ $id := .Get 0 }}\n\n{{- with $id -}}\n  <svg class=\"gdoc-icon {{ . }}\"><use xlink:href=\"#{{ . }}\"></use></svg>\n{{- end -}}\n"
  },
  {
    "path": "layouts/shortcodes/img.html",
    "content": "{{- $source := ($.Page.Resources.ByType \"image\").GetMatch (printf \"%s\" (.Get \"name\")) }}\n{{- $customAlt := .Get \"alt\" }}\n{{- $customSize := .Get \"size\" | lower }}\n{{- $lazyLoad := default (default true $.Site.Params.geekdocImageLazyLoading) (.Get \"lazy\") }}\n{{- $data := newScratch }}\n\n{{- with $source }}\n  {{- $caption := default .Title $customAlt }}\n  {{- $isSVG := (eq .MediaType.SubType \"svg\") }}\n  {{- $origin := . }}\n\n  {{- if $isSVG }}\n    {{- $data.SetInMap \"size\" \"tiny\" \"320\" }}\n    {{- $data.SetInMap \"size\" \"small\" \"600\" }}\n    {{- $data.SetInMap \"size\" \"medium\" \"1200\" }}\n    {{- $data.SetInMap \"size\" \"large\" \"1800\" }}\n  {{- else }}\n    {{- $data.SetInMap \"size\" \"tiny\" \"320x\"}}\n    {{- $data.SetInMap \"size\" \"small\" \"600x\" }}\n    {{- $data.SetInMap \"size\" \"medium\" \"1200x\" }}\n    {{- $data.SetInMap \"size\" \"large\" \"1800x\" }}\n  {{- end -}}\n\n  <div class=\"flex justify-center\">\n    <figure class=\"gdoc-markdown__figure\">\n      <a class=\"gdoc-markdown__link--raw\" href=\"{{ .Permalink }}\">\n        <picture>\n          {{- $size := $data.Get \"size\" }}\n          {{- if not $isSVG }}\n            {{- if ne $customSize \"origin\" }}\n            <source\n              {{- if $customSize }}\n                srcset=\"{{ ($origin.Resize (index $size $customSize)).Permalink }}\"\n              {{- else }}\n                srcset=\"{{ ($origin.Resize (index $size \"small\")).Permalink }} 600w, {{ ($origin.Resize (index $size \"medium\")).Permalink }} 1200w\" sizes=\"100vw\"\n              {{- end }}\n            />\n            {{- end }}\n          {{- end }}\n          <img\n            {{- if $isSVG }}\n              src=\"{{ $origin.Permalink }}\" width=\"{{ index $size (default \"medium\" $customSize) }}\"\n            {{- else }}\n              {{- if $lazyLoad }}{{ print \" loading=\\\"lazy\\\"\" | safeHTMLAttr }}{{- end }}\n              {{- if eq $customSize \"origin\" }}\n                src=\"{{ $origin.Permalink }}\"\n              {{- else }}\n                src=\"{{ ($origin.Resize (index $size \"large\")).Permalink }}\"\n              {{- end }}\n              alt=\"{{ $caption }}\"\n            {{- end }}\n          />\n        </picture>\n      </a>\n      {{- with $caption }}\n        <figcaption>\n          {{ . }}\n          {{- with $source.Params.credits }}\n            {{ printf \" (%s)\" . | $.Page.RenderString }}\n          {{- end }}\n        </figcaption>\n      {{- end }}\n    </figure>\n  </div>\n{{- end }}\n"
  },
  {
    "path": "layouts/shortcodes/include.html",
    "content": "{{ $file := .Get \"file\" }}\n{{ $page := .Site.GetPage $file }}\n{{ $type := .Get \"type\" }}\n{{ $language := .Get \"language\" }}\n{{ $options :=.Get \"options\" }}\n\n\n<div class=\"gdoc-include\">\n  {{- if (.Get \"language\") -}}\n    {{- highlight ($file | readFile) $language (default \"linenos=table\" $options) -}}\n  {{- else if eq $type \"html\" -}}\n    {{- $file | readFile | safeHTML -}}\n  {{- else if eq $type \"page\" -}}\n    {{- with $page }}{{ .Content }}{{ end -}}\n  {{- else -}}\n    {{- $file | readFile | $.Page.RenderString -}}\n  {{- end -}}\n</div>\n"
  },
  {
    "path": "layouts/shortcodes/katex.html",
    "content": "<!-- prettier-ignore-start -->\n{{ if not (.Page.Scratch.Get \"katex\") }}\n  <!-- Include katex only first time -->\n  <link\n    rel=\"stylesheet\"\n    href=\"{{ index (index hugo.Data.assets \"katex.css\") \"src\" | relURL }}\"\n  />\n  <script defer src=\"{{ index (index hugo.Data.assets \"katex.js\") \"src\" | relURL }}\"></script>\n  {{ .Page.Scratch.Set \"katex\" true }}\n{{ end }}\n<!-- prettier-ignore-end -->\n\n<span class=\"gdoc-katex {{ with .Get \"class\" }}{{ . }}{{ end }}\">\n  {{ cond (in .Params \"display\") \"\\\\[\" \"\\\\(\" -}}\n  {{- trim .Inner \"\\n\" -}}\n  {{- cond (in .Params \"display\") \"\\\\]\" \"\\\\)\" -}}\n</span>\n{{- /* Drop trailing newlines */ -}}\n"
  },
  {
    "path": "layouts/shortcodes/mermaid.html",
    "content": "<!-- prettier-ignore-start -->\n{{ if not (.Page.Scratch.Get \"mermaid\") }}\n  <!-- Include mermaid only first time -->\n  <script defer src=\"{{ index (index hugo.Data.assets \"mermaid.js\") \"src\" | relURL }}\"></script>\n  {{ .Page.Scratch.Set \"mermaid\" true }}\n{{ end }}\n<!-- prettier-ignore-end -->\n\n<pre class=\"gdoc-mermaid mermaid{{ with .Get \"class\" }}{{ printf \" %s\" . }}{{ end }}\">\n  {{- .Inner -}}\n</pre>\n"
  },
  {
    "path": "layouts/shortcodes/progress.html",
    "content": "{{- $value := default 0 (.Get \"value\") -}}\n{{- $label := default (printf \"%v %%\" $value) (.Get \"label\") -}}\n{{- $type := default \"main\" (.Get \"type\") -}}\n{{- $title := .Get \"title\" -}}\n{{- $icon := .Get \"icon\" -}}\n\n\n<div class=\"gdoc-progress\">\n  <div class=\"gdoc-progress__label flex justify-between\">\n    <div class=\"gdoc-progress__label--name flex align-center\">\n      {{ with $icon -}}\n        <svg class=\"gdoc-icon {{ . }}\"><use xlink:href=\"#{{ . }}\"></use></svg>\n      {{- end }}\n      {{ with $title }}<span>{{ . }}</span>{{ end }}\n    </div>\n    <div>{{ $label }}</div>\n  </div>\n  <div class=\"gdoc-progress__wrap\">\n    <div\n      class=\"gdoc-progress__bar {{ $type | lower }}\"\n      data-percent=\"{{ $value }}\"\n      style=\"width: {{ $value }}%; max-width: 100%; min-width: 0\"\n    ></div>\n  </div>\n</div>\n"
  },
  {
    "path": "layouts/shortcodes/propertylist.html",
    "content": "{{- $name := .Get \"name\" -}}\n{{- $sort := .Get \"sort\" -}}\n{{- $order := default \"asc\" (.Get \"order\") -}}\n{{- $showAnchor := (and (default true .Page.Params.geekdocAnchor) (default true .Page.Site.Params.geekdocAnchor)) -}}\n\n{{- if hugo.Data.properties }}\n  <dl class=\"gdoc-props\">\n    {{- with (index hugo.Data.properties (split $name \".\")) }}\n      {{- $properties := .properties }}\n      {{- with $sort }}\n        {{- $properties = (sort $properties . $order) }}\n      {{- end }}\n      {{- range $properties }}\n        {{- $uniqueAnchor := anchorize (printf \"%s-%s\" $name .name) | safeHTML }}\n        <dt class=\"flex flex-wrap align-center gdoc-props__meta\"{{ if $showAnchor }} id=\"{{ $uniqueAnchor }}\"{{ end }}>\n          <span class=\"gdoc-props__title\">{{ .name }}</span>\n          {{- if .required }}\n            <span class=\"gdoc-props__tag warning\">{{ i18n \"propertylist_required\" | lower }}</span>\n          {{- else }}\n            <span class=\"gdoc-props__tag tip\">{{ i18n \"propertylist_optional\" | lower }}</span>\n          {{- end }}\n          {{- with .type }}\n            <span class=\"gdoc-props__tag note\">{{ . }}</span>\n          {{- end }}\n\n          {{- with .tags }}\n            {{- $tags := . }}\n            {{- if reflect.IsMap $tags }}\n              {{- $tags = (index $tags $.Site.Language.Lang) }}\n            {{- end }}\n            {{- range $tags }}\n              <span class=\"gdoc-props__tag\">{{ . }}</span>\n            {{- end }}\n          {{- end }}\n          {{- if $showAnchor }}\n          <a data-clipboard-text=\"{{ .Page.Permalink }}#{{ $uniqueAnchor }}\" class=\"gdoc-page__anchor clip flex align-center\" title=\"{{ i18n \"title_anchor_prefix\" }} {{ .name | safeHTML }}\" aria-label=\"{{ i18n \"title_anchor_prefix\" }} {{ .name | safeHTML }}\" href=\"#{{ $uniqueAnchor }}\">\n            <svg class=\"gdoc-icon gdoc_link\"><use xlink:href=\"#gdoc_link\"></use></svg>\n          </a>\n          {{- end }}\n        </dt>\n        <dd>\n          <div class=\"gdoc-props__description\">\n            {{- with .description }}\n              {{- $desc := . }}\n              {{- if reflect.IsMap $desc }}\n                {{- $desc = (index $desc $.Site.Language.Lang) }}\n              {{- end }}\n              {{ $desc | $.Page.RenderString }}\n            {{- end }}\n          </div>\n          <div class=\"gdoc-props__default\">\n            {{- with default \"none\" (.defaultValue | string) }}\n              <span>{{ i18n \"propertylist_default\" | title }}:</span>\n              <span>{{ . }}</span>\n            {{- end }}\n          </div>\n        </dd>\n      {{- end }}\n    {{- end }}\n  </dl>\n{{- end }}\n"
  },
  {
    "path": "layouts/shortcodes/tab.html",
    "content": "{{- if .Parent }}\n  {{- $name := .Get 0 }}\n  {{- $group := printf \"tabs-%s\" (.Parent.Get 0) }}\n\n  {{- if not (.Parent.Scratch.Get $group) }}\n    {{- .Parent.Scratch.Set $group slice }}\n  {{- end }}\n\n  {{- .Parent.Scratch.Add $group (dict \"Name\" $name \"Content\" .Inner) }}\n{{- else }}\n  {{ errorf \"%q: 'tab' shortcode must be inside 'tabs' shortcode\" .Page.Path }}\n{{- end }}\n"
  },
  {
    "path": "layouts/shortcodes/tabs.html",
    "content": "{{- if .Inner }}{{ end }}\n{{- $id := .Get 0 }}\n{{- $group := printf \"tabs-%s\" $id }}\n\n\n<div class=\"gdoc-tabs\">\n  {{- range $index, $tab := .Scratch.Get $group }}\n    <input\n      type=\"radio\"\n      class=\"gdoc-tabs__control hidden\"\n      name=\"{{ $group }}\"\n      id=\"{{ printf \"%s-%d\" $group $index }}\"\n      {{ if not $index }}checked=\"checked\"{{ end -}}\n    />\n    <label for=\"{{ printf \"%s-%d\" $group $index }}\" class=\"gdoc-tabs__label\">\n      {{ $tab.Name }}\n    </label>\n    <div class=\"gdoc-markdown--nested gdoc-tabs__content\">\n      {{ .Content | $.Page.RenderString -}}\n    </div>\n  {{- end }}\n</div>\n"
  },
  {
    "path": "layouts/shortcodes/toc-tree.html",
    "content": "{{- $current := . }}\n{{- $tocLevels := default (default 6 .Site.Params.geekdocToC) .Page.Params.geekdocToC }}\n{{- $sortBy := (default (default \"title\" .Site.Params.geekdocFileTreeSortBy) (.Get \"sortBy\") | lower) }}\n\n{{- if $tocLevels }}\n  <div class=\"gdoc-toc gdoc-toc__level--{{ $tocLevels }}\">\n    {{ template \"toc-tree\" dict \"sect\" .Page.Pages \"current\" $current \"sortBy\" $sortBy }}\n  </div>\n{{- end }}\n\n\n<!-- templates -->\n{{- define \"toc-tree\" }}\n  <ul>\n    {{ range .sect.GroupBy \"Weight\" }}\n      {{ $rangeBy := .ByTitle }}\n\n      {{ if eq $.sortBy \"title\" }}\n        {{ $rangeBy = .ByTitle }}\n      {{ else if eq $.sortBy \"linktitle\" }}\n        {{ $rangeBy = .ByLinkTitle }}\n      {{ else if eq $.sortBy \"date\" }}\n        {{ $rangeBy = .ByDate }}\n      {{ else if eq $.sortBy \"publishdate\" }}\n        {{ $rangeBy = .ByPublishDate }}\n      {{ else if eq $.sortBy \"expirydate\" }}\n        {{ $rangeBy = .ByExpiryDate }}\n      {{ else if eq $.sortBy \"lastmod\" }}\n        {{ $rangeBy = .ByLastmod }}\n      {{ else if eq $.sortBy \"title_reverse\" }}\n        {{ $rangeBy = .ByTitle.Reverse }}\n      {{ else if eq $.sortBy \"linktitle_reverse\" }}\n        {{ $rangeBy = .ByLinkTitle.Reverse }}\n      {{ else if eq $.sortBy \"date_reverse\" }}\n        {{ $rangeBy = .ByDate.Reverse }}\n      {{ else if eq $.sortBy \"publishdate_reverse\" }}\n        {{ $rangeBy = .ByPublishDate.Reverse }}\n      {{ else if eq $.sortBy \"expirydate_reverse\" }}\n        {{ $rangeBy = .ByExpiryDate.Reverse }}\n      {{ else if eq $.sortBy \"lastmod_reverse\" }}\n        {{ $rangeBy = .ByLastmod.Reverse }}\n      {{ end }}\n\n      {{ range $rangeBy }}\n        {{- if or (not .Params.geekdocHidden) (not (default true .Params.geekdocHiddenTocTree)) }}\n          <li>\n            {{- if or .Content .Params.geekdocFlatSection }}\n              <span>\n                <a href=\"{{ .RelPermalink }}\" class=\"gdoc-toc__entry\">\n                  {{- partial \"utils/title\" . }}{{ with .Params.geekdocDescription }}:{{ end }}\n                </a>\n                {{- with .Params.geekdocDescription }}{{ . }}{{ end }}\n              </span>\n            {{- else -}}\n              <span>\n                {{- partial \"utils/title\" . }}{{ with .Params.geekdocDescription }}\n                  : {{ . }}\n                {{ end }}\n              </span>\n            {{- end -}}\n\n            {{- $numberOfPages := (add (len .Pages) (len .Sections)) }}\n            {{- if and (ne $numberOfPages 0) (not .Params.geekdocFlatSection) }}\n              {{- template \"toc-tree\" dict \"sect\" .Pages }}\n            {{- end }}\n          </li>\n        {{- end }}\n      {{- end }}\n    {{- end }}\n  </ul>\n{{- end }}\n"
  },
  {
    "path": "layouts/shortcodes/toc.html",
    "content": "{{- $format := default \"html\" (.Get \"format\") }}\n{{- $tocLevels := default (default 6 .Site.Params.geekdocToC) .Page.Params.geekdocToC }}\n\n{{- if and $tocLevels .Page.TableOfContents -}}\n  {{- if not (eq ($format | lower) \"raw\") -}}\n    <div class=\"gdoc-toc gdoc-toc__level--{{ $tocLevels }}\">\n      {{ .Page.TableOfContents }}\n      <hr />\n    </div>\n  {{- else -}}\n    {{ .Page.TableOfContents }}\n  {{- end -}}\n{{- end -}}\n"
  },
  {
    "path": "package.json",
    "content": "{\n  \"name\": \"geekdoc\",\n  \"version\": \"1.0.0\",\n  \"description\": \"Hugo theme made for documentation\",\n  \"main\": \"index.js\",\n  \"type\": \"module\",\n  \"scripts\": {\n    \"build\": \"run-s prep:clean prep:make svg build:webpack\",\n    \"build:webpack\": \"webpack --mode=production\",\n    \"build:webpack-devel\": \"webpack --mode=development\",\n    \"pack\": \"tar -zcvf dist/hugo-geekdoc.tar.gz -X .tarignore .\",\n    \"start\": \"run-s prep:clean prep:make svg build:webpack-devel ; run-p start:webpack start:hugo\",\n    \"start:webpack\": \"webpack --mode=development --watch\",\n    \"start:build\": \"webpack --mode=development\",\n    \"start:hugo\": \"hugo server -D -F -s exampleSite/\",\n    \"svg\": \"run-s svg:*\",\n    \"svg:sprite\": \"svg-sprite -C svgsprite.config.json 'src/icons/*.svg'\",\n    \"svg:font\": \"svgtofont --sources build/icons/ --output build/fonts/\",\n    \"prep:clean\": \"shx rm -rf build/ static/\",\n    \"prep:clean-all\": \"shx rm -rf VERSION .lighthouseci/ lhci_reports/ build/ dist/ static/ data/ assets/sprites/ exampleSite/data/sprites/ exampleSite/public/ exampleSite/resources/ exampleSite/.hugo_build.lock\",\n    \"prep:make\": \"shx mkdir -p build/icons/ build/fonts/ dist/\",\n    \"svg-sprite-list\": \"run-s prep:make svg ; shx mkdir -p exampleSite/data/sprites/ ; shx cp build/fonts/GeekdocIcons.json exampleSite/data/sprites/geekdoc.json\",\n    \"lint\": \"run-p lint:js lint:html\",\n    \"lint:js\": \"eslint src/js/ --color\",\n    \"lint:html\": \"html-validate exampleSite/public\"\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/thegeeklab/hugo-geekdoc\"\n  },\n  \"author\": \"Robert Kaussow\",\n  \"license\": \"MIT\",\n  \"engines\": {\n    \"node\": \">=20 <=24\"\n  },\n  \"dependencies\": {\n    \"@cfworker/json-schema\": \"4.1.1\",\n    \"clipboard\": \"2.0.11\",\n    \"flexsearch\": \"0.8.212\",\n    \"katex\": \"0.16.45\",\n    \"lodash\": \"4.18.1\",\n    \"mermaid\": \"11.14.0\",\n    \"store2\": \"2.14.4\",\n    \"uuid\": \"13.0.0\"\n  },\n  \"devDependencies\": {\n    \"@eslint/js\": \"10.0.1\",\n    \"autoprefixer\": \"10.4.27\",\n    \"copy-webpack-plugin\": \"14.0.0\",\n    \"css-loader\": \"7.1.4\",\n    \"eslint\": \"10.2.0\",\n    \"eslint-config-prettier\": \"10.1.8\",\n    \"eslint-plugin-prettier\": \"5.5.5\",\n    \"favicons\": \"7.2.0\",\n    \"favicons-webpack-plugin\": \"6.0.1\",\n    \"globals\": \"17.4.0\",\n    \"html-validate\": \"10.11.3\",\n    \"npm-run-all2\": \"8.0.4\",\n    \"postcss-loader\": \"8.2.1\",\n    \"prettier\": \"3.8.1\",\n    \"sass\": \"1.99.0\",\n    \"sass-loader\": \"16.0.7\",\n    \"shx\": \"0.4.0\",\n    \"svg-sprite\": \"2.0.4\",\n    \"svgtofont\": \"6.5.1\",\n    \"webpack\": \"5.105.4\",\n    \"webpack-cli\": \"7.0.2\",\n    \"webpack-manifest-plugin\": \"6.0.1\",\n    \"webpack-remove-empty-scripts\": \"1.1.1\"\n  },\n  \"overrides\": {\n    \"colors\": \"1.4.0\"\n  },\n  \"browserslist\": [\n    \"last 2 version\",\n    \"> 5%\",\n    \"not dead\",\n    \"Firefox ESR\"\n  ],\n  \"svgtofont\": {\n    \"fontName\": \"GeekdocIcons\",\n    \"css\": false,\n    \"html\": false,\n    \"emptyDist\": true,\n    \"useNameAsUnicode\": true,\n    \"svgicons2svgfont\": {\n      \"fontHeight\": 1001,\n      \"normalize\": true,\n      \"centerHorizontally\": true,\n      \"centerVertically\": true\n    }\n  }\n}\n"
  },
  {
    "path": "renovate.json",
    "content": "{\n  \"$schema\": \"https://docs.renovatebot.com/renovate-schema.json\",\n  \"extends\": [\"github>thegeeklab/renovate-presets\"]\n}\n"
  },
  {
    "path": "src/js/accessibility.js",
    "content": "document.addEventListener(\"DOMContentLoaded\", () => {\n  const gdocNav = document.querySelector(\".gdoc-nav\")\n  const gdocPage = document.querySelector(\".gdoc-page\")\n  const menuControl = document.getElementById(\"menu-control\")\n\n  // Helper function for menu navigation accessibility\n  const updateMenuAccessibility = () => {\n    if (!gdocNav || !gdocPage || !menuControl) return\n\n    const isMenuOpen = menuControl.checked\n    const isDesktop = window.matchMedia(\"(min-width: 41rem)\").matches\n\n    // Set nav accessibility attributes\n    gdocNav.toggleAttribute(\"inert\", !isDesktop && !isMenuOpen)\n    gdocNav.setAttribute(\"aria-hidden\", (!isDesktop && !isMenuOpen).toString())\n\n    // Set page accessibility attributes\n    gdocPage.toggleAttribute(\"inert\", !isDesktop && isMenuOpen)\n    gdocPage.setAttribute(\"aria-hidden\", (!isDesktop && isMenuOpen).toString())\n  }\n\n  // Process all button role elements\n  document.querySelectorAll('[role=\"button\"]').forEach((buttonElement) => {\n    const controlId = buttonElement.parentElement?.getAttribute(\"for\")\n    if (!controlId) return\n\n    const controlElement = document.getElementById(controlId)\n    if (!controlElement || controlElement.type !== \"checkbox\") return\n\n    // Set initial accessibility state\n    buttonElement.setAttribute(\"aria-pressed\", controlElement.checked)\n\n    // Handle accessibility updates\n    const updateButton = () => {\n      buttonElement.setAttribute(\"aria-pressed\", controlElement.checked)\n      if (controlId === \"menu-control\") updateMenuAccessibility()\n    }\n\n    // Event listeners\n    buttonElement.addEventListener(\"click\", updateButton)\n    buttonElement.addEventListener(\"keydown\", (event) => {\n      if (event.key === \"Enter\") {\n        controlElement.checked = !controlElement.checked\n        updateButton()\n        event.preventDefault()\n      }\n    })\n  })\n\n  // Initial call and resize handler\n  updateMenuAccessibility()\n  window.addEventListener(\"resize\", updateMenuAccessibility)\n})\n"
  },
  {
    "path": "src/js/colorTheme.js",
    "content": "import Storage from \"store2\"\nimport { TOGGLE_COLOR_THEMES, THEME, COLOR_THEME_AUTO } from \"./config.js\"\n\nconst applyTheme = (init = true) => {\n  if (Storage.isFake()) return\n\n  const lstore = Storage.namespace(THEME)\n  const html = document.documentElement\n  const currentColorTheme = TOGGLE_COLOR_THEMES.includes(lstore.get(\"color-theme\"))\n    ? lstore.get(\"color-theme\")\n    : COLOR_THEME_AUTO\n\n  html.setAttribute(\"class\", `color-toggle-${currentColorTheme}`)\n\n  if (currentColorTheme === COLOR_THEME_AUTO) {\n    html.removeAttribute(\"color-theme\")\n  } else {\n    html.setAttribute(\"color-theme\", currentColorTheme)\n  }\n\n  if (!init) {\n    // Reload required to re-initialize e.g. Mermaid with the new theme\n    // and re-parse the Mermaid code blocks.\n    location.reload()\n  }\n}\n\nconst toggle = (value, list = []) => {\n  const current = list.indexOf(value)\n  const max = list.length - 1\n  let next = 0\n\n  if (current < max) {\n    next = current + 1\n  }\n\n  return next\n}\n\n;(() => {\n  applyTheme()\n})()\n\ndocument.addEventListener(\"DOMContentLoaded\", () => {\n  const colorThemeToggle = document.getElementById(\"gdoc-color-theme\")\n\n  const toggleColorTheme = () => {\n    const lstore = Storage.namespace(THEME)\n    const currentColorTheme = lstore.get(\"color-theme\") || COLOR_THEME_AUTO\n    const nextColorTheme = toggle(currentColorTheme, TOGGLE_COLOR_THEMES)\n\n    lstore.set(\"color-theme\", TOGGLE_COLOR_THEMES[nextColorTheme])\n    applyTheme(false)\n  }\n\n  colorThemeToggle.onclick = () => {\n    toggleColorTheme()\n  }\n\n  colorThemeToggle.addEventListener(\"keydown\", (event) => {\n    if (event.key === \"Enter\") {\n      toggleColorTheme()\n      event.preventDefault()\n    }\n  })\n})\n"
  },
  {
    "path": "src/js/config.js",
    "content": "export const COLOR_THEME_DARK = \"dark\"\nexport const COLOR_THEME_LIGHT = \"light\"\nexport const COLOR_THEME_AUTO = \"auto\"\nexport const THEME = \"hugo-geekdoc\"\nexport const TOGGLE_COLOR_THEMES = [COLOR_THEME_AUTO, COLOR_THEME_DARK, COLOR_THEME_LIGHT]\n"
  },
  {
    "path": "src/js/index.js",
    "content": "import Clipboard from \"clipboard\"\nimport \"./accessibility.js\"\n\ndocument.addEventListener(\"DOMContentLoaded\", () => {\n  const clipboard = new Clipboard(\".clip\")\n\n  clipboard.on(\"success\", (e) => {\n    const { trigger, clearSelection } = e\n\n    if (trigger.hasAttribute(\"data-copy-feedback\")) {\n      trigger.classList.add(\"gdoc-post__codecopy--success\", \"gdoc-post__codecopy--out\")\n      trigger.querySelector(\".gdoc-icon.copy\").classList.add(\"hidden\")\n      trigger.querySelector(\".gdoc-icon.check\").classList.remove(\"hidden\")\n\n      setTimeout(() => {\n        trigger.classList.remove(\"gdoc-post__codecopy--success\", \"gdoc-post__codecopy--out\")\n        trigger.querySelector(\".gdoc-icon.copy\").classList.remove(\"hidden\")\n        trigger.querySelector(\".gdoc-icon.check\").classList.add(\"hidden\")\n      }, 3000)\n    }\n\n    clearSelection()\n  })\n\n  document.querySelectorAll(\".highlight\").forEach(createCopyButton)\n})\n\nconst createCopyButton = (highlightDiv) => {\n  const button = document.createElement(\"span\")\n\n  let codeSelector = \"pre > code\"\n  if (highlightDiv.querySelector(\".lntable\")) {\n    codeSelector = \".lntable .lntd:last-child pre > code\"\n  }\n\n  const codeContainer = highlightDiv.querySelector(codeSelector)\n  if (codeContainer !== null) {\n    const codeContent = codeContainer.innerText.trim()\n\n    button.classList.add(\"flex\", \"align-center\", \"justify-center\", \"clip\", \"gdoc-post__codecopy\")\n    button.type = \"button\"\n    button.innerHTML =\n      '<svg class=\"gdoc-icon copy\"><use xlink:href=\"#gdoc_copy\"></use></svg>' +\n      '<svg class=\"gdoc-icon check hidden\"><use xlink:href=\"#gdoc_check\"></use></svg>'\n    button.setAttribute(\"data-clipboard-text\", codeContent)\n    button.setAttribute(\"data-copy-feedback\", \"Copied!\")\n    button.setAttribute(\"role\", \"button\")\n    button.setAttribute(\"aria-label\", \"Copy\")\n\n    highlightDiv.classList.add(\"gdoc-post__codecontainer\")\n    highlightDiv.insertBefore(button, highlightDiv.firstChild)\n  }\n}\n"
  },
  {
    "path": "src/js/katex.js",
    "content": "import \"katex/dist/katex.css\"\nimport renderMathInElement from \"katex/dist/contrib/auto-render.mjs\"\n\nrenderMathInElement(document.body)\n"
  },
  {
    "path": "src/js/mermaid.js",
    "content": "import Storage from \"store2\"\nimport { v4 as uuidv4 } from \"uuid\"\nimport { COLOR_THEME_DARK, THEME, COLOR_THEME_AUTO } from \"./config.js\"\n\nimport mermaid from \"mermaid\"\n\ndocument.addEventListener(\"DOMContentLoaded\", () => {\n  const lstore = Storage.namespace(THEME)\n  const currentMode = lstore.get(\"color-theme\") || COLOR_THEME_AUTO\n  const darkModeQuery = window.matchMedia(\"(prefers-color-scheme: dark)\")\n  let darkMode = false\n  let theme = \"default\"\n\n  if (\n    currentMode === COLOR_THEME_DARK ||\n    (currentMode === COLOR_THEME_AUTO && darkModeQuery.matches)\n  ) {\n    darkMode = true\n    theme = \"dark\"\n  }\n\n  mermaid.initialize({\n    startOnLoad: false,\n    flowchart: { useMaxWidth: true },\n    theme,\n    themeVariables: {\n      darkMode\n    }\n  })\n\n  document.querySelectorAll(\".mermaid\").forEach((el) => {\n    const id = `graph-${uuidv4()}`\n\n    mermaid.render(id, el.innerText).then(({ svg, bindFunctions }) => {\n      el.innerHTML = svg\n      bindFunctions?.(el)\n    })\n  })\n})\n"
  },
  {
    "path": "src/js/search.js",
    "content": "import groupBy from \"lodash/groupBy.js\"\nimport truncate from \"lodash/truncate.js\"\nimport { Document, Charset } from \"flexsearch\"\nimport { Validator } from \"@cfworker/json-schema\"\n\ndocument.addEventListener(\"DOMContentLoaded\", function () {\n  const input = document.querySelector(\"#gdoc-search-input\")\n  const results = document.querySelector(\"#gdoc-search-results\")\n  const basePath = urlPath(input ? input.dataset.siteBaseUrl : \"\")\n  const lang = input ? input.dataset.siteLang : \"\"\n\n  const configSchema = {\n    type: \"object\",\n    properties: {\n      dataFile: {\n        type: \"string\"\n      },\n      indexConfig: {\n        type: [\"object\", \"null\"]\n      },\n      showParent: {\n        type: \"boolean\"\n      },\n      showDescription: {\n        type: \"boolean\"\n      }\n    },\n    additionalProperties: false\n  }\n  const validator = new Validator(configSchema)\n\n  if (!input) return\n\n  getJson(combineURLs(basePath, `/search/${lang}.config.min.json`), function (searchConfig) {\n    const validationResult = validator.validate(searchConfig)\n\n    if (!validationResult.valid)\n      throw AggregateError(\n        validationResult.errors.map((err) => new Error(`Validation error: ${err.error}`)),\n        \"Schema validation failed\"\n      )\n\n    if (input) {\n      input.addEventListener(\"focus\", () => {\n        init(input, searchConfig)\n      })\n      input.addEventListener(\"keyup\", () => {\n        search(input, results, searchConfig)\n      })\n    }\n  })\n})\n\nfunction init(input, searchConfig) {\n  input.removeEventListener(\"focus\", init)\n\n  const indexCfgDefaults = {\n    tokenize: \"forward\",\n    encoder: Charset.LatinBalance\n  }\n  const indexCfg = searchConfig.indexConfig ? searchConfig.indexConfig : indexCfgDefaults\n  const dataUrl = searchConfig.dataFile\n\n  indexCfg.document = {\n    key: \"id\",\n    index: [\"title\", \"content\", \"description\"],\n    store: [\"title\", \"href\", \"parent\", \"content\", \"description\"]\n  }\n\n  const index = new Document(indexCfg)\n  window.geekdocSearchIndex = index\n\n  getJson(dataUrl, function (data) {\n    data.forEach((obj) => {\n      window.geekdocSearchIndex.add(obj)\n    })\n  })\n}\n\nfunction search(input, results, searchConfig) {\n  const searchCfg = {\n    enrich: true,\n    limit: 5,\n    highlight: {\n      template: \"<b>$1</b>\",\n      boundary: {\n        before: 10,\n        after: 20\n      }\n    }\n  }\n\n  while (results.firstChild) {\n    results.removeChild(results.firstChild)\n  }\n\n  if (!input.value) {\n    return results.classList.remove(\"has-hits\")\n  }\n\n  let searchHits = flattenHits(window.geekdocSearchIndex.search(input.value, searchCfg))\n\n  if (searchHits.length < 1) {\n    return results.classList.remove(\"has-hits\")\n  }\n\n  results.classList.add(\"has-hits\")\n\n  if (searchConfig.showParent === true) {\n    searchHits = groupBy(searchHits, (hit) => hit.parent)\n  }\n\n  const items = []\n\n  if (searchConfig.showParent === true) {\n    for (const section in searchHits) {\n      const item = document.createElement(\"li\"),\n        title = item.appendChild(document.createElement(\"span\")),\n        subList = item.appendChild(document.createElement(\"ul\"))\n\n      if (!section) {\n        title.remove()\n      }\n      title.classList.add(\"gdoc-search__section\")\n      title.textContent = section\n      createLinks(searchHits[section], subList, searchConfig.showDescription)\n\n      items.push(item)\n    }\n  } else {\n    const item = document.createElement(\"li\"),\n      title = item.appendChild(document.createElement(\"span\")),\n      subList = item.appendChild(document.createElement(\"ul\"))\n\n    title.textContent = \"Results\"\n    createLinks(searchHits, subList, searchConfig.showDescription)\n\n    items.push(item)\n  }\n\n  items.forEach((item) => {\n    results.appendChild(item)\n  })\n}\n\n/**\n * Creates links to given fields and either returns them in an array or attaches them to a target element\n * @param {Object} fields Page to which the link should point to\n * @param {HTMLElement} target Element to which the links should be attached\n * @returns {Array} If target is not specified, returns an array of built links\n */\nfunction createLinks(pages, target, showDesc) {\n  const items = []\n\n  for (const page of pages) {\n    const item = document.createElement(\"li\"),\n      a = item.appendChild(document.createElement(\"a\")),\n      entry = a.appendChild(document.createElement(\"span\"))\n\n    a.href = page.href\n    entry.classList.add(\"gdoc-search__entry--title\")\n    entry.textContent = page.title\n    a.classList.add(\"gdoc-search__entry\")\n\n    if (showDesc === true) {\n      const desc = a.appendChild(document.createElement(\"span\"))\n      desc.classList.add(\"gdoc-search__entry--description\")\n\n      if (page.highlight) {\n        const parser = new DOMParser()\n        const doc = parser.parseFromString(\n          truncate(page.highlight, {\n            length: 55,\n            separator: \" \"\n          }),\n          \"text/html\"\n        )\n        desc.innerHTML = doc.body.innerHTML\n      } else {\n        desc.textContent = truncate(page.description, {\n          length: 55,\n          separator: \" \"\n        })\n      }\n    }\n\n    if (target) {\n      target.appendChild(item)\n      continue\n    }\n\n    items.push(item)\n  }\n\n  return items\n}\n\nfunction fetchErrors(response) {\n  if (!response.ok) {\n    throw Error(`Failed to fetch '${response.url}': ${response.statusText}`)\n  }\n  return response\n}\n\nfunction getJson(src, callback) {\n  fetch(src)\n    .then(fetchErrors)\n    .then((response) => response.json())\n    .then((json) => callback(json))\n    .catch(function (error) {\n      if (error instanceof AggregateError) {\n        console.error(error.message)\n        error.errors.forEach((element) => {\n          console.error(element)\n        })\n      } else {\n        console.error(error)\n      }\n    })\n}\n\nfunction flattenHits(results) {\n  const items = []\n  const map = new Map()\n\n  for (const field of results) {\n    for (const page of field.result) {\n      if (!map.has(page.doc.href)) {\n        map.set(page.doc.href, true)\n\n        if (page.highlight) {\n          page.doc.highlight = page.highlight\n        }\n\n        items.push(page.doc)\n      }\n    }\n  }\n\n  return items\n}\n\nfunction urlPath(rawURL) {\n  const parser = document.createElement(\"a\")\n  parser.href = rawURL\n\n  return parser.pathname\n}\n\n/**\n * Part of [axios](https://github.com/axios/axios/blob/master/lib/helpers/combineURLs.js).\n * Creates a new URL by combining the specified URLs\n *\n * @param {string} baseURL The base URL\n * @param {string} relativeURL The relative URL\n * @returns {string} The combined URL\n */\nfunction combineURLs(baseURL, relativeURL) {\n  return relativeURL\n    ? `${baseURL.replace(/\\/+$/, \"\")}/${relativeURL.replace(/^\\/+/, \"\")}`\n    : baseURL\n}\n"
  },
  {
    "path": "src/sass/_asciidoc.scss",
    "content": "@use \"sass:color\";\n@use \"defaults\";\n\n.admonitionblock {\n  $root: &;\n\n  margin: defaults.$padding-16 0;\n  padding: 0;\n\n  border: defaults.$border-1 solid var(--accent-color);\n  border-left: defaults.$border-4 solid var(--accent-color);\n  border-radius: defaults.$border-radius;\n\n  @each $name, $color in defaults.$hint-colors {\n    &.#{$name} {\n      border-color: $color;\n\n      td.icon {\n        background-color: color.adjust($color, $alpha: -0.9);\n        border-start-start-radius: inherit;\n        border-start-end-radius: inherit;\n        position: relative;\n        z-index: -10;\n        outline: color.adjust($color, $alpha: -0.9);\n      }\n    }\n  }\n\n  .table-wrap {\n    margin: 0;\n  }\n\n  table {\n    margin: 0 !important;\n    padding: 0 !important;\n\n    tr {\n      border: 0 !important;\n    }\n\n    td {\n      display: block;\n      padding: defaults.$padding-4 defaults.$padding-16 !important;\n\n      &:first-child {\n        background-color: color.scale(defaults.$gray-600, $alpha: -95%);\n        font-weight: bold;\n\n        &.icon {\n          margin-left: -5px;\n\n          @each $name, $icon in defaults.$hint-icons {\n            i.fa.icon-#{$name} {\n              width: defaults.$font-size-24;\n              height: defaults.$font-size-24;\n              position: relative;\n\n              &::before {\n                content: \"\";\n                position: absolute;\n                left: 0;\n                top: 50%;\n                transform: translateY(-50%);\n                width: defaults.$font-size-24;\n                height: defaults.$font-size-24;\n                mask-image: url(img/geekdoc-stack.svg##{$icon});\n                mask-repeat: no-repeat;\n                mask-size: contain;\n                background-color: var(--body-font-color);\n              }\n\n              &::after {\n                color: var(--body-font-color);\n                content: attr(title);\n                font-style: normal;\n                padding-left: defaults.$padding-32;\n              }\n            }\n          }\n        }\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "src/sass/_base.scss",
    "content": "@use \"sass:meta\";\n@use \"sass:map\";\n@use \"color_mode\";\n@use \"defaults\";\n\n:root {\n  --code-max-height: none;\n\n  --header-font-family: #{meta.inspect(defaults.$header-font-family)};\n  --body-font-family: #{meta.inspect(defaults.$body-font-family)};\n  --code-font-family: #{meta.inspect(defaults.$code-font-family)};\n}\n\n:root,\n:root[color-theme=\"light\"] {\n  @include color_mode.color_theme_light;\n  @include color_mode.code_theme_light;\n}\n\n@media (prefers-color-scheme: light) {\n  :root {\n    @include color_mode.color_theme_light;\n    @include color_mode.code_theme_light;\n  }\n}\n\n:root[color-theme=\"dark\"] {\n  @include color_mode.color_theme_dark;\n  @include color_mode.code_theme_dark;\n}\n\n:root[code-theme=\"dark\"] {\n  @include color_mode.code_theme_dark;\n}\n\n@media (prefers-color-scheme: dark) {\n  :root {\n    @include color_mode.color_theme_dark;\n    @include color_mode.code_theme_dark;\n  }\n}\n\nhtml {\n  font-size: defaults.$font-size-base;\n  letter-spacing: 0.33px;\n  scroll-behavior: smooth;\n\n  &.color-toggle-hidden {\n    #gdoc-color-theme {\n      display: none;\n    }\n  }\n\n  &.color-toggle-light {\n    #gdoc-color-theme {\n      .gdoc_brightness_light {\n        display: inline-block;\n      }\n      .gdoc_brightness_auto,\n      .gdoc_brightness_dark {\n        display: none;\n      }\n    }\n  }\n\n  &.color-toggle-dark {\n    #gdoc-color-theme {\n      .gdoc_brightness_dark {\n        display: inline-block;\n      }\n      .gdoc_brightness_auto,\n      .gdoc_brightness_light {\n        display: none;\n      }\n    }\n  }\n\n  &.color-toggle-auto {\n    #gdoc-color-theme {\n      .gdoc_brightness_light {\n        display: none;\n      }\n      .gdoc_brightness_dark {\n        display: none;\n      }\n      .gdoc_brightness_auto {\n        display: inline-block;\n      }\n    }\n  }\n}\n\nhtml,\nbody {\n  min-width: defaults.$body-min-width;\n  overflow-x: hidden;\n}\n\nbody {\n  text-rendering: optimizeLegibility;\n  -webkit-font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale;\n\n  box-sizing: border-box;\n  * {\n    box-sizing: inherit;\n  }\n\n  #gdoc-to-main {\n    position: absolute;\n    margin: defaults.$padding-8 0;\n    padding: defaults.$padding-8;\n\n    display: inline-block;\n    background-color: var(--accent-color-lite);\n    border-radius: defaults.$border-radius;\n    border: defaults.$border-1 solid var(--accent-color);\n\n    transform: translateY(0);\n    transition: transform 250ms ease-in;\n\n    &:not(:focus) {\n      transform: translateY(-#{defaults.$padding-64});\n    }\n  }\n}\n\nh1,\nh2,\nh3,\nh4,\nh5,\nh6 {\n  font-weight: defaults.$body-font-weight;\n  display: flex;\n  align-items: center;\n}\n\nh4,\nh5,\nh6 {\n  font-size: defaults.$font-size-16 !important;\n}\n\na {\n  text-decoration: none;\n  color: var(--link-color);\n\n  &:hover {\n    text-decoration: underline;\n  }\n\n  &:visited {\n    color: var(--link-color-visited);\n  }\n}\n\ni.gdoc-icon {\n  font-family: \"GeekdocIcons\";\n  font-style: normal;\n}\n\nimg {\n  vertical-align: middle;\n}\n\n#gdoc-color-theme {\n  cursor: pointer;\n}\n\n.fake-link:hover {\n  background-image: linear-gradient(var(--link-color), var(--link-color));\n  background-position: 0 100%;\n  background-size: 100% 1px;\n  background-repeat: no-repeat;\n  text-decoration: none;\n}\n\n.wrapper {\n  display: flex;\n  flex-direction: column;\n  min-height: 100vh;\n\n  color: var(--body-font-color);\n  background: var(--body-background);\n\n  font-weight: defaults.$body-font-weight;\n}\n\n.container {\n  width: 100%;\n  max-width: defaults.$container-max-width;\n  margin: 0 auto;\n  padding: defaults.$padding-20;\n}\n\nsvg.gdoc-icon {\n  display: inline-block;\n  width: defaults.$font-size-20;\n  height: defaults.$font-size-20;\n  vertical-align: middle;\n  stroke-width: 0;\n  stroke: currentColor;\n  fill: currentColor;\n  position: relative;\n}\n\n.gdoc-header {\n  background: var(--header-background);\n  color: var(--header-font-color);\n  border-bottom: 0.3em solid var(--footer-background);\n\n  &__link,\n  &__link:visited {\n    color: var(--header-font-color);\n  }\n\n  &__link:hover {\n    text-decoration: none;\n  }\n\n  svg.gdoc-icon {\n    width: defaults.$font-size-32;\n    height: defaults.$font-size-32;\n  }\n}\n\n.gdoc-brand {\n  &__img {\n    width: defaults.$padding-32;\n    height: defaults.$padding-32;\n  }\n\n  &__title {\n    font-size: defaults.$font-size-24;\n    line-height: defaults.$font-size-24;\n  }\n\n  &__subtitle {\n    font-size: defaults.$font-size-12;\n  }\n}\n\n.gdoc-menu-header {\n  &__items {\n    display: flex;\n\n    > span {\n      margin-left: defaults.$padding-8;\n    }\n  }\n\n  &__control,\n  &__home {\n    display: none;\n\n    svg.gdoc-icon {\n      cursor: pointer;\n    }\n  }\n}\n\n.gdoc-nav {\n  flex: 0 0 defaults.$menu-width;\n\n  nav {\n    width: defaults.$menu-width;\n    padding: defaults.$padding-16 defaults.$padding-32 defaults.$padding-16 0;\n\n    > ul > li > * {\n      font-weight: normal;\n    }\n\n    section {\n      margin-top: defaults.$padding-32;\n    }\n  }\n\n  &__control {\n    display: none;\n    margin: 0;\n    padding: 0;\n\n    svg.gdoc-icon {\n      cursor: pointer;\n    }\n\n    svg.gdoc-icon.gdoc_menu {\n      display: inline-block;\n    }\n\n    svg.gdoc-icon.gdoc_arrow_back {\n      display: none;\n    }\n  }\n\n  &__list {\n    padding-left: defaults.$padding-16;\n    margin: 0;\n    padding: 0;\n    list-style: none;\n    user-select: none;\n\n    ul {\n      padding-left: defaults.$padding-16;\n    }\n\n    li {\n      margin: defaults.$padding-12 0;\n    }\n\n    svg.gdoc-icon {\n      margin-right: defaults.$padding-4;\n    }\n  }\n\n  &__toggle {\n    display: none;\n\n    & ~ label {\n      cursor: pointer;\n\n      svg.gdoc-icon.toggle {\n        width: defaults.$font-size-16;\n        height: defaults.$font-size-16;\n      }\n    }\n\n    &:not(:checked) {\n      & ~ ul,\n      & ~ label svg.gdoc-icon.gdoc_keyboard_arrow_down {\n        display: none;\n      }\n      & ~ label svg.gdoc-icon.gdoc_keyboard_arrow_left {\n        display: block;\n      }\n    }\n\n    &:checked {\n      & ~ ul,\n      & ~ label svg.gdoc-icon.gdoc_keyboard_arrow_down {\n        display: block;\n      }\n\n      & ~ label svg.gdoc-icon.gdoc_keyboard_arrow_left {\n        display: none;\n      }\n    }\n  }\n\n  &--main > ul > li > span,\n  &--main > ul > li > span > a,\n  &--main > ul > li > label,\n  &--main > ul > li > label > a {\n    font-weight: bold;\n  }\n}\n\n.gdoc-nav__entry,\n.gdoc-language__entry {\n  flex: 1;\n  color: var(--body-font-color);\n\n  &:hover,\n  &.is-active {\n    text-decoration: underline;\n    text-decoration-style: dashed !important;\n  }\n\n  &:visited {\n    color: var(--body-font-color);\n  }\n}\n\n.gdoc-search__list,\n.gdoc-language__list {\n  background: var(--body-background);\n  border-radius: defaults.$border-radius;\n  box-shadow:\n    0 1px 3px 0 var(--accent-color),\n    0 1px 2px 0 var(--accent-color-lite);\n  position: absolute;\n  margin: 0;\n  padding: defaults.$padding-8 defaults.$padding-4 !important;\n  list-style: none;\n  top: calc(100% + #{defaults.$padding-8});\n  z-index: 2;\n}\n\n.gdoc-page {\n  min-width: calc(defaults.$body-min-width - defaults.$padding-32);\n  flex-grow: 1;\n  padding: defaults.$padding-16 0;\n\n  h1,\n  h2,\n  h3,\n  h4,\n  h5,\n  h6 {\n    font-weight: 600;\n  }\n\n  &__header,\n  &__footer {\n    margin-bottom: defaults.$padding-24;\n\n    svg.gdoc-icon {\n      color: var(--control-icons);\n    }\n\n    a,\n    a:visited {\n      color: var(--link-color);\n    }\n  }\n\n  &__header {\n    background: var(--accent-color-lite);\n    padding: defaults.$padding-8 defaults.$padding-16;\n    border-radius: defaults.$border-radius;\n  }\n\n  &__nav {\n    &:hover {\n      background-image: linear-gradient(var(--link-color), var(--link-color));\n      background-position: 0 100%;\n      background-size: 100% 1px;\n      background-repeat: no-repeat;\n    }\n  }\n\n  &__anchorwrap {\n    gap: 0.5em;\n\n    &:hover .gdoc-page__anchor svg.gdoc-icon {\n      color: var(--control-icons);\n    }\n  }\n\n  &__anchor {\n    svg.gdoc-icon {\n      width: 1.85em;\n      height: 1.85em;\n      color: transparent;\n      transition: color 0.2s ease-in-out;\n    }\n\n    &:focus {\n      svg.gdoc-icon {\n        color: var(--control-icons);\n      }\n    }\n  }\n\n  &__footer {\n    margin-top: defaults.$padding-32;\n\n    a:hover {\n      text-decoration: none;\n    }\n  }\n}\n\n.gdoc-post {\n  word-wrap: break-word;\n  border-top: 1px dashed defaults.$gray-600;\n  padding: defaults.$padding-32 0;\n\n  &:first-of-type {\n    padding-top: 0;\n  }\n\n  &__header {\n    h1 {\n      margin-top: 0;\n    }\n\n    a,\n    a:visited {\n      color: var(--body-font-color);\n      text-decoration: none;\n    }\n\n    a:hover {\n      background: none;\n      text-decoration: underline;\n      color: var(--body-font-color);\n    }\n  }\n\n  &:first-child {\n    border-top: 0;\n\n    h1 {\n      margin-top: 0;\n    }\n  }\n\n  &__readmore {\n    margin: defaults.$padding-32 0;\n\n    a,\n    a:hover,\n    a:visited {\n      color: var(--link-color);\n      text-decoration: none !important;\n    }\n  }\n\n  &__meta {\n    span svg.gdoc-icon {\n      margin-left: -5px;\n    }\n\n    > span {\n      margin: defaults.$padding-4 0;\n      &:not(:last-child) {\n        margin-right: defaults.$padding-8;\n      }\n    }\n\n    svg.gdoc-icon {\n      font-size: defaults.$font-size-20;\n    }\n\n    .gdoc-button {\n      margin: 0 defaults.$padding-2 0 0;\n    }\n\n    &--head {\n      margin-bottom: defaults.$padding-32;\n    }\n  }\n\n  &__codecontainer {\n    position: relative;\n\n    &:hover > .gdoc-post__codecopy {\n      opacity: 1;\n      visibility: visible;\n      pointer-events: auto;\n    }\n  }\n\n  &__codecopy {\n    opacity: 0;\n    visibility: hidden;\n    transition:\n      opacity 0.2s ease,\n      visibility 0.2s ease;\n    pointer-events: none;\n\n    position: absolute;\n    top: defaults.$padding-8;\n    right: defaults.$padding-8;\n\n    border: defaults.$border-2 solid var(--code-copy-border-color);\n    border-radius: defaults.$border-radius;\n    background: var(--code-copy-background);\n    width: defaults.$padding-32;\n    height: defaults.$padding-32;\n\n    svg.gdoc-icon {\n      top: 0;\n      width: defaults.$font-size-20;\n      height: defaults.$font-size-20;\n      color: var(--code-copy-font-color);\n    }\n\n    &:hover {\n      cursor: pointer;\n    }\n\n    &--success {\n      border-color: var(--code-copy-success-color);\n\n      svg.gdoc-icon {\n        color: var(--code-copy-success-color);\n      }\n    }\n\n    &--out {\n      transition: visibility 2s ease-out;\n    }\n  }\n}\n\n.gdoc-footer {\n  background: var(--footer-background);\n  color: var(--footer-font-color);\n\n  .fake-link {\n    text-decoration: none;\n\n    &:hover {\n      background-image: linear-gradient(var(--footer-link-color), var(--footer-link-color));\n    }\n  }\n\n  &__item {\n    line-height: defaults.$padding-32;\n\n    &--row {\n      margin-right: defaults.$padding-16;\n    }\n  }\n\n  &__link {\n    text-decoration: underline;\n    color: var(--footer-link-color);\n\n    &:hover {\n      text-decoration: none;\n    }\n\n    &:visited {\n      color: var(--footer-link-color-visited);\n    }\n  }\n}\n\n.gdoc-search {\n  position: relative;\n\n  svg.gdoc-icon {\n    position: absolute;\n    left: defaults.$padding-8;\n    color: var(--control-icons);\n    width: defaults.$font-size-20;\n    height: defaults.$font-size-20;\n  }\n\n  &::after {\n    display: block;\n    content: \"\";\n    clear: both;\n  }\n\n  &__input {\n    width: 100%;\n    padding: defaults.$padding-8;\n    padding-left: defaults.$padding-32;\n\n    transition:\n      border-color 0.15s ease-in-out,\n      box-shadow 0.15s ease-in-out;\n    border: 1px solid transparent;\n    border-radius: defaults.$border-radius;\n\n    background: var(--accent-color-lite);\n    color: var(--body-font-color);\n\n    &:focus {\n      outline: none !important;\n      border: 1px solid var(--accent-color);\n    }\n  }\n\n  &__list {\n    visibility: hidden;\n    left: 0;\n    width: 100%;\n\n    ul {\n      list-style: none;\n      padding-left: 0;\n    }\n\n    > li > span {\n      font-weight: bold;\n    }\n\n    > li + li {\n      margin-top: defaults.$padding-4;\n    }\n\n    svg.gdoc-icon {\n      margin-right: defaults.$padding-4;\n    }\n  }\n\n  &__section {\n    display: flex;\n    flex-direction: column;\n    padding: defaults.$padding-4 !important;\n  }\n\n  &__entry {\n    display: flex;\n    flex-direction: column;\n    color: var(--body-font-color);\n    padding: defaults.$padding-4 !important;\n    border-radius: defaults.$border-radius;\n\n    &:hover,\n    &.is-active {\n      background: var(--accent-color-lite);\n      text-decoration: none;\n\n      .gdoc-search__entry--title {\n        text-decoration-style: dashed !important;\n        text-decoration: underline;\n      }\n    }\n\n    &:visited {\n      color: var(--body-font-color);\n    }\n\n    &--description {\n      font-size: defaults.$font-size-14;\n      font-style: italic;\n    }\n  }\n\n  &:focus-within &__list.has-hits,\n  &__list.has-hits:hover {\n    visibility: visible;\n  }\n}\n\n.gdoc-language {\n  &__selector {\n    position: relative;\n    list-style: none;\n    user-select: none;\n    cursor: pointer;\n    margin: 0;\n    padding: 0;\n    width: 100%;\n\n    &:focus,\n    &:focus-within,\n    &:active {\n      .gdoc-language__list {\n        display: block;\n      }\n    }\n  }\n\n  &__list {\n    display: none;\n    right: 0;\n    width: auto;\n    white-space: nowrap;\n  }\n}\n\n.gdoc-paging {\n  padding: defaults.$padding-16 0;\n\n  &__item {\n    flex: 1 1 0;\n\n    a:visited {\n      color: var(--link-color);\n    }\n\n    a:hover,\n    a:visited:hover {\n      background: var(--link-color);\n      color: defaults.$gray-100;\n    }\n\n    &--next {\n      text-align: right;\n    }\n\n    &--prev {\n      text-align: left;\n    }\n  }\n}\n\n.gdoc-error {\n  padding: defaults.$padding-96 defaults.$padding-16;\n  margin: 0 auto;\n  max-width: 45em;\n\n  svg.gdoc-icon {\n    width: defaults.$font-size-128;\n    height: defaults.$font-size-128;\n    color: var(--body-font-color);\n  }\n\n  &__link,\n  &__link:visited {\n    text-decoration: underline;\n    color: var(--link-color);\n  }\n\n  &__message {\n    padding-left: defaults.$padding-64;\n  }\n\n  &__line {\n    padding: defaults.$padding-8 0;\n  }\n\n  &__title {\n    font-size: defaults.$font-size-64;\n  }\n\n  &__code {\n    font-weight: bolder;\n  }\n}\n\n.gdoc-toc {\n  margin: defaults.$padding-16 0;\n\n  li {\n    margin: defaults.$padding-4 0;\n  }\n\n  // Classes to hide nested levels of ToC/Menu\n  &__level--1 ul ul,\n  &__level--2 ul ul ul,\n  &__level--3 ul ul ul ul,\n  &__level--4 ul ul ul ul ul,\n  &__level--5 ul ul ul ul ul ul,\n  &__level--6 ul ul ul ul ul ul ul {\n    display: none;\n  }\n\n  a,\n  a:visited {\n    text-decoration: none !important;\n    color: var(--link-color);\n  }\n}\n\n// Responsive styles\n.gdoc-nav nav,\n.gdoc-page,\n.markdown {\n  transition: 0.2s ease-in-out;\n  transition-property: transform, margin-left, opacity;\n  will-change: transform, margin-left;\n}\n\n// Breadcrumbs styles\n.breadcrumb {\n  display: inline;\n  padding: 0;\n  margin: 0;\n\n  li {\n    display: inline;\n  }\n}\n"
  },
  {
    "path": "src/sass/_chroma_base.scss",
    "content": "@use \"defaults\";\n\n@mixin chroma_base {\n  .chroma {\n    color: var(--code-font-color);\n  }\n  .chroma .lntable td:nth-child(2) code .hl {\n    width: auto;\n    margin-left: -0.5em;\n    padding: 0 0.5em;\n  }\n\n  .highlight {\n    pre.chroma {\n      width: 100%;\n      overflow: auto;\n      max-height: var(--code-max-height);\n    }\n  }\n\n  /* LineTable */\n  .chroma .lntable {\n    border-radius: defaults.$border-radius;\n    border-spacing: 0;\n    padding: 0;\n    margin: 0;\n    width: 100%;\n    display: block;\n    max-height: var(--code-max-height);\n    overflow: auto;\n\n    pre.chroma {\n      max-height: none;\n      border-radius: 0;\n      margin: 0;\n    }\n  }\n  .chroma .lntable td:first-child {\n    code {\n      background-color: var(--code-accent-color-lite);\n      font-size: defaults.$font-size-12;\n      padding-left: 0;\n      padding-right: 0;\n      border-radius: 0;\n    }\n  }\n  .chroma .lntable td:nth-child(2) {\n    width: 100%;\n    margin-left: defaults.$padding-32;\n  }\n}\n"
  },
  {
    "path": "src/sass/_chroma_dark.scss",
    "content": "@use \"chroma_base\";\n\n@mixin chroma_dark {\n  /* Theme: Dracula */\n  /* Background */\n  @include chroma_base.chroma_base;\n\n  /* Other */\n  .chroma .x {\n    color: inherit;\n  }\n  /* Error */\n  .chroma .err {\n    color: inherit;\n  }\n  /* LineTableTD */\n  .chroma .lntd {\n    vertical-align: top;\n    padding: 0;\n    margin: 0;\n    border: 0;\n  }\n  /* LineHighlight */\n  .chroma .hl {\n    display: block;\n    width: 100%;\n    background-color: #4f1605;\n  }\n  /* LineNumbersTable */\n  .chroma .lnt {\n    padding: 0 0.8em;\n  }\n  /* LineNumbers */\n  .chroma .ln {\n    margin-right: 0.4em;\n    padding: 0 0.4em 0 0.4em;\n    color: #b3b3b3;\n  }\n  /* Keyword */\n  .chroma .k {\n    color: #ff79c6;\n  }\n  /* KeywordConstant */\n  .chroma .kc {\n    color: #ff79c6;\n  }\n  /* KeywordDeclaration */\n  .chroma .kd {\n    color: #8be9fd;\n    font-style: italic;\n  }\n  /* KeywordNamespace */\n  .chroma .kn {\n    color: #ff79c6;\n  }\n  /* KeywordPseudo */\n  .chroma .kp {\n    color: #ff79c6;\n  }\n  /* KeywordReserved */\n  .chroma .kr {\n    color: #ff79c6;\n  }\n  /* KeywordType */\n  .chroma .kt {\n    color: #8be9fd;\n  }\n  /* Name */\n  .chroma .n {\n    color: inherit;\n  }\n  /* NameAttribute */\n  .chroma .na {\n    color: #50fa7b;\n  }\n  /* NameBuiltin */\n  .chroma .nb {\n    color: #8be9fd;\n    font-style: italic;\n  }\n  /* NameBuiltinPseudo */\n  .chroma .bp {\n    color: inherit;\n  }\n  /* NameClass */\n  .chroma .nc {\n    color: #50fa7b;\n  }\n  /* NameConstant */\n  .chroma .no {\n    color: inherit;\n  }\n  /* NameDecorator */\n  .chroma .nd {\n    color: inherit;\n  }\n  /* NameEntity */\n  .chroma .ni {\n    color: inherit;\n  }\n  /* NameException */\n  .chroma .ne {\n    color: inherit;\n  }\n  /* NameFunction */\n  .chroma .nf {\n    color: #50fa7b;\n  }\n  /* NameFunctionMagic */\n  .chroma .fm {\n    color: inherit;\n  }\n  /* NameLabel */\n  .chroma .nl {\n    color: #8be9fd;\n    font-style: italic;\n  }\n  /* NameNamespace */\n  .chroma .nn {\n    color: inherit;\n  }\n  /* NameOther */\n  .chroma .nx {\n    color: inherit;\n  }\n  /* NameProperty */\n  .chroma .py {\n    color: inherit;\n  }\n  /* NameTag */\n  .chroma .nt {\n    color: #ff79c6;\n  }\n  /* NameVariable */\n  .chroma .nv {\n    color: #8be9fd;\n    font-style: italic;\n  }\n  /* NameVariableClass */\n  .chroma .vc {\n    color: #8be9fd;\n    font-style: italic;\n  }\n  /* NameVariableGlobal */\n  .chroma .vg {\n    color: #8be9fd;\n    font-style: italic;\n  }\n  /* NameVariableInstance */\n  .chroma .vi {\n    color: #8be9fd;\n    font-style: italic;\n  }\n  /* NameVariableMagic */\n  .chroma .vm {\n    color: inherit;\n  }\n  /* Literal */\n  .chroma .l {\n    color: inherit;\n  }\n  /* LiteralDate */\n  .chroma .ld {\n    color: inherit;\n  }\n  /* LiteralString */\n  .chroma .s {\n    color: #f1fa8c;\n  }\n  /* LiteralStringAffix */\n  .chroma .sa {\n    color: #f1fa8c;\n  }\n  /* LiteralStringBacktick */\n  .chroma .sb {\n    color: #f1fa8c;\n  }\n  /* LiteralStringChar */\n  .chroma .sc {\n    color: #f1fa8c;\n  }\n  /* LiteralStringDelimiter */\n  .chroma .dl {\n    color: #f1fa8c;\n  }\n  /* LiteralStringDoc */\n  .chroma .sd {\n    color: #f1fa8c;\n  }\n  /* LiteralStringDouble */\n  .chroma .s2 {\n    color: #f1fa8c;\n  }\n  /* LiteralStringEscape */\n  .chroma .se {\n    color: #f1fa8c;\n  }\n  /* LiteralStringHeredoc */\n  .chroma .sh {\n    color: #f1fa8c;\n  }\n  /* LiteralStringInterpol */\n  .chroma .si {\n    color: #f1fa8c;\n  }\n  /* LiteralStringOther */\n  .chroma .sx {\n    color: #f1fa8c;\n  }\n  /* LiteralStringRegex */\n  .chroma .sr {\n    color: #f1fa8c;\n  }\n  /* LiteralStringSingle */\n  .chroma .s1 {\n    color: #f1fa8c;\n  }\n  /* LiteralStringSymbol */\n  .chroma .ss {\n    color: #f1fa8c;\n  }\n  /* LiteralNumber */\n  .chroma .m {\n    color: #bd93f9;\n  }\n  /* LiteralNumberBin */\n  .chroma .mb {\n    color: #bd93f9;\n  }\n  /* LiteralNumberFloat */\n  .chroma .mf {\n    color: #bd93f9;\n  }\n  /* LiteralNumberHex */\n  .chroma .mh {\n    color: #bd93f9;\n  }\n  /* LiteralNumberInteger */\n  .chroma .mi {\n    color: #bd93f9;\n  }\n  /* LiteralNumberIntegerLong */\n  .chroma .il {\n    color: #bd93f9;\n  }\n  /* LiteralNumberOct */\n  .chroma .mo {\n    color: #bd93f9;\n  }\n  /* Operator */\n  .chroma .o {\n    color: #ff79c6;\n  }\n  /* OperatorWord */\n  .chroma .ow {\n    color: #ff79c6;\n  }\n  /* Punctuation */\n  .chroma .p {\n    color: inherit;\n  }\n  /* Comment */\n  .chroma .c {\n    color: #96a6d8;\n  }\n  /* CommentHashbang */\n  .chroma .ch {\n    color: #96a6d8;\n  }\n  /* CommentMultiline */\n  .chroma .cm {\n    color: #96a6d8;\n  }\n  /* CommentSingle */\n  .chroma .c1 {\n    color: #96a6d8;\n  }\n  /* CommentSpecial */\n  .chroma .cs {\n    color: #96a6d8;\n  }\n  /* CommentPreproc */\n  .chroma .cp {\n    color: #ff79c6;\n  }\n  /* CommentPreprocFile */\n  .chroma .cpf {\n    color: #ff79c6;\n  }\n  /* Generic */\n  .chroma .g {\n    color: inherit;\n  }\n  /* GenericDeleted */\n  .chroma .gd {\n    color: #d98f90;\n  }\n  /* GenericEmph */\n  .chroma .ge {\n    text-decoration: underline;\n  }\n  /* GenericError */\n  .chroma .gr {\n    color: inherit;\n  }\n  /* GenericHeading */\n  .chroma .gh {\n    font-weight: bold;\n    color: inherit;\n  }\n  /* GenericInserted */\n  .chroma .gi {\n    font-weight: bold;\n  }\n  /* GenericOutput */\n  .chroma .go {\n    color: #8f9ea8;\n  }\n  /* GenericPrompt */\n  .chroma .gp {\n    color: inherit;\n  }\n  /* GenericStrong */\n  .chroma .gs {\n    color: inherit;\n  }\n  /* GenericSubheading */\n  .chroma .gu {\n    font-weight: bold;\n  }\n  /* GenericTraceback */\n  .chroma .gt {\n    color: inherit;\n  }\n  /* GenericUnderline */\n  .chroma .gl {\n    text-decoration: underline;\n  }\n  /* TextWhitespace */\n  .chroma .w {\n    color: inherit;\n  }\n}\n"
  },
  {
    "path": "src/sass/_chroma_light.scss",
    "content": "@use \"chroma_base\";\n\n@mixin chroma_github {\n  /* Theme: GitHub */\n  /* Background */\n  @include chroma_base.chroma_base;\n\n  /* Other */\n  .chroma .x {\n    color: inherit;\n  }\n  /* Error */\n  .chroma .err {\n    color: #a61717;\n    background-color: #e3d2d2;\n  }\n  /* LineTableTD */\n  .chroma .lntd {\n    vertical-align: top;\n    padding: 0;\n    margin: 0;\n    border: 0;\n  }\n  /* LineHighlight */\n  .chroma .hl {\n    display: block;\n    width: 100%;\n    background-color: #ffffcc;\n  }\n  /* LineNumbersTable */\n  .chroma .lnt {\n    padding: 0 0.8em;\n  }\n  /* LineNumbers */\n  .chroma .ln {\n    margin-right: 0.4em;\n    padding: 0 0.4em 0 0.4em;\n  }\n  /* Keyword */\n  .chroma .k {\n    color: #000000;\n    font-weight: bold;\n  }\n  /* KeywordConstant */\n  .chroma .kc {\n    color: #000000;\n    font-weight: bold;\n  }\n  /* KeywordDeclaration */\n  .chroma .kd {\n    color: #000000;\n    font-weight: bold;\n  }\n  /* KeywordNamespace */\n  .chroma .kn {\n    color: #000000;\n    font-weight: bold;\n  }\n  /* KeywordPseudo */\n  .chroma .kp {\n    color: #000000;\n    font-weight: bold;\n  }\n  /* KeywordReserved */\n  .chroma .kr {\n    color: #000000;\n    font-weight: bold;\n  }\n  /* KeywordType */\n  .chroma .kt {\n    color: #445588;\n    font-weight: bold;\n  }\n  /* Name */\n  .chroma .n {\n    color: inherit;\n  }\n  /* NameAttribute */\n  .chroma .na {\n    color: #006767;\n  }\n  /* NameBuiltin */\n  .chroma .nb {\n    color: #556165;\n  }\n  /* NameBuiltinPseudo */\n  .chroma .bp {\n    color: #676767;\n  }\n  /* NameClass */\n  .chroma .nc {\n    color: #445588;\n    font-weight: bold;\n  }\n  /* NameConstant */\n  .chroma .no {\n    color: #006767;\n  }\n  /* NameDecorator */\n  .chroma .nd {\n    color: #3c5d5d;\n    font-weight: bold;\n  }\n  /* NameEntity */\n  .chroma .ni {\n    color: #800080;\n  }\n  /* NameException */\n  .chroma .ne {\n    color: #990000;\n    font-weight: bold;\n  }\n  /* NameFunction */\n  .chroma .nf {\n    color: #990000;\n    font-weight: bold;\n  }\n  /* NameFunctionMagic */\n  .chroma .fm {\n    color: inherit;\n  }\n  /* NameLabel */\n  .chroma .nl {\n    color: #990000;\n    font-weight: bold;\n  }\n  /* NameNamespace */\n  .chroma .nn {\n    color: #555555;\n  }\n  /* NameOther */\n  .chroma .nx {\n    color: inherit;\n  }\n  /* NameProperty */\n  .chroma .py {\n    color: inherit;\n  }\n  /* NameTag */\n  .chroma .nt {\n    color: #000080;\n  }\n  /* NameVariable */\n  .chroma .nv {\n    color: #006767;\n  }\n  /* NameVariableClass */\n  .chroma .vc {\n    color: #006767;\n  }\n  /* NameVariableGlobal */\n  .chroma .vg {\n    color: #006767;\n  }\n  /* NameVariableInstance */\n  .chroma .vi {\n    color: #006767;\n  }\n  /* NameVariableMagic */\n  .chroma .vm {\n    color: inherit;\n  }\n  /* Literal */\n  .chroma .l {\n    color: inherit;\n  }\n  /* LiteralDate */\n  .chroma .ld {\n    color: inherit;\n  }\n  /* LiteralString */\n  .chroma .s {\n    color: #dd1144;\n  }\n  /* LiteralStringAffix */\n  .chroma .sa {\n    color: #dd1144;\n  }\n  /* LiteralStringBacktick */\n  .chroma .sb {\n    color: #dd1144;\n  }\n  /* LiteralStringChar */\n  .chroma .sc {\n    color: #dd1144;\n  }\n  /* LiteralStringDelimiter */\n  .chroma .dl {\n    color: #dd1144;\n  }\n  /* LiteralStringDoc */\n  .chroma .sd {\n    color: #dd1144;\n  }\n  /* LiteralStringDouble */\n  .chroma .s2 {\n    color: #dd1144;\n  }\n  /* LiteralStringEscape */\n  .chroma .se {\n    color: #dd1144;\n  }\n  /* LiteralStringHeredoc */\n  .chroma .sh {\n    color: #dd1144;\n  }\n  /* LiteralStringInterpol */\n  .chroma .si {\n    color: #dd1144;\n  }\n  /* LiteralStringOther */\n  .chroma .sx {\n    color: #dd1144;\n  }\n  /* LiteralStringRegex */\n  .chroma .sr {\n    color: #009926;\n  }\n  /* LiteralStringSingle */\n  .chroma .s1 {\n    color: #dd1144;\n  }\n  /* LiteralStringSymbol */\n  .chroma .ss {\n    color: #990073;\n  }\n  /* LiteralNumber */\n  .chroma .m {\n    color: #027e83;\n  }\n  /* LiteralNumberBin */\n  .chroma .mb {\n    color: #027e83;\n  }\n  /* LiteralNumberFloat */\n  .chroma .mf {\n    color: #027e83;\n  }\n  /* LiteralNumberHex */\n  .chroma .mh {\n    color: #027e83;\n  }\n  /* LiteralNumberInteger */\n  .chroma .mi {\n    color: #027e83;\n  }\n  /* LiteralNumberIntegerLong */\n  .chroma .il {\n    color: #027e83;\n  }\n  /* LiteralNumberOct */\n  .chroma .mo {\n    color: #027e83;\n  }\n  /* Operator */\n  .chroma .o {\n    color: #000000;\n    font-weight: bold;\n  }\n  /* OperatorWord */\n  .chroma .ow {\n    color: #000000;\n    font-weight: bold;\n  }\n  /* Punctuation */\n  .chroma .p {\n    color: inherit;\n  }\n  /* Comment */\n  .chroma .c {\n    color: #676765;\n    font-style: italic;\n  }\n  /* CommentHashbang */\n  .chroma .ch {\n    color: #676765;\n    font-style: italic;\n  }\n  /* CommentMultiline */\n  .chroma .cm {\n    color: #676765;\n    font-style: italic;\n  }\n  /* CommentSingle */\n  .chroma .c1 {\n    color: #676765;\n    font-style: italic;\n  }\n  /* CommentSpecial */\n  .chroma .cs {\n    color: #676767;\n    font-weight: bold;\n    font-style: italic;\n  }\n  /* CommentPreproc */\n  .chroma .cp {\n    color: #676767;\n    font-weight: bold;\n    font-style: italic;\n  }\n  /* CommentPreprocFile */\n  .chroma .cpf {\n    color: #676767;\n    font-weight: bold;\n    font-style: italic;\n  }\n  /* Generic */\n  .chroma .g {\n    color: inherit;\n  }\n  /* GenericDeleted */\n  .chroma .gd {\n    color: #000000;\n    background-color: #ffdddd;\n  }\n  /* GenericEmph */\n  .chroma .ge {\n    color: #000000;\n    font-style: italic;\n  }\n  /* GenericError */\n  .chroma .gr {\n    color: #aa0000;\n  }\n  /* GenericHeading */\n  .chroma .gh {\n    color: #676767;\n  }\n  /* GenericInserted */\n  .chroma .gi {\n    color: #000000;\n    background-color: #ddffdd;\n  }\n  /* GenericOutput */\n  .chroma .go {\n    color: #6f6f6f;\n  }\n  /* GenericPrompt */\n  .chroma .gp {\n    color: #555555;\n  }\n  /* GenericStrong */\n  .chroma .gs {\n    font-weight: bold;\n  }\n  /* GenericSubheading */\n  .chroma .gu {\n    color: #5f5f5f;\n  }\n  /* GenericTraceback */\n  .chroma .gt {\n    color: #aa0000;\n  }\n  /* GenericUnderline */\n  .chroma .gl {\n    text-decoration: underline;\n  }\n  /* TextWhitespace */\n  .chroma .w {\n    color: #bbbbbb;\n  }\n}\n"
  },
  {
    "path": "src/sass/_color_mode.scss",
    "content": "@use \"sass:color\";\n@use \"sass:map\";\n@use \"chroma_dark\";\n@use \"chroma_light\";\n@use \"defaults\";\n\n@mixin color_theme_light {\n  --header-background: #{defaults.$main-color};\n  --header-font-color: #{defaults.$white};\n\n  --body-background: #{defaults.$body-background};\n  --body-font-color: #{defaults.$body-font-color};\n\n  --mark-color: #{defaults.$mark-color};\n\n  --button-background: #{color.scale(defaults.$main-color, $lightness: 15%)};\n  --button-border-color: #{defaults.$main-color};\n\n  --link-color: #{defaults.$link-color};\n  --link-color-visited: #{defaults.$link-color-visited};\n\n  --accent-color: #{defaults.$gray-200};\n  --accent-color-lite: #{defaults.$gray-100};\n\n  --control-icons: #{color.scale(defaults.$body-font-color, $lightness: 40%)};\n\n  --footer-background: #{defaults.$second-color};\n  --footer-font-color: #{defaults.$white};\n  --footer-link-color: #{defaults.$link-color-footer};\n  --footer-link-color-visited: #{defaults.$link-color-footer};\n\n  .dark-mode-dim .gdoc-markdown {\n    img {\n      filter: none;\n    }\n  }\n}\n\n@mixin color_theme_dark {\n  --header-background: #{defaults.$main-color};\n  --header-font-color: #{defaults.$white};\n\n  --body-background: #{defaults.$body-background-dark};\n  --body-font-color: #{color.scale(defaults.$body-background-dark, $lightness: 70%)};\n\n  --mark-color: #{defaults.$mark-color};\n\n  --button-background: #{color.scale(defaults.$main-color, $lightness: 15%)};\n  --button-border-color: #{defaults.$main-color};\n\n  --link-color: #{defaults.$link-color-dark};\n  --link-color-visited: #{defaults.$link-color-visited-dark};\n\n  --accent-color: #{color.scale(defaults.$body-background-dark, $lightness: -30%)};\n  --accent-color-lite: #{color.scale(defaults.$body-background-dark, $lightness: -15%)};\n\n  --control-icons: #{color.scale(defaults.$body-font-color, $lightness: 40%)};\n\n  --footer-background: #{defaults.$second-color};\n  --footer-font-color: #{defaults.$white};\n  --footer-link-color: #{defaults.$link-color-footer};\n  --footer-link-color-visited: #{defaults.$link-color-footer};\n\n  .dark-mode-dim {\n    .gdoc-markdown img {\n      filter: brightness(0.75) grayscale(0.2);\n    }\n  }\n}\n\n@mixin code_theme_dark {\n  @include chroma_dark.chroma_dark;\n\n  & {\n    --code-background: #{defaults.$code-background-dark};\n    --code-accent-color: #{color.scale(defaults.$code-background-dark, $lightness: -30%)};\n    --code-accent-color-lite: #{color.scale(defaults.$code-background-dark, $lightness: -15%)};\n    --code-font-color: #{defaults.$gray-300};\n\n    --code-copy-background: #{defaults.$code-background-dark};\n    --code-copy-font-color: #{color.scale(defaults.$code-font-color-dark, $lightness: -15%)};\n    --code-copy-border-color: #{color.scale(defaults.$code-font-color-dark, $lightness: -20%)};\n    --code-copy-success-color: #{color.scale(map.get(defaults.$hint-colors, \"ok\"), $alpha: -55%)};\n  }\n}\n\n@mixin code_theme_light {\n  @include chroma_light.chroma_github;\n\n  & {\n    --code-background: #{defaults.$code-background};\n    --code-accent-color: #{color.scale(defaults.$code-background, $lightness: -45%)};\n    --code-accent-color-lite: #{color.scale(defaults.$code-background, $lightness: -15%)};\n    --code-font-color: #{defaults.$gray-700};\n\n    --code-copy-background: #{defaults.$code-background};\n    --code-copy-font-color: #{defaults.$gray-500};\n    --code-copy-border-color: #{defaults.$gray-400};\n    --code-copy-success-color: #{map.get(defaults.$hint-colors, \"ok\")};\n  }\n}\n"
  },
  {
    "path": "src/sass/_defaults.scss",
    "content": "@use \"sass:color\";\n\n// Used in layout\n$padding-2: 0.125rem !default;\n$padding-4: 0.25rem !default;\n$padding-8: 0.5rem !default;\n$padding-12: 0.75rem !default;\n$padding-16: 1rem !default;\n$padding-20: 1.25rem !default;\n$padding-24: 1.5rem !default;\n$padding-32: 2rem !default;\n$padding-48: 3rem !default;\n$padding-64: 4rem !default;\n$padding-96: 6rem !default;\n\n$font-size-base: 16px !default;\n$font-size-12: 0.75rem !default;\n$font-size-14: 0.875rem !default;\n$font-size-16: 1rem !default;\n$font-size-20: 1.25rem !default;\n$font-size-24: 1.5rem !default;\n$font-size-32: 2rem !default;\n$font-size-64: 4rem !default;\n$font-size-96: 6rem !default;\n$font-size-128: 8rem !default;\n\n$border-1: 1px !default;\n$border-2: 1.5px !default;\n$border-4: 3px !default;\n\n$border-radius: 0.3rem !default;\n\n// Grayscale\n$white: rgba(255, 255, 255, 1) !default;\n$gray-100: rgba(244, 246, 247, 1) !default;\n$gray-200: rgba(217, 219, 221, 1) !default;\n$gray-300: rgba(189, 192, 195, 1) !default;\n$gray-400: rgba(162, 165, 169, 1) !default;\n$gray-500: rgba(134, 137, 142, 1) !default;\n$gray-600: rgba(107, 110, 116, 1) !default;\n$gray-700: rgba(79, 83, 90, 1) !default;\n$gray-800: rgba(52, 56, 64, 1) !default;\n$black: rgba(0, 0, 0, 1) !default;\n\n$link-color: rgba(10, 83, 154, 1) !default;\n$link-color-visited: rgba(119, 73, 191, 1) !default;\n$link-color-footer: rgba(246, 107, 14, 1) !default;\n\n$body-background: white !default;\n$body-font-family: \"Liberation Sans\", sans-serif !default;\n$body-font-color: $gray-800 !default;\n$body-font-weight: normal !default;\n$body-min-width: 20rem !default;\n\n$code-font-family: \"Liberation Mono\", monospace !default;\n$code-font-color: rgba(70, 70, 70, 1) !default;\n$code-font-color-dark: rgba(185, 185, 185, 1) !default;\n\n$container-max-width: 82rem !default;\n\n$main-color: rgba(32, 83, 117, 1) !default;\n$second-color: rgba(17, 43, 60, 1) !default;\n$mark-color: rgba(255, 171, 0, 1) !default;\n\n$body-background-dark: color.mix(color.invert($body-background, 75%), $second-color) !default;\n$body-font-color-dark: $gray-100 !default;\n\n$link-color-dark: rgba(110, 168, 212, 1) !default;\n$link-color-visited-dark: rgba(186, 142, 240) !default;\n\n$code-background: $gray-100 !default;\n$code-background-dark: color.scale($body-background-dark, $lightness: -15%) !default;\n\n$header-font-family: \"Metropolis\", sans-serif !default;\n$header-height: 3.5rem !default;\n$menu-width: 18rem !default;\n\n$sm-breakpoint: $menu-width + $body-min-width + 3rem !default;\n\n// Panel colors\n$hint-colors: (\n  info: rgba(0, 145, 234, 1),\n  note: rgba(0, 145, 234, 1),\n  ok: rgba(0, 200, 83, 1),\n  tip: rgba(0, 200, 83, 1),\n  important: rgba(255, 171, 0, 1),\n  caution: rgba(115, 0, 211, 1),\n  danger: rgba(213, 0, 0, 1),\n  warning: rgba(213, 0, 0, 1)\n) !default;\n\n// Panel colors\n$hint-icons: (\n  info: \"gdoc_info_outline\",\n  note: \"gdoc_info_outline\",\n  ok: \"gdoc_check_circle_outline\",\n  tip: \"gdoc_check_circle_outline\",\n  important: \"gdoc_error_outline\",\n  caution: \"gdoc_dangerous\",\n  danger: \"gdoc_fire\",\n  warning: \"gdoc_fire\"\n) !default;\n"
  },
  {
    "path": "src/sass/_fonts.scss",
    "content": "@font-face {\n  font-family: \"Liberation Sans\";\n  src:\n    url(\"fonts/LiberationSans-Bold.woff2\") format(\"woff2\"),\n    url(\"fonts/LiberationSans-Bold.woff\") format(\"woff\");\n  font-weight: bold;\n  font-style: normal;\n  font-display: swap;\n}\n\n@font-face {\n  font-family: \"Liberation Sans\";\n  src:\n    url(\"fonts/LiberationSans-BoldItalic.woff2\") format(\"woff2\"),\n    url(\"fonts/LiberationSans-BoldItalic.woff\") format(\"woff\");\n  font-weight: bold;\n  font-style: italic;\n  font-display: swap;\n}\n\n@font-face {\n  font-family: \"Liberation Sans\";\n  src:\n    url(\"fonts/LiberationSans-Italic.woff2\") format(\"woff2\"),\n    url(\"fonts/LiberationSans-Italic.woff\") format(\"woff\");\n  font-weight: normal;\n  font-style: italic;\n  font-display: swap;\n}\n\n@font-face {\n  font-family: \"Liberation Sans\";\n  src:\n    url(\"fonts/LiberationSans.woff2\") format(\"woff2\"),\n    url(\"fonts/LiberationSans.woff\") format(\"woff\");\n  font-weight: normal;\n  font-style: normal;\n  font-display: swap;\n}\n\n@font-face {\n  font-family: \"Liberation Mono\";\n  src:\n    url(\"fonts/LiberationMono.woff2\") format(\"woff2\"),\n    url(\"fonts/LiberationMono.woff\") format(\"woff\");\n  font-weight: normal;\n  font-style: normal;\n  font-display: swap;\n}\n\n@font-face {\n  font-family: \"Metropolis\";\n  src:\n    url(\"fonts/Metropolis.woff2\") format(\"woff2\"),\n    url(\"fonts/Metropolis.woff\") format(\"woff\");\n  font-weight: normal;\n  font-style: normal;\n  font-display: swap;\n}\n\n@font-face {\n  font-family: \"GeekdocIcons\";\n  src:\n    url(\"fonts/GeekdocIcons.woff2\") format(\"woff2\"),\n    url(\"fonts/GeekdocIcons.woff\") format(\"woff\");\n  font-weight: normal;\n  font-style: normal;\n  font-display: swap;\n}\n\nbody {\n  font-family: var(--body-font-family);\n}\n\ncode,\n.gdoc-error__title {\n  font-family: var(--code-font-family);\n}\n\n.gdoc-header {\n  font-family: var(--header-font-family);\n}\n"
  },
  {
    "path": "src/sass/_markdown.scss",
    "content": "@use \"defaults\";\n\n.gdoc-markdown {\n  line-height: 1.6rem;\n\n  h1,\n  h2,\n  h3,\n  h4,\n  h5,\n  h6 {\n    font-weight: 600;\n\n    > code {\n      border-top: defaults.$border-4 solid var(--accent-color);\n      font-size: defaults.$font-size-12 !important;\n    }\n  }\n\n  h4,\n  h5,\n  h6 {\n    > code {\n      font-size: defaults.$font-size-14 !important;\n    }\n  }\n\n  b,\n  optgroup,\n  strong {\n    font-weight: bolder;\n  }\n\n  a,\n  &__link {\n    text-decoration: underline;\n    border-bottom: defaults.$border-1 solid transparent;\n    line-height: normal;\n\n    &:hover {\n      text-decoration: none;\n    }\n  }\n\n  &__link--raw {\n    text-decoration: none !important;\n    color: defaults.$body-font-color !important;\n\n    &:hover {\n      text-decoration: none !important;\n    }\n\n    &:visited {\n      color: defaults.$body-font-color !important;\n    }\n  }\n\n  &__link--code {\n    text-decoration: underline;\n    code {\n      color: inherit !important;\n    }\n\n    &:hover {\n      background: none;\n      color: var(--link-color) !important;\n      text-decoration: none;\n    }\n\n    &:visited,\n    &:visited:hover {\n      color: var(--link-color-visited) !important;\n    }\n  }\n\n  &__figure {\n    padding: defaults.$padding-4;\n    margin: defaults.$padding-16 0;\n    background-color: var(--accent-color);\n    display: table;\n    border-top-left-radius: defaults.$border-radius;\n    border-top-right-radius: defaults.$border-radius;\n\n    &--round,\n    &--round img {\n      border-radius: 50% !important;\n    }\n\n    figcaption {\n      display: table-caption;\n      caption-side: bottom;\n      background-color: var(--accent-color);\n      padding: 0 defaults.$padding-4 defaults.$padding-4;\n      text-align: center;\n      border-bottom-left-radius: defaults.$border-radius;\n      border-bottom-right-radius: defaults.$border-radius;\n    }\n\n    img {\n      max-width: 100%;\n      height: auto;\n    }\n\n    &:has(audio) {\n      width: 100%;\n\n      audio {\n        width: 100%;\n      }\n    }\n  }\n\n  img {\n    max-width: 100%;\n    border-radius: defaults.$border-radius;\n  }\n\n  blockquote {\n    margin: defaults.$padding-16 0;\n    padding: defaults.$padding-8 defaults.$padding-16 defaults.$padding-8\n      (defaults.$padding-16 - defaults.$padding-4); //to keep total left space 16dp\n\n    border: defaults.$border-1 solid var(--accent-color);\n    border-left: defaults.$border-4 solid var(--accent-color);\n    border-radius: defaults.$border-radius;\n  }\n\n  table:not(.lntable):not(.highlight) {\n    display: table;\n    border-spacing: 0;\n    border-collapse: collapse;\n    margin-top: defaults.$padding-16;\n    margin-bottom: defaults.$padding-16;\n    width: 100%;\n    text-align: left;\n\n    thead {\n      border-bottom: defaults.$border-4 solid var(--accent-color);\n    }\n\n    tr th,\n    tr td {\n      padding: defaults.$padding-8 defaults.$padding-16;\n    }\n\n    tr {\n      border-bottom: defaults.$border-2 solid var(--accent-color);\n    }\n\n    tr:nth-child(2n) {\n      background: var(--accent-color-lite);\n    }\n  }\n\n  hr {\n    height: defaults.$border-2;\n    border: none;\n    background: var(--accent-color);\n  }\n\n  ul,\n  ol {\n    padding-left: defaults.$padding-32;\n  }\n\n  dl {\n    dt {\n      font-weight: bolder;\n      margin-top: defaults.$padding-16;\n    }\n\n    dd {\n      margin-left: defaults.$padding-32;\n    }\n  }\n\n  code {\n    padding: defaults.$padding-2 defaults.$padding-4;\n  }\n\n  pre,\n  code {\n    background-color: var(--code-background);\n    border-radius: defaults.$border-radius;\n    color: var(--code-font-color);\n    font-size: defaults.$font-size-14;\n    line-height: defaults.$padding-20;\n  }\n\n  pre code {\n    display: block;\n    padding: defaults.$padding-16;\n    width: 100%;\n    overflow: auto;\n    max-height: var(--code-max-height);\n  }\n\n  mark {\n    background-color: var(--mark-color);\n  }\n\n  &__align {\n    text-align: left;\n    &--left {\n      h1,\n      h2,\n      h3,\n      h4,\n      h5,\n      h6 {\n        justify-content: flex-start;\n      }\n    }\n\n    &--center {\n      text-align: center;\n      h1,\n      h2,\n      h3,\n      h4,\n      h5,\n      h6 {\n        justify-content: center;\n      }\n    }\n\n    &--right {\n      text-align: right;\n      h1,\n      h2,\n      h3,\n      h4,\n      h5,\n      h6 {\n        justify-content: flex-end;\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "src/sass/_mobile.scss",
    "content": "@use \"defaults\";\n\n@media screen and (max-width: defaults.$sm-breakpoint) {\n  .gdoc-nav {\n    margin-left: -(defaults.$menu-width);\n    font-size: defaults.$font-size-base;\n\n    &__control {\n      display: inline-block;\n    }\n  }\n\n  .gdoc-header {\n    svg.gdoc-icon {\n      width: defaults.$font-size-24;\n      height: defaults.$font-size-24;\n    }\n  }\n\n  .gdoc-brand {\n    font-size: defaults.$font-size-24;\n    line-height: defaults.$font-size-24;\n\n    &__img {\n      display: none;\n    }\n  }\n\n  .gdoc-menu-header {\n    &__items {\n      display: none;\n    }\n\n    &__control {\n      svg.gdoc-icon.gdoc_keyboard_arrow_right {\n        display: none;\n      }\n    }\n\n    &__control,\n    &__home {\n      display: flex;\n    }\n  }\n\n  .gdoc-error {\n    padding: defaults.$padding-96 defaults.$padding-16;\n\n    svg.gdoc-icon {\n      width: defaults.$font-size-96;\n      height: defaults.$font-size-96;\n    }\n\n    &__message {\n      padding-left: defaults.$padding-32;\n    }\n\n    &__line {\n      padding: defaults.$padding-4 0;\n    }\n\n    &__title {\n      font-size: defaults.$font-size-32;\n    }\n  }\n\n  .gdoc-page__header .breadcrumb,\n  .hidden-mobile {\n    display: none;\n  }\n\n  .flex-mobile-column {\n    flex-direction: column;\n\n    &.gdoc-columns {\n      margin: defaults.$padding-32 0;\n    }\n\n    .gdoc-columns__content {\n      min-width: auto;\n      margin: 0;\n    }\n  }\n\n  .wrapper:has(#menu-control:checked) {\n    .gdoc-nav nav,\n    .gdoc-page {\n      transform: translateX(defaults.$menu-width);\n    }\n\n    .gdoc-page {\n      opacity: 0.25;\n    }\n\n    svg.gdoc-icon.gdoc_menu {\n      display: none;\n    }\n\n    svg.gdoc-icon.gdoc_arrow_back {\n      display: inline-block;\n    }\n  }\n\n  .wrapper:has(#menu-header-control:checked) {\n    .gdoc-brand {\n      display: none;\n    }\n\n    .gdoc-menu-header {\n      &__items {\n        display: flex;\n      }\n\n      &__control {\n        svg.gdoc-icon.gdoc_keyboard_arrow_left {\n          display: none;\n        }\n        svg.gdoc-icon.gdoc_keyboard_arrow_right {\n          display: inline-block;\n        }\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "src/sass/_normalize.css",
    "content": "/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */\n\n/* Document\n   ========================================================================== */\n\n/**\n * 1. Correct the line height in all browsers.\n * 2. Prevent adjustments of font size after orientation changes in iOS.\n */\n\nhtml {\n  line-height: 1.15; /* 1 */\n  -webkit-text-size-adjust: 100%; /* 2 */\n}\n\n/* Sections\n   ========================================================================== */\n\n/**\n * Remove the margin in all browsers.\n */\n\nbody {\n  margin: 0;\n}\n\n/**\n * Render the `main` element consistently in IE.\n */\n\nmain {\n  display: block;\n}\n\n/**\n * Correct the font size and margin on `h1` elements within `section` and\n * `article` contexts in Chrome, Firefox, and Safari.\n */\n\nh1 {\n  font-size: 2em;\n  margin: 0.67em 0;\n  line-height: 1.2em;\n}\n\n/* Grouping content\n   ========================================================================== */\n\n/**\n * 1. Add the correct box sizing in Firefox.\n * 2. Show the overflow in Edge and IE.\n */\n\nhr {\n  box-sizing: content-box; /* 1 */\n  height: 0; /* 1 */\n  overflow: visible; /* 2 */\n}\n\n/**\n * 1. Correct the inheritance and scaling of font size in all browsers.\n * 2. Correct the odd `em` font sizing in all browsers.\n */\n\npre {\n  font-family: monospace, monospace; /* 1 */\n  font-size: 1em; /* 2 */\n}\n\n/* Text-level semantics\n   ========================================================================== */\n\n/**\n * Remove the gray background on active links in IE 10.\n */\n\na {\n  background-color: transparent;\n}\n\n/**\n * 1. Remove the bottom border in Chrome 57-\n * 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari.\n */\n\nabbr[title] {\n  border-bottom: none; /* 1 */\n  text-decoration: underline; /* 2 */\n  text-decoration: underline dotted; /* 2 */\n}\n\n/**\n * Add the correct font weight in Chrome, Edge, and Safari.\n */\n\nb,\nstrong {\n  font-weight: bolder;\n}\n\n/**\n * 1. Correct the inheritance and scaling of font size in all browsers.\n * 2. Correct the odd `em` font sizing in all browsers.\n */\n\ncode,\nkbd,\nsamp {\n  font-family: monospace, monospace; /* 1 */\n  font-size: 1em; /* 2 */\n}\n\n/**\n * Add the correct font size in all browsers.\n */\n\nsmall {\n  font-size: 80%;\n}\n\n/**\n * Prevent `sub` and `sup` elements from affecting the line height in\n * all browsers.\n */\n\nsub,\nsup {\n  font-size: 75%;\n  line-height: 0;\n  position: relative;\n  vertical-align: baseline;\n}\n\nsub {\n  bottom: -0.25em;\n}\n\nsup {\n  top: -0.5em;\n}\n\n/* Embedded content\n   ========================================================================== */\n\n/**\n * Remove the border on images inside links in IE 10.\n */\n\nimg {\n  border-style: none;\n}\n\n/* Forms\n   ========================================================================== */\n\n/**\n * 1. Change the font styles in all browsers.\n * 2. Remove the margin in Firefox and Safari.\n */\n\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n  font-family: inherit; /* 1 */\n  font-size: 100%; /* 1 */\n  line-height: 1.15; /* 1 */\n  margin: 0; /* 2 */\n}\n\n/**\n * Show the overflow in IE.\n * 1. Show the overflow in Edge.\n */\n\nbutton,\ninput { /* 1 */\n  overflow: visible;\n}\n\n/**\n * Remove the inheritance of text transform in Edge, Firefox, and IE.\n * 1. Remove the inheritance of text transform in Firefox.\n */\n\nbutton,\nselect { /* 1 */\n  text-transform: none;\n}\n\n/**\n * Correct the inability to style clickable types in iOS and Safari.\n */\n\nbutton,\n[type=\"button\"],\n[type=\"reset\"],\n[type=\"submit\"] {\n  -webkit-appearance: button;\n}\n\n/**\n * Remove the inner border and padding in Firefox.\n */\n\nbutton::-moz-focus-inner,\n[type=\"button\"]::-moz-focus-inner,\n[type=\"reset\"]::-moz-focus-inner,\n[type=\"submit\"]::-moz-focus-inner {\n  border-style: none;\n  padding: 0;\n}\n\n/**\n * Restore the focus styles unset by the previous rule.\n */\n\nbutton:-moz-focusring,\n[type=\"button\"]:-moz-focusring,\n[type=\"reset\"]:-moz-focusring,\n[type=\"submit\"]:-moz-focusring {\n  outline: 1px dotted ButtonText;\n}\n\n/**\n * Correct the padding in Firefox.\n */\n\nfieldset {\n  padding: 0.35em 0.75em 0.625em;\n}\n\n/**\n * 1. Correct the text wrapping in Edge and IE.\n * 2. Correct the color inheritance from `fieldset` elements in IE.\n * 3. Remove the padding so developers are not caught out when they zero out\n *    `fieldset` elements in all browsers.\n */\n\nlegend {\n  box-sizing: border-box; /* 1 */\n  color: inherit; /* 2 */\n  display: table; /* 1 */\n  max-width: 100%; /* 1 */\n  padding: 0; /* 3 */\n  white-space: normal; /* 1 */\n}\n\n/**\n * Add the correct vertical alignment in Chrome, Firefox, and Opera.\n */\n\nprogress {\n  vertical-align: baseline;\n}\n\n/**\n * Remove the default vertical scrollbar in IE 10+.\n */\n\ntextarea {\n  overflow: auto;\n}\n\n/**\n * 1. Add the correct box sizing in IE 10.\n * 2. Remove the padding in IE 10.\n */\n\n[type=\"checkbox\"],\n[type=\"radio\"] {\n  box-sizing: border-box; /* 1 */\n  padding: 0; /* 2 */\n}\n\n/**\n * Correct the cursor style of increment and decrement buttons in Chrome.\n */\n\n[type=\"number\"]::-webkit-inner-spin-button,\n[type=\"number\"]::-webkit-outer-spin-button {\n  height: auto;\n}\n\n/**\n * 1. Correct the odd appearance in Chrome and Safari.\n * 2. Correct the outline style in Safari.\n */\n\n[type=\"search\"] {\n  -webkit-appearance: textfield; /* 1 */\n  outline-offset: -2px; /* 2 */\n}\n\n/**\n * Remove the inner padding in Chrome and Safari on macOS.\n */\n\n[type=\"search\"]::-webkit-search-decoration {\n  -webkit-appearance: none;\n}\n\n/**\n * 1. Correct the inability to style clickable types in iOS and Safari.\n * 2. Change font properties to `inherit` in Safari.\n */\n\n::-webkit-file-upload-button {\n  -webkit-appearance: button; /* 1 */\n  font: inherit; /* 2 */\n}\n\n/* Interactive\n   ========================================================================== */\n\n/*\n * Add the correct display in Edge, IE 10+, and Firefox.\n */\n\ndetails {\n  display: block;\n}\n\n/*\n * Add the correct display in all browsers.\n */\n\nsummary {\n  display: list-item;\n}\n\n/* Misc\n   ========================================================================== */\n\n/**\n * Add the correct display in IE 10+.\n */\n\ntemplate {\n  display: none;\n}\n\n/**\n * Add the correct display in IE 10.\n */\n\n[hidden] {\n  display: none;\n}\n"
  },
  {
    "path": "src/sass/_print.scss",
    "content": "@use \"defaults\";\n\n@media print {\n  .gdoc-nav,\n  .gdoc-footer .container span:not(:first-child),\n  .gdoc-paging,\n  .editpage {\n    display: none;\n  }\n\n  .gdoc-footer {\n    border-top: defaults.$border-1 solid defaults.$gray-300;\n  }\n\n  .gdoc-markdown pre {\n    white-space: pre-wrap;\n    overflow-wrap: break-word;\n  }\n\n  .chroma code {\n    border: defaults.$border-1 solid defaults.$gray-300;\n    padding: defaults.$padding-8 !important;\n    font-weight: normal !important;\n  }\n\n  .gdoc-markdown code {\n    font-weight: bold;\n  }\n\n  a,\n  a:visited {\n    color: inherit !important;\n    text-decoration: none !important;\n  }\n\n  .gdoc-toc {\n    flex: none;\n\n    nav {\n      position: relative;\n      width: auto;\n    }\n  }\n\n  .wrapper {\n    display: block;\n\n    main {\n      display: block;\n    }\n  }\n}\n"
  },
  {
    "path": "src/sass/_shortcodes.scss",
    "content": "@use \"sass:color\";\n@use \"defaults\";\n\n// {{< expand \"Label\" \"icon\" >}}\n.gdoc-expand {\n  margin: defaults.$padding-16 0;\n\n  border: defaults.$border-1 solid var(--accent-color);\n  border-radius: defaults.$border-radius;\n\n  overflow: hidden;\n\n  &__head {\n    background: var(--accent-color-lite);\n    padding: defaults.$padding-8 defaults.$padding-16;\n    cursor: pointer;\n    user-select: none;\n  }\n\n  &__content {\n    display: none;\n    padding: 0 defaults.$padding-16;\n  }\n\n  &__control:checked + &__content {\n    display: block;\n  }\n\n  .gdoc-page__anchor {\n    display: none;\n  }\n}\n\n// {{< tabs >}}\n.gdoc-tabs {\n  margin: defaults.$padding-16 0;\n\n  border: defaults.$border-1 solid var(--accent-color);\n  border-radius: defaults.$border-radius;\n\n  overflow: hidden;\n\n  display: flex;\n  flex-wrap: wrap;\n\n  &__label {\n    display: inline-block;\n    padding: defaults.$padding-8 defaults.$padding-16;\n    border-bottom: defaults.$border-1 transparent;\n    cursor: pointer;\n    user-select: none;\n  }\n\n  &__content {\n    order: 999; //Move content blocks to the end\n    width: 100%;\n    border-top: defaults.$border-1 solid var(--accent-color-lite);\n    padding: 0 defaults.$padding-16;\n    display: none;\n  }\n\n  &__control:checked + &__label {\n    border-bottom: defaults.$border-2 solid var(--link-color);\n  }\n  &__control:checked + &__label + &__content {\n    display: block;\n  }\n\n  .gdoc-page__anchor {\n    display: none;\n  }\n}\n\n// {{< columns >}}\n.gdoc-columns {\n  margin: defaults.$padding-16 0;\n\n  &--regular > :first-child {\n    flex: 1;\n  }\n\n  &--small > :first-child {\n    flex: 0.35;\n    min-width: defaults.$body-min-width * 0.35;\n  }\n\n  &--large > :first-child {\n    flex: 1.65;\n    min-width: defaults.$body-min-width * 1.65;\n  }\n\n  &__content {\n    flex: 1 1;\n    min-width: defaults.$body-min-width * 0.66;\n    padding: 0;\n  }\n\n  .gdoc-page__anchor {\n    display: none;\n  }\n}\n\n// {{< button >}}\n.gdoc-button {\n  $root: &;\n  margin: defaults.$padding-16 0;\n\n  display: inline-block;\n  background: var(--accent-color-lite);\n  border: defaults.$border-1 solid var(--accent-color);\n  border-radius: defaults.$border-radius;\n  cursor: pointer;\n  user-select: none;\n\n  &__link {\n    display: inline-block;\n    color: inherit !important;\n    text-decoration: none !important;\n  }\n\n  &:hover {\n    background: var(--button-background);\n    border-color: var(--button-border-color);\n    color: defaults.$gray-100;\n  }\n\n  &--regular {\n    font-size: defaults.$font-size-base;\n\n    #{$root}__link {\n      padding: defaults.$padding-4 defaults.$padding-8;\n    }\n  }\n\n  &--large {\n    font-size: defaults.$font-size-20;\n\n    #{$root}__link {\n      padding: defaults.$padding-8 defaults.$padding-16;\n    }\n  }\n}\n\n// {{< hint >}}\n.gdoc-hint {\n  $root: &;\n  @each $name, $color in defaults.$hint-colors {\n    &.#{$name} {\n      border-color: $color;\n      padding: 0;\n\n      #{$root}__title {\n        background-color: color.adjust($color, $alpha: -0.9);\n        border-start-start-radius: inherit;\n        border-start-end-radius: inherit;\n        position: relative;\n        z-index: -10;\n        outline: color.adjust($color, $alpha: -0.9);\n      }\n    }\n  }\n\n  &__title {\n    padding: defaults.$padding-4 defaults.$padding-16;\n    font-weight: bold;\n    color: var(--body-font-color);\n    margin-left: -5px;\n\n    @each $name, $icon in defaults.$hint-icons {\n      i.fa.#{$name} {\n        width: defaults.$font-size-24;\n        height: defaults.$font-size-24;\n\n        mask-image: url(img/geekdoc-stack.svg##{$icon});\n        mask-repeat: no-repeat;\n        mask-size: contain;\n        background-color: var(--body-font-color);\n      }\n    }\n\n    .gdoc-icon {\n      width: defaults.$font-size-24;\n      height: defaults.$font-size-24;\n    }\n  }\n\n  &__text {\n    padding: defaults.$padding-4 defaults.$padding-16;\n  }\n\n  .gdoc-page__anchor {\n    display: none;\n  }\n}\n\n// {{< mermaid >}}\n.gdoc-mermaid {\n  font-family: var(--body-font-family);\n\n  // Fix height of mermaid SVG elements (see https://github.com/mermaid-js/mermaid/issues/2481)\n  > svg {\n    height: 100%;\n    padding: defaults.$padding-8;\n  }\n}\n\n// {{< propertylist >}}\n.gdoc-props {\n  &__title,\n  &__default {\n    padding: 0;\n    margin: 0;\n    font-family: var(--code-font-family);\n  }\n\n  &__meta {\n    gap: 0.5em;\n    line-height: normal;\n    margin-bottom: defaults.$padding-4;\n\n    &:hover .gdoc-page__anchor svg.gdoc-icon {\n      color: var(--control-icons);\n    }\n  }\n\n  @each $name, $color in defaults.$hint-colors {\n    &__tag.#{$name} {\n      border-color: color.scale($color, $lightness: 90%, $saturation: -30%);\n      background-color: color.scale($color, $lightness: 95%, $saturation: -30%);\n    }\n  }\n\n  &__tag {\n    font-size: defaults.$font-size-14;\n    font-weight: normal;\n    background-color: defaults.$gray-100;\n    border: defaults.$border-1 solid defaults.$gray-200;\n    border-radius: defaults.$border-radius;\n    padding: defaults.$padding-2 defaults.$padding-4;\n    color: defaults.$body-font-color;\n  }\n\n  &__default {\n    font-size: defaults.$font-size-14;\n  }\n}\n\n// {{% progress %}}\n.gdoc-progress {\n  margin-bottom: defaults.$padding-16;\n\n  &__label {\n    padding: defaults.$padding-4 0;\n\n    &--name {\n      font-weight: bold;\n    }\n  }\n\n  &__wrap {\n    background-color: var(--accent-color-lite);\n    border-radius: 1em;\n    box-shadow: inset 0 0 0 defaults.$border-1 var(--accent-color);\n  }\n\n  &__bar {\n    height: 1em;\n    border-radius: 1em;\n    background-image: linear-gradient(\n      -45deg,\n      rgba(255, 255, 255, 0.125) 25%,\n      transparent 25%,\n      transparent 50%,\n      rgba(255, 255, 255, 0.125) 50%,\n      rgba(255, 255, 255, 0.125) 75%,\n      transparent 75%,\n      transparent\n    );\n    background-size: 2.5em 2.5em;\n    background-color: defaults.$main-color;\n\n    @each $name, $color in defaults.$hint-colors {\n      &.#{$name} {\n        background-image: linear-gradient(\n          -45deg,\n          #{color.scale($color, $lightness: -20%)} 25%,\n          transparent 25%,\n          transparent 50%,\n          #{color.scale($color, $lightness: -20%)} 50%,\n          #{color.scale($color, $lightness: -20%)} 75%,\n          transparent 75%,\n          transparent\n        );\n\n        background-color: $color;\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "src/sass/_utils.scss",
    "content": "@use \"defaults\";\n\n.flex {\n  display: flex;\n}\n\n.flex-auto {\n  flex: 1 1 auto;\n}\n\n.flex-25 {\n  flex: 1 1 25%;\n}\n\n.flex-inline {\n  display: inline-flex;\n}\n\n.flex-even {\n  flex: 1 1;\n}\n\n.flex-wrap {\n  flex-wrap: wrap;\n}\n\n.flex-grid {\n  flex-direction: column;\n  border: defaults.$border-1 solid var(--accent-color);\n  border-radius: defaults.$border-radius;\n  background: var(--accent-color-lite);\n}\n\n.gap-8 {\n  flex-wrap: wrap;\n  gap: defaults.$padding-8;\n}\n\n.gap-16 {\n  flex-wrap: wrap;\n  gap: defaults.$padding-16;\n}\n\n.justify-start {\n  justify-content: flex-start;\n}\n\n.justify-end {\n  justify-content: flex-end;\n}\n\n.justify-center {\n  justify-content: center;\n}\n\n.justify-between {\n  justify-content: space-between;\n}\n\n.align-center {\n  align-items: center;\n}\n\n.mx-auto {\n  margin: 0 auto;\n}\n\n.text-center {\n  text-align: center;\n}\n\n.text-right {\n  text-align: right;\n}\n\n.no-wrap {\n  white-space: nowrap;\n}\n\n.hidden {\n  display: none !important;\n}\n\n.svg-sprite {\n  position: absolute;\n  width: 0;\n  height: 0;\n  overflow: hidden;\n}\n\n.table-wrap {\n  overflow: auto;\n  margin: defaults.$padding-16 0;\n\n  > table {\n    margin: 0 !important;\n  }\n}\n\n.badge-placeholder {\n  display: inline-block;\n  min-width: 4rem;\n}\n\n.w-full {\n  width: 100%;\n}\n"
  },
  {
    "path": "src/sass/main.scss",
    "content": "@use \"_normalize\";\n@use \"_utils\";\n@use \"_fonts\";\n@use \"_base\";\n\n@use \"_markdown\";\n@use \"_asciidoc\";\n@use \"_shortcodes\";\n"
  },
  {
    "path": "src/sass/mobile.scss",
    "content": "@use \"sass:color\";\n\n@use \"_defaults\";\n@use \"_mobile\";\n"
  },
  {
    "path": "src/sass/print.scss",
    "content": "@use \"sass:color\";\n\n@use \"_defaults\";\n@use \"_print\";\n"
  },
  {
    "path": "src/static/custom.css",
    "content": "/* You can add custom styles here. */\n"
  },
  {
    "path": "svgsprite.config.json",
    "content": "{\n  \"shape\": {\n    \"id\": {\n      \"generator\": \"gdoc_%s\"\n    },\n    \"dimension\": {\n      \"maxWidth\": 22,\n      \"maxHeight\": 22,\n      \"attributes\": false\n    },\n    \"spacing\": {\n      \"padding\": 5,\n      \"box\": \"content\"\n    },\n    \"dest\": \"build/icons\"\n  },\n  \"svg\": {\n    \"xmlDeclaration\": false,\n    \"rootAttributes\": {\n      \"class\": \"svg-sprite\"\n    }\n  },\n  \"mode\": {\n    \"defs\": {\n      \"dest\": \"build/sprites/\",\n      \"sprite\": \"geekdoc.svg\",\n      \"bust\": false\n    },\n    \"stack\": {\n      \"dest\": \"build/img/\",\n      \"sprite\": \"geekdoc-stack.svg\",\n      \"bust\": false\n    }\n  }\n}\n"
  },
  {
    "path": "theme.toml",
    "content": "name = \"Geekdoc\"\nlicense = \"MIT\"\nlicenselink = \"https://github.com/thegeeklab/hugo-geekdoc/blob/main/LICENSE\"\ndescription = \"Hugo theme made for documentation\"\nhomepage = \"https://geekdocs.de/\"\ndemosite = \"https://geekdocs.de/\"\ntags = [\"docs\", \"documentation\", \"responsive\", \"simple\"]\nmin_version = \"0.156\"\n\n[author]\n    name = \"Robert Kaussow\"\n    homepage = \"https://thegeeklab.de/\"\n"
  },
  {
    "path": "webpack.config.js",
    "content": "import path from \"path\"\nimport { glob } from \"glob\"\nimport { fileURLToPath } from \"url\"\n\nimport { WebpackManifestPlugin } from \"webpack-manifest-plugin\"\nimport FaviconsWebpackPlugin from \"favicons-webpack-plugin\"\nimport RemoveEmptyScriptsPlugin from \"webpack-remove-empty-scripts\"\nimport CopyPlugin from \"copy-webpack-plugin\"\nimport { SRIPlugin, GitVersionPlugin } from \"./webpack.plugins.js\"\n\nconst __filename = fileURLToPath(import.meta.url)\nconst __dirname = path.dirname(__filename)\nconst nodeModulesPath = path.resolve(__dirname, \"node_modules\")\n\nvar config = {\n  entry: {\n    css: [\n      path.resolve(\"src\", \"sass\", \"main.scss\"),\n      path.resolve(\"src\", \"sass\", \"mobile.scss\"),\n      path.resolve(\"src\", \"sass\", \"print.scss\")\n    ],\n    main: path.resolve(\"src\", \"js\", \"index.js\"),\n    colortheme: path.resolve(\"src\", \"js\", \"colorTheme.js\"),\n    mermaid: path.resolve(\"src\", \"js\", \"mermaid.js\"),\n    katex: [path.resolve(\"src\", \"js\", \"katex.js\")].concat(\n      glob.sync(path.join(nodeModulesPath, \"katex\", \"dist\", \"fonts\", \"*.{woff,woff2}\"))\n    ),\n    search: [path.resolve(\"src\", \"js\", \"search.js\")]\n  },\n  output: {\n    filename: \"js/[name]-[contenthash:8].bundle.min.js\",\n    chunkFilename: \"js/[name]-[contenthash:8].chunk.min.js\",\n    path: path.join(__dirname, \"static\"),\n    clean: true\n  },\n  watchOptions: {\n    ignored: [\"/exampleSite/\", \"/node_modules/\"]\n  },\n  target: [\"web\", \"es2017\"],\n  plugins: [\n    new CopyPlugin({\n      patterns: [\n        {\n          from: \"**/*\",\n          context: path.resolve(__dirname, \"src\", \"static\")\n        },\n        {\n          from: \"fonts/*.{woff,woff2}\",\n          context: path.resolve(__dirname, \"build\")\n        },\n        {\n          from: \"sprites/*.svg\",\n          to: path.resolve(__dirname, \"assets\"),\n          context: path.resolve(__dirname, \"build\")\n        },\n        {\n          from: \"img/*.svg\",\n          context: path.resolve(__dirname, \"build\")\n        }\n      ]\n    }),\n\n    new FaviconsWebpackPlugin({\n      logo: path.resolve(\"src\", \"static\", \"favicon\", \"favicon.svg\"),\n      prefix: \"favicon/\",\n      inject: false,\n      favicons: {\n        background: \"#efefef\",\n        theme_color: \"#efefef\",\n        icons: {\n          android: { offset: 10 },\n          appleIcon: { offset: 10 },\n          appleStartup: { offset: 10 },\n          favicons: true,\n          windows: { offset: 10 },\n          yandex: false\n        }\n      }\n    }),\n\n    new RemoveEmptyScriptsPlugin(),\n\n    new WebpackManifestPlugin({\n      fileName: \"../data/assets.json\",\n      publicPath: \"\",\n      writeToFileEmit: true,\n      generate(seed, files) {\n        let manifest = {}\n\n        files.forEach(function (element) {\n          if (element.name.endsWith(\"VERSION\")) return\n          if (element.name.endsWith(\".svg\")) return\n          if (element.name.startsWith(\"fonts/\")) return\n          if (element.name.startsWith(\"/favicon\")) return\n\n          Object.assign(manifest, {\n            [element.name]: { src: element.path }\n          })\n        })\n\n        return manifest\n      }\n    }),\n\n    new SRIPlugin({\n      sourceFile: \"data/assets.json\"\n    }),\n\n    new GitVersionPlugin({\n      outputFile: \"../VERSION\"\n    })\n  ]\n}\n\nexport default (env, argv) => {\n  if (argv.mode === \"development\") {\n    config.devtool = \"source-map\"\n  }\n\n  config.module = {\n    rules: [\n      {\n        test: /\\.(woff|woff2|eot|ttf|otf)$/i,\n        type: \"asset/resource\",\n        generator: {\n          filename: \"fonts/[name][ext]\"\n        }\n      },\n      {\n        test: /\\.(sa|sc|c)ss$/i,\n        type: \"asset/resource\",\n        generator: {\n          filename: \"[name]-[contenthash:8].min.css\"\n        },\n        use: [\n          {\n            loader: \"postcss-loader\",\n            options: {\n              postcssOptions: {\n                plugins: [\"autoprefixer\"]\n              }\n            }\n          },\n          {\n            loader: \"sass-loader\",\n            options: {\n              sourceMap: argv.mode === \"development\" ? true : false,\n              sassOptions: {\n                outputStyle: argv.mode === \"development\" ? \"expanded\" : \"compressed\"\n              }\n            }\n          }\n        ]\n      }\n    ]\n  }\n\n  return config\n}\n"
  },
  {
    "path": "webpack.plugins.js",
    "content": "import fs from \"fs\"\nimport crypto from \"crypto\"\nimport path from \"path\"\nimport { validate } from \"schema-utils\"\n\nimport { access as accessCps } from \"fs\"\nimport { execFile as execFileCps } from \"child_process\"\nimport { promisify } from \"util\"\n\nclass SRIPlugin {\n  static defaultOptions = {\n    algorithm: \"sha512\",\n    sourceFile: \"assets.json\"\n  }\n\n  constructor(options = {}) {\n    this.options = { ...SRIPlugin.defaultOptions, ...options }\n\n    validate(\n      {\n        type: \"object\",\n        properties: {\n          sourceFile: { type: \"string\" },\n          outputFile: { type: \"string\" },\n          algorithm: { type: \"string\" }\n        }\n      },\n      options,\n      {\n        name: \"SRI Plugin\",\n        baseDataPath: \"options\"\n      }\n    )\n  }\n\n  apply(compiler) {\n    compiler.hooks.done.tap(\"SRIPlugin\", () => {\n      const data = JSON.parse(fs.readFileSync(this.options.sourceFile, \"utf8\"))\n      const outputFile = this.options.outputFile || this.options.sourceFile\n      const { algorithm } = this.options\n\n      const calculateSRI = (file) => {\n        const fileContent = fs.readFileSync(path.join(\".\", \"static\", file))\n        const hash = crypto.createHash(algorithm).update(fileContent).digest(\"base64\")\n        return `${algorithm}-${hash}`\n      }\n\n      Object.keys(data).forEach((key) => {\n        data[key].integrity = calculateSRI(data[key].src)\n      })\n\n      fs.writeFileSync(outputFile, JSON.stringify(data, null, 2), { encoding: \"utf8\", flag: \"w\" })\n    })\n  }\n}\n\nclass GitVersionPlugin {\n  static defaultOptions = {\n    outputFile: \"VERSION\"\n  }\n\n  constructor(options = {}) {\n    this.options = { ...GitVersionPlugin.defaultOptions, ...options }\n\n    validate(\n      {\n        type: \"object\",\n        properties: {\n          outputFile: { type: \"string\" }\n        }\n      },\n      options,\n      {\n        baseDataPath: \"options\",\n        name: \"GitVersion Plugin\"\n      }\n    )\n  }\n\n  apply(compiler) {\n    const { webpack, hooks, context } = compiler\n    const { Compilation } = webpack\n\n    hooks.beforeCompile.tapPromise(\"GitVersionPlugin\", async () => {\n      const access = promisify(accessCps)\n\n      try {\n        await access(\".git\")\n        this.dependsOnGit = true\n      } catch {\n        this.dependsOnGit = false\n      }\n    })\n\n    hooks.compilation.tap(\"GitVersionPlugin\", (compilation) => {\n      if (this.dependsOnGit) {\n        compilation.fileDependencies.add(path.join(context, \".git/logs/HEAD\"))\n        compilation.contextDependencies.add(path.join(context, \".git/refs/tags\"))\n      }\n\n      compilation.hooks.processAssets.tapPromise(\n        {\n          name: \"GitVersionPlugin\",\n          stage: Compilation.PROCESS_ASSETS_STAGE_ADDITIONAL\n        },\n        async (assets) => {\n          try {\n            const v = await this.version()\n\n            assets[this.options.outputFile] = {\n              source: () => `${v}\\n`,\n              size: () => v.length + 1\n            }\n          } catch {\n            assets[this.options.outputFile] = {\n              source: () => \"\",\n              size: () => 0\n            }\n          }\n        }\n      )\n    })\n  }\n\n  async version() {\n    const execFile = promisify(execFileCps)\n\n    try {\n      const { stdout: describe } = await execFile(\"git\", [\"describe\", \"--long\", \"--tags\"])\n      const [, tag, offset] = describe.trim().match(/^(.*)-(\\d+)-g[0-9a-f]+$/)\n      return parseInt(offset) === 0 ? tag : this.getBranchAndHash()\n    } catch {\n      return this.getBranchAndHash()\n    }\n  }\n\n  async getBranchAndHash() {\n    const execFile = promisify(execFileCps)\n    const [{ stdout: branch }, { stdout: hash }] = await Promise.all([\n      execFile(\"git\", [\"rev-parse\", \"--abbrev-ref\", \"HEAD\"]),\n      execFile(\"git\", [\"rev-parse\", \"HEAD\"])\n    ])\n    return `${branch.trim()}@${hash.substring(0, 7)}`\n  }\n}\n\nexport { SRIPlugin, GitVersionPlugin }\n"
  }
]